From b50dbe9195bf0b1503ac6ae83a0f64673d9d8625 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Sat, 6 May 2023 01:45:01 -0500 Subject: [PATCH 01/21] building! --- apps/tests/aws-runtime/test/test-service.ts | 53 +- .../@eventual/aws-cdk/src/entity-service.ts | 35 +- packages/@eventual/aws-runtime/package.json | 1 + packages/@eventual/aws-runtime/src/create.ts | 9 +- .../src/handlers/apig-command-adapter.ts | 2 +- .../src/handlers/bucket-handler-worker.ts | 14 +- .../src/handlers/command-worker.ts | 4 +- .../src/handlers/entity-stream-worker.ts | 43 +- .../aws-runtime/src/handlers/orchestrator.ts | 6 +- .../src/handlers/subscription-worker.ts | 4 +- .../src/handlers/system-command-handler.ts | 2 +- .../aws-runtime/src/handlers/task-worker.ts | 4 +- .../src/handlers/transaction-worker.ts | 8 +- .../aws-runtime/src/stores/entity-store.ts | 353 +- packages/@eventual/cli/src/display/event.ts | 83 +- .../@eventual/compiler/src/eventual-infer.ts | 2 + .../core-runtime/src/clients/entity-client.ts | 75 - .../core-runtime/src/clients/index.ts | 1 - .../src/handlers/transaction-worker.ts | 3 + .../core-runtime/src/handlers/utils.ts | 9 +- .../core-runtime/src/local/local-container.ts | 23 +- .../src/local/local-environment.ts | 7 +- .../src/local/stores/entity-store.ts | 196 +- .../src/providers/entity-provider.ts | 21 + .../core-runtime/src/providers/index.ts | 1 + .../src/providers/workflow-provider.ts | 6 - .../core-runtime/src/stores/entity-store.ts | 102 +- .../core-runtime/src/transaction-executor.ts | 122 +- packages/@eventual/core-runtime/src/utils.ts | 34 +- .../src/workflow-call-executor.ts | 35 +- .../test/command-executor.test.ts | 113 +- .../test/transaction-executor.test.ts | 136 +- packages/@eventual/core/src/entity.ts | 356 +- packages/@eventual/core/src/internal/calls.ts | 70 +- .../core/src/internal/entity-hook.ts | 20 +- .../@eventual/core/src/internal/global.ts | 8 +- .../core/src/internal/service-spec.ts | 6 +- packages/@eventual/testing/src/environment.ts | 5 +- packages/@eventual/testing/test/env.test.ts | 107 +- pnpm-lock.yaml | 15413 ++++++---------- 40 files changed, 6299 insertions(+), 11193 deletions(-) delete mode 100644 packages/@eventual/core-runtime/src/clients/entity-client.ts create mode 100644 packages/@eventual/core-runtime/src/providers/entity-provider.ts diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index d3a2f8459..9ea25b4fd 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -548,7 +548,10 @@ export const createAndDestroyWorkflow = workflow( } ); -export const counter = entity<{ n: number }>("counter2", z.any()); +export const counter = entity("counter2", { + schema: z.object({ n: z.number(), id: z.string() }), + partitionKey: "id", +}); const entityEvent = event<{ id: string }>("entityEvent"); const entitySignal = signal("entitySignal"); const entitySignal2 = signal<{ n: number }>("entitySignal2"); @@ -561,19 +564,19 @@ export const counterWatcher = counter.stream( // TODO: compute the possible operations union from the operations array if (item.operation === "remove") { const { n } = item.oldValue!; - await entitySignal2.sendSignal(item.key, { n: n + 1 }); + await entitySignal2.sendSignal(item.key.id, { n: n + 1 }); } } ); export const counterNamespaceWatcher = counter.stream( "counterNamespaceWatch", - { namespacePrefixes: ["different"] }, + { partitionPrefixes: ["different"] }, async (item) => { if (item.operation === "insert") { const value = await counter.get(item.key); - await counter.set(item.key, { n: (value?.n ?? 0) + 1 }); - await entitySignal.sendSignal(item.key); + await counter.set({ ...item.key, n: (value?.n ?? 0) + 1 }); + await entitySignal.sendSignal(item.key.id); } } ); @@ -582,8 +585,8 @@ export const onEntityEvent = subscription( "onEntityEvent", { events: [entityEvent] }, async ({ id }) => { - const value = await counter.get(id); - await counter.set(id, { n: (value?.n ?? 0) + 1 }); + const value = await counter.get([id]); + await counter.set({ id, n: (value?.n ?? 0) + 1 }); await entitySignal.sendSignal(id); } ); @@ -591,28 +594,27 @@ export const onEntityEvent = subscription( export const entityTask = task( "entityAct", async (_, { execution: { id } }) => { - const value = await counter.get(id); - await counter.set(id, { n: (value?.n ?? 0) + 1 }); + const value = await counter.get([id]); + await counter.set({ id, n: (value?.n ?? 0) + 1 }); } ); export const entityWorkflow = workflow( "entityWorkflow", async (_, { execution: { id } }) => { - await counter.set(id, { n: 1 }); - counter.set({ key: id, namespace: "different!" }, { n: 0 }); + await counter.set({ id, n: 1 }); await entitySignal.expectSignal(); await entityTask(); await Promise.all([entityEvent.emit({ id }), entitySignal.expectSignal()]); try { // will fail - await counter.set(id, { n: 0 }, { expectedVersion: 1 }); + await counter.set({ id, n: 0 }, { expectedVersion: 1 }); } catch (err) { console.error("expected the entity set to fail", err); } - const { entity, version } = (await counter.getWithMetadata(id)) ?? {}; - await counter.set(id, { n: entity!.n + 1 }, { expectedVersion: version }); - const value = await counter.get(id); + const { entity, version } = (await counter.getWithMetadata([id])) ?? {}; + await counter.set({ id, n: entity!.n + 1 }, { expectedVersion: version }); + const value = await counter.get([id]); await Entity.transactWrite([ { entity: counter, @@ -624,18 +626,21 @@ export const entityWorkflow = workflow( }, ]); // send deletion, to be picked up by the stream - counter.delete(id); - await counter.list({}); + counter.delete([id]); + await counter.query({ partition: id }); // this signal will contain the final value after deletion return await entitySignal2.expectSignal(); } ); -export const check = entity<{ n: number }>("check"); +export const check = entity("check", { + schema: z.object({ n: z.number(), id: z.string() }), + partitionKey: "id", +}); const gitErDone = transaction("gitErDone", async ({ id }: { id: string }) => { - const val = await check.get(id); - await check.set(id, { n: val?.n ?? 0 + 1 }); + const val = await check.get([id]); + await check.set({ id, n: val?.n ?? 0 + 1 }); return val?.n ?? 0 + 1; }); @@ -646,7 +651,7 @@ const noise = task( let transact: Promise | undefined = undefined; while (n-- > 0) { try { - await check.set(id, { n }); + await check.set({ id, n }); } catch (err) { if (!(err instanceof TransactionConflictException)) { throw err; @@ -666,11 +671,11 @@ export const transactionWorkflow = workflow( const one = await noise({ x: 40 }); const two = await noise({ x: 60 }); const [, three] = await Promise.allSettled([ - check.set(id, { n: two ?? 0 + 1 }), + check.set({ id, n: two ?? 0 + 1 }), gitErDone({ id }), - check.set(id, { n: two ?? 0 + 1 }), + check.set({ id, n: two ?? 0 + 1 }), ]); - await check.delete(id); + await check.delete([id]); return [one, two, three.status === "fulfilled" ? three.value : "AHHH"]; } ); diff --git a/packages/@eventual/aws-cdk/src/entity-service.ts b/packages/@eventual/aws-cdk/src/entity-service.ts index 1b2f5f1b2..c419fa345 100644 --- a/packages/@eventual/aws-cdk/src/entity-service.ts +++ b/packages/@eventual/aws-cdk/src/entity-service.ts @@ -1,5 +1,4 @@ import { - EntityEntityRecord, entityServiceTableName, entityServiceTableSuffix, ENV_NAMES, @@ -217,13 +216,16 @@ export class Entity extends Construct { props.entity.name ), partitionKey: { - name: "pk", - type: AttributeType.STRING, - }, - sortKey: { - name: "sk", + name: props.entity.partitionKey, + // TODO: need to determine type... type: AttributeType.STRING, }, + sortKey: props.entity.sortKey + ? { + name: props.entity.sortKey, + type: AttributeType.STRING, + } + : undefined, billingMode: BillingMode.PAY_PER_REQUEST, removalPolicy: RemovalPolicy.DESTROY, // only include the stream if there are listeners @@ -257,8 +259,8 @@ export class EntityStream extends Construct implements EventualResource { constructor(scope: Construct, id: string, props: EntityStreamProps) { super(scope, id); - const namespaces = props.stream.spec.options?.namespaces; - const namespacePrefixes = props.stream.spec.options?.namespacePrefixes; + const partitions = props.stream.spec.options?.partitions; + const partitionPrefixes = props.stream.spec.options?.partitionPrefixes; const streamName = props.stream.spec.name; const entityName = props.stream.spec.entityName; @@ -272,24 +274,19 @@ export class EntityStream extends Construct implements EventualResource { ), } : undefined), - ...((namespaces && namespaces.length > 0) || - (namespacePrefixes && namespacePrefixes.length > 0) + ...((partitions && partitions.length > 0) || + (partitionPrefixes && partitionPrefixes.length > 0) ? { dynamodb: { Keys: { pk: { S: FilterRule.or( // for each namespace given, match the complete name. - ...(namespaces - ? namespaces.map((n) => EntityEntityRecord.key(n)) - : []), + ...(partitions ? partitions : []), // for each namespace prefix given, build a prefix statement for each one. - ...(namespacePrefixes - ? namespacePrefixes.flatMap( - (n) => - FilterRule.beginsWith( - EntityEntityRecord.key(n) - ) as unknown as string[] + ...(partitionPrefixes + ? partitionPrefixes.flatMap( + (n) => FilterRule.beginsWith(n) as unknown as string[] ) : []) ), diff --git a/packages/@eventual/aws-runtime/package.json b/packages/@eventual/aws-runtime/package.json index 0a08c2566..d3076c5e3 100644 --- a/packages/@eventual/aws-runtime/package.json +++ b/packages/@eventual/aws-runtime/package.json @@ -21,6 +21,7 @@ "@aws-sdk/client-scheduler": "^3.254.0", "@aws-sdk/client-sqs": "^3.254.0", "@aws-sdk/s3-request-presigner": "^3.254.0", + "@aws-sdk/util-dynamodb": "^3.254.0", "@eventual/aws-client": "workspace:^", "@eventual/core": "workspace:^", "@eventual/core-runtime": "workspace:^", diff --git a/packages/@eventual/aws-runtime/src/create.ts b/packages/@eventual/aws-runtime/src/create.ts index 648753068..515d716de 100644 --- a/packages/@eventual/aws-runtime/src/create.ts +++ b/packages/@eventual/aws-runtime/src/create.ts @@ -9,9 +9,9 @@ import { Client, Pluggable } from "@aws-sdk/types"; import { AWSHttpEventualClient } from "@eventual/aws-client"; import { LogLevel } from "@eventual/core"; import { - EntityClient, ExecutionQueueClient, ExecutionStore, + GlobalEntityProvider, GlobalTaskProvider, GlobalWorkflowProvider, LogAgent, @@ -217,15 +217,12 @@ export const createExecutionHistoryStateStore = /* @__PURE__ */ memoize( }) ); -export const createEntityClient = memoize( - () => new EntityClient(createEntityStore()) -); - export const createEntityStore = memoize( () => new AWSEntityStore({ dynamo: dynamo(), serviceName: env.serviceName, + entityProvider: new GlobalEntityProvider(), }) ); @@ -234,7 +231,7 @@ export const createBucketStore = memoize( new AWSBucketStore({ s3: s3(), serviceName: env.serviceName, - bucketOverrides: env.bucketOverrides + bucketOverrides: env.bucketOverrides, }) ); diff --git a/packages/@eventual/aws-runtime/src/handlers/apig-command-adapter.ts b/packages/@eventual/aws-runtime/src/handlers/apig-command-adapter.ts index 26ed713be..563109fd2 100644 --- a/packages/@eventual/aws-runtime/src/handlers/apig-command-adapter.ts +++ b/packages/@eventual/aws-runtime/src/handlers/apig-command-adapter.ts @@ -42,7 +42,7 @@ export function createApiGCommandAdaptor({ : undefined; registerWorkerIntrinsics({ bucketStore: undefined, - entityClient: undefined, + entityStore: undefined, serviceClient, serviceSpec, serviceUrl, diff --git a/packages/@eventual/aws-runtime/src/handlers/bucket-handler-worker.ts b/packages/@eventual/aws-runtime/src/handlers/bucket-handler-worker.ts index 48dc265be..72f01c7b6 100644 --- a/packages/@eventual/aws-runtime/src/handlers/bucket-handler-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/bucket-handler-worker.ts @@ -5,24 +5,22 @@ import "@eventual/injected/entry"; import { createBucketNotificationHandlerWorker, getLazy, - promiseAllSettledPartitioned, + promiseAllSettledPartitioned } from "@eventual/core-runtime"; import { S3Handler } from "aws-lambda"; import { createBucketStore, - createEntityClient, - createServiceClient, + createEntityStore, + createServiceClient } from "../create.js"; import { - bucketName, - bucketHandlerName, - serviceName, - serviceUrl, + bucketHandlerName, bucketName, serviceName, + serviceUrl } from "../env.js"; const worker = createBucketNotificationHandlerWorker({ bucketStore: createBucketStore(), - entityClient: createEntityClient(), + entityStore: createEntityStore(), serviceClient: createServiceClient({}), serviceName, serviceSpec, diff --git a/packages/@eventual/aws-runtime/src/handlers/command-worker.ts b/packages/@eventual/aws-runtime/src/handlers/command-worker.ts index 9c4787fdb..f3b866a37 100644 --- a/packages/@eventual/aws-runtime/src/handlers/command-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/command-worker.ts @@ -4,7 +4,7 @@ import serviceSpec from "@eventual/injected/spec"; import { createCommandWorker } from "@eventual/core-runtime"; import { createBucketStore, - createEntityClient, + createEntityStore, createEventClient, createServiceClient, createTransactionClient, @@ -21,7 +21,7 @@ import { serviceName } from "../env.js"; export default createApiGCommandAdaptor({ commandWorker: createCommandWorker({ bucketStore: createBucketStore(), - entityClient: createEntityClient(), + entityStore: createEntityStore(), // the service client, spec, and service url will be created at runtime, using a computed uri from the apigateway request serviceClient: undefined, serviceSpec: undefined, diff --git a/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts b/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts index f1c99d2d8..d8bb643d7 100644 --- a/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts @@ -12,7 +12,7 @@ import { EntityStreamOperation } from "@eventual/core/internal"; import { DynamoDBStreamHandler } from "aws-lambda"; import { createBucketStore, - createEntityClient, + createEntityStore, createServiceClient, } from "../create.js"; import { @@ -22,10 +22,12 @@ import { serviceUrl, } from "../env.js"; import { EntityEntityRecord } from "../stores/entity-store.js"; +import { unmarshall } from "@aws-sdk/util-dynamodb"; +import { AttributeValue } from "@aws-sdk/client-dynamodb"; const worker = createEntityStreamWorker({ bucketStore: createBucketStore(), - entityClient: createEntityClient(), + entityStore: createEntityStore(), serviceClient: createServiceClient({}), serviceSpec, serviceName, @@ -40,9 +42,7 @@ export default (async (event) => { records, async (record) => { try { - const keys = record.dynamodb?.Keys as Partial; - const pk = keys?.pk?.S; - const sk = keys?.sk?.S; + const keys = record.dynamodb?.Keys; const operation = record.eventName?.toLowerCase() as | EntityStreamOperation | undefined; @@ -53,29 +53,24 @@ export default (async (event) => { | Partial | undefined; - if (pk && sk && operation) { - const namespace = - EntityEntityRecord.parseNamespaceFromPartitionKey(pk); - const key = EntityEntityRecord.parseKeyFromSortKey(sk); + const { __version: newVersion = undefined, ...newValue } = newItem + ? unmarshall(newItem as Record) + : {}; - const item: EntityStreamItem = { + const { __version: oldVersion = undefined, ...oldValue } = oldItem + ? unmarshall(newItem as Record) + : {}; + + if (keys && operation) { + const item: EntityStreamItem = { entityName: getLazy(entityName), streamName: getLazy(entityStreamName), - namespace, - key, - newValue: newItem?.value?.S - ? JSON.parse(newItem?.value?.S) - : undefined, - newVersion: newItem?.version?.N - ? Number(newItem?.version?.N) - : (undefined as any), + key: unmarshall(keys as Record), + newValue, + newVersion, operation, - oldValue: oldItem?.value?.S - ? JSON.parse(oldItem?.value?.S) - : undefined, - oldVersion: oldItem?.version?.N - ? Number(oldItem?.version?.N) - : undefined, + oldValue, + oldVersion, }; return worker(item); diff --git a/packages/@eventual/aws-runtime/src/handlers/orchestrator.ts b/packages/@eventual/aws-runtime/src/handlers/orchestrator.ts index 15856429b..3a58ad1f9 100644 --- a/packages/@eventual/aws-runtime/src/handlers/orchestrator.ts +++ b/packages/@eventual/aws-runtime/src/handlers/orchestrator.ts @@ -1,16 +1,16 @@ import "@eventual/injected/entry"; import { + createOrchestrator, ExecutionQueueEventEnvelope, RemoteExecutorProvider, WorkflowCallExecutor, - createOrchestrator, } from "@eventual/core-runtime"; import type { SQSEvent, SQSRecord } from "aws-lambda"; import { AWSMetricsClient } from "../clients/metrics-client.js"; import { createBucketStore, - createEntityClient, + createEntityStore, createEventClient, createExecutionHistoryStateStore, createExecutionHistoryStore, @@ -37,7 +37,7 @@ const orchestrate = createOrchestrator({ metricsClient: AWSMetricsClient, callExecutor: new WorkflowCallExecutor({ bucketStore: createBucketStore(), - entityClient: createEntityClient(), + entityStore: createEntityStore(), eventClient: createEventClient(), executionQueueClient: createExecutionQueueClient(), taskClient: createTaskClient(), diff --git a/packages/@eventual/aws-runtime/src/handlers/subscription-worker.ts b/packages/@eventual/aws-runtime/src/handlers/subscription-worker.ts index c89aab79d..e0e2dab6c 100644 --- a/packages/@eventual/aws-runtime/src/handlers/subscription-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/subscription-worker.ts @@ -8,7 +8,7 @@ import { import type { EventBridgeEvent } from "aws-lambda"; import { createBucketStore, - createEntityClient, + createEntityStore, createEventClient, createServiceClient, createTransactionClient, @@ -17,7 +17,7 @@ import { serviceName, serviceUrl } from "../env.js"; export const processEvent = createSubscriptionWorker({ bucketStore: createBucketStore(), - entityClient: createEntityClient(), + entityStore: createEntityStore(), // partially uses the runtime clients and partially uses the http client serviceClient: createServiceClient({ eventClient: createEventClient(), diff --git a/packages/@eventual/aws-runtime/src/handlers/system-command-handler.ts b/packages/@eventual/aws-runtime/src/handlers/system-command-handler.ts index 464222c43..4f24c1f8e 100644 --- a/packages/@eventual/aws-runtime/src/handlers/system-command-handler.ts +++ b/packages/@eventual/aws-runtime/src/handlers/system-command-handler.ts @@ -36,7 +36,7 @@ function systemCommandWorker( return createApiGCommandAdaptor({ commandWorker: createCommandWorker({ bucketStore: createBucketStore(), - entityClient: undefined, + entityStore: undefined, serviceClient: undefined, serviceSpec: undefined, }), diff --git a/packages/@eventual/aws-runtime/src/handlers/task-worker.ts b/packages/@eventual/aws-runtime/src/handlers/task-worker.ts index f3a5c5d24..78212d698 100644 --- a/packages/@eventual/aws-runtime/src/handlers/task-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/task-worker.ts @@ -11,7 +11,7 @@ import { import { AWSMetricsClient } from "../clients/metrics-client.js"; import { createBucketStore, - createEntityClient, + createEntityStore, createEventClient, createExecutionQueueClient, createExecutionStore, @@ -26,7 +26,7 @@ import { serviceName, serviceUrl } from "../env.js"; const worker = createTaskWorker({ bucketStore: createBucketStore(), - entityClient: createEntityClient(), + entityStore: createEntityStore(), eventClient: createEventClient(), executionQueueClient: createExecutionQueueClient(), logAgent: createLogAgent(), diff --git a/packages/@eventual/aws-runtime/src/handlers/transaction-worker.ts b/packages/@eventual/aws-runtime/src/handlers/transaction-worker.ts index 4a60ae5e9..0507ed0da 100644 --- a/packages/@eventual/aws-runtime/src/handlers/transaction-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/transaction-worker.ts @@ -1,16 +1,20 @@ // the user's entry point will register transactions as a side effect. import "@eventual/injected/entry"; -import { createTransactionWorker } from "@eventual/core-runtime"; +import { + createTransactionWorker, + GlobalEntityProvider, +} from "@eventual/core-runtime"; import { createEntityStore, createEventClient, - createExecutionQueueClient + createExecutionQueueClient, } from "../create.js"; import { serviceName } from "../env.js"; export default createTransactionWorker({ entityStore: createEntityStore(), + entityProvider: new GlobalEntityProvider(), eventClient: createEventClient(), executionQueueClient: createExecutionQueueClient(), serviceName, diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 2ba18b8af..d4e36b041 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -13,24 +13,26 @@ import { Update, UpdateItemCommand, } from "@aws-sdk/client-dynamodb"; +import { marshall, unmarshall } from "@aws-sdk/util-dynamodb"; import { - CompositeKey, + AnyEntity, + AnyEntityKey, EntityConsistencyOptions, - EntityListKeysResult, - EntityListRequest, - EntityListResult, + EntityQueryRequest, + EntityQueryResult, + EntitySchema, EntitySetOptions, EntityTransactItem, + EntityValue, + TransactionCancelled, + UnexpectedVersion, } from "@eventual/core"; import { + EntityProvider, EntityStore, - EntityWithMetadata, getLazy, LazyValue, normalizeCompositeKey, - TransactionCancelledResult, - TransactionConflictResult, - UnexpectedVersionResult, } from "@eventual/core-runtime"; import { assertNever } from "@eventual/core/internal"; import { entityServiceTableName, queryPageWithToken } from "../utils.js"; @@ -38,24 +40,35 @@ import { entityServiceTableName, queryPageWithToken } from "../utils.js"; export interface AWSEntityStoreProps { dynamo: DynamoDBClient; serviceName: LazyValue; + entityProvider: EntityProvider; } +export type EntitySchemaWithVersion = EntitySchema & { + __version: number; +}; + +export type MarshalledEntitySchemaWithVersion = { + [k in keyof EntitySchema]: AttributeValue; +} & { + __version: AttributeValue.NMember; +}; + export class AWSEntityStore implements EntityStore { constructor(private props: AWSEntityStoreProps) {} - public async getEntityValue( - name: string, - _key: string | CompositeKey - ): Promise | undefined> { + async get(entityName: string, key: AnyEntityKey): Promise { + return (await this.getWithMetadata(entityName, key))?.entity; + } + + async getWithMetadata( + entityName: string, + key: Pick | [p: string, s: string] + ): Promise<{ entity: any; version: number } | undefined> { + const entity = this.getEntity(entityName); const item = await this.props.dynamo.send( new GetItemCommand({ - Key: this.entityKey(_key), + Key: this.entityKey(key, entity), TableName: this.tableName(name), - ProjectionExpression: "#value,#version", - ExpressionAttributeNames: { - "#version": "version", - "#value": "value", - }, ConsistentRead: true, }) ); @@ -64,101 +77,75 @@ export class AWSEntityStore implements EntityStore { return undefined; } - const record = item.Item as EntityEntityRecord; + const { __version, ...record } = unmarshall( + item.Item + ) as EntitySchemaWithVersion; return { - entity: JSON.parse(record.value.S), - version: Number(record.version.N), + entity: record, + version: __version, }; } - public async setEntityValue( - name: string, - _key: string | CompositeKey, - entity: Entity, - options?: EntitySetOptions - ): Promise<{ version: number } | UnexpectedVersionResult> { + async set( + entityName: string, + entity: any, + options?: EntitySetOptions | undefined + ): Promise<{ version: number }> { try { const result = await this.props.dynamo.send( new UpdateItemCommand({ - ...this.createSetRequest(name, _key, entity, options), + ...this.createSetRequest(entityName, entity, options), ReturnValues: ReturnValue.ALL_NEW, }) ); const record = result.Attributes as EntityEntityRecord; - return { version: Number(record.version.N) }; + return { version: Number(record.__version.N) }; } catch (err) { if (err instanceof ConditionalCheckFailedException) { - return { unexpectedVersion: true }; + throw new UnexpectedVersion("Unexpected Version"); } throw err; } } - private createSetRequest( - name: string, - _key: string | CompositeKey, - entity: Entity, - options?: EntitySetOptions - ): Update { - const value = JSON.stringify(entity); - return { - Key: this.entityKey(_key), - UpdateExpression: - "SET #value=:value, #version=if_not_exists(#version, :startingVersion) + :versionIncrement", - ExpressionAttributeNames: { - "#value": "value", - "#version": "version", - }, - ExpressionAttributeValues: { - ...(options?.expectedVersion - ? { - ":expectedVersion": { N: options.expectedVersion.toString() }, - } - : undefined), - ":value": { S: value }, - ":startingVersion": { N: "0" }, - ":versionIncrement": { - N: options?.incrementVersion === false ? "0" : "1", - }, - }, - ConditionExpression: - options?.expectedVersion !== undefined - ? options?.expectedVersion === 0 - ? "attribute_not_exists(#version)" - : "#version=:expectedVersion" - : undefined, - TableName: this.tableName(name), - }; - } - - public async deleteEntityValue( - name: string, - _key: string | CompositeKey, - options?: EntityConsistencyOptions - ): Promise { - await this.props.dynamo.send( - new DeleteItemCommand(this.createDeleteRequest(name, _key, options)) - ); + async delete( + entityName: string, + key: Pick | [p: string, s: string], + options?: EntityConsistencyOptions | undefined + ): Promise { + try { + await this.props.dynamo.send( + new DeleteItemCommand( + this.createDeleteRequest(entityName, key, options) + ) + ); + } catch (err) { + if (err instanceof ConditionalCheckFailedException) { + throw new UnexpectedVersion("Unexpected Version"); + } + } } private createDeleteRequest( - name: string, - _key: string | CompositeKey, + _entity: string | AnyEntity, + key: AnyEntityKey, options?: EntityConsistencyOptions ): Delete { + const entity = + typeof _entity === "string" ? this.getEntity(_entity) : _entity; return { - Key: this.entityKey(_key), + Key: this.entityKey(key, entity), ConditionExpression: options?.expectedVersion !== undefined - ? "#version=:expectedVersion" + ? "#__version=:expectedVersion" : undefined, ExpressionAttributeNames: options?.expectedVersion !== undefined ? { - "#version": "version", + "#__version": "__version", } : undefined, ExpressionAttributeValues: @@ -169,47 +156,23 @@ export class AWSEntityStore implements EntityStore { }; } - private entityKey(_key: string | CompositeKey) { - const { key, namespace } = normalizeCompositeKey(_key); - return { - pk: { S: EntityEntityRecord.key(namespace) }, - sk: { S: EntityEntityRecord.sortKey(key) }, - } satisfies Partial; - } - - public async listEntityEntries( - name: string, - request: EntityListRequest - ): Promise> { - const result = await this.list(name, request, ["value", "sk", "version"]); - + async query( + entityName: string, + request: EntityQueryRequest + ): Promise> { + const result = await this.listEntries(entityName, request); return { nextToken: result.nextToken, - entries: result.records.map((r) => ({ - entity: JSON.parse(r.value.S), - version: Number(r.version.N), - key: EntityEntityRecord.parseKeyFromSortKey(r.sk.S), + entries: result.records.map(({ __version, ...r }) => ({ + entity: unmarshall(r), + version: Number(__version.N), })), }; } - public async listEntityKeys( - name: string, - request: EntityListRequest - ): Promise { - const result = await this.list(name, request, ["sk"]); - - return { - nextToken: result.nextToken, - keys: result.records.map((r) => - EntityEntityRecord.parseKeyFromSortKey(r.sk.S) - ), - }; - } - - public async transactWrite( - items: EntityTransactItem[] - ): Promise { + async transactWrite( + items: EntityTransactItem[] + ): Promise { try { await this.props.dynamo.send( new TransactWriteItemsCommand({ @@ -218,7 +181,6 @@ export class AWSEntityStore implements EntityStore { return { Update: this.createSetRequest( i.entity, - i.operation.key, i.operation.value, i.operation.options ), @@ -232,6 +194,10 @@ export class AWSEntityStore implements EntityStore { ), }; } else if (i.operation.operation === "condition") { + const entity = + typeof i.entity === "string" + ? this.getEntity(i.entity) + : i.entity; return { ConditionCheck: { ConditionExpression: @@ -240,8 +206,8 @@ export class AWSEntityStore implements EntityStore { ? "attribute_not_exists(#version)" : "#version=:expectedVersion" : undefined, - TableName: this.tableName(i.entity), - Key: this.entityKey(i.operation.key), + TableName: this.tableName(entity.name), + Key: this.entityKey(i.operation.key, entity), ExpressionAttributeNames: { "#version": "version", }, @@ -256,48 +222,131 @@ export class AWSEntityStore implements EntityStore { }, }; } - return assertNever(i.operation); }), }) ); } catch (err) { if (err instanceof TransactionCanceledException) { - return { - reasons: - err.CancellationReasons?.map((c) => { - // TODO: handle other failure reasons - if (c.Code === "NONE") { - return undefined; - } - return { unexpectedVersion: true }; - }) ?? [], - }; + throw new TransactionCancelled( + err.CancellationReasons?.map((r) => + r.Code === "NONE" + ? undefined + : new UnexpectedVersion("Unexpected Version") + ) ?? [] + ); } else if (err instanceof TransactionConflictException) { - return { transactionConflict: true }; + throw new TransactionCancelled([]); } throw err; } } - private list(name: string, request: EntityListRequest, fields?: string[]) { - return queryPageWithToken( + private createSetRequest( + _entity: string | AnyEntity, + value: E, + options?: EntitySetOptions + ): Update { + const entity = + typeof _entity === "string" ? this.getEntity(_entity) : _entity; + const valueRecord = marshall(value); + delete valueRecord[entity.partitionKey]; + if (entity.sortKey) { + delete valueRecord[entity.sortKey]; + } + return { + Key: this.entityKey(value, entity), + UpdateExpression: [ + "SET #__version=if_not_exists(#__version, :__startingVersion) + :__versionIncrement", + ...Object.keys(valueRecord).map((key) => `#${key}=:${key}`), + ].join(","), + ExpressionAttributeNames: { + "#__version": "__version", + ...Object.fromEntries( + Object.keys(valueRecord).map((key) => [`#${key}`, key]) + ), + }, + ExpressionAttributeValues: { + ...(options?.expectedVersion + ? { + ":__expectedVersion": { N: options.expectedVersion.toString() }, + } + : undefined), + ":__startingVersion": { N: "0" }, + ":__versionIncrement": { + N: options?.incrementVersion === false ? "0" : "1", + }, + ...Object.fromEntries( + Object.entries(valueRecord).map(([key, value]) => [`:${key}`, value]) + ), + }, + ConditionExpression: + options?.expectedVersion !== undefined + ? options?.expectedVersion === 0 + ? "attribute_not_exists(#__version)" + : "#__version=:__expectedVersion" + : undefined, + TableName: this.tableName(name), + }; + } + + private getEntity(entityName: string) { + const entity = this.props.entityProvider.getEntity(entityName); + if (!entity) { + throw new Error(`Entity ${entityName} was not found.`); + } + return entity; + } + + private entityKey(key: AnyEntityKey, entity: AnyEntity) { + const compositeKey = normalizeCompositeKey(entity, key); + return compositeKey.sort + ? { + [compositeKey.partition.field]: { S: compositeKey.partition.value }, + [compositeKey.sort.field]: { S: compositeKey.sort.value }, + } + : { + [compositeKey.partition.field]: { S: compositeKey.partition.value }, + }; + } + + private listEntries( + entityName: string, + request: EntityQueryRequest, + fields?: string[] + ) { + const entity = this.getEntity(entityName); + const allFields = new Set([ + ...(fields ?? []), + entity.partitionKey, + ...(entity.sortKey ? [entity.sortKey] : []), + ]); + if (!entity.sortKey && request.prefix) { + throw new Error( + "Cannot use `prefix` when the entity does not have a sortKey." + ); + } + return queryPageWithToken>( { dynamoClient: this.props.dynamo, pageSize: request.limit ?? 1000, - keys: ["pk", "sk"], + keys: entity.sortKey + ? [entity.partitionKey, entity.sortKey] + : [entity.partitionKey], nextToken: request.nextToken, }, { TableName: this.tableName(name), - KeyConditionExpression: "pk=:pk AND begins_with(sk, :sk)", + KeyConditionExpression: entity.sortKey + ? `#${entity.partitionKey}=:pk AND begins_with(#${entity.sortKey}, :sk)` + : `#${entity.partitionKey}=:pk`, ExpressionAttributeValues: { - ":pk": { S: EntityEntityRecord.key(request.namespace) }, - ":sk": { S: EntityEntityRecord.sortKey(request.prefix ?? "") }, + ":pk": { S: request.partition }, + ...(entity.sortKey ? { ":sk": { S: request.prefix ?? "" } } : {}), }, - ExpressionAttributeNames: fields - ? Object.fromEntries(fields?.map((f) => [`#${f}`, f])) - : undefined, + ExpressionAttributeNames: Object.fromEntries( + [...allFields]?.map((f) => [`#${f}`, f]) + ), ProjectionExpression: fields?.map((f) => `#${f}`).join(","), } ); @@ -310,31 +359,9 @@ export class AWSEntityStore implements EntityStore { export interface EntityEntityRecord extends Record { - pk: { S: `${typeof EntityEntityRecord.PARTITION_KEY_PREFIX}${string}` }; - sk: { S: `${typeof EntityEntityRecord.SORT_KEY_PREFIX}${string}` }; - /** - * A stringified value. - * - * https://dynamodbplace.com/c/questions/map-or-json-dump-string-which-is-better-to-optimize-space - */ - value: AttributeValue.SMember; - version: AttributeValue.NMember; + __version: AttributeValue.NMember; } export const EntityEntityRecord = { - PARTITION_KEY_PREFIX: `EntityEntry$`, - key(namespace?: string) { - return `${this.PARTITION_KEY_PREFIX}${namespace ?? ""}`; - }, - SORT_KEY_PREFIX: `#`, - sortKey(key: string) { - return `${this.SORT_KEY_PREFIX}${key}`; - }, - parseKeyFromSortKey(sortKey: string) { - return sortKey.slice(1); - }, - parseNamespaceFromPartitionKey(sortKey: string): string | undefined { - const namespace = sortKey.slice(this.PARTITION_KEY_PREFIX.length); - return namespace ? namespace : undefined; - }, + VERSION_FIELD: "__version", }; diff --git a/packages/@eventual/cli/src/display/event.ts b/packages/@eventual/cli/src/display/event.ts index 385d67b8c..4114e8edf 100644 --- a/packages/@eventual/cli/src/display/event.ts +++ b/packages/@eventual/cli/src/display/event.ts @@ -1,10 +1,10 @@ -import type { EntityConditionalOperation } from "@eventual/core"; -import { normalizeCompositeKey } from "@eventual/core-runtime"; +import type { EntityTransactItem } from "@eventual/core"; import { BucketRequest, EntityOperation, isBucketRequest, isChildWorkflowScheduled, + isEntityOperationOfType, isEntityRequest, isSignalReceived, isSignalSent, @@ -47,48 +47,79 @@ export function displayEvent(event: WorkflowEvent) { return lines.join("\n"); } -function displayEntityCommand( - operation: EntityOperation | EntityConditionalOperation -) { +function displayEntityCommand(operation: EntityOperation) { const output: string[] = [`Operation: ${operation.operation}`]; if (operation.operation === "transact") { output.push(`Transaction Items:`); output.push( ...operation.items.flatMap((item, i) => [ `${i}:`, - ...displayEntityCommand({ - ...item.operation, - name: - typeof item.entity === "string" ? item.entity : item.entity.name, - }).map((v) => `\t${v}`), + ...displayEntityTransactItem(item).map((v) => `\t${v}`), ]) ); } else { - output.push(`Ent: ${operation.name}`); - if ("key" in operation) { - const { key, namespace } = normalizeCompositeKey(operation.key); - if (namespace) { - output.push(`Namespace: ${namespace}`); - } + output.push(`Ent: ${operation.entityName}`); + if ( + isEntityOperationOfType("delete", operation) || + isEntityOperationOfType("get", operation) || + isEntityOperationOfType("getWithMetadata", operation) + ) { + const [key] = operation.params; output.push(`Key: ${key}`); - if (operation.operation === "set") { - output.push(`Entity: ${JSON.stringify(operation.value)}`); - if (operation.options?.expectedVersion) { - output.push(`Expected Version: ${operation.options.expectedVersion}`); - } + } + if (isEntityOperationOfType("set", operation)) { + const [value] = operation.params; + output.push(`Entity: ${JSON.stringify(value)}`); + } + if ( + isEntityOperationOfType("set", operation) || + isEntityOperationOfType("delete", operation) + ) { + const [, options] = operation.params; + if (options?.expectedVersion) { + output.push(`Expected Version: ${options.expectedVersion}`); } - } else { - if (operation.request.namespace) { - output.push(`Namespace: ${operation.request.prefix}`); + } + if (isEntityOperationOfType("query", operation)) { + const [request] = operation.params; + if (request.partition) { + output.push(`Namespace: ${request.prefix}`); } - if (operation.request.prefix) { - output.push(`Prefix: ${operation.request.prefix}`); + if (request.prefix) { + output.push(`Prefix: ${request.prefix}`); } } } return output; } +function displayEntityTransactItem(item: EntityTransactItem): string[] { + const entityName = + typeof item.entity === "string" ? item.entity : item.entity.name; + if (item.operation.operation === "set") { + return displayEntityCommand({ + operation: "set", + entityName, + params: [item.operation.value, item.operation.options], + }); + } else if (item.operation.operation === "delete") { + return displayEntityCommand({ + operation: "delete", + entityName, + params: [item.operation.key, item.operation.options], + }); + } else { + const output = [ + `Operation: ${item.operation.operation}`, + `Key: ${item.operation.key}`, + ]; + if (item.operation.version !== undefined) { + output.push(`Version: ${item.operation.version}`); + } + return output; + } +} + function displayBucketRequest(request: BucketRequest) { const output: string[] = [`Operation: ${request.operation.operation}`]; output.push(`Bucket: ${request.operation.bucketName}`); diff --git a/packages/@eventual/compiler/src/eventual-infer.ts b/packages/@eventual/compiler/src/eventual-infer.ts index a33ac8405..3006d21e4 100644 --- a/packages/@eventual/compiler/src/eventual-infer.ts +++ b/packages/@eventual/compiler/src/eventual-infer.ts @@ -132,6 +132,8 @@ export function inferFromMemory(openApi: ServiceSpec["openApi"]): ServiceSpec { entities: { entities: [...entities().values()].map((d) => ({ name: d.name, + partitionKey: d.partitionKey, + sortKey: d.sortKey, schema: d.schema ? generateSchema(d.schema) : undefined, streams: d.streams.map((s) => ({ name: s.name, diff --git a/packages/@eventual/core-runtime/src/clients/entity-client.ts b/packages/@eventual/core-runtime/src/clients/entity-client.ts deleted file mode 100644 index 0baf31b97..000000000 --- a/packages/@eventual/core-runtime/src/clients/entity-client.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { - EntityTransactItem, - TransactionCancelled, - UnexpectedVersion, -} from "@eventual/core"; -import { EntityHook, EntityMethods } from "@eventual/core/internal"; -import { - EntityStore, - isTransactionCancelledResult, - isTransactionConflictResult, - isUnexpectedVersionResult, -} from "../stores/entity-store.js"; - -export class EntityClient implements EntityHook { - constructor(private entityStore: EntityStore) {} - public async getEntity( - name: string - ): Promise | undefined> { - return { - get: async (key) => { - const entry = await this.entityStore.getEntityValue(name, key); - return entry?.entity; - }, - getWithMetadata: (key) => - this.entityStore.getEntityValue(name, key), - set: async (key, entity, options) => { - const result = await this.entityStore.setEntityValue( - name, - key, - entity, - options - ); - if (isUnexpectedVersionResult(result)) { - throw new UnexpectedVersion("Unexpected Version"); - } - return result; - }, - delete: async (key, options) => { - const result = await this.entityStore.deleteEntityValue( - name, - key, - options - ); - if (isUnexpectedVersionResult(result)) { - throw new UnexpectedVersion("Unexpected Version"); - } - return result; - }, - list: (request) => this.entityStore.listEntityEntries(name, request), - listKeys: (request) => this.entityStore.listEntityKeys(name, request), - }; - } - - public async transactWrite(items: EntityTransactItem[]): Promise { - const normalizedItems: EntityTransactItem[] = items.map( - (i) => ({ - ...i, - entity: typeof i.entity === "string" ? i.entity : i.entity.name, - }) - ); - const result = await this.entityStore.transactWrite(normalizedItems); - if (isTransactionCancelledResult(result)) { - throw new TransactionCancelled( - result.reasons.map((r) => - isUnexpectedVersionResult(r) - ? new UnexpectedVersion("Unexpected Version") - : undefined - ) - ); - } else if (isTransactionConflictResult(result)) { - throw new TransactionCancelled([]); - } - return result; - } -} diff --git a/packages/@eventual/core-runtime/src/clients/index.ts b/packages/@eventual/core-runtime/src/clients/index.ts index e2748218e..8070d6068 100644 --- a/packages/@eventual/core-runtime/src/clients/index.ts +++ b/packages/@eventual/core-runtime/src/clients/index.ts @@ -1,4 +1,3 @@ -export * from "./entity-client.js"; export * from "./event-client.js"; export * from "./execution-queue-client.js"; export * from "./logs-client.js"; diff --git a/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts b/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts index 1b7b13c2d..8607e2749 100644 --- a/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts +++ b/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts @@ -5,6 +5,7 @@ import type { import { transactions } from "@eventual/core/internal"; import type { EventClient } from "../clients/event-client.js"; import type { ExecutionQueueClient } from "../clients/execution-queue-client.js"; +import { EntityProvider } from "../index.js"; import { isResolved } from "../result.js"; import type { EntityStore } from "../stores/entity-store.js"; import { createTransactionExecutor } from "../transaction-executor.js"; @@ -12,6 +13,7 @@ import { getLazy, LazyValue } from "../utils.js"; export interface TransactionWorkerProps { entityStore: EntityStore; + entityProvider: EntityProvider; executionQueueClient: ExecutionQueueClient; eventClient: EventClient; serviceName: LazyValue; @@ -28,6 +30,7 @@ export function createTransactionWorker( ): TransactionWorker { const transactionExecutor = createTransactionExecutor( props.entityStore, + props.entityProvider, props.executionQueueClient, props.eventClient ); diff --git a/packages/@eventual/core-runtime/src/handlers/utils.ts b/packages/@eventual/core-runtime/src/handlers/utils.ts index 8e77b869b..cd700303a 100644 --- a/packages/@eventual/core-runtime/src/handlers/utils.ts +++ b/packages/@eventual/core-runtime/src/handlers/utils.ts @@ -6,13 +6,12 @@ import { registerServiceClient, ServiceSpec, } from "@eventual/core/internal"; -import { EntityClient } from "../clients/entity-client.js"; -import { BucketStore } from "../index.js"; +import { BucketStore, EntityStore } from "../index.js"; import { getLazy, LazyValue } from "../utils.js"; export interface WorkerIntrinsicDeps { bucketStore: BucketStore | undefined; - entityClient: EntityClient | undefined; + entityStore: EntityStore | undefined; serviceName: string | LazyValue; serviceClient: EventualServiceClient | undefined; serviceUrls?: (string | LazyValue)[]; @@ -21,8 +20,8 @@ export interface WorkerIntrinsicDeps { } export function registerWorkerIntrinsics(deps: WorkerIntrinsicDeps) { - if (deps.entityClient) { - registerEntityHook(deps.entityClient); + if (deps.entityStore) { + registerEntityHook(deps.entityStore); } if (deps.bucketStore) { registerBucketHook(deps.bucketStore); diff --git a/packages/@eventual/core-runtime/src/local/local-container.ts b/packages/@eventual/core-runtime/src/local/local-container.ts index 805bedff4..3ee187bc9 100644 --- a/packages/@eventual/core-runtime/src/local/local-container.ts +++ b/packages/@eventual/core-runtime/src/local/local-container.ts @@ -6,7 +6,6 @@ import { EntityStreamRemoveItem, LogLevel, } from "@eventual/core"; -import { EntityClient } from "../clients/entity-client.js"; import { EventClient } from "../clients/event-client.js"; import { ExecutionQueueClient } from "../clients/execution-queue-client.js"; import { LogsClient } from "../clients/logs-client.js"; @@ -38,6 +37,7 @@ import { createTransactionWorker, TransactionWorker, } from "../handlers/transaction-worker.js"; +import { EntityProvider, GlobalEntityProvider } from "../index.js"; import { LogAgent } from "../log-agent.js"; import { InMemoryExecutorProvider } from "../providers/executor-provider.js"; import { @@ -125,9 +125,10 @@ export class LocalContainer { public executionStore: ExecutionStore; public taskStore: TaskStore; - public workflowProvider: WorkflowProvider; - public taskProvider: TaskProvider; + public entityProvider: EntityProvider; public subscriptionProvider: SubscriptionProvider; + public taskProvider: TaskProvider; + public workflowProvider: WorkflowProvider; constructor( private localConnector: LocalEnvConnector, @@ -152,16 +153,17 @@ export class LocalContainer { this.taskStore = new LocalTaskStore(); this.subscriptionProvider = props.subscriptionProvider ?? new GlobalSubscriptionProvider(); + this.entityProvider = new GlobalEntityProvider(); const entityStore = new LocalEntityStore({ + entityProvider: this.entityProvider, localConnector: this.localConnector, }); - const entityClient = new EntityClient(entityStore); const bucketStore = new LocalBucketStore({ localConnector: this.localConnector, }); this.bucketHandlerWorker = createBucketNotificationHandlerWorker({ bucketStore, - entityClient, + entityStore, serviceClient: undefined, serviceSpec: undefined, serviceName: props.serviceName, @@ -171,7 +173,7 @@ export class LocalContainer { subscriptionProvider: this.subscriptionProvider, serviceClient: undefined, bucketStore, - entityClient, + entityStore, serviceName: props.serviceName, serviceSpec: undefined, serviceUrl: props.serviceUrl, @@ -186,7 +188,7 @@ export class LocalContainer { this.taskWorker = createTaskWorker({ bucketStore, - entityClient, + entityStore, eventClient: this.eventClient, executionQueueClient: this.executionQueueClient, logAgent, @@ -207,7 +209,7 @@ export class LocalContainer { this.entityStreamWorker = createEntityStreamWorker({ bucketStore, - entityClient, + entityStore, serviceClient: undefined, serviceName: props.serviceName, serviceSpec: undefined, @@ -216,6 +218,7 @@ export class LocalContainer { this.transactionWorker = createTransactionWorker({ entityStore, + entityProvider: this.entityProvider, eventClient: this.eventClient, executionQueueClient: this.executionQueueClient, serviceName: props.serviceName, @@ -226,7 +229,7 @@ export class LocalContainer { this.orchestrator = createOrchestrator({ callExecutor: new WorkflowCallExecutor({ bucketStore: bucketStore, - entityClient, + entityStore, eventClient: this.eventClient, executionQueueClient: this.executionQueueClient, taskClient: this.taskClient, @@ -277,7 +280,7 @@ export class LocalContainer { // must register commands before the command worker is loaded! this.commandWorker = createCommandWorker({ - entityClient, + entityStore, bucketStore, serviceClient: undefined, serviceName: props.serviceName, diff --git a/packages/@eventual/core-runtime/src/local/local-environment.ts b/packages/@eventual/core-runtime/src/local/local-environment.ts index a8da4f231..1aa45207a 100644 --- a/packages/@eventual/core-runtime/src/local/local-environment.ts +++ b/packages/@eventual/core-runtime/src/local/local-environment.ts @@ -151,7 +151,12 @@ export class LocalEnvironment { entityStreamItems.forEach((i) => { const streamNames = [...entities().values()] .flatMap((d) => d.streams) - .filter((s) => entityStreamMatchesItem(i, s)) + .filter((s) => { + const entity = this.localContainer.entityProvider.getEntity( + i.entityName + ); + return entityStreamMatchesItem(entity, i, s); + }) .map((s) => s.name); streamNames.forEach((streamName) => { this.localContainer.entityStreamWorker({ diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index ea71de0f9..c4039a7c7 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -1,19 +1,18 @@ import { - CompositeKey, - EntityConsistencyOptions, - EntityListKeysResult, - EntityListRequest, - EntityListResult, - EntitySetOptions, + AnyEntityKey, + EntityConsistencyOptions, EntityQueryRequest, + EntityQueryResult, EntityQueryResultEntry, EntitySetOptions, EntityTransactItem, + TransactionCancelled, + UnexpectedVersion } from "@eventual/core"; import { assertNever } from "@eventual/core/internal"; +import { EntityProvider } from "../../providers/entity-provider.js"; import { + convertNormalizedEntityKeyToMap, EntityStore, EntityWithMetadata, - TransactionCancelledResult, - UnexpectedVersionResult, - normalizeCompositeKey, + normalizeCompositeKey } from "../../stores/entity-store.js"; import { deserializeCompositeKey, serializeCompositeKey } from "../../utils.js"; import { LocalEnvConnector } from "../local-container.js"; @@ -21,6 +20,7 @@ import { paginateItems } from "./pagination.js"; export interface LocalEntityStoreProps { localConnector: LocalEnvConnector; + entityProvider: EntityProvider; } export class LocalEntityStore implements EntityStore { @@ -31,23 +31,30 @@ export class LocalEntityStore implements EntityStore { constructor(private props: LocalEntityStoreProps) {} - public async getEntityValue( - name: string, - _key: string | CompositeKey - ): Promise | undefined> { - const { key, namespace } = normalizeCompositeKey(_key); - return this.getNamespaceMap(name, namespace).get(key); + async get(entityName: string, key: AnyEntityKey): Promise { + return this.getWithMetadata(entityName, key); } - public async setEntityValue( - name: string, - _key: string | CompositeKey, - entity: Entity, - options?: EntitySetOptions + async getWithMetadata( + entityName: string, + key: AnyEntityKey + ): Promise<{ entity: any; version: number } | undefined> { + const entity = this.getEntity(entityName); + const { partition, sort } = normalizeCompositeKey(entity, key); + return this.getPartitionMap(name, partition.value).get( + sort?.value ?? "default" + ); + } + + async set( + entityName: string, + value: any, + options?: EntitySetOptions | undefined ): Promise<{ version: number }> { - const { key, namespace } = normalizeCompositeKey(_key); + const entity = this.getEntity(entityName); + const normalizedKey = normalizeCompositeKey(entity, value); const { version = 0, entity: oldValue } = - (await this.getEntityValue(name, _key)) ?? {}; + (await this.get(name, value)) ?? {}; if ( options?.expectedVersion !== undefined && options.expectedVersion !== version @@ -58,45 +65,45 @@ export class LocalEntityStore implements EntityStore { } const newVersion = options?.incrementVersion === false ? version : version + 1; - this.getNamespaceMap(name, namespace).set(key, { - entity, - version: newVersion, - }); - + this.getPartitionMap(name, normalizedKey.partition.value).set( + normalizedKey.sort?.value ?? "default", + { + entity, + version: newVersion, + } + ); this.props.localConnector.pushWorkflowTask({ entityName: name, - key, - namespace, + key: convertNormalizedEntityKeyToMap(normalizedKey), operation: version === 0 ? ("insert" as const) : ("modify" as const), - newValue: entity, + newValue: value, newVersion, oldValue, oldVersion: version, }); - return { version: newVersion }; } - public async deleteEntityValue( - name: string, - _key: string | CompositeKey, - options?: EntityConsistencyOptions - ): Promise { - const { key, namespace } = normalizeCompositeKey(_key); - const item = await this.getEntityValue(name, _key); - + async delete( + entityName: string, + key: AnyEntityKey, + options?: EntityConsistencyOptions | undefined + ): Promise { + const entity = this.getEntity(entityName); + const normalizedKey = normalizeCompositeKey(entity, key); + const item = await this.get(name, key); if (item) { if (options?.expectedVersion !== undefined) { if (options.expectedVersion !== item.version) { - return { unexpectedVersion: true }; + throw new UnexpectedVersion("Unexpected Version"); } } - this.getNamespaceMap(name, namespace).delete(key); - + this.getPartitionMap(name, normalizedKey.partition.value).delete( + normalizedKey.sort?.value ?? "default" + ); this.props.localConnector.pushWorkflowTask({ entityName: name, - key, - namespace, + key: convertNormalizedEntityKeyToMap(normalizedKey), operation: "remove" as const, oldValue: item.entity, oldVersion: item.version, @@ -104,76 +111,71 @@ export class LocalEntityStore implements EntityStore { } } - public async listEntityEntries( - name: string, - request: EntityListRequest - ): Promise> { - const { items, nextToken } = this.orderedEntries(name, request); + async query( + entityName: string, + request: EntityQueryRequest + ): Promise> { + const { items, nextToken } = this.orderedEntries(entityName, request); // values should be sorted return { - entries: items?.map(([key, value]) => ({ - key, - entity: value.entity, - version: value.version, - })), + entries: items?.map( + ([, value]) => + ({ + entity: value.entity, + version: value.version, + } satisfies EntityQueryResultEntry) + ), nextToken, }; } - public async listEntityKeys( - name: string, - request: EntityListRequest - ): Promise { - const { items, nextToken } = this.orderedEntries(name, request); - return { - keys: items?.map(([key]) => key), - nextToken, - }; - } - - public async transactWrite( - items: EntityTransactItem[] - ): Promise { + async transactWrite( + items: EntityTransactItem[] + ): Promise { const keysAndVersions = Object.fromEntries( items.map( (i) => [ - serializeCompositeKey(i.entity, i.operation.key), + serializeCompositeKey( + typeof i.entity === "string" ? i.entity : i.entity.name, + i.operation.operation === "set" + ? i.operation.value + : i.operation.key + ), i.operation.operation === "condition" ? i.operation.version : i.operation.options?.expectedVersion, ] as const ) ); - /** * Evaluate the expected versions against the current state and return the results. * * This is similar to calling TransactWriteItem in dynamo with only ConditionChecks and then * handling the errors. */ - const consistencyResults = await Promise.all( + const consistencyResults = await Promise.allSettled( Object.entries(keysAndVersions).map(async ([sKey, expectedVersion]) => { if (expectedVersion === undefined) { return true; } const [name, key] = deserializeCompositeKey(sKey); - const { version } = (await this.getEntityValue(name, key)) ?? { + const { version } = (await this.get(name, key)) ?? { version: 0, }; return version === expectedVersion; }) ); - - if (consistencyResults.some((r) => !r)) { - return { - reasons: consistencyResults.map((r) => - r ? undefined : { unexpectedVersion: true } - ), - }; + if (consistencyResults.some((r) => r.status === "rejected")) { + throw new TransactionCancelled( + consistencyResults.map((r) => + r.status === "fulfilled" + ? undefined + : new UnexpectedVersion("Unexpected Version") + ) + ); } - /** * After ensuring that all of the expected versions are accurate, actually perform the writes. * Here we assume that the write operations are synchronous and that @@ -181,16 +183,17 @@ export class LocalEntityStore implements EntityStore { */ await Promise.all( items.map(async (i) => { + const entityName = + typeof i.entity === "string" ? i.entity : i.entity.name; if (i.operation.operation === "set") { - return await this.setEntityValue( - i.entity, - i.operation.key, + return await this.set( + entityName, i.operation.value, i.operation.options ); } else if (i.operation.operation === "delete") { - return await this.deleteEntityValue( - i.entity, + return await this.delete( + entityName, i.operation.key, i.operation.options ); @@ -203,9 +206,20 @@ export class LocalEntityStore implements EntityStore { ); } - private orderedEntries(name: string, listRequest: EntityListRequest) { - const namespace = this.getNamespaceMap(name, listRequest.namespace); - const entries = namespace ? [...namespace.entries()] : []; + private getEntity(entityName: string) { + const entity = this.props.entityProvider.getEntity(entityName); + if (!entity) { + throw new Error(`Entity ${entityName} was not found.`); + } + return entity; + } + + private orderedEntries( + name: string, + listRequest: EntityQueryRequest + ) { + const partition = this.getPartitionMap(name, listRequest.partition); + const entries = partition ? [...partition.entries()] : []; const result = paginateItems( entries, @@ -221,9 +235,9 @@ export class LocalEntityStore implements EntityStore { return result; } - private getNamespaceMap(name: string, namespace?: string) { - const entity = (this.entities[name] ??= {}); - const namespaceMap = (entity[namespace ?? "default"] ??= new Map< + private getPartitionMap(entityName: string, partition: string) { + const entity = (this.entities[entityName] ??= {}); + const namespaceMap = (entity[partition] ??= new Map< string, EntityWithMetadata >()); diff --git a/packages/@eventual/core-runtime/src/providers/entity-provider.ts b/packages/@eventual/core-runtime/src/providers/entity-provider.ts new file mode 100644 index 000000000..dcddf6666 --- /dev/null +++ b/packages/@eventual/core-runtime/src/providers/entity-provider.ts @@ -0,0 +1,21 @@ +import { AnyEntity } from "@eventual/core"; +import { entities } from "@eventual/core/internal"; +import type { WorkflowExecutor } from "../workflow-executor.js"; + +export interface EntityProvider { + /** + * Returns an executor which may already be started. + * + * Use {@link WorkflowExecutor}.isStarted to determine if it is already started. + */ + getEntity(entityName: string): AnyEntity | undefined; +} + +/** + * An executor provider that works with an out of memory store. + */ +export class GlobalEntityProvider implements EntityProvider { + getEntity(entityName: string): AnyEntity | undefined { + return entities().get(entityName); + } +} diff --git a/packages/@eventual/core-runtime/src/providers/index.ts b/packages/@eventual/core-runtime/src/providers/index.ts index 6791d29b4..ef2029583 100644 --- a/packages/@eventual/core-runtime/src/providers/index.ts +++ b/packages/@eventual/core-runtime/src/providers/index.ts @@ -1,3 +1,4 @@ +export * from "./entity-provider.js"; export * from "./executor-provider.js"; export * from "./subscription-provider.js"; export * from "./task-provider.js"; diff --git a/packages/@eventual/core-runtime/src/providers/workflow-provider.ts b/packages/@eventual/core-runtime/src/providers/workflow-provider.ts index 7230feb3d..a1de74d33 100644 --- a/packages/@eventual/core-runtime/src/providers/workflow-provider.ts +++ b/packages/@eventual/core-runtime/src/providers/workflow-provider.ts @@ -3,12 +3,6 @@ import { workflows, ServiceSpec } from "@eventual/core/internal"; export interface WorkflowProvider extends WorkflowSpecProvider { lookupWorkflow(workflowName: string): Workflow | undefined; - getWorkflowNames(): string[]; -} - -export interface WorkflowSpecProvider { - workflowExists(workflowName: string): boolean; - getWorkflowNames(): string[]; } export interface WorkflowSpecProvider { diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 65825ef09..4b0d70bb7 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,41 +1,12 @@ -import type { - CompositeKey, - EntityConsistencyOptions, - EntityListKeysResult, - EntityListRequest, - EntityListResult, - EntitySetOptions, - EntityTransactItem, +import { + AnyEntity, + AnyEntityKey, + EntityCompositeKey, + EntityKeyTuple, } from "@eventual/core"; +import { EntityHook } from "@eventual/core/internal"; -export interface EntityStore { - getEntityValue( - name: string, - key: string | CompositeKey - ): Promise | undefined>; - setEntityValue( - name: string, - key: string | CompositeKey, - entity: Entity, - options?: EntitySetOptions - ): Promise<{ version: number } | UnexpectedVersionResult>; - deleteEntityValue( - name: string, - key: string | CompositeKey, - options?: EntityConsistencyOptions - ): Promise; - listEntityEntries( - name: string, - request: EntityListRequest - ): Promise>; - listEntityKeys( - name: string, - request: EntityListRequest - ): Promise; - transactWrite( - items: EntityTransactItem[] - ): Promise; -} +export interface EntityStore extends EntityHook {} export interface EntityWithMetadata { entity: Entity; @@ -72,6 +43,61 @@ export function isTransactionConflictResult( return value && "transactionConflict" in value; } -export function normalizeCompositeKey(key: string | CompositeKey) { - return typeof key === "string" ? { key, namespace: undefined } : key; +export interface NormalizeEntityKey { + partition: { field: string; value: string }; + sort?: { field: string; value: string }; +} + +export function normalizeCompositeKey( + entity: AnyEntity, + key: AnyEntityKey +): NormalizeEntityKey { + if (Array.isArray(key)) { + const [partition, sort] = key; + + return entity.sortKey + ? { + partition: { field: entity.partitionKey, value: partition }, + sort: { field: entity.sortKey, value: sort }, + } + : { + partition: { field: entity.partitionKey, value: partition }, + }; + } else { + return entity.sortKey + ? { + partition: { + field: entity.partitionKey, + value: key[entity.partitionKey], + }, + sort: { field: entity.sortKey, value: key[entity.sortKey] }, + } + : { + partition: { + field: entity.partitionKey, + value: key[entity.partitionKey], + }, + }; + } +} + +export function convertNormalizedEntityKeyToMap( + key: NormalizeEntityKey +): EntityCompositeKey { + return key.sort + ? { + [key.partition.field]: key.partition.value, + [key.sort.field]: key.sort.value, + } + : { + [key.partition.field]: key.partition.value, + }; +} + +export function convertNormalizedEntityKeyToTuple( + key: NormalizeEntityKey +): EntityKeyTuple { + return key.sort + ? [key.partition.value, key.sort.value] + : [key.partition.value]; } diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index c432e4c3b..769fed284 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -1,6 +1,9 @@ import type { - CompositeKey, - Entity, + AnyEntity, + EntityCompositeKey, + EntityConditionalOperation, + EntityDeleteOperation, + EntitySetOperation, EntityTransactItem, TransactionContext, TransactionFunction, @@ -8,8 +11,7 @@ import type { import { assertNever, EmitEventsCall, - EntityDeleteOperation, - EntitySetOperation, + EntityOperation, EventualCallHook, EventualPromise, EventualPromiseSymbol, @@ -26,14 +28,17 @@ import { import type { EventClient } from "./clients/event-client.js"; import type { ExecutionQueueClient } from "./clients/execution-queue-client.js"; import { enterEventualCallHookScope } from "./eventual-hook.js"; +import { EntityProvider } from "./index.js"; import { isResolved } from "./result.js"; import { + convertNormalizedEntityKeyToMap, EntityStore, EntityWithMetadata, isTransactionCancelledResult, isTransactionConflictResult, isUnexpectedVersionResult, normalizeCompositeKey, + NormalizeEntityKey, } from "./stores/entity-store.js"; import { serializeCompositeKey } from "./utils.js"; @@ -84,8 +89,14 @@ export interface TransactionExecutor { ): Promise>; } +interface TransactionFailedItem { + entityName: string; + key: EntityCompositeKey; +} + export function createTransactionExecutor( entityStore: EntityStore, + entityProvider: EntityProvider, executionQueueClient: ExecutionQueueClient, eventClient: EventClient ): TransactionExecutor { @@ -119,18 +130,11 @@ export function createTransactionExecutor( | { output: Output } | { canRetry: boolean; - failedItems: { - entityName: string; - key: string; - namespace?: string; - }[]; + failedItems: TransactionFailedItem[]; } > { // a map of the keys of all mutable entity calls that have been made to the request - const entityCalls = new Map< - string, - EntitySetOperation | EntityDeleteOperation - >(); + const entityCalls = new Map>(); // store all of the event and signal calls to execute after the transaction completes const eventCalls: (EmitEventsCall | SendSignalCall)[] = []; // a map of the keys of all get operations or mutation operations to check during the transaction. @@ -139,7 +143,7 @@ export function createTransactionExecutor( string, { entityName: string; - key: string | CompositeKey; + key: NormalizeEntityKey; value: EntityWithMetadata | undefined; } >(); @@ -152,17 +156,23 @@ export function createTransactionExecutor( isEntityOperationOfType("delete", eventual) ) { return createEventualPromise< - Awaited["delete"] | Entity["set"]>> + Awaited> >(async () => { - const entity = await resolveEntity(eventual.name, eventual.key); + const entity = getEntity(eventual.entityName); + // should either by the key or the value object, which can be used as the key + const key = eventual.params[0]; + const entityValue = await resolveEntity( + eventual.entityName, + key + ); const normalizedKey = serializeCompositeKey( - eventual.name, - eventual.key + entity.name, + normalizeCompositeKey(entity, key) ); entityCalls.set(normalizedKey, eventual); return isEntityOperationOfType("set", eventual) - ? { version: (entity?.version ?? 0) + 1 } + ? { version: (entityValue?.version ?? 0) + 1 } : undefined; }); } else if ( @@ -170,7 +180,12 @@ export function createTransactionExecutor( isEntityOperationOfType("getWithMetadata", eventual) ) { return createEventualPromise(async () => { - const value = await resolveEntity(eventual.name, eventual.key); + const entity = getEntity(eventual.entityName); + const key = eventual.params[0]; + const value = await resolveEntity( + eventual.entityName, + normalizeCompositeKey(entity, key) + ); if (isEntityOperationOfType("get", eventual)) { return value?.entity; @@ -242,27 +257,41 @@ export function createTransactionExecutor( const retrievedVersion = value?.version ?? 0; if (call) { + const [, options] = call.params; // if the user provided a version that was not the same that was retrieved // we will consider the transaction not retry-able on failure. // for example, if an entity is set with an expected version of 1, // but the current version at set time is 2, this condition /// will never be true. if ( - call.options?.expectedVersion !== undefined && - call.options?.expectedVersion !== retrievedVersion + options?.expectedVersion !== undefined && + options?.expectedVersion !== retrievedVersion ) { versionOverridesIndices.add(i); - return { entity: entityName, operation: call }; } + return { entity: entityName, - operation: { - ...call, - options: { - ...call.options, - expectedVersion: retrievedVersion, - }, - }, + operation: + call.operation === "set" + ? ({ + operation: "set", + value: call.params[0], + options: { + ...options, + expectedVersion: + options?.expectedVersion ?? retrievedVersion, + }, + } satisfies EntitySetOperation) + : ({ + operation: "delete", + key: call.params[0], + options: { + ...options, + expectedVersion: + options?.expectedVersion ?? retrievedVersion, + }, + } satisfies EntityDeleteOperation), }; } else { // values that are retrieved only, will be checked using a condition @@ -270,9 +299,9 @@ export function createTransactionExecutor( entity: entityName, operation: { operation: "condition", - key, + key: convertNormalizedEntityKeyToMap(key), version: retrievedVersion, - }, + } satisfies EntityConditionalOperation, }; } }); @@ -301,11 +330,18 @@ export function createTransactionExecutor( failedItems: result.reasons .map((r, i) => { if (isUnexpectedVersionResult(r)) { - const x = transactionItems[i]!; - const { key, namespace } = normalizeCompositeKey( - x.operation.key - ); - return { entityName: x.entity, key, namespace }; + const x: EntityTransactItem = + transactionItems[i]!; + const entity = + typeof x.entity === "string" ? getEntity(x.entity) : x.entity; + const key = + x.operation.operation === "set" + ? x.operation.value + : x.operation.key; + return { + entityName: entity.name, + key, + } satisfies TransactionFailedItem; } return undefined; }) @@ -340,9 +376,17 @@ export function createTransactionExecutor( return { output }; + function getEntity(entityName: string) { + const entity = entityProvider.getEntity(entityName); + if (!entity) { + throw new Error(`Entity ${entityName} was not found.`); + } + return entity; + } + function resolveEntity( entityName: string, - key: string | CompositeKey + key: NormalizeEntityKey ): EventualPromise | undefined> { const normalizedKey = serializeCompositeKey(entityName, key); if (retrievedEntities.has(normalizedKey)) { @@ -351,7 +395,7 @@ export function createTransactionExecutor( ); } else { return createEventualPromise(async () => { - const value = await entityStore.getEntityValue(entityName, key); + const value = await entityStore.get(entityName, key); retrievedEntities.set(normalizedKey, { entityName, key, diff --git a/packages/@eventual/core-runtime/src/utils.ts b/packages/@eventual/core-runtime/src/utils.ts index 40b0b2e0c..e7d8b5ba7 100644 --- a/packages/@eventual/core-runtime/src/utils.ts +++ b/packages/@eventual/core-runtime/src/utils.ts @@ -1,13 +1,14 @@ import { + AnyEntity, BucketNotificationEvent, - CompositeKey, + EntityKeyTuple, EntityStreamItem, } from "@eventual/core"; import { BucketNotificationHandlerSpec, EntityStreamSpec, } from "@eventual/core/internal"; -import { normalizeCompositeKey } from "./stores/entity-store.js"; +import { NormalizeEntityKey } from "./stores/entity-store.js"; export async function promiseAllSettledPartitioned( items: T[], @@ -60,17 +61,16 @@ export function getLazy( export function serializeCompositeKey( entityName: string, - _key: string | CompositeKey + key: NormalizeEntityKey ) { - const { key, namespace } = normalizeCompositeKey(_key); - return `${entityName}|${namespace ?? ""}|${key}`; + return `${entityName}|${key.partition.value}|${key.sort?.value ?? ""}`; } export function deserializeCompositeKey( sKey: string -): [string, string | CompositeKey] { - const [name, namespace, key] = sKey.split("|") as [string, string, string]; - return [name, namespace ? { key, namespace } : key]; +): [string, EntityKeyTuple] { + const [name, partition, sort] = sKey.split("|") as [string, string, string]; + return [name, sort ? [partition, sort] : [partition]]; } export function isEntityStreamItem(value: any): value is EntityStreamItem { @@ -83,22 +83,20 @@ export function isBucketNotificationEvent( return "bucketName" in value && "event" in value; } -export function entityStreamMatchesItem( - item: EntityStreamItem, +export function entityStreamMatchesItem( + entity: E, + item: EntityStreamItem, streamSpec: EntityStreamSpec ) { + const partition = item.key[entity.partitionKey]; return ( streamSpec.entityName === item.entityName && (!streamSpec.options?.operations || streamSpec.options.operations.includes(item.operation)) && - (!streamSpec.options?.namespaces || - (item.namespace && - streamSpec.options.namespaces.includes(item.namespace))) && - (!streamSpec.options?.namespacePrefixes || - (item.namespace && - streamSpec.options.namespacePrefixes.some((p) => - item.namespace?.startsWith(p) - ))) + (!streamSpec.options?.partitions || + streamSpec.options.partitions.includes(partition)) && + (!streamSpec.options?.partitionPrefixes || + streamSpec.options.partitionPrefixes.some((p) => partition.startsWith(p))) ); } diff --git a/packages/@eventual/core-runtime/src/workflow-call-executor.ts b/packages/@eventual/core-runtime/src/workflow-call-executor.ts index f95622a76..c97866a09 100644 --- a/packages/@eventual/core-runtime/src/workflow-call-executor.ts +++ b/packages/@eventual/core-runtime/src/workflow-call-executor.ts @@ -44,7 +44,6 @@ import { WorkflowEventType, } from "@eventual/core/internal"; import stream from "stream"; -import { EntityClient } from "./clients/entity-client.js"; import { EventClient } from "./clients/event-client.js"; import { ExecutionQueueClient } from "./clients/execution-queue-client.js"; import { TaskClient, TaskWorkerRequest } from "./clients/task-client.js"; @@ -52,15 +51,16 @@ import { TimerClient } from "./clients/timer-client.js"; import { TransactionClient } from "./clients/transaction-client.js"; import { WorkflowClient } from "./clients/workflow-client.js"; import { formatChildExecutionName, formatExecutionId } from "./execution.js"; -import { BucketStore } from "./index.js"; import { normalizeError } from "./result.js"; import { computeScheduleDate } from "./schedule.js"; +import { BucketStore } from "./stores/bucket-store.js"; +import { EntityStore } from "./stores/entity-store.js"; import { createEvent } from "./workflow-events.js"; import { WorkflowCall } from "./workflow-executor.js"; interface WorkflowCallExecutorProps { bucketStore: BucketStore; - entityClient: EntityClient; + entityStore: EntityStore; eventClient: EventClient; executionQueueClient: ExecutionQueueClient; taskClient: TaskClient; @@ -274,7 +274,7 @@ export class WorkflowCallExecutor { operation: call.operation, name: isEntityOperationOfType("transact", call) ? undefined - : call.name, + : call.entityName, result, seq, }, @@ -290,7 +290,7 @@ export class WorkflowCallExecutor { seq, name: isEntityOperationOfType("transact", call) ? undefined - : call.name, + : call.entityName, operation: call.operation, ...normalizeError(err), }, @@ -310,26 +310,13 @@ export class WorkflowCallExecutor { async function invokeEntityOperation(operation: EntityOperation) { if (isEntityOperationOfType("transact", operation)) { - return self.props.entityClient.transactWrite(operation.items); + return self.props.entityStore.transactWrite(operation.items); } - const entity = await self.props.entityClient.getEntity(operation.name); - if (!entity) { - throw new Error(`Entity ${operation.name} does not exist`); - } - if (isEntityOperationOfType("get", operation)) { - return entity.get(operation.key); - } else if (isEntityOperationOfType("getWithMetadata", operation)) { - return entity.getWithMetadata(operation.key); - } else if (isEntityOperationOfType("set", operation)) { - return entity.set(operation.key, operation.value, operation.options); - } else if (isEntityOperationOfType("delete", operation)) { - return entity.delete(operation.key, operation.options); - } else if (isEntityOperationOfType("list", operation)) { - return entity.list(operation.request); - } else if (isEntityOperationOfType("listKeys", operation)) { - return entity.listKeys(operation.request); - } - return assertNever(operation); + return self.props.entityStore[operation.operation]( + operation.entityName, + // @ts-ignore + ...operation.params + ); } } diff --git a/packages/@eventual/core-runtime/test/command-executor.test.ts b/packages/@eventual/core-runtime/test/command-executor.test.ts index 5746b6a0a..3d6df4665 100644 --- a/packages/@eventual/core-runtime/test/command-executor.test.ts +++ b/packages/@eventual/core-runtime/test/command-executor.test.ts @@ -1,5 +1,4 @@ import { - Entity, EventEnvelope, Schedule, SendSignalRequest, @@ -7,7 +6,6 @@ import { } from "@eventual/core"; import { ChildWorkflowScheduled, - EntityMethods, EntityRequest, EventsEmitted, SignalSent, @@ -18,7 +16,6 @@ import { WorkflowEventType, } from "@eventual/core/internal"; import { jest } from "@jest/globals"; -import { EntityClient } from "../src/clients/entity-client.js"; import { EventClient } from "../src/clients/event-client.js"; import { ExecutionQueueClient } from "../src/clients/execution-queue-client.js"; import { TaskClient } from "../src/clients/task-client.js"; @@ -29,17 +26,18 @@ import { import { TransactionClient } from "../src/clients/transaction-client.js"; import { WorkflowClient } from "../src/clients/workflow-client.js"; import { - INTERNAL_EXECUTION_ID_PREFIX, formatChildExecutionName, formatExecutionId, + INTERNAL_EXECUTION_ID_PREFIX, } from "../src/execution.js"; import { BucketStore } from "../src/stores/bucket-store.js"; +import { EntityStore } from "../src/stores/entity-store.js"; import { WorkflowCallExecutor } from "../src/workflow-call-executor.js"; import { awaitTimerCall, childWorkflowCall, - entityRequestCall, emitEventCall, + entityRequestCall, sendSignalCall, taskCall, } from "./call-util.js"; @@ -61,17 +59,13 @@ const mockExecutionQueueClient = { jest.fn() as ExecutionQueueClient["submitExecutionEvents"], sendSignal: jest.fn() as ExecutionQueueClient["sendSignal"], } satisfies Partial as ExecutionQueueClient; -const mockEntity = { - get: jest.fn() as Entity["get"], - getWithMetadata: jest.fn() as Entity["getWithMetadata"], - set: jest.fn() as Entity["set"], - delete: jest.fn() as Entity["delete"], - list: jest.fn() as Entity["list"], - listKeys: jest.fn() as Entity["listKeys"], -} satisfies EntityMethods; -const mockEntityClient = { - getEntity: jest.fn() as EntityClient["getEntity"], -} satisfies Partial as EntityClient; +const mockEntityStore = { + get: jest.fn() as EntityStore["get"], + getWithMetadata: jest.fn() as EntityStore["getWithMetadata"], + set: jest.fn() as EntityStore["set"], + delete: jest.fn() as EntityStore["delete"], + query: jest.fn() as EntityStore["query"], +} satisfies Partial as EntityStore; const mockTransactionClient = { executeTransaction: jest.fn() as TransactionClient["executeTransaction"], } satisfies Partial as TransactionClient; @@ -79,7 +73,7 @@ const mockBucketStore = {} satisfies Partial as BucketStore; const testExecutor = new WorkflowCallExecutor({ bucketStore: mockBucketStore, - entityClient: mockEntityClient, + entityStore: mockEntityStore, eventClient: mockEventClient, executionQueueClient: mockExecutionQueueClient, taskClient: mockTaskClient, @@ -95,10 +89,6 @@ const executionId = "execId/123"; const baseTime = new Date(); -beforeEach(() => { - (mockEntityClient.getEntity as jest.Mock).mockResolvedValue(mockEntity); -}); - afterEach(() => { jest.resetAllMocks(); }); @@ -278,17 +268,19 @@ describe("entity request", () => { const event = await testExecutor.executeCall( workflow, executionId, - entityRequestCall({ name: "ent", operation: "get", key: "key" }, 0), + entityRequestCall( + { entityName: "ent", operation: "get", params: [["key"]] }, + 0 + ), baseTime ); - expect(mockEntityClient.getEntity).toHaveBeenCalledWith("ent"); - expect(mockEntity.get).toHaveBeenCalledWith("key"); + expect(mockEntityStore.get).toHaveBeenCalledWith("ent", ["key"]); expect(event).toMatchObject({ seq: 0, type: WorkflowEventType.EntityRequest, - operation: { name: "ent", operation: "get", key: "key" }, + operation: { entityName: "ent", operation: "get", params: [["key"]] }, timestamp: expect.stringContaining("Z"), }); }); @@ -298,23 +290,29 @@ describe("entity request", () => { workflow, executionId, entityRequestCall( - { name: "ent", operation: "set", key: "key", value: "some value" }, + { + entityName: "ent", + operation: "set", + params: [{ key: "key", value: "some value" }], + }, 0 ), baseTime ); - expect(mockEntityClient.getEntity).toHaveBeenCalledWith("ent"); - expect(mockEntity.set).toHaveBeenCalledWith("key", "some value", undefined); + expect(mockEntityStore.set).toHaveBeenCalledWith( + "ent", + { key: "key", value: "some value" }, + undefined + ); expect(event).toMatchObject({ seq: 0, type: WorkflowEventType.EntityRequest, operation: { - name: "ent", + entityName: "ent", operation: "set", - key: "key", - value: "some value", + params: [{ key: "key", value: "some value" }], }, timestamp: expect.stringContaining("Z"), }); @@ -324,55 +322,54 @@ describe("entity request", () => { const event = await testExecutor.executeCall( workflow, executionId, - entityRequestCall({ name: "ent", operation: "delete", key: "key" }, 0), + entityRequestCall( + { entityName: "ent", operation: "delete", params: [["key"]] }, + 0 + ), baseTime ); - expect(mockEntityClient.getEntity).toHaveBeenCalledWith("ent"); - expect(mockEntity.delete).toHaveBeenCalledWith("key", undefined); - - expect(event).toMatchObject({ - seq: 0, - type: WorkflowEventType.EntityRequest, - operation: { name: "ent", operation: "delete", key: "key" }, - timestamp: expect.stringContaining("Z"), - }); - }); - - test("list", async () => { - const event = await testExecutor.executeCall( - workflow, - executionId, - entityRequestCall({ name: "ent", operation: "list", request: {} }, 0), - baseTime + expect(mockEntityStore.delete).toHaveBeenCalledWith( + "ent", + ["key"], + undefined ); - expect(mockEntityClient.getEntity).toHaveBeenCalledWith("ent"); - expect(mockEntity.list).toHaveBeenCalledWith({}); - expect(event).toMatchObject({ seq: 0, type: WorkflowEventType.EntityRequest, - operation: { name: "ent", operation: "list", request: {} }, + operation: { entityName: "ent", operation: "delete", params: [["key"]] }, timestamp: expect.stringContaining("Z"), }); }); - test("listKeys", async () => { + test("query", async () => { const event = await testExecutor.executeCall( workflow, executionId, - entityRequestCall({ name: "ent", operation: "listKeys", request: {} }, 0), + entityRequestCall( + { + entityName: "ent", + operation: "query", + params: [{ partition: "part" }], + }, + 0 + ), baseTime ); - expect(mockEntityClient.getEntity).toHaveBeenCalledWith("ent"); - expect(mockEntity.listKeys).toHaveBeenCalledWith({}); + expect(mockEntityStore.query).toHaveBeenCalledWith("ent", { + partition: "part", + }); expect(event).toMatchObject({ seq: 0, type: WorkflowEventType.EntityRequest, - operation: { name: "ent", operation: "listKeys", request: {} }, + operation: { + entityName: "ent", + operation: "query", + params: [{ partition: "part" }], + }, timestamp: expect.stringContaining("Z"), }); }); diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index d7a15a2d0..e95f7511b 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -1,9 +1,17 @@ -import { entity as _entity, event, TransactionContext } from "@eventual/core"; +import { + entity as _entity, + EntityKeyField, + EntityOptions, + EntityValue, + event, + TransactionContext, +} from "@eventual/core"; import { entities, registerEntityHook, Result } from "@eventual/core/internal"; import { jest } from "@jest/globals"; -import { EntityClient } from "../src/clients/entity-client.js"; +import { z } from "zod"; import { EventClient } from "../src/clients/event-client.js"; import { ExecutionQueueClient } from "../src/clients/execution-queue-client.js"; +import { GlobalEntityProvider } from "../src/index.js"; import { NoOpLocalEnvConnector } from "../src/local/local-container.js"; import { LocalEntityStore } from "../src/local/stores/entity-store.js"; import { EntityStore } from "../src/stores/entity-store.js"; @@ -15,9 +23,17 @@ import { const entity = (() => { let n = 0; - return () => { + return < + E extends EntityValue, + P extends EntityKeyField = EntityKeyField, + S extends EntityKeyField | undefined = EntityKeyField | undefined + >( + options: EntityOptions + ) => { + // @ts-ignore + const e: E = undefined as any; while (entities().has(`ent${++n}`)) {} - return _entity(`ent${n}`); + return _entity(`ent${n}`, options); }; })(); @@ -31,6 +47,7 @@ const mockEventClient = { let store: EntityStore; let executor: TransactionExecutor; +const entityProvider = new GlobalEntityProvider(); const event1 = event("event1"); beforeEach(() => { @@ -38,12 +55,14 @@ beforeEach(() => { store = new LocalEntityStore({ localConnector: NoOpLocalEnvConnector, + entityProvider, }); - registerEntityHook(new EntityClient(store)); + registerEntityHook(store); executor = createTransactionExecutor( store, + entityProvider, mockExecutionQueueClient, mockEventClient ); @@ -55,11 +74,16 @@ const context: TransactionContext = { }, }; +const simpleSchema = z.object({ key: z.string(), value: z.number() }); + test("just get", async () => { - const d1 = entity(); + const d1 = entity({ + schema: z.object({ key: z.string(), value: z.number() }), + partitionKey: "key", + }); const result = await executor( () => { - return d1.get("1"); + return d1.get({ key: "1" }); }, undefined, context @@ -71,10 +95,10 @@ test("just get", async () => { }); test("just set", async () => { - const d1 = entity(); + const d1 = entity({ partitionKey: "key", schema: simpleSchema }); const result = await executor( () => { - return d1.set("1", 1); + return d1.set({ key: "1", value: 1 }); }, undefined, context @@ -84,20 +108,20 @@ test("just set", async () => { result: Result.resolved({ version: 1 }), }); - await expect(store.getEntityValue(d1.name, "1")).resolves.toEqual({ + await expect(store.get(d1.name, [{ key: "1" }])).resolves.toEqual({ entity: 1, version: 1, }); }); test("just delete", async () => { - const d1 = entity(); + const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); - await store.setEntityValue(d1.name, "1", 0); + await store.set(d1.name, [{ key: "1", value: 0 }]); const result = await executor( () => { - return d1.delete("1"); + return d1.delete(["1"]); }, undefined, context @@ -107,17 +131,17 @@ test("just delete", async () => { result: Result.resolved(undefined), }); - await expect(store.getEntityValue(d1.name, "1")).resolves.toBeUndefined(); + await expect(store.get(d1.name, { key: "1" })).resolves.toBeUndefined(); }); test("multiple operations", async () => { - const d1 = entity(); - const d2 = entity(); + const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d2 = entity({ schema: simpleSchema, partitionKey: "value" }); const result = await executor( async () => { - await d1.set("1", 1); - await d2.set("1", "a"); + await d1.set({ key: "1", value: 1 }); + await d2.set({ key: "1", value: 1 }); }, undefined, context @@ -127,27 +151,27 @@ test("multiple operations", async () => { result: Result.resolved(undefined), }); - await expect(store.getEntityValue(d1.name, "1")).resolves.toEqual({ - entity: 1, + await expect(store.get(d1.name, { key: "1" })).resolves.toEqual({ + entity: { key: "1", value: 1 }, version: 1, }); - await expect(store.getEntityValue(d2.name, "1")).resolves.toEqual({ - entity: "a", + await expect(store.get(d2.name, [1])).resolves.toEqual({ + entity: { key: "1", value: 1 }, version: 1, }); }); test("multiple operations fail", async () => { - const d1 = entity(); - const d2 = entity(); + const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d2 = entity({ schema: simpleSchema, partitionKey: "value" }); - await store.setEntityValue(d1.name, "1", 0); + await store.set(d1.name, { key: "1", value: 0 }); const result = await executor( async () => { - await d1.set("1", 1, { expectedVersion: 3 }); - await d2.set("1", "a"); + await d1.set({ key: "1", value: 1 }, { expectedVersion: 3 }); + await d2.set({ key: "1", value: 1 }); }, undefined, context @@ -157,27 +181,27 @@ test("multiple operations fail", async () => { result: Result.failed(Error("Failed after an explicit conflict.")), }); - await expect(store.getEntityValue(d1.name, "1")).resolves.toEqual({ + await expect(store.get(d1.name, ["1"])).resolves.toEqual({ entity: 0, version: 1, }); - await expect(store.getEntityValue(d2.name, "1")).resolves.toBeUndefined(); + await expect(store.get(d2.name, [1])).resolves.toBeUndefined(); }); test("retry when retrieved data changes version", async () => { - const d1 = entity(); + const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); - await store.setEntityValue(d1.name, "1", 0); + await store.set(d1.name, { key: "1", value: 0 }); const result = await executor( async () => { - const v = await d1.get("1"); + const v = await d1.get(["1"]); // this isn't kosher... normally - if (v === 0) { - await store.setEntityValue(d1.name, "1", v! + 1); + if (v?.value === 0) { + await store.set(d1.name, { key: "1", value: v.value + 1 }); } - await d1.set("1", v! + 1); + await d1.set({ key: "1", value: v!.value + 1 }); }, undefined, context @@ -187,25 +211,25 @@ test("retry when retrieved data changes version", async () => { result: Result.resolved(undefined), }); - await expect(store.getEntityValue(d1.name, "1")).resolves.toEqual({ - entity: 2, + await expect(store.get(d1.name, ["1"])).resolves.toEqual({ + entity: { key: "1", value: 2 }, version: 3, }); }); test("retry when retrieved data changes version multiple times", async () => { - const d1 = entity(); + const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); - await store.setEntityValue(d1.name, "1", 0); + await store.set(d1.name, { key: "1", value: 0 }); const result = await executor( async () => { - const v = (await d1.get("1")) ?? 0; + const { value } = (await d1.get(["1"])) ?? { value: 0 }; // this isn't kosher... normally - if (v < 2) { - await store.setEntityValue(d1.name, "1", v + 1); + if (value < 2) { + await store.set(d1.name, { key: "1", value: value + 1 }); } - await d1.set("1", v + 1); + await d1.set({ key: "1", value: value + 1 }); }, undefined, context @@ -215,19 +239,19 @@ test("retry when retrieved data changes version multiple times", async () => { result: Result.resolved(undefined), }); - await expect(store.getEntityValue(d1.name, "1")).resolves.toEqual({ - entity: 3, + await expect(store.get(d1.name, ["1"])).resolves.toEqual({ + entity: { key: "1", value: 3 }, version: 4, }); }); test("emit events on success", async () => { - const d1 = entity(); + const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); const result = await executor( async () => { event1.emit({ n: 1 }); - await d1.set("1", 1); + await d1.set({ key: "1", value: 1 }); event1.emit({ n: 1 }); }, undefined, @@ -242,20 +266,20 @@ test("emit events on success", async () => { }); test("emit events after retry", async () => { - const d1 = entity(); + const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); - await store.setEntityValue(d1.name, "1", 0); + await store.get(d1.name, { key: "1", value: 0 }); const result = await executor( async () => { event1.emit({ n: 1 }); - const v = await d1.get("1"); + const v = await d1.get(["1"]); event1.emit({ n: v }); // this isn't kosher... normally - if (v === 0) { - await store.setEntityValue(d1.name, "1", v! + 1); + if (v?.value === 0) { + await store.set(d1.name, { key: "1", value: v!.value + 1 }); } - await d1.set("1", v! + 1); + await d1.set({ key: "1", value: v!.value + 1 }); event1.emit({ n: 1 }); }, undefined, @@ -270,14 +294,14 @@ test("emit events after retry", async () => { }); test("events not emitted on failure", async () => { - const d1 = entity(); + const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); - await store.setEntityValue(d1.name, "1", 0); + await store.set(d1.name, { key: "1", value: 0 }); const result = await executor( async () => { event1.emit({ n: 1 }); - await d1.set("1", 1, { expectedVersion: 1000 }); + await d1.set({ key: "1", value: 1 }, { expectedVersion: 1000 }); event1.emit({ n: 1 }); }, undefined, diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index b865d0080..0fb7c4c03 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -1,9 +1,7 @@ -import type { z } from "zod"; +import { z } from "zod"; import { createEventualCall, EntityCall, - EntityDeleteOperation, - EntitySetOperation, EventualCallKind, } from "./internal/calls.js"; import { getEntityHook } from "./internal/entity-hook.js"; @@ -17,40 +15,32 @@ import { } from "./internal/service-spec.js"; import type { ServiceContext } from "./service.js"; -export interface CompositeKey { - namespace: string; - key: string; +export interface EntityQueryResultEntry { + entity: E; + version: number; } -export interface EntityListResult { - entries?: { key: string; entity: Entity; version: number }[]; +export interface EntityQueryResult { + entries?: EntityQueryResultEntry[]; /** * Returned when there are more values than the limit allowed to return. */ nextToken?: string; } -export interface EntityListKeysResult { - /** - * Keys that match the provided prefix. If using composite keys, this will only be the key part (not the namespace). - */ - keys?: string[]; - /** - * Returned when there are more values than the limit allowed to return. - */ - nextToken?: string; -} - -export interface EntityListRequest { +export interface EntityQueryRequest< + E extends EntityValue, + Partition extends EntityKeyField +> { /** - * Namespace to retrieve values for. + * Partition key to retrieve values for. * * @default - retrieve values with no namespace. */ - namespace?: string; + partition: E[Partition]; /** - * Key prefix to retrieve values or keys for. - * Values are only retrieved for a single name + namespace pair (including no namespace). + * Sort key prefix to retrieve values or keys for. + * Values are only retrieved for a single name + partition pair. */ prefix?: string; /** @@ -88,65 +78,151 @@ export interface EntityStreamContext { service: ServiceContext; } -export interface EntityStreamHandler { +export interface EntityStreamHandler { /** * Provides the keys, new value */ - (item: EntityStreamItem, context: EntityStreamContext): + (item: EntityStreamItem, context: EntityStreamContext): | Promise | void | false; } -export interface EntityStreamItemBase { +export interface EntityStreamItemBase { streamName: string; entityName: string; - namespace?: string; - key: string; + key: EntityCompositeKeyFromEntity; } -export type EntityStreamItem = - | EntityStreamInsertItem - | EntityStreamModifyItem - | EntityStreamRemoveItem; +export type EntityStreamItem = + | EntityStreamInsertItem + | EntityStreamModifyItem + | EntityStreamRemoveItem; -export interface EntityStreamInsertItem extends EntityStreamItemBase { - newValue: Entity; +export interface EntityStreamInsertItem + extends EntityStreamItemBase { + newValue: EntitySchema; newVersion: number; operation: "insert"; } -export interface EntityStreamModifyItem extends EntityStreamItemBase { +export interface EntityStreamModifyItem + extends EntityStreamItemBase { operation: "modify"; - newValue: Entity; + newValue: EntitySchema; newVersion: number; - oldValue?: Entity; + oldValue?: EntitySchema; oldVersion?: number; } -export interface EntityStreamRemoveItem extends EntityStreamItemBase { +export interface EntityStreamRemoveItem + extends EntityStreamItemBase { operation: "remove"; - oldValue?: Entity; + oldValue?: EntitySchema; oldVersion?: number; } -export interface EntityStream extends EntityStreamSpec { +export interface EntityStream extends EntityStreamSpec { kind: "EntityStream"; - handler: EntityStreamHandler; + handler: EntityStreamHandler; sourceLocation?: SourceLocation; } -export interface Entity extends Omit { +export type AnyEntity = Entity; + +export type EntityValueMember = + | EntityValue + | string + | number + | boolean + | EntityValueMember[]; + +export type EntityValue = { + [key: string]: EntityValueMember; +}; + +export type EntityKeyField = { + [K in keyof E]: K extends string + ? E[K] extends string | number + ? K + : never + : never; +}[keyof E]; + +// export type EntitySortKeyField = Exclude< +// EntityKeyField, +// Partition +// >; + +export type EntityCompositeKeyFromEntity = + E extends Entity + ? EntityCompositeKey + : never; + +export type EntityCompositeKey< + E extends EntityValue, + Partition extends EntityKeyField, + Sort extends EntityKeyField | undefined +> = Sort extends undefined + ? Pick + : Pick>; + +export type EntityKeyTuple< + E extends EntityValue, + Partition extends EntityKeyField, + Sort extends EntityKeyField | undefined +> = Sort extends undefined + ? [p: E[Partition]] + : [p: E[Partition], s: E[Exclude]]; + +export type EntityKey< + E extends EntityValue, + Partition extends EntityKeyField, + Sort extends EntityKeyField | undefined +> = EntityCompositeKey | EntityKeyTuple; + +export type AnyEntityKey = EntityKey; + +export type EntityPartitionKey = E extends Entity< + EntitySchema, + infer Partition, + any +> + ? Partition + : never; +export type EntitySortKey = E extends Entity< + EntitySchema, + EntityPartitionKey, + infer Sort +> + ? Sort + : never; +export type EntitySchema = E extends Entity< + infer Schema, + any, + any +> + ? Schema + : never; + +export interface Entity< + E extends EntityValue, + P extends EntityKeyField, + S extends EntityKeyField | undefined +> extends Omit { + __entityBrand: E; kind: "Entity"; + partitionKey: P; + sortKey?: S; schema?: z.Schema; - streams: EntityStream[]; + streams: EntityStream>[]; /** * Get a value. * If your values use composite keys, the namespace must be provided. * * @param key - key or {@link CompositeKey} of the value to retrieve. */ - get(key: string | CompositeKey): Promise; + get(key: EntityKey): Promise; /** * Get a value and metadata like version. * If your values use composite keys, the namespace must be provided. @@ -154,7 +230,7 @@ export interface Entity extends Omit { * @param key - key or {@link CompositeKey} of the value to retrieve. */ getWithMetadata( - key: string | CompositeKey + key: EntityKey ): Promise<{ entity: E; version: number } | undefined>; /** * Sets or updates a value within an entity and optionally a namespace. @@ -162,16 +238,12 @@ export interface Entity extends Omit { * Values with namespaces are considered distinct from value without a namespace or within different namespaces. * Values and keys can only be listed within a single namespace. */ - set( - key: string | CompositeKey, - entity: E, - options?: EntitySetOptions - ): Promise<{ version: number }>; + set(entity: E, options?: EntitySetOptions): Promise<{ version: number }>; /** * Deletes a single entry within an entity and namespace. */ delete( - key: string | CompositeKey, + key: EntityKey, options?: EntityConsistencyOptions ): Promise; /** @@ -179,39 +251,56 @@ export interface Entity extends Omit { * * If namespace is not provided, only values which do not use composite keys will be returned. */ - list(request: EntityListRequest): Promise>; - /** - * List keys that match a prefix within an entity and namespace. - * - * If namespace is not provided, only values which do not use composite keys will be returned. - */ - listKeys(request: EntityListRequest): Promise; + query(request: EntityQueryRequest): Promise>; stream( name: string, options: EntityStreamOptions, - handler: EntityStreamHandler - ): EntityStream; - stream(name: string, handler: EntityStreamHandler): EntityStream; + handler: EntityStreamHandler> + ): EntityStream>; + stream( + name: string, + handler: EntityStreamHandler> + ): EntityStream>; } export interface EntityTransactItem< - E = any, - D extends string | Entity = string | Entity + E extends EntityValue, + P extends EntityKeyField = EntityKeyField, + S extends EntityKeyField | undefined = EntityKeyField | undefined > { - entity: D; + entity: Entity | string; operation: - | Omit, "name"> - | Omit - | Omit; + | EntitySetOperation + | EntityDeleteOperation + | EntityConditionalOperation; +} + +export interface EntitySetOperation { + operation: "set"; + value: E; + options?: EntitySetOptions; +} + +export interface EntityDeleteOperation< + E extends EntityValue, + P extends EntityKeyField, + S extends EntityKeyField | undefined +> { + operation: "delete"; + key: EntityKey; + options?: EntitySetOptions; } /** * Used in transactions, cancels the transaction if the key's version does not match. */ -export interface EntityConditionalOperation { +export interface EntityConditionalOperation< + E extends EntityValue = EntityValue, + P extends EntityKeyField = EntityKeyField, + S extends EntityKeyField | undefined = EntityKeyField | undefined +> { operation: "condition"; - name: string; - key: string | CompositeKey; + key: EntityKey; version?: number; } @@ -231,7 +320,21 @@ export const Entity = { }, }; -export function entity(name: string, schema?: z.Schema): Entity { +export interface EntityOptions< + E extends EntityValue, + P extends string, + S extends string | undefined +> { + partitionKey: P; + sortKey?: S; + schema: z.Schema; +} + +export function entity< + E extends EntityValue, + P extends EntityKeyField, + S extends EntityKeyField | undefined +>(name: string, options: EntityOptions): Entity { if (entities().has(name)) { throw new Error(`entity with name '${name}' already exists`); } @@ -239,116 +342,98 @@ export function entity(name: string, schema?: z.Schema): Entity { /** * Used to maintain a limited number of streams on the entity. */ - const streams: EntityStream[] = []; + const streams: EntityStream>[] = []; - const entity: Entity = { + const entity: Entity = { + // @ts-ignore + __entityBrand: undefined, kind: "Entity", name, - schema, + partitionKey: options.partitionKey, + sortKey: options.sortKey, + schema: options.schema, streams, - get: (key: string | CompositeKey) => { + get: (...args) => { return getEventualCallHook().registerEventualCall( createEventualCall>(EventualCallKind.EntityCall, { - name, operation: "get", - key, + entityName: name, + params: args, }), async () => { - return (await getEntity()).get(key); + return getEntityHook().get(name, ...args); } ); }, - getWithMetadata: (key: string | CompositeKey) => { + getWithMetadata: (...args) => { return getEventualCallHook().registerEventualCall( createEventualCall>( EventualCallKind.EntityCall, { - name, operation: "getWithMetadata", - key, + entityName: name, + params: args, } ), async () => { - return (await getEntity()).getWithMetadata(key); + return getEntityHook().getWithMetadata(name, ...args); } ); }, - set: ( - key: string | CompositeKey, - entity: E, - options?: EntitySetOptions - ) => { + set: (...args) => { return getEventualCallHook().registerEventualCall( createEventualCall>(EventualCallKind.EntityCall, { - name, + entityName: name, operation: "set", - key, - options, - value: entity, + params: args, }), async () => { - return (await getEntity()).set(key, entity, options); + return getEntityHook().set(name, ...args); } ); }, - delete: (key, options) => { + delete: (...args) => { return getEventualCallHook().registerEventualCall( createEventualCall>(EventualCallKind.EntityCall, { - name, + entityName: name, operation: "delete", - key, - options, + params: args, }), async () => { - return (await getEntity()).delete(key, options); + return getEntityHook().delete(name, ...args); } ); }, - list: (request) => { + query: (...args) => { return getEventualCallHook().registerEventualCall( - createEventualCall>(EventualCallKind.EntityCall, { - name, - operation: "list", - request, + createEventualCall>(EventualCallKind.EntityCall, { + entityName: name, + operation: "query", + params: args, }), async () => { - return (await getEntity()).list(request); - } - ); - }, - listKeys: (request) => { - return getEventualCallHook().registerEventualCall( - createEventualCall>( - EventualCallKind.EntityCall, - { - name, - operation: "listKeys", - request, - } - ), - async () => { - return (await getEntity()).listKeys(request); + return getEntityHook().query(name, ...args); } ); }, stream: ( ...args: - | [name: string, handler: EntityStreamHandler] + | [name: string, handler: EntityStreamHandler>] | [ name: string, options: EntityStreamOptions, - handler: EntityStreamHandler + handler: EntityStreamHandler> ] | [ sourceLocation: SourceLocation, name: string, - handler: EntityStreamHandler + handler: EntityStreamHandler> ] | [ sourceLocation: SourceLocation, name: string, options: EntityStreamOptions, - handler: EntityStreamHandler + handler: EntityStreamHandler> ] ) => { const [sourceLocation, streamName, options, handler] = @@ -364,7 +449,7 @@ export function entity(name: string, schema?: z.Schema): Entity { throw new Error("Only two streams are allowed per entity."); } - const entityStream: EntityStream = { + const entityStream: EntityStream> = { kind: "EntityStream", handler, name: streamName, @@ -382,36 +467,27 @@ export function entity(name: string, schema?: z.Schema): Entity { entities().set(name, entity); return entity; - - async function getEntity() { - const entityHook = getEntityHook(); - const entity = await entityHook.getEntity(name); - if (!entity) { - throw new Error(`Entity ${name} does not exist.`); - } - return entity; - } } -export function entityStream( +export function entityStream( ...args: - | [name: string, entity: Entity, handler: EntityStreamHandler] + | [name: string, entity: E, handler: EntityStreamHandler] | [ name: string, - entity: Entity, + entity: E, options: EntityStreamOptions, handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - entity: Entity, + entity: E, handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - entity: Entity, + entity: E, options: EntityStreamOptions, handler: EntityStreamHandler ] @@ -422,11 +498,11 @@ export function entityStream( : args.length === 5 ? args : isSourceLocation(args[0]) - ? [args[0], args[1] as string, args[2] as Entity, , args[3]] + ? [args[0], args[1] as string, args[2] as E, , args[3]] : [ , args[0] as string, - args[1] as Entity, + args[1] as E, args[2] as EntityStreamOptions, args[3], ]; diff --git a/packages/@eventual/core/src/internal/calls.ts b/packages/@eventual/core/src/internal/calls.ts index 34c462cf2..bf4bb7035 100644 --- a/packages/@eventual/core/src/internal/calls.ts +++ b/packages/@eventual/core/src/internal/calls.ts @@ -1,16 +1,11 @@ import type { Bucket } from "../bucket.js"; import type { ConditionPredicate } from "../condition.js"; -import type { - CompositeKey, - EntityConsistencyOptions, - EntityListRequest, - EntitySetOptions, - EntityTransactItem, -} from "../entity.js"; +import type { AnyEntity, EntityTransactItem } from "../entity.js"; import type { EventEnvelope } from "../event.js"; import type { DurationSchedule, Schedule } from "../schedule.js"; import type { WorkflowExecutionOptions } from "../workflow.js"; import type { BucketMethod } from "./bucket-hook.js"; +import { EntityMethod } from "./entity-hook.js"; import type { SignalTarget } from "./signal.js"; export type EventualCall = @@ -107,58 +102,21 @@ export type EntityCall< export function isEntityOperationOfType< OpType extends EntityOperation["operation"] ->( - operation: OpType, - call: EntityOperation -): call is EntityOperation & { operation: OpType } { +>(operation: OpType, call: EntityOperation): call is EntityOperation { return call.operation === operation; } -export interface EntityOperationBase { - name: string; -} - -export type EntityOperation = - | EntityDeleteOperation - | EntityGetOperation - | EntityGetWithMetadataOperation - | EntityListOperation - | EntityListKeysOperation - | EntitySetOperation - | EntityTransactOperation; - -export interface EntityGetOperation extends EntityOperationBase { - operation: "get"; - key: string | CompositeKey; -} - -export interface EntityGetWithMetadataOperation extends EntityOperationBase { - operation: "getWithMetadata"; - key: string | CompositeKey; -} - -export interface EntityDeleteOperation extends EntityOperationBase { - operation: "delete"; - key: string | CompositeKey; - options?: EntityConsistencyOptions; -} - -export interface EntitySetOperation extends EntityOperationBase { - operation: "set"; - key: string | CompositeKey; - value: E; - options?: EntitySetOptions; -} - -export interface EntityListOperation extends EntityOperationBase { - operation: "list"; - request: EntityListRequest; -} - -export interface EntityListKeysOperation extends EntityOperationBase { - operation: "listKeys"; - request: EntityListRequest; -} +export type EntityOperation< + Op extends EntityMethod | EntityTransactOperation["operation"] = + | EntityMethod + | EntityTransactOperation["operation"] +> = Op extends EntityMethod + ? { + operation: Op; + entityName: string; + params: Parameters; + } + : EntityTransactOperation; export interface EntityTransactOperation { operation: "transact"; diff --git a/packages/@eventual/core/src/internal/entity-hook.ts b/packages/@eventual/core/src/internal/entity-hook.ts index de536d8a5..1f260574d 100644 --- a/packages/@eventual/core/src/internal/entity-hook.ts +++ b/packages/@eventual/core/src/internal/entity-hook.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import type { Entity, EntityTransactItem } from "../entity.js"; +import type { AnyEntity, Entity, EntityTransactItem } from "../entity.js"; declare global { var eventualEntityHook: EntityHook | undefined; @@ -10,9 +10,11 @@ export interface EntityDefinition { schema: z.Schema; } -export type EntityMethods = Pick< - Entity, - "get" | "getWithMetadata" | "delete" | "set" | "list" | "listKeys" +export type EntityMethod = Exclude< + { + [k in keyof AnyEntity]: [AnyEntity[k]] extends [Function] ? k : never; + }[keyof AnyEntity], + "partitionKey" | "sortKey" | "stream" | "__entityBrand" | undefined >; /** @@ -20,10 +22,14 @@ export type EntityMethods = Pick< * * Does not handle the workflow case. That is handled by the {@link entity} function in core. */ -export interface EntityHook { - getEntity(name: string): Promise | undefined>; +export type EntityHook = { + [K in EntityMethod]: ( + entityName: string, + ...args: Parameters + ) => ReturnType; +} & { transactWrite(items: EntityTransactItem[]): Promise; -} +}; export function getEntityHook() { const hook = globalThis.eventualEntityHook; diff --git a/packages/@eventual/core/src/internal/global.ts b/packages/@eventual/core/src/internal/global.ts index 299c1f128..1f78e2057 100644 --- a/packages/@eventual/core/src/internal/global.ts +++ b/packages/@eventual/core/src/internal/global.ts @@ -1,6 +1,6 @@ import type { AsyncLocalStorage } from "async_hooks"; import type { Bucket } from "../bucket.js"; -import type { Entity } from "../entity.js"; +import type { AnyEntity } from "../entity.js"; import type { Event } from "../event.js"; import type { AnyCommand } from "../http/command.js"; import type { EventualServiceClient } from "../service-client.js"; @@ -33,7 +33,7 @@ declare global { /** * A simple key value store that work efficiently within eventual. */ - entities?: Map>; + entities?: Map; /** * A data bucket within eventual. */ @@ -80,8 +80,8 @@ export const events = (): Map => export const subscriptions = (): Subscription[] => (globalThis._eventual.subscriptions ??= []); -export const entities = (): Map> => - (globalThis._eventual.entities ??= new Map>()); +export const entities = (): Map => + (globalThis._eventual.entities ??= new Map()); export const buckets = (): Map => (globalThis._eventual.buckets ??= new Map()); diff --git a/packages/@eventual/core/src/internal/service-spec.ts b/packages/@eventual/core/src/internal/service-spec.ts index e8806534e..f1cc27494 100644 --- a/packages/@eventual/core/src/internal/service-spec.ts +++ b/packages/@eventual/core/src/internal/service-spec.ts @@ -163,6 +163,8 @@ export interface BucketNotificationHandlerSpec { export interface EntitySpec { name: string; + partitionKey: string; + sortKey?: string; /** * An Optional schema for the entity within an entity. */ @@ -188,13 +190,13 @@ export interface EntityStreamOptions extends FunctionRuntimeProps { * * If neither `namespaces` or `namespacePrefixes` are provided, all namespaces will be sent. */ - namespaces?: string[]; + partitions?: string[]; /** * One or more namespace prefixes to match. * * If neither `namespaces` or `namespacePrefixes` are provided, all namespaces will be sent. */ - namespacePrefixes?: string[]; + partitionPrefixes?: string[]; } export interface EntityStreamSpec { diff --git a/packages/@eventual/testing/src/environment.ts b/packages/@eventual/testing/src/environment.ts index fd8b79400..8dd33f0ce 100644 --- a/packages/@eventual/testing/src/environment.ts +++ b/packages/@eventual/testing/src/environment.ts @@ -407,9 +407,12 @@ export class TestEnvironment extends RuntimeServiceClient { } }), entityStreamItems.flatMap((i) => { + const entity = this.localContainer.entityProvider.getEntity( + i.entityName + ); const streamNames = [...entities().values()] .flatMap((d) => d.streams) - .filter((s) => entityStreamMatchesItem(i, s)) + .filter((s) => entityStreamMatchesItem(entity, i, s)) .map((s) => s.name); return streamNames.map((streamName) => { return this.localContainer.entityStreamWorker({ diff --git a/packages/@eventual/testing/test/env.test.ts b/packages/@eventual/testing/test/env.test.ts index cafe1aa6a..a41ed0a31 100644 --- a/packages/@eventual/testing/test/env.test.ts +++ b/packages/@eventual/testing/test/env.test.ts @@ -1,18 +1,17 @@ import type { SQSClient } from "@aws-sdk/client-sqs"; import { - CompositeKey, Entity, + entity, EventPayloadType, EventualError, Execution, ExecutionStatus, SubscriptionHandler, + task as _task, TaskHandler, Timeout, - WorkflowHandler, - task as _task, workflow as _workflow, - entity, + WorkflowHandler, } from "@eventual/core"; import { tasks, workflows } from "@eventual/core/internal"; import { jest } from "@jest/globals"; @@ -1290,18 +1289,27 @@ describe("time", () => { }); }); -const myEntity = entity<{ n: number }>("testEntity1", z.any()); +const myEntity = entity("testEntity1", { + schema: z.object({ n: z.number(), id: z.string() }), + partitionKey: "id", +}); + +const myEntityWithSort = entity("testEntity2", { + schema: z.object({ n: z.number(), id: z.string(), part: z.string() }), + partitionKey: "part", + sortKey: "id", +}); describe("entity", () => { test("workflow and task uses get and set", async () => { const entityTask = task(async (_, { execution: { id } }) => { - await myEntity.set(id, { n: ((await myEntity.get(id))?.n ?? 0) + 1 }); + await myEntity.set({ id, n: ((await myEntity.get([id]))?.n ?? 0) + 1 }); }); const wf = workflow(async (_, { execution: { id } }) => { - await myEntity.set(id, { n: 1 }); + await myEntity.set({ id, n: 1 }); await entityTask(); - const value = await myEntity.get(id); - myEntity.delete(id); + const value = await myEntity.get([id]); + myEntity.delete({ id }); return value; }); @@ -1315,7 +1323,7 @@ describe("entity", () => { await expect(execution.getStatus()).resolves.toMatchObject< Partial> >({ - result: { n: 2 }, + result: { n: 2, id: execution.executionId }, status: ExecutionStatus.SUCCEEDED, }); }); @@ -1323,19 +1331,22 @@ describe("entity", () => { test("workflow and task uses get and set with namespaces", async () => { const entityTask = task( async (namespace: string, { execution: { id } }) => { - const key = { namespace, key: id }; - await myEntity.set(key, { n: ((await myEntity.get(key))?.n ?? 0) + 1 }); + const key = { part: namespace, id }; + await myEntityWithSort.set({ + ...key, + n: ((await myEntity.get(key))?.n ?? 0) + 1, + }); } ); const wf = workflow(async (_, { execution: { id } }) => { - await myEntity.set({ namespace: "1", key: id }, { n: 1 }); - await myEntity.set({ namespace: "2", key: id }, { n: 100 }); + await myEntityWithSort.set({ part: "1", id, n: 1 }); + await myEntityWithSort.set({ part: "2", id, n: 100 }); await entityTask("1"); await entityTask("2"); - const value = await myEntity.get({ namespace: "1", key: id }); - const value2 = await myEntity.get({ namespace: "2", key: id }); - await myEntity.delete({ namespace: "1", key: id }); - await myEntity.delete({ namespace: "2", key: id }); + const value = await myEntityWithSort.get({ part: "1", id }); + const value2 = await myEntityWithSort.get({ part: "2", id }); + await myEntityWithSort.delete({ part: "1", id }); + await myEntityWithSort.delete({ part: "2", id }); return value!.n + value2!.n; }); @@ -1356,37 +1367,41 @@ describe("entity", () => { test("version", async () => { const wf = workflow(async (_, { execution: { id } }) => { - const key: CompositeKey = { namespace: "versionTest", key: id }; + const key = { part: "versionTest", id }; // set - version 1 - value 1 - const { version } = await myEntity.set(key, { n: 1 }); + const { version } = await myEntityWithSort.set({ ...key, n: 1 }); // set - version 2 - value 2 - const { version: version2 } = await myEntity.set( - key, - { n: 2 }, + const { version: version2 } = await myEntityWithSort.set( + { ...key, n: 2 }, { expectedVersion: version } ); try { // try set to 3, fail - await myEntity.set(key, { n: 3 }, { expectedVersion: version }); + await myEntityWithSort.set( + { ...key, n: 3 }, + { expectedVersion: version } + ); } catch { // set - version 2 (unchanged) - value 3 - await myEntity.set( - key, - { n: 4 }, + await myEntityWithSort.set( + { ...key, n: 4 }, { expectedVersion: version2, incrementVersion: false } ); } try { // try delete and fail - await myEntity.delete(key, { expectedVersion: version }); + await myEntityWithSort.delete(key, { expectedVersion: version }); } catch { // set - version 3 - value 5 - await myEntity.set(key, { n: 5 }, { expectedVersion: version2 }); + await myEntityWithSort.set( + { ...key, n: 5 }, + { expectedVersion: version2 } + ); } - const value = await myEntity.getWithMetadata(key); + const value = await myEntityWithSort.getWithMetadata(key); // delete at version 3 - myEntity.delete(key, { expectedVersion: value!.version }); + myEntityWithSort.delete(key, { expectedVersion: value!.version }); return value; }); @@ -1400,7 +1415,10 @@ describe("entity", () => { await expect(execution.getStatus()).resolves.toMatchObject< Partial> >({ - result: { entity: { n: 5 }, version: 3 }, + result: { + entity: { n: 5, id: execution.executionId, part: "versionTest" }, + version: 3, + }, status: ExecutionStatus.SUCCEEDED, }); }); @@ -1439,12 +1457,13 @@ describe("entity", () => { ); const wf = workflow(async (_, { execution: { id } }) => { - const { version: version1 } = await myEntity.set(id, { n: 1 }); - const { version: version2 } = await myEntity.set( - { key: id, namespace: "2" }, - { n: 1 } - ); - await myEntity.set({ key: id, namespace: "3" }, { n: 1 }); + const { version: version1 } = await myEntity.set({ id, n: 1 }); + const { version: version2 } = await myEntityWithSort.set({ + id, + part: "2", + n: 1, + }); + await myEntityWithSort.set({ id, part: "3", n: 1 }); await testTask({ version: version1, value: 2 }); try { @@ -1452,9 +1471,9 @@ describe("entity", () => { } catch {} return Promise.all([ - myEntity.get(id), - myEntity.get({ key: id, namespace: "2" }), - myEntity.get({ key: id, namespace: "3" }), + myEntity.get([id]), + myEntityWithSort.get({ id, part: "2" }), + myEntityWithSort.get({ id, part: "3" }), ]); }); @@ -1468,7 +1487,11 @@ describe("entity", () => { await expect(execution.getStatus()).resolves.toMatchObject< Partial> >({ - result: [{ n: 2 }, { n: 1 }, { n: 2 }], + result: [ + { n: 2, id: execution.executionId }, + { part: "2", n: 1, id: execution.executionId }, + { part: "3", n: 2, id: execution.executionId }, + ], status: ExecutionStatus.SUCCEEDED, }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f702d2d20..4aa9ea3cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,18 +1,19 @@ -lockfileVersion: "6.0" +lockfileVersion: '6.0' importers: + .: devDependencies: - "@types/jest": + '@types/jest': specifier: ^29.2.2 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 - "@typescript-eslint/eslint-plugin": + '@typescript-eslint/eslint-plugin': specifier: ^5.47.1 version: 5.52.0(@typescript-eslint/parser@5.52.0)(eslint@8.34.0)(typescript@4.9.5) - "@typescript-eslint/parser": + '@typescript-eslint/parser': specifier: ^5.47.1 version: 5.52.0(eslint@8.34.0)(typescript@4.9.5) eslint: @@ -63,7 +64,7 @@ importers: apps/test-app: dependencies: - "@eventual/aws-cdk": + '@eventual/aws-cdk': specifier: workspace:^ version: link:../../packages/@eventual/aws-cdk aws-cdk-lib: @@ -73,13 +74,13 @@ importers: specifier: 10.1.154 version: 10.1.154 devDependencies: - "@eventual/cli": + '@eventual/cli': specifier: workspace:^ version: link:../../packages/@eventual/cli - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 aws-cdk: @@ -106,50 +107,50 @@ importers: apps/test-app-runtime: dependencies: - "@aws-sdk/client-dynamodb": + '@aws-sdk/client-dynamodb': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-lambda": + '@aws-sdk/client-lambda': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-s3": + '@aws-sdk/client-s3': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-sqs": + '@aws-sdk/client-sqs': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/lib-dynamodb": + '@aws-sdk/lib-dynamodb': specifier: ^3.254.0 version: 3.319.0(@aws-sdk/client-dynamodb@3.319.0)(@aws-sdk/smithy-client@3.316.0)(@aws-sdk/types@3.310.0) - "@eventual/aws-client": + '@eventual/aws-client': specifier: workspace:^ version: link:../../packages/@eventual/aws-client - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../../packages/@eventual/core - "@eventual/integrations-slack": + '@eventual/integrations-slack': specifier: workspace:^ version: link:../../packages/@eventual/integrations-slack - "@slack/bolt": + '@slack/bolt': specifier: ^3.12.2 version: 3.12.2 ms: specifier: ^2.1.3 version: 2.1.3 devDependencies: - "@eventual/cli": + '@eventual/cli': specifier: workspace:^ version: link:../../packages/@eventual/cli - "@types/aws-lambda": + '@types/aws-lambda': specifier: ^8.10.108 version: 8.10.110 - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/ms": + '@types/ms': specifier: ^0.7.31 version: 0.7.31 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 aws-embedded-metrics: @@ -170,23 +171,23 @@ importers: apps/test-app-sst: dependencies: - "@serverless-stack/node": + '@serverless-stack/node': specifier: ^1.18.4 version: 1.18.4 devDependencies: - "@eventual/aws-cdk": + '@eventual/aws-cdk': specifier: workspace:^ version: link:../../packages/@eventual/aws-cdk - "@serverless-stack/cli": + '@serverless-stack/cli': specifier: ^1.18.4 version: 1.18.4(constructs@10.1.154) - "@serverless-stack/core": + '@serverless-stack/core': specifier: ^1.18.4 version: 1.18.4 - "@serverless-stack/resources": + '@serverless-stack/resources': specifier: ^1.18.4 version: 1.18.4 - "@tsconfig/node18": + '@tsconfig/node18': specifier: ^1.0.1 version: 1.0.1 aws-cdk-lib: @@ -207,60 +208,60 @@ importers: apps/test-app-sst/services: dependencies: - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../../../packages/@eventual/core aws-sdk: specifier: ^2.1280.0 version: 2.1314.0 devDependencies: - "@types/aws-lambda": + '@types/aws-lambda': specifier: ^8.10.109 version: 8.10.110 apps/tests/aws-runtime: dependencies: - "@aws-sdk/client-dynamodb": + '@aws-sdk/client-dynamodb': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-sqs": + '@aws-sdk/client-sqs': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-ssm": + '@aws-sdk/client-ssm': specifier: ^3.254.0 version: 3.319.0 - "@eventual/aws-client": + '@eventual/aws-client': specifier: workspace:^ version: link:../../../packages/@eventual/aws-client - "@eventual/cli": + '@eventual/cli': specifier: workspace:^ version: link:../../../packages/@eventual/cli - "@eventual/client": + '@eventual/client': specifier: workspace:^ version: link:../../../packages/@eventual/client - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../../../packages/@eventual/core zod: specifier: ^3 version: 3.20.6 devDependencies: - "@anatine/zod-openapi": + '@anatine/zod-openapi': specifier: ^1.12.0 version: 1.12.0(openapi3-ts@3.1.2)(zod@3.20.6) - "@aws-sdk/types": + '@aws-sdk/types': specifier: ^3.310.0 version: 3.310.0 - "@jest/globals": + '@jest/globals': specifier: ^29 version: 29.4.2 - "@types/aws-lambda": + '@types/aws-lambda': specifier: ^8.10.108 version: 8.10.110 - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 esbuild: @@ -294,22 +295,22 @@ importers: specifier: 10.1.154 version: 10.1.154 devDependencies: - "@aws-sdk/client-sts": + '@aws-sdk/client-sts': specifier: 3.294.0 version: 3.294.0 - "@eventual/aws-cdk": + '@eventual/aws-cdk': specifier: workspace:^ version: link:../../../packages/@eventual/aws-cdk - "@eventual/cli": + '@eventual/cli': specifier: workspace:^ version: link:../../../packages/@eventual/cli - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../../../packages/@eventual/core - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 aws-cdk: @@ -336,38 +337,38 @@ importers: packages/@eventual/aws-cdk: dependencies: - "@eventual/aws-runtime": + '@eventual/aws-runtime': specifier: workspace:^ version: link:../aws-runtime - "@eventual/compiler": + '@eventual/compiler': specifier: workspace:^ version: link:../compiler - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core - "@eventual/core-runtime": + '@eventual/core-runtime': specifier: workspace:^ version: link:../core-runtime - "@eventual/project": + '@eventual/project': specifier: workspace:^ version: link:../project devDependencies: - "@aws-cdk/aws-apigatewayv2-alpha": + '@aws-cdk/aws-apigatewayv2-alpha': specifier: 2.50.0-alpha.0 version: 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) - "@aws-cdk/aws-apigatewayv2-authorizers-alpha": + '@aws-cdk/aws-apigatewayv2-authorizers-alpha': specifier: 2.50.0-alpha.0 version: 2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154) - "@aws-cdk/aws-apigatewayv2-integrations-alpha": + '@aws-cdk/aws-apigatewayv2-integrations-alpha': specifier: 2.50.0-alpha.0 version: 2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154) - "@types/aws-lambda": + '@types/aws-lambda': specifier: 8.10.108 version: 8.10.108 - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 aws-cdk: @@ -400,38 +401,38 @@ importers: packages/@eventual/aws-client: dependencies: - "@aws-crypto/sha256-js": + '@aws-crypto/sha256-js': specifier: ^2.0.2 version: 2.0.2 - "@aws-sdk/client-secrets-manager": + '@aws-sdk/client-secrets-manager': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/config-resolver": + '@aws-sdk/config-resolver': specifier: ^3.254.0 version: 3.292.0 - "@aws-sdk/credential-provider-node": + '@aws-sdk/credential-provider-node': specifier: ^3.254.0 version: 3.294.0 - "@aws-sdk/node-config-provider": + '@aws-sdk/node-config-provider': specifier: ^3.254.0 version: 3.292.0 - "@aws-sdk/protocol-http": + '@aws-sdk/protocol-http': specifier: ^3.254.0 version: 3.292.0 - "@aws-sdk/querystring-parser": + '@aws-sdk/querystring-parser': specifier: ^3.254.0 version: 3.292.0 - "@aws-sdk/signature-v4": + '@aws-sdk/signature-v4': specifier: ^3.254.0 version: 3.292.0 - "@eventual/client": + '@eventual/client': specifier: workspace:^ version: link:../client - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core devDependencies: - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 ts-node: @@ -443,37 +444,40 @@ importers: packages/@eventual/aws-runtime: dependencies: - "@aws-sdk/client-cloudwatch-logs": + '@aws-sdk/client-cloudwatch-logs': + specifier: ^3.254.0 + version: 3.319.0 + '@aws-sdk/client-dynamodb': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-dynamodb": + '@aws-sdk/client-eventbridge': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-eventbridge": + '@aws-sdk/client-lambda': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-lambda": + '@aws-sdk/client-s3': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-s3": + '@aws-sdk/client-scheduler': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-scheduler": + '@aws-sdk/client-sqs': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-sqs": + '@aws-sdk/s3-request-presigner': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/s3-request-presigner": + '@aws-sdk/util-dynamodb': specifier: ^3.254.0 version: 3.319.0 - "@eventual/aws-client": + '@eventual/aws-client': specifier: workspace:^ version: link:../aws-client - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core - "@eventual/core-runtime": + '@eventual/core-runtime': specifier: workspace:^ version: link:../core-runtime aws-embedded-metrics: @@ -489,19 +493,19 @@ importers: specifier: ^3 version: 3.20.6 devDependencies: - "@aws-sdk/types": + '@aws-sdk/types': specifier: ^3.254.0 version: 3.310.0 - "@types/aws-lambda": + '@types/aws-lambda': specifier: 8.10.108 version: 8.10.108 - "@types/express": + '@types/express': specifier: ^4.17.15 version: 4.17.17 - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 jest: @@ -519,43 +523,43 @@ importers: packages/@eventual/cli: dependencies: - "@aws-sdk/client-cloudwatch-logs": + '@aws-sdk/client-cloudwatch-logs': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-ssm": + '@aws-sdk/client-ssm': specifier: ^3.254.0 version: 3.319.0 - "@aws-sdk/client-sts": + '@aws-sdk/client-sts': specifier: ^3.254.0 version: 3.294.0 - "@aws-sdk/config-resolver": + '@aws-sdk/config-resolver': specifier: ^3.254.0 version: 3.292.0 - "@aws-sdk/node-config-provider": + '@aws-sdk/node-config-provider': specifier: ^3.254.0 version: 3.310.0 - "@aws-sdk/types": + '@aws-sdk/types': specifier: ^3.254.0 version: 3.310.0 - "@eventual/aws-client": + '@eventual/aws-client': specifier: workspace:^ version: link:../aws-client - "@eventual/client": + '@eventual/client': specifier: workspace:^ version: link:../client - "@eventual/compiler": + '@eventual/compiler': specifier: workspace:^ version: link:../compiler - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core - "@eventual/core-runtime": + '@eventual/core-runtime': specifier: workspace:^ version: link:../core-runtime - "@eventual/project": + '@eventual/project': specifier: workspace:^ version: link:../project - "@eventual/timeline": + '@eventual/timeline': specifier: workspace:^ version: link:../timeline chalk: @@ -595,25 +599,25 @@ importers: specifier: ^17.6.2 version: 17.6.2 devDependencies: - "@swc/core": + '@swc/core': specifier: ^1.3.19 version: 1.3.35 - "@swc/jest": + '@swc/jest': specifier: ^0.2.23 version: 0.2.24(@swc/core@1.3.35) - "@types/express": + '@types/express': specifier: ^4.17.14 version: 4.17.17 - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 - "@types/serve-static": + '@types/serve-static': specifier: ^1.15.0 version: 1.15.0 - "@types/yargs": + '@types/yargs': specifier: ^17.0.13 version: 17.0.22 jest: @@ -628,14 +632,14 @@ importers: packages/@eventual/client: dependencies: - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core devDependencies: - "@jest/globals": + '@jest/globals': specifier: ^29.3.1 version: 29.4.2 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 ts-node: @@ -647,13 +651,13 @@ importers: packages/@eventual/compiler: dependencies: - "@anatine/zod-openapi": + '@anatine/zod-openapi': specifier: ^1.12.0 version: 1.12.0(openapi3-ts@3.1.2)(zod@3.20.6) - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core - "@swc/core": + '@swc/core': specifier: ^1.2.245 version: 1.3.35 esbuild-plugin-alias-path: @@ -666,13 +670,13 @@ importers: specifier: ^3 version: 3.20.6 devDependencies: - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/minimatch": + '@types/minimatch': specifier: 5.1.2 version: 5.1.2 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 esbuild: @@ -706,16 +710,16 @@ importers: specifier: ^3 version: 3.20.6 devDependencies: - "@jest/globals": + '@jest/globals': specifier: ^29.3.1 version: 29.4.2 - "@tshttp/status": + '@tshttp/status': specifier: ^2.0.0 version: 2.0.0 - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 jest: @@ -733,7 +737,7 @@ importers: packages/@eventual/core-runtime: dependencies: - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core heap-js: @@ -749,13 +753,13 @@ importers: specifier: ^3 version: 3.20.6 devDependencies: - "@jest/globals": + '@jest/globals': specifier: ^29.3.1 version: 29.3.1 - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 jest: @@ -773,29 +777,29 @@ importers: packages/@eventual/integrations-slack: dependencies: - "@slack/bolt": + '@slack/bolt': specifier: ^3.12.2 version: 3.12.2 - "@slack/logger": + '@slack/logger': specifier: ^3.0.0 version: 3.0.0 - "@slack/web-api": + '@slack/web-api': specifier: ^6.8.1 version: 6.8.1 tsscmp: specifier: ^1.0.6 version: 1.0.6 devDependencies: - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 - "@types/tsscmp": + '@types/tsscmp': specifier: ^1.0.0 version: 1.0.0 itty-router: @@ -823,35 +827,35 @@ importers: specifier: ^8 version: 8.2.5 devDependencies: - "@types/inquirer": + '@types/inquirer': specifier: ^8 version: 8.2.5 packages/@eventual/testing: dependencies: - "@eventual/compiler": + '@eventual/compiler': specifier: workspace:^ version: link:../compiler - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core - "@eventual/core-runtime": + '@eventual/core-runtime': specifier: workspace:^ version: link:../core-runtime ulidx: specifier: ^0.3.0 version: 0.3.0 devDependencies: - "@aws-sdk/client-sqs": + '@aws-sdk/client-sqs': specifier: ^3.254.0 version: 3.319.0 - "@jest/globals": + '@jest/globals': specifier: ^29.3.1 version: 29.4.2 - "@types/jest": + '@types/jest': specifier: ^29 version: 29.4.0 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 jest: @@ -872,16 +876,16 @@ importers: packages/@eventual/timeline: dependencies: - "@esbuild-plugins/node-globals-polyfill": + '@esbuild-plugins/node-globals-polyfill': specifier: ^0.1.1 version: 0.1.1(esbuild@0.17.18) - "@eventual/client": + '@eventual/client': specifier: workspace:^ version: link:../client - "@eventual/core": + '@eventual/core': specifier: workspace:^ version: link:../core - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^4.19.1 version: 4.24.6(react-dom@18.2.0)(react@18.2.0) react: @@ -891,13 +895,13 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) devDependencies: - "@types/react": + '@types/react': specifier: ^18.0.26 version: 18.0.28 - "@types/react-dom": + '@types/react-dom': specifier: ^18.0.9 version: 18.0.10 - "@vitejs/plugin-react": + '@vitejs/plugin-react': specifier: ^3.0.0 version: 3.1.0(vite@4.1.1) express: @@ -926,18 +930,18 @@ importers: version: 2.64.0 create-sst: specifier: latest - version: 2.7.2 + version: 2.8.1 devDependencies: - "@eventual/project": + '@eventual/project': specifier: workspace:^ version: link:../@eventual/project - "@types/inquirer": + '@types/inquirer': specifier: ^8 version: 8.2.5 - "@types/node": + '@types/node': specifier: ^18 version: 18.13.0 - "@types/yargs": + '@types/yargs': specifier: ^17.0.17 version: 17.0.22 esbuild: @@ -951,33 +955,25 @@ importers: version: 17.6.2 packages: + /@ampproject/remapping@2.2.0: - resolution: - { - integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/gen-mapping": 0.1.1 - "@jridgewell/trace-mapping": 0.3.17 + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.17 dev: true /@ampproject/remapping@2.2.1: - resolution: - { - integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/gen-mapping": 0.3.3 - "@jridgewell/trace-mapping": 0.3.18 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@anatine/zod-openapi@1.12.0(openapi3-ts@3.1.2)(zod@3.20.6): - resolution: - { - integrity: sha512-ZdkmQFXdc2us0nTBPWiJ3joHxsZoc5G79hKB8QzUuo73zp2A4t4TlBmOjS+hJfMnTBATfJutrlN/wK4DUq6ztg==, - } + resolution: {integrity: sha512-ZdkmQFXdc2us0nTBPWiJ3joHxsZoc5G79hKB8QzUuo73zp2A4t4TlBmOjS+hJfMnTBATfJutrlN/wK4DUq6ztg==} peerDependencies: openapi3-ts: ^2.0.0 || ^3.0.0 zod: ^3.20.0 @@ -987,11 +983,8 @@ packages: zod: 3.20.6 /@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154): - resolution: - { - integrity: sha512-dttWDqy+nTg/fD9y0egvj7/zdnOVEo0qyGsep1RV+p16R3F4ObMKyPVIg15fz57tK//Gp/i1QgXsZaSqbcWHOg==, - } - engines: { node: ">= 14.15.0" } + resolution: {integrity: sha512-dttWDqy+nTg/fD9y0egvj7/zdnOVEo0qyGsep1RV+p16R3F4ObMKyPVIg15fz57tK//Gp/i1QgXsZaSqbcWHOg==} + engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.50.0 constructs: ^10.0.0 @@ -1001,43 +994,34 @@ packages: dev: true /@aws-cdk/aws-apigatewayv2-authorizers-alpha@2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154): - resolution: - { - integrity: sha512-lMXnSpUSOYtCxoAxauNkGJZLsKMonHgd9rzlFUK2zxE7aC1lVwb4qYX4X9WJdvIExkFOHSZQzOTKM6SZqusssw==, - } - engines: { node: ">= 14.15.0" } + resolution: {integrity: sha512-lMXnSpUSOYtCxoAxauNkGJZLsKMonHgd9rzlFUK2zxE7aC1lVwb4qYX4X9WJdvIExkFOHSZQzOTKM6SZqusssw==} + engines: {node: '>= 14.15.0'} peerDependencies: - "@aws-cdk/aws-apigatewayv2-alpha": 2.50.0-alpha.0 + '@aws-cdk/aws-apigatewayv2-alpha': 2.50.0-alpha.0 aws-cdk-lib: ^2.50.0 constructs: ^10.0.0 dependencies: - "@aws-cdk/aws-apigatewayv2-alpha": 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) + '@aws-cdk/aws-apigatewayv2-alpha': 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) aws-cdk-lib: 2.50.0(constructs@10.1.154) constructs: 10.1.154 dev: true /@aws-cdk/aws-apigatewayv2-integrations-alpha@2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154): - resolution: - { - integrity: sha512-XEhz4HsU0HtQJnbs9XSb/yPN/1EEYAOZthWRKyniS9IWeGruVjEhWndoXpu0S7w+M5Bni7D9wrCTkqTgmTEvlw==, - } - engines: { node: ">= 14.15.0" } + resolution: {integrity: sha512-XEhz4HsU0HtQJnbs9XSb/yPN/1EEYAOZthWRKyniS9IWeGruVjEhWndoXpu0S7w+M5Bni7D9wrCTkqTgmTEvlw==} + engines: {node: '>= 14.15.0'} peerDependencies: - "@aws-cdk/aws-apigatewayv2-alpha": 2.50.0-alpha.0 + '@aws-cdk/aws-apigatewayv2-alpha': 2.50.0-alpha.0 aws-cdk-lib: ^2.50.0 constructs: ^10.0.0 dependencies: - "@aws-cdk/aws-apigatewayv2-alpha": 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) + '@aws-cdk/aws-apigatewayv2-alpha': 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) aws-cdk-lib: 2.50.0(constructs@10.1.154) constructs: 10.1.154 dev: true /@aws-cdk/aws-appsync-alpha@2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154): - resolution: - { - integrity: sha512-ZA5M1z5MKOS+m68MMs5YySVFOjOdzrR6F+22Atx6mrCcAD9E5PypZ7tVSwtWYVYvoUnGMI7Bv5Umc3n4DCnjkg==, - } - engines: { node: ">= 14.15.0" } + resolution: {integrity: sha512-ZA5M1z5MKOS+m68MMs5YySVFOjOdzrR6F+22Atx6mrCcAD9E5PypZ7tVSwtWYVYvoUnGMI7Bv5Umc3n4DCnjkg==} + engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.50.0 constructs: ^10.0.0 @@ -1047,335 +1031,272 @@ packages: dev: true /@aws-crypto/crc32@3.0.0: - resolution: - { - integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==, - } + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} dependencies: - "@aws-crypto/util": 3.0.0 - "@aws-sdk/types": 3.310.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.310.0 tslib: 1.14.1 dev: false /@aws-crypto/crc32c@3.0.0: - resolution: - { - integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==, - } + resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} dependencies: - "@aws-crypto/util": 3.0.0 - "@aws-sdk/types": 3.310.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.310.0 tslib: 1.14.1 dev: false /@aws-crypto/ie11-detection@2.0.2: - resolution: - { - integrity: sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==, - } + resolution: {integrity: sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==} dependencies: tslib: 1.14.1 dev: false /@aws-crypto/ie11-detection@3.0.0: - resolution: - { - integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==, - } + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} dependencies: tslib: 1.14.1 /@aws-crypto/sha1-browser@3.0.0: - resolution: - { - integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==, - } - dependencies: - "@aws-crypto/ie11-detection": 3.0.0 - "@aws-crypto/supports-web-crypto": 3.0.0 - "@aws-crypto/util": 3.0.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-locate-window": 3.310.0 - "@aws-sdk/util-utf8-browser": 3.259.0 + resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==} + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-locate-window': 3.310.0 + '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 dev: false /@aws-crypto/sha256-browser@2.0.0: - resolution: - { - integrity: sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==, - } - dependencies: - "@aws-crypto/ie11-detection": 2.0.2 - "@aws-crypto/sha256-js": 2.0.2 - "@aws-crypto/supports-web-crypto": 2.0.2 - "@aws-crypto/util": 2.0.2 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-locate-window": 3.310.0 - "@aws-sdk/util-utf8-browser": 3.259.0 + resolution: {integrity: sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==} + dependencies: + '@aws-crypto/ie11-detection': 2.0.2 + '@aws-crypto/sha256-js': 2.0.2 + '@aws-crypto/supports-web-crypto': 2.0.2 + '@aws-crypto/util': 2.0.2 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-locate-window': 3.310.0 + '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 dev: false /@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.310.0 - "@aws-sdk/util-locate-window": 3.310.0 - "@aws-sdk/util-utf8-browser": 3.259.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.310.0 + '@aws-sdk/util-locate-window': 3.310.0 + '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 /@aws-crypto/sha256-js@2.0.0: - resolution: - { - integrity: sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==, - } + resolution: {integrity: sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==} dependencies: - "@aws-crypto/util": 2.0.2 - "@aws-sdk/types": 3.310.0 + '@aws-crypto/util': 2.0.2 + '@aws-sdk/types': 3.310.0 tslib: 1.14.1 dev: false /@aws-crypto/sha256-js@2.0.2: - resolution: - { - integrity: sha512-iXLdKH19qPmIC73fVCrHWCSYjN/sxaAvZ3jNNyw6FclmHyjLKg0f69WlC9KTnyElxCR5MO9SKaG00VwlJwyAkQ==, - } + resolution: {integrity: sha512-iXLdKH19qPmIC73fVCrHWCSYjN/sxaAvZ3jNNyw6FclmHyjLKg0f69WlC9KTnyElxCR5MO9SKaG00VwlJwyAkQ==} dependencies: - "@aws-crypto/util": 2.0.2 - "@aws-sdk/types": 3.310.0 + '@aws-crypto/util': 2.0.2 + '@aws-sdk/types': 3.310.0 tslib: 1.14.1 dev: false /@aws-crypto/sha256-js@3.0.0: - resolution: - { - integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==, - } + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} dependencies: - "@aws-crypto/util": 3.0.0 - "@aws-sdk/types": 3.310.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.310.0 tslib: 1.14.1 /@aws-crypto/supports-web-crypto@2.0.2: - resolution: - { - integrity: sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==, - } + resolution: {integrity: sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==} dependencies: tslib: 1.14.1 dev: false /@aws-crypto/supports-web-crypto@3.0.0: - resolution: - { - integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==, - } + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} dependencies: tslib: 1.14.1 /@aws-crypto/util@2.0.2: - resolution: - { - integrity: sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==, - } + resolution: {integrity: sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==} dependencies: - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-utf8-browser": 3.259.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 dev: false /@aws-crypto/util@3.0.0: - resolution: - { - integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==, - } + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} dependencies: - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-utf8-browser": 3.259.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 /@aws-sdk/abort-controller@3.292.0: - resolution: - { - integrity: sha512-lf+OPptL01kvryIJy7+dvFux5KbJ6OTwLPPEekVKZ2AfEvwcVtOZWFUhyw3PJCBTVncjKB1Kjl3V/eTS3YuPXQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-lf+OPptL01kvryIJy7+dvFux5KbJ6OTwLPPEekVKZ2AfEvwcVtOZWFUhyw3PJCBTVncjKB1Kjl3V/eTS3YuPXQ==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/abort-controller@3.310.0: - resolution: - { - integrity: sha512-v1zrRQxDLA1MdPim159Vx/CPHqsB4uybSxRi1CnfHO5ZjHryx3a5htW2gdGAykVCul40+yJXvfpufMrELVxH+g==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-v1zrRQxDLA1MdPim159Vx/CPHqsB4uybSxRi1CnfHO5ZjHryx3a5htW2gdGAykVCul40+yJXvfpufMrELVxH+g==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/abort-controller@3.40.0: - resolution: - { - integrity: sha512-S7LzLvNuwuf0q7r4q7zqGzxd/W2xYsn8cpZ90MMb3ObolhbkLySrikUJujmXae8k+2/KFCOr+FVC0YLrATSUgQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-S7LzLvNuwuf0q7r4q7zqGzxd/W2xYsn8cpZ90MMb3ObolhbkLySrikUJujmXae8k+2/KFCOr+FVC0YLrATSUgQ==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/types": 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/chunked-blob-reader@3.310.0: - resolution: - { - integrity: sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==, - } + resolution: {integrity: sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/client-cloudwatch-logs@3.319.0: - resolution: - { - integrity: sha512-1TOJP8MI01gYrpO5W+r1DaGFtc+vXOXa7idkKpaRY/fvlAV0tSpO84n/lqbfd622KnbGkTis+YoXudtloVThHQ==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-1TOJP8MI01gYrpO5W+r1DaGFtc+vXOXa7idkKpaRY/fvlAV0tSpO84n/lqbfd622KnbGkTis+YoXudtloVThHQ==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false /@aws-sdk/client-codebuild@3.319.0: - resolution: - { - integrity: sha512-cHScipf4/K/t9YZUABzxmYoT1PnWscyG8lXq/bt/gTA3LXU9LZ62zonmpeZReTAlQjBd8KxqR7TArRSpkst4rQ==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-cHScipf4/K/t9YZUABzxmYoT1PnWscyG8lXq/bt/gTA3LXU9LZ62zonmpeZReTAlQjBd8KxqR7TArRSpkst4rQ==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: true /@aws-sdk/client-dynamodb@3.319.0: - resolution: - { - integrity: sha512-D4quanqfPkqCA5qaQVQh6Kl5wBKmEwBYB5Niw1h+Q2eSHYK6xeU/bsr+I1oZcV0bPiiqUBy7FH3Y73t70ToRXA==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-endpoint-discovery": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 - "@aws-sdk/util-waiter": 3.310.0 + resolution: {integrity: sha512-D4quanqfPkqCA5qaQVQh6Kl5wBKmEwBYB5Niw1h+Q2eSHYK6xeU/bsr+I1oZcV0bPiiqUBy7FH3Y73t70ToRXA==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-endpoint-discovery': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 + '@aws-sdk/util-waiter': 3.310.0 tslib: 2.5.0 uuid: 8.3.2 transitivePeerDependencies: @@ -1383,251 +1304,236 @@ packages: dev: false /@aws-sdk/client-eventbridge@3.319.0: - resolution: - { - integrity: sha512-7g9K5awDOq342qypOyENWOR/89i48Dso9qKm1ZRJ+MSCesZ/AuYLCK9baecBDjwPoACTbQ9RTHWioVMOgHsxQQ==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/signature-v4-multi-region": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 - tslib: 2.5.0 - transitivePeerDependencies: - - "@aws-sdk/signature-v4-crt" + resolution: {integrity: sha512-7g9K5awDOq342qypOyENWOR/89i48Dso9qKm1ZRJ+MSCesZ/AuYLCK9baecBDjwPoACTbQ9RTHWioVMOgHsxQQ==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/signature-v4-multi-region': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 + tslib: 2.5.0 + transitivePeerDependencies: + - '@aws-sdk/signature-v4-crt' - aws-crt dev: false /@aws-sdk/client-lambda@3.319.0: - resolution: - { - integrity: sha512-EAswjrYWQtE14w6bzW77IolXc5hiJUlExbTkFS/Htg8q8jfHUk2oYqEzazDAzUsufH8z4BRWcqjh8Sd4LSTOUQ==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/eventstream-serde-browser": 3.310.0 - "@aws-sdk/eventstream-serde-config-resolver": 3.310.0 - "@aws-sdk/eventstream-serde-node": 3.310.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 - "@aws-sdk/util-waiter": 3.310.0 + resolution: {integrity: sha512-EAswjrYWQtE14w6bzW77IolXc5hiJUlExbTkFS/Htg8q8jfHUk2oYqEzazDAzUsufH8z4BRWcqjh8Sd4LSTOUQ==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/eventstream-serde-browser': 3.310.0 + '@aws-sdk/eventstream-serde-config-resolver': 3.310.0 + '@aws-sdk/eventstream-serde-node': 3.310.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 + '@aws-sdk/util-waiter': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false /@aws-sdk/client-lambda@3.43.0: - resolution: - { - integrity: sha512-6FuZfBJ40KlolUkjaz2WTtfQgvT5HigoV5O/VLqM3qFUpUsyQ+zjmm0y0QmfndAlK+8sI53yiKhBp/PMkAQgWw==, - } - engines: { node: ">=10.0.0" } - dependencies: - "@aws-crypto/sha256-browser": 2.0.0 - "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.43.0 - "@aws-sdk/config-resolver": 3.40.0 - "@aws-sdk/credential-provider-node": 3.41.0 - "@aws-sdk/fetch-http-handler": 3.40.0 - "@aws-sdk/hash-node": 3.40.0 - "@aws-sdk/invalid-dependency": 3.40.0 - "@aws-sdk/middleware-content-length": 3.40.0 - "@aws-sdk/middleware-host-header": 3.40.0 - "@aws-sdk/middleware-logger": 3.40.0 - "@aws-sdk/middleware-retry": 3.40.0 - "@aws-sdk/middleware-serde": 3.40.0 - "@aws-sdk/middleware-signing": 3.40.0 - "@aws-sdk/middleware-stack": 3.40.0 - "@aws-sdk/middleware-user-agent": 3.40.0 - "@aws-sdk/node-config-provider": 3.40.0 - "@aws-sdk/node-http-handler": 3.40.0 - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/smithy-client": 3.41.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/url-parser": 3.40.0 - "@aws-sdk/util-base64-browser": 3.37.0 - "@aws-sdk/util-base64-node": 3.37.0 - "@aws-sdk/util-body-length-browser": 3.37.0 - "@aws-sdk/util-body-length-node": 3.37.0 - "@aws-sdk/util-user-agent-browser": 3.40.0 - "@aws-sdk/util-user-agent-node": 3.40.0 - "@aws-sdk/util-utf8-browser": 3.37.0 - "@aws-sdk/util-utf8-node": 3.37.0 - "@aws-sdk/util-waiter": 3.40.0 + resolution: {integrity: sha512-6FuZfBJ40KlolUkjaz2WTtfQgvT5HigoV5O/VLqM3qFUpUsyQ+zjmm0y0QmfndAlK+8sI53yiKhBp/PMkAQgWw==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/client-sts': 3.43.0 + '@aws-sdk/config-resolver': 3.40.0 + '@aws-sdk/credential-provider-node': 3.41.0 + '@aws-sdk/fetch-http-handler': 3.40.0 + '@aws-sdk/hash-node': 3.40.0 + '@aws-sdk/invalid-dependency': 3.40.0 + '@aws-sdk/middleware-content-length': 3.40.0 + '@aws-sdk/middleware-host-header': 3.40.0 + '@aws-sdk/middleware-logger': 3.40.0 + '@aws-sdk/middleware-retry': 3.40.0 + '@aws-sdk/middleware-serde': 3.40.0 + '@aws-sdk/middleware-signing': 3.40.0 + '@aws-sdk/middleware-stack': 3.40.0 + '@aws-sdk/middleware-user-agent': 3.40.0 + '@aws-sdk/node-config-provider': 3.40.0 + '@aws-sdk/node-http-handler': 3.40.0 + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/smithy-client': 3.41.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/url-parser': 3.40.0 + '@aws-sdk/util-base64-browser': 3.37.0 + '@aws-sdk/util-base64-node': 3.37.0 + '@aws-sdk/util-body-length-browser': 3.37.0 + '@aws-sdk/util-body-length-node': 3.37.0 + '@aws-sdk/util-user-agent-browser': 3.40.0 + '@aws-sdk/util-user-agent-node': 3.40.0 + '@aws-sdk/util-utf8-browser': 3.37.0 + '@aws-sdk/util-utf8-node': 3.37.0 + '@aws-sdk/util-waiter': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/client-s3@3.319.0: - resolution: - { - integrity: sha512-/XzElEO4iZTBgvrcWq20sxKLvhRetjT1gOPRF4Ra2iSCbeVIT/feYdEaSSgMsaiqrREywBc+59NiOyxImWTaOA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-crypto/sha1-browser": 3.0.0 - "@aws-crypto/sha256-browser": 3.0.0 - "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/eventstream-serde-browser": 3.310.0 - "@aws-sdk/eventstream-serde-config-resolver": 3.310.0 - "@aws-sdk/eventstream-serde-node": 3.310.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-blob-browser": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/hash-stream-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/md5-js": 3.310.0 - "@aws-sdk/middleware-bucket-endpoint": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-expect-continue": 3.310.0 - "@aws-sdk/middleware-flexible-checksums": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-location-constraint": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-sdk-s3": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-ssec": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/signature-v4-multi-region": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-stream-browser": 3.310.0 - "@aws-sdk/util-stream-node": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 - "@aws-sdk/util-waiter": 3.310.0 - "@aws-sdk/xml-builder": 3.310.0 + resolution: {integrity: sha512-/XzElEO4iZTBgvrcWq20sxKLvhRetjT1gOPRF4Ra2iSCbeVIT/feYdEaSSgMsaiqrREywBc+59NiOyxImWTaOA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha1-browser': 3.0.0 + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/eventstream-serde-browser': 3.310.0 + '@aws-sdk/eventstream-serde-config-resolver': 3.310.0 + '@aws-sdk/eventstream-serde-node': 3.310.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-blob-browser': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/hash-stream-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/md5-js': 3.310.0 + '@aws-sdk/middleware-bucket-endpoint': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-expect-continue': 3.310.0 + '@aws-sdk/middleware-flexible-checksums': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-location-constraint': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-sdk-s3': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-ssec': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/signature-v4-multi-region': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-stream-browser': 3.310.0 + '@aws-sdk/util-stream-node': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 + '@aws-sdk/util-waiter': 3.310.0 + '@aws-sdk/xml-builder': 3.310.0 fast-xml-parser: 4.1.2 tslib: 2.5.0 transitivePeerDependencies: - - "@aws-sdk/signature-v4-crt" + - '@aws-sdk/signature-v4-crt' - aws-crt dev: false /@aws-sdk/client-scheduler@3.319.0: - resolution: - { - integrity: sha512-3srDak7NcLrwA+gq85bygJEX1uVwqZG+YkjHjkwPauG8pbveYFGOPWWOpy0/Q/ZThnu/7MCrA3DC2TQ8yVJ1bw==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-3srDak7NcLrwA+gq85bygJEX1uVwqZG+YkjHjkwPauG8pbveYFGOPWWOpy0/Q/ZThnu/7MCrA3DC2TQ8yVJ1bw==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 uuid: 8.3.2 transitivePeerDependencies: @@ -1635,46 +1541,43 @@ packages: dev: false /@aws-sdk/client-secrets-manager@3.319.0: - resolution: - { - integrity: sha512-3YPzBvr/hRlH3MbivWYGdvY4EMLwBVAE93gZjfIrkjvpufd/OKX5OoO8Q0EhOkfnc2VIw0DMT2x6ERtgXuVc4Q==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-3YPzBvr/hRlH3MbivWYGdvY4EMLwBVAE93gZjfIrkjvpufd/OKX5OoO8Q0EhOkfnc2VIw0DMT2x6ERtgXuVc4Q==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 uuid: 8.3.2 transitivePeerDependencies: @@ -1682,95 +1585,89 @@ packages: dev: false /@aws-sdk/client-sqs@3.319.0: - resolution: - { - integrity: sha512-lghu0dp0XoTMDUvsnWOAkxyFxlxGPLpEx80rSQOnkWFdXvbMCAkg5YC9TbK0iwhFmDyvnv91kKG5fMpcRdzBiQ==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/md5-js": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-sdk-sqs": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-lghu0dp0XoTMDUvsnWOAkxyFxlxGPLpEx80rSQOnkWFdXvbMCAkg5YC9TbK0iwhFmDyvnv91kKG5fMpcRdzBiQ==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/md5-js': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-sdk-sqs': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 fast-xml-parser: 4.1.2 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/client-ssm@3.319.0: - resolution: - { - integrity: sha512-4sfqJt9ip30vK5A0GC/sZwipljDwr6WhPfqhBn+cUdvRHCXlbv/i+lyFuW2ThF7xwiiTn2Mqm70ppyYi7WaApQ==, - } - 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.319.0 - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 - "@aws-sdk/util-waiter": 3.310.0 + resolution: {integrity: sha512-4sfqJt9ip30vK5A0GC/sZwipljDwr6WhPfqhBn+cUdvRHCXlbv/i+lyFuW2ThF7xwiiTn2Mqm70ppyYi7WaApQ==} + 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.319.0 + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 + '@aws-sdk/util-waiter': 3.310.0 tslib: 2.5.0 uuid: 8.3.2 transitivePeerDependencies: @@ -1778,2520 +1675,1944 @@ packages: dev: false /@aws-sdk/client-ssm@3.43.0: - resolution: - { - integrity: sha512-yE3WmfJqrpy9cppqzt+qdOol17SNeIFofe5C13zQ7db7QYpvv4aM0usjRq9LE8ga8FPGLYdNxbg0tWSOnjkY9Q==, - } - engines: { node: ">=10.0.0" } - dependencies: - "@aws-crypto/sha256-browser": 2.0.0 - "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.43.0 - "@aws-sdk/config-resolver": 3.40.0 - "@aws-sdk/credential-provider-node": 3.41.0 - "@aws-sdk/fetch-http-handler": 3.40.0 - "@aws-sdk/hash-node": 3.40.0 - "@aws-sdk/invalid-dependency": 3.40.0 - "@aws-sdk/middleware-content-length": 3.40.0 - "@aws-sdk/middleware-host-header": 3.40.0 - "@aws-sdk/middleware-logger": 3.40.0 - "@aws-sdk/middleware-retry": 3.40.0 - "@aws-sdk/middleware-serde": 3.40.0 - "@aws-sdk/middleware-signing": 3.40.0 - "@aws-sdk/middleware-stack": 3.40.0 - "@aws-sdk/middleware-user-agent": 3.40.0 - "@aws-sdk/node-config-provider": 3.40.0 - "@aws-sdk/node-http-handler": 3.40.0 - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/smithy-client": 3.41.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/url-parser": 3.40.0 - "@aws-sdk/util-base64-browser": 3.37.0 - "@aws-sdk/util-base64-node": 3.37.0 - "@aws-sdk/util-body-length-browser": 3.37.0 - "@aws-sdk/util-body-length-node": 3.37.0 - "@aws-sdk/util-user-agent-browser": 3.40.0 - "@aws-sdk/util-user-agent-node": 3.40.0 - "@aws-sdk/util-utf8-browser": 3.37.0 - "@aws-sdk/util-utf8-node": 3.37.0 - "@aws-sdk/util-waiter": 3.40.0 + resolution: {integrity: sha512-yE3WmfJqrpy9cppqzt+qdOol17SNeIFofe5C13zQ7db7QYpvv4aM0usjRq9LE8ga8FPGLYdNxbg0tWSOnjkY9Q==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/client-sts': 3.43.0 + '@aws-sdk/config-resolver': 3.40.0 + '@aws-sdk/credential-provider-node': 3.41.0 + '@aws-sdk/fetch-http-handler': 3.40.0 + '@aws-sdk/hash-node': 3.40.0 + '@aws-sdk/invalid-dependency': 3.40.0 + '@aws-sdk/middleware-content-length': 3.40.0 + '@aws-sdk/middleware-host-header': 3.40.0 + '@aws-sdk/middleware-logger': 3.40.0 + '@aws-sdk/middleware-retry': 3.40.0 + '@aws-sdk/middleware-serde': 3.40.0 + '@aws-sdk/middleware-signing': 3.40.0 + '@aws-sdk/middleware-stack': 3.40.0 + '@aws-sdk/middleware-user-agent': 3.40.0 + '@aws-sdk/node-config-provider': 3.40.0 + '@aws-sdk/node-http-handler': 3.40.0 + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/smithy-client': 3.41.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/url-parser': 3.40.0 + '@aws-sdk/util-base64-browser': 3.37.0 + '@aws-sdk/util-base64-node': 3.37.0 + '@aws-sdk/util-body-length-browser': 3.37.0 + '@aws-sdk/util-body-length-node': 3.37.0 + '@aws-sdk/util-user-agent-browser': 3.40.0 + '@aws-sdk/util-user-agent-node': 3.40.0 + '@aws-sdk/util-utf8-browser': 3.37.0 + '@aws-sdk/util-utf8-node': 3.37.0 + '@aws-sdk/util-waiter': 3.40.0 tslib: 2.5.0 uuid: 8.3.2 dev: false /@aws-sdk/client-sso-oidc@3.294.0: - resolution: - { - integrity: sha512-/ZfDud76MdSPJ/TxjV2xLE30XbBQDZwKQ32axwoK1eziPvrAIUBYVgpBwj+m0quhoiQhBKkg3aFl6j39AF2thw==, - } - 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.292.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 + resolution: {integrity: sha512-/ZfDud76MdSPJ/TxjV2xLE30XbBQDZwKQ32axwoK1eziPvrAIUBYVgpBwj+m0quhoiQhBKkg3aFl6j39AF2thw==} + 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.292.0 + '@aws-sdk/fetch-http-handler': 3.292.0 + '@aws-sdk/hash-node': 3.292.0 + '@aws-sdk/invalid-dependency': 3.292.0 + '@aws-sdk/middleware-content-length': 3.292.0 + '@aws-sdk/middleware-endpoint': 3.292.0 + '@aws-sdk/middleware-host-header': 3.292.0 + '@aws-sdk/middleware-logger': 3.292.0 + '@aws-sdk/middleware-recursion-detection': 3.292.0 + '@aws-sdk/middleware-retry': 3.293.0 + '@aws-sdk/middleware-serde': 3.292.0 + '@aws-sdk/middleware-stack': 3.292.0 + '@aws-sdk/middleware-user-agent': 3.293.0 + '@aws-sdk/node-config-provider': 3.292.0 + '@aws-sdk/node-http-handler': 3.292.0 + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/smithy-client': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/url-parser': 3.292.0 + '@aws-sdk/util-base64': 3.292.0 + '@aws-sdk/util-body-length-browser': 3.292.0 + '@aws-sdk/util-body-length-node': 3.292.0 + '@aws-sdk/util-defaults-mode-browser': 3.292.0 + '@aws-sdk/util-defaults-mode-node': 3.292.0 + '@aws-sdk/util-endpoints': 3.293.0 + '@aws-sdk/util-retry': 3.292.0 + '@aws-sdk/util-user-agent-browser': 3.292.0 + '@aws-sdk/util-user-agent-node': 3.292.0 + '@aws-sdk/util-utf8': 3.292.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/client-sso-oidc@3.319.0: - resolution: - { - integrity: sha512-GJBgT/tephRZY3oTbDBMv+G9taoqKUIvGPn+7shmzz2P1SerutsRSfKfDXV+VptPNRoGmjjCLPmWjMFYbFKILQ==, - } - 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.310.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-GJBgT/tephRZY3oTbDBMv+G9taoqKUIvGPn+7shmzz2P1SerutsRSfKfDXV+VptPNRoGmjjCLPmWjMFYbFKILQ==} + 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.310.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/client-sso@3.294.0: - resolution: - { - integrity: sha512-+FuxQTi5WvnaXM5JbNLkBIzQ3An4gA0ox61N1u+3xled+nywKb1yQ7WmRpyMG5bLbkmnj3aqoo5/uskFc4c4EA==, - } - 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.292.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 + resolution: {integrity: sha512-+FuxQTi5WvnaXM5JbNLkBIzQ3An4gA0ox61N1u+3xled+nywKb1yQ7WmRpyMG5bLbkmnj3aqoo5/uskFc4c4EA==} + 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.292.0 + '@aws-sdk/fetch-http-handler': 3.292.0 + '@aws-sdk/hash-node': 3.292.0 + '@aws-sdk/invalid-dependency': 3.292.0 + '@aws-sdk/middleware-content-length': 3.292.0 + '@aws-sdk/middleware-endpoint': 3.292.0 + '@aws-sdk/middleware-host-header': 3.292.0 + '@aws-sdk/middleware-logger': 3.292.0 + '@aws-sdk/middleware-recursion-detection': 3.292.0 + '@aws-sdk/middleware-retry': 3.293.0 + '@aws-sdk/middleware-serde': 3.292.0 + '@aws-sdk/middleware-stack': 3.292.0 + '@aws-sdk/middleware-user-agent': 3.293.0 + '@aws-sdk/node-config-provider': 3.292.0 + '@aws-sdk/node-http-handler': 3.292.0 + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/smithy-client': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/url-parser': 3.292.0 + '@aws-sdk/util-base64': 3.292.0 + '@aws-sdk/util-body-length-browser': 3.292.0 + '@aws-sdk/util-body-length-node': 3.292.0 + '@aws-sdk/util-defaults-mode-browser': 3.292.0 + '@aws-sdk/util-defaults-mode-node': 3.292.0 + '@aws-sdk/util-endpoints': 3.293.0 + '@aws-sdk/util-retry': 3.292.0 + '@aws-sdk/util-user-agent-browser': 3.292.0 + '@aws-sdk/util-user-agent-node': 3.292.0 + '@aws-sdk/util-utf8': 3.292.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/client-sso@3.319.0: - resolution: - { - integrity: sha512-g46KgAjRiYBS8Oi85DPwSAQpt+Hgmw/YFgGVwZqMfTL70KNJwLFKRa5D9UocQd7t7OjPRdKF7g0Gp5peyAK9dw==, - } - 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.310.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-g46KgAjRiYBS8Oi85DPwSAQpt+Hgmw/YFgGVwZqMfTL70KNJwLFKRa5D9UocQd7t7OjPRdKF7g0Gp5peyAK9dw==} + 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.310.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/client-sso@3.41.0: - resolution: - { - integrity: sha512-xDvcy7wv3KdHhOpl5fZN+Ydw+dHBmsCZwMFI1ZdJVCSGO+ZKgl5KVWi1LCif6vjZP1pUuGl44oDOZz1ACqOzTg==, - } - engines: { node: ">=10.0.0" } - dependencies: - "@aws-crypto/sha256-browser": 2.0.0 - "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.40.0 - "@aws-sdk/fetch-http-handler": 3.40.0 - "@aws-sdk/hash-node": 3.40.0 - "@aws-sdk/invalid-dependency": 3.40.0 - "@aws-sdk/middleware-content-length": 3.40.0 - "@aws-sdk/middleware-host-header": 3.40.0 - "@aws-sdk/middleware-logger": 3.40.0 - "@aws-sdk/middleware-retry": 3.40.0 - "@aws-sdk/middleware-serde": 3.40.0 - "@aws-sdk/middleware-stack": 3.40.0 - "@aws-sdk/middleware-user-agent": 3.40.0 - "@aws-sdk/node-config-provider": 3.40.0 - "@aws-sdk/node-http-handler": 3.40.0 - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/smithy-client": 3.41.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/url-parser": 3.40.0 - "@aws-sdk/util-base64-browser": 3.37.0 - "@aws-sdk/util-base64-node": 3.37.0 - "@aws-sdk/util-body-length-browser": 3.37.0 - "@aws-sdk/util-body-length-node": 3.37.0 - "@aws-sdk/util-user-agent-browser": 3.40.0 - "@aws-sdk/util-user-agent-node": 3.40.0 - "@aws-sdk/util-utf8-browser": 3.37.0 - "@aws-sdk/util-utf8-node": 3.37.0 + resolution: {integrity: sha512-xDvcy7wv3KdHhOpl5fZN+Ydw+dHBmsCZwMFI1ZdJVCSGO+ZKgl5KVWi1LCif6vjZP1pUuGl44oDOZz1ACqOzTg==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/config-resolver': 3.40.0 + '@aws-sdk/fetch-http-handler': 3.40.0 + '@aws-sdk/hash-node': 3.40.0 + '@aws-sdk/invalid-dependency': 3.40.0 + '@aws-sdk/middleware-content-length': 3.40.0 + '@aws-sdk/middleware-host-header': 3.40.0 + '@aws-sdk/middleware-logger': 3.40.0 + '@aws-sdk/middleware-retry': 3.40.0 + '@aws-sdk/middleware-serde': 3.40.0 + '@aws-sdk/middleware-stack': 3.40.0 + '@aws-sdk/middleware-user-agent': 3.40.0 + '@aws-sdk/node-config-provider': 3.40.0 + '@aws-sdk/node-http-handler': 3.40.0 + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/smithy-client': 3.41.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/url-parser': 3.40.0 + '@aws-sdk/util-base64-browser': 3.37.0 + '@aws-sdk/util-base64-node': 3.37.0 + '@aws-sdk/util-body-length-browser': 3.37.0 + '@aws-sdk/util-body-length-node': 3.37.0 + '@aws-sdk/util-user-agent-browser': 3.40.0 + '@aws-sdk/util-user-agent-node': 3.40.0 + '@aws-sdk/util-utf8-browser': 3.37.0 + '@aws-sdk/util-utf8-node': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/client-sts@3.294.0: - resolution: - { - integrity: sha512-AefqwhFjTDzelZuSYhriJbiI+GQwf2yKiKAnCt0gRj6rswewStM63Gtlhfb01sFPp+ZiqPcyQ47LqUaHp1mz/g==, - } - 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.292.0 - "@aws-sdk/credential-provider-node": 3.294.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-sdk-sts": 3.292.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-signing": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 + resolution: {integrity: sha512-AefqwhFjTDzelZuSYhriJbiI+GQwf2yKiKAnCt0gRj6rswewStM63Gtlhfb01sFPp+ZiqPcyQ47LqUaHp1mz/g==} + 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.292.0 + '@aws-sdk/credential-provider-node': 3.294.0 + '@aws-sdk/fetch-http-handler': 3.292.0 + '@aws-sdk/hash-node': 3.292.0 + '@aws-sdk/invalid-dependency': 3.292.0 + '@aws-sdk/middleware-content-length': 3.292.0 + '@aws-sdk/middleware-endpoint': 3.292.0 + '@aws-sdk/middleware-host-header': 3.292.0 + '@aws-sdk/middleware-logger': 3.292.0 + '@aws-sdk/middleware-recursion-detection': 3.292.0 + '@aws-sdk/middleware-retry': 3.293.0 + '@aws-sdk/middleware-sdk-sts': 3.292.0 + '@aws-sdk/middleware-serde': 3.292.0 + '@aws-sdk/middleware-signing': 3.292.0 + '@aws-sdk/middleware-stack': 3.292.0 + '@aws-sdk/middleware-user-agent': 3.293.0 + '@aws-sdk/node-config-provider': 3.292.0 + '@aws-sdk/node-http-handler': 3.292.0 + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/smithy-client': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/url-parser': 3.292.0 + '@aws-sdk/util-base64': 3.292.0 + '@aws-sdk/util-body-length-browser': 3.292.0 + '@aws-sdk/util-body-length-node': 3.292.0 + '@aws-sdk/util-defaults-mode-browser': 3.292.0 + '@aws-sdk/util-defaults-mode-node': 3.292.0 + '@aws-sdk/util-endpoints': 3.293.0 + '@aws-sdk/util-retry': 3.292.0 + '@aws-sdk/util-user-agent-browser': 3.292.0 + '@aws-sdk/util-user-agent-node': 3.292.0 + '@aws-sdk/util-utf8': 3.292.0 fast-xml-parser: 4.1.2 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/client-sts@3.319.0: - resolution: - { - integrity: sha512-PRGGKCSKtyM3x629J9j4DMsH1cQT8UGW+R67u9Q5HrMK05gfjpmg+X1DQ3pgve4D8MI4R/Cm3NkYl2eUTbQHQg==, - } - 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.310.0 - "@aws-sdk/credential-provider-node": 3.319.0 - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/hash-node": 3.310.0 - "@aws-sdk/invalid-dependency": 3.310.0 - "@aws-sdk/middleware-content-length": 3.310.0 - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/middleware-host-header": 3.310.0 - "@aws-sdk/middleware-logger": 3.310.0 - "@aws-sdk/middleware-recursion-detection": 3.310.0 - "@aws-sdk/middleware-retry": 3.310.0 - "@aws-sdk/middleware-sdk-sts": 3.310.0 - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/middleware-user-agent": 3.319.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.316.0 - "@aws-sdk/util-defaults-mode-node": 3.316.0 - "@aws-sdk/util-endpoints": 3.319.0 - "@aws-sdk/util-retry": 3.310.0 - "@aws-sdk/util-user-agent-browser": 3.310.0 - "@aws-sdk/util-user-agent-node": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-PRGGKCSKtyM3x629J9j4DMsH1cQT8UGW+R67u9Q5HrMK05gfjpmg+X1DQ3pgve4D8MI4R/Cm3NkYl2eUTbQHQg==} + 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.310.0 + '@aws-sdk/credential-provider-node': 3.319.0 + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/hash-node': 3.310.0 + '@aws-sdk/invalid-dependency': 3.310.0 + '@aws-sdk/middleware-content-length': 3.310.0 + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/middleware-host-header': 3.310.0 + '@aws-sdk/middleware-logger': 3.310.0 + '@aws-sdk/middleware-recursion-detection': 3.310.0 + '@aws-sdk/middleware-retry': 3.310.0 + '@aws-sdk/middleware-sdk-sts': 3.310.0 + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/middleware-user-agent': 3.319.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-body-length-browser': 3.310.0 + '@aws-sdk/util-body-length-node': 3.310.0 + '@aws-sdk/util-defaults-mode-browser': 3.316.0 + '@aws-sdk/util-defaults-mode-node': 3.316.0 + '@aws-sdk/util-endpoints': 3.319.0 + '@aws-sdk/util-retry': 3.310.0 + '@aws-sdk/util-user-agent-browser': 3.310.0 + '@aws-sdk/util-user-agent-node': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 fast-xml-parser: 4.1.2 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/client-sts@3.43.0: - resolution: - { - integrity: sha512-4CKYimjhIEixVtJH0Y8FR5FXc7zIepZtfScy8QHgH+DERXm/YL5cuUbkJiL6ZRTpek0vztVvE+mNSQU0z1eXag==, - } - engines: { node: ">=10.0.0" } - dependencies: - "@aws-crypto/sha256-browser": 2.0.0 - "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.40.0 - "@aws-sdk/credential-provider-node": 3.41.0 - "@aws-sdk/fetch-http-handler": 3.40.0 - "@aws-sdk/hash-node": 3.40.0 - "@aws-sdk/invalid-dependency": 3.40.0 - "@aws-sdk/middleware-content-length": 3.40.0 - "@aws-sdk/middleware-host-header": 3.40.0 - "@aws-sdk/middleware-logger": 3.40.0 - "@aws-sdk/middleware-retry": 3.40.0 - "@aws-sdk/middleware-sdk-sts": 3.40.0 - "@aws-sdk/middleware-serde": 3.40.0 - "@aws-sdk/middleware-signing": 3.40.0 - "@aws-sdk/middleware-stack": 3.40.0 - "@aws-sdk/middleware-user-agent": 3.40.0 - "@aws-sdk/node-config-provider": 3.40.0 - "@aws-sdk/node-http-handler": 3.40.0 - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/smithy-client": 3.41.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/url-parser": 3.40.0 - "@aws-sdk/util-base64-browser": 3.37.0 - "@aws-sdk/util-base64-node": 3.37.0 - "@aws-sdk/util-body-length-browser": 3.37.0 - "@aws-sdk/util-body-length-node": 3.37.0 - "@aws-sdk/util-user-agent-browser": 3.40.0 - "@aws-sdk/util-user-agent-node": 3.40.0 - "@aws-sdk/util-utf8-browser": 3.37.0 - "@aws-sdk/util-utf8-node": 3.37.0 + resolution: {integrity: sha512-4CKYimjhIEixVtJH0Y8FR5FXc7zIepZtfScy8QHgH+DERXm/YL5cuUbkJiL6ZRTpek0vztVvE+mNSQU0z1eXag==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/config-resolver': 3.40.0 + '@aws-sdk/credential-provider-node': 3.41.0 + '@aws-sdk/fetch-http-handler': 3.40.0 + '@aws-sdk/hash-node': 3.40.0 + '@aws-sdk/invalid-dependency': 3.40.0 + '@aws-sdk/middleware-content-length': 3.40.0 + '@aws-sdk/middleware-host-header': 3.40.0 + '@aws-sdk/middleware-logger': 3.40.0 + '@aws-sdk/middleware-retry': 3.40.0 + '@aws-sdk/middleware-sdk-sts': 3.40.0 + '@aws-sdk/middleware-serde': 3.40.0 + '@aws-sdk/middleware-signing': 3.40.0 + '@aws-sdk/middleware-stack': 3.40.0 + '@aws-sdk/middleware-user-agent': 3.40.0 + '@aws-sdk/node-config-provider': 3.40.0 + '@aws-sdk/node-http-handler': 3.40.0 + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/smithy-client': 3.41.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/url-parser': 3.40.0 + '@aws-sdk/util-base64-browser': 3.37.0 + '@aws-sdk/util-base64-node': 3.37.0 + '@aws-sdk/util-body-length-browser': 3.37.0 + '@aws-sdk/util-body-length-node': 3.37.0 + '@aws-sdk/util-user-agent-browser': 3.40.0 + '@aws-sdk/util-user-agent-node': 3.40.0 + '@aws-sdk/util-utf8-browser': 3.37.0 + '@aws-sdk/util-utf8-node': 3.37.0 entities: 2.2.0 fast-xml-parser: 3.19.0 tslib: 2.5.0 dev: false /@aws-sdk/config-resolver@3.292.0: - resolution: - { - integrity: sha512-cB3twnNR7vYvlt2jvw8VlA1+iv/tVzl+/S39MKqw2tepU+AbJAM0EHwb/dkf1OKSmlrnANXhshx80MHF9zL4mA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-config-provider": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 + resolution: {integrity: sha512-cB3twnNR7vYvlt2jvw8VlA1+iv/tVzl+/S39MKqw2tepU+AbJAM0EHwb/dkf1OKSmlrnANXhshx80MHF9zL4mA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/signature-v4': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/util-config-provider': 3.292.0 + '@aws-sdk/util-middleware': 3.292.0 tslib: 2.5.0 /@aws-sdk/config-resolver@3.310.0: - resolution: - { - integrity: sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-config-provider": 3.310.0 - "@aws-sdk/util-middleware": 3.310.0 + resolution: {integrity: sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-config-provider': 3.310.0 + '@aws-sdk/util-middleware': 3.310.0 tslib: 2.5.0 /@aws-sdk/config-resolver@3.40.0: - resolution: - { - integrity: sha512-QYy6J2k31QL6J74hPBfptnLW1kQYdN+xjwH4UQ1mv7EUhRoJN9ZY2soStJowFy4at6IIOOVWbyG5dyqvrbEovg==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/signature-v4": 3.40.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-config-provider": 3.40.0 + resolution: {integrity: sha512-QYy6J2k31QL6J74hPBfptnLW1kQYdN+xjwH4UQ1mv7EUhRoJN9ZY2soStJowFy4at6IIOOVWbyG5dyqvrbEovg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/signature-v4': 3.40.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-config-provider': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/credential-provider-env@3.292.0: - resolution: - { - integrity: sha512-YbafSG0ZEKE2969CJWVtUhh3hfOeLPecFVoXOtegCyAJgY5Ghtu4TsVhL4DgiGAgOC30ojAmUVQEXzd7xJF5xA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-YbafSG0ZEKE2969CJWVtUhh3hfOeLPecFVoXOtegCyAJgY5Ghtu4TsVhL4DgiGAgOC30ojAmUVQEXzd7xJF5xA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/credential-provider-env@3.310.0: - resolution: - { - integrity: sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/credential-provider-env@3.40.0: - resolution: - { - integrity: sha512-qHZdf2vxhzZkSygjw2I4SEYFL2dMZxxYvO4QlkqQouKY81OVxs/j69oiNCjPasQzGz5jaZZKI8xEAIfkSyr1lg==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-qHZdf2vxhzZkSygjw2I4SEYFL2dMZxxYvO4QlkqQouKY81OVxs/j69oiNCjPasQzGz5jaZZKI8xEAIfkSyr1lg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/credential-provider-imds@3.292.0: - resolution: - { - integrity: sha512-W/peOgDSRYulgzFpUhvgi1pCm6piBz6xrVN17N4QOy+3NHBXRVMVzYk6ct2qpLPgJUSEZkcpP+Gds+bBm8ed1A==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 + resolution: {integrity: sha512-W/peOgDSRYulgzFpUhvgi1pCm6piBz6xrVN17N4QOy+3NHBXRVMVzYk6ct2qpLPgJUSEZkcpP+Gds+bBm8ed1A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/node-config-provider': 3.292.0 + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/url-parser': 3.292.0 tslib: 2.5.0 /@aws-sdk/credential-provider-imds@3.310.0: - resolution: - { - integrity: sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 + resolution: {integrity: sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 tslib: 2.5.0 /@aws-sdk/credential-provider-imds@3.40.0: - resolution: - { - integrity: sha512-Ty/wVa+BQrCFrP06AGl5S1CeLifDt68YrlYXUnkRn603SX4DvxBgVO7XFeDH58G8ziDCiqxfmVl4yjbncPPeSw==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/node-config-provider": 3.40.0 - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/url-parser": 3.40.0 + resolution: {integrity: sha512-Ty/wVa+BQrCFrP06AGl5S1CeLifDt68YrlYXUnkRn603SX4DvxBgVO7XFeDH58G8ziDCiqxfmVl4yjbncPPeSw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/node-config-provider': 3.40.0 + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/url-parser': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/credential-provider-ini@3.294.0: - resolution: - { - integrity: sha512-pdTPbaAb5bWA+DnuKoL2TpXeNDp6Ejpv/OYt+bw2gdzl9w5r/ZCtUTTbW+Vvejr4WL5s3c1bY96kwdqCn7iLqA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/credential-provider-env": 3.292.0 - "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.294.0 - "@aws-sdk/credential-provider-web-identity": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-pdTPbaAb5bWA+DnuKoL2TpXeNDp6Ejpv/OYt+bw2gdzl9w5r/ZCtUTTbW+Vvejr4WL5s3c1bY96kwdqCn7iLqA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.292.0 + '@aws-sdk/credential-provider-imds': 3.292.0 + '@aws-sdk/credential-provider-process': 3.292.0 + '@aws-sdk/credential-provider-sso': 3.294.0 + '@aws-sdk/credential-provider-web-identity': 3.292.0 + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/shared-ini-file-loader': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/credential-provider-ini@3.319.0: - resolution: - { - integrity: sha512-pzx388Fw1KlSgmIMUyRY8DJVYM3aXpwzjprD4RiQVPJeAI+t7oQmEvd2FiUZEuHDjWXcuonxgU+dk7i7HUk/HQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/credential-provider-env": 3.310.0 - "@aws-sdk/credential-provider-imds": 3.310.0 - "@aws-sdk/credential-provider-process": 3.310.0 - "@aws-sdk/credential-provider-sso": 3.319.0 - "@aws-sdk/credential-provider-web-identity": 3.310.0 - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/shared-ini-file-loader": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-pzx388Fw1KlSgmIMUyRY8DJVYM3aXpwzjprD4RiQVPJeAI+t7oQmEvd2FiUZEuHDjWXcuonxgU+dk7i7HUk/HQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.310.0 + '@aws-sdk/credential-provider-imds': 3.310.0 + '@aws-sdk/credential-provider-process': 3.310.0 + '@aws-sdk/credential-provider-sso': 3.319.0 + '@aws-sdk/credential-provider-web-identity': 3.310.0 + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/shared-ini-file-loader': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/credential-provider-ini@3.41.0: - resolution: - { - integrity: sha512-98CGEHg7Tb6HxK5ZIdbAcijvD3IpLe0ddse1xMe/Ilhjz770FS/L2UNprOP6PZTqrSfBffiMrvfThUSuUaTlIQ==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/credential-provider-env": 3.40.0 - "@aws-sdk/credential-provider-imds": 3.40.0 - "@aws-sdk/credential-provider-sso": 3.41.0 - "@aws-sdk/credential-provider-web-identity": 3.41.0 - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/shared-ini-file-loader": 3.37.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-credentials": 3.37.0 + resolution: {integrity: sha512-98CGEHg7Tb6HxK5ZIdbAcijvD3IpLe0ddse1xMe/Ilhjz770FS/L2UNprOP6PZTqrSfBffiMrvfThUSuUaTlIQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.40.0 + '@aws-sdk/credential-provider-imds': 3.40.0 + '@aws-sdk/credential-provider-sso': 3.41.0 + '@aws-sdk/credential-provider-web-identity': 3.41.0 + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/shared-ini-file-loader': 3.37.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-credentials': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/credential-provider-node@3.294.0: - resolution: - { - integrity: sha512-zUL1Qhb4BsQIZCs/TPpG4oIYH/9YsGiS+Se1tasSGjTOLfBy7jhOZ0QIdpEeyAx/EP8blOBredM9xWfEXgiHVA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/credential-provider-env": 3.292.0 - "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-ini": 3.294.0 - "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.294.0 - "@aws-sdk/credential-provider-web-identity": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-zUL1Qhb4BsQIZCs/TPpG4oIYH/9YsGiS+Se1tasSGjTOLfBy7jhOZ0QIdpEeyAx/EP8blOBredM9xWfEXgiHVA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.292.0 + '@aws-sdk/credential-provider-imds': 3.292.0 + '@aws-sdk/credential-provider-ini': 3.294.0 + '@aws-sdk/credential-provider-process': 3.292.0 + '@aws-sdk/credential-provider-sso': 3.294.0 + '@aws-sdk/credential-provider-web-identity': 3.292.0 + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/shared-ini-file-loader': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/credential-provider-node@3.319.0: - resolution: - { - integrity: sha512-DS4a0Rdd7ZtMshoeE+zuSgbC05YBcdzd0h89u/eX+1Yqx+HCjeb8WXkbXsz0Mwx8q9TE04aS8f6Bw9J4x4mO5g==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/credential-provider-env": 3.310.0 - "@aws-sdk/credential-provider-imds": 3.310.0 - "@aws-sdk/credential-provider-ini": 3.319.0 - "@aws-sdk/credential-provider-process": 3.310.0 - "@aws-sdk/credential-provider-sso": 3.319.0 - "@aws-sdk/credential-provider-web-identity": 3.310.0 - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/shared-ini-file-loader": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-DS4a0Rdd7ZtMshoeE+zuSgbC05YBcdzd0h89u/eX+1Yqx+HCjeb8WXkbXsz0Mwx8q9TE04aS8f6Bw9J4x4mO5g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.310.0 + '@aws-sdk/credential-provider-imds': 3.310.0 + '@aws-sdk/credential-provider-ini': 3.319.0 + '@aws-sdk/credential-provider-process': 3.310.0 + '@aws-sdk/credential-provider-sso': 3.319.0 + '@aws-sdk/credential-provider-web-identity': 3.310.0 + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/shared-ini-file-loader': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/credential-provider-node@3.41.0: - resolution: - { - integrity: sha512-5FW6+wNJgyDCsbAd+mLm/1DBTDkyIYOMVzcxbr6Vi3pM4UrMFdeLdAP62edYW8usg78Xg+c6vaAoEv/M3zkS0Q==, - } - engines: { node: ">=10.0.0" } - dependencies: - "@aws-sdk/credential-provider-env": 3.40.0 - "@aws-sdk/credential-provider-imds": 3.40.0 - "@aws-sdk/credential-provider-ini": 3.41.0 - "@aws-sdk/credential-provider-process": 3.40.0 - "@aws-sdk/credential-provider-sso": 3.41.0 - "@aws-sdk/credential-provider-web-identity": 3.41.0 - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/shared-ini-file-loader": 3.37.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-credentials": 3.37.0 + resolution: {integrity: sha512-5FW6+wNJgyDCsbAd+mLm/1DBTDkyIYOMVzcxbr6Vi3pM4UrMFdeLdAP62edYW8usg78Xg+c6vaAoEv/M3zkS0Q==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.40.0 + '@aws-sdk/credential-provider-imds': 3.40.0 + '@aws-sdk/credential-provider-ini': 3.41.0 + '@aws-sdk/credential-provider-process': 3.40.0 + '@aws-sdk/credential-provider-sso': 3.41.0 + '@aws-sdk/credential-provider-web-identity': 3.41.0 + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/shared-ini-file-loader': 3.37.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-credentials': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/credential-provider-process@3.292.0: - resolution: - { - integrity: sha512-CFVXuMuUvg/a4tknzRikEDwZBnKlHs1LZCpTXIGjBdUTdosoi4WNzDLzGp93ZRTtcgFz+4wirz2f7P3lC0NrQw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-CFVXuMuUvg/a4tknzRikEDwZBnKlHs1LZCpTXIGjBdUTdosoi4WNzDLzGp93ZRTtcgFz+4wirz2f7P3lC0NrQw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/shared-ini-file-loader': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/credential-provider-process@3.310.0: - resolution: - { - integrity: sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/shared-ini-file-loader": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/shared-ini-file-loader': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/credential-provider-process@3.40.0: - resolution: - { - integrity: sha512-qsaNCDesW2GasDbzpeOA371gxugi05JWxt3EKonLbUfkGKBK7kmmL6EgLIxZuNm2/Ve4RS07PKp8yBGm4xIx9w==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/shared-ini-file-loader": 3.37.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-credentials": 3.37.0 + resolution: {integrity: sha512-qsaNCDesW2GasDbzpeOA371gxugi05JWxt3EKonLbUfkGKBK7kmmL6EgLIxZuNm2/Ve4RS07PKp8yBGm4xIx9w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/shared-ini-file-loader': 3.37.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-credentials': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/credential-provider-sso@3.294.0: - resolution: - { - integrity: sha512-UxrcAA/0l7j9+3tolYcG5M61D/IE1Bjd/9H87H1i2A2BrwUUBhW1Dp/vvROEDrrywlMDG3CDF3T/7ADtTak+sg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/client-sso": 3.294.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/token-providers": 3.294.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-UxrcAA/0l7j9+3tolYcG5M61D/IE1Bjd/9H87H1i2A2BrwUUBhW1Dp/vvROEDrrywlMDG3CDF3T/7ADtTak+sg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.294.0 + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/shared-ini-file-loader': 3.292.0 + '@aws-sdk/token-providers': 3.294.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/credential-provider-sso@3.319.0: - resolution: - { - integrity: sha512-gAUnWH41lxkIbANXu+Rz5zS0Iavjjmpf3C56vAMT7oaYZ3Cg/Ys5l2SwAucQGOCA2DdS2hDiSI8E+Yhr4F5toA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/client-sso": 3.319.0 - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/shared-ini-file-loader": 3.310.0 - "@aws-sdk/token-providers": 3.319.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-gAUnWH41lxkIbANXu+Rz5zS0Iavjjmpf3C56vAMT7oaYZ3Cg/Ys5l2SwAucQGOCA2DdS2hDiSI8E+Yhr4F5toA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.319.0 + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/shared-ini-file-loader': 3.310.0 + '@aws-sdk/token-providers': 3.319.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/credential-provider-sso@3.41.0: - resolution: - { - integrity: sha512-9s7SWu3RVIQ/MTcBCt35EMzxNQm3avivrbpSOKfJwxR5L+oNKPsV+gSqMlkNZGwOVJyUicIsZGcq/4ON6CjrOg==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/client-sso": 3.41.0 - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/shared-ini-file-loader": 3.37.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-credentials": 3.37.0 + resolution: {integrity: sha512-9s7SWu3RVIQ/MTcBCt35EMzxNQm3avivrbpSOKfJwxR5L+oNKPsV+gSqMlkNZGwOVJyUicIsZGcq/4ON6CjrOg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.41.0 + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/shared-ini-file-loader': 3.37.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-credentials': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/credential-provider-web-identity@3.292.0: - resolution: - { - integrity: sha512-4DbtIEM9gGVfqYlMdYXg3XY+vBhemjB1zXIequottW8loLYM8Vuz4/uGxxKNze6evVVzowsA0wKrYclE1aj/Rg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-4DbtIEM9gGVfqYlMdYXg3XY+vBhemjB1zXIequottW8loLYM8Vuz4/uGxxKNze6evVVzowsA0wKrYclE1aj/Rg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/credential-provider-web-identity@3.310.0: - resolution: - { - integrity: sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/credential-provider-web-identity@3.41.0: - resolution: - { - integrity: sha512-VqvVoEh9C8xTXl4stKyJC5IKQhS8g1Gi5k6B9HPHLIxFRRfKxkE73DT4pMN6npnus7o0yi0MTFGQFQGYSrFO2g==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-VqvVoEh9C8xTXl4stKyJC5IKQhS8g1Gi5k6B9HPHLIxFRRfKxkE73DT4pMN6npnus7o0yi0MTFGQFQGYSrFO2g==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/endpoint-cache@3.310.0: - resolution: - { - integrity: sha512-y3wipforet41EDTI0vnzxILqwAGll1KfI5qcdX9pXF/WF1f+3frcOtPiWtQEZQpy4czRogKm3BHo70QBYAZxlQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-y3wipforet41EDTI0vnzxILqwAGll1KfI5qcdX9pXF/WF1f+3frcOtPiWtQEZQpy4czRogKm3BHo70QBYAZxlQ==} + engines: {node: '>=14.0.0'} dependencies: mnemonist: 0.38.3 tslib: 2.5.0 dev: false /@aws-sdk/eventstream-codec@3.310.0: - resolution: - { - integrity: sha512-clIeSgWbZbxwtsxZ/yoedNM0/kJFSIjjHPikuDGhxhqc+vP6TN3oYyVMFrYwFaTFhk2+S5wZcWYMw8Op1pWo+A==, - } - dependencies: - "@aws-crypto/crc32": 3.0.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-hex-encoding": 3.310.0 + resolution: {integrity: sha512-clIeSgWbZbxwtsxZ/yoedNM0/kJFSIjjHPikuDGhxhqc+vP6TN3oYyVMFrYwFaTFhk2+S5wZcWYMw8Op1pWo+A==} + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-hex-encoding': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/eventstream-serde-browser@3.310.0: - resolution: - { - integrity: sha512-3S6ziuQVALgEyz0TANGtYDVeG8ArK4Y05mcgrs8qUTmsvlDIXX37cR/DvmVbNB76M4IrsZeSAIajL9644CywkA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/eventstream-serde-universal": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-3S6ziuQVALgEyz0TANGtYDVeG8ArK4Y05mcgrs8qUTmsvlDIXX37cR/DvmVbNB76M4IrsZeSAIajL9644CywkA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/eventstream-serde-universal': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/eventstream-serde-config-resolver@3.310.0: - resolution: - { - integrity: sha512-8s1Qdn9STj+sV75nUp9yt0W6fHS4BZ2jTm4Z/1Pcbvh2Gqs0WjH5n2StS+pDW5Y9J/HSGBl0ogmUr5lC5bXFHg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-8s1Qdn9STj+sV75nUp9yt0W6fHS4BZ2jTm4Z/1Pcbvh2Gqs0WjH5n2StS+pDW5Y9J/HSGBl0ogmUr5lC5bXFHg==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/eventstream-serde-node@3.310.0: - resolution: - { - integrity: sha512-kSnRomCgW43K9TmQYuwN9+AoYPnhyOKroanUMyZEzJk7rpCPMj4OzaUpXfDYOvznFNYn7NLaH6nHLJAr0VPlJA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/eventstream-serde-universal": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-kSnRomCgW43K9TmQYuwN9+AoYPnhyOKroanUMyZEzJk7rpCPMj4OzaUpXfDYOvznFNYn7NLaH6nHLJAr0VPlJA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/eventstream-serde-universal': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/eventstream-serde-universal@3.310.0: - resolution: - { - integrity: sha512-Qyjt5k/waV5cDukpgT824ISZAz5U0pwzLz5ztR409u85AGNkF/9n7MS+LSyBUBSb0WJ5pUeSD47WBk+nLq9Nhw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/eventstream-codec": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-Qyjt5k/waV5cDukpgT824ISZAz5U0pwzLz5ztR409u85AGNkF/9n7MS+LSyBUBSb0WJ5pUeSD47WBk+nLq9Nhw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/eventstream-codec': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/fetch-http-handler@3.292.0: - resolution: - { - integrity: sha512-zh3bhUJbL8RSa39ZKDcy+AghtUkIP8LwcNlwRIoxMQh3Row4D1s4fCq0KZCx98NJBEXoiTLyTQlZxxI//BOb1Q==, - } - dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/querystring-builder": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 + resolution: {integrity: sha512-zh3bhUJbL8RSa39ZKDcy+AghtUkIP8LwcNlwRIoxMQh3Row4D1s4fCq0KZCx98NJBEXoiTLyTQlZxxI//BOb1Q==} + dependencies: + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/querystring-builder': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/util-base64': 3.292.0 tslib: 2.5.0 /@aws-sdk/fetch-http-handler@3.310.0: - resolution: - { - integrity: sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==, - } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/querystring-builder": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 + resolution: {integrity: sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/querystring-builder': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 tslib: 2.5.0 /@aws-sdk/fetch-http-handler@3.40.0: - resolution: - { - integrity: sha512-w1HiZromoU+/bbEo89uO81l6UO/M+c2uOMnXntZqe6t3ZHUUUo3AbvhKh0QGVFqRQa+Oi0+95KqWmTHa72/9Iw==, - } - dependencies: - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/querystring-builder": 3.40.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-base64-browser": 3.37.0 + resolution: {integrity: sha512-w1HiZromoU+/bbEo89uO81l6UO/M+c2uOMnXntZqe6t3ZHUUUo3AbvhKh0QGVFqRQa+Oi0+95KqWmTHa72/9Iw==} + dependencies: + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/querystring-builder': 3.40.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-base64-browser': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/hash-blob-browser@3.310.0: - resolution: - { - integrity: sha512-OoR8p0cbypToysLT0v3o2oyjy6+DKrY7GNCAzHOHJK9xmqXCt+DsjKoPeiY7o1sWX2aN6Plmvubj/zWxMKEn/A==, - } + resolution: {integrity: sha512-OoR8p0cbypToysLT0v3o2oyjy6+DKrY7GNCAzHOHJK9xmqXCt+DsjKoPeiY7o1sWX2aN6Plmvubj/zWxMKEn/A==} dependencies: - "@aws-sdk/chunked-blob-reader": 3.310.0 - "@aws-sdk/types": 3.310.0 + '@aws-sdk/chunked-blob-reader': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/hash-node@3.292.0: - resolution: - { - integrity: sha512-1yLxmIsvE+eK36JXEgEIouTITdykQLVhsA5Oai//Lar6Ddgu1sFpLDbdkMtKbrh4I0jLN9RacNCkeVQjZPTCCQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-buffer-from": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 + resolution: {integrity: sha512-1yLxmIsvE+eK36JXEgEIouTITdykQLVhsA5Oai//Lar6Ddgu1sFpLDbdkMtKbrh4I0jLN9RacNCkeVQjZPTCCQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.292.0 + '@aws-sdk/util-buffer-from': 3.292.0 + '@aws-sdk/util-utf8': 3.292.0 tslib: 2.5.0 /@aws-sdk/hash-node@3.310.0: - resolution: - { - integrity: sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-buffer-from": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-buffer-from': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 /@aws-sdk/hash-node@3.40.0: - resolution: - { - integrity: sha512-yOXXK85DdGDktdnQtXgMdaVKii4wtMjEhJ1mrvx2A9nMFNaPhxvERkVVIUKSWlJRa9ZujOw5jWOx8d2R51/Kjg==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-buffer-from": 3.37.0 + resolution: {integrity: sha512-yOXXK85DdGDktdnQtXgMdaVKii4wtMjEhJ1mrvx2A9nMFNaPhxvERkVVIUKSWlJRa9ZujOw5jWOx8d2R51/Kjg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-buffer-from': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/hash-stream-node@3.310.0: - resolution: - { - integrity: sha512-ZoXdybNgvMz1Hl6k/e32xVL3jmG5p2IEk5mTtLfFEuskTJ74Z+VMYKkkF1whyy7KQfH83H+TQGnsGtlRCchQKw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-ZoXdybNgvMz1Hl6k/e32xVL3jmG5p2IEk5mTtLfFEuskTJ74Z+VMYKkkF1whyy7KQfH83H+TQGnsGtlRCchQKw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/invalid-dependency@3.292.0: - resolution: - { - integrity: sha512-39OUV78CD3TmEbjhpt+V+Fk4wAGWhixqHxDSN8+4WL0uB4Fl7k5m3Z9hNY78AttHQSl2twR7WtLztnXPAFsriw==, - } + resolution: {integrity: sha512-39OUV78CD3TmEbjhpt+V+Fk4wAGWhixqHxDSN8+4WL0uB4Fl7k5m3Z9hNY78AttHQSl2twR7WtLztnXPAFsriw==} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/invalid-dependency@3.310.0: - resolution: - { - integrity: sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==, - } + resolution: {integrity: sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/invalid-dependency@3.40.0: - resolution: - { - integrity: sha512-axIWtDwCBDDqEgAJipX1FB1ZNpWYXquVwKDMo+7G+ftPBZ4FEq4M1ELhXJL3hhNJ9ZmCQzv+4F6Wnt8dwuzUaQ==, - } + resolution: {integrity: sha512-axIWtDwCBDDqEgAJipX1FB1ZNpWYXquVwKDMo+7G+ftPBZ4FEq4M1ELhXJL3hhNJ9ZmCQzv+4F6Wnt8dwuzUaQ==} dependencies: - "@aws-sdk/types": 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/is-array-buffer@3.292.0: - resolution: - { - integrity: sha512-kW/G5T/fzI0sJH5foZG6XJiNCevXqKLxV50qIT4B1pMuw7regd4ALIy0HwSqj1nnn9mSbRWBfmby0jWCJsMcwg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-kW/G5T/fzI0sJH5foZG6XJiNCevXqKLxV50qIT4B1pMuw7regd4ALIy0HwSqj1nnn9mSbRWBfmby0jWCJsMcwg==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/is-array-buffer@3.310.0: - resolution: - { - integrity: sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/is-array-buffer@3.37.0: - resolution: - { - integrity: sha512-XLjA/a6AuGnCvcJZLsMTy2jxF2upgGhqCCkoIJgLlzzXHSihur13KcmPvW/zcaGnCRj0SvKWXiJHl4vDlW75VQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-XLjA/a6AuGnCvcJZLsMTy2jxF2upgGhqCCkoIJgLlzzXHSihur13KcmPvW/zcaGnCRj0SvKWXiJHl4vDlW75VQ==} + engines: {node: '>= 10.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/lib-dynamodb@3.319.0(@aws-sdk/client-dynamodb@3.319.0)(@aws-sdk/smithy-client@3.316.0)(@aws-sdk/types@3.310.0): - resolution: - { - integrity: sha512-9+N27Rh7W0hrxv2ms2eLKe6n6fU4c8hedNZwx8/O0t2UzMIJndebJR90+JduNjxwSgbwsVtV1d07Po1n/EhzmQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-9+N27Rh7W0hrxv2ms2eLKe6n6fU4c8hedNZwx8/O0t2UzMIJndebJR90+JduNjxwSgbwsVtV1d07Po1n/EhzmQ==} + engines: {node: '>=14.0.0'} peerDependencies: - "@aws-sdk/client-dynamodb": ^3.0.0 - "@aws-sdk/smithy-client": ^3.0.0 - "@aws-sdk/types": ^3.0.0 - dependencies: - "@aws-sdk/client-dynamodb": 3.319.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-dynamodb": 3.319.0 + '@aws-sdk/client-dynamodb': ^3.0.0 + '@aws-sdk/smithy-client': ^3.0.0 + '@aws-sdk/types': ^3.0.0 + dependencies: + '@aws-sdk/client-dynamodb': 3.319.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-dynamodb': 3.319.0 tslib: 2.5.0 dev: false /@aws-sdk/md5-js@3.310.0: - resolution: - { - integrity: sha512-x5sRBUrEfLWAS1EhwbbDQ7cXq6uvBxh3qR2XAsnGvFFceTeAadk7cVogWxlk3PC+OCeeym7c3/6Bv2HQ2f1YyQ==, - } + resolution: {integrity: sha512-x5sRBUrEfLWAS1EhwbbDQ7cXq6uvBxh3qR2XAsnGvFFceTeAadk7cVogWxlk3PC+OCeeym7c3/6Bv2HQ2f1YyQ==} dependencies: - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-bucket-endpoint@3.310.0: - resolution: - { - integrity: sha512-uJJfHI7v4AgbJZRLtyI8ap2QRWkBokGc3iyUoQ+dVNT3/CE2ZCu694A6W+H0dRqg79dIE+f9CRNdtLGa/Ehhvg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-arn-parser": 3.310.0 - "@aws-sdk/util-config-provider": 3.310.0 + resolution: {integrity: sha512-uJJfHI7v4AgbJZRLtyI8ap2QRWkBokGc3iyUoQ+dVNT3/CE2ZCu694A6W+H0dRqg79dIE+f9CRNdtLGa/Ehhvg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-arn-parser': 3.310.0 + '@aws-sdk/util-config-provider': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-content-length@3.292.0: - resolution: - { - integrity: sha512-2gMWzQus5mj14menolpPDbYBeaOYcj7KNFZOjTjjI3iQ0KqyetG6XasirNrcJ/8QX1BRmpTol8Xjp2Ue3Gbzwg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-2gMWzQus5mj14menolpPDbYBeaOYcj7KNFZOjTjjI3iQ0KqyetG6XasirNrcJ/8QX1BRmpTol8Xjp2Ue3Gbzwg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/middleware-content-length@3.310.0: - resolution: - { - integrity: sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-content-length@3.40.0: - resolution: - { - integrity: sha512-sybAJb8v7I/vvL08R3+TI/XDAg9gybQTZ2treC24Ap4+jAOz4QBTHJPMKaUlEeFlMUcq4rj6/u2897ebYH6opw==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-sybAJb8v7I/vvL08R3+TI/XDAg9gybQTZ2treC24Ap4+jAOz4QBTHJPMKaUlEeFlMUcq4rj6/u2897ebYH6opw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-endpoint-discovery@3.310.0: - resolution: - { - integrity: sha512-+zZlFQ6rpvzBJrj/48iV+4tDOjnOB0syVT7Q0y+ekXzbGcNuIlLUustnLuPK1cIlMKWdmwfRzfGgGQAwyZ0l2A==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/endpoint-cache": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-+zZlFQ6rpvzBJrj/48iV+4tDOjnOB0syVT7Q0y+ekXzbGcNuIlLUustnLuPK1cIlMKWdmwfRzfGgGQAwyZ0l2A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/endpoint-cache': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-endpoint@3.292.0: - resolution: - { - integrity: sha512-cPMkiSxpZGG6tYlW4OS+ucS6r43f9ddX9kcUoemJCY10MOuogdPjulCAjE0HTs2PLKSOrrG4CTP4Q4wWDrH4Bw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-config-provider": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 + resolution: {integrity: sha512-cPMkiSxpZGG6tYlW4OS+ucS6r43f9ddX9kcUoemJCY10MOuogdPjulCAjE0HTs2PLKSOrrG4CTP4Q4wWDrH4Bw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-serde': 3.292.0 + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/signature-v4': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/url-parser': 3.292.0 + '@aws-sdk/util-config-provider': 3.292.0 + '@aws-sdk/util-middleware': 3.292.0 tslib: 2.5.0 /@aws-sdk/middleware-endpoint@3.310.0: - resolution: - { - integrity: sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/middleware-serde": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/url-parser": 3.310.0 - "@aws-sdk/util-middleware": 3.310.0 + resolution: {integrity: sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-serde': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/url-parser': 3.310.0 + '@aws-sdk/util-middleware': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-expect-continue@3.310.0: - resolution: - { - integrity: sha512-l3d1z2gt+gINJDnPSyu84IxfzjzPfCQrqC1sunw2cZGo/sXtEiq698Q3SiTcO2PGP4LBQAy2RHb5wVBJP708CQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-l3d1z2gt+gINJDnPSyu84IxfzjzPfCQrqC1sunw2cZGo/sXtEiq698Q3SiTcO2PGP4LBQAy2RHb5wVBJP708CQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-flexible-checksums@3.310.0: - resolution: - { - integrity: sha512-5ndnLgzgGVpWkmHBAiYkagHqiSuow8q62J4J6E2PzaQ77+fm8W3nfdy7hK5trHokEyouCZdxT/XK/IRhgj/4PA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-crypto/crc32": 3.0.0 - "@aws-crypto/crc32c": 3.0.0 - "@aws-sdk/is-array-buffer": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-5ndnLgzgGVpWkmHBAiYkagHqiSuow8q62J4J6E2PzaQ77+fm8W3nfdy7hK5trHokEyouCZdxT/XK/IRhgj/4PA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@aws-crypto/crc32c': 3.0.0 + '@aws-sdk/is-array-buffer': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-host-header@3.292.0: - resolution: - { - integrity: sha512-mHuCWe3Yg2S5YZ7mB7sKU6C97XspfqrimWjMW9pfV2usAvLA3R0HrB03jpR5vpZ3P4q7HB6wK3S6CjYMGGRNag==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-mHuCWe3Yg2S5YZ7mB7sKU6C97XspfqrimWjMW9pfV2usAvLA3R0HrB03jpR5vpZ3P4q7HB6wK3S6CjYMGGRNag==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/middleware-host-header@3.310.0: - resolution: - { - integrity: sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-host-header@3.40.0: - resolution: - { - integrity: sha512-/wocR7JFOLM7/+BQM1DgAd6KCFYcdxYu1P7AhI451GlVNuYa5f89zh7p0gt3SRC6monI5lXgpL7RudhDm8fTrA==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-/wocR7JFOLM7/+BQM1DgAd6KCFYcdxYu1P7AhI451GlVNuYa5f89zh7p0gt3SRC6monI5lXgpL7RudhDm8fTrA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-location-constraint@3.310.0: - resolution: - { - integrity: sha512-LFm0JTQWwTPWL/tZU2wsQTl8J5PpDEkXjEhaXVKamtyH0xhysRqd+0n92n65dc8oztAuQkb9xUbErGn5b6gsew==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-LFm0JTQWwTPWL/tZU2wsQTl8J5PpDEkXjEhaXVKamtyH0xhysRqd+0n92n65dc8oztAuQkb9xUbErGn5b6gsew==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-logger@3.292.0: - resolution: - { - integrity: sha512-yZNY1XYmG3NG+uonET7jzKXNiwu61xm/ZZ6i/l51SusuaYN+qQtTAhOFsieQqTehF9kP4FzbsWgPDwD8ZZX9lw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-yZNY1XYmG3NG+uonET7jzKXNiwu61xm/ZZ6i/l51SusuaYN+qQtTAhOFsieQqTehF9kP4FzbsWgPDwD8ZZX9lw==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/middleware-logger@3.310.0: - resolution: - { - integrity: sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-logger@3.40.0: - resolution: - { - integrity: sha512-19kx0Xg5ymVRKoupmhdmfTBkROcv3DZj508agpyG2YAo0abOObMlIP4Jltg0VD4PhNjGzNh0jFGJnvhjdwv4/A==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-19kx0Xg5ymVRKoupmhdmfTBkROcv3DZj508agpyG2YAo0abOObMlIP4Jltg0VD4PhNjGzNh0jFGJnvhjdwv4/A==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/types": 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-recursion-detection@3.292.0: - resolution: - { - integrity: sha512-kA3VZpPko0Zqd7CYPTKAxhjEv0HJqFu2054L04dde1JLr43ro+2MTdX7vsHzeAFUVRphqatFFofCumvXmU6Mig==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-kA3VZpPko0Zqd7CYPTKAxhjEv0HJqFu2054L04dde1JLr43ro+2MTdX7vsHzeAFUVRphqatFFofCumvXmU6Mig==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/middleware-recursion-detection@3.310.0: - resolution: - { - integrity: sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-retry@3.293.0: - resolution: - { - integrity: sha512-7tiaz2GzRecNHaZ6YnF+Nrtk3au8qF6oiipf11R7MJiqJ0fkMLnz/iRrlakDziS9qF/a9v+3yxb4W4NHK3f4Tw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/service-error-classification": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 - "@aws-sdk/util-retry": 3.292.0 + resolution: {integrity: sha512-7tiaz2GzRecNHaZ6YnF+Nrtk3au8qF6oiipf11R7MJiqJ0fkMLnz/iRrlakDziS9qF/a9v+3yxb4W4NHK3f4Tw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/service-error-classification': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/util-middleware': 3.292.0 + '@aws-sdk/util-retry': 3.292.0 tslib: 2.5.0 uuid: 8.3.2 /@aws-sdk/middleware-retry@3.310.0: - resolution: - { - integrity: sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/service-error-classification": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-middleware": 3.310.0 - "@aws-sdk/util-retry": 3.310.0 + resolution: {integrity: sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/service-error-classification': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-middleware': 3.310.0 + '@aws-sdk/util-retry': 3.310.0 tslib: 2.5.0 uuid: 8.3.2 /@aws-sdk/middleware-retry@3.40.0: - resolution: - { - integrity: sha512-SMUJrukugLL7YJE5X8B2ToukxMWMPwnf7jAFr84ptycCe8bdWv8x8klQ3EtVWpyqochtNlbTi6J/tTQBniUX7A==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/service-error-classification": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-SMUJrukugLL7YJE5X8B2ToukxMWMPwnf7jAFr84ptycCe8bdWv8x8klQ3EtVWpyqochtNlbTi6J/tTQBniUX7A==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/service-error-classification': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 uuid: 8.3.2 dev: false /@aws-sdk/middleware-sdk-s3@3.310.0: - resolution: - { - integrity: sha512-QK9x9g2ksg0hOjjYgqddeFcn5ctUEGdxJVu4OumPXceulefMcSO2jyH2qTybYSA93nqNQFdFmg5wQfvIRUWFCQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-arn-parser": 3.310.0 + resolution: {integrity: sha512-QK9x9g2ksg0hOjjYgqddeFcn5ctUEGdxJVu4OumPXceulefMcSO2jyH2qTybYSA93nqNQFdFmg5wQfvIRUWFCQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-arn-parser': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-sdk-sqs@3.310.0: - resolution: - { - integrity: sha512-p0TCoU/toRZxEAVdRZbtNVmkP36JCSoHMk1qbyPBycM3DL+kCNCsC1gSx5cbC0M6/U/zwUS783UPO0OwvyqimA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-hex-encoding": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-p0TCoU/toRZxEAVdRZbtNVmkP36JCSoHMk1qbyPBycM3DL+kCNCsC1gSx5cbC0M6/U/zwUS783UPO0OwvyqimA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-hex-encoding': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-sdk-sts@3.292.0: - resolution: - { - integrity: sha512-GN5ZHEqXZqDi+HkVbaXRX9HaW/vA5rikYpWKYsmxTUZ7fB7ijvEO3co3lleJv2C+iGYRtUIHC4wYNB5xgoTCxg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/middleware-signing": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-GN5ZHEqXZqDi+HkVbaXRX9HaW/vA5rikYpWKYsmxTUZ7fB7ijvEO3co3lleJv2C+iGYRtUIHC4wYNB5xgoTCxg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.292.0 + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/signature-v4': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/middleware-sdk-sts@3.310.0: - resolution: - { - integrity: sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/middleware-signing": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-sdk-sts@3.40.0: - resolution: - { - integrity: sha512-TcrbCvj1PkabFZiNczT3yePZtuEm2fAIw1OVnQyLcF2KW+p62Hv5YkK4MPOfx3LA/0lzjOUO1RNl2x7gzV443Q==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/middleware-signing": 3.40.0 - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/signature-v4": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-TcrbCvj1PkabFZiNczT3yePZtuEm2fAIw1OVnQyLcF2KW+p62Hv5YkK4MPOfx3LA/0lzjOUO1RNl2x7gzV443Q==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.40.0 + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/signature-v4': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-serde@3.292.0: - resolution: - { - integrity: sha512-6hN9mTQwSvV8EcGvtXbS/MpK7WMCokUku5Wu7X24UwCNMVkoRHLIkYcxHcvBTwttuOU0d8hph1/lIX4dkLwkQw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-6hN9mTQwSvV8EcGvtXbS/MpK7WMCokUku5Wu7X24UwCNMVkoRHLIkYcxHcvBTwttuOU0d8hph1/lIX4dkLwkQw==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/middleware-serde@3.310.0: - resolution: - { - integrity: sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-serde@3.40.0: - resolution: - { - integrity: sha512-uOWfZjlAoBy6xPqp0d4ka83WNNbEVCWn9WwfqBUXThyoTdTooYSpXe5y2YzN0BJa8b+tEZTyWpgamnBpFLp47g==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-uOWfZjlAoBy6xPqp0d4ka83WNNbEVCWn9WwfqBUXThyoTdTooYSpXe5y2YzN0BJa8b+tEZTyWpgamnBpFLp47g==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/types": 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-signing@3.292.0: - resolution: - { - integrity: sha512-GVfoSjDjEQ4TaO6x9MffyP3uRV+2KcS5FtexLCYOM9pJcnE9tqq9FJOrZ1xl1g+YjUVKxo4x8lu3tpEtIb17qg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 + resolution: {integrity: sha512-GVfoSjDjEQ4TaO6x9MffyP3uRV+2KcS5FtexLCYOM9pJcnE9tqq9FJOrZ1xl1g+YjUVKxo4x8lu3tpEtIb17qg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/signature-v4': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/util-middleware': 3.292.0 tslib: 2.5.0 /@aws-sdk/middleware-signing@3.310.0: - resolution: - { - integrity: sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/signature-v4": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-middleware": 3.310.0 + resolution: {integrity: sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/signature-v4': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-middleware': 3.310.0 tslib: 2.5.0 /@aws-sdk/middleware-signing@3.40.0: - resolution: - { - integrity: sha512-RqK5nPbfma0qInMvjtpVkDYY/KkFS6EKlOv3DWTdxbXJ4YuOxgKiuUromhmBUoyjFag0JO7LUWod07H+/DawoA==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/signature-v4": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-RqK5nPbfma0qInMvjtpVkDYY/KkFS6EKlOv3DWTdxbXJ4YuOxgKiuUromhmBUoyjFag0JO7LUWod07H+/DawoA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/signature-v4': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-ssec@3.310.0: - resolution: - { - integrity: sha512-CnEwNKVpd5bXnrCKPaePF8mWTA9ET21OMBb54y9b0fd8K02zoOcdBz4DWfh1SjFD4HkgCdja4egd8l2ivyvqmw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-CnEwNKVpd5bXnrCKPaePF8mWTA9ET21OMBb54y9b0fd8K02zoOcdBz4DWfh1SjFD4HkgCdja4egd8l2ivyvqmw==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/middleware-stack@3.292.0: - resolution: - { - integrity: sha512-WdQpRkuMysrEwrkByCM1qCn2PPpFGGQ2iXqaFha5RzCdZDlxJni9cVNb6HzWUcgjLEYVTXCmOR9Wxm3CNW44Qg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-WdQpRkuMysrEwrkByCM1qCn2PPpFGGQ2iXqaFha5RzCdZDlxJni9cVNb6HzWUcgjLEYVTXCmOR9Wxm3CNW44Qg==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/middleware-stack@3.310.0: - resolution: - { - integrity: sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/middleware-stack@3.40.0: - resolution: - { - integrity: sha512-hby9HvESUYJxpdALX+6Dn2LPmS5jtMVurGB/+j3MWOvIcDYB4bcSXgVRvXzYnTKwbSupIdbX9zOE2ZAx2SJpUQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-hby9HvESUYJxpdALX+6Dn2LPmS5jtMVurGB/+j3MWOvIcDYB4bcSXgVRvXzYnTKwbSupIdbX9zOE2ZAx2SJpUQ==} + engines: {node: '>= 10.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/middleware-user-agent@3.293.0: - resolution: - { - integrity: sha512-gZ7/e6XwpKk9mvgA78q4Ffc796jTn02TUKx2qMDnkLVbeJXBNN2jnvYEKq8v70+o7fd/ALRudg8gBDmkkhM/Hw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 + resolution: {integrity: sha512-gZ7/e6XwpKk9mvgA78q4Ffc796jTn02TUKx2qMDnkLVbeJXBNN2jnvYEKq8v70+o7fd/ALRudg8gBDmkkhM/Hw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/util-endpoints': 3.293.0 tslib: 2.5.0 /@aws-sdk/middleware-user-agent@3.319.0: - resolution: - { - integrity: sha512-ytaLx2dlR5AdMSne6FuDCISVg8hjyKj+cHU20b2CRA/E/z+XXrLrssp4JrCgizRKPPUep0psMIa22Zd6osTT5Q==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-endpoints": 3.319.0 + resolution: {integrity: sha512-ytaLx2dlR5AdMSne6FuDCISVg8hjyKj+cHU20b2CRA/E/z+XXrLrssp4JrCgizRKPPUep0psMIa22Zd6osTT5Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-endpoints': 3.319.0 tslib: 2.5.0 /@aws-sdk/middleware-user-agent@3.40.0: - resolution: - { - integrity: sha512-dzC2fxWnanetFJ1oYgil8df3N36bR1yc/OCOpbdfQNiUk1FrXiCXqH5rHNO8zCvnwJAj8GHFwpFGd9a2Qube2w==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-dzC2fxWnanetFJ1oYgil8df3N36bR1yc/OCOpbdfQNiUk1FrXiCXqH5rHNO8zCvnwJAj8GHFwpFGd9a2Qube2w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/node-config-provider@3.292.0: - resolution: - { - integrity: sha512-S3NnC9dQ5GIbJYSDIldZb4zdpCOEua1tM7bjYL3VS5uqCEM93kIi/o/UkIUveMp/eqTS2LJa5HjNIz5Te6je0A==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-S3NnC9dQ5GIbJYSDIldZb4zdpCOEua1tM7bjYL3VS5uqCEM93kIi/o/UkIUveMp/eqTS2LJa5HjNIz5Te6je0A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/shared-ini-file-loader': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/node-config-provider@3.310.0: - resolution: - { - integrity: sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/shared-ini-file-loader": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/shared-ini-file-loader': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/node-config-provider@3.40.0: - resolution: - { - integrity: sha512-AmokjgUDECG8osoMfdRsPNweqI+L1pn4bYGk5iTLmzbBi0o4ot0U1FdX8Rf0qJZZwS4t1TXc3s8/PDVknmPxKg==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.40.0 - "@aws-sdk/shared-ini-file-loader": 3.37.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-AmokjgUDECG8osoMfdRsPNweqI+L1pn4bYGk5iTLmzbBi0o4ot0U1FdX8Rf0qJZZwS4t1TXc3s8/PDVknmPxKg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.40.0 + '@aws-sdk/shared-ini-file-loader': 3.37.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/node-http-handler@3.292.0: - resolution: - { - integrity: sha512-L/E3UDSwXLXjt1XWWh0RBD55F+aZI1AEdPwdES9i1PjnZLyuxuDhEDptVibNN56+I9/4Q3SbmuVRVlOD0uzBag==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/abort-controller": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/querystring-builder": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-L/E3UDSwXLXjt1XWWh0RBD55F+aZI1AEdPwdES9i1PjnZLyuxuDhEDptVibNN56+I9/4Q3SbmuVRVlOD0uzBag==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.292.0 + '@aws-sdk/protocol-http': 3.292.0 + '@aws-sdk/querystring-builder': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/node-http-handler@3.310.0: - resolution: - { - integrity: sha512-irv9mbcM9xC2xYjArQF5SYmHBMu4ciMWtGsoHII1nRuFOl9FoT4ffTvEPuLlfC6pznzvKt9zvnm6xXj7gDChKg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/abort-controller": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/querystring-builder": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-irv9mbcM9xC2xYjArQF5SYmHBMu4ciMWtGsoHII1nRuFOl9FoT4ffTvEPuLlfC6pznzvKt9zvnm6xXj7gDChKg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/querystring-builder': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/node-http-handler@3.40.0: - resolution: - { - integrity: sha512-qjda6IbxDhbYr8NHmrMurKkbjgLUkfTMVgagDErDK24Nm3Dn5VaO6J4n6c0Q4OLHlmFaRcUfZSTrOo5DAubqCw==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/abort-controller": 3.40.0 - "@aws-sdk/protocol-http": 3.40.0 - "@aws-sdk/querystring-builder": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-qjda6IbxDhbYr8NHmrMurKkbjgLUkfTMVgagDErDK24Nm3Dn5VaO6J4n6c0Q4OLHlmFaRcUfZSTrOo5DAubqCw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.40.0 + '@aws-sdk/protocol-http': 3.40.0 + '@aws-sdk/querystring-builder': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/property-provider@3.292.0: - resolution: - { - integrity: sha512-dHArSvsiqhno/g55N815gXmAMrmN8DP7OeFNqJ4wJG42xsF2PFN3DAsjIuHuXMwu+7A3R1LHqIpvv0hA9KeoJQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-dHArSvsiqhno/g55N815gXmAMrmN8DP7OeFNqJ4wJG42xsF2PFN3DAsjIuHuXMwu+7A3R1LHqIpvv0hA9KeoJQ==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/property-provider@3.310.0: - resolution: - { - integrity: sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/property-provider@3.40.0: - resolution: - { - integrity: sha512-Mx4lkShjsYRwW9ujHA1pcnuubrWQ4kF5/DXWNfUiXuSIO/0Lojp1qTLheyBm4vzkJIlx5umyP6NvRAUkEHSN4Q==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-Mx4lkShjsYRwW9ujHA1pcnuubrWQ4kF5/DXWNfUiXuSIO/0Lojp1qTLheyBm4vzkJIlx5umyP6NvRAUkEHSN4Q==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/types": 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/protocol-http@3.292.0: - resolution: - { - integrity: sha512-NLi4fq3k41aXIh1I97yX0JTy+3p6aW1NdwFwdMa674z86QNfb4SfRQRZBQe9wEnAZ/eWHVnlKIuII+U1URk/Kg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-NLi4fq3k41aXIh1I97yX0JTy+3p6aW1NdwFwdMa674z86QNfb4SfRQRZBQe9wEnAZ/eWHVnlKIuII+U1URk/Kg==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/protocol-http@3.310.0: - resolution: - { - integrity: sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/protocol-http@3.40.0: - resolution: - { - integrity: sha512-f4ea7/HZkjpvGBrnRIuzc/bhrExWrgDv7eulj4htPukZGHdTqSJD3Jk8lEXWvFuX2vUKQDGhEhCDsqup7YWJQQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-f4ea7/HZkjpvGBrnRIuzc/bhrExWrgDv7eulj4htPukZGHdTqSJD3Jk8lEXWvFuX2vUKQDGhEhCDsqup7YWJQQ==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/types": 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/querystring-builder@3.292.0: - resolution: - { - integrity: sha512-XElIFJaReIm24eEvBtV2dOtZvcm3gXsGu/ftG8MLJKbKXFKpAP1q+K6En0Bs7/T88voKghKdKpKT+eZUWgTqlg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-uri-escape": 3.292.0 + resolution: {integrity: sha512-XElIFJaReIm24eEvBtV2dOtZvcm3gXsGu/ftG8MLJKbKXFKpAP1q+K6En0Bs7/T88voKghKdKpKT+eZUWgTqlg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.292.0 + '@aws-sdk/util-uri-escape': 3.292.0 tslib: 2.5.0 /@aws-sdk/querystring-builder@3.310.0: - resolution: - { - integrity: sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-uri-escape": 3.310.0 + resolution: {integrity: sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-uri-escape': 3.310.0 tslib: 2.5.0 /@aws-sdk/querystring-builder@3.40.0: - resolution: - { - integrity: sha512-gO24oipnNaxJRBXB7lhLfa96vIMOd8gtMBqJTjelTjS2e1ZP1YY12CNKKTWwafSk8Ge021erZAG/YTOaXGpv+g==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-uri-escape": 3.37.0 + resolution: {integrity: sha512-gO24oipnNaxJRBXB7lhLfa96vIMOd8gtMBqJTjelTjS2e1ZP1YY12CNKKTWwafSk8Ge021erZAG/YTOaXGpv+g==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-uri-escape': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/querystring-parser@3.292.0: - resolution: - { - integrity: sha512-iTYpYo7a8X9RxiPbjjewIpm6XQPx2EOcF1dWCPRII9EFlmZ4bwnX+PDI36fIo9oVs8TIKXmwNGODU9nsg7CSAw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-iTYpYo7a8X9RxiPbjjewIpm6XQPx2EOcF1dWCPRII9EFlmZ4bwnX+PDI36fIo9oVs8TIKXmwNGODU9nsg7CSAw==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/querystring-parser@3.310.0: - resolution: - { - integrity: sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/querystring-parser@3.40.0: - resolution: - { - integrity: sha512-XZIyaKQIiZAM6zelCBcsLHhVDOLafi7XIOd3jy6SymGN8ajj3HqUJ/vdQ5G6ISTk18OrqgqcCOI9oNzv+nrBcA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-XZIyaKQIiZAM6zelCBcsLHhVDOLafi7XIOd3jy6SymGN8ajj3HqUJ/vdQ5G6ISTk18OrqgqcCOI9oNzv+nrBcA==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/types": 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/s3-request-presigner@3.319.0: - resolution: - { - integrity: sha512-mq/4nqr/3sHGx9iJqPXXkfBPAlXGB000u4dX4QCMPFmMupfH5sT8M+hYgcB6N/2HuZ+JNJQntwu9q97gjhwpDQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/middleware-endpoint": 3.310.0 - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/signature-v4-multi-region": 3.310.0 - "@aws-sdk/smithy-client": 3.316.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-format-url": 3.310.0 + resolution: {integrity: sha512-mq/4nqr/3sHGx9iJqPXXkfBPAlXGB000u4dX4QCMPFmMupfH5sT8M+hYgcB6N/2HuZ+JNJQntwu9q97gjhwpDQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-endpoint': 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/signature-v4-multi-region': 3.310.0 + '@aws-sdk/smithy-client': 3.316.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-format-url': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - - "@aws-sdk/signature-v4-crt" + - '@aws-sdk/signature-v4-crt' dev: false /@aws-sdk/service-error-classification@3.292.0: - resolution: - { - integrity: sha512-X1k3sixCeC45XSNHBe+kRBQBwPDyTFtFITb8O5Qw4dS9XWGhrUJT4CX0qE5aj8qP3F9U5nRizs9c2mBVVP0Caw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-X1k3sixCeC45XSNHBe+kRBQBwPDyTFtFITb8O5Qw4dS9XWGhrUJT4CX0qE5aj8qP3F9U5nRizs9c2mBVVP0Caw==} + engines: {node: '>=14.0.0'} /@aws-sdk/service-error-classification@3.310.0: - resolution: - { - integrity: sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==} + engines: {node: '>=14.0.0'} /@aws-sdk/service-error-classification@3.40.0: - resolution: - { - integrity: sha512-c8btKmkvjXczWudXubGdbO3JgmjySBUVC/gCrZDNfwNGsG8RYJJQYYcnmt1gWjelUZsgMDl/2PIzxTlxVF91rA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-c8btKmkvjXczWudXubGdbO3JgmjySBUVC/gCrZDNfwNGsG8RYJJQYYcnmt1gWjelUZsgMDl/2PIzxTlxVF91rA==} + engines: {node: '>= 10.0.0'} dev: false /@aws-sdk/shared-ini-file-loader@3.292.0: - resolution: - { - integrity: sha512-Av2TTYg1Jig2kbkD56ybiqZJB6vVrYjv1W5UQwY/q3nA/T2mcrgQ20ByCOt5Bv9VvY7FSgC+znj+L4a7RLGmBg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-Av2TTYg1Jig2kbkD56ybiqZJB6vVrYjv1W5UQwY/q3nA/T2mcrgQ20ByCOt5Bv9VvY7FSgC+znj+L4a7RLGmBg==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/shared-ini-file-loader@3.310.0: - resolution: - { - integrity: sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/shared-ini-file-loader@3.37.0: - resolution: - { - integrity: sha512-+vRBSlfa48R9KL7DpQt3dsu5/+5atjRgoCISblWo3SLpjrx41pKcjKneo7a1u0aP1Xc2oG2TfIyqTWZuOXsmEQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-+vRBSlfa48R9KL7DpQt3dsu5/+5atjRgoCISblWo3SLpjrx41pKcjKneo7a1u0aP1Xc2oG2TfIyqTWZuOXsmEQ==} + engines: {node: '>= 10.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/signature-v4-multi-region@3.310.0: - resolution: - { - integrity: sha512-q8W+RIomTS/q85Ntgks/CoDElwqkC9+4OCicee5YznNHjQ4gtNWhUkYIyIRWRmXa/qx/AUreW9DM8FAecCOdng==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-q8W+RIomTS/q85Ntgks/CoDElwqkC9+4OCicee5YznNHjQ4gtNWhUkYIyIRWRmXa/qx/AUreW9DM8FAecCOdng==} + engines: {node: '>=14.0.0'} peerDependencies: - "@aws-sdk/signature-v4-crt": ^3.118.0 + '@aws-sdk/signature-v4-crt': ^3.118.0 peerDependenciesMeta: - "@aws-sdk/signature-v4-crt": + '@aws-sdk/signature-v4-crt': optional: true dependencies: - "@aws-sdk/protocol-http": 3.310.0 - "@aws-sdk/signature-v4": 3.310.0 - "@aws-sdk/types": 3.310.0 + '@aws-sdk/protocol-http': 3.310.0 + '@aws-sdk/signature-v4': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/signature-v4@3.292.0: - resolution: - { - integrity: sha512-+rw47VY5mvBecn13tDQTl1ipGWg5tE63faWgmZe68HoBL87ZiDzsd7bUKOvjfW21iMgWlwAppkaNNQayYRb2zg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/is-array-buffer": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-hex-encoding": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 - "@aws-sdk/util-uri-escape": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 + resolution: {integrity: sha512-+rw47VY5mvBecn13tDQTl1ipGWg5tE63faWgmZe68HoBL87ZiDzsd7bUKOvjfW21iMgWlwAppkaNNQayYRb2zg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.292.0 + '@aws-sdk/types': 3.292.0 + '@aws-sdk/util-hex-encoding': 3.292.0 + '@aws-sdk/util-middleware': 3.292.0 + '@aws-sdk/util-uri-escape': 3.292.0 + '@aws-sdk/util-utf8': 3.292.0 tslib: 2.5.0 /@aws-sdk/signature-v4@3.310.0: - resolution: - { - integrity: sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/is-array-buffer": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-hex-encoding": 3.310.0 - "@aws-sdk/util-middleware": 3.310.0 - "@aws-sdk/util-uri-escape": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-hex-encoding': 3.310.0 + '@aws-sdk/util-middleware': 3.310.0 + '@aws-sdk/util-uri-escape': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 /@aws-sdk/signature-v4@3.40.0: - resolution: - { - integrity: sha512-Q1GNZJRCS3W2qsRtDsX/b6EOSfMXfr6TW46N3LnLTGYZ3KAN2SOSJ1DsW59AuGpEZyRmOhJ9L/Q5U403+bZMXQ==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/is-array-buffer": 3.37.0 - "@aws-sdk/types": 3.40.0 - "@aws-sdk/util-hex-encoding": 3.37.0 - "@aws-sdk/util-uri-escape": 3.37.0 + resolution: {integrity: sha512-Q1GNZJRCS3W2qsRtDsX/b6EOSfMXfr6TW46N3LnLTGYZ3KAN2SOSJ1DsW59AuGpEZyRmOhJ9L/Q5U403+bZMXQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.37.0 + '@aws-sdk/types': 3.40.0 + '@aws-sdk/util-hex-encoding': 3.37.0 + '@aws-sdk/util-uri-escape': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/smithy-client@3.292.0: - resolution: - { - integrity: sha512-S8PKzjPkZ6SXYZuZiU787dMsvQ0d/LFEhw2OI4Oe2An9Fc2IwJ2FYukyHoQJOV2tV0DiuMebPo7eMyQyjKElvA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-S8PKzjPkZ6SXYZuZiU787dMsvQ0d/LFEhw2OI4Oe2An9Fc2IwJ2FYukyHoQJOV2tV0DiuMebPo7eMyQyjKElvA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-stack': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/smithy-client@3.316.0: - resolution: - { - integrity: sha512-6YXOKbRnXeS8r8RWzuL6JMBolDYM5Wa4fD/VY6x/wK78i2xErHOvqzHgyyeLI1MMw4uqyd4wRNJNWC9TMPduXw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/middleware-stack": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-6YXOKbRnXeS8r8RWzuL6JMBolDYM5Wa4fD/VY6x/wK78i2xErHOvqzHgyyeLI1MMw4uqyd4wRNJNWC9TMPduXw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-stack': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/smithy-client@3.41.0: - resolution: - { - integrity: sha512-ldhS0Pf3v6yHCd//kk5DvKcdyeUkKEwxNDRanAp+ekTW68J3XcYgKaPC9sNDhVTDH1zrywTvtEz5zWHEvXjQow==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/middleware-stack": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-ldhS0Pf3v6yHCd//kk5DvKcdyeUkKEwxNDRanAp+ekTW68J3XcYgKaPC9sNDhVTDH1zrywTvtEz5zWHEvXjQow==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/middleware-stack': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/token-providers@3.294.0: - resolution: - { - integrity: sha512-6nwO04LtC5f4AsUvGZXyjaswuEK4Rr2VsuANpMKrPCgunRfI58a8YXLniudOSXN6e7CFJ6M3uo/h5YXqtnzGug==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/client-sso-oidc": 3.294.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-6nwO04LtC5f4AsUvGZXyjaswuEK4Rr2VsuANpMKrPCgunRfI58a8YXLniudOSXN6e7CFJ6M3uo/h5YXqtnzGug==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso-oidc': 3.294.0 + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/shared-ini-file-loader': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/token-providers@3.319.0: - resolution: - { - integrity: sha512-5utg6VL6Pl0uiLUn8ZJPYYxzCb9VRPsgJmGXktRUwq0YlTJ6ABcaxTXwZcC++sjh/qyCQDK5PPLNU5kIBttHMQ==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/client-sso-oidc": 3.319.0 - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/shared-ini-file-loader": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-5utg6VL6Pl0uiLUn8ZJPYYxzCb9VRPsgJmGXktRUwq0YlTJ6ABcaxTXwZcC++sjh/qyCQDK5PPLNU5kIBttHMQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso-oidc': 3.319.0 + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/shared-ini-file-loader': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt /@aws-sdk/types@3.292.0: - resolution: - { - integrity: sha512-1teYAY2M73UXZxMAxqZxVS2qwXjQh0OWtt7qyLfha0TtIk/fZ1hRwFgxbDCHUFcdNBSOSbKH/ESor90KROXLCQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-1teYAY2M73UXZxMAxqZxVS2qwXjQh0OWtt7qyLfha0TtIk/fZ1hRwFgxbDCHUFcdNBSOSbKH/ESor90KROXLCQ==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/types@3.310.0: - resolution: - { - integrity: sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/types@3.40.0: - resolution: - { - integrity: sha512-KpILcfvRaL88TLvo3SY4OuCCg90SvcNLPyjDwUuBqiOyWODjrKShHtAPJzej4CLp92lofh+ul0UnBfV9Jb/5PA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-KpILcfvRaL88TLvo3SY4OuCCg90SvcNLPyjDwUuBqiOyWODjrKShHtAPJzej4CLp92lofh+ul0UnBfV9Jb/5PA==} + engines: {node: '>= 10.0.0'} dev: false /@aws-sdk/url-parser@3.292.0: - resolution: - { - integrity: sha512-NZeAuZCk1x6TIiWuRfbOU6wHPBhf0ly2qOHzWut4BCH+b4RrDmFF8EmXcH1auEfGhE7yRyR6XqIN0t3S+hYACA==, - } + resolution: {integrity: sha512-NZeAuZCk1x6TIiWuRfbOU6wHPBhf0ly2qOHzWut4BCH+b4RrDmFF8EmXcH1auEfGhE7yRyR6XqIN0t3S+hYACA==} dependencies: - "@aws-sdk/querystring-parser": 3.292.0 - "@aws-sdk/types": 3.292.0 + '@aws-sdk/querystring-parser': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/url-parser@3.310.0: - resolution: - { - integrity: sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw==, - } + resolution: {integrity: sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw==} dependencies: - "@aws-sdk/querystring-parser": 3.310.0 - "@aws-sdk/types": 3.310.0 + '@aws-sdk/querystring-parser': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/url-parser@3.40.0: - resolution: - { - integrity: sha512-HwNV+HX7bHgLk5FzTOgdXANsC0SeVz5PMC4Nh+TLz2IoeQnrw4H8dsA4YNonncjern5oC5veKRjQeOoCL5SlSQ==, - } + resolution: {integrity: sha512-HwNV+HX7bHgLk5FzTOgdXANsC0SeVz5PMC4Nh+TLz2IoeQnrw4H8dsA4YNonncjern5oC5veKRjQeOoCL5SlSQ==} dependencies: - "@aws-sdk/querystring-parser": 3.40.0 - "@aws-sdk/types": 3.40.0 + '@aws-sdk/querystring-parser': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/util-arn-parser@3.310.0: - resolution: - { - integrity: sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-base64-browser@3.37.0: - resolution: - { - integrity: sha512-o4s/rHVm5k8eC/T7grJQINyYA/mKfDmEWKMA9wk5iBroXlI2rUm7x649TBk5hzoddufk/mffEeNz/1wM7yTmlg==, - } + resolution: {integrity: sha512-o4s/rHVm5k8eC/T7grJQINyYA/mKfDmEWKMA9wk5iBroXlI2rUm7x649TBk5hzoddufk/mffEeNz/1wM7yTmlg==} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-base64-node@3.37.0: - resolution: - { - integrity: sha512-1UPxly1GPrGZtlIWvbNCDIAund4Oyp8cFi9neA43TeNACvrmEQu/nG01pDbOoo0ENoVSVJrNAVBeqKEpqjH2GA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-1UPxly1GPrGZtlIWvbNCDIAund4Oyp8cFi9neA43TeNACvrmEQu/nG01pDbOoo0ENoVSVJrNAVBeqKEpqjH2GA==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/util-buffer-from": 3.37.0 + '@aws-sdk/util-buffer-from': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/util-base64@3.292.0: - resolution: - { - integrity: sha512-zjNCwNdy617yFvEjZorepNWXB2sQCVfsShCwFy/kIQ5iW5tT2jQKaqc0K77diU9atkooxw9p1W9m9sOgrkOFNw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-zjNCwNdy617yFvEjZorepNWXB2sQCVfsShCwFy/kIQ5iW5tT2jQKaqc0K77diU9atkooxw9p1W9m9sOgrkOFNw==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/util-buffer-from": 3.292.0 + '@aws-sdk/util-buffer-from': 3.292.0 tslib: 2.5.0 /@aws-sdk/util-base64@3.310.0: - resolution: - { - integrity: sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/util-buffer-from": 3.310.0 + '@aws-sdk/util-buffer-from': 3.310.0 tslib: 2.5.0 /@aws-sdk/util-body-length-browser@3.292.0: - resolution: - { - integrity: sha512-Wd/BM+JsMiKvKs/bN3z6TredVEHh2pKudGfg3CSjTRpqFpOG903KDfyHBD42yg5PuCHoHoewJvTPKwgn7/vhaw==, - } + resolution: {integrity: sha512-Wd/BM+JsMiKvKs/bN3z6TredVEHh2pKudGfg3CSjTRpqFpOG903KDfyHBD42yg5PuCHoHoewJvTPKwgn7/vhaw==} dependencies: tslib: 2.5.0 /@aws-sdk/util-body-length-browser@3.310.0: - resolution: - { - integrity: sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==, - } + resolution: {integrity: sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==} dependencies: tslib: 2.5.0 /@aws-sdk/util-body-length-browser@3.37.0: - resolution: - { - integrity: sha512-tClmH1uYelqWT43xxmnOsVFbCQJiIwizp6y4E109G2LIof07inxrO0L8nbwBpjhugVplx6NZr9IaqTFqbdM1gA==, - } + resolution: {integrity: sha512-tClmH1uYelqWT43xxmnOsVFbCQJiIwizp6y4E109G2LIof07inxrO0L8nbwBpjhugVplx6NZr9IaqTFqbdM1gA==} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-body-length-node@3.292.0: - resolution: - { - integrity: sha512-BBgipZ2P6RhogWE/qj0oqpdlyd3iSBYmb+aD/TBXwB2lA/X8A99GxweBd/kp06AmcJRoMS9WIXgbWkiiBlRlSA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-BBgipZ2P6RhogWE/qj0oqpdlyd3iSBYmb+aD/TBXwB2lA/X8A99GxweBd/kp06AmcJRoMS9WIXgbWkiiBlRlSA==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-body-length-node@3.310.0: - resolution: - { - integrity: sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-body-length-node@3.37.0: - resolution: - { - integrity: sha512-aY3mXdbEajruRi9CHgq/heM89R+Gectj/Xrs1naewmamaN8NJrvjDm3s+cw//lqqSOW903LYHXDgm7wvCzUnFA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-aY3mXdbEajruRi9CHgq/heM89R+Gectj/Xrs1naewmamaN8NJrvjDm3s+cw//lqqSOW903LYHXDgm7wvCzUnFA==} + engines: {node: '>= 10.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-buffer-from@3.292.0: - resolution: - { - integrity: sha512-RxNZjLoXNxHconH9TYsk5RaEBjSgTtozHeyIdacaHPj5vlQKi4hgL2hIfKeeNiAfQEVjaUFF29lv81xpNMzVMQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-RxNZjLoXNxHconH9TYsk5RaEBjSgTtozHeyIdacaHPj5vlQKi4hgL2hIfKeeNiAfQEVjaUFF29lv81xpNMzVMQ==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/is-array-buffer": 3.292.0 + '@aws-sdk/is-array-buffer': 3.292.0 tslib: 2.5.0 /@aws-sdk/util-buffer-from@3.310.0: - resolution: - { - integrity: sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/is-array-buffer": 3.310.0 + '@aws-sdk/is-array-buffer': 3.310.0 tslib: 2.5.0 /@aws-sdk/util-buffer-from@3.37.0: - resolution: - { - integrity: sha512-aa3SBwjLwImuJoE4+hxDIWQ9REz3UFb3p7KFPe9qopdXb/yB12RTcbrXVb4whUux4i4mO6KRij0ZNjFZrjrKPg==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-aa3SBwjLwImuJoE4+hxDIWQ9REz3UFb3p7KFPe9qopdXb/yB12RTcbrXVb4whUux4i4mO6KRij0ZNjFZrjrKPg==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/is-array-buffer": 3.37.0 + '@aws-sdk/is-array-buffer': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/util-config-provider@3.292.0: - resolution: - { - integrity: sha512-t3noYll6bPRSxeeNNEkC5czVjAiTPcsq00OwfJ2xyUqmquhLEfLwoJKmrT1uP7DjIEXdUtfoIQ2jWiIVm/oO5A==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-t3noYll6bPRSxeeNNEkC5czVjAiTPcsq00OwfJ2xyUqmquhLEfLwoJKmrT1uP7DjIEXdUtfoIQ2jWiIVm/oO5A==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-config-provider@3.310.0: - resolution: - { - integrity: sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-config-provider@3.40.0: - resolution: - { - integrity: sha512-NjZGrA4mqhpr6gkVCAUweurP0Z9d3vFyXJCtulC0BFbpKAnKCf/crSK56NwUaNhAEMCkSuBvjRFzkbfT+HO8bA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-NjZGrA4mqhpr6gkVCAUweurP0Z9d3vFyXJCtulC0BFbpKAnKCf/crSK56NwUaNhAEMCkSuBvjRFzkbfT+HO8bA==} + engines: {node: '>= 10.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-credentials@3.37.0: - resolution: - { - integrity: sha512-zcLhSZDKgBLhUjSU5HoQpuQiP3v8oE86NmV/tiZVPEaO6YVULEAB2Cfj1hpM/b/JXWzjSHfT06KXT7QUODKS+A==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-zcLhSZDKgBLhUjSU5HoQpuQiP3v8oE86NmV/tiZVPEaO6YVULEAB2Cfj1hpM/b/JXWzjSHfT06KXT7QUODKS+A==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/shared-ini-file-loader": 3.37.0 + '@aws-sdk/shared-ini-file-loader': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/util-defaults-mode-browser@3.292.0: - resolution: - { - integrity: sha512-7+zVUlMGfa8/KT++9humHo6IDxTnxMCmWUj5jVNlkpk6h7Ecmppf7aXotviyVIA43lhtz0p2AErs0N0ekEUK+w==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-7+zVUlMGfa8/KT++9humHo6IDxTnxMCmWUj5jVNlkpk6h7Ecmppf7aXotviyVIA43lhtz0p2AErs0N0ekEUK+w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/types': 3.292.0 bowser: 2.11.0 tslib: 2.5.0 /@aws-sdk/util-defaults-mode-browser@3.316.0: - resolution: - { - integrity: sha512-6FSqLhYmaihtH2n1s4b2rlLW0ABU8N6VZIfzLfe2ING4PF0MzfaMMhnTFUHVXfKCVGoR8yP6iyFTRCyHGVEL1w==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-6FSqLhYmaihtH2n1s4b2rlLW0ABU8N6VZIfzLfe2ING4PF0MzfaMMhnTFUHVXfKCVGoR8yP6iyFTRCyHGVEL1w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/types': 3.310.0 bowser: 2.11.0 tslib: 2.5.0 /@aws-sdk/util-defaults-mode-node@3.292.0: - resolution: - { - integrity: sha512-SSIw85eF4BVs0fOJRyshT+R3b/UmBPhiVKCUZm2rq6+lIGkDPiSwQU3d/80AhXtiL5SFT/IzAKKgQd8qMa7q3A==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 + resolution: {integrity: sha512-SSIw85eF4BVs0fOJRyshT+R3b/UmBPhiVKCUZm2rq6+lIGkDPiSwQU3d/80AhXtiL5SFT/IzAKKgQd8qMa7q3A==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/config-resolver': 3.292.0 + '@aws-sdk/credential-provider-imds': 3.292.0 + '@aws-sdk/node-config-provider': 3.292.0 + '@aws-sdk/property-provider': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/util-defaults-mode-node@3.316.0: - resolution: - { - integrity: sha512-dkYy10hdjPSScXXvnjGpZpnJxllkb6ICHgLMwZ4JczLHhPM12T/4PQ758YN8HS+muiYDGX1Bl2z1jd/bMcewBQ==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/config-resolver": 3.310.0 - "@aws-sdk/credential-provider-imds": 3.310.0 - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/property-provider": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-dkYy10hdjPSScXXvnjGpZpnJxllkb6ICHgLMwZ4JczLHhPM12T/4PQ758YN8HS+muiYDGX1Bl2z1jd/bMcewBQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/config-resolver': 3.310.0 + '@aws-sdk/credential-provider-imds': 3.310.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/property-provider': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/util-dynamodb@3.319.0: - resolution: - { - integrity: sha512-V9tvcn1gPjr/tkZFLU7eDmVaVNHkNzjc2M5uZe9zeDlVd/DaJ+mOziWrJC3SPvL1fJ8VU1++6IfENu4yiSMDQQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-V9tvcn1gPjr/tkZFLU7eDmVaVNHkNzjc2M5uZe9zeDlVd/DaJ+mOziWrJC3SPvL1fJ8VU1++6IfENu4yiSMDQQ==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-endpoints@3.293.0: - resolution: - { - integrity: sha512-R/99aNV49Refpv5guiUjEUrZYlvnfaNBniB+/ZtMO3ixxUopapssCrUivuJrmhccmrYaTCZw7dRzIWjU1jJhKg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-R/99aNV49Refpv5guiUjEUrZYlvnfaNBniB+/ZtMO3ixxUopapssCrUivuJrmhccmrYaTCZw7dRzIWjU1jJhKg==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/util-endpoints@3.319.0: - resolution: - { - integrity: sha512-3I64UMoYA2e2++oOUJXRcFtYLpLylnZFRltWfPo1B3dLlf+MIWat9djT+mMus+hW1ntLsvAIVu1hLVePJC0gvw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-3I64UMoYA2e2++oOUJXRcFtYLpLylnZFRltWfPo1B3dLlf+MIWat9djT+mMus+hW1ntLsvAIVu1hLVePJC0gvw==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/util-format-url@3.310.0: - resolution: - { - integrity: sha512-NBOvmvvVR3ydquHmznfgtakiSgDhq8Ww6fq8TUaEjM+Es6+iqY4AwZo0rZ9xTX3GpCcoZy391HUi6kiXRAFzuA==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/querystring-builder": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-NBOvmvvVR3ydquHmznfgtakiSgDhq8Ww6fq8TUaEjM+Es6+iqY4AwZo0rZ9xTX3GpCcoZy391HUi6kiXRAFzuA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/querystring-builder': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/util-hex-encoding@3.292.0: - resolution: - { - integrity: sha512-qBd5KFIUywQ3qSSbj814S2srk0vfv8A6QMI+Obs1y2LHZFdQN5zViptI4UhXhKOHe+NnrHWxSuLC/LMH6q3SmA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-qBd5KFIUywQ3qSSbj814S2srk0vfv8A6QMI+Obs1y2LHZFdQN5zViptI4UhXhKOHe+NnrHWxSuLC/LMH6q3SmA==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-hex-encoding@3.310.0: - resolution: - { - integrity: sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-hex-encoding@3.37.0: - resolution: - { - integrity: sha512-tn5UpfaeM+rZWqynoNqB8lwtcAXil5YYO3HLGH9himpWAdft/2Z7LK6bsYDpctaAI1WHgMDcL0bw3Id04ZUbhA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-tn5UpfaeM+rZWqynoNqB8lwtcAXil5YYO3HLGH9himpWAdft/2Z7LK6bsYDpctaAI1WHgMDcL0bw3Id04ZUbhA==} + engines: {node: '>= 10.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-locate-window@3.310.0: - resolution: - { - integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-middleware@3.292.0: - resolution: - { - integrity: sha512-KjhS7flfoBKDxbiBZjLjMvEizXgjfQb7GQEItgzGoI9rfGCmZtvqCcqQQoIlxb8bIzGRggAUHtBGWnlLbpb+GQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-KjhS7flfoBKDxbiBZjLjMvEizXgjfQb7GQEItgzGoI9rfGCmZtvqCcqQQoIlxb8bIzGRggAUHtBGWnlLbpb+GQ==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-middleware@3.310.0: - resolution: - { - integrity: sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-retry@3.292.0: - resolution: - { - integrity: sha512-JEHyF7MpVeRF5uR4LDYgpOKcFpOPiAj8TqN46SVOQQcL1K+V7cSr7O7N7J6MwJaN9XOzAcBadeIupMm7/BFbgw==, - } - engines: { node: ">= 14.0.0" } + resolution: {integrity: sha512-JEHyF7MpVeRF5uR4LDYgpOKcFpOPiAj8TqN46SVOQQcL1K+V7cSr7O7N7J6MwJaN9XOzAcBadeIupMm7/BFbgw==} + engines: {node: '>= 14.0.0'} dependencies: - "@aws-sdk/service-error-classification": 3.292.0 + '@aws-sdk/service-error-classification': 3.292.0 tslib: 2.5.0 /@aws-sdk/util-retry@3.310.0: - resolution: - { - integrity: sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==, - } - engines: { node: ">= 14.0.0" } + resolution: {integrity: sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==} + engines: {node: '>= 14.0.0'} dependencies: - "@aws-sdk/service-error-classification": 3.310.0 + '@aws-sdk/service-error-classification': 3.310.0 tslib: 2.5.0 /@aws-sdk/util-stream-browser@3.310.0: - resolution: - { - integrity: sha512-bysXZHwFwvbqOTCScCdCnoLk1K3GCo0HRIYEZuL7O7MHrQmfaYRXcaft/p22+GUv9VeFXS/eJJZ5r4u32az94w==, - } - dependencies: - "@aws-sdk/fetch-http-handler": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-hex-encoding": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + resolution: {integrity: sha512-bysXZHwFwvbqOTCScCdCnoLk1K3GCo0HRIYEZuL7O7MHrQmfaYRXcaft/p22+GUv9VeFXS/eJJZ5r4u32az94w==} + dependencies: + '@aws-sdk/fetch-http-handler': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-base64': 3.310.0 + '@aws-sdk/util-hex-encoding': 3.310.0 + '@aws-sdk/util-utf8': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/util-stream-node@3.310.0: - resolution: - { - integrity: sha512-hueAXFK0GVvnfYFgqbF7587xZfMZff5jlIFZOHqx7XVU7bl7qrRUCnphHk8H6yZ7RoQbDPcfmHJgtEoAJg1T1Q==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/node-http-handler": 3.310.0 - "@aws-sdk/types": 3.310.0 - "@aws-sdk/util-buffer-from": 3.310.0 + resolution: {integrity: sha512-hueAXFK0GVvnfYFgqbF7587xZfMZff5jlIFZOHqx7XVU7bl7qrRUCnphHk8H6yZ7RoQbDPcfmHJgtEoAJg1T1Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/node-http-handler': 3.310.0 + '@aws-sdk/types': 3.310.0 + '@aws-sdk/util-buffer-from': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/util-uri-escape@3.292.0: - resolution: - { - integrity: sha512-hOQtUMQ4VcQ9iwKz50AoCp1XBD5gJ9nly/gJZccAM7zSA5mOO8RRKkbdonqquVHxrO0CnYgiFeCh3V35GFecUw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-hOQtUMQ4VcQ9iwKz50AoCp1XBD5gJ9nly/gJZccAM7zSA5mOO8RRKkbdonqquVHxrO0CnYgiFeCh3V35GFecUw==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-uri-escape@3.310.0: - resolution: - { - integrity: sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 /@aws-sdk/util-uri-escape@3.37.0: - resolution: - { - integrity: sha512-8pKf4YJTELP5lm/CEgYw2atyJBB1RWWqFa0sZx6YJmTlOtLF5G6raUdAi4iDa2hldGt2B6IAdIIyuusT8zeU8Q==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-8pKf4YJTELP5lm/CEgYw2atyJBB1RWWqFa0sZx6YJmTlOtLF5G6raUdAi4iDa2hldGt2B6IAdIIyuusT8zeU8Q==} + engines: {node: '>= 10.0.0'} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-user-agent-browser@3.292.0: - resolution: - { - integrity: sha512-dld+lpC3QdmTQHdBWJ0WFDkXDSrJgfz03q6mQ8+7H+BC12ZhT0I0g9iuvUjolqy7QR00OxOy47Y9FVhq8EC0Gg==, - } + resolution: {integrity: sha512-dld+lpC3QdmTQHdBWJ0WFDkXDSrJgfz03q6mQ8+7H+BC12ZhT0I0g9iuvUjolqy7QR00OxOy47Y9FVhq8EC0Gg==} dependencies: - "@aws-sdk/types": 3.292.0 + '@aws-sdk/types': 3.292.0 bowser: 2.11.0 tslib: 2.5.0 /@aws-sdk/util-user-agent-browser@3.310.0: - resolution: - { - integrity: sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==, - } + resolution: {integrity: sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==} dependencies: - "@aws-sdk/types": 3.310.0 + '@aws-sdk/types': 3.310.0 bowser: 2.11.0 tslib: 2.5.0 /@aws-sdk/util-user-agent-browser@3.40.0: - resolution: - { - integrity: sha512-C69sTI26bV2EprTv3DTXu9XP7kD9Wu4YVPBzqztOYArd2GDYw3w+jS8SEg3XRbjAKY/mOPZ2Thw4StjpZlWZiA==, - } + resolution: {integrity: sha512-C69sTI26bV2EprTv3DTXu9XP7kD9Wu4YVPBzqztOYArd2GDYw3w+jS8SEg3XRbjAKY/mOPZ2Thw4StjpZlWZiA==} dependencies: - "@aws-sdk/types": 3.40.0 + '@aws-sdk/types': 3.40.0 bowser: 2.11.0 tslib: 2.5.0 dev: false /@aws-sdk/util-user-agent-node@3.292.0: - resolution: - { - integrity: sha512-f+NfIMal5E61MDc5WGhUEoicr7b1eNNhA+GgVdSB/Hg5fYhEZvFK9RZizH5rrtsLjjgcr9nPYSR7/nDKCJLumw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-f+NfIMal5E61MDc5WGhUEoicr7b1eNNhA+GgVdSB/Hg5fYhEZvFK9RZizH5rrtsLjjgcr9nPYSR7/nDKCJLumw==} + engines: {node: '>=14.0.0'} peerDependencies: - aws-crt: ">=1.0.0" + aws-crt: '>=1.0.0' peerDependenciesMeta: aws-crt: optional: true dependencies: - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 + '@aws-sdk/node-config-provider': 3.292.0 + '@aws-sdk/types': 3.292.0 tslib: 2.5.0 /@aws-sdk/util-user-agent-node@3.310.0: - resolution: - { - integrity: sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==} + engines: {node: '>=14.0.0'} peerDependencies: - aws-crt: ">=1.0.0" + aws-crt: '>=1.0.0' peerDependenciesMeta: aws-crt: optional: true dependencies: - "@aws-sdk/node-config-provider": 3.310.0 - "@aws-sdk/types": 3.310.0 + '@aws-sdk/node-config-provider': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 /@aws-sdk/util-user-agent-node@3.40.0: - resolution: - { - integrity: sha512-cjIzd0hRZFTTh7iLJD6Bciu++Em1iaM1clyG02xRl0JD5DEtDSR1zO02uu+AeM7GSLGOxIvwOkK2j8ySPAOmBA==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/node-config-provider": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-cjIzd0hRZFTTh7iLJD6Bciu++Em1iaM1clyG02xRl0JD5DEtDSR1zO02uu+AeM7GSLGOxIvwOkK2j8ySPAOmBA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/node-config-provider': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/util-utf8-browser@3.259.0: - resolution: - { - integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==, - } + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} dependencies: tslib: 2.5.0 /@aws-sdk/util-utf8-browser@3.37.0: - resolution: - { - integrity: sha512-tuiOxzfqet1kKGYzlgpMGfhr64AHJnYsFx2jZiH/O6Yq8XQg43ryjQlbJlim/K/XHGNzY0R+nabeJg34q3Ua1g==, - } + resolution: {integrity: sha512-tuiOxzfqet1kKGYzlgpMGfhr64AHJnYsFx2jZiH/O6Yq8XQg43ryjQlbJlim/K/XHGNzY0R+nabeJg34q3Ua1g==} dependencies: tslib: 2.5.0 dev: false /@aws-sdk/util-utf8-node@3.37.0: - resolution: - { - integrity: sha512-fUAgd7UTCULL36j9/vnXHxVhxvswnq23mYgTCIT8NQ7wHN30q2a89ym1e9DwGeQkJEBOkOcKLn6nsMsN7YQMDQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-fUAgd7UTCULL36j9/vnXHxVhxvswnq23mYgTCIT8NQ7wHN30q2a89ym1e9DwGeQkJEBOkOcKLn6nsMsN7YQMDQ==} + engines: {node: '>= 10.0.0'} dependencies: - "@aws-sdk/util-buffer-from": 3.37.0 + '@aws-sdk/util-buffer-from': 3.37.0 tslib: 2.5.0 dev: false /@aws-sdk/util-utf8@3.292.0: - resolution: - { - integrity: sha512-FPkj+Z59/DQWvoVu2wFaRncc3KVwe/pgK3MfVb0Lx+Ibey5KUx+sNpJmYcVYHUAe/Nv/JeIpOtYuC96IXOnI6w==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-FPkj+Z59/DQWvoVu2wFaRncc3KVwe/pgK3MfVb0Lx+Ibey5KUx+sNpJmYcVYHUAe/Nv/JeIpOtYuC96IXOnI6w==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/util-buffer-from": 3.292.0 + '@aws-sdk/util-buffer-from': 3.292.0 tslib: 2.5.0 /@aws-sdk/util-utf8@3.310.0: - resolution: - { - integrity: sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==} + engines: {node: '>=14.0.0'} dependencies: - "@aws-sdk/util-buffer-from": 3.310.0 + '@aws-sdk/util-buffer-from': 3.310.0 tslib: 2.5.0 /@aws-sdk/util-waiter@3.310.0: - resolution: - { - integrity: sha512-AV5j3guH/Y4REu+Qh3eXQU9igljHuU4XjX2sADAgf54C0kkhcCCkkiuzk3IsX089nyJCqIcj5idbjdvpnH88Vw==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@aws-sdk/abort-controller": 3.310.0 - "@aws-sdk/types": 3.310.0 + resolution: {integrity: sha512-AV5j3guH/Y4REu+Qh3eXQU9igljHuU4XjX2sADAgf54C0kkhcCCkkiuzk3IsX089nyJCqIcj5idbjdvpnH88Vw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.310.0 + '@aws-sdk/types': 3.310.0 tslib: 2.5.0 dev: false /@aws-sdk/util-waiter@3.40.0: - resolution: - { - integrity: sha512-jdxwNEZdID49ZvyAnxaeNm5w2moIfMLOwj/q6TxKlxYoXMs16FQWkhyfGue0vEASzchS49ewbyt+KBqpT31Ebg==, - } - engines: { node: ">= 10.0.0" } - dependencies: - "@aws-sdk/abort-controller": 3.40.0 - "@aws-sdk/types": 3.40.0 + resolution: {integrity: sha512-jdxwNEZdID49ZvyAnxaeNm5w2moIfMLOwj/q6TxKlxYoXMs16FQWkhyfGue0vEASzchS49ewbyt+KBqpT31Ebg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.40.0 + '@aws-sdk/types': 3.40.0 tslib: 2.5.0 dev: false /@aws-sdk/xml-builder@3.310.0: - resolution: - { - integrity: sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false /@babel/code-frame@7.18.6: - resolution: - { - integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/highlight": 7.18.6 + '@babel/highlight': 7.18.6 dev: true /@babel/code-frame@7.21.4: - resolution: - { - integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/highlight": 7.18.6 + '@babel/highlight': 7.18.6 dev: true /@babel/compat-data@7.20.14: - resolution: - { - integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==} + engines: {node: '>=6.9.0'} dev: true /@babel/compat-data@7.21.4: - resolution: - { - integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} + engines: {node: '>=6.9.0'} dev: true /@babel/core@7.20.12: - resolution: - { - integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@ampproject/remapping": 2.2.0 - "@babel/code-frame": 7.18.6 - "@babel/generator": 7.20.14 - "@babel/helper-compilation-targets": 7.20.7(@babel/core@7.20.12) - "@babel/helper-module-transforms": 7.20.11 - "@babel/helpers": 7.20.13 - "@babel/parser": 7.21.4 - "@babel/template": 7.20.7 - "@babel/traverse": 7.20.13 - "@babel/types": 7.21.4 + resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.14 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) + '@babel/helper-module-transforms': 7.20.11 + '@babel/helpers': 7.20.13 + '@babel/parser': 7.21.4 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.21.4 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -4302,22 +3623,19 @@ packages: dev: true /@babel/core@7.21.4: - resolution: - { - integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@ampproject/remapping": 2.2.1 - "@babel/code-frame": 7.21.4 - "@babel/generator": 7.21.4 - "@babel/helper-compilation-targets": 7.21.4(@babel/core@7.21.4) - "@babel/helper-module-transforms": 7.21.2 - "@babel/helpers": 7.21.0 - "@babel/parser": 7.21.4 - "@babel/template": 7.20.7 - "@babel/traverse": 7.21.4 - "@babel/types": 7.21.4 + resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-module-transforms': 7.21.2 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.4 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -4328,494 +3646,371 @@ packages: dev: true /@babel/generator@7.20.14: - resolution: - { - integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/types": 7.21.4 - "@jridgewell/gen-mapping": 0.3.2 + resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 dev: true /@babel/generator@7.21.4: - resolution: - { - integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/types": 7.21.4 - "@jridgewell/gen-mapping": 0.3.3 - "@jridgewell/trace-mapping": 0.3.18 + resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 dev: true /@babel/helper-compilation-targets@7.20.7(@babel/core@7.20.12): - resolution: - { - integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/compat-data": 7.20.14 - "@babel/core": 7.20.12 - "@babel/helper-validator-option": 7.18.6 + '@babel/compat-data': 7.20.14 + '@babel/core': 7.20.12 + '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 dev: true /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): - resolution: - { - integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/compat-data": 7.21.4 - "@babel/core": 7.21.4 - "@babel/helper-validator-option": 7.21.0 + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 dev: true /@babel/helper-environment-visitor@7.18.9: - resolution: - { - integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} dev: true /@babel/helper-function-name@7.19.0: - resolution: - { - integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/template": 7.20.7 - "@babel/types": 7.21.4 + '@babel/template': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-function-name@7.21.0: - resolution: - { - integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/template": 7.20.7 - "@babel/types": 7.21.4 + '@babel/template': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-hoist-variables@7.18.6: - resolution: - { - integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.21.4 + '@babel/types': 7.21.4 dev: true /@babel/helper-module-imports@7.18.6: - resolution: - { - integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.21.4 + '@babel/types': 7.21.4 dev: true /@babel/helper-module-imports@7.21.4: - resolution: - { - integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.21.4 + '@babel/types': 7.21.4 dev: true /@babel/helper-module-transforms@7.20.11: - resolution: - { - integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/helper-environment-visitor": 7.18.9 - "@babel/helper-module-imports": 7.18.6 - "@babel/helper-simple-access": 7.20.2 - "@babel/helper-split-export-declaration": 7.18.6 - "@babel/helper-validator-identifier": 7.19.1 - "@babel/template": 7.20.7 - "@babel/traverse": 7.20.13 - "@babel/types": 7.21.4 + resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.20.2 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true /@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 - "@babel/helper-module-imports": 7.21.4 - "@babel/helper-simple-access": 7.20.2 - "@babel/helper-split-export-declaration": 7.18.6 - "@babel/helper-validator-identifier": 7.19.1 - "@babel/template": 7.20.7 - "@babel/traverse": 7.21.4 - "@babel/types": 7.21.4 + resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-simple-access': 7.20.2 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true /@babel/helper-plugin-utils@7.20.2: - resolution: - { - integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} + engines: {node: '>=6.9.0'} dev: true /@babel/helper-simple-access@7.20.2: - resolution: - { - integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.21.4 + '@babel/types': 7.21.4 dev: true /@babel/helper-split-export-declaration@7.18.6: - resolution: - { - integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.21.4 + '@babel/types': 7.21.4 dev: true /@babel/helper-string-parser@7.19.4: - resolution: - { - integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.19.1: - resolution: - { - integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} /@babel/helper-validator-option@7.18.6: - resolution: - { - integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + engines: {node: '>=6.9.0'} dev: true /@babel/helper-validator-option@7.21.0: - resolution: - { - integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} + engines: {node: '>=6.9.0'} dev: true /@babel/helpers@7.20.13: - resolution: - { - integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/template": 7.20.7 - "@babel/traverse": 7.20.13 - "@babel/types": 7.21.4 + resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true /@babel/helpers@7.21.0: - resolution: - { - integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/template": 7.20.7 - "@babel/traverse": 7.21.4 - "@babel/types": 7.21.4 + resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true /@babel/highlight@7.18.6: - resolution: - { - integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/helper-validator-identifier": 7.19.1 + '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 dev: true /@babel/parser@7.21.4: - resolution: - { - integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} + engines: {node: '>=6.0.0'} hasBin: true dependencies: - "@babel/types": 7.21.4 + '@babel/types': 7.21.4 /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.12): - resolution: - { - integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, - } + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.20.12): - resolution: - { - integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, - } + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.20.12): - resolution: - { - integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, - } + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.12): - resolution: - { - integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, - } + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.20.12): - resolution: - { - integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, - } + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.20.12): - resolution: - { - integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.20.12): - resolution: - { - integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, - } + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.20.12): - resolution: - { - integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, - } + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.20.12): - resolution: - { - integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, - } + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.20.12): - resolution: - { - integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, - } + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.20.12): - resolution: - { - integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, - } + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.20.12): - resolution: - { - integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, - } + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.12): - resolution: - { - integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.20.12): - resolution: - { - integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-react-jsx-self@7.18.6(@babel/core@7.20.12): - resolution: - { - integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.20.12): - resolution: - { - integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.20.12 - "@babel/helper-plugin-utils": 7.20.2 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/template@7.20.7: - resolution: - { - integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/code-frame": 7.18.6 - "@babel/parser": 7.21.4 - "@babel/types": 7.21.4 + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 dev: true /@babel/traverse@7.20.13: - resolution: - { - integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/code-frame": 7.18.6 - "@babel/generator": 7.20.14 - "@babel/helper-environment-visitor": 7.18.9 - "@babel/helper-function-name": 7.19.0 - "@babel/helper-hoist-variables": 7.18.6 - "@babel/helper-split-export-declaration": 7.18.6 - "@babel/parser": 7.21.4 - "@babel/types": 7.21.4 + resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.14 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -4823,20 +4018,17 @@ packages: dev: true /@babel/traverse@7.21.4: - resolution: - { - integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/code-frame": 7.21.4 - "@babel/generator": 7.21.4 - "@babel/helper-environment-visitor": 7.18.9 - "@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.21.4 - "@babel/types": 7.21.4 + resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-environment-visitor': 7.18.9 + '@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.21.4 + '@babel/types': 7.21.4 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -4844,71 +4036,47 @@ packages: dev: true /@babel/types@7.21.4: - resolution: - { - integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/helper-string-parser": 7.19.4 - "@babel/helper-validator-identifier": 7.19.1 + resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 /@balena/dockerignore@1.0.2: - resolution: - { - integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==, - } + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} /@bcoe/v8-coverage@0.2.3: - resolution: - { - integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, - } + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true /@colors/colors@1.5.0: - resolution: - { - integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, - } - engines: { node: ">=0.1.90" } + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} requiresBuild: true dev: false optional: true /@cspotcode/source-map-support@0.8.1: - resolution: - { - integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} dependencies: - "@jridgewell/trace-mapping": 0.3.9 + '@jridgewell/trace-mapping': 0.3.9 /@datastructures-js/heap@4.3.1: - resolution: - { - integrity: sha512-au4fYa4fprREES58FnMOTFjg8lCYpSenF5tBu8C/iweMaj02rAOZUqlLUCqR3HIWzNfgTeCmAiyRHdjJVHrsIQ==, - } + resolution: {integrity: sha512-au4fYa4fprREES58FnMOTFjg8lCYpSenF5tBu8C/iweMaj02rAOZUqlLUCqR3HIWzNfgTeCmAiyRHdjJVHrsIQ==} /@esbuild-plugins/node-globals-polyfill@0.1.1(esbuild@0.17.18): - resolution: - { - integrity: sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==, - } + resolution: {integrity: sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==} peerDependencies: - esbuild: "*" + esbuild: '*' dependencies: esbuild: 0.17.18 dev: false /@esbuild/android-arm64@0.16.17: - resolution: - { - integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true @@ -4916,11 +4084,8 @@ packages: optional: true /@esbuild/android-arm64@0.17.18: - resolution: - { - integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true @@ -4928,22 +4093,16 @@ packages: optional: true /@esbuild/android-arm64@0.17.8: - resolution: - { - integrity: sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true optional: true /@esbuild/android-arm@0.15.18: - resolution: - { - integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true @@ -4951,11 +4110,8 @@ packages: optional: true /@esbuild/android-arm@0.16.17: - resolution: - { - integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true @@ -4963,11 +4119,8 @@ packages: optional: true /@esbuild/android-arm@0.17.18: - resolution: - { - integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true @@ -4975,22 +4128,16 @@ packages: optional: true /@esbuild/android-arm@0.17.8: - resolution: - { - integrity: sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true optional: true /@esbuild/android-x64@0.16.17: - resolution: - { - integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true @@ -4998,11 +4145,8 @@ packages: optional: true /@esbuild/android-x64@0.17.18: - resolution: - { - integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true @@ -5010,22 +4154,16 @@ packages: optional: true /@esbuild/android-x64@0.17.8: - resolution: - { - integrity: sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true optional: true /@esbuild/darwin-arm64@0.16.17: - resolution: - { - integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true @@ -5033,11 +4171,8 @@ packages: optional: true /@esbuild/darwin-arm64@0.17.18: - resolution: - { - integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true @@ -5045,22 +4180,16 @@ packages: optional: true /@esbuild/darwin-arm64@0.17.8: - resolution: - { - integrity: sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true /@esbuild/darwin-x64@0.16.17: - resolution: - { - integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true @@ -5068,11 +4197,8 @@ packages: optional: true /@esbuild/darwin-x64@0.17.18: - resolution: - { - integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true @@ -5080,22 +4206,16 @@ packages: optional: true /@esbuild/darwin-x64@0.17.8: - resolution: - { - integrity: sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true optional: true /@esbuild/freebsd-arm64@0.16.17: - resolution: - { - integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true @@ -5103,11 +4223,8 @@ packages: optional: true /@esbuild/freebsd-arm64@0.17.18: - resolution: - { - integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true @@ -5115,22 +4232,16 @@ packages: optional: true /@esbuild/freebsd-arm64@0.17.8: - resolution: - { - integrity: sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true optional: true /@esbuild/freebsd-x64@0.16.17: - resolution: - { - integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true @@ -5138,11 +4249,8 @@ packages: optional: true /@esbuild/freebsd-x64@0.17.18: - resolution: - { - integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true @@ -5150,22 +4258,16 @@ packages: optional: true /@esbuild/freebsd-x64@0.17.8: - resolution: - { - integrity: sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true optional: true /@esbuild/linux-arm64@0.16.17: - resolution: - { - integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true @@ -5173,11 +4275,8 @@ packages: optional: true /@esbuild/linux-arm64@0.17.18: - resolution: - { - integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true @@ -5185,22 +4284,16 @@ packages: optional: true /@esbuild/linux-arm64@0.17.8: - resolution: - { - integrity: sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true optional: true /@esbuild/linux-arm@0.16.17: - resolution: - { - integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true @@ -5208,11 +4301,8 @@ packages: optional: true /@esbuild/linux-arm@0.17.18: - resolution: - { - integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true @@ -5220,22 +4310,16 @@ packages: optional: true /@esbuild/linux-arm@0.17.8: - resolution: - { - integrity: sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true optional: true /@esbuild/linux-ia32@0.16.17: - resolution: - { - integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true @@ -5243,11 +4327,8 @@ packages: optional: true /@esbuild/linux-ia32@0.17.18: - resolution: - { - integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true @@ -5255,22 +4336,16 @@ packages: optional: true /@esbuild/linux-ia32@0.17.8: - resolution: - { - integrity: sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true optional: true /@esbuild/linux-loong64@0.14.54: - resolution: - { - integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true @@ -5278,11 +4353,8 @@ packages: optional: true /@esbuild/linux-loong64@0.15.18: - resolution: - { - integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true @@ -5290,11 +4362,8 @@ packages: optional: true /@esbuild/linux-loong64@0.16.17: - resolution: - { - integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true @@ -5302,11 +4371,8 @@ packages: optional: true /@esbuild/linux-loong64@0.17.18: - resolution: - { - integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true @@ -5314,22 +4380,16 @@ packages: optional: true /@esbuild/linux-loong64@0.17.8: - resolution: - { - integrity: sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true optional: true /@esbuild/linux-mips64el@0.16.17: - resolution: - { - integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true @@ -5337,11 +4397,8 @@ packages: optional: true /@esbuild/linux-mips64el@0.17.18: - resolution: - { - integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true @@ -5349,22 +4406,16 @@ packages: optional: true /@esbuild/linux-mips64el@0.17.8: - resolution: - { - integrity: sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true optional: true /@esbuild/linux-ppc64@0.16.17: - resolution: - { - integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true @@ -5372,11 +4423,8 @@ packages: optional: true /@esbuild/linux-ppc64@0.17.18: - resolution: - { - integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true @@ -5384,22 +4432,16 @@ packages: optional: true /@esbuild/linux-ppc64@0.17.8: - resolution: - { - integrity: sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true optional: true /@esbuild/linux-riscv64@0.16.17: - resolution: - { - integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true @@ -5407,11 +4449,8 @@ packages: optional: true /@esbuild/linux-riscv64@0.17.18: - resolution: - { - integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true @@ -5419,22 +4458,16 @@ packages: optional: true /@esbuild/linux-riscv64@0.17.8: - resolution: - { - integrity: sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true optional: true /@esbuild/linux-s390x@0.16.17: - resolution: - { - integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true @@ -5442,11 +4475,8 @@ packages: optional: true /@esbuild/linux-s390x@0.17.18: - resolution: - { - integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true @@ -5454,22 +4484,16 @@ packages: optional: true /@esbuild/linux-s390x@0.17.8: - resolution: - { - integrity: sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true optional: true /@esbuild/linux-x64@0.16.17: - resolution: - { - integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true @@ -5477,11 +4501,8 @@ packages: optional: true /@esbuild/linux-x64@0.17.18: - resolution: - { - integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true @@ -5489,22 +4510,16 @@ packages: optional: true /@esbuild/linux-x64@0.17.8: - resolution: - { - integrity: sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true optional: true /@esbuild/netbsd-x64@0.16.17: - resolution: - { - integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true @@ -5512,11 +4527,8 @@ packages: optional: true /@esbuild/netbsd-x64@0.17.18: - resolution: - { - integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true @@ -5524,22 +4536,16 @@ packages: optional: true /@esbuild/netbsd-x64@0.17.8: - resolution: - { - integrity: sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true optional: true /@esbuild/openbsd-x64@0.16.17: - resolution: - { - integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true @@ -5547,11 +4553,8 @@ packages: optional: true /@esbuild/openbsd-x64@0.17.18: - resolution: - { - integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true @@ -5559,22 +4562,16 @@ packages: optional: true /@esbuild/openbsd-x64@0.17.8: - resolution: - { - integrity: sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true optional: true /@esbuild/sunos-x64@0.16.17: - resolution: - { - integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true @@ -5582,11 +4579,8 @@ packages: optional: true /@esbuild/sunos-x64@0.17.18: - resolution: - { - integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true @@ -5594,22 +4588,16 @@ packages: optional: true /@esbuild/sunos-x64@0.17.8: - resolution: - { - integrity: sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true optional: true /@esbuild/win32-arm64@0.16.17: - resolution: - { - integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true @@ -5617,11 +4605,8 @@ packages: optional: true /@esbuild/win32-arm64@0.17.18: - resolution: - { - integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true @@ -5629,22 +4614,16 @@ packages: optional: true /@esbuild/win32-arm64@0.17.8: - resolution: - { - integrity: sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true optional: true /@esbuild/win32-ia32@0.16.17: - resolution: - { - integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true @@ -5652,11 +4631,8 @@ packages: optional: true /@esbuild/win32-ia32@0.17.18: - resolution: - { - integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true @@ -5664,22 +4640,16 @@ packages: optional: true /@esbuild/win32-ia32@0.17.8: - resolution: - { - integrity: sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true optional: true /@esbuild/win32-x64@0.16.17: - resolution: - { - integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true @@ -5687,11 +4657,8 @@ packages: optional: true /@esbuild/win32-x64@0.17.18: - resolution: - { - integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true @@ -5699,22 +4666,16 @@ packages: optional: true /@esbuild/win32-x64@0.17.8: - resolution: - { - integrity: sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true optional: true /@eslint/eslintrc@1.4.1: - resolution: - { - integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 @@ -5730,45 +4691,33 @@ packages: dev: true /@gar/promisify@1.1.3: - resolution: - { - integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==, - } + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true /@graphql-tools/merge@8.3.1(graphql@16.6.0): - resolution: - { - integrity: sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==, - } + resolution: {integrity: sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@graphql-tools/utils": 8.9.0(graphql@16.6.0) + '@graphql-tools/utils': 8.9.0(graphql@16.6.0) graphql: 16.6.0 tslib: 2.5.0 dev: false /@graphql-tools/schema@8.5.1(graphql@16.6.0): - resolution: - { - integrity: sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==, - } + resolution: {integrity: sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@graphql-tools/merge": 8.3.1(graphql@16.6.0) - "@graphql-tools/utils": 8.9.0(graphql@16.6.0) + '@graphql-tools/merge': 8.3.1(graphql@16.6.0) + '@graphql-tools/utils': 8.9.0(graphql@16.6.0) graphql: 16.6.0 tslib: 2.5.0 value-or-promise: 1.0.11 dev: false /@graphql-tools/utils@8.9.0(graphql@16.6.0): - resolution: - { - integrity: sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==, - } + resolution: {integrity: sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: @@ -5777,13 +4726,10 @@ packages: dev: false /@humanwhocodes/config-array@0.11.8: - resolution: - { - integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==, - } - engines: { node: ">=10.10.0" } + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + engines: {node: '>=10.10.0'} dependencies: - "@humanwhocodes/object-schema": 1.2.1 + '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -5791,41 +4737,26 @@ packages: dev: true /@humanwhocodes/module-importer@1.0.1: - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: ">=12.22" } + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} dev: true /@humanwhocodes/object-schema@1.2.1: - resolution: - { - integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, - } + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true /@hutson/parse-repository-url@3.0.2: - resolution: - { - integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} + engines: {node: '>=6.9.0'} dev: true /@isaacs/string-locale-compare@1.1.0: - resolution: - { - integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==, - } + resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} dev: true /@istanbuljs/load-nyc-config@1.1.0: - resolution: - { - integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 find-up: 4.1.0 @@ -5835,22 +4766,16 @@ packages: dev: true /@istanbuljs/schema@0.1.3: - resolution: - { - integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} dev: true /@jest/console@29.4.2: - resolution: - { - integrity: sha512-0I/rEJwMpV9iwi9cDEnT71a5nNGK9lj8Z4+1pRAU2x/thVXCDnaTGrvxyK+cAqZTFVFCiR+hfVrP4l2m+dCmQg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-0I/rEJwMpV9iwi9cDEnT71a5nNGK9lj8Z4+1pRAU2x/thVXCDnaTGrvxyK+cAqZTFVFCiR+hfVrP4l2m+dCmQg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/node': 18.13.0 chalk: 4.1.2 jest-message-util: 29.4.2 jest-util: 29.4.2 @@ -5858,23 +4783,20 @@ packages: dev: true /@jest/core@29.4.2(ts-node@10.9.1): - resolution: - { - integrity: sha512-KGuoQah0P3vGNlaS/l9/wQENZGNKGoWb+OPxh3gz+YzG7/XExvYu34MzikRndQCdM2S0tzExN4+FL37i6gZmCQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-KGuoQah0P3vGNlaS/l9/wQENZGNKGoWb+OPxh3gz+YzG7/XExvYu34MzikRndQCdM2S0tzExN4+FL37i6gZmCQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true dependencies: - "@jest/console": 29.4.2 - "@jest/reporters": 29.4.2 - "@jest/test-result": 29.4.2 - "@jest/transform": 29.4.2 - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + '@jest/console': 29.4.2 + '@jest/reporters': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 @@ -5903,57 +4825,42 @@ packages: dev: true /@jest/create-cache-key-function@27.5.1: - resolution: - { - integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==, - } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - "@jest/types": 27.5.1 + '@jest/types': 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.1 - "@jest/types": 29.4.1 - "@types/node": 18.13.0 + resolution: {integrity: sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.4.1 + '@jest/types': 29.4.1 + '@types/node': 18.13.0 jest-mock: 29.4.1 dev: true /@jest/environment@29.4.2: - resolution: - { - integrity: sha512-JKs3VUtse0vQfCaFGJRX1bir9yBdtasxziSyu+pIiEllAQOe4oQhdCYIf3+Lx+nGglFktSKToBnRJfD5QKp+NQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/fake-timers": 29.4.2 - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-JKs3VUtse0vQfCaFGJRX1bir9yBdtasxziSyu+pIiEllAQOe4oQhdCYIf3+Lx+nGglFktSKToBnRJfD5QKp+NQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 jest-mock: 29.4.2 dev: true /@jest/expect-utils@29.4.2: - resolution: - { - integrity: sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.2 dev: true /@jest/expect@29.3.1: - resolution: - { - integrity: sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: expect: 29.4.2 jest-get-type: 29.4.2 @@ -5963,11 +4870,8 @@ packages: dev: true /@jest/expect@29.4.2: - resolution: - { - integrity: sha512-NUAeZVApzyaeLjfWIV/64zXjA2SS+NuUPHpAlO7IwVMGd5Vf9szTl9KEDlxY3B4liwLO31os88tYNHl6cpjtKQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-NUAeZVApzyaeLjfWIV/64zXjA2SS+NuUPHpAlO7IwVMGd5Vf9szTl9KEDlxY3B4liwLO31os88tYNHl6cpjtKQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: expect: 29.4.2 jest-snapshot: 29.4.2 @@ -5976,84 +4880,69 @@ packages: dev: true /@jest/fake-timers@29.4.1: - resolution: - { - integrity: sha512-/1joI6rfHFmmm39JxNfmNAO3Nwm6Y0VoL5fJDy7H1AtWrD1CgRtqJbN9Ld6rhAkGO76qqp4cwhhxJ9o9kYjQMw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/types": 29.4.2 - "@sinonjs/fake-timers": 10.0.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-/1joI6rfHFmmm39JxNfmNAO3Nwm6Y0VoL5fJDy7H1AtWrD1CgRtqJbN9Ld6rhAkGO76qqp4cwhhxJ9o9kYjQMw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@sinonjs/fake-timers': 10.0.2 + '@types/node': 18.13.0 jest-message-util: 29.4.2 jest-mock: 29.4.1 jest-util: 29.4.2 dev: true /@jest/fake-timers@29.4.2: - resolution: - { - integrity: sha512-Ny1u0Wg6kCsHFWq7A/rW/tMhIedq2siiyHyLpHCmIhP7WmcAmd2cx95P+0xtTZlj5ZbJxIRQi4OPydZZUoiSQQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/types": 29.4.2 - "@sinonjs/fake-timers": 10.0.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-Ny1u0Wg6kCsHFWq7A/rW/tMhIedq2siiyHyLpHCmIhP7WmcAmd2cx95P+0xtTZlj5ZbJxIRQi4OPydZZUoiSQQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@sinonjs/fake-timers': 10.0.2 + '@types/node': 18.13.0 jest-message-util: 29.4.2 jest-mock: 29.4.2 jest-util: 29.4.2 dev: true /@jest/globals@29.3.1: - resolution: - { - integrity: sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q==, - } - 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 + resolution: {integrity: sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q==} + 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 transitivePeerDependencies: - supports-color dev: true /@jest/globals@29.4.2: - resolution: - { - integrity: sha512-zCk70YGPzKnz/I9BNFDPlK+EuJLk21ur/NozVh6JVM86/YYZtZHqxFFQ62O9MWq7uf3vIZnvNA0BzzrtxD9iyg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/environment": 29.4.2 - "@jest/expect": 29.4.2 - "@jest/types": 29.4.2 + resolution: {integrity: sha512-zCk70YGPzKnz/I9BNFDPlK+EuJLk21ur/NozVh6JVM86/YYZtZHqxFFQ62O9MWq7uf3vIZnvNA0BzzrtxD9iyg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.2 + '@jest/expect': 29.4.2 + '@jest/types': 29.4.2 jest-mock: 29.4.2 transitivePeerDependencies: - supports-color dev: true /@jest/reporters@29.4.2: - resolution: - { - integrity: sha512-10yw6YQe75zCgYcXgEND9kw3UZZH5tJeLzWv4vTk/2mrS1aY50A37F+XT2hPO5OqQFFnUWizXD8k1BMiATNfUw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-10yw6YQe75zCgYcXgEND9kw3UZZH5tJeLzWv4vTk/2mrS1aY50A37F+XT2hPO5OqQFFnUWizXD8k1BMiATNfUw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true dependencies: - "@bcoe/v8-coverage": 0.2.3 - "@jest/console": 29.4.2 - "@jest/test-result": 29.4.2 - "@jest/transform": 29.4.2 - "@jest/types": 29.4.2 - "@jridgewell/trace-mapping": 0.3.17 - "@types/node": 18.13.0 + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@jridgewell/trace-mapping': 0.3.17 + '@types/node': 18.13.0 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -6076,83 +4965,62 @@ packages: 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 } + resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@sinclair/typebox": 0.24.51 + '@sinclair/typebox': 0.24.51 dev: true /@jest/schemas@29.4.0: - resolution: - { - integrity: sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@sinclair/typebox": 0.25.21 + '@sinclair/typebox': 0.25.21 dev: true /@jest/schemas@29.4.2: - resolution: - { - integrity: sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@sinclair/typebox": 0.25.21 + '@sinclair/typebox': 0.25.21 dev: true /@jest/source-map@29.4.2: - resolution: - { - integrity: sha512-tIoqV5ZNgYI9XCKXMqbYe5JbumcvyTgNN+V5QW4My033lanijvCD0D4PI9tBw4pRTqWOc00/7X3KVvUh+qnF4Q==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-tIoqV5ZNgYI9XCKXMqbYe5JbumcvyTgNN+V5QW4My033lanijvCD0D4PI9tBw4pRTqWOc00/7X3KVvUh+qnF4Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@jridgewell/trace-mapping": 0.3.17 + '@jridgewell/trace-mapping': 0.3.17 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true /@jest/test-result@29.4.2: - resolution: - { - integrity: sha512-HZsC3shhiHVvMtP+i55MGR5bPcc3obCFbA5bzIOb8pCjwBZf11cZliJncCgaVUbC5yoQNuGqCkC0Q3t6EItxZA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/console": 29.4.2 - "@jest/types": 29.4.2 - "@types/istanbul-lib-coverage": 2.0.4 + resolution: {integrity: sha512-HZsC3shhiHVvMtP+i55MGR5bPcc3obCFbA5bzIOb8pCjwBZf11cZliJncCgaVUbC5yoQNuGqCkC0Q3t6EItxZA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.4.2 + '@jest/types': 29.4.2 + '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true /@jest/test-sequencer@29.4.2: - resolution: - { - integrity: sha512-9Z2cVsD6CcObIVrWigHp2McRJhvCxL27xHtrZFgNC1RwnoSpDx6fZo8QYjJmziFlW9/hr78/3sxF54S8B6v8rg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-9Z2cVsD6CcObIVrWigHp2McRJhvCxL27xHtrZFgNC1RwnoSpDx6fZo8QYjJmziFlW9/hr78/3sxF54S8B6v8rg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@jest/test-result": 29.4.2 + '@jest/test-result': 29.4.2 graceful-fs: 4.2.11 jest-haste-map: 29.4.2 slash: 3.0.0 dev: true /@jest/transform@29.4.2: - resolution: - { - integrity: sha512-kf1v5iTJHn7p9RbOsBuc/lcwyPtJaZJt5885C98omWz79NIeD3PfoiiaPSu7JyCyFzNOIzKhmMhQLUhlTL9BvQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@babel/core": 7.20.12 - "@jest/types": 29.4.2 - "@jridgewell/trace-mapping": 0.3.17 + resolution: {integrity: sha512-kf1v5iTJHn7p9RbOsBuc/lcwyPtJaZJt5885C98omWz79NIeD3PfoiiaPSu7JyCyFzNOIzKhmMhQLUhlTL9BvQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.20.12 + '@jest/types': 29.4.2 + '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -6170,168 +5038,123 @@ packages: dev: true /@jest/types@27.5.1: - resolution: - { - integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==, - } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } - dependencies: - "@types/istanbul-lib-coverage": 2.0.4 - "@types/istanbul-reports": 3.0.1 - "@types/node": 18.13.0 - "@types/yargs": 16.0.5 + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.13.0 + '@types/yargs': 16.0.5 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.13.0 - "@types/yargs": 17.0.17 + 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.13.0 + '@types/yargs': 17.0.17 chalk: 4.1.2 dev: true /@jest/types@29.4.1: - resolution: - { - integrity: sha512-zbrAXDUOnpJ+FMST2rV7QZOgec8rskg2zv8g2ajeqitp4tvZiyqTCYXANrKsM+ryj5o+LI+ZN2EgU9drrkiwSA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/schemas": 29.4.0 - "@types/istanbul-lib-coverage": 2.0.4 - "@types/istanbul-reports": 3.0.1 - "@types/node": 18.13.0 - "@types/yargs": 17.0.20 + resolution: {integrity: sha512-zbrAXDUOnpJ+FMST2rV7QZOgec8rskg2zv8g2ajeqitp4tvZiyqTCYXANrKsM+ryj5o+LI+ZN2EgU9drrkiwSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.4.0 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.13.0 + '@types/yargs': 17.0.20 chalk: 4.1.2 dev: true /@jest/types@29.4.2: - resolution: - { - integrity: sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/schemas": 29.4.2 - "@types/istanbul-lib-coverage": 2.0.4 - "@types/istanbul-reports": 3.0.1 - "@types/node": 18.13.0 - "@types/yargs": 17.0.22 + resolution: {integrity: sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.4.2 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.13.0 + '@types/yargs': 17.0.22 chalk: 4.1.2 dev: true /@jridgewell/gen-mapping@0.1.1: - resolution: - { - integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/set-array": 1.1.2 - "@jridgewell/sourcemap-codec": 1.4.14 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true /@jridgewell/gen-mapping@0.3.2: - resolution: - { - integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/set-array": 1.1.2 - "@jridgewell/sourcemap-codec": 1.4.14 - "@jridgewell/trace-mapping": 0.3.17 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 dev: true /@jridgewell/gen-mapping@0.3.3: - resolution: - { - integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/set-array": 1.1.2 - "@jridgewell/sourcemap-codec": 1.4.15 - "@jridgewell/trace-mapping": 0.3.18 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@jridgewell/resolve-uri@3.1.0: - resolution: - { - integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} /@jridgewell/set-array@1.1.2: - resolution: - { - integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} dev: true /@jridgewell/sourcemap-codec@1.4.14: - resolution: - { - integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, - } + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} /@jridgewell/sourcemap-codec@1.4.15: - resolution: - { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, - } + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true /@jridgewell/trace-mapping@0.3.17: - resolution: - { - integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==, - } + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true /@jridgewell/trace-mapping@0.3.18: - resolution: - { - integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==, - } + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true /@jridgewell/trace-mapping@0.3.9: - resolution: - { - integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, - } + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 /@lerna/add@5.6.2: - resolution: - { - integrity: sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/bootstrap": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/filter-options": 5.6.2 - "@lerna/npm-conf": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/bootstrap': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/filter-options': 5.6.2 + '@lerna/npm-conf': 5.6.2 + '@lerna/validation-error': 5.6.2 dedent: 0.7.0 npm-package-arg: 8.1.1 p-map: 4.0.0 @@ -6343,25 +5166,22 @@ packages: dev: true /@lerna/bootstrap@5.6.2: - resolution: - { - integrity: sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/command": 5.6.2 - "@lerna/filter-options": 5.6.2 - "@lerna/has-npm-version": 5.6.2 - "@lerna/npm-install": 5.6.2 - "@lerna/package-graph": 5.6.2 - "@lerna/pulse-till-done": 5.6.2 - "@lerna/rimraf-dir": 5.6.2 - "@lerna/run-lifecycle": 5.6.2 - "@lerna/run-topologically": 5.6.2 - "@lerna/symlink-binary": 5.6.2 - "@lerna/symlink-dependencies": 5.6.2 - "@lerna/validation-error": 5.6.2 - "@npmcli/arborist": 5.3.0 + resolution: {integrity: sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/command': 5.6.2 + '@lerna/filter-options': 5.6.2 + '@lerna/has-npm-version': 5.6.2 + '@lerna/npm-install': 5.6.2 + '@lerna/package-graph': 5.6.2 + '@lerna/pulse-till-done': 5.6.2 + '@lerna/rimraf-dir': 5.6.2 + '@lerna/run-lifecycle': 5.6.2 + '@lerna/run-topologically': 5.6.2 + '@lerna/symlink-binary': 5.6.2 + '@lerna/symlink-dependencies': 5.6.2 + '@lerna/validation-error': 5.6.2 + '@npmcli/arborist': 5.3.0 dedent: 0.7.0 get-port: 5.1.1 multimatch: 5.0.0 @@ -6377,36 +5197,27 @@ packages: dev: true /@lerna/changed@5.6.2: - resolution: - { - integrity: sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/collect-updates": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/listable": 5.6.2 - "@lerna/output": 5.6.2 + '@lerna/collect-updates': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/listable': 5.6.2 + '@lerna/output': 5.6.2 dev: true /@lerna/check-working-tree@5.6.2: - resolution: - { - integrity: sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/collect-uncommitted": 5.6.2 - "@lerna/describe-ref": 5.6.2 - "@lerna/validation-error": 5.6.2 + '@lerna/collect-uncommitted': 5.6.2 + '@lerna/describe-ref': 5.6.2 + '@lerna/validation-error': 5.6.2 dev: true /@lerna/child-process@5.6.2: - resolution: - { - integrity: sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: chalk: 4.1.2 execa: 5.1.1 @@ -6414,73 +5225,58 @@ packages: dev: true /@lerna/clean@5.6.2: - resolution: - { - integrity: sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/command": 5.6.2 - "@lerna/filter-options": 5.6.2 - "@lerna/prompt": 5.6.2 - "@lerna/pulse-till-done": 5.6.2 - "@lerna/rimraf-dir": 5.6.2 + resolution: {integrity: sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/command': 5.6.2 + '@lerna/filter-options': 5.6.2 + '@lerna/prompt': 5.6.2 + '@lerna/pulse-till-done': 5.6.2 + '@lerna/rimraf-dir': 5.6.2 p-map: 4.0.0 p-map-series: 2.1.0 p-waterfall: 2.1.1 dev: true /@lerna/cli@5.6.2: - resolution: - { - integrity: sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/global-options": 5.6.2 + '@lerna/global-options': 5.6.2 dedent: 0.7.0 npmlog: 6.0.2 yargs: 16.2.0 dev: true /@lerna/collect-uncommitted@5.6.2: - resolution: - { - integrity: sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/child-process": 5.6.2 + '@lerna/child-process': 5.6.2 chalk: 4.1.2 npmlog: 6.0.2 dev: true /@lerna/collect-updates@5.6.2: - resolution: - { - integrity: sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/describe-ref": 5.6.2 + resolution: {integrity: sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/describe-ref': 5.6.2 minimatch: 3.1.2 npmlog: 6.0.2 slash: 3.0.0 dev: true /@lerna/command@5.6.2: - resolution: - { - integrity: sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/package-graph": 5.6.2 - "@lerna/project": 5.6.2 - "@lerna/validation-error": 5.6.2 - "@lerna/write-log-file": 5.6.2 + resolution: {integrity: sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/package-graph': 5.6.2 + '@lerna/project': 5.6.2 + '@lerna/validation-error': 5.6.2 + '@lerna/write-log-file': 5.6.2 clone-deep: 4.0.1 dedent: 0.7.0 execa: 5.1.1 @@ -6489,13 +5285,10 @@ packages: dev: true /@lerna/conventional-commits@5.6.2: - resolution: - { - integrity: sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/validation-error": 5.6.2 + '@lerna/validation-error': 5.6.2 conventional-changelog-angular: 5.0.13 conventional-changelog-core: 4.2.4 conventional-recommended-bump: 6.1.0 @@ -6508,11 +5301,8 @@ packages: dev: true /@lerna/create-symlink@5.6.2: - resolution: - { - integrity: sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: cmd-shim: 5.0.0 fs-extra: 9.1.0 @@ -6520,16 +5310,13 @@ packages: dev: true /@lerna/create@5.6.2: - resolution: - { - integrity: sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/npm-conf": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/npm-conf': 5.6.2 + '@lerna/validation-error': 5.6.2 dedent: 0.7.0 fs-extra: 9.1.0 init-package-json: 3.0.2 @@ -6548,86 +5335,65 @@ packages: dev: true /@lerna/describe-ref@5.6.2: - resolution: - { - integrity: sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/child-process": 5.6.2 + '@lerna/child-process': 5.6.2 npmlog: 6.0.2 dev: true /@lerna/diff@5.6.2: - resolution: - { - integrity: sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/validation-error': 5.6.2 npmlog: 6.0.2 dev: true /@lerna/exec@5.6.2: - resolution: - { - integrity: sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/filter-options": 5.6.2 - "@lerna/profiler": 5.6.2 - "@lerna/run-topologically": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/filter-options': 5.6.2 + '@lerna/profiler': 5.6.2 + '@lerna/run-topologically': 5.6.2 + '@lerna/validation-error': 5.6.2 p-map: 4.0.0 dev: true /@lerna/filter-options@5.6.2: - resolution: - { - integrity: sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/collect-updates": 5.6.2 - "@lerna/filter-packages": 5.6.2 + resolution: {integrity: sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/collect-updates': 5.6.2 + '@lerna/filter-packages': 5.6.2 dedent: 0.7.0 npmlog: 6.0.2 dev: true /@lerna/filter-packages@5.6.2: - resolution: - { - integrity: sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/validation-error": 5.6.2 + '@lerna/validation-error': 5.6.2 multimatch: 5.0.0 npmlog: 6.0.2 dev: true /@lerna/get-npm-exec-opts@5.6.2: - resolution: - { - integrity: sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: npmlog: 6.0.2 dev: true /@lerna/get-packed@5.6.2: - resolution: - { - integrity: sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: fs-extra: 9.1.0 ssri: 9.0.1 @@ -6635,15 +5401,12 @@ packages: dev: true /@lerna/github-client@5.6.2: - resolution: - { - integrity: sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@octokit/plugin-enterprise-rest": 6.0.1 - "@octokit/rest": 19.0.7 + resolution: {integrity: sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@octokit/plugin-enterprise-rest': 6.0.1 + '@octokit/rest': 19.0.7 git-url-parse: 13.1.0 npmlog: 6.0.2 transitivePeerDependencies: @@ -6651,11 +5414,8 @@ packages: dev: true /@lerna/gitlab-client@5.6.2: - resolution: - { - integrity: sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: node-fetch: 2.6.9 npmlog: 6.0.2 @@ -6664,114 +5424,87 @@ packages: dev: true /@lerna/global-options@5.6.2: - resolution: - { - integrity: sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg==} + engines: {node: ^14.15.0 || >=16.0.0} dev: true /@lerna/has-npm-version@5.6.2: - resolution: - { - integrity: sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/child-process": 5.6.2 + '@lerna/child-process': 5.6.2 semver: 7.5.0 dev: true /@lerna/import@5.6.2: - resolution: - { - integrity: sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/prompt": 5.6.2 - "@lerna/pulse-till-done": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/prompt': 5.6.2 + '@lerna/pulse-till-done': 5.6.2 + '@lerna/validation-error': 5.6.2 dedent: 0.7.0 fs-extra: 9.1.0 p-map-series: 2.1.0 dev: true /@lerna/info@5.6.2: - resolution: - { - integrity: sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/command": 5.6.2 - "@lerna/output": 5.6.2 + resolution: {integrity: sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/command': 5.6.2 + '@lerna/output': 5.6.2 envinfo: 7.8.1 dev: true /@lerna/init@5.6.2: - resolution: - { - integrity: sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/project": 5.6.2 + resolution: {integrity: sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/project': 5.6.2 fs-extra: 9.1.0 p-map: 4.0.0 write-json-file: 4.3.0 dev: true /@lerna/link@5.6.2: - resolution: - { - integrity: sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/command": 5.6.2 - "@lerna/package-graph": 5.6.2 - "@lerna/symlink-dependencies": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/command': 5.6.2 + '@lerna/package-graph': 5.6.2 + '@lerna/symlink-dependencies': 5.6.2 + '@lerna/validation-error': 5.6.2 p-map: 4.0.0 slash: 3.0.0 dev: true /@lerna/list@5.6.2: - resolution: - { - integrity: sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/command": 5.6.2 - "@lerna/filter-options": 5.6.2 - "@lerna/listable": 5.6.2 - "@lerna/output": 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/filter-options': 5.6.2 + '@lerna/listable': 5.6.2 + '@lerna/output': 5.6.2 dev: true /@lerna/listable@5.6.2: - resolution: - { - integrity: sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/query-graph": 5.6.2 + '@lerna/query-graph': 5.6.2 chalk: 4.1.2 columnify: 1.6.0 dev: true /@lerna/log-packed@5.6.2: - resolution: - { - integrity: sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: byte-size: 7.0.1 columnify: 1.6.0 @@ -6780,24 +5513,18 @@ packages: dev: true /@lerna/npm-conf@5.6.2: - resolution: - { - integrity: sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: config-chain: 1.1.13 pify: 5.0.0 dev: true /@lerna/npm-dist-tag@5.6.2: - resolution: - { - integrity: sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/otplease": 5.6.2 + '@lerna/otplease': 5.6.2 npm-package-arg: 8.1.1 npm-registry-fetch: 13.3.1 npmlog: 6.0.2 @@ -6807,14 +5534,11 @@ packages: dev: true /@lerna/npm-install@5.6.2: - resolution: - { - integrity: sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/get-npm-exec-opts": 5.6.2 + resolution: {integrity: sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/get-npm-exec-opts': 5.6.2 fs-extra: 9.1.0 npm-package-arg: 8.1.1 npmlog: 6.0.2 @@ -6823,14 +5547,11 @@ packages: dev: true /@lerna/npm-publish@5.6.2: - resolution: - { - integrity: sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/otplease": 5.6.2 - "@lerna/run-lifecycle": 5.6.2 + resolution: {integrity: sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/otplease': 5.6.2 + '@lerna/run-lifecycle': 5.6.2 fs-extra: 9.1.0 libnpmpublish: 6.0.5 npm-package-arg: 8.1.1 @@ -6843,48 +5564,36 @@ packages: dev: true /@lerna/npm-run-script@5.6.2: - resolution: - { - integrity: sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/child-process": 5.6.2 - "@lerna/get-npm-exec-opts": 5.6.2 + resolution: {integrity: sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/child-process': 5.6.2 + '@lerna/get-npm-exec-opts': 5.6.2 npmlog: 6.0.2 dev: true /@lerna/otplease@5.6.2: - resolution: - { - integrity: sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/prompt": 5.6.2 + '@lerna/prompt': 5.6.2 dev: true /@lerna/output@5.6.2: - resolution: - { - integrity: sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: npmlog: 6.0.2 dev: true /@lerna/pack-directory@5.6.2: - resolution: - { - integrity: sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/get-packed": 5.6.2 - "@lerna/package": 5.6.2 - "@lerna/run-lifecycle": 5.6.2 - "@lerna/temp-write": 5.6.2 + resolution: {integrity: sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/get-packed': 5.6.2 + '@lerna/package': 5.6.2 + '@lerna/run-lifecycle': 5.6.2 + '@lerna/temp-write': 5.6.2 npm-packlist: 5.1.3 npmlog: 6.0.2 tar: 6.1.13 @@ -6894,25 +5603,19 @@ packages: dev: true /@lerna/package-graph@5.6.2: - resolution: - { - integrity: sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/prerelease-id-from-version": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/prerelease-id-from-version': 5.6.2 + '@lerna/validation-error': 5.6.2 npm-package-arg: 8.1.1 npmlog: 6.0.2 semver: 7.5.0 dev: true /@lerna/package@5.6.2: - resolution: - { - integrity: sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: load-json-file: 6.2.0 npm-package-arg: 8.1.1 @@ -6920,21 +5623,15 @@ packages: dev: true /@lerna/prerelease-id-from-version@5.6.2: - resolution: - { - integrity: sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: semver: 7.5.0 dev: true /@lerna/profiler@5.6.2: - resolution: - { - integrity: sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: fs-extra: 9.1.0 npmlog: 6.0.2 @@ -6942,14 +5639,11 @@ packages: dev: true /@lerna/project@5.6.2: - resolution: - { - integrity: sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/package": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/package': 5.6.2 + '@lerna/validation-error': 5.6.2 cosmiconfig: 7.1.0 dedent: 0.7.0 dot-prop: 6.0.1 @@ -6964,42 +5658,36 @@ packages: dev: true /@lerna/prompt@5.6.2: - resolution: - { - integrity: sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: inquirer: 8.2.5 npmlog: 6.0.2 dev: true /@lerna/publish@5.6.2(nx@15.6.3)(typescript@4.9.5): - resolution: - { - integrity: sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/check-working-tree": 5.6.2 - "@lerna/child-process": 5.6.2 - "@lerna/collect-updates": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/describe-ref": 5.6.2 - "@lerna/log-packed": 5.6.2 - "@lerna/npm-conf": 5.6.2 - "@lerna/npm-dist-tag": 5.6.2 - "@lerna/npm-publish": 5.6.2 - "@lerna/otplease": 5.6.2 - "@lerna/output": 5.6.2 - "@lerna/pack-directory": 5.6.2 - "@lerna/prerelease-id-from-version": 5.6.2 - "@lerna/prompt": 5.6.2 - "@lerna/pulse-till-done": 5.6.2 - "@lerna/run-lifecycle": 5.6.2 - "@lerna/run-topologically": 5.6.2 - "@lerna/validation-error": 5.6.2 - "@lerna/version": 5.6.2(nx@15.6.3)(typescript@4.9.5) + resolution: {integrity: sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/check-working-tree': 5.6.2 + '@lerna/child-process': 5.6.2 + '@lerna/collect-updates': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/describe-ref': 5.6.2 + '@lerna/log-packed': 5.6.2 + '@lerna/npm-conf': 5.6.2 + '@lerna/npm-dist-tag': 5.6.2 + '@lerna/npm-publish': 5.6.2 + '@lerna/otplease': 5.6.2 + '@lerna/output': 5.6.2 + '@lerna/pack-directory': 5.6.2 + '@lerna/prerelease-id-from-version': 5.6.2 + '@lerna/prompt': 5.6.2 + '@lerna/pulse-till-done': 5.6.2 + '@lerna/run-lifecycle': 5.6.2 + '@lerna/run-topologically': 5.6.2 + '@lerna/validation-error': 5.6.2 + '@lerna/version': 5.6.2(nx@15.6.3)(typescript@4.9.5) fs-extra: 9.1.0 libnpmaccess: 6.0.4 npm-package-arg: 8.1.1 @@ -7018,31 +5706,22 @@ packages: dev: true /@lerna/pulse-till-done@5.6.2: - resolution: - { - integrity: sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: npmlog: 6.0.2 dev: true /@lerna/query-graph@5.6.2: - resolution: - { - integrity: sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/package-graph": 5.6.2 + '@lerna/package-graph': 5.6.2 dev: true /@lerna/resolve-symlink@5.6.2: - resolution: - { - integrity: sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: fs-extra: 9.1.0 npmlog: 6.0.2 @@ -7050,27 +5729,21 @@ packages: dev: true /@lerna/rimraf-dir@5.6.2: - resolution: - { - integrity: sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/child-process": 5.6.2 + '@lerna/child-process': 5.6.2 npmlog: 6.0.2 path-exists: 4.0.0 rimraf: 3.0.2 dev: true /@lerna/run-lifecycle@5.6.2: - resolution: - { - integrity: sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/npm-conf": 5.6.2 - "@npmcli/run-script": 4.2.1 + resolution: {integrity: sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/npm-conf': 5.6.2 + '@npmcli/run-script': 4.2.1 npmlog: 6.0.2 p-queue: 6.6.2 transitivePeerDependencies: @@ -7079,68 +5752,53 @@ packages: dev: true /@lerna/run-topologically@5.6.2: - resolution: - { - integrity: sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: - "@lerna/query-graph": 5.6.2 + '@lerna/query-graph': 5.6.2 p-queue: 6.6.2 dev: true /@lerna/run@5.6.2: - resolution: - { - integrity: sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/command": 5.6.2 - "@lerna/filter-options": 5.6.2 - "@lerna/npm-run-script": 5.6.2 - "@lerna/output": 5.6.2 - "@lerna/profiler": 5.6.2 - "@lerna/run-topologically": 5.6.2 - "@lerna/timer": 5.6.2 - "@lerna/validation-error": 5.6.2 + resolution: {integrity: sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/command': 5.6.2 + '@lerna/filter-options': 5.6.2 + '@lerna/npm-run-script': 5.6.2 + '@lerna/output': 5.6.2 + '@lerna/profiler': 5.6.2 + '@lerna/run-topologically': 5.6.2 + '@lerna/timer': 5.6.2 + '@lerna/validation-error': 5.6.2 fs-extra: 9.1.0 p-map: 4.0.0 dev: true /@lerna/symlink-binary@5.6.2: - resolution: - { - integrity: sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/create-symlink": 5.6.2 - "@lerna/package": 5.6.2 + resolution: {integrity: sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/create-symlink': 5.6.2 + '@lerna/package': 5.6.2 fs-extra: 9.1.0 p-map: 4.0.0 dev: true /@lerna/symlink-dependencies@5.6.2: - resolution: - { - integrity: sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/create-symlink": 5.6.2 - "@lerna/resolve-symlink": 5.6.2 - "@lerna/symlink-binary": 5.6.2 + resolution: {integrity: sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/create-symlink': 5.6.2 + '@lerna/resolve-symlink': 5.6.2 + '@lerna/symlink-binary': 5.6.2 fs-extra: 9.1.0 p-map: 4.0.0 p-map-series: 2.1.0 dev: true /@lerna/temp-write@5.6.2: - resolution: - { - integrity: sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig==, - } + resolution: {integrity: sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig==} dependencies: graceful-fs: 4.2.11 is-stream: 2.0.1 @@ -7150,45 +5808,36 @@ packages: dev: true /@lerna/timer@5.6.2: - resolution: - { - integrity: sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA==} + engines: {node: ^14.15.0 || >=16.0.0} dev: true /@lerna/validation-error@5.6.2: - resolution: - { - integrity: sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: npmlog: 6.0.2 dev: true /@lerna/version@5.6.2(nx@15.6.3)(typescript@4.9.5): - resolution: - { - integrity: sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw==, - } - engines: { node: ^14.15.0 || >=16.0.0 } - dependencies: - "@lerna/check-working-tree": 5.6.2 - "@lerna/child-process": 5.6.2 - "@lerna/collect-updates": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/conventional-commits": 5.6.2 - "@lerna/github-client": 5.6.2 - "@lerna/gitlab-client": 5.6.2 - "@lerna/output": 5.6.2 - "@lerna/prerelease-id-from-version": 5.6.2 - "@lerna/prompt": 5.6.2 - "@lerna/run-lifecycle": 5.6.2 - "@lerna/run-topologically": 5.6.2 - "@lerna/temp-write": 5.6.2 - "@lerna/validation-error": 5.6.2 - "@nrwl/devkit": 15.0.13(nx@15.6.3)(typescript@4.9.5) + resolution: {integrity: sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@lerna/check-working-tree': 5.6.2 + '@lerna/child-process': 5.6.2 + '@lerna/collect-updates': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/conventional-commits': 5.6.2 + '@lerna/github-client': 5.6.2 + '@lerna/gitlab-client': 5.6.2 + '@lerna/output': 5.6.2 + '@lerna/prerelease-id-from-version': 5.6.2 + '@lerna/prompt': 5.6.2 + '@lerna/run-lifecycle': 5.6.2 + '@lerna/run-topologically': 5.6.2 + '@lerna/temp-write': 5.6.2 + '@lerna/validation-error': 5.6.2 + '@nrwl/devkit': 15.0.13(nx@15.6.3)(typescript@4.9.5) chalk: 4.1.2 dedent: 0.7.0 load-json-file: 6.2.0 @@ -7210,63 +5859,48 @@ packages: dev: true /@lerna/write-log-file@5.6.2: - resolution: - { - integrity: sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ==} + engines: {node: ^14.15.0 || >=16.0.0} dependencies: npmlog: 6.0.2 write-file-atomic: 4.0.2 dev: true /@nodelib/fs.scandir@2.1.5: - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - "@nodelib/fs.stat": 2.0.5 + '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 dev: true /@nodelib/fs.stat@2.0.5: - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} dev: true /@nodelib/fs.walk@1.2.8: - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - "@nodelib/fs.scandir": 2.1.5 + '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 dev: true /@npmcli/arborist@5.3.0: - resolution: - { - integrity: sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} hasBin: true dependencies: - "@isaacs/string-locale-compare": 1.1.0 - "@npmcli/installed-package-contents": 1.0.7 - "@npmcli/map-workspaces": 2.0.4 - "@npmcli/metavuln-calculator": 3.1.1 - "@npmcli/move-file": 2.0.1 - "@npmcli/name-from-folder": 1.0.1 - "@npmcli/node-gyp": 2.0.0 - "@npmcli/package-json": 2.0.0 - "@npmcli/run-script": 4.2.1 + '@isaacs/string-locale-compare': 1.1.0 + '@npmcli/installed-package-contents': 1.0.7 + '@npmcli/map-workspaces': 2.0.4 + '@npmcli/metavuln-calculator': 3.1.1 + '@npmcli/move-file': 2.0.1 + '@npmcli/name-from-folder': 1.0.1 + '@npmcli/node-gyp': 2.0.0 + '@npmcli/package-json': 2.0.0 + '@npmcli/run-script': 4.2.1 bin-links: 3.0.3 cacache: 16.1.3 common-ancestor-path: 1.0.1 @@ -7298,34 +5932,25 @@ packages: dev: true /@npmcli/fs@1.1.1: - resolution: - { - integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==, - } + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: - "@gar/promisify": 1.1.3 + '@gar/promisify': 1.1.3 semver: 7.5.0 dev: true /@npmcli/fs@2.1.2: - resolution: - { - integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - "@gar/promisify": 1.1.3 + '@gar/promisify': 1.1.3 semver: 7.5.0 dev: true /@npmcli/git@3.0.2: - resolution: - { - integrity: sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - "@npmcli/promise-spawn": 3.0.0 + '@npmcli/promise-spawn': 3.0.0 lru-cache: 7.14.1 mkdirp: 1.0.4 npm-pick-manifest: 7.0.2 @@ -7339,11 +5964,8 @@ packages: dev: true /@npmcli/installed-package-contents@1.0.7: - resolution: - { - integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==} + engines: {node: '>= 10'} hasBin: true dependencies: npm-bundled: 1.1.2 @@ -7351,24 +5973,18 @@ packages: dev: true /@npmcli/map-workspaces@2.0.4: - resolution: - { - integrity: sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - "@npmcli/name-from-folder": 1.0.1 + '@npmcli/name-from-folder': 1.0.1 glob: 8.1.0 minimatch: 5.1.6 read-package-json-fast: 2.0.3 dev: true /@npmcli/metavuln-calculator@3.1.1: - resolution: - { - integrity: sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: cacache: 16.1.3 json-parse-even-better-errors: 2.3.1 @@ -7380,11 +5996,8 @@ packages: dev: true /@npmcli/move-file@1.1.2: - resolution: - { - integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} deprecated: This functionality has been moved to @npmcli/fs dependencies: mkdirp: 1.0.4 @@ -7392,11 +6005,8 @@ packages: dev: true /@npmcli/move-file@2.0.1: - resolution: - { - integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This functionality has been moved to @npmcli/fs dependencies: mkdirp: 1.0.4 @@ -7404,49 +6014,34 @@ packages: dev: true /@npmcli/name-from-folder@1.0.1: - resolution: - { - integrity: sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==, - } + resolution: {integrity: sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==} dev: true /@npmcli/node-gyp@2.0.0: - resolution: - { - integrity: sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true /@npmcli/package-json@2.0.0: - resolution: - { - integrity: sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: json-parse-even-better-errors: 2.3.1 dev: true /@npmcli/promise-spawn@3.0.0: - resolution: - { - integrity: sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: infer-owner: 1.0.4 dev: true /@npmcli/run-script@4.2.1: - resolution: - { - integrity: sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } - dependencies: - "@npmcli/node-gyp": 2.0.0 - "@npmcli/promise-spawn": 3.0.0 + resolution: {integrity: sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@npmcli/node-gyp': 2.0.0 + '@npmcli/promise-spawn': 3.0.0 node-gyp: 9.3.1 read-package-json-fast: 2.0.3 which: 2.0.2 @@ -7456,27 +6051,21 @@ packages: dev: true /@nrwl/cli@15.6.3: - resolution: - { - integrity: sha512-K4E0spofThZXMnhA6R8hkUTdfqmwSnUE2+DlD5Y3jqsvKTAgwF5U41IFkEouFZCf+dWjy0RA20bWoX48EVFtmQ==, - } + resolution: {integrity: sha512-K4E0spofThZXMnhA6R8hkUTdfqmwSnUE2+DlD5Y3jqsvKTAgwF5U41IFkEouFZCf+dWjy0RA20bWoX48EVFtmQ==} dependencies: nx: 15.6.3 transitivePeerDependencies: - - "@swc-node/register" - - "@swc/core" + - '@swc-node/register' + - '@swc/core' - debug dev: true /@nrwl/devkit@15.0.13(nx@15.6.3)(typescript@4.9.5): - resolution: - { - integrity: sha512-/8k7wbBRFf2UC+T4F+vWMy3bfSGi+uK6RwXk53moLq3nxehXaQhRiCqasC6VJFUw3zK6luu2T7xkPUlA9K9l4w==, - } + resolution: {integrity: sha512-/8k7wbBRFf2UC+T4F+vWMy3bfSGi+uK6RwXk53moLq3nxehXaQhRiCqasC6VJFUw3zK6luu2T7xkPUlA9K9l4w==} peerDependencies: - nx: ">= 14 <= 16" + nx: '>= 14 <= 16' dependencies: - "@phenomnomnominal/tsquery": 4.1.1(typescript@4.9.5) + '@phenomnomnominal/tsquery': 4.1.1(typescript@4.9.5) ejs: 3.1.8 ignore: 5.2.4 nx: 15.6.3 @@ -7487,14 +6076,11 @@ packages: dev: true /@nrwl/devkit@15.6.3(nx@15.6.3)(typescript@4.9.5): - resolution: - { - integrity: sha512-/JDvdzNxUM+C1PCZPCrvmFx+OfywqZdOq1GS9QR8C0VctTLG4D/SGSFD88O1SAdcbH/f1mMiBGfEYZYd23fghQ==, - } + resolution: {integrity: sha512-/JDvdzNxUM+C1PCZPCrvmFx+OfywqZdOq1GS9QR8C0VctTLG4D/SGSFD88O1SAdcbH/f1mMiBGfEYZYd23fghQ==} peerDependencies: - nx: ">= 14 <= 16" + nx: '>= 14 <= 16' dependencies: - "@phenomnomnominal/tsquery": 4.1.1(typescript@4.9.5) + '@phenomnomnominal/tsquery': 4.1.1(typescript@4.9.5) ejs: 3.1.8 ignore: 5.2.4 nx: 15.6.3 @@ -7505,41 +6091,32 @@ packages: dev: true /@nrwl/tao@15.6.3: - resolution: - { - integrity: sha512-bDZbPIbU5Mf2BvX0q8GjPxrm1WkYyfW+gp7mLuuJth2sEpZiCr47mSwuGko/y4CKXvIX46VQcAS0pKQMKugXsg==, - } + resolution: {integrity: sha512-bDZbPIbU5Mf2BvX0q8GjPxrm1WkYyfW+gp7mLuuJth2sEpZiCr47mSwuGko/y4CKXvIX46VQcAS0pKQMKugXsg==} hasBin: true dependencies: nx: 15.6.3 transitivePeerDependencies: - - "@swc-node/register" - - "@swc/core" + - '@swc-node/register' + - '@swc/core' - debug dev: true /@octokit/auth-token@3.0.3: - resolution: - { - integrity: sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==, - } - engines: { node: ">= 14" } + resolution: {integrity: sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==} + engines: {node: '>= 14'} dependencies: - "@octokit/types": 9.0.0 + '@octokit/types': 9.0.0 dev: true /@octokit/core@4.2.0: - resolution: - { - integrity: sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==, - } - engines: { node: ">= 14" } - dependencies: - "@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 + resolution: {integrity: sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==} + engines: {node: '>= 14'} + dependencies: + '@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: @@ -7547,105 +6124,78 @@ packages: dev: true /@octokit/endpoint@7.0.5: - resolution: - { - integrity: sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==, - } - engines: { node: ">= 14" } + resolution: {integrity: sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==} + engines: {node: '>= 14'} dependencies: - "@octokit/types": 9.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.5: - resolution: - { - integrity: sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==, - } - engines: { node: ">= 14" } - dependencies: - "@octokit/request": 6.2.3 - "@octokit/types": 9.0.0 + resolution: {integrity: sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==} + engines: {node: '>= 14'} + dependencies: + '@octokit/request': 6.2.3 + '@octokit/types': 9.0.0 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding dev: true /@octokit/openapi-types@16.0.0: - resolution: - { - integrity: sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==, - } + resolution: {integrity: sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==} dev: true /@octokit/plugin-enterprise-rest@6.0.1: - resolution: - { - integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==, - } + resolution: {integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==} dev: true /@octokit/plugin-paginate-rest@6.0.0(@octokit/core@4.2.0): - resolution: - { - integrity: sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==, - } - engines: { node: ">= 14" } + resolution: {integrity: sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==} + engines: {node: '>= 14'} peerDependencies: - "@octokit/core": ">=4" + '@octokit/core': '>=4' dependencies: - "@octokit/core": 4.2.0 - "@octokit/types": 9.0.0 + '@octokit/core': 4.2.0 + '@octokit/types': 9.0.0 dev: true /@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.0): - resolution: - { - integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==, - } + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} peerDependencies: - "@octokit/core": ">=3" + '@octokit/core': '>=3' dependencies: - "@octokit/core": 4.2.0 + '@octokit/core': 4.2.0 dev: true /@octokit/plugin-rest-endpoint-methods@7.0.1(@octokit/core@4.2.0): - resolution: - { - integrity: sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==, - } - engines: { node: ">= 14" } + resolution: {integrity: sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==} + engines: {node: '>= 14'} peerDependencies: - "@octokit/core": ">=3" + '@octokit/core': '>=3' dependencies: - "@octokit/core": 4.2.0 - "@octokit/types": 9.0.0 + '@octokit/core': 4.2.0 + '@octokit/types': 9.0.0 deprecation: 2.3.1 dev: true /@octokit/request-error@3.0.3: - resolution: - { - integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==, - } - engines: { node: ">= 14" } + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} + engines: {node: '>= 14'} dependencies: - "@octokit/types": 9.0.0 + '@octokit/types': 9.0.0 deprecation: 2.3.1 once: 1.4.0 dev: true /@octokit/request@6.2.3: - resolution: - { - integrity: sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==, - } - engines: { node: ">= 14" } - dependencies: - "@octokit/endpoint": 7.0.5 - "@octokit/request-error": 3.0.3 - "@octokit/types": 9.0.0 + resolution: {integrity: sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==} + engines: {node: '>= 14'} + dependencies: + '@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.9 universal-user-agent: 6.0.0 @@ -7654,35 +6204,26 @@ packages: dev: true /@octokit/rest@19.0.7: - resolution: - { - integrity: sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==, - } - engines: { node: ">= 14" } - dependencies: - "@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) + resolution: {integrity: sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==} + engines: {node: '>= 14'} + dependencies: + '@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@9.0.0: - resolution: - { - integrity: sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==, - } + resolution: {integrity: sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==} dependencies: - "@octokit/openapi-types": 16.0.0 + '@octokit/openapi-types': 16.0.0 dev: true /@parcel/watcher@2.0.4: - resolution: - { - integrity: sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==} + engines: {node: '>= 10.0.0'} requiresBuild: true dependencies: node-addon-api: 3.2.1 @@ -7690,10 +6231,7 @@ packages: dev: true /@phenomnomnominal/tsquery@4.1.1(typescript@4.9.5): - resolution: - { - integrity: sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==, - } + resolution: {integrity: sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==} peerDependencies: typescript: ^3 || ^4 dependencies: @@ -7702,23 +6240,17 @@ packages: dev: true /@pothos/core@3.29.0(graphql@16.6.0): - resolution: - { - integrity: sha512-6LcrnZ3QRQrbWvKLfdSvfrk1nyezLaDAT8yIhQXLOhhtm3iK+knIpdGbNfKiTgxbdSDkK69IcXNV4ifcq23bIQ==, - } + resolution: {integrity: sha512-6LcrnZ3QRQrbWvKLfdSvfrk1nyezLaDAT8yIhQXLOhhtm3iK+knIpdGbNfKiTgxbdSDkK69IcXNV4ifcq23bIQ==} requiresBuild: true peerDependencies: - graphql: ">=15.1.0" + graphql: '>=15.1.0' dependencies: graphql: 16.6.0 dev: true optional: true /@serverless-stack/aws-lambda-ric@2.0.13: - resolution: - { - integrity: sha512-Aj4X2wMW6O5/PQoKoBdQGC3LwQyGTgW1XZtF0rs07WE9s6Q+46zWaVgURQjoNmTNQKpHSGJYo6B+ycp9u7/CSA==, - } + resolution: {integrity: sha512-Aj4X2wMW6O5/PQoKoBdQGC3LwQyGTgW1XZtF0rs07WE9s6Q+46zWaVgURQjoNmTNQKpHSGJYo6B+ycp9u7/CSA==} hasBin: true dependencies: node-addon-api: 3.2.1 @@ -7729,15 +6261,12 @@ packages: dev: true /@serverless-stack/cli@1.18.4(constructs@10.1.154): - resolution: - { - integrity: sha512-eEG3brlbF/ptIo/s69Hcrn185CVkLWHpmtOmere7+lMPkmy1vxNhWIUuic+LNG0yweK+sg4uMVipREyvwblNDQ==, - } + resolution: {integrity: sha512-eEG3brlbF/ptIo/s69Hcrn185CVkLWHpmtOmere7+lMPkmy1vxNhWIUuic+LNG0yweK+sg4uMVipREyvwblNDQ==} hasBin: true dependencies: - "@aws-cdk/aws-apigatewayv2-alpha": 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) - "@serverless-stack/core": 1.18.4 - "@serverless-stack/resources": 1.18.4 + '@aws-cdk/aws-apigatewayv2-alpha': 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) + '@serverless-stack/core': 1.18.4 + '@serverless-stack/resources': 1.18.4 aws-cdk: 2.50.0 aws-cdk-lib: 2.50.0(constructs@10.1.154) aws-sdk: 2.1314.0 @@ -7767,13 +6296,10 @@ packages: dev: true /@serverless-stack/core@1.18.4: - resolution: - { - integrity: sha512-j6eoGoZbADbLsc95ZJZQ3nWkXqdlfayx1xEWE0UpFjxthKUi8qZUONd7NOEyTHiR0yYV1NrANcWur2alvn+vlA==, - } + resolution: {integrity: sha512-j6eoGoZbADbLsc95ZJZQ3nWkXqdlfayx1xEWE0UpFjxthKUi8qZUONd7NOEyTHiR0yYV1NrANcWur2alvn+vlA==} dependencies: - "@serverless-stack/aws-lambda-ric": 2.0.13 - "@trpc/server": 9.27.3 + '@serverless-stack/aws-lambda-ric': 2.0.13 + '@trpc/server': 9.27.3 acorn: 8.8.2 acorn-walk: 8.2.0 async-retry: 1.3.3 @@ -7808,7 +6334,7 @@ packages: xstate: 4.26.1 zip-local: 0.3.5 optionalDependencies: - "@pothos/core": 3.29.0(graphql@16.6.0) + '@pothos/core': 3.29.0(graphql@16.6.0) graphql: 16.6.0 transitivePeerDependencies: - better-sqlite3 @@ -7821,15 +6347,12 @@ packages: dev: true /@serverless-stack/node@1.18.4: - resolution: - { - integrity: sha512-j2/Iolg9HOdFUDQV6AFT8TK0cVH4KKeylO7BnBeVI6c5qObmOOSyYnhuruInJBrRb+rJqHxd3+dF7ZHafRAj4A==, - } - dependencies: - "@aws-sdk/client-lambda": 3.43.0 - "@aws-sdk/client-ssm": 3.43.0 - "@graphql-tools/schema": 8.5.1(graphql@16.6.0) - "@tsconfig/node14": 1.0.3 + resolution: {integrity: sha512-j2/Iolg9HOdFUDQV6AFT8TK0cVH4KKeylO7BnBeVI6c5qObmOOSyYnhuruInJBrRb+rJqHxd3+dF7ZHafRAj4A==} + dependencies: + '@aws-sdk/client-lambda': 3.43.0 + '@aws-sdk/client-ssm': 3.43.0 + '@graphql-tools/schema': 8.5.1(graphql@16.6.0) + '@tsconfig/node14': 1.0.3 aws-jwt-verify: 2.1.3 aws-sdk: 2.1314.0 fast-jwt: 1.7.2 @@ -7840,17 +6363,14 @@ packages: dev: false /@serverless-stack/resources@1.18.4: - resolution: - { - integrity: sha512-rryGU74daEYut9ZCvji0SjanKnLEgGAjzQj3LiFCZ6xzty+stR7cJtbfbk/M0rta/tG8vjzVr2xZ/qLUYjdJqg==, - } - dependencies: - "@aws-cdk/aws-apigatewayv2-alpha": 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) - "@aws-cdk/aws-apigatewayv2-authorizers-alpha": 2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154) - "@aws-cdk/aws-apigatewayv2-integrations-alpha": 2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154) - "@aws-cdk/aws-appsync-alpha": 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) - "@aws-sdk/client-codebuild": 3.319.0 - "@serverless-stack/core": 1.18.4 + resolution: {integrity: sha512-rryGU74daEYut9ZCvji0SjanKnLEgGAjzQj3LiFCZ6xzty+stR7cJtbfbk/M0rta/tG8vjzVr2xZ/qLUYjdJqg==} + dependencies: + '@aws-cdk/aws-apigatewayv2-alpha': 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) + '@aws-cdk/aws-apigatewayv2-authorizers-alpha': 2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154) + '@aws-cdk/aws-apigatewayv2-integrations-alpha': 2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154) + '@aws-cdk/aws-appsync-alpha': 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) + '@aws-sdk/client-codebuild': 3.319.0 + '@serverless-stack/core': 1.18.4 archiver: 5.3.1 aws-cdk-lib: 2.50.0(constructs@10.1.154) chalk: 4.1.2 @@ -7874,53 +6394,38 @@ packages: dev: true /@sinclair/typebox@0.24.51: - resolution: - { - integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==, - } + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} dev: true /@sinclair/typebox@0.25.21: - resolution: - { - integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==, - } + resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==} dev: true /@sinonjs/commons@2.0.0: - resolution: - { - integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==, - } + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true /@sinonjs/fake-timers@10.0.2: - resolution: - { - integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==, - } + resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: - "@sinonjs/commons": 2.0.0 + '@sinonjs/commons': 2.0.0 dev: true /@slack/bolt@3.12.2: - resolution: - { - integrity: sha512-Rv5apx14Nx25ho7MHigZcmYG+P/TzKB4MEdY/UDM7ntCCmTBdRd5d+teERmGPNalFjz/tEfQ5bw+Z8zZjHIOXA==, - } - engines: { node: ">=12.13.0", npm: ">=6.12.0" } - dependencies: - "@slack/logger": 3.0.0 - "@slack/oauth": 2.6.0 - "@slack/socket-mode": 1.3.2 - "@slack/types": 2.8.0 - "@slack/web-api": 6.8.1 - "@types/express": 4.17.17 - "@types/node": 18.11.8 - "@types/promise.allsettled": 1.0.3 - "@types/tsscmp": 1.0.0 + resolution: {integrity: sha512-Rv5apx14Nx25ho7MHigZcmYG+P/TzKB4MEdY/UDM7ntCCmTBdRd5d+teERmGPNalFjz/tEfQ5bw+Z8zZjHIOXA==} + engines: {node: '>=12.13.0', npm: '>=6.12.0'} + dependencies: + '@slack/logger': 3.0.0 + '@slack/oauth': 2.6.0 + '@slack/socket-mode': 1.3.2 + '@slack/types': 2.8.0 + '@slack/web-api': 6.8.1 + '@types/express': 4.17.17 + '@types/node': 18.11.8 + '@types/promise.allsettled': 1.0.3 + '@types/tsscmp': 1.0.0 axios: 0.26.1 express: 4.18.2 please-upgrade-node: 3.2.0 @@ -7935,26 +6440,20 @@ packages: dev: false /@slack/logger@3.0.0: - resolution: - { - integrity: sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==, - } - engines: { node: ">= 12.13.0", npm: ">= 6.12.0" } + resolution: {integrity: sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==} + engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 dev: false /@slack/oauth@2.6.0: - resolution: - { - integrity: sha512-t75jfYUoVVq4x9TnJrNn5VQRfr9n/3Fvuq3M6gf3URmKCvm/kQyZGp0Ff8AK/dzdYYWKDfSVD9GQImhF578MZA==, - } - engines: { node: ">=12.13.0", npm: ">=6.12.0" } - dependencies: - "@slack/logger": 3.0.0 - "@slack/web-api": 6.8.1 - "@types/jsonwebtoken": 8.5.9 - "@types/node": 18.13.0 + resolution: {integrity: sha512-t75jfYUoVVq4x9TnJrNn5VQRfr9n/3Fvuq3M6gf3URmKCvm/kQyZGp0Ff8AK/dzdYYWKDfSVD9GQImhF578MZA==} + engines: {node: '>=12.13.0', npm: '>=6.12.0'} + dependencies: + '@slack/logger': 3.0.0 + '@slack/web-api': 6.8.1 + '@types/jsonwebtoken': 8.5.9 + '@types/node': 18.13.0 jsonwebtoken: 9.0.0 lodash.isstring: 4.0.1 transitivePeerDependencies: @@ -7962,17 +6461,14 @@ packages: dev: false /@slack/socket-mode@1.3.2: - resolution: - { - integrity: sha512-6LiwYE6k4DNbnctZZSLfERiOzWngAvXogxQEYzUkxeZgh2GC6EdmRq6OEbZXOBe71/K66YVx05VfR7B4b1ScTQ==, - } - engines: { node: ">=12.13.0", npm: ">=6.12.0" } - dependencies: - "@slack/logger": 3.0.0 - "@slack/web-api": 6.8.1 - "@types/node": 18.13.0 - "@types/p-queue": 2.3.2 - "@types/ws": 7.4.7 + resolution: {integrity: sha512-6LiwYE6k4DNbnctZZSLfERiOzWngAvXogxQEYzUkxeZgh2GC6EdmRq6OEbZXOBe71/K66YVx05VfR7B4b1ScTQ==} + engines: {node: '>=12.13.0', npm: '>=6.12.0'} + dependencies: + '@slack/logger': 3.0.0 + '@slack/web-api': 6.8.1 + '@types/node': 18.13.0 + '@types/p-queue': 2.3.2 + '@types/ws': 7.4.7 eventemitter3: 3.1.2 finity: 0.5.4 p-cancelable: 1.1.0 @@ -7985,24 +6481,18 @@ packages: dev: false /@slack/types@2.8.0: - resolution: - { - integrity: sha512-ghdfZSF0b4NC9ckBA8QnQgC9DJw2ZceDq0BIjjRSv6XAZBXJdWgxIsYz0TYnWSiqsKZGH2ZXbj9jYABZdH3OSQ==, - } - engines: { node: ">= 12.13.0", npm: ">= 6.12.0" } + resolution: {integrity: sha512-ghdfZSF0b4NC9ckBA8QnQgC9DJw2ZceDq0BIjjRSv6XAZBXJdWgxIsYz0TYnWSiqsKZGH2ZXbj9jYABZdH3OSQ==} + engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} dev: false /@slack/web-api@6.8.1: - resolution: - { - integrity: sha512-eMPk2S99S613gcu7odSw/LV+Qxr8A+RXvBD0GYW510wJuTERiTjP5TgCsH8X09+lxSumbDE88wvWbuFuvGa74g==, - } - engines: { node: ">= 12.13.0", npm: ">= 6.12.0" } - dependencies: - "@slack/logger": 3.0.0 - "@slack/types": 2.8.0 - "@types/is-stream": 1.1.0 - "@types/node": 18.13.0 + resolution: {integrity: sha512-eMPk2S99S613gcu7odSw/LV+Qxr8A+RXvBD0GYW510wJuTERiTjP5TgCsH8X09+lxSumbDE88wvWbuFuvGa74g==} + engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} + dependencies: + '@slack/logger': 3.0.0 + '@slack/types': 2.8.0 + '@types/is-stream': 1.1.0 + '@types/node': 18.13.0 axios: 0.27.2 eventemitter3: 3.1.2 form-data: 2.5.1 @@ -8015,675 +6505,447 @@ packages: dev: false /@swc/core-darwin-arm64@1.3.35: - resolution: - { - integrity: sha512-zQUFkHx4gZpu0uo2IspvPnKsz8bsdXd5bC33xwjtoAI1cpLerDyqo4v2zIahEp+FdKZjyVsLHtfJiQiA1Qka3A==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-zQUFkHx4gZpu0uo2IspvPnKsz8bsdXd5bC33xwjtoAI1cpLerDyqo4v2zIahEp+FdKZjyVsLHtfJiQiA1Qka3A==} + engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true /@swc/core-darwin-x64@1.3.35: - resolution: - { - integrity: sha512-oOSkSGWtALovaw22lNevKD434OQTPf8X+dVPvPMrJXJpJ34dWDlFWpLntoc+arvKLNZ7LQmTuk8rR1hkrAY7cw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oOSkSGWtALovaw22lNevKD434OQTPf8X+dVPvPMrJXJpJ34dWDlFWpLntoc+arvKLNZ7LQmTuk8rR1hkrAY7cw==} + engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true /@swc/core-linux-arm-gnueabihf@1.3.35: - resolution: - { - integrity: sha512-Yie8k00O6O8BCATS/xeKStquV4OYSskUGRDXBQVDw1FrE23PHaSeHCgg4q6iNZjJzXCOJbaTCKnYoIDn9DMf7A==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Yie8k00O6O8BCATS/xeKStquV4OYSskUGRDXBQVDw1FrE23PHaSeHCgg4q6iNZjJzXCOJbaTCKnYoIDn9DMf7A==} + engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true /@swc/core-linux-arm64-gnu@1.3.35: - resolution: - { - integrity: sha512-Zlv3WHa/4x2p51HSvjUWXHfSe1Gl2prqImUZJc8NZOlj75BFzVuR0auhQ+LbwvIQ3gaA1LODX9lyS9wXL3yjxA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Zlv3WHa/4x2p51HSvjUWXHfSe1Gl2prqImUZJc8NZOlj75BFzVuR0auhQ+LbwvIQ3gaA1LODX9lyS9wXL3yjxA==} + engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true /@swc/core-linux-arm64-musl@1.3.35: - resolution: - { - integrity: sha512-u6tCYsrSyZ8U+4jLMA/O82veBfLy2aUpn51WxQaeH7wqZGy9TGSJXoO8vWxARQ6b72vjsnKDJHP4MD8hFwcctg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-u6tCYsrSyZ8U+4jLMA/O82veBfLy2aUpn51WxQaeH7wqZGy9TGSJXoO8vWxARQ6b72vjsnKDJHP4MD8hFwcctg==} + engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true /@swc/core-linux-x64-gnu@1.3.35: - resolution: - { - integrity: sha512-Dtxf2IbeH7XlNhP1Qt2/MvUPkpEbn7hhGfpSRs4ot8D3Vf5QEX4S/QtC1OsFWuciiYgHAT1Ybjt4xZic9DSkmA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Dtxf2IbeH7XlNhP1Qt2/MvUPkpEbn7hhGfpSRs4ot8D3Vf5QEX4S/QtC1OsFWuciiYgHAT1Ybjt4xZic9DSkmA==} + engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true /@swc/core-linux-x64-musl@1.3.35: - resolution: - { - integrity: sha512-4XavNJ60GprjpTiESCu5daJUnmErixPAqDitJSMu4TV32LNIE8G00S9pDLXinDTW1rgcGtQdq1NLkNRmwwovtg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-4XavNJ60GprjpTiESCu5daJUnmErixPAqDitJSMu4TV32LNIE8G00S9pDLXinDTW1rgcGtQdq1NLkNRmwwovtg==} + engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true /@swc/core-win32-arm64-msvc@1.3.35: - resolution: - { - integrity: sha512-dNGfKCUSX2M4qVyaS80Lyos0FkXyHRCvrdQ2Y4Hrg3FVokiuw3yY6fLohpUfQ5ws3n2A39dh7jGDeh34+l0sGA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-dNGfKCUSX2M4qVyaS80Lyos0FkXyHRCvrdQ2Y4Hrg3FVokiuw3yY6fLohpUfQ5ws3n2A39dh7jGDeh34+l0sGA==} + engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true /@swc/core-win32-ia32-msvc@1.3.35: - resolution: - { - integrity: sha512-ChuPSrDR+JBf7S7dEKPicnG8A3bM0uWPsW2vG+V2wH4iNfNxKVemESHosmYVeEZXqMpomNMvLyeHep1rjRsc0Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ChuPSrDR+JBf7S7dEKPicnG8A3bM0uWPsW2vG+V2wH4iNfNxKVemESHosmYVeEZXqMpomNMvLyeHep1rjRsc0Q==} + engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true /@swc/core-win32-x64-msvc@1.3.35: - resolution: - { - integrity: sha512-/RvphT4WfuGfIK84Ha0dovdPrKB1bW/mc+dtdmhv2E3EGkNc5FoueNwYmXWRimxnU7X0X7IkcRhyKB4G5DeAmg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-/RvphT4WfuGfIK84Ha0dovdPrKB1bW/mc+dtdmhv2E3EGkNc5FoueNwYmXWRimxnU7X0X7IkcRhyKB4G5DeAmg==} + engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true /@swc/core@1.3.35: - resolution: - { - integrity: sha512-KmiBin0XSVzJhzX19zTiCqmLslZ40Cl7zqskJcTDeIrRhfgKdiAsxzYUanJgMJIRjYtl9Kcg1V/Ip2o2wL8v3w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-KmiBin0XSVzJhzX19zTiCqmLslZ40Cl7zqskJcTDeIrRhfgKdiAsxzYUanJgMJIRjYtl9Kcg1V/Ip2o2wL8v3w==} + engines: {node: '>=10'} requiresBuild: true optionalDependencies: - "@swc/core-darwin-arm64": 1.3.35 - "@swc/core-darwin-x64": 1.3.35 - "@swc/core-linux-arm-gnueabihf": 1.3.35 - "@swc/core-linux-arm64-gnu": 1.3.35 - "@swc/core-linux-arm64-musl": 1.3.35 - "@swc/core-linux-x64-gnu": 1.3.35 - "@swc/core-linux-x64-musl": 1.3.35 - "@swc/core-win32-arm64-msvc": 1.3.35 - "@swc/core-win32-ia32-msvc": 1.3.35 - "@swc/core-win32-x64-msvc": 1.3.35 + '@swc/core-darwin-arm64': 1.3.35 + '@swc/core-darwin-x64': 1.3.35 + '@swc/core-linux-arm-gnueabihf': 1.3.35 + '@swc/core-linux-arm64-gnu': 1.3.35 + '@swc/core-linux-arm64-musl': 1.3.35 + '@swc/core-linux-x64-gnu': 1.3.35 + '@swc/core-linux-x64-musl': 1.3.35 + '@swc/core-win32-arm64-msvc': 1.3.35 + '@swc/core-win32-ia32-msvc': 1.3.35 + '@swc/core-win32-x64-msvc': 1.3.35 /@swc/jest@0.2.24(@swc/core@1.3.35): - resolution: - { - integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==, - } - engines: { npm: ">= 7.0.0" } + resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} + engines: {npm: '>= 7.0.0'} peerDependencies: - "@swc/core": "*" + '@swc/core': '*' dependencies: - "@jest/create-cache-key-function": 27.5.1 - "@swc/core": 1.3.35 + '@jest/create-cache-key-function': 27.5.1 + '@swc/core': 1.3.35 jsonc-parser: 3.2.0 dev: true /@tanstack/query-core@4.24.6: - resolution: - { - integrity: sha512-Tfru6YTDTCpX7dKVwHp/sosw/dNjEdzrncduUjIkQxn7n7u+74HT2ZrGtwwrU6Orws4x7zp3FKRqBPWVVhpx9w==, - } + resolution: {integrity: sha512-Tfru6YTDTCpX7dKVwHp/sosw/dNjEdzrncduUjIkQxn7n7u+74HT2ZrGtwwrU6Orws4x7zp3FKRqBPWVVhpx9w==} dev: false /@tanstack/react-query@4.24.6(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-pbJUVZCS4pcXS0kZiY+mVJ01ude0GrH5OXT2g9whcqSveRG/YVup/XdA9NdRpSMGkP2HxDRxxRNsTXkniWeIIA==, - } + resolution: {integrity: sha512-pbJUVZCS4pcXS0kZiY+mVJ01ude0GrH5OXT2g9whcqSveRG/YVup/XdA9NdRpSMGkP2HxDRxxRNsTXkniWeIIA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-native: "*" + react-native: '*' peerDependenciesMeta: react-dom: optional: true react-native: optional: true dependencies: - "@tanstack/query-core": 4.24.6 + '@tanstack/query-core': 4.24.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) dev: false /@tootallnate/once@1.1.2: - resolution: - { - integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} dev: true /@tootallnate/once@2.0.0: - resolution: - { - integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} dev: true /@trpc/server@9.27.3: - resolution: - { - integrity: sha512-RHWD9xjE+A9UaQCVYkqjl0sbGaHfvlUqJH3e1I57F2ztJbMeFYoP47pVgjkg0CLYSuRDa3imtD4dVDZ4DcODjQ==, - } + resolution: {integrity: sha512-RHWD9xjE+A9UaQCVYkqjl0sbGaHfvlUqJH3e1I57F2ztJbMeFYoP47pVgjkg0CLYSuRDa3imtD4dVDZ4DcODjQ==} dev: true /@tsconfig/node10@1.0.9: - resolution: - { - integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==, - } + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} /@tsconfig/node12@1.0.11: - resolution: - { - integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==, - } + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} /@tsconfig/node14@1.0.3: - resolution: - { - integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==, - } + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} /@tsconfig/node16@1.0.3: - resolution: - { - integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==, - } + resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} /@tsconfig/node18@1.0.1: - resolution: - { - integrity: sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA==, - } + resolution: {integrity: sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA==} dev: true /@tshttp/status@2.0.0: - resolution: - { - integrity: sha512-oJOTL/eZ48CSTlvov5rkdR8gTaBivMyz1+gcoFFTBuQqUpUstAhWOjMASlconIrz0ZuhGcSGE25fSkx1uOJQYw==, - } - engines: { node: ">=8.10" } + resolution: {integrity: sha512-oJOTL/eZ48CSTlvov5rkdR8gTaBivMyz1+gcoFFTBuQqUpUstAhWOjMASlconIrz0ZuhGcSGE25fSkx1uOJQYw==} + engines: {node: '>=8.10'} dev: true /@types/aws-lambda@8.10.108: - resolution: - { - integrity: sha512-1yh1W1WoqK3lGHy+V/Fi55zobxrDHUUsluCWdMlOXkCvtsCmHPXOG+CQ2STIL4B1g6xi6I6XzxaF8V9+zeIFLA==, - } + resolution: {integrity: sha512-1yh1W1WoqK3lGHy+V/Fi55zobxrDHUUsluCWdMlOXkCvtsCmHPXOG+CQ2STIL4B1g6xi6I6XzxaF8V9+zeIFLA==} dev: true /@types/aws-lambda@8.10.110: - resolution: - { - integrity: sha512-r6egf2Cwv/JaFTTrF9OXFVUB3j/SXTgM9BwrlbBRjWAa2Tu6GWoDoLflppAZ8uSfbUJdXvC7Br3DjuN9pQ2NUQ==, - } + resolution: {integrity: sha512-r6egf2Cwv/JaFTTrF9OXFVUB3j/SXTgM9BwrlbBRjWAa2Tu6GWoDoLflppAZ8uSfbUJdXvC7Br3DjuN9pQ2NUQ==} dev: true /@types/babel__core@7.20.0: - resolution: - { - integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==, - } + resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - "@babel/parser": 7.21.4 - "@babel/types": 7.21.4 - "@types/babel__generator": 7.6.4 - "@types/babel__template": 7.4.1 - "@types/babel__traverse": 7.18.3 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.18.3 dev: true /@types/babel__generator@7.6.4: - resolution: - { - integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==, - } + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - "@babel/types": 7.21.4 + '@babel/types': 7.21.4 dev: true /@types/babel__template@7.4.1: - resolution: - { - integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==, - } + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - "@babel/parser": 7.21.4 - "@babel/types": 7.21.4 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 dev: true /@types/babel__traverse@7.18.3: - resolution: - { - integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==, - } + resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - "@babel/types": 7.21.4 + '@babel/types': 7.21.4 dev: true /@types/body-parser@1.19.2: - resolution: - { - integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==, - } + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: - "@types/connect": 3.4.35 - "@types/node": 18.13.0 + '@types/connect': 3.4.35 + '@types/node': 18.13.0 /@types/chai-subset@1.3.3: - resolution: - { - integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==, - } + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: - "@types/chai": 4.3.4 + '@types/chai': 4.3.4 dev: true /@types/chai@4.3.4: - resolution: - { - integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==, - } + resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} dev: true /@types/connect@3.4.35: - resolution: - { - integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==, - } + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 /@types/express-serve-static-core@4.17.33: - resolution: - { - integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==, - } + resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - "@types/node": 18.13.0 - "@types/qs": 6.9.7 - "@types/range-parser": 1.2.4 + '@types/node': 18.13.0 + '@types/qs': 6.9.7 + '@types/range-parser': 1.2.4 /@types/express@4.17.17: - resolution: - { - integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==, - } + resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: - "@types/body-parser": 1.19.2 - "@types/express-serve-static-core": 4.17.33 - "@types/qs": 6.9.7 - "@types/serve-static": 1.15.0 + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 4.17.33 + '@types/qs': 6.9.7 + '@types/serve-static': 1.15.0 /@types/graceful-fs@4.1.6: - resolution: - { - integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==, - } + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 dev: true /@types/inquirer@8.2.5: - resolution: - { - integrity: sha512-QXlzybid60YtAwfgG3cpykptRYUx2KomzNutMlWsQC64J/WG/gQSl+P4w7A21sGN0VIxRVava4rgnT7FQmFCdg==, - } + resolution: {integrity: sha512-QXlzybid60YtAwfgG3cpykptRYUx2KomzNutMlWsQC64J/WG/gQSl+P4w7A21sGN0VIxRVava4rgnT7FQmFCdg==} dependencies: - "@types/through": 0.0.30 + '@types/through': 0.0.30 dev: true /@types/is-stream@1.1.0: - resolution: - { - integrity: sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==, - } + resolution: {integrity: sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==} dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 dev: false /@types/istanbul-lib-coverage@2.0.4: - resolution: - { - integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==, - } + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true /@types/istanbul-lib-report@3.0.0: - resolution: - { - integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==, - } + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: - "@types/istanbul-lib-coverage": 2.0.4 + '@types/istanbul-lib-coverage': 2.0.4 dev: true /@types/istanbul-reports@3.0.1: - resolution: - { - integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==, - } + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: - "@types/istanbul-lib-report": 3.0.0 + '@types/istanbul-lib-report': 3.0.0 dev: true /@types/jest@29.4.0: - resolution: - { - integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==, - } + resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} dependencies: expect: 29.4.2 pretty-format: 29.4.2 dev: true /@types/json-schema@7.0.11: - resolution: - { - integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==, - } + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true /@types/json5@0.0.29: - resolution: - { - integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, - } + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true /@types/jsonwebtoken@8.5.9: - resolution: - { - integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==, - } + resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 dev: false /@types/mime@3.0.1: - resolution: - { - integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==, - } + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} /@types/minimatch@3.0.5: - resolution: - { - integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==, - } + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true /@types/minimatch@5.1.2: - resolution: - { - integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, - } + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true /@types/minimist@1.2.2: - resolution: - { - integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==, - } + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true /@types/ms@0.7.31: - resolution: - { - integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==, - } + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true /@types/node@18.11.8: - resolution: - { - integrity: sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A==, - } + resolution: {integrity: sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A==} dev: false /@types/node@18.13.0: - resolution: - { - integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==, - } + resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==} /@types/normalize-package-data@2.4.1: - resolution: - { - integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==, - } + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true /@types/p-queue@2.3.2: - resolution: - { - integrity: sha512-eKAv5Ql6k78dh3ULCsSBxX6bFNuGjTmof5Q/T6PiECDq0Yf8IIn46jCyp3RJvCi8owaEmm3DZH1PEImjBMd/vQ==, - } + resolution: {integrity: sha512-eKAv5Ql6k78dh3ULCsSBxX6bFNuGjTmof5Q/T6PiECDq0Yf8IIn46jCyp3RJvCi8owaEmm3DZH1PEImjBMd/vQ==} dev: false /@types/parse-json@4.0.0: - resolution: - { - integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==, - } + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true /@types/prettier@2.7.2: - resolution: - { - integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==, - } + resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true /@types/promise.allsettled@1.0.3: - resolution: - { - integrity: sha512-b/IFHHTkYkTqu41IH9UtpICwqrpKj2oNlb4KHPzFQDMiz+h1BgAeATeO0/XTph4+UkH9W2U0E4B4j64KWOovag==, - } + resolution: {integrity: sha512-b/IFHHTkYkTqu41IH9UtpICwqrpKj2oNlb4KHPzFQDMiz+h1BgAeATeO0/XTph4+UkH9W2U0E4B4j64KWOovag==} dev: false /@types/prop-types@15.7.5: - resolution: - { - integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==, - } + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true /@types/qs@6.9.7: - resolution: - { - integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==, - } + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} /@types/range-parser@1.2.4: - resolution: - { - integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==, - } + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} /@types/react-dom@18.0.10: - resolution: - { - integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==, - } + resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} dependencies: - "@types/react": 18.0.28 + '@types/react': 18.0.28 dev: true /@types/react@18.0.28: - resolution: - { - integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==, - } + resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==} dependencies: - "@types/prop-types": 15.7.5 - "@types/scheduler": 0.16.2 + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 csstype: 3.1.1 dev: true /@types/retry@0.12.0: - resolution: - { - integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==, - } + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} dev: false /@types/scheduler@0.16.2: - resolution: - { - integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==, - } + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} dev: true /@types/semver@7.3.13: - resolution: - { - integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==, - } + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true /@types/serve-static@1.15.0: - resolution: - { - integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==, - } + resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: - "@types/mime": 3.0.1 - "@types/node": 18.13.0 + '@types/mime': 3.0.1 + '@types/node': 18.13.0 /@types/stack-utils@2.0.1: - resolution: - { - integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==, - } + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true /@types/through@0.0.30: - resolution: - { - integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==, - } + resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 dev: true /@types/tsscmp@1.0.0: - resolution: - { - integrity: sha512-rj18XR6c4Ohds86Lq8MI1NMRrXes4eLo4H06e5bJyKucE1rXGsfBBbFGD2oDC+DSufQCpnU3TTW7QAiwLx+7Yw==, - } + resolution: {integrity: sha512-rj18XR6c4Ohds86Lq8MI1NMRrXes4eLo4H06e5bJyKucE1rXGsfBBbFGD2oDC+DSufQCpnU3TTW7QAiwLx+7Yw==} /@types/ws@7.4.7: - resolution: - { - integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==, - } + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 dev: false /@types/yargs-parser@21.0.0: - resolution: - { - integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==, - } + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true /@types/yargs@16.0.5: - resolution: - { - integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==, - } + resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} dependencies: - "@types/yargs-parser": 21.0.0 + '@types/yargs-parser': 21.0.0 dev: true /@types/yargs@17.0.17: - resolution: - { - integrity: sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g==, - } + resolution: {integrity: sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g==} dependencies: - "@types/yargs-parser": 21.0.0 + '@types/yargs-parser': 21.0.0 dev: true /@types/yargs@17.0.20: - resolution: - { - integrity: sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A==, - } + resolution: {integrity: sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A==} dependencies: - "@types/yargs-parser": 21.0.0 + '@types/yargs-parser': 21.0.0 dev: true /@types/yargs@17.0.22: - resolution: - { - integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==, - } + resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} dependencies: - "@types/yargs-parser": 21.0.0 + '@types/yargs-parser': 21.0.0 dev: true /@typescript-eslint/eslint-plugin@5.52.0(@typescript-eslint/parser@5.52.0)(eslint@8.34.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - "@typescript-eslint/parser": ^5.0.0 + '@typescript-eslint/parser': ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/parser": 5.52.0(eslint@8.34.0)(typescript@4.9.5) - "@typescript-eslint/scope-manager": 5.52.0 - "@typescript-eslint/type-utils": 5.52.0(eslint@8.34.0)(typescript@4.9.5) - "@typescript-eslint/utils": 5.52.0(eslint@8.34.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.52.0(eslint@8.34.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.52.0 + '@typescript-eslint/type-utils': 5.52.0(eslint@8.34.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.52.0(eslint@8.34.0)(typescript@4.9.5) debug: 4.3.4 eslint: 8.34.0 grapheme-splitter: 1.0.4 @@ -8698,21 +6960,18 @@ packages: dev: true /@typescript-eslint/parser@5.52.0(eslint@8.34.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/scope-manager": 5.52.0 - "@typescript-eslint/types": 5.52.0 - "@typescript-eslint/typescript-estree": 5.52.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.52.0 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/typescript-estree': 5.52.0(typescript@4.9.5) debug: 4.3.4 eslint: 8.34.0 typescript: 4.9.5 @@ -8721,31 +6980,25 @@ packages: dev: true /@typescript-eslint/scope-manager@5.52.0: - resolution: - { - integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - "@typescript-eslint/types": 5.52.0 - "@typescript-eslint/visitor-keys": 5.52.0 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/visitor-keys': 5.52.0 dev: true /@typescript-eslint/type-utils@5.52.0(eslint@8.34.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - eslint: "*" - typescript: "*" + eslint: '*' + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/typescript-estree": 5.52.0(typescript@4.9.5) - "@typescript-eslint/utils": 5.52.0(eslint@8.34.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.52.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.52.0(eslint@8.34.0)(typescript@4.9.5) debug: 4.3.4 eslint: 8.34.0 tsutils: 3.21.0(typescript@4.9.5) @@ -8755,27 +7008,21 @@ packages: dev: true /@typescript-eslint/types@5.52.0: - resolution: - { - integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /@typescript-eslint/typescript-estree@5.52.0(typescript@4.9.5): - resolution: - { - integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/types": 5.52.0 - "@typescript-eslint/visitor-keys": 5.52.0 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/visitor-keys': 5.52.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -8787,19 +7034,16 @@ packages: dev: true /@typescript-eslint/utils@5.52.0(eslint@8.34.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - "@types/json-schema": 7.0.11 - "@types/semver": 7.3.13 - "@typescript-eslint/scope-manager": 5.52.0 - "@typescript-eslint/types": 5.52.0 - "@typescript-eslint/typescript-estree": 5.52.0(typescript@4.9.5) + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.52.0 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/typescript-estree': 5.52.0(typescript@4.9.5) eslint: 8.34.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@8.34.0) @@ -8810,28 +7054,22 @@ packages: dev: true /@typescript-eslint/visitor-keys@5.52.0: - resolution: - { - integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - "@typescript-eslint/types": 5.52.0 + '@typescript-eslint/types': 5.52.0 eslint-visitor-keys: 3.3.0 dev: true /@vitejs/plugin-react@3.1.0(vite@4.1.1): - resolution: - { - integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.1.0-beta.0 dependencies: - "@babel/core": 7.20.12 - "@babel/plugin-transform-react-jsx-self": 7.18.6(@babel/core@7.20.12) - "@babel/plugin-transform-react-jsx-source": 7.19.6(@babel/core@7.20.12) + '@babel/core': 7.20.12 + '@babel/plugin-transform-react-jsx-self': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.20.12) magic-string: 0.27.0 react-refresh: 0.14.0 vite: 4.1.1(@types/node@18.13.0) @@ -8840,37 +7078,25 @@ packages: dev: true /@yarnpkg/lockfile@1.1.0: - resolution: - { - integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==, - } + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} /@yarnpkg/parsers@3.0.0-rc.39: - resolution: - { - integrity: sha512-BsD4zq3EVmaHqlynXTceNuEFAtrfToV4fI9GA54moKlWZL4Eb2eXrhgf1jV2nMYx18SZxYO4Jc5Kf1sCDNRjOg==, - } - engines: { node: ">=14.15.0" } + resolution: {integrity: sha512-BsD4zq3EVmaHqlynXTceNuEFAtrfToV4fI9GA54moKlWZL4Eb2eXrhgf1jV2nMYx18SZxYO4Jc5Kf1sCDNRjOg==} + engines: {node: '>=14.15.0'} dependencies: js-yaml: 3.14.1 tslib: 2.5.0 dev: true /@zkochan/js-yaml@0.0.6: - resolution: - { - integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==, - } + resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==} hasBin: true dependencies: argparse: 2.0.1 dev: true /JSONStream@1.3.5: - resolution: - { - integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==, - } + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: jsonparse: 1.3.1 @@ -8878,27 +7104,18 @@ packages: dev: true /abbrev@1.1.1: - resolution: - { - integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==, - } + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true /accepts@1.3.8: - resolution: - { - integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} dependencies: mime-types: 2.1.35 negotiator: 0.6.3 /acorn-jsx@5.3.2(acorn@8.8.2): - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -8906,50 +7123,32 @@ packages: dev: true /acorn-walk@8.2.0: - resolution: - { - integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} /acorn@8.8.1: - resolution: - { - integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + engines: {node: '>=0.4.0'} hasBin: true /acorn@8.8.2: - resolution: - { - integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} hasBin: true dev: true /add-stream@1.0.0: - resolution: - { - integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==, - } + resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} dev: true /address@1.2.2: - resolution: - { - integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} dev: true /agent-base@6.0.2: - resolution: - { - integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==, - } - engines: { node: ">= 6.0.0" } + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} dependencies: debug: 4.3.4 transitivePeerDependencies: @@ -8957,11 +7156,8 @@ packages: dev: true /agentkeepalive@4.2.1: - resolution: - { - integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==, - } - engines: { node: ">= 8.0.0" } + resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} + engines: {node: '>= 8.0.0'} dependencies: debug: 4.3.4 depd: 1.1.2 @@ -8971,21 +7167,15 @@ packages: dev: true /aggregate-error@3.1.0: - resolution: - { - integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 dev: true /ajv-formats@2.1.1(ajv@8.12.0): - resolution: - { - integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==, - } + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -8996,10 +7186,7 @@ packages: dev: true /ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, - } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -9008,10 +7195,7 @@ packages: dev: true /ajv@8.12.0: - resolution: - { - integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, - } + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -9020,110 +7204,71 @@ packages: dev: true /ansi-colors@4.1.3: - resolution: - { - integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} dev: true /ansi-escapes@4.3.2: - resolution: - { - integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.21.3 /ansi-regex@2.1.1: - resolution: - { - integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} dev: true /ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} /ansi-regex@6.0.1: - resolution: - { - integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} /ansi-styles@3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true /ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 /ansi-styles@5.2.0: - resolution: - { - integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} dev: true /ansi-styles@6.2.1: - resolution: - { - integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} dev: true /anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 dev: true /aproba@1.2.0: - resolution: - { - integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==, - } + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} dev: true /aproba@2.0.0: - resolution: - { - integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==, - } + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} dev: true /archiver-utils@2.1.0: - resolution: - { - integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} dependencies: glob: 7.2.3 graceful-fs: 4.2.11 @@ -9138,11 +7283,8 @@ packages: dev: true /archiver@5.3.1: - resolution: - { - integrity: sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==} + engines: {node: '>= 10'} dependencies: archiver-utils: 2.1.0 async: 3.2.4 @@ -9154,74 +7296,47 @@ packages: dev: true /are-we-there-yet@1.1.7: - resolution: - { - integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==, - } + resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} dependencies: delegates: 1.0.0 readable-stream: 2.3.8 dev: true /are-we-there-yet@3.0.1: - resolution: - { - integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + 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.2 dev: true /arg@4.1.3: - resolution: - { - integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, - } + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} /argparse@1.0.10: - resolution: - { - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, - } + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 /argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true /array-differ@3.0.0: - resolution: - { - integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} dev: true /array-flatten@1.1.1: - resolution: - { - integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, - } + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} /array-ify@1.0.0: - resolution: - { - integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==, - } + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true /array-includes@3.1.6: - resolution: - { - integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -9231,19 +7346,13 @@ packages: dev: true /array-union@2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} dev: true /array.prototype.flat@1.3.1: - resolution: - { - integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -9252,11 +7361,8 @@ packages: dev: true /array.prototype.flatmap@1.3.1: - resolution: - { - integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -9265,11 +7371,8 @@ packages: dev: true /array.prototype.map@1.0.5: - resolution: - { - integrity: sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -9279,10 +7382,7 @@ packages: dev: false /array.prototype.tosorted@1.1.1: - resolution: - { - integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==, - } + resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -9292,33 +7392,21 @@ packages: dev: true /arrify@1.0.1: - resolution: - { - integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} dev: true /arrify@2.0.1: - resolution: - { - integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} dev: true /asap@2.0.6: - resolution: - { - integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==, - } + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true /asn1.js@5.4.1: - resolution: - { - integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==, - } + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: bn.js: 4.12.0 inherits: 2.0.4 @@ -9327,10 +7415,7 @@ packages: dev: false /assert@2.0.0: - resolution: - { - integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==, - } + resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} dependencies: es6-object-assign: 1.1.0 is-nan: 1.3.2 @@ -9339,91 +7424,58 @@ packages: dev: false /assertion-error@1.1.0: - resolution: - { - integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, - } + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true /ast-types@0.15.2: - resolution: - { - integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} + engines: {node: '>=4'} dependencies: tslib: 2.5.0 dev: false /astral-regex@2.0.0: - resolution: - { - integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} dev: true /async-retry@1.3.3: - resolution: - { - integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==, - } + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} dependencies: retry: 0.13.1 dev: true /async@1.5.2: - resolution: - { - integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==, - } + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} dev: true /async@3.2.4: - resolution: - { - integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==, - } + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: true /asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, - } + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} /at-least-node@1.0.0: - resolution: - { - integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, - } - engines: { node: ">= 4.0.0" } + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} /atomically@1.7.0: - resolution: - { - integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==, - } - engines: { node: ">=10.12.0" } + resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} + engines: {node: '>=10.12.0'} dev: true /available-typed-arrays@1.0.5: - resolution: - { - integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} /aws-cdk-lib@2.50.0(constructs@10.1.154): - resolution: - { - integrity: sha512-deDbZTI7oyu3rqUyqjwhP6tnUO8MD70lE98yR65xiYty4yXBpsWKbeH3s1wNLpLAWS3hWJYyMtjZ4ZfC35NtVg==, - } - engines: { node: ">= 14.15.0" } + resolution: {integrity: sha512-deDbZTI7oyu3rqUyqjwhP6tnUO8MD70lE98yR65xiYty4yXBpsWKbeH3s1wNLpLAWS3hWJYyMtjZ4ZfC35NtVg==} + engines: {node: '>= 14.15.0'} peerDependencies: constructs: ^10.0.0 dependencies: - "@balena/dockerignore": 1.0.2 + '@balena/dockerignore': 1.0.2 case: 1.6.3 constructs: 10.1.154 fs-extra: 9.1.0 @@ -9434,7 +7486,7 @@ packages: semver: 7.3.8 yaml: 1.10.2 bundledDependencies: - - "@balena/dockerignore" + - '@balena/dockerignore' - case - fs-extra - ignore @@ -9445,48 +7497,33 @@ packages: - yaml /aws-cdk@2.50.0: - resolution: - { - integrity: sha512-55vmKTf2DZRqioumVfXn+S0H9oAbpRK3HFHY8EjZ5ykR5tq2+XiMWEZkYduX2HJhVAeHJJIS6h+Okk3smZjeqw==, - } - engines: { node: ">= 14.15.0" } + resolution: {integrity: sha512-55vmKTf2DZRqioumVfXn+S0H9oAbpRK3HFHY8EjZ5ykR5tq2+XiMWEZkYduX2HJhVAeHJJIS6h+Okk3smZjeqw==} + engines: {node: '>= 14.15.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true /aws-cdk@2.64.0: - resolution: - { - integrity: sha512-iXkvVeYKt6Glboeicrb3QxC6K6o25+zitM/UTfgVzDlKEvC4hwQp1KqXy/caN7SfA6X2N0LJmXfC99T4cvIH0A==, - } - engines: { node: ">= 14.15.0" } + resolution: {integrity: sha512-iXkvVeYKt6Glboeicrb3QxC6K6o25+zitM/UTfgVzDlKEvC4hwQp1KqXy/caN7SfA6X2N0LJmXfC99T4cvIH0A==} + engines: {node: '>= 14.15.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 /aws-embedded-metrics@4.1.0: - resolution: - { - integrity: sha512-Yiscee2EfyiczIy9GFOSR0qzqD6kcD0HjQuBJRyO842SkKoFlxzOo/99OVEmg2odUS5XI8oxiS7HO0WTynkteg==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-Yiscee2EfyiczIy9GFOSR0qzqD6kcD0HjQuBJRyO842SkKoFlxzOo/99OVEmg2odUS5XI8oxiS7HO0WTynkteg==} + engines: {node: '>=10.0.0'} dependencies: - "@datastructures-js/heap": 4.3.1 + '@datastructures-js/heap': 4.3.1 /aws-jwt-verify@2.1.3: - resolution: - { - integrity: sha512-XAlt1IaQg9SRpuKPAhW1I1/E9Q63bPI/O+W5dcGniDwTJSbAUVZsH80XxeuADBCD2eIWEUlKOFfLmzhXZqt9tA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-XAlt1IaQg9SRpuKPAhW1I1/E9Q63bPI/O+W5dcGniDwTJSbAUVZsH80XxeuADBCD2eIWEUlKOFfLmzhXZqt9tA==} + engines: {node: '>=14.0.0'} dev: false /aws-lambda@1.0.7: - resolution: - { - integrity: sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==, - } + resolution: {integrity: sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==} hasBin: true dependencies: aws-sdk: 2.1314.0 @@ -9496,11 +7533,8 @@ packages: dev: false /aws-sdk@2.1314.0: - resolution: - { - integrity: sha512-2jsfvgtOQ6kRflaicn50ndME4YoIaBhlus/dZCExtWNXeu8ePh+eAtflsYs6aqIiRPKhCBLaqClzahWm7hC0XA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-2jsfvgtOQ6kRflaicn50ndME4YoIaBhlus/dZCExtWNXeu8ePh+eAtflsYs6aqIiRPKhCBLaqClzahWm7hC0XA==} + engines: {node: '>= 10.0.0'} dependencies: buffer: 4.9.2 events: 1.1.1 @@ -9514,10 +7548,7 @@ packages: xml2js: 0.4.19 /axios@0.26.1: - resolution: - { - integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, - } + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} dependencies: follow-redirects: 1.15.2 transitivePeerDependencies: @@ -9525,10 +7556,7 @@ packages: dev: false /axios@0.27.2: - resolution: - { - integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==, - } + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} dependencies: follow-redirects: 1.15.2 form-data: 4.0.0 @@ -9537,10 +7565,7 @@ packages: dev: false /axios@1.3.3: - resolution: - { - integrity: sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA==, - } + resolution: {integrity: sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA==} dependencies: follow-redirects: 1.15.2 form-data: 4.0.0 @@ -9550,17 +7575,14 @@ packages: dev: true /babel-jest@29.4.2(@babel/core@7.20.12): - resolution: - { - integrity: sha512-vcghSqhtowXPG84posYkkkzcZsdayFkubUgbE3/1tuGbX7AQtwCkkNA/wIbB0BMjuCPoqTkiDyKN7Ty7d3uwNQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-vcghSqhtowXPG84posYkkkzcZsdayFkubUgbE3/1tuGbX7AQtwCkkNA/wIbB0BMjuCPoqTkiDyKN7Ty7d3uwNQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - "@babel/core": ^7.8.0 + '@babel/core': ^7.8.0 dependencies: - "@babel/core": 7.20.12 - "@jest/transform": 29.4.2 - "@types/babel__core": 7.20.0 + '@babel/core': 7.20.12 + '@jest/transform': 29.4.2 + '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.4.2(@babel/core@7.20.12) chalk: 4.1.2 @@ -9571,15 +7593,12 @@ packages: dev: true /babel-plugin-istanbul@6.1.1: - resolution: - { - integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, - } - engines: { node: ">=8" } - dependencies: - "@babel/helper-plugin-utils": 7.20.2 - "@istanbuljs/load-nyc-config": 1.1.0 - "@istanbuljs/schema": 0.1.3 + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.20.2 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: @@ -9587,80 +7606,59 @@ packages: dev: true /babel-plugin-jest-hoist@29.4.2: - resolution: - { - integrity: sha512-5HZRCfMeWypFEonRbEkwWXtNS1sQK159LhRVyRuLzyfVBxDy/34Tr/rg4YVi0SScSJ4fqeaR/OIeceJ/LaQ0pQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-5HZRCfMeWypFEonRbEkwWXtNS1sQK159LhRVyRuLzyfVBxDy/34Tr/rg4YVi0SScSJ4fqeaR/OIeceJ/LaQ0pQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@babel/template": 7.20.7 - "@babel/types": 7.21.4 - "@types/babel__core": 7.20.0 - "@types/babel__traverse": 7.18.3 + '@babel/template': 7.20.7 + '@babel/types': 7.21.4 + '@types/babel__core': 7.20.0 + '@types/babel__traverse': 7.18.3 dev: true /babel-preset-current-node-syntax@1.0.1(@babel/core@7.20.12): - resolution: - { - integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==, - } + 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) + '@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@29.4.2(@babel/core@7.20.12): - resolution: - { - integrity: sha512-ecWdaLY/8JyfUDr0oELBMpj3R5I1L6ZqG+kRJmwqfHtLWuPrJStR0LUkvUhfykJWTsXXMnohsayN/twltBbDrQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ecWdaLY/8JyfUDr0oELBMpj3R5I1L6ZqG+kRJmwqfHtLWuPrJStR0LUkvUhfykJWTsXXMnohsayN/twltBbDrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.20.12 + '@babel/core': 7.20.12 babel-plugin-jest-hoist: 29.4.2 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.12) dev: true /balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base64-js@1.5.1: - resolution: - { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, - } + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} /before-after-hook@2.2.3: - resolution: - { - integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==, - } + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: true /bin-links@3.0.3: - resolution: - { - integrity: sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: cmd-shim: 5.0.0 mkdirp-infer-owner: 2.0.0 @@ -9671,28 +7669,19 @@ packages: dev: true /binary-extensions@2.2.0: - resolution: - { - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} dev: true /bl@4.1.0: - resolution: - { - integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, - } + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 /bl@5.1.0: - resolution: - { - integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==, - } + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} dependencies: buffer: 6.0.3 inherits: 2.0.4 @@ -9700,18 +7689,12 @@ packages: dev: false /bn.js@4.12.0: - resolution: - { - integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==, - } + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: false /body-parser@1.20.1: - resolution: - { - integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==, - } - engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 } + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -9729,44 +7712,29 @@ packages: - supports-color /bowser@2.11.0: - resolution: - { - integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==, - } + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} /brace-expansion@1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 /brace-expansion@2.0.1: - resolution: - { - integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, - } + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true /braces@3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: fill-range: 7.0.1 /browserslist@4.21.5: - resolution: - { - integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + 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.30001451 @@ -9776,124 +7744,82 @@ packages: dev: true /bs-logger@0.2.6: - resolution: - { - integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} dependencies: fast-json-stable-stringify: 2.1.0 dev: true /bser@2.1.1: - resolution: - { - integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, - } + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true /buffer-crc32@0.2.13: - resolution: - { - integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, - } + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true /buffer-equal-constant-time@1.0.1: - resolution: - { - integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==, - } + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} dev: false /buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, - } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true /buffer@4.9.2: - resolution: - { - integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==, - } + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 isarray: 1.0.0 /buffer@5.7.1: - resolution: - { - integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, - } + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 /buffer@6.0.3: - resolution: - { - integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, - } + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: false /builtins@1.0.3: - resolution: - { - integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==, - } + resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} dev: true /builtins@5.0.1: - resolution: - { - integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==, - } + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: semver: 7.5.0 dev: true /busboy@1.6.0: - resolution: - { - integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==, - } - engines: { node: ">=10.16.0" } + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 dev: false /byte-size@7.0.1: - resolution: - { - integrity: sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==} + engines: {node: '>=10'} dev: true /bytes@3.1.2: - resolution: - { - integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} /cacache@15.3.0: - resolution: - { - integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==, - } - engines: { node: ">= 10" } - dependencies: - "@npmcli/fs": 1.1.1 - "@npmcli/move-file": 1.1.2 + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 chownr: 2.0.0 fs-minipass: 2.1.0 glob: 7.2.3 @@ -9915,14 +7841,11 @@ packages: dev: true /cacache@16.1.3: - resolution: - { - integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } - dependencies: - "@npmcli/fs": 2.1.2 - "@npmcli/move-file": 2.0.1 + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 chownr: 2.0.0 fs-minipass: 2.1.0 glob: 8.1.0 @@ -9944,28 +7867,19 @@ packages: dev: true /call-bind@1.0.2: - resolution: - { - integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, - } + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 /callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} dev: true /camelcase-keys@6.2.2: - resolution: - { - integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 map-obj: 4.3.0 @@ -9973,41 +7887,26 @@ packages: dev: true /camelcase@5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} dev: true /camelcase@6.3.0: - resolution: - { - integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} dev: true /caniuse-lite@1.0.30001451: - resolution: - { - integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==, - } + resolution: {integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==} dev: true /case@1.6.3: - resolution: - { - integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} /chai@4.3.7: - resolution: - { - integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 check-error: 1.0.2 @@ -10019,11 +7918,8 @@ packages: dev: true /chalk@2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 @@ -10031,49 +7927,31 @@ packages: dev: true /chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 /chalk@5.2.0: - resolution: - { - integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==, - } - engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} /char-regex@1.0.2: - resolution: - { - integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} dev: true /chardet@0.7.0: - resolution: - { - integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, - } + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} /check-error@1.0.2: - resolution: - { - integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==, - } + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} dev: true /chokidar@3.5.3: - resolution: - { - integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, - } - engines: { node: ">= 8.10.0" } + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -10087,130 +7965,85 @@ packages: dev: true /chownr@2.0.0: - resolution: - { - integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} dev: true /ci-info@2.0.0: - resolution: - { - integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==, - } + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} /ci-info@3.8.0: - resolution: - { - integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} dev: true /cjs-module-lexer@1.2.2: - resolution: - { - integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==, - } + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true /clean-stack@2.2.0: - resolution: - { - integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} dev: true /cli-cursor@3.1.0: - resolution: - { - integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 /cli-cursor@4.0.0: - resolution: - { - integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: restore-cursor: 4.0.0 dev: false /cli-spinners@2.6.1: - resolution: - { - integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} + engines: {node: '>=6'} dev: true /cli-spinners@2.7.0: - resolution: - { - integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} + engines: {node: '>=6'} dev: false /cli-spinners@2.8.0: - resolution: - { - integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} + engines: {node: '>=6'} /cli-table3@0.6.3: - resolution: - { - integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==, - } - engines: { node: 10.* || >= 12.* } + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} dependencies: string-width: 4.2.3 optionalDependencies: - "@colors/colors": 1.5.0 + '@colors/colors': 1.5.0 dev: false /cli-truncate@2.1.0: - resolution: - { - integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 dev: true /cli-truncate@3.1.0: - resolution: - { - integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: slice-ansi: 5.0.0 string-width: 5.1.2 dev: true /cli-width@3.0.0: - resolution: - { - integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} /cliui@6.0.0: - resolution: - { - integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, - } + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -10218,10 +8051,7 @@ packages: dev: true /cliui@7.0.4: - resolution: - { - integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, - } + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -10229,22 +8059,16 @@ packages: dev: true /cliui@8.0.1: - resolution: - { - integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 /clone-deep@4.0.1: - resolution: - { - integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 @@ -10252,148 +8076,94 @@ packages: dev: true /clone@1.0.4: - resolution: - { - integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} /cmd-shim@5.0.0: - resolution: - { - integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: mkdirp-infer-owner: 2.0.0 dev: true /co@4.6.0: - resolution: - { - integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, - } - engines: { iojs: ">= 1.0.0", node: ">= 0.12.0" } + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true /code-point-at@1.1.0: - resolution: - { - integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} dev: true /collect-v8-coverage@1.0.1: - resolution: - { - integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==, - } + resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true /color-convert@1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, - } + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true /color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: ">=7.0.0" } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 /color-name@1.1.3: - resolution: - { - integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, - } + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true /color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} /color-support@1.1.3: - resolution: - { - integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==, - } + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true dev: true /colorette@2.0.19: - resolution: - { - integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==, - } + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true /columnify@1.6.0: - resolution: - { - integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==} + engines: {node: '>=8.0.0'} dependencies: strip-ansi: 6.0.1 wcwidth: 1.0.1 dev: true /combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 /commander@3.0.2: - resolution: - { - integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==, - } + resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} dev: false /commander@9.5.0: - resolution: - { - integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==, - } - engines: { node: ^12.20.0 || >=14 } + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} /common-ancestor-path@1.0.1: - resolution: - { - integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==, - } + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} dev: true /compare-func@2.0.0: - resolution: - { - integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==, - } + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true /compress-commons@4.1.1: - resolution: - { - integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==} + engines: {node: '>= 10'} dependencies: buffer-crc32: 0.2.13 crc32-stream: 4.0.2 @@ -10402,17 +8172,11 @@ packages: dev: true /concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} /concat-stream@2.0.0: - resolution: - { - integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==, - } - engines: { "0": node >= 6.0 } + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} dependencies: buffer-from: 1.1.2 inherits: 2.0.4 @@ -10421,11 +8185,8 @@ packages: dev: true /conf@10.2.0: - resolution: - { - integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} + engines: {node: '>=12'} dependencies: ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) @@ -10440,62 +8201,41 @@ packages: dev: true /config-chain@1.1.13: - resolution: - { - integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==, - } + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: ini: 1.3.8 proto-list: 1.2.4 dev: true /console-control-strings@1.1.0: - resolution: - { - integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==, - } + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: true /constructs@10.1.154: - resolution: - { - integrity: sha512-JStQT84+NhsfamESRExZoGzpq/f/gpq9xpzgtQNOzungs42Gy8kxjfU378MnVoRqwCHwk0vLN37HZjgH5tJo2A==, - } - engines: { node: ">= 14.17.0" } + resolution: {integrity: sha512-JStQT84+NhsfamESRExZoGzpq/f/gpq9xpzgtQNOzungs42Gy8kxjfU378MnVoRqwCHwk0vLN37HZjgH5tJo2A==} + engines: {node: '>= 14.17.0'} /content-disposition@0.5.4: - resolution: - { - integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 /content-type@1.0.5: - resolution: - { - integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} /conventional-changelog-angular@5.0.13: - resolution: - { - integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} + engines: {node: '>=10'} dependencies: compare-func: 2.0.0 q: 1.5.1 dev: true /conventional-changelog-core@4.2.4: - resolution: - { - integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==} + engines: {node: '>=10'} dependencies: add-stream: 1.0.0 conventional-changelog-writer: 5.0.1 @@ -10514,19 +8254,13 @@ packages: dev: true /conventional-changelog-preset-loader@2.3.4: - resolution: - { - integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==} + engines: {node: '>=10'} dev: true /conventional-changelog-writer@5.0.1: - resolution: - { - integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==} + engines: {node: '>=10'} hasBin: true dependencies: conventional-commits-filter: 2.0.7 @@ -10541,22 +8275,16 @@ packages: dev: true /conventional-commits-filter@2.0.7: - resolution: - { - integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==} + engines: {node: '>=10'} dependencies: lodash.ismatch: 4.4.0 modify-values: 1.0.1 dev: true /conventional-commits-parser@3.2.4: - resolution: - { - integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} + engines: {node: '>=10'} hasBin: true dependencies: JSONStream: 1.3.5 @@ -10568,11 +8296,8 @@ packages: dev: true /conventional-recommended-bump@6.1.0: - resolution: - { - integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==} + engines: {node: '>=10'} hasBin: true dependencies: concat-stream: 2.0.0 @@ -10586,47 +8311,29 @@ packages: dev: true /convert-source-map@1.9.0: - resolution: - { - integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, - } + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true /convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, - } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true /cookie-signature@1.0.6: - resolution: - { - integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==, - } + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} /cookie@0.5.0: - resolution: - { - integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} /core-util-is@1.0.3: - resolution: - { - integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, - } + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true /cosmiconfig@7.1.0: - resolution: - { - integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} dependencies: - "@types/parse-json": 4.0.0 + '@types/parse-json': 4.0.0 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 @@ -10634,36 +8341,24 @@ packages: dev: true /crc-32@1.2.2: - resolution: - { - integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} hasBin: true dev: true /crc32-stream@4.0.2: - resolution: - { - integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==} + engines: {node: '>= 10'} dependencies: crc-32: 1.2.2 readable-stream: 3.6.2 dev: true /create-require@1.1.1: - resolution: - { - integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, - } - - /create-sst@2.7.2: - resolution: - { - integrity: sha512-ZtuN+WX7G5nl4ACPGDwT/zJO6Kwfhyye/gUA55cOz5E4lpTLu9Vuyfzbmz0lMZvyEQxP/L+poGpombjOI8W7jw==, - } + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + /create-sst@2.8.1: + resolution: {integrity: sha512-GaPpMv1faWiQgb49ygr/yAVtyEgE3mVHG9hCxdMk+qJiB+wufyHatUjL0Ox+1tjee+ClajOxxsaS3Bnc2k1H1g==} hasBin: true dependencies: cli-spinners: 2.8.0 @@ -10678,11 +8373,8 @@ packages: dev: false /cross-spawn@6.0.5: - resolution: - { - integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, - } - engines: { node: ">=4.8" } + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} dependencies: nice-try: 1.0.5 path-key: 2.0.1 @@ -10692,11 +8384,8 @@ packages: dev: false /cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -10704,59 +8393,38 @@ packages: dev: true /csstype@3.1.1: - resolution: - { - integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==, - } + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} dev: true /dargs@7.0.0: - resolution: - { - integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} dev: true /data-uri-to-buffer@4.0.1: - resolution: - { - integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==, - } - engines: { node: ">= 12" } + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} /date-format@4.0.14: - resolution: - { - integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} dev: true /dateformat@3.0.3: - resolution: - { - integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==, - } + resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} dev: true /debounce-fn@4.0.0: - resolution: - { - integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} + engines: {node: '>=10'} dependencies: mimic-fn: 3.1.0 dev: true /debug@2.6.9: - resolution: - { - integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, - } + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -10764,12 +8432,9 @@ packages: ms: 2.0.0 /debug@3.2.7: - resolution: - { - integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, - } + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -10778,13 +8443,10 @@ packages: dev: true /debug@4.3.4: - resolution: - { - integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -10793,173 +8455,110 @@ packages: dev: true /debuglog@1.0.1: - resolution: - { - integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==, - } + resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} dev: true /decamelize-keys@1.1.1: - resolution: - { - integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} dependencies: decamelize: 1.2.0 map-obj: 1.0.1 dev: true /decamelize@1.2.0: - resolution: - { - integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} dev: true /dedent@0.7.0: - resolution: - { - integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==, - } + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true /deep-eql@4.1.3: - resolution: - { - integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} dependencies: type-detect: 4.0.8 dev: true /deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true /deepmerge@4.3.0: - resolution: - { - integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} + engines: {node: '>=0.10.0'} dev: true /defaults@1.0.4: - resolution: - { - integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, - } + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 /define-lazy-prop@2.0.0: - resolution: - { - integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} /define-properties@1.2.0: - resolution: - { - integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 /delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} /delegates@1.0.0: - resolution: - { - integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==, - } + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true /dendriform-immer-patch-optimiser@2.1.3(immer@9.0.21): - resolution: - { - integrity: sha512-QG2IegUCdlhycVwsBOJ7SNd18PgzyWPxBivTzuF0E1KFxaU47fHy/frud74A9E66a4WXyFFp9FLLC2XQDkVj7g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-QG2IegUCdlhycVwsBOJ7SNd18PgzyWPxBivTzuF0E1KFxaU47fHy/frud74A9E66a4WXyFFp9FLLC2XQDkVj7g==} + engines: {node: '>=10'} peerDependencies: - immer: "9" + immer: '9' dependencies: immer: 9.0.21 dev: true /depd@1.1.2: - resolution: - { - integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==, - } - engines: { node: ">= 0.6" } + 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==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} /deprecation@2.3.1: - resolution: - { - integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==, - } + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} dev: true /destroy@1.2.0: - resolution: - { - integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, - } - engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 } + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} /detect-indent@5.0.0: - resolution: - { - integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==} + engines: {node: '>=4'} dev: true /detect-indent@6.1.0: - resolution: - { - integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} dev: true /detect-newline@3.1.0: - resolution: - { - integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} dev: true /detect-port-alt@1.1.6: - resolution: - { - integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==, - } - engines: { node: ">= 4.2.1" } + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} hasBin: true dependencies: address: 1.2.2 @@ -10969,183 +8568,117 @@ packages: dev: true /dezalgo@1.0.4: - resolution: - { - integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==, - } + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} dependencies: asap: 2.0.6 wrappy: 1.0.2 dev: true /diff-sequences@29.4.2: - resolution: - { - integrity: sha512-R6P0Y6PrsH3n4hUXxL3nns0rbRk6Q33js3ygJBeEpbzLzgcNuJ61+u0RXasFpTKISw99TxUzFnumSnRLsjhLaw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-R6P0Y6PrsH3n4hUXxL3nns0rbRk6Q33js3ygJBeEpbzLzgcNuJ61+u0RXasFpTKISw99TxUzFnumSnRLsjhLaw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /diff@4.0.2: - resolution: - { - integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, - } - engines: { node: ">=0.3.1" } + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} /dir-glob@3.0.1: - resolution: - { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true /doctrine@2.1.0: - resolution: - { - integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 dev: true /doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true /dot-prop@5.3.0: - resolution: - { - integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true /dot-prop@6.0.1: - resolution: - { - integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} dependencies: is-obj: 2.0.0 dev: true /dotenv-expand@5.1.0: - resolution: - { - integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==, - } + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} dev: true /dotenv@10.0.0: - resolution: - { - integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} dev: true /dotenv@16.0.3: - resolution: - { - integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} dev: true /duplexer@0.1.2: - resolution: - { - integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, - } + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true /eastasianwidth@0.2.0: - resolution: - { - integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, - } + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true /ecdsa-sig-formatter@1.0.11: - resolution: - { - integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==, - } + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: safe-buffer: 5.2.1 dev: false /ee-first@1.1.1: - resolution: - { - integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, - } + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} /ejs@3.1.8: - resolution: - { - integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} + engines: {node: '>=0.10.0'} hasBin: true dependencies: jake: 10.8.5 dev: true /electron-to-chromium@1.4.295: - resolution: - { - integrity: sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==, - } + resolution: {integrity: sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==} dev: true /emittery@0.13.1: - resolution: - { - integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} dev: true /emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} /emoji-regex@9.2.2: - resolution: - { - integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, - } + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true /encodeurl@1.0.2: - resolution: - { - integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} /encoding@0.1.13: - resolution: - { - integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==, - } + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} requiresBuild: true dependencies: iconv-lite: 0.6.3 @@ -11153,70 +8686,46 @@ packages: optional: true /end-of-stream@1.4.4: - resolution: - { - integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, - } + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true /enquirer@2.3.6: - resolution: - { - integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 dev: true /entities@2.2.0: - resolution: - { - integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, - } + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: false /env-paths@2.2.1: - resolution: - { - integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} dev: true /envinfo@7.8.1: - resolution: - { - integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + engines: {node: '>=4'} hasBin: true dev: true /err-code@2.0.3: - resolution: - { - integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==, - } + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} dev: true /error-ex@1.3.2: - resolution: - { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, - } + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true /es-abstract@1.21.1: - resolution: - { - integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 @@ -11253,17 +8762,11 @@ packages: which-typed-array: 1.1.9 /es-array-method-boxes-properly@1.0.0: - resolution: - { - integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==, - } + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: false /es-get-iterator@1.1.3: - resolution: - { - integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==, - } + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 @@ -11277,49 +8780,34 @@ packages: dev: false /es-set-tostringtag@2.0.1: - resolution: - { - integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.0 has: 1.0.3 has-tostringtag: 1.0.0 /es-shim-unscopables@1.0.0: - resolution: - { - integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==, - } + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: has: 1.0.3 dev: true /es-to-primitive@1.2.1: - resolution: - { - integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 /es6-object-assign@1.1.0: - resolution: - { - integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==, - } + resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} dev: false /esbuild-android-64@0.14.54: - resolution: - { - integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true @@ -11327,11 +8815,8 @@ packages: optional: true /esbuild-android-64@0.15.18: - resolution: - { - integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true @@ -11339,11 +8824,8 @@ packages: optional: true /esbuild-android-arm64@0.14.54: - resolution: - { - integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true @@ -11351,11 +8833,8 @@ packages: optional: true /esbuild-android-arm64@0.15.18: - resolution: - { - integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true @@ -11363,11 +8842,8 @@ packages: optional: true /esbuild-darwin-64@0.14.54: - resolution: - { - integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true @@ -11375,11 +8851,8 @@ packages: optional: true /esbuild-darwin-64@0.15.18: - resolution: - { - integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true @@ -11387,11 +8860,8 @@ packages: optional: true /esbuild-darwin-arm64@0.14.54: - resolution: - { - integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true @@ -11399,11 +8869,8 @@ packages: optional: true /esbuild-darwin-arm64@0.15.18: - resolution: - { - integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true @@ -11411,11 +8878,8 @@ packages: optional: true /esbuild-freebsd-64@0.14.54: - resolution: - { - integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true @@ -11423,11 +8887,8 @@ packages: optional: true /esbuild-freebsd-64@0.15.18: - resolution: - { - integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true @@ -11435,11 +8896,8 @@ packages: optional: true /esbuild-freebsd-arm64@0.14.54: - resolution: - { - integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true @@ -11447,11 +8905,8 @@ packages: optional: true /esbuild-freebsd-arm64@0.15.18: - resolution: - { - integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true @@ -11459,11 +8914,8 @@ packages: optional: true /esbuild-linux-32@0.14.54: - resolution: - { - integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true @@ -11471,11 +8923,8 @@ packages: optional: true /esbuild-linux-32@0.15.18: - resolution: - { - integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true @@ -11483,11 +8932,8 @@ packages: optional: true /esbuild-linux-64@0.14.54: - resolution: - { - integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true @@ -11495,11 +8941,8 @@ packages: optional: true /esbuild-linux-64@0.15.18: - resolution: - { - integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true @@ -11507,11 +8950,8 @@ packages: optional: true /esbuild-linux-arm64@0.14.54: - resolution: - { - integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true @@ -11519,11 +8959,8 @@ packages: optional: true /esbuild-linux-arm64@0.15.18: - resolution: - { - integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true @@ -11531,11 +8968,8 @@ packages: optional: true /esbuild-linux-arm@0.14.54: - resolution: - { - integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true @@ -11543,11 +8977,8 @@ packages: optional: true /esbuild-linux-arm@0.15.18: - resolution: - { - integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true @@ -11555,11 +8986,8 @@ packages: optional: true /esbuild-linux-mips64le@0.14.54: - resolution: - { - integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true @@ -11567,11 +8995,8 @@ packages: optional: true /esbuild-linux-mips64le@0.15.18: - resolution: - { - integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true @@ -11579,11 +9004,8 @@ packages: optional: true /esbuild-linux-ppc64le@0.14.54: - resolution: - { - integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true @@ -11591,11 +9013,8 @@ packages: optional: true /esbuild-linux-ppc64le@0.15.18: - resolution: - { - integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true @@ -11603,11 +9022,8 @@ packages: optional: true /esbuild-linux-riscv64@0.14.54: - resolution: - { - integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true @@ -11615,11 +9031,8 @@ packages: optional: true /esbuild-linux-riscv64@0.15.18: - resolution: - { - integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true @@ -11627,11 +9040,8 @@ packages: optional: true /esbuild-linux-s390x@0.14.54: - resolution: - { - integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true @@ -11639,11 +9049,8 @@ packages: optional: true /esbuild-linux-s390x@0.15.18: - resolution: - { - integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true @@ -11651,11 +9058,8 @@ packages: optional: true /esbuild-netbsd-64@0.14.54: - resolution: - { - integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true @@ -11663,11 +9067,8 @@ packages: optional: true /esbuild-netbsd-64@0.15.18: - resolution: - { - integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true @@ -11675,11 +9076,8 @@ packages: optional: true /esbuild-openbsd-64@0.14.54: - resolution: - { - integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true @@ -11687,11 +9085,8 @@ packages: optional: true /esbuild-openbsd-64@0.15.18: - resolution: - { - integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true @@ -11699,12 +9094,9 @@ packages: optional: true /esbuild-plugin-alias-path@2.0.2(esbuild@0.17.8): - resolution: - { - integrity: sha512-YK8H9bzx6/CG6YBV11XjoNLjRhNZP0Ta4xZ3ATHhPn7pN8ljQGg+zne4d47DpIzF8/sX2qM+xQWev0CvaD2rSQ==, - } + resolution: {integrity: sha512-YK8H9bzx6/CG6YBV11XjoNLjRhNZP0Ta4xZ3ATHhPn7pN8ljQGg+zne4d47DpIzF8/sX2qM+xQWev0CvaD2rSQ==} peerDependencies: - esbuild: ">= 0.14.0" + esbuild: '>= 0.14.0' dependencies: esbuild: 0.17.8 find-up: 5.0.0 @@ -11713,13 +9105,10 @@ packages: dev: false /esbuild-runner@2.2.2(esbuild@0.14.54): - resolution: - { - integrity: sha512-fRFVXcmYVmSmtYm2mL8RlUASt2TDkGh3uRcvHFOKNr/T58VrfVeKD9uT9nlgxk96u0LS0ehS/GY7Da/bXWKkhw==, - } + resolution: {integrity: sha512-fRFVXcmYVmSmtYm2mL8RlUASt2TDkGh3uRcvHFOKNr/T58VrfVeKD9uT9nlgxk96u0LS0ehS/GY7Da/bXWKkhw==} hasBin: true peerDependencies: - esbuild: "*" + esbuild: '*' dependencies: esbuild: 0.14.54 source-map-support: 0.5.21 @@ -11727,11 +9116,8 @@ packages: dev: true /esbuild-sunos-64@0.14.54: - resolution: - { - integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true @@ -11739,11 +9125,8 @@ packages: optional: true /esbuild-sunos-64@0.15.18: - resolution: - { - integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true @@ -11751,11 +9134,8 @@ packages: optional: true /esbuild-windows-32@0.14.54: - resolution: - { - integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true @@ -11763,11 +9143,8 @@ packages: optional: true /esbuild-windows-32@0.15.18: - resolution: - { - integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true @@ -11775,11 +9152,8 @@ packages: optional: true /esbuild-windows-64@0.14.54: - resolution: - { - integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true @@ -11787,11 +9161,8 @@ packages: optional: true /esbuild-windows-64@0.15.18: - resolution: - { - integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true @@ -11799,11 +9170,8 @@ packages: optional: true /esbuild-windows-arm64@0.14.54: - resolution: - { - integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true @@ -11811,11 +9179,8 @@ packages: optional: true /esbuild-windows-arm64@0.15.18: - resolution: - { - integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true @@ -11823,15 +9188,12 @@ packages: optional: true /esbuild@0.14.54: - resolution: - { - integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/linux-loong64": 0.14.54 + '@esbuild/linux-loong64': 0.14.54 esbuild-android-64: 0.14.54 esbuild-android-arm64: 0.14.54 esbuild-darwin-64: 0.14.54 @@ -11855,16 +9217,13 @@ packages: dev: true /esbuild@0.15.18: - resolution: - { - integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.15.18 - "@esbuild/linux-loong64": 0.15.18 + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 esbuild-android-64: 0.15.18 esbuild-android-arm64: 0.15.18 esbuild-darwin-64: 0.15.18 @@ -11888,145 +9247,118 @@ packages: dev: false /esbuild@0.16.17: - resolution: - { - integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.16.17 - "@esbuild/android-arm64": 0.16.17 - "@esbuild/android-x64": 0.16.17 - "@esbuild/darwin-arm64": 0.16.17 - "@esbuild/darwin-x64": 0.16.17 - "@esbuild/freebsd-arm64": 0.16.17 - "@esbuild/freebsd-x64": 0.16.17 - "@esbuild/linux-arm": 0.16.17 - "@esbuild/linux-arm64": 0.16.17 - "@esbuild/linux-ia32": 0.16.17 - "@esbuild/linux-loong64": 0.16.17 - "@esbuild/linux-mips64el": 0.16.17 - "@esbuild/linux-ppc64": 0.16.17 - "@esbuild/linux-riscv64": 0.16.17 - "@esbuild/linux-s390x": 0.16.17 - "@esbuild/linux-x64": 0.16.17 - "@esbuild/netbsd-x64": 0.16.17 - "@esbuild/openbsd-x64": 0.16.17 - "@esbuild/sunos-x64": 0.16.17 - "@esbuild/win32-arm64": 0.16.17 - "@esbuild/win32-ia32": 0.16.17 - "@esbuild/win32-x64": 0.16.17 + '@esbuild/android-arm': 0.16.17 + '@esbuild/android-arm64': 0.16.17 + '@esbuild/android-x64': 0.16.17 + '@esbuild/darwin-arm64': 0.16.17 + '@esbuild/darwin-x64': 0.16.17 + '@esbuild/freebsd-arm64': 0.16.17 + '@esbuild/freebsd-x64': 0.16.17 + '@esbuild/linux-arm': 0.16.17 + '@esbuild/linux-arm64': 0.16.17 + '@esbuild/linux-ia32': 0.16.17 + '@esbuild/linux-loong64': 0.16.17 + '@esbuild/linux-mips64el': 0.16.17 + '@esbuild/linux-ppc64': 0.16.17 + '@esbuild/linux-riscv64': 0.16.17 + '@esbuild/linux-s390x': 0.16.17 + '@esbuild/linux-x64': 0.16.17 + '@esbuild/netbsd-x64': 0.16.17 + '@esbuild/openbsd-x64': 0.16.17 + '@esbuild/sunos-x64': 0.16.17 + '@esbuild/win32-arm64': 0.16.17 + '@esbuild/win32-ia32': 0.16.17 + '@esbuild/win32-x64': 0.16.17 dev: true /esbuild@0.17.18: - resolution: - { - integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.17.18 - "@esbuild/android-arm64": 0.17.18 - "@esbuild/android-x64": 0.17.18 - "@esbuild/darwin-arm64": 0.17.18 - "@esbuild/darwin-x64": 0.17.18 - "@esbuild/freebsd-arm64": 0.17.18 - "@esbuild/freebsd-x64": 0.17.18 - "@esbuild/linux-arm": 0.17.18 - "@esbuild/linux-arm64": 0.17.18 - "@esbuild/linux-ia32": 0.17.18 - "@esbuild/linux-loong64": 0.17.18 - "@esbuild/linux-mips64el": 0.17.18 - "@esbuild/linux-ppc64": 0.17.18 - "@esbuild/linux-riscv64": 0.17.18 - "@esbuild/linux-s390x": 0.17.18 - "@esbuild/linux-x64": 0.17.18 - "@esbuild/netbsd-x64": 0.17.18 - "@esbuild/openbsd-x64": 0.17.18 - "@esbuild/sunos-x64": 0.17.18 - "@esbuild/win32-arm64": 0.17.18 - "@esbuild/win32-ia32": 0.17.18 - "@esbuild/win32-x64": 0.17.18 + '@esbuild/android-arm': 0.17.18 + '@esbuild/android-arm64': 0.17.18 + '@esbuild/android-x64': 0.17.18 + '@esbuild/darwin-arm64': 0.17.18 + '@esbuild/darwin-x64': 0.17.18 + '@esbuild/freebsd-arm64': 0.17.18 + '@esbuild/freebsd-x64': 0.17.18 + '@esbuild/linux-arm': 0.17.18 + '@esbuild/linux-arm64': 0.17.18 + '@esbuild/linux-ia32': 0.17.18 + '@esbuild/linux-loong64': 0.17.18 + '@esbuild/linux-mips64el': 0.17.18 + '@esbuild/linux-ppc64': 0.17.18 + '@esbuild/linux-riscv64': 0.17.18 + '@esbuild/linux-s390x': 0.17.18 + '@esbuild/linux-x64': 0.17.18 + '@esbuild/netbsd-x64': 0.17.18 + '@esbuild/openbsd-x64': 0.17.18 + '@esbuild/sunos-x64': 0.17.18 + '@esbuild/win32-arm64': 0.17.18 + '@esbuild/win32-ia32': 0.17.18 + '@esbuild/win32-x64': 0.17.18 dev: false /esbuild@0.17.8: - resolution: - { - integrity: sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.17.8 - "@esbuild/android-arm64": 0.17.8 - "@esbuild/android-x64": 0.17.8 - "@esbuild/darwin-arm64": 0.17.8 - "@esbuild/darwin-x64": 0.17.8 - "@esbuild/freebsd-arm64": 0.17.8 - "@esbuild/freebsd-x64": 0.17.8 - "@esbuild/linux-arm": 0.17.8 - "@esbuild/linux-arm64": 0.17.8 - "@esbuild/linux-ia32": 0.17.8 - "@esbuild/linux-loong64": 0.17.8 - "@esbuild/linux-mips64el": 0.17.8 - "@esbuild/linux-ppc64": 0.17.8 - "@esbuild/linux-riscv64": 0.17.8 - "@esbuild/linux-s390x": 0.17.8 - "@esbuild/linux-x64": 0.17.8 - "@esbuild/netbsd-x64": 0.17.8 - "@esbuild/openbsd-x64": 0.17.8 - "@esbuild/sunos-x64": 0.17.8 - "@esbuild/win32-arm64": 0.17.8 - "@esbuild/win32-ia32": 0.17.8 - "@esbuild/win32-x64": 0.17.8 + '@esbuild/android-arm': 0.17.8 + '@esbuild/android-arm64': 0.17.8 + '@esbuild/android-x64': 0.17.8 + '@esbuild/darwin-arm64': 0.17.8 + '@esbuild/darwin-x64': 0.17.8 + '@esbuild/freebsd-arm64': 0.17.8 + '@esbuild/freebsd-x64': 0.17.8 + '@esbuild/linux-arm': 0.17.8 + '@esbuild/linux-arm64': 0.17.8 + '@esbuild/linux-ia32': 0.17.8 + '@esbuild/linux-loong64': 0.17.8 + '@esbuild/linux-mips64el': 0.17.8 + '@esbuild/linux-ppc64': 0.17.8 + '@esbuild/linux-riscv64': 0.17.8 + '@esbuild/linux-s390x': 0.17.8 + '@esbuild/linux-x64': 0.17.8 + '@esbuild/netbsd-x64': 0.17.8 + '@esbuild/openbsd-x64': 0.17.8 + '@esbuild/sunos-x64': 0.17.8 + '@esbuild/win32-arm64': 0.17.8 + '@esbuild/win32-ia32': 0.17.8 + '@esbuild/win32-x64': 0.17.8 /escalade@3.1.1: - resolution: - { - integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} /escape-html@1.0.3: - resolution: - { - integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, - } + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} /escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} /escape-string-regexp@2.0.0: - resolution: - { - integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} dev: true /escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true /escodegen@2.0.0: - resolution: - { - integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} hasBin: true dependencies: esprima: 4.0.1 @@ -12038,22 +9370,16 @@ packages: dev: true /eslint-config-prettier@8.6.0(eslint@8.34.0): - resolution: - { - integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==, - } + resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: - eslint: ">=7.0.0" + eslint: '>=7.0.0' dependencies: eslint: 8.34.0 dev: true /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.34.0): - resolution: - { - integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==, - } + resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} peerDependencies: eslint: ^8.0.1 eslint-plugin-import: ^2.25.2 @@ -12067,10 +9393,7 @@ packages: dev: true /eslint-import-resolver-node@0.3.7: - resolution: - { - integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==, - } + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 is-core-module: 2.11.0 @@ -12080,19 +9403,16 @@ packages: dev: true /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.52.0)(eslint-import-resolver-node@0.3.7)(eslint@8.34.0): - resolution: - { - integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" - eslint: "*" - eslint-import-resolver-node: "*" - eslint-import-resolver-typescript: "*" - eslint-import-resolver-webpack: "*" + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true eslint: optional: true @@ -12103,7 +9423,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - "@typescript-eslint/parser": 5.52.0(eslint@8.34.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.52.0(eslint@8.34.0)(typescript@4.9.5) debug: 3.2.7 eslint: 8.34.0 eslint-import-resolver-node: 0.3.7 @@ -12112,13 +9432,10 @@ packages: dev: true /eslint-plugin-es@3.0.1(eslint@8.34.0): - resolution: - { - integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} peerDependencies: - eslint: ">=4.19.1" + eslint: '>=4.19.1' dependencies: eslint: 8.34.0 eslint-utils: 2.1.0 @@ -12126,13 +9443,10 @@ packages: dev: true /eslint-plugin-es@4.1.0(eslint@8.34.0): - resolution: - { - integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} + engines: {node: '>=8.10.0'} peerDependencies: - eslint: ">=4.19.1" + eslint: '>=4.19.1' dependencies: eslint: 8.34.0 eslint-utils: 2.1.0 @@ -12140,19 +9454,16 @@ packages: dev: true /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.52.0)(eslint@8.34.0): - resolution: - { - integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" + '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true dependencies: - "@typescript-eslint/parser": 5.52.0(eslint@8.34.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.52.0(eslint@8.34.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -12176,13 +9487,10 @@ packages: dev: true /eslint-plugin-n@15.7.0(eslint@8.34.0): - resolution: - { - integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==, - } - engines: { node: ">=12.22.0" } + resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} + engines: {node: '>=12.22.0'} peerDependencies: - eslint: ">=7.0.0" + eslint: '>=7.0.0' dependencies: builtins: 5.0.1 eslint: 8.34.0 @@ -12196,13 +9504,10 @@ packages: dev: true /eslint-plugin-node@11.1.0(eslint@8.34.0): - resolution: - { - integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} peerDependencies: - eslint: ">=5.16.0" + eslint: '>=5.16.0' dependencies: eslint: 8.34.0 eslint-plugin-es: 3.0.1(eslint@8.34.0) @@ -12214,11 +9519,8 @@ packages: dev: true /eslint-plugin-promise@6.1.1(eslint@8.34.0): - resolution: - { - integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.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: @@ -12226,11 +9528,8 @@ packages: dev: true /eslint-plugin-react@7.32.2(eslint@8.34.0): - resolution: - { - integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} + engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: @@ -12253,86 +9552,62 @@ packages: dev: true /eslint-scope@5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 dev: true /eslint-scope@7.1.1: - resolution: - { - integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true /eslint-utils@2.1.0: - resolution: - { - integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 dev: true /eslint-utils@3.0.0(eslint@8.34.0): - resolution: - { - integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==, - } - engines: { node: ^10.0.0 || ^12.0.0 || >= 14.0.0 } + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: - eslint: ">=5" + eslint: '>=5' dependencies: eslint: 8.34.0 eslint-visitor-keys: 2.1.0 dev: true /eslint-visitor-keys@1.3.0: - resolution: - { - integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} dev: true /eslint-visitor-keys@2.1.0: - resolution: - { - integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} dev: true /eslint-visitor-keys@3.3.0: - resolution: - { - integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /eslint@8.34.0: - resolution: - { - integrity: sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - "@eslint/eslintrc": 1.4.1 - "@humanwhocodes/config-array": 0.11.8 - "@humanwhocodes/module-importer": 1.0.1 - "@nodelib/fs.walk": 1.2.8 + '@eslint/eslintrc': 1.4.1 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -12373,11 +9648,8 @@ packages: dev: true /espree@9.4.1: - resolution: - { - integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) @@ -12385,97 +9657,61 @@ packages: dev: true /esprima@4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true /esquery@1.4.0: - resolution: - { - integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true /esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true /estraverse@4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} dev: true /estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} dev: true /estree-walker@0.6.1: - resolution: - { - integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==, - } + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} dev: true /esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} dev: true /etag@1.8.1: - resolution: - { - integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} /eventemitter3@3.1.2: - resolution: - { - integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==, - } + resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} dev: false /eventemitter3@4.0.7: - resolution: - { - integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, - } + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} /events@1.1.1: - resolution: - { - integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==, - } - engines: { node: ">=0.4.x" } + resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} + engines: {node: '>=0.4.x'} /execa@5.1.1: - resolution: - { - integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -12489,11 +9725,8 @@ packages: dev: true /execa@6.1.0: - resolution: - { - integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -12507,21 +9740,15 @@ packages: dev: true /exit@0.1.2: - resolution: - { - integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} dev: true /expect@29.4.2: - resolution: - { - integrity: sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@jest/expect-utils": 29.4.2 + '@jest/expect-utils': 29.4.2 jest-get-type: 29.4.2 jest-matcher-utils: 29.4.2 jest-message-util: 29.4.2 @@ -12529,11 +9756,8 @@ packages: dev: true /express@4.18.2: - resolution: - { - integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==, - } - engines: { node: ">= 0.10.0" } + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} requiresBuild: true dependencies: accepts: 1.3.8 @@ -12571,71 +9795,50 @@ packages: - supports-color /external-editor@3.1.0: - resolution: - { - integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 /fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true /fast-glob@3.2.12: - resolution: - { - integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, - } - engines: { node: ">=8.6.0" } - dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 dev: true /fast-glob@3.2.7: - resolution: - { - integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==, - } - engines: { node: ">=8" } - dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} + engines: {node: '>=8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 dev: true /fast-json-patch@3.1.1: - resolution: - { - integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==, - } + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} dev: false /fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true /fast-jwt@1.7.2: - resolution: - { - integrity: sha512-OEInypGXJhtURzq9GbFM5KaALUu9+4IV3kJEbWPuqOBN5JBe7A51Tx0CaQYHGC9GNfZnr5npA0lCIMaWiZmz/A==, - } - engines: { node: ">=14 <20" } + resolution: {integrity: sha512-OEInypGXJhtURzq9GbFM5KaALUu9+4IV3kJEbWPuqOBN5JBe7A51Tx0CaQYHGC9GNfZnr5npA0lCIMaWiZmz/A==} + engines: {node: '>=14 <20'} dependencies: asn1.js: 5.4.1 ecdsa-sig-formatter: 1.0.11 @@ -12643,100 +9846,67 @@ packages: dev: false /fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true /fast-xml-parser@3.19.0: - resolution: - { - integrity: sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==, - } + resolution: {integrity: sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==} hasBin: true dev: false /fast-xml-parser@4.1.2: - resolution: - { - integrity: sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==, - } + resolution: {integrity: sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==} hasBin: true dependencies: strnum: 1.0.5 /fastq@1.15.0: - resolution: - { - integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, - } + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true /fb-watchman@2.0.2: - resolution: - { - integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, - } + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true /fetch-blob@3.2.0: - resolution: - { - integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==, - } - engines: { node: ^12.20 || >= 14.13 } + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 /figures@3.2.0: - resolution: - { - integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 /file-entry-cache@6.0.1: - resolution: - { - integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true /filelist@1.0.4: - resolution: - { - integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==, - } + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 dev: true /fill-range@7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 /finalhandler@1.2.0: - resolution: - { - integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -12749,114 +9919,78 @@ packages: - supports-color /find-up@2.1.0: - resolution: - { - integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} dependencies: locate-path: 2.0.0 dev: true /find-up@3.0.0: - resolution: - { - integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true /find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true /find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 /find-yarn-workspace-root@2.0.0: - resolution: - { - integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==, - } + resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} dependencies: micromatch: 4.0.5 dev: false /finity@0.5.4: - resolution: - { - integrity: sha512-3l+5/1tuw616Lgb0QBimxfdd2TqaDGpfCBpfX6EqtFmqUV3FtQnVEX4Aa62DagYEqnsTIjZcTfbq9msDbXYgyA==, - } + resolution: {integrity: sha512-3l+5/1tuw616Lgb0QBimxfdd2TqaDGpfCBpfX6EqtFmqUV3FtQnVEX4Aa62DagYEqnsTIjZcTfbq9msDbXYgyA==} dev: false /flat-cache@3.0.4: - resolution: - { - integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.2.7 rimraf: 3.0.2 dev: true /flat@5.0.2: - resolution: - { - integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, - } + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true dev: true /flatted@3.2.7: - resolution: - { - integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==, - } + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true /follow-redirects@1.15.2: - resolution: - { - integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} peerDependencies: - debug: "*" + debug: '*' peerDependenciesMeta: debug: optional: true /for-each@0.3.3: - resolution: - { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, - } + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 /form-data@2.5.1: - resolution: - { - integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==, - } - engines: { node: ">= 0.12" } + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -12864,52 +9998,34 @@ packages: dev: false /form-data@4.0.0: - resolution: - { - integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 /formdata-polyfill@4.0.10: - resolution: - { - integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==, - } - engines: { node: ">=12.20.0" } + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} dependencies: fetch-blob: 3.2.0 /forwarded@0.2.0: - resolution: - { - integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} /fresh@0.5.2: - resolution: - { - integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} /fs-constants@1.0.0: - resolution: - { - integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==, - } + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true /fs-extra@10.1.0: - resolution: - { - integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 @@ -12917,11 +10033,8 @@ packages: dev: false /fs-extra@11.1.0: - resolution: - { - integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==, - } - engines: { node: ">=14.14" } + resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.10 jsonfile: 6.1.0 @@ -12929,11 +10042,8 @@ packages: dev: true /fs-extra@11.1.1: - resolution: - { - integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==, - } - engines: { node: ">=14.14" } + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 @@ -12941,11 +10051,8 @@ packages: dev: true /fs-extra@8.1.0: - resolution: - { - integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, - } - engines: { node: ">=6 <7 || >=8" } + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 @@ -12953,11 +10060,8 @@ packages: dev: true /fs-extra@9.1.0: - resolution: - { - integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 @@ -12965,43 +10069,28 @@ packages: universalify: 2.0.0 /fs-minipass@2.1.0: - resolution: - { - integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true /fs.realpath@1.0.0: - resolution: - { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, - } + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} /fsevents@2.3.2: - resolution: - { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true optional: true /function-bind@1.1.1: - resolution: - { - integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, - } + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} /function.prototype.name@1.1.5: - resolution: - { - integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -13009,16 +10098,10 @@ packages: functions-have-names: 1.2.3 /functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, - } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} /gauge@2.7.4: - resolution: - { - integrity: sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==, - } + resolution: {integrity: sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==} dependencies: aproba: 1.2.0 console-control-strings: 1.1.0 @@ -13031,11 +10114,8 @@ packages: dev: true /gauge@4.0.4: - resolution: - { - integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -13048,106 +10128,70 @@ packages: dev: true /gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} dev: true /get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} /get-func-name@2.0.0: - resolution: - { - integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==, - } + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} dev: true /get-intrinsic@1.2.0: - resolution: - { - integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==, - } + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 has: 1.0.3 has-symbols: 1.0.3 /get-package-type@0.1.0: - resolution: - { - integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} dev: true /get-pkg-repo@4.2.1: - resolution: - { - integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} + engines: {node: '>=6.9.0'} hasBin: true dependencies: - "@hutson/parse-repository-url": 3.0.2 + '@hutson/parse-repository-url': 3.0.2 hosted-git-info: 4.1.0 through2: 2.0.5 yargs: 16.2.0 dev: true /get-port@5.1.1: - resolution: - { - integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} dev: true /get-port@6.1.2: - resolution: - { - integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} /get-stdin@9.0.0: - resolution: - { - integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} dev: false /get-stream@6.0.1: - resolution: - { - integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} dev: true /get-symbol-description@1.0.0: - resolution: - { - integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 /git-raw-commits@2.0.11: - resolution: - { - integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} hasBin: true dependencies: dargs: 7.0.0 @@ -13158,22 +10202,16 @@ packages: dev: true /git-remote-origin-url@2.0.0: - resolution: - { - integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==} + engines: {node: '>=4'} dependencies: gitconfiglocal: 1.0.0 pify: 2.3.0 dev: true /git-semver-tags@4.1.1: - resolution: - { - integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==} + engines: {node: '>=10'} hasBin: true dependencies: meow: 8.1.2 @@ -13181,65 +10219,44 @@ packages: dev: true /git-up@7.0.0: - resolution: - { - integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==, - } + resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} dependencies: is-ssh: 1.4.0 parse-url: 8.1.0 dev: true /git-url-parse@13.1.0: - resolution: - { - integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==, - } + resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==} dependencies: git-up: 7.0.0 dev: true /gitconfiglocal@1.0.0: - resolution: - { - integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==, - } + resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==} dependencies: ini: 1.3.8 dev: true /glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true /glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true /glob-to-regexp@0.4.1: - resolution: - { - integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, - } + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false /glob@7.1.4: - resolution: - { - integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==, - } + resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -13250,10 +10267,7 @@ packages: dev: true /glob@7.2.3: - resolution: - { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, - } + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -13263,11 +10277,8 @@ packages: path-is-absolute: 1.0.1 /glob@8.1.0: - resolution: - { - integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -13277,38 +10288,26 @@ packages: dev: true /globals@11.12.0: - resolution: - { - integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} dev: true /globals@13.20.0: - resolution: - { - integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true /globalthis@1.0.3: - resolution: - { - integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 /globby@11.1.0: - resolution: - { - integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -13319,38 +10318,23 @@ packages: dev: true /gopd@1.0.1: - resolution: - { - integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, - } + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 /graceful-fs@4.2.10: - resolution: - { - integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, - } + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true /graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} /grapheme-splitter@1.0.4: - resolution: - { - integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==, - } + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true /graphql-helix@1.13.0(graphql@16.6.0): - resolution: - { - integrity: sha512-cqDKMoRywKjnL0ZWCTB0GOiBgsH6d3nU4JGDF6RuzAyd35tmalzKpSxkx3NNp4H5RvnKWnrukWzR51wUq277ng==, - } + resolution: {integrity: sha512-cqDKMoRywKjnL0ZWCTB0GOiBgsH6d3nU4JGDF6RuzAyd35tmalzKpSxkx3NNp4H5RvnKWnrukWzR51wUq277ng==} peerDependencies: graphql: ^15.3.0 || ^16.0.0 dependencies: @@ -13358,19 +10342,13 @@ packages: dev: false /graphql@16.6.0: - resolution: - { - integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==, - } - engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } + resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} requiresBuild: true /handlebars@4.7.7: - resolution: - { - integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==, - } - engines: { node: ">=0.4.7" } + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} hasBin: true dependencies: minimist: 1.2.8 @@ -13382,146 +10360,92 @@ packages: dev: true /hard-rejection@2.1.0: - resolution: - { - integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} dev: true /has-bigints@1.0.2: - resolution: - { - integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, - } + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} /has-flag@3.0.0: - resolution: - { - integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} dev: true /has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} /has-property-descriptors@1.0.0: - resolution: - { - integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, - } + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 /has-proto@1.0.1: - resolution: - { - integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} /has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} /has-tostringtag@1.0.0: - resolution: - { - integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 /has-unicode@2.0.1: - resolution: - { - integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==, - } + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} dev: true /has@1.0.3: - resolution: - { - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, - } - engines: { node: ">= 0.4.0" } + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 /heap-js@2.2.0: - resolution: - { - integrity: sha512-G3uM72G9F/zo9Hph/T7m4ZZVlVu5bx2f5CiCS78TBHz2mNIXnB5KRdEEYssXZJ7ldLDqID29bZ1D5ezCKQD2Zw==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-G3uM72G9F/zo9Hph/T7m4ZZVlVu5bx2f5CiCS78TBHz2mNIXnB5KRdEEYssXZJ7ldLDqID29bZ1D5ezCKQD2Zw==} + engines: {node: '>=10.0.0'} dev: false /hosted-git-info@2.8.9: - resolution: - { - integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, - } + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true /hosted-git-info@3.0.8: - resolution: - { - integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==} + engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true /hosted-git-info@4.1.0: - resolution: - { - integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true /hosted-git-info@5.2.1: - resolution: - { - integrity: sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: lru-cache: 7.14.1 dev: true /html-escaper@2.0.2: - resolution: - { - integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, - } + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true /http-cache-semantics@4.1.1: - resolution: - { - integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==, - } + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true /http-errors@2.0.0: - resolution: - { - integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} dependencies: depd: 2.0.0 inherits: 2.0.4 @@ -13530,13 +10454,10 @@ packages: toidentifier: 1.0.1 /http-proxy-agent@4.0.1: - resolution: - { - integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} dependencies: - "@tootallnate/once": 1.1.2 + '@tootallnate/once': 1.1.2 agent-base: 6.0.2 debug: 4.3.4 transitivePeerDependencies: @@ -13544,13 +10465,10 @@ packages: dev: true /http-proxy-agent@5.0.0: - resolution: - { - integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} dependencies: - "@tootallnate/once": 2.0.0 + '@tootallnate/once': 2.0.0 agent-base: 6.0.2 debug: 4.3.4 transitivePeerDependencies: @@ -13558,11 +10476,8 @@ packages: dev: true /https-proxy-agent@5.0.1: - resolution: - { - integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 debug: 4.3.4 @@ -13571,112 +10486,73 @@ packages: dev: true /human-signals@2.1.0: - resolution: - { - integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, - } - engines: { node: ">=10.17.0" } + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} dev: true /human-signals@3.0.1: - resolution: - { - integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==, - } - engines: { node: ">=12.20.0" } + resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} + engines: {node: '>=12.20.0'} dev: true /humanize-ms@1.2.1: - resolution: - { - integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==, - } + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: ms: 2.1.3 dev: true /husky@8.0.3: - resolution: - { - integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} hasBin: true dev: true /iconv-lite@0.4.24: - resolution: - { - integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 /iconv-lite@0.6.3: - resolution: - { - integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true optional: true /ieee754@1.1.13: - resolution: - { - integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==, - } + resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} /ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, - } + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} /ignore-walk@5.0.1: - resolution: - { - integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: minimatch: 5.1.6 dev: true /ignore@5.2.4: - resolution: - { - integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} /immer@9.0.21: - resolution: - { - integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==, - } + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} dev: true /import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 dev: true /import-local@3.1.0: - resolution: - { - integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} hasBin: true dependencies: pkg-dir: 4.2.0 @@ -13684,71 +10560,44 @@ packages: dev: true /import-meta-resolve@2.2.1: - resolution: - { - integrity: sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==, - } + resolution: {integrity: sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==} dev: false /imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: ">=0.8.19" } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} dev: true /indent-string@4.0.0: - resolution: - { - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} dev: true /indent-string@5.0.0: - resolution: - { - integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} dev: true /infer-owner@1.0.4: - resolution: - { - integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==, - } + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} dev: true /inflight@1.0.6: - resolution: - { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, - } + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 /inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} /ini@1.3.8: - resolution: - { - integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, - } + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true /init-package-json@3.0.2: - resolution: - { - integrity: sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: npm-package-arg: 9.1.2 promzard: 0.3.0 @@ -13760,11 +10609,8 @@ packages: dev: true /inquirer@8.2.5: - resolution: - { - integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} + engines: {node: '>=12.0.0'} dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -13783,407 +10629,263 @@ packages: wrap-ansi: 7.0.0 /internal-slot@1.0.5: - resolution: - { - integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.0 has: 1.0.3 side-channel: 1.0.4 /ip@2.0.0: - resolution: - { - integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==, - } + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: true /ipaddr.js@1.9.1: - resolution: - { - integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, - } - engines: { node: ">= 0.10" } + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} /is-arguments@1.1.1: - resolution: - { - integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 /is-array-buffer@3.0.1: - resolution: - { - integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==, - } + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 is-typed-array: 1.1.10 /is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, - } + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true /is-bigint@1.0.4: - resolution: - { - integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, - } + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 /is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true /is-boolean-object@1.1.2: - resolution: - { - integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 /is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} /is-ci@2.0.0: - resolution: - { - integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==, - } + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} hasBin: true dependencies: ci-info: 2.0.0 /is-core-module@2.11.0: - resolution: - { - integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, - } + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 /is-core-module@2.12.0: - resolution: - { - integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==, - } + resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true /is-date-object@1.0.5: - resolution: - { - integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-docker@2.2.1: - resolution: - { - integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} hasBin: true /is-electron@2.2.0: - resolution: - { - integrity: sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==, - } + resolution: {integrity: sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==} dev: false /is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} dev: true /is-fullwidth-code-point@1.0.0: - resolution: - { - integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} dependencies: number-is-nan: 1.0.1 dev: true /is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} /is-fullwidth-code-point@4.0.0: - resolution: - { - integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} dev: true /is-generator-fn@2.1.0: - resolution: - { - integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} dev: true /is-generator-function@1.0.10: - resolution: - { - integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true /is-interactive@1.0.0: - resolution: - { - integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} /is-interactive@2.0.0: - resolution: - { - integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} dev: false /is-lambda@1.0.1: - resolution: - { - integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==, - } + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: true /is-map@2.0.2: - resolution: - { - integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==, - } + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: false /is-nan@1.3.2: - resolution: - { - integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 dev: false /is-negative-zero@2.0.2: - resolution: - { - integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} /is-number-object@1.0.7: - resolution: - { - integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} /is-obj@2.0.0: - resolution: - { - integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} dev: true /is-path-inside@3.0.3: - resolution: - { - integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} dev: true /is-plain-obj@1.1.0: - resolution: - { - integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} dev: true /is-plain-obj@2.1.0: - resolution: - { - integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} dev: true /is-plain-object@2.0.4: - resolution: - { - integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true /is-plain-object@5.0.0: - resolution: - { - integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} dev: true /is-regex@1.1.4: - resolution: - { - integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 /is-set@2.0.2: - resolution: - { - integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==, - } + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: false /is-shared-array-buffer@1.0.2: - resolution: - { - integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, - } + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 /is-ssh@1.4.0: - resolution: - { - integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==, - } + resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} dependencies: protocols: 2.0.1 dev: true /is-stream@1.1.0: - resolution: - { - integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} dev: false /is-stream@2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} dev: true /is-stream@3.0.0: - resolution: - { - integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true /is-string@1.0.7: - resolution: - { - integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-symbol@1.0.4: - resolution: - { - integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 /is-text-path@1.0.1: - resolution: - { - integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true /is-typed-array@1.1.10: - resolution: - { - integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 @@ -14192,89 +10894,56 @@ packages: has-tostringtag: 1.0.0 /is-typedarray@1.0.0: - resolution: - { - integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, - } + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true /is-unicode-supported@0.1.0: - resolution: - { - integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} /is-unicode-supported@1.3.0: - resolution: - { - integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} dev: false /is-weakref@1.0.2: - resolution: - { - integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, - } + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 /is-wsl@2.2.0: - resolution: - { - integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 /isarray@1.0.0: - resolution: - { - integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, - } + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} /isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, - } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: false /isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} /isobject@3.0.1: - resolution: - { - integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} dev: true /istanbul-lib-coverage@3.2.0: - resolution: - { - integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} dev: true /istanbul-lib-instrument@5.2.1: - resolution: - { - integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, - } - engines: { node: ">=8" } - dependencies: - "@babel/core": 7.20.12 - "@babel/parser": 7.21.4 - "@istanbuljs/schema": 0.1.3 + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.20.12 + '@babel/parser': 7.21.4 + '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 transitivePeerDependencies: @@ -14282,11 +10951,8 @@ packages: dev: true /istanbul-lib-report@3.0.0: - resolution: - { - integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 @@ -14294,11 +10960,8 @@ packages: dev: true /istanbul-lib-source-maps@4.0.1: - resolution: - { - integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} dependencies: debug: 4.3.4 istanbul-lib-coverage: 3.2.0 @@ -14308,45 +10971,30 @@ packages: dev: true /istanbul-reports@3.1.5: - resolution: - { - integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 dev: true /iterate-iterator@1.0.2: - resolution: - { - integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==, - } + resolution: {integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==} dev: false /iterate-value@1.0.2: - resolution: - { - integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==, - } + resolution: {integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==} dependencies: es-get-iterator: 1.1.3 iterate-iterator: 1.0.2 dev: false /itty-router@2.6.6: - resolution: - { - integrity: sha512-hIPHtXGymCX7Lzb2I4G6JgZFE4QEEQwst9GORK7sMYUpJvLfy4yZJr95r04e8DzoAnj6HcxM2m4TbK+juu+18g==, - } + resolution: {integrity: sha512-hIPHtXGymCX7Lzb2I4G6JgZFE4QEEQwst9GORK7sMYUpJvLfy4yZJr95r04e8DzoAnj6HcxM2m4TbK+juu+18g==} /jake@10.8.5: - resolution: - { - integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + engines: {node: '>=10'} hasBin: true dependencies: async: 3.2.4 @@ -14356,28 +11004,22 @@ packages: dev: true /jest-changed-files@29.4.2: - resolution: - { - integrity: sha512-Qdd+AXdqD16PQa+VsWJpxR3kN0JyOCX1iugQfx5nUgAsI4gwsKviXkpclxOK9ZnwaY2IQVHz+771eAvqeOlfuw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Qdd+AXdqD16PQa+VsWJpxR3kN0JyOCX1iugQfx5nUgAsI4gwsKviXkpclxOK9ZnwaY2IQVHz+771eAvqeOlfuw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 p-limit: 3.1.0 dev: true /jest-circus@29.4.2: - resolution: - { - integrity: sha512-wW3ztp6a2P5c1yOc1Cfrt5ozJ7neWmqeXm/4SYiqcSriyisgq63bwFj1NuRdSR5iqS0CMEYwSZd89ZA47W9zUg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/environment": 29.4.2 - "@jest/expect": 29.4.2 - "@jest/test-result": 29.4.2 - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-wW3ztp6a2P5c1yOc1Cfrt5ozJ7neWmqeXm/4SYiqcSriyisgq63bwFj1NuRdSR5iqS0CMEYwSZd89ZA47W9zUg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.2 + '@jest/expect': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -14397,11 +11039,8 @@ packages: dev: true /jest-cli@29.4.2(@types/node@18.13.0)(ts-node@10.9.1): - resolution: - { - integrity: sha512-b+eGUtXq/K2v7SH3QcJvFvaUaCDS1/YAZBYz0m28Q/Ppyr+1qNaHmVYikOrbHVbZqYQs2IeI3p76uy6BWbXq8Q==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-b+eGUtXq/K2v7SH3QcJvFvaUaCDS1/YAZBYz0m28Q/Ppyr+1qNaHmVYikOrbHVbZqYQs2IeI3p76uy6BWbXq8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -14409,9 +11048,9 @@ packages: node-notifier: optional: true dependencies: - "@jest/core": 29.4.2(ts-node@10.9.1) - "@jest/test-result": 29.4.2 - "@jest/types": 29.4.2 + '@jest/core': 29.4.2(ts-node@10.9.1) + '@jest/test-result': 29.4.2 + '@jest/types': 29.4.2 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 @@ -14422,30 +11061,27 @@ packages: prompts: 2.4.2 yargs: 17.6.2 transitivePeerDependencies: - - "@types/node" + - '@types/node' - supports-color - ts-node dev: true /jest-config@29.4.2(@types/node@18.13.0)(ts-node@10.9.1): - resolution: - { - integrity: sha512-919CtnXic52YM0zW4C1QxjG6aNueX1kBGthuMtvFtRTAxhKfJmiXC9qwHmi6o2josjbDz8QlWyY55F1SIVmCWA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-919CtnXic52YM0zW4C1QxjG6aNueX1kBGthuMtvFtRTAxhKfJmiXC9qwHmi6o2josjbDz8QlWyY55F1SIVmCWA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" + '@types/node': '*' + ts-node: '>=9.0.0' peerDependenciesMeta: - "@types/node": + '@types/node': optional: true ts-node: optional: true dependencies: - "@babel/core": 7.20.12 - "@jest/test-sequencer": 29.4.2 - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + '@babel/core': 7.20.12 + '@jest/test-sequencer': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 babel-jest: 29.4.2(@babel/core@7.20.12) chalk: 4.1.2 ci-info: 3.8.0 @@ -14471,11 +11107,8 @@ packages: dev: true /jest-diff@29.4.2: - resolution: - { - integrity: sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.4.2 @@ -14484,23 +11117,17 @@ packages: dev: true /jest-docblock@29.4.2: - resolution: - { - integrity: sha512-dV2JdahgClL34Y5vLrAHde3nF3yo2jKRH+GIYJuCpfqwEJZcikzeafVTGAjbOfKPG17ez9iWXwUYp7yefeCRag==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-dV2JdahgClL34Y5vLrAHde3nF3yo2jKRH+GIYJuCpfqwEJZcikzeafVTGAjbOfKPG17ez9iWXwUYp7yefeCRag==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true /jest-each@29.4.2: - resolution: - { - integrity: sha512-trvKZb0JYiCndc55V1Yh0Luqi7AsAdDWpV+mKT/5vkpnnFQfuQACV72IoRV161aAr6kAVIBpmYzwhBzm34vQkA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-trvKZb0JYiCndc55V1Yh0Luqi7AsAdDWpV+mKT/5vkpnnFQfuQACV72IoRV161aAr6kAVIBpmYzwhBzm34vQkA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@jest/types": 29.4.2 + '@jest/types': 29.4.2 chalk: 4.1.2 jest-get-type: 29.4.2 jest-util: 29.4.2 @@ -14508,38 +11135,29 @@ packages: dev: true /jest-environment-node@29.4.2: - resolution: - { - integrity: sha512-MLPrqUcOnNBc8zTOfqBbxtoa8/Ee8tZ7UFW7hRDQSUT+NGsvS96wlbHGTf+EFAT9KC3VNb7fWEM6oyvmxtE/9w==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/environment": 29.4.2 - "@jest/fake-timers": 29.4.2 - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-MLPrqUcOnNBc8zTOfqBbxtoa8/Ee8tZ7UFW7hRDQSUT+NGsvS96wlbHGTf+EFAT9KC3VNb7fWEM6oyvmxtE/9w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.2 + '@jest/fake-timers': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 jest-mock: 29.4.2 jest-util: 29.4.2 dev: true /jest-get-type@29.4.2: - resolution: - { - integrity: sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /jest-haste-map@29.4.2: - resolution: - { - integrity: sha512-WkUgo26LN5UHPknkezrBzr7lUtV1OpGsp+NfXbBwHztsFruS3gz+AMTTBcEklvi8uPzpISzYjdKXYZQJXBnfvw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/types": 29.4.2 - "@types/graceful-fs": 4.1.6 - "@types/node": 18.13.0 + resolution: {integrity: sha512-WkUgo26LN5UHPknkezrBzr7lUtV1OpGsp+NfXbBwHztsFruS3gz+AMTTBcEklvi8uPzpISzYjdKXYZQJXBnfvw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/graceful-fs': 4.1.6 + '@types/node': 18.13.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -14553,22 +11171,16 @@ packages: dev: true /jest-leak-detector@29.4.2: - resolution: - { - integrity: sha512-Wa62HuRJmWXtX9F00nUpWlrbaH5axeYCdyRsOs/+Rb1Vb6+qWTlB5rKwCCRKtorM7owNwKsyJ8NRDUcZ8ghYUA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Wa62HuRJmWXtX9F00nUpWlrbaH5axeYCdyRsOs/+Rb1Vb6+qWTlB5rKwCCRKtorM7owNwKsyJ8NRDUcZ8ghYUA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.2 pretty-format: 29.4.2 dev: true /jest-matcher-utils@29.4.2: - resolution: - { - integrity: sha512-EZaAQy2je6Uqkrm6frnxBIdaWtSYFoR8SVb2sNLAtldswlR/29JAgx+hy67llT3+hXBaLB0zAm5UfeqerioZyg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-EZaAQy2je6Uqkrm6frnxBIdaWtSYFoR8SVb2sNLAtldswlR/29JAgx+hy67llT3+hXBaLB0zAm5UfeqerioZyg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 jest-diff: 29.4.2 @@ -14577,15 +11189,12 @@ packages: dev: true /jest-message-util@29.4.2: - resolution: - { - integrity: sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@babel/code-frame": 7.18.6 - "@jest/types": 29.4.2 - "@types/stack-utils": 2.0.1 + resolution: {integrity: sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.18.6 + '@jest/types': 29.4.2 + '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 @@ -14595,49 +11204,37 @@ packages: 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.4.1 - "@types/node": 18.13.0 + resolution: {integrity: sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.1 + '@types/node': 18.13.0 jest-util: 29.4.1 dev: true /jest-mock@29.4.1: - resolution: - { - integrity: sha512-MwA4hQ7zBOcgVCVnsM8TzaFLVUD/pFWTfbkY953Y81L5ret3GFRZtmPmRFAjKQSdCKoJvvqOu6Bvfpqlwwb0dQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-MwA4hQ7zBOcgVCVnsM8TzaFLVUD/pFWTfbkY953Y81L5ret3GFRZtmPmRFAjKQSdCKoJvvqOu6Bvfpqlwwb0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/node': 18.13.0 jest-util: 29.4.2 dev: true /jest-mock@29.4.2: - resolution: - { - integrity: sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/node': 18.13.0 jest-util: 29.4.2 dev: true /jest-pnp-resolver@1.2.3(jest-resolve@29.4.2): - resolution: - { - integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} peerDependencies: - jest-resolve: "*" + jest-resolve: '*' peerDependenciesMeta: jest-resolve: optional: true @@ -14646,19 +11243,13 @@ packages: dev: true /jest-regex-util@29.4.2: - resolution: - { - integrity: sha512-XYZXOqUl1y31H6VLMrrUL1ZhXuiymLKPz0BO1kEeR5xER9Tv86RZrjTm74g5l9bPJQXA/hyLdaVPN/sdqfteig==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-XYZXOqUl1y31H6VLMrrUL1ZhXuiymLKPz0BO1kEeR5xER9Tv86RZrjTm74g5l9bPJQXA/hyLdaVPN/sdqfteig==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /jest-resolve-dependencies@29.4.2: - resolution: - { - integrity: sha512-6pL4ptFw62rjdrPk7rRpzJYgcRqRZNsZTF1VxVTZMishbO6ObyWvX57yHOaNGgKoADtAHRFYdHQUEvYMJATbDg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-6pL4ptFw62rjdrPk7rRpzJYgcRqRZNsZTF1VxVTZMishbO6ObyWvX57yHOaNGgKoADtAHRFYdHQUEvYMJATbDg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.4.2 jest-snapshot: 29.4.2 @@ -14667,11 +11258,8 @@ packages: dev: true /jest-resolve@29.4.2: - resolution: - { - integrity: sha512-RtKWW0mbR3I4UdkOrW7552IFGLYQ5AF9YrzD0FnIOkDu0rAMlA5/Y1+r7lhCAP4nXSBTaE7ueeqj6IOwZpgoqw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-RtKWW0mbR3I4UdkOrW7552IFGLYQ5AF9YrzD0FnIOkDu0rAMlA5/Y1+r7lhCAP4nXSBTaE7ueeqj6IOwZpgoqw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 @@ -14685,18 +11273,15 @@ packages: dev: true /jest-runner@29.4.2: - resolution: - { - integrity: sha512-wqwt0drm7JGjwdH+x1XgAl+TFPH7poowMguPQINYxaukCqlczAcNLJiK+OLxUxQAEWMdy+e6nHZlFHO5s7EuRg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/console": 29.4.2 - "@jest/environment": 29.4.2 - "@jest/test-result": 29.4.2 - "@jest/transform": 29.4.2 - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-wqwt0drm7JGjwdH+x1XgAl+TFPH7poowMguPQINYxaukCqlczAcNLJiK+OLxUxQAEWMdy+e6nHZlFHO5s7EuRg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.4.2 + '@jest/environment': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -14717,20 +11302,17 @@ packages: dev: true /jest-runtime@29.4.2: - resolution: - { - integrity: sha512-3fque9vtpLzGuxT9eZqhxi+9EylKK/ESfhClv4P7Y9sqJPs58LjVhTt8jaMp/pRO38agll1CkSu9z9ieTQeRrw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/environment": 29.4.2 - "@jest/fake-timers": 29.4.2 - "@jest/globals": 29.4.2 - "@jest/source-map": 29.4.2 - "@jest/test-result": 29.4.2 - "@jest/transform": 29.4.2 - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-3fque9vtpLzGuxT9eZqhxi+9EylKK/ESfhClv4P7Y9sqJPs58LjVhTt8jaMp/pRO38agll1CkSu9z9ieTQeRrw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.2 + '@jest/fake-timers': 29.4.2 + '@jest/globals': 29.4.2 + '@jest/source-map': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -14751,23 +11333,20 @@ packages: dev: true /jest-snapshot@29.4.2: - resolution: - { - integrity: sha512-PdfubrSNN5KwroyMH158R23tWcAXJyx4pvSvWls1dHoLCaUhGul9rsL3uVjtqzRpkxlkMavQjGuWG1newPgmkw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@babel/core": 7.20.12 - "@babel/generator": 7.20.14 - "@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.13 - "@babel/types": 7.21.4 - "@jest/expect-utils": 29.4.2 - "@jest/transform": 29.4.2 - "@jest/types": 29.4.2 - "@types/babel__traverse": 7.18.3 - "@types/prettier": 2.7.2 + resolution: {integrity: sha512-PdfubrSNN5KwroyMH158R23tWcAXJyx4pvSvWls1dHoLCaUhGul9rsL3uVjtqzRpkxlkMavQjGuWG1newPgmkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.20.12 + '@babel/generator': 7.20.14 + '@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.13 + '@babel/types': 7.21.4 + '@jest/expect-utils': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@types/babel__traverse': 7.18.3 + '@types/prettier': 2.7.2 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.12) chalk: 4.1.2 expect: 29.4.2 @@ -14786,14 +11365,11 @@ packages: dev: true /jest-util@29.4.1: - resolution: - { - integrity: sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/node': 18.13.0 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -14801,14 +11377,11 @@ packages: dev: true /jest-util@29.4.2: - resolution: - { - integrity: sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/node': 18.13.0 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -14816,13 +11389,10 @@ packages: dev: true /jest-validate@29.4.2: - resolution: - { - integrity: sha512-tto7YKGPJyFbhcKhIDFq8B5od+eVWD/ySZ9Tvcp/NGCvYA4RQbuzhbwYWtIjMT5W5zA2W0eBJwu4HVw34d5G6Q==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-tto7YKGPJyFbhcKhIDFq8B5od+eVWD/ySZ9Tvcp/NGCvYA4RQbuzhbwYWtIjMT5W5zA2W0eBJwu4HVw34d5G6Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@jest/types": 29.4.2 + '@jest/types': 29.4.2 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 29.4.2 @@ -14831,15 +11401,12 @@ packages: dev: true /jest-watcher@29.4.2: - resolution: - { - integrity: sha512-onddLujSoGiMJt+tKutehIidABa175i/Ays+QvKxCqBwp7fvxP3ZhKsrIdOodt71dKxqk4sc0LN41mWLGIK44w==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - "@jest/test-result": 29.4.2 - "@jest/types": 29.4.2 - "@types/node": 18.13.0 + resolution: {integrity: sha512-onddLujSoGiMJt+tKutehIidABa175i/Ays+QvKxCqBwp7fvxP3ZhKsrIdOodt71dKxqk4sc0LN41mWLGIK44w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -14848,24 +11415,18 @@ packages: dev: true /jest-worker@29.4.2: - resolution: - { - integrity: sha512-VIuZA2hZmFyRbchsUCHEehoSf2HEl0YVF8SDJqtPnKorAaBuh42V8QsLnde0XP5F6TyCynGPEGgBOn3Fc+wZGw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-VIuZA2hZmFyRbchsUCHEehoSf2HEl0YVF8SDJqtPnKorAaBuh42V8QsLnde0XP5F6TyCynGPEGgBOn3Fc+wZGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 jest-util: 29.4.2 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true /jest@29.4.2(@types/node@18.13.0)(ts-node@10.9.1): - resolution: - { - integrity: sha512-+5hLd260vNIHu+7ZgMIooSpKl7Jp5pHKb51e73AJU3owd5dEo/RfVwHbA/na3C/eozrt3hJOLGf96c7EWwIAzg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-+5hLd260vNIHu+7ZgMIooSpKl7Jp5pHKb51e73AJU3owd5dEo/RfVwHbA/na3C/eozrt3hJOLGf96c7EWwIAzg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -14873,193 +11434,124 @@ packages: node-notifier: optional: true dependencies: - "@jest/core": 29.4.2(ts-node@10.9.1) - "@jest/types": 29.4.2 + '@jest/core': 29.4.2(ts-node@10.9.1) + '@jest/types': 29.4.2 import-local: 3.1.0 jest-cli: 29.4.2(@types/node@18.13.0)(ts-node@10.9.1) transitivePeerDependencies: - - "@types/node" + - '@types/node' - supports-color - ts-node dev: true /jmespath@0.16.0: - resolution: - { - integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==, - } - engines: { node: ">= 0.6.0" } + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} /jose@4.11.4: - resolution: - { - integrity: sha512-94FdcR8felat4vaTJyL/WVdtlWLlsnLMZP8v+A0Vru18K3bQ22vn7TtpVh3JlgBFNIlYOUlGqwp/MjRPOnIyCQ==, - } + resolution: {integrity: sha512-94FdcR8felat4vaTJyL/WVdtlWLlsnLMZP8v+A0Vru18K3bQ22vn7TtpVh3JlgBFNIlYOUlGqwp/MjRPOnIyCQ==} dev: false /js-sdsl@4.3.0: - resolution: - { - integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==, - } + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} dev: true /js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} /js-yaml@3.14.1: - resolution: - { - integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, - } + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 /js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, - } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true /jsesc@2.5.2: - resolution: - { - integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} hasBin: true dev: true /json-parse-better-errors@1.0.2: - resolution: - { - integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, - } + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true /json-parse-even-better-errors@2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, - } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true /json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true /json-schema-typed@7.0.3: - resolution: - { - integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==, - } + resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} dev: true /json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true /json-stringify-nice@1.1.4: - resolution: - { - integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==, - } + resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==} dev: true /json-stringify-safe@5.0.1: - resolution: - { - integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, - } + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true /json5@1.0.2: - resolution: - { - integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, - } + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: minimist: 1.2.8 dev: true /json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true dev: true /jsonc-parser@3.2.0: - resolution: - { - integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, - } + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true /jsonfile@4.0.0: - resolution: - { - integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, - } + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 dev: true /jsonfile@6.1.0: - resolution: - { - integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, - } + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.11 /jsonparse@1.3.1: - resolution: - { - integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==, - } - engines: { "0": node >= 0.2.0 } + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} dev: true /jsonschema@1.4.1: - resolution: - { - integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==, - } + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} /jsonwebtoken@9.0.0: - resolution: - { - integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==, - } - engines: { node: ">=12", npm: ">=6" } + resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} + engines: {node: '>=12', npm: '>=6'} dependencies: jws: 3.2.2 lodash: 4.17.21 @@ -15068,44 +11560,29 @@ packages: dev: false /jsx-ast-utils@3.3.3: - resolution: - { - integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} dependencies: array-includes: 3.1.6 object.assign: 4.1.4 dev: true /jszip@2.7.0: - resolution: - { - integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==, - } + resolution: {integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==} dependencies: pako: 1.0.11 dev: true /just-diff-apply@5.5.0: - resolution: - { - integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==, - } + resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} dev: true /just-diff@5.2.0: - resolution: - { - integrity: sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==, - } + resolution: {integrity: sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==} dev: true /jwa@1.4.1: - resolution: - { - integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==, - } + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 @@ -15113,49 +11590,34 @@ packages: dev: false /jws@3.2.2: - resolution: - { - integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==, - } + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 dev: false /kind-of@6.0.3: - resolution: - { - integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} dev: true /klaw-sync@6.0.0: - resolution: - { - integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==, - } + resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} dependencies: graceful-fs: 4.2.11 dev: false /kleur@3.0.3: - resolution: - { - integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} dev: true /kysely-codegen@0.6.2(kysely@0.21.6): - resolution: - { - integrity: sha512-AWiaSQ0CBuiHsB3ubBFCf8838BaG8sypdjWi7tCJoNcAvJo1Ls8WO+1YWOi6IAjU4fBO4kG/t1rj4EnSVQwm9A==, - } + resolution: {integrity: sha512-AWiaSQ0CBuiHsB3ubBFCf8838BaG8sypdjWi7tCJoNcAvJo1Ls8WO+1YWOi6IAjU4fBO4kG/t1rj4EnSVQwm9A==} hasBin: true peerDependencies: better-sqlite3: ^7.6.2 - kysely: ">=0.19.12" + kysely: '>=0.19.12' mysql2: ^2.3.3 pg: ^8.7.3 peerDependenciesMeta: @@ -15174,10 +11636,7 @@ packages: dev: true /kysely-data-api@0.1.4(aws-sdk@2.1314.0)(kysely@0.21.6): - resolution: - { - integrity: sha512-7xgXbNuhsBAOi3PWAc5vETt0kMPCMH9qeOSsmkoVVqhvswa9v3lWUxGOQGhg9ABQqFyTbJe+JdLgd/wChIMiFw==, - } + resolution: {integrity: sha512-7xgXbNuhsBAOi3PWAc5vETt0kMPCMH9qeOSsmkoVVqhvswa9v3lWUxGOQGhg9ABQqFyTbJe+JdLgd/wChIMiFw==} peerDependencies: aws-sdk: 2.x kysely: 0.x @@ -15187,63 +11646,51 @@ packages: dev: true /kysely@0.21.6: - resolution: - { - integrity: sha512-DNecGKzzYtx2OumPJ8inrVFsSfq1lNHLFZDJvXMQxqbrTFElqq70VLR3DiK0P9fw4pB+xXTYvLiLurWiYqgk3w==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-DNecGKzzYtx2OumPJ8inrVFsSfq1lNHLFZDJvXMQxqbrTFElqq70VLR3DiK0P9fw4pB+xXTYvLiLurWiYqgk3w==} + engines: {node: '>=14.0.0'} dev: true /layerr@0.1.2: - resolution: - { - integrity: sha512-ob5kTd9H3S4GOG2nVXyQhOu9O8nBgP555XxWPkJI0tR0JeRilfyTp8WtPdIJHLXBmHMSdEq5+KMxiYABeScsIQ==, - } + resolution: {integrity: sha512-ob5kTd9H3S4GOG2nVXyQhOu9O8nBgP555XxWPkJI0tR0JeRilfyTp8WtPdIJHLXBmHMSdEq5+KMxiYABeScsIQ==} /lazystream@1.0.1: - resolution: - { - integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==, - } - engines: { node: ">= 0.6.3" } + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} dependencies: readable-stream: 2.3.8 dev: true /lerna@5.6.2: - resolution: - { - integrity: sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w==, - } - engines: { node: ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w==} + engines: {node: ^14.15.0 || >=16.0.0} hasBin: true dependencies: - "@lerna/add": 5.6.2 - "@lerna/bootstrap": 5.6.2 - "@lerna/changed": 5.6.2 - "@lerna/clean": 5.6.2 - "@lerna/cli": 5.6.2 - "@lerna/command": 5.6.2 - "@lerna/create": 5.6.2 - "@lerna/diff": 5.6.2 - "@lerna/exec": 5.6.2 - "@lerna/import": 5.6.2 - "@lerna/info": 5.6.2 - "@lerna/init": 5.6.2 - "@lerna/link": 5.6.2 - "@lerna/list": 5.6.2 - "@lerna/publish": 5.6.2(nx@15.6.3)(typescript@4.9.5) - "@lerna/run": 5.6.2 - "@lerna/version": 5.6.2(nx@15.6.3)(typescript@4.9.5) - "@nrwl/devkit": 15.6.3(nx@15.6.3)(typescript@4.9.5) + '@lerna/add': 5.6.2 + '@lerna/bootstrap': 5.6.2 + '@lerna/changed': 5.6.2 + '@lerna/clean': 5.6.2 + '@lerna/cli': 5.6.2 + '@lerna/command': 5.6.2 + '@lerna/create': 5.6.2 + '@lerna/diff': 5.6.2 + '@lerna/exec': 5.6.2 + '@lerna/import': 5.6.2 + '@lerna/info': 5.6.2 + '@lerna/init': 5.6.2 + '@lerna/link': 5.6.2 + '@lerna/list': 5.6.2 + '@lerna/publish': 5.6.2(nx@15.6.3)(typescript@4.9.5) + '@lerna/run': 5.6.2 + '@lerna/version': 5.6.2(nx@15.6.3)(typescript@4.9.5) + '@nrwl/devkit': 15.6.3(nx@15.6.3)(typescript@4.9.5) import-local: 3.1.0 inquirer: 8.2.5 npmlog: 6.0.2 nx: 15.6.3 typescript: 4.9.5 transitivePeerDependencies: - - "@swc-node/register" - - "@swc/core" + - '@swc-node/register' + - '@swc/core' - bluebird - debug - encoding @@ -15251,41 +11698,29 @@ packages: dev: true /leven@3.1.0: - resolution: - { - integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} dev: true /levn@0.3.0: - resolution: - { - integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 dev: true /levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 dev: true /libnpmaccess@6.0.4: - resolution: - { - integrity: sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: aproba: 2.0.0 minipass: 3.3.6 @@ -15297,11 +11732,8 @@ packages: dev: true /libnpmpublish@6.0.5: - resolution: - { - integrity: sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: normalize-package-data: 4.0.1 npm-package-arg: 9.1.2 @@ -15314,34 +11746,22 @@ packages: dev: true /lilconfig@2.0.6: - resolution: - { - integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + engines: {node: '>=10'} dev: true /lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, - } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true /lines-and-columns@2.0.3: - resolution: - { - integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true /lint-staged@13.1.2: - resolution: - { - integrity: sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==, - } - engines: { node: ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==} + engines: {node: ^14.13.1 || >=16.0.0} hasBin: true dependencies: cli-truncate: 3.1.0 @@ -15363,13 +11783,10 @@ packages: dev: true /listr2@5.0.7: - resolution: - { - integrity: sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==, - } - engines: { node: ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==} + engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: - enquirer: ">= 2.3.0 < 3" + enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: enquirer: optional: true @@ -15385,11 +11802,8 @@ packages: dev: true /load-json-file@4.0.0: - resolution: - { - integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} dependencies: graceful-fs: 4.2.11 parse-json: 4.0.0 @@ -15398,11 +11812,8 @@ packages: dev: true /load-json-file@6.2.0: - resolution: - { - integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} + engines: {node: '>=8'} dependencies: graceful-fs: 4.2.11 parse-json: 5.2.0 @@ -15411,150 +11822,96 @@ packages: dev: true /local-pkg@0.4.3: - resolution: - { - integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} dev: true /locate-path@2.0.0: - resolution: - { - integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} dependencies: p-locate: 2.0.0 path-exists: 3.0.0 dev: true /locate-path@3.0.0: - resolution: - { - integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} dependencies: p-locate: 3.0.0 path-exists: 3.0.0 dev: true /locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true /locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 /lodash.defaults@4.2.0: - resolution: - { - integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==, - } + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} dev: true /lodash.difference@4.5.0: - resolution: - { - integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==, - } + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} dev: true /lodash.flatten@4.4.0: - resolution: - { - integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==, - } + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} dev: true /lodash.ismatch@4.4.0: - resolution: - { - integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==, - } + resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} dev: true /lodash.isplainobject@4.0.6: - resolution: - { - integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==, - } + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true /lodash.isstring@4.0.1: - resolution: - { - integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==, - } + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: false /lodash.memoize@4.1.2: - resolution: - { - integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, - } + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true /lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true /lodash.union@4.6.0: - resolution: - { - integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==, - } + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} dev: true /lodash@4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, - } + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} /log-symbols@4.1.0: - resolution: - { - integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 /log-symbols@5.1.0: - resolution: - { - integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} dependencies: chalk: 5.2.0 is-unicode-supported: 1.3.0 dev: false /log-update@4.0.0: - resolution: - { - integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 @@ -15563,11 +11920,8 @@ packages: dev: true /log4js@6.9.1: - resolution: - { - integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} + engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 debug: 4.3.4 @@ -15579,112 +11933,76 @@ packages: dev: true /loose-envify@1.4.0: - resolution: - { - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, - } + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 /loupe@2.3.6: - resolution: - { - integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==, - } + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: get-func-name: 2.0.0 dev: true /lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true /lru-cache@6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: yallist: 4.0.0 /lru-cache@7.14.1: - resolution: - { - integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==} + engines: {node: '>=12'} dev: true /magic-string@0.25.9: - resolution: - { - integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, - } + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 dev: true /magic-string@0.27.0: - resolution: - { - integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} dependencies: - "@jridgewell/sourcemap-codec": 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true /magicast@0.2.4: - resolution: - { - integrity: sha512-MQPwvpNLQTqaBz0WUqupzDF/Tj9mGXbR2vgENloovPmikiHXzk56HICC+d1LdLqzcLLohEHDd01B43byzr+3tg==, - } + resolution: {integrity: sha512-MQPwvpNLQTqaBz0WUqupzDF/Tj9mGXbR2vgENloovPmikiHXzk56HICC+d1LdLqzcLLohEHDd01B43byzr+3tg==} dependencies: - "@babel/parser": 7.21.4 - "@babel/types": 7.21.4 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 recast: 0.22.0 dev: false /make-dir@2.1.0: - resolution: - { - integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} dependencies: pify: 4.0.1 semver: 5.7.1 dev: true /make-dir@3.1.0: - resolution: - { - integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true /make-error@1.3.6: - resolution: - { - integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, - } + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} /make-fetch-happen@10.2.1: - resolution: - { - integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: agentkeepalive: 4.2.1 cacache: 16.1.3 @@ -15708,11 +12026,8 @@ packages: dev: true /make-fetch-happen@8.0.14: - resolution: - { - integrity: sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==} + engines: {node: '>= 10'} dependencies: agentkeepalive: 4.2.1 cacache: 15.3.0 @@ -15735,45 +12050,30 @@ packages: dev: true /makeerror@1.0.12: - resolution: - { - integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, - } + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true /map-obj@1.0.1: - resolution: - { - integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} dev: true /map-obj@4.3.0: - resolution: - { - integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} dev: true /media-typer@0.3.0: - resolution: - { - integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} /meow@8.1.2: - resolution: - { - integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} dependencies: - "@types/minimist": 1.2.2 + '@types/minimist': 1.2.2 camelcase-keys: 6.2.2 decamelize-keys: 1.1.1 hard-rejection: 2.1.0 @@ -15787,138 +12087,87 @@ packages: dev: true /merge-descriptors@1.0.1: - resolution: - { - integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==, - } + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} /merge-stream@2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, - } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true /merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true /methods@1.1.2: - resolution: - { - integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} /micromatch@4.0.5: - resolution: - { - integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 /mime-db@1.52.0: - resolution: - { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} /mime-types@2.1.35: - resolution: - { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 /mime@1.6.0: - resolution: - { - integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} hasBin: true /mimic-fn@2.1.0: - resolution: - { - integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} /mimic-fn@3.1.0: - resolution: - { - integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} dev: true /mimic-fn@4.0.0: - resolution: - { - integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} dev: true /min-indent@1.0.1: - resolution: - { - integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} dev: true /minimalistic-assert@1.0.1: - resolution: - { - integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, - } + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: false /minimatch@3.0.5: - resolution: - { - integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==, - } + resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} dependencies: brace-expansion: 1.1.11 dev: true /minimatch@3.1.2: - resolution: - { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, - } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 /minimatch@5.1.6: - resolution: - { - integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true /minimist-options@4.1.0: - resolution: - { - integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 @@ -15926,27 +12175,18 @@ packages: dev: true /minimist@1.2.8: - resolution: - { - integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, - } + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} /minipass-collect@1.0.2: - resolution: - { - integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true /minipass-fetch@1.4.1: - resolution: - { - integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} dependencies: minipass: 3.3.6 minipass-sized: 1.0.3 @@ -15956,11 +12196,8 @@ packages: dev: true /minipass-fetch@2.1.2: - resolution: - { - integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: minipass: 3.3.6 minipass-sized: 1.0.3 @@ -15970,80 +12207,56 @@ packages: dev: true /minipass-flush@1.0.5: - resolution: - { - integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true /minipass-json-stream@1.0.1: - resolution: - { - integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==, - } + resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} dependencies: jsonparse: 1.3.1 minipass: 3.3.6 dev: true /minipass-pipeline@1.2.4: - resolution: - { - integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} dependencies: minipass: 3.3.6 dev: true /minipass-sized@1.0.3: - resolution: - { - integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} dependencies: minipass: 3.3.6 dev: true /minipass@3.3.6: - resolution: - { - integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} dependencies: yallist: 4.0.0 dev: true /minipass@4.0.3: - resolution: - { - integrity: sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==} + engines: {node: '>=8'} dev: true /minizlib@2.1.2: - resolution: - { - integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 yallist: 4.0.0 dev: true /mkdirp-infer-owner@2.0.0: - resolution: - { - integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==} + engines: {node: '>=10'} dependencies: chownr: 2.0.0 infer-owner: 1.0.4 @@ -16051,19 +12264,13 @@ packages: dev: true /mkdirp@1.0.4: - resolution: - { - integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} hasBin: true dev: true /mlly@1.1.0: - resolution: - { - integrity: sha512-cwzBrBfwGC1gYJyfcy8TcZU1f+dbH/T+TuOhtYP2wLv/Fb51/uV7HJQfBPtEupZ2ORLRU1EKFS/QfS3eo9+kBQ==, - } + resolution: {integrity: sha512-cwzBrBfwGC1gYJyfcy8TcZU1f+dbH/T+TuOhtYP2wLv/Fb51/uV7HJQfBPtEupZ2ORLRU1EKFS/QfS3eo9+kBQ==} dependencies: acorn: 8.8.2 pathe: 1.1.0 @@ -16072,58 +12279,37 @@ packages: dev: true /mnemonist@0.38.3: - resolution: - { - integrity: sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==, - } + resolution: {integrity: sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==} dependencies: obliterator: 1.6.1 dev: false /mnemonist@0.39.5: - resolution: - { - integrity: sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==, - } + resolution: {integrity: sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==} dependencies: obliterator: 2.0.4 dev: false /modify-values@1.0.1: - resolution: - { - integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} + engines: {node: '>=0.10.0'} dev: true /ms@2.0.0: - resolution: - { - integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, - } + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} /ms@2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, - } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true /ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} /multimatch@5.0.0: - resolution: - { - integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} dependencies: - "@types/minimatch": 3.0.5 + '@types/minimatch': 3.0.5 array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 @@ -16131,74 +12317,44 @@ packages: dev: true /mute-stream@0.0.8: - resolution: - { - integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==, - } + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} /nanoid@3.3.4: - resolution: - { - integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true /natural-compare-lite@1.4.0: - resolution: - { - integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==, - } + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true /natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true /negotiator@0.6.3: - resolution: - { - integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} /neo-async@2.6.2: - resolution: - { - integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, - } + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true /nice-try@1.0.5: - resolution: - { - integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, - } + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: false /node-addon-api@3.2.1: - resolution: - { - integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==, - } + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} dev: true /node-domexception@1.0.0: - resolution: - { - integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==, - } - engines: { node: ">=10.5.0" } + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} /node-fetch@2.6.9: - resolution: - { - integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==, - } - engines: { node: 4.x || >=6.0.0 } + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -16209,11 +12365,8 @@ packages: dev: true /node-fetch@3.2.10: - resolution: - { - integrity: sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 @@ -16221,11 +12374,8 @@ packages: dev: false /node-fetch@3.3.0: - resolution: - { - integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 @@ -16233,19 +12383,13 @@ packages: dev: true /node-gyp-build@4.6.0: - resolution: - { - integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==, - } + resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true dev: true /node-gyp@8.1.0: - resolution: - { - integrity: sha512-o2elh1qt7YUp3lkMwY3/l4KF3j/A3fI/Qt4NH+CQQgPJdqGE9y7qnP84cjIWN27Q0jJkrSAhCVDg+wBVNBYdBg==, - } - engines: { node: ">= 10.12.0" } + resolution: {integrity: sha512-o2elh1qt7YUp3lkMwY3/l4KF3j/A3fI/Qt4NH+CQQgPJdqGE9y7qnP84cjIWN27Q0jJkrSAhCVDg+wBVNBYdBg==} + engines: {node: '>= 10.12.0'} hasBin: true dependencies: env-paths: 2.2.1 @@ -16264,11 +12408,8 @@ packages: dev: true /node-gyp@9.3.1: - resolution: - { - integrity: sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==, - } - engines: { node: ^12.13 || ^14.13 || >=16 } + resolution: {integrity: sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==} + engines: {node: ^12.13 || ^14.13 || >=16} hasBin: true dependencies: env-paths: 2.2.1 @@ -16287,46 +12428,31 @@ packages: dev: true /node-int64@0.4.0: - resolution: - { - integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, - } + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true /node-releases@2.0.10: - resolution: - { - integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==, - } + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true /nopt@5.0.0: - resolution: - { - integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} hasBin: true dependencies: abbrev: 1.1.1 dev: true /nopt@6.0.0: - resolution: - { - integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} hasBin: true dependencies: abbrev: 1.1.1 dev: true /normalize-package-data@2.5.0: - resolution: - { - integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, - } + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 resolve: 1.22.1 @@ -16335,11 +12461,8 @@ packages: dev: true /normalize-package-data@3.0.3: - resolution: - { - integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 is-core-module: 2.11.0 @@ -16348,11 +12471,8 @@ packages: dev: true /normalize-package-data@4.0.1: - resolution: - { - integrity: sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: hosted-git-info: 5.2.1 is-core-module: 2.11.0 @@ -16361,63 +12481,42 @@ packages: dev: true /normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: true /npm-bundled@1.1.2: - resolution: - { - integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==, - } + resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} dependencies: npm-normalize-package-bin: 1.0.1 dev: true /npm-bundled@2.0.1: - resolution: - { - integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: npm-normalize-package-bin: 2.0.0 dev: true /npm-install-checks@5.0.0: - resolution: - { - integrity: sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: semver: 7.5.0 dev: true /npm-normalize-package-bin@1.0.1: - resolution: - { - integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==, - } + resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} dev: true /npm-normalize-package-bin@2.0.0: - resolution: - { - integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true /npm-package-arg@8.1.1: - resolution: - { - integrity: sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==} + engines: {node: '>=10'} dependencies: hosted-git-info: 3.0.8 semver: 7.5.0 @@ -16425,11 +12524,8 @@ packages: dev: true /npm-package-arg@9.1.2: - resolution: - { - integrity: sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: hosted-git-info: 5.2.1 proc-log: 2.0.1 @@ -16438,11 +12534,8 @@ packages: dev: true /npm-packlist@5.1.3: - resolution: - { - integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} hasBin: true dependencies: glob: 8.1.0 @@ -16452,11 +12545,8 @@ packages: dev: true /npm-pick-manifest@7.0.2: - resolution: - { - integrity: sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: npm-install-checks: 5.0.0 npm-normalize-package-bin: 2.0.0 @@ -16465,11 +12555,8 @@ packages: dev: true /npm-registry-fetch@13.3.1: - resolution: - { - integrity: sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: make-fetch-happen: 10.2.1 minipass: 3.3.6 @@ -16484,30 +12571,21 @@ packages: dev: true /npm-run-path@4.0.1: - resolution: - { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true /npm-run-path@5.1.0: - resolution: - { - integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true /npmlog@4.1.2: - resolution: - { - integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==, - } + resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} dependencies: are-we-there-yet: 1.1.7 console-control-strings: 1.1.0 @@ -16516,11 +12594,8 @@ packages: dev: true /npmlog@6.0.2: - resolution: - { - integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: are-we-there-yet: 3.0.1 console-control-strings: 1.1.0 @@ -16529,35 +12604,29 @@ packages: dev: true /number-is-nan@1.0.1: - resolution: - { - integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} dev: true /nx@15.6.3: - resolution: - { - integrity: sha512-3t0A0GPLNen1yPAyE+VGZ3nkAzZYb5nfXtAcx8SHBlKq4u42yBY3khBmP1y4Og3jhIwFIj7J7Npeh8ZKrthmYQ==, - } + resolution: {integrity: sha512-3t0A0GPLNen1yPAyE+VGZ3nkAzZYb5nfXtAcx8SHBlKq4u42yBY3khBmP1y4Og3jhIwFIj7J7Npeh8ZKrthmYQ==} hasBin: true requiresBuild: true peerDependencies: - "@swc-node/register": ^1.4.2 - "@swc/core": ^1.2.173 + '@swc-node/register': ^1.4.2 + '@swc/core': ^1.2.173 peerDependenciesMeta: - "@swc-node/register": + '@swc-node/register': optional: true - "@swc/core": + '@swc/core': optional: true dependencies: - "@nrwl/cli": 15.6.3 - "@nrwl/tao": 15.6.3 - "@parcel/watcher": 2.0.4 - "@yarnpkg/lockfile": 1.1.0 - "@yarnpkg/parsers": 3.0.0-rc.39 - "@zkochan/js-yaml": 0.0.6 + '@nrwl/cli': 15.6.3 + '@nrwl/tao': 15.6.3 + '@parcel/watcher': 2.0.4 + '@yarnpkg/lockfile': 1.1.0 + '@yarnpkg/parsers': 3.0.0-rc.39 + '@zkochan/js-yaml': 0.0.6 axios: 1.3.3 chalk: 4.1.2 cli-cursor: 3.1.0 @@ -16592,51 +12661,33 @@ packages: dev: true /object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} dev: true /object-hash@2.2.0: - resolution: - { - integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + engines: {node: '>= 6'} dev: false /object-inspect@1.12.3: - resolution: - { - integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, - } + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} /object-is@1.1.5: - resolution: - { - integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 dev: false /object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} /object.assign@4.1.4: - resolution: - { - integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -16644,11 +12695,8 @@ packages: object-keys: 1.1.1 /object.entries@1.1.6: - resolution: - { - integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -16656,11 +12704,8 @@ packages: dev: true /object.fromentries@2.0.6: - resolution: - { - integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -16668,21 +12713,15 @@ packages: dev: true /object.hasown@1.1.2: - resolution: - { - integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==, - } + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: define-properties: 1.2.0 es-abstract: 1.21.1 dev: true /object.values@1.1.6: - resolution: - { - integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -16690,91 +12729,61 @@ packages: dev: true /obliterator@1.6.1: - resolution: - { - integrity: sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==, - } + resolution: {integrity: sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==} dev: false /obliterator@2.0.4: - resolution: - { - integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==, - } + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: false /oidc-token-hash@5.0.1: - resolution: - { - integrity: sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==, - } - engines: { node: ^10.13.0 || >=12.0.0 } + resolution: {integrity: sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==} + engines: {node: ^10.13.0 || >=12.0.0} dev: false /on-finished@2.4.1: - resolution: - { - integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 /once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, - } + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 /onetime@5.1.2: - resolution: - { - integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 /onetime@6.0.0: - resolution: - { - integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true /open@7.4.2: - resolution: - { - integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 is-wsl: 2.2.0 dev: false /open@8.4.1: - resolution: - { - integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==} + engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 /open@8.4.2: - resolution: - { - integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 @@ -16782,18 +12791,12 @@ packages: dev: true /openapi3-ts@3.1.2: - resolution: - { - integrity: sha512-S8fijNOqe/ut0kEDAwHZnI7sVYqb8Q3XnISmSyXmK76jgrcf4ableI75KTY1qdksd9EI/t39Vi5M4VYKrkNKfQ==, - } + resolution: {integrity: sha512-S8fijNOqe/ut0kEDAwHZnI7sVYqb8Q3XnISmSyXmK76jgrcf4ableI75KTY1qdksd9EI/t39Vi5M4VYKrkNKfQ==} dependencies: yaml: 2.2.1 /openid-client@5.4.0: - resolution: - { - integrity: sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==, - } + resolution: {integrity: sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==} dependencies: jose: 4.11.4 lru-cache: 6.0.0 @@ -16802,11 +12805,8 @@ packages: dev: false /optionator@0.8.3: - resolution: - { - integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -16817,11 +12817,8 @@ packages: dev: true /optionator@0.9.1: - resolution: - { - integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -16832,11 +12829,8 @@ packages: dev: true /ora@5.4.1: - resolution: - { - integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -16849,11 +12843,8 @@ packages: wcwidth: 1.0.1 /ora@6.1.2: - resolution: - { - integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: bl: 5.1.0 chalk: 5.2.0 @@ -16867,11 +12858,8 @@ packages: dev: false /ora@6.3.0: - resolution: - { - integrity: sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: chalk: 5.2.0 cli-cursor: 4.0.0 @@ -16885,205 +12873,139 @@ packages: dev: false /os-tmpdir@1.0.2: - resolution: - { - integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} /p-cancelable@1.1.0: - resolution: - { - integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} dev: false /p-finally@1.0.0: - resolution: - { - integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} /p-limit@1.3.0: - resolution: - { - integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} dependencies: p-try: 1.0.0 dev: true /p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true /p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 /p-locate@2.0.0: - resolution: - { - integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} dependencies: p-limit: 1.3.0 dev: true /p-locate@3.0.0: - resolution: - { - integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true /p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true /p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 /p-map-series@2.1.0: - resolution: - { - integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==} + engines: {node: '>=8'} dev: true /p-map@4.0.0: - resolution: - { - integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true /p-pipe@3.1.0: - resolution: - { - integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==} + engines: {node: '>=8'} dev: true /p-queue@2.4.2: - resolution: - { - integrity: sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng==} + engines: {node: '>=4'} dev: false /p-queue@6.6.2: - resolution: - { - integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} dependencies: eventemitter3: 4.0.7 p-timeout: 3.2.0 /p-reduce@2.1.0: - resolution: - { - integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} + engines: {node: '>=8'} dev: true /p-retry@4.6.2: - resolution: - { - integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} dependencies: - "@types/retry": 0.12.0 + '@types/retry': 0.12.0 retry: 0.13.1 dev: false /p-timeout@3.2.0: - resolution: - { - integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} dependencies: p-finally: 1.0.0 /p-try@1.0.0: - resolution: - { - integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} dev: true /p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} dev: true /p-waterfall@2.1.1: - resolution: - { - integrity: sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==} + engines: {node: '>=8'} dependencies: p-reduce: 2.1.0 dev: true /pacote@13.6.2: - resolution: - { - integrity: sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} hasBin: true dependencies: - "@npmcli/git": 3.0.2 - "@npmcli/installed-package-contents": 1.0.7 - "@npmcli/promise-spawn": 3.0.0 - "@npmcli/run-script": 4.2.1 + '@npmcli/git': 3.0.2 + '@npmcli/installed-package-contents': 1.0.7 + '@npmcli/promise-spawn': 3.0.0 + '@npmcli/run-script': 4.2.1 cacache: 16.1.3 chownr: 2.0.0 fs-minipass: 2.1.0 @@ -17107,28 +13029,19 @@ packages: dev: true /pako@1.0.11: - resolution: - { - integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, - } + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true /parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true /parse-conflict-json@2.0.2: - resolution: - { - integrity: sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: json-parse-even-better-errors: 2.3.1 just-diff: 5.2.0 @@ -17136,63 +13049,45 @@ packages: dev: true /parse-json@4.0.0: - resolution: - { - integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 dev: true /parse-json@5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: - "@babel/code-frame": 7.18.6 + '@babel/code-frame': 7.18.6 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 dev: true /parse-path@7.0.0: - resolution: - { - integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==, - } + resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} dependencies: protocols: 2.0.1 dev: true /parse-url@8.1.0: - resolution: - { - integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==, - } + resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} dependencies: parse-path: 7.0.0 dev: true /parseurl@1.3.3: - resolution: - { - integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} /patch-package@6.5.1: - resolution: - { - integrity: sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==, - } - engines: { node: ">=10", npm: ">5" } + resolution: {integrity: sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==} + engines: {node: '>=10', npm: '>5'} hasBin: true dependencies: - "@yarnpkg/lockfile": 1.1.0 + '@yarnpkg/lockfile': 1.1.0 chalk: 4.1.2 cross-spawn: 6.0.5 find-yarn-workspace-root: 2.0.0 @@ -17209,179 +13104,110 @@ packages: dev: false /path-exists@3.0.0: - resolution: - { - integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} dev: true /path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} /path-is-absolute@1.0.1: - resolution: - { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} /path-key@2.0.1: - resolution: - { - integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} dev: false /path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true /path-key@4.0.0: - resolution: - { - integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} dev: true /path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} /path-to-regexp@0.1.7: - resolution: - { - integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==, - } + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} /path-type@3.0.0: - resolution: - { - integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} dependencies: pify: 3.0.0 dev: true /path-type@4.0.0: - resolution: - { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} dev: true /pathe@0.2.0: - resolution: - { - integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==, - } + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} dev: true /pathe@1.1.0: - resolution: - { - integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==, - } + resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} dev: true /pathval@1.1.1: - resolution: - { - integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, - } + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true /picocolors@1.0.0: - resolution: - { - integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, - } + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} /picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} /pidtree@0.6.0: - resolution: - { - integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} hasBin: true dev: true /pify@2.3.0: - resolution: - { - integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} dev: true /pify@3.0.0: - resolution: - { - integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} dev: true /pify@4.0.1: - resolution: - { - integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} dev: true /pify@5.0.0: - resolution: - { - integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} dev: true /pirates@4.0.5: - resolution: - { - integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} dev: true /pkg-dir@4.2.0: - resolution: - { - integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true /pkg-types@1.0.1: - resolution: - { - integrity: sha512-jHv9HB+Ho7dj6ItwppRDDl0iZRYBD0jsakHXtFgoLr+cHSF6xC+QL54sJmWxyGxOLYSHm0afhXhXcQDQqH9z8g==, - } + resolution: {integrity: sha512-jHv9HB+Ho7dj6ItwppRDDl0iZRYBD0jsakHXtFgoLr+cHSF6xC+QL54sJmWxyGxOLYSHm0afhXhXcQDQqH9z8g==} dependencies: jsonc-parser: 3.2.0 mlly: 1.1.0 @@ -17389,130 +13215,88 @@ packages: dev: true /pkg-up@3.1.0: - resolution: - { - integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} dependencies: find-up: 3.0.0 dev: true /please-upgrade-node@3.2.0: - resolution: - { - integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==, - } + resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} dependencies: semver-compare: 1.0.0 dev: false /postcss@8.4.21: - resolution: - { - integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 /prelude-ls@1.1.2: - resolution: - { - integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} dev: true /prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} dev: true /prettier@2.8.4: - resolution: - { - integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} + engines: {node: '>=10.13.0'} hasBin: true dev: true /pretty-format@29.4.2: - resolution: - { - integrity: sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - "@jest/schemas": 29.4.2 + '@jest/schemas': 29.4.2 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true /proc-log@2.0.1: - resolution: - { - integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true /process-nextick-args@2.0.1: - resolution: - { - integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, - } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true /promise-all-reject-late@1.0.1: - resolution: - { - integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==, - } + resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} dev: true /promise-call-limit@1.0.1: - resolution: - { - integrity: sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==, - } + resolution: {integrity: sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==} dev: true /promise-inflight@1.0.1: - resolution: - { - integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==, - } + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: - bluebird: "*" + bluebird: '*' peerDependenciesMeta: bluebird: optional: true dev: true /promise-retry@2.0.1: - resolution: - { - integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} dependencies: err-code: 2.0.3 retry: 0.12.0 dev: true /promise.allsettled@1.0.6: - resolution: - { - integrity: sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==} + engines: {node: '>= 0.4'} dependencies: array.prototype.map: 1.0.5 call-bind: 1.0.2 @@ -17523,30 +13307,21 @@ packages: dev: false /prompts@2.4.2: - resolution: - { - integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 dev: true /promzard@0.3.0: - resolution: - { - integrity: sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==, - } + resolution: {integrity: sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==} dependencies: read: 1.0.7 dev: true /prop-types@15.8.1: - resolution: - { - integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, - } + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 @@ -17554,102 +13329,63 @@ packages: dev: true /proto-list@1.2.4: - resolution: - { - integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==, - } + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: true /protocols@2.0.1: - resolution: - { - integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==, - } + resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} dev: true /proxy-addr@2.0.7: - resolution: - { - integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, - } - engines: { node: ">= 0.10" } + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 /proxy-from-env@1.1.0: - resolution: - { - integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, - } + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true /punycode@1.3.2: - resolution: - { - integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==, - } + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} /punycode@2.3.0: - resolution: - { - integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} /q@1.5.1: - resolution: - { - integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==, - } - engines: { node: ">=0.6.0", teleport: ">=0.2.0" } + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true /qs@6.11.0: - resolution: - { - integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==, - } - engines: { node: ">=0.6" } + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 /querystring@0.2.0: - resolution: - { - integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==, - } - engines: { node: ">=0.4.x" } + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. /queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true /quick-lru@4.0.1: - resolution: - { - integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} dev: true /range-parser@1.2.1: - resolution: - { - integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} /raw-body@2.5.1: - resolution: - { - integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 http-errors: 2.0.0 @@ -17657,10 +13393,7 @@ packages: unpipe: 1.0.0 /react-dom@18.2.0(react@18.2.0): - resolution: - { - integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==, - } + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 dependencies: @@ -17670,62 +13403,41 @@ packages: dev: false /react-is@16.13.1: - resolution: - { - integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, - } + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true /react-is@18.2.0: - resolution: - { - integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==, - } + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true /react-refresh@0.14.0: - resolution: - { - integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} dev: true /react@18.2.0: - resolution: - { - integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 dev: false /read-cmd-shim@3.0.1: - resolution: - { - integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true /read-package-json-fast@2.0.3: - resolution: - { - integrity: sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==} + engines: {node: '>=10'} dependencies: json-parse-even-better-errors: 2.3.1 npm-normalize-package-bin: 1.0.1 dev: true /read-package-json@5.0.2: - resolution: - { - integrity: sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: glob: 8.1.0 json-parse-even-better-errors: 2.3.1 @@ -17734,22 +13446,16 @@ packages: dev: true /read-pkg-up@3.0.0: - resolution: - { - integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} + engines: {node: '>=4'} dependencies: find-up: 2.1.0 read-pkg: 3.0.0 dev: true /read-pkg-up@7.0.1: - resolution: - { - integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 read-pkg: 5.2.0 @@ -17757,11 +13463,8 @@ packages: dev: true /read-pkg@3.0.0: - resolution: - { - integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 @@ -17769,33 +13472,24 @@ packages: dev: true /read-pkg@5.2.0: - resolution: - { - integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} dependencies: - "@types/normalize-package-data": 2.4.1 + '@types/normalize-package-data': 2.4.1 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 dev: true /read@1.0.7: - resolution: - { - integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} + engines: {node: '>=0.8'} dependencies: mute-stream: 0.0.8 dev: true /readable-stream@2.3.8: - resolution: - { - integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, - } + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -17807,30 +13501,21 @@ packages: dev: true /readable-stream@3.6.2: - resolution: - { - integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 /readdir-glob@1.1.2: - resolution: - { - integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==, - } + resolution: {integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==} dependencies: minimatch: 5.1.6 dev: true /readdir-scoped-modules@1.1.0: - resolution: - { - integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==, - } + resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} deprecated: This functionality has been moved to @npmcli/fs dependencies: debuglog: 1.0.1 @@ -17840,21 +13525,15 @@ packages: dev: true /readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true /recast@0.22.0: - resolution: - { - integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==} + engines: {node: '>= 4'} dependencies: assert: 2.0.0 ast-types: 0.15.2 @@ -17864,103 +13543,67 @@ packages: dev: false /redent@3.0.0: - resolution: - { - integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 dev: true /regexp.prototype.flags@1.4.3: - resolution: - { - integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 functions-have-names: 1.2.3 /regexpp@3.2.0: - resolution: - { - integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} dev: true /remeda@0.0.32: - resolution: - { - integrity: sha512-FEdl8ONpqY7AvvMHG5WYdomc0mGf2khHPUDu6QvNkOq4Wjkw5BvzWM4QyksAQ/US1sFIIRG8TVBn6iJx6HbRrA==, - } + resolution: {integrity: sha512-FEdl8ONpqY7AvvMHG5WYdomc0mGf2khHPUDu6QvNkOq4Wjkw5BvzWM4QyksAQ/US1sFIIRG8TVBn6iJx6HbRrA==} dev: true /require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} /require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} dev: true /require-main-filename@2.0.0: - resolution: - { - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, - } + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true /resolve-cwd@3.0.0: - resolution: - { - integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true /resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} dev: true /resolve-from@5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} dev: true /resolve.exports@2.0.0: - resolution: - { - integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} + engines: {node: '>=10'} dev: true /resolve@1.22.1: - resolution: - { - integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, - } + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: is-core-module: 2.11.0 @@ -17968,10 +13611,7 @@ packages: supports-preserve-symlinks-flag: 1.0.0 /resolve@1.22.2: - resolution: - { - integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==, - } + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: is-core-module: 2.12.0 @@ -17980,10 +13620,7 @@ packages: dev: true /resolve@2.0.0-next.4: - resolution: - { - integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==, - } + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: is-core-module: 2.11.0 @@ -17992,81 +13629,54 @@ packages: dev: true /restore-cursor@3.1.0: - resolution: - { - integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 /restore-cursor@4.0.0: - resolution: - { - integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 dev: false /retry@0.12.0: - resolution: - { - integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} dev: true /retry@0.13.1: - resolution: - { - integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} /reusify@1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, - } - engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true /rfdc@1.3.0: - resolution: - { - integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==, - } + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true /rimraf@2.7.1: - resolution: - { - integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, - } + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 dev: false /rimraf@3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, - } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true /rollup-plugin-inject@3.0.2: - resolution: - { - integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==, - } + resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. dependencies: estree-walker: 0.6.1 @@ -18075,172 +13685,112 @@ packages: dev: true /rollup-plugin-node-polyfills@0.2.1: - resolution: - { - integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==, - } + resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} dependencies: rollup-plugin-inject: 3.0.2 dev: true /rollup-pluginutils@2.8.2: - resolution: - { - integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==, - } + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} dependencies: estree-walker: 0.6.1 dev: true /rollup@2.79.1: - resolution: - { - integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 dev: false /rollup@3.15.0: - resolution: - { - integrity: sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==, - } - engines: { node: ">=14.18.0", npm: ">=8.0.0" } + resolution: {integrity: sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true /run-async@2.4.1: - resolution: - { - integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} /run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true /rxjs@7.8.0: - resolution: - { - integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==, - } + resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 /safe-buffer@5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, - } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true /safe-buffer@5.2.1: - resolution: - { - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, - } + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} /safe-regex-test@1.0.0: - resolution: - { - integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==, - } + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 is-regex: 1.1.4 /safer-buffer@2.1.2: - resolution: - { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, - } + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} /sax@1.2.1: - resolution: - { - integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==, - } + resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} /scheduler@0.23.0: - resolution: - { - integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==, - } + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 dev: false /semver-compare@1.0.0: - resolution: - { - integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==, - } + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} dev: false /semver@5.7.1: - resolution: - { - integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, - } + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true /semver@6.3.0: - resolution: - { - integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, - } + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true /semver@7.3.4: - resolution: - { - integrity: sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 dev: true /semver@7.3.8: - resolution: - { - integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 /semver@7.5.0: - resolution: - { - integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 /send@0.18.0: - resolution: - { - integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 depd: 2.0.0 @@ -18259,11 +13809,8 @@ packages: - supports-color /serve-static@1.15.0: - resolution: - { - integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 @@ -18273,109 +13820,70 @@ packages: - supports-color /set-blocking@2.0.0: - resolution: - { - integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, - } + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true /setprototypeof@1.2.0: - resolution: - { - integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, - } + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} /shallow-clone@3.0.1: - resolution: - { - integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} dependencies: kind-of: 6.0.3 dev: true /shebang-command@1.2.0: - resolution: - { - integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: false /shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true /shebang-regex@1.0.0: - resolution: - { - integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} dev: false /shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} dev: true /side-channel@1.0.4: - resolution: - { - integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, - } + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 object-inspect: 1.12.3 /signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, - } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} /sisteransi@1.0.5: - resolution: - { - integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, - } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true /slash@2.0.0: - resolution: - { - integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} dev: false /slash@3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} dev: true /slice-ansi@3.0.0: - resolution: - { - integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 @@ -18383,11 +13891,8 @@ packages: dev: true /slice-ansi@4.0.0: - resolution: - { - integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 @@ -18395,30 +13900,21 @@ packages: dev: true /slice-ansi@5.0.0: - resolution: - { - integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 dev: true /smart-buffer@4.2.0: - resolution: - { - integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==, - } - engines: { node: ">= 6.0.0", npm: ">= 3.0.0" } + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: true /socks-proxy-agent@5.0.1: - resolution: - { - integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} + engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 debug: 4.3.4 @@ -18428,11 +13924,8 @@ packages: dev: true /socks-proxy-agent@7.0.0: - resolution: - { - integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 debug: 4.3.4 @@ -18442,199 +13935,133 @@ packages: dev: true /socks@2.7.1: - resolution: - { - integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==, - } - engines: { node: ">= 10.13.0", npm: ">= 3.0.0" } + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} dependencies: ip: 2.0.0 smart-buffer: 4.2.0 dev: true /sort-keys@2.0.0: - resolution: - { - integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==} + engines: {node: '>=4'} dependencies: is-plain-obj: 1.1.0 dev: true /sort-keys@4.2.0: - resolution: - { - integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} + engines: {node: '>=8'} dependencies: is-plain-obj: 2.1.0 dev: true /source-map-js@1.0.2: - resolution: - { - integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} /source-map-support@0.5.13: - resolution: - { - integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==, - } + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true /source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true /source-map@0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} /sourcemap-codec@1.4.8: - resolution: - { - integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, - } + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead dev: true /spdx-correct@3.1.1: - resolution: - { - integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==, - } + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.12 dev: true /spdx-exceptions@2.3.0: - resolution: - { - integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, - } + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true /spdx-expression-parse@3.0.1: - resolution: - { - integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, - } + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.12 dev: true /spdx-license-ids@3.0.12: - resolution: - { - integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==, - } + resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true /split2@3.2.2: - resolution: - { - integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==, - } + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.2 dev: true /split@1.0.1: - resolution: - { - integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==, - } + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} dependencies: through: 2.3.8 dev: true /sprintf-js@1.0.3: - resolution: - { - integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, - } + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} /ssri@8.0.1: - resolution: - { - integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true /ssri@9.0.1: - resolution: - { - integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: minipass: 3.3.6 dev: true /stack-utils@2.0.6: - resolution: - { - integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true /statuses@2.0.1: - resolution: - { - integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, - } - engines: { node: ">= 0.8" } + 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 } + 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" } + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} dependencies: internal-slot: 1.0.5 dev: false /streamroller@3.1.5: - resolution: - { - integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 debug: 4.3.4 @@ -18644,38 +14071,26 @@ packages: dev: true /streamsearch@1.1.0: - resolution: - { - integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} dev: false /string-argv@0.3.1: - resolution: - { - integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==, - } - engines: { node: ">=0.6.19" } + resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + engines: {node: '>=0.6.19'} dev: true /string-length@4.0.2: - resolution: - { - integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 dev: true /string-width@1.0.2: - resolution: - { - integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} dependencies: code-point-at: 1.1.0 is-fullwidth-code-point: 1.0.0 @@ -18683,22 +14098,16 @@ packages: dev: true /string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 /string-width@5.1.2: - resolution: - { - integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 @@ -18706,10 +14115,7 @@ packages: dev: true /string.prototype.matchall@4.0.8: - resolution: - { - integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==, - } + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -18722,141 +14128,93 @@ packages: dev: true /string.prototype.trimend@1.0.6: - resolution: - { - integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==, - } + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.1 /string.prototype.trimstart@1.0.6: - resolution: - { - integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==, - } + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.1 /string_decoder@1.1.1: - resolution: - { - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, - } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true /string_decoder@1.3.0: - resolution: - { - integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, - } + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 /strip-ansi@3.0.1: - resolution: - { - integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true /strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 /strip-ansi@7.0.1: - resolution: - { - integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 /strip-bom@3.0.0: - resolution: - { - integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} dev: true /strip-bom@4.0.0: - resolution: - { - integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} dev: true /strip-final-newline@2.0.0: - resolution: - { - integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} dev: true /strip-final-newline@3.0.0: - resolution: - { - integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} dev: true /strip-indent@3.0.0: - resolution: - { - integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true /strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} dev: true /strip-literal@1.0.1: - resolution: - { - integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==, - } + resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: acorn: 8.8.2 dev: true /strnum@1.0.5: - resolution: - { - integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, - } + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} /strong-log-transformer@2.1.0: - resolution: - { - integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} + engines: {node: '>=4'} hasBin: true dependencies: duplexer: 0.1.2 @@ -18865,47 +14223,32 @@ packages: dev: true /supports-color@5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true /supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 /supports-color@8.1.1: - resolution: - { - integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true /supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} /tar-stream@2.2.0: - resolution: - { - integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} dependencies: bl: 4.1.0 end-of-stream: 1.4.4 @@ -18915,11 +14258,8 @@ packages: dev: true /tar@6.1.13: - resolution: - { - integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} + engines: {node: '>=10'} dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -18930,192 +14270,129 @@ packages: dev: true /temp-dir@1.0.0: - resolution: - { - integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} + engines: {node: '>=4'} dev: true /test-exclude@6.0.0: - resolution: - { - integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} dependencies: - "@istanbuljs/schema": 0.1.3 + '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 dev: true /text-extensions@1.9.0: - resolution: - { - integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} dev: true /text-table@0.2.0: - resolution: - { - integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, - } + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true /through2@2.0.5: - resolution: - { - integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==, - } + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.8 xtend: 4.0.2 dev: true /through2@4.0.2: - resolution: - { - integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==, - } + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.2 dev: true /through@2.3.8: - resolution: - { - integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, - } + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} /tinybench@2.3.1: - resolution: - { - integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==, - } + resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==} dev: true /tinypool@0.3.1: - resolution: - { - integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} + engines: {node: '>=14.0.0'} dev: true /tinyspy@1.1.1: - resolution: - { - integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} + engines: {node: '>=14.0.0'} dev: true /tmp@0.0.33: - resolution: - { - integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, - } - engines: { node: ">=0.6.0" } + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 /tmp@0.2.1: - resolution: - { - integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==, - } - engines: { node: ">=8.17.0" } + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} dependencies: rimraf: 3.0.2 dev: true /tmpl@1.0.5: - resolution: - { - integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, - } + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true /to-fast-properties@2.0.0: - resolution: - { - integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} /to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 /toidentifier@1.0.1: - resolution: - { - integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, - } - engines: { node: ">=0.6" } + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} /tr46@0.0.3: - resolution: - { - integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, - } + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true /treeverse@2.0.0: - resolution: - { - integrity: sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true /trim-newlines@3.0.1: - resolution: - { - integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} dev: true /ts-deepmerge@4.0.0: - resolution: - { - integrity: sha512-IrjjAwfM/J6ajWv5wDRZBdpVaTmuONJN1vC85mXlWVPXKelouLFiqsjR7m0h245qY6zZEtcDtcOTc4Rozgg1TQ==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-IrjjAwfM/J6ajWv5wDRZBdpVaTmuONJN1vC85mXlWVPXKelouLFiqsjR7m0h245qY6zZEtcDtcOTc4Rozgg1TQ==} + engines: {node: '>=14'} /ts-jest@29.0.5(@babel/core@7.21.4)(esbuild@0.17.8)(jest@29.4.2)(typescript@4.9.5): - resolution: - { - integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/types": ^29.0.0 + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 babel-jest: ^29.0.0 - esbuild: "*" + esbuild: '*' jest: ^29.0.0 - typescript: ">=4.3" + typescript: '>=4.3' peerDependenciesMeta: - "@babel/core": + '@babel/core': optional: true - "@jest/types": + '@jest/types': optional: true babel-jest: optional: true esbuild: optional: true dependencies: - "@babel/core": 7.21.4 + '@babel/core': 7.21.4 bs-logger: 0.2.6 esbuild: 0.17.8 fast-json-stable-stringify: 2.1.0 @@ -19130,29 +14407,26 @@ packages: dev: true /ts-node@10.9.1(@swc/core@1.3.35)(@types/node@18.13.0)(typescript@4.9.5): - resolution: - { - integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==, - } + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' peerDependenciesMeta: - "@swc/core": + '@swc/core': optional: true - "@swc/wasm": + '@swc/wasm': optional: true dependencies: - "@cspotcode/source-map-support": 0.8.1 - "@swc/core": 1.3.35 - "@tsconfig/node10": 1.0.9 - "@tsconfig/node12": 1.0.11 - "@tsconfig/node14": 1.0.3 - "@tsconfig/node16": 1.0.3 - "@types/node": 18.13.0 + '@cspotcode/source-map-support': 0.8.1 + '@swc/core': 1.3.35 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.13.0 acorn: 8.8.1 acorn-walk: 8.2.0 arg: 4.1.3 @@ -19164,23 +14438,17 @@ packages: yn: 3.1.1 /tsconfig-paths@3.14.1: - resolution: - { - integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==, - } + resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: - "@types/json5": 0.0.29 + '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 dev: true /tsconfig-paths@4.1.2: - resolution: - { - integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==} + engines: {node: '>=6'} dependencies: json5: 2.2.3 minimist: 1.2.8 @@ -19188,50 +14456,32 @@ packages: dev: true /tslib@1.14.1: - resolution: - { - integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, - } + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} /tslib@2.4.0: - resolution: - { - integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==, - } + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} dev: true /tslib@2.5.0: - resolution: - { - integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==, - } + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} /tsscmp@1.0.6: - resolution: - { - integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==, - } - engines: { node: ">=0.6.x" } + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} dev: false /tsutils@3.21.0(typescript@4.9.5): - resolution: - { - integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 typescript: 4.9.5 dev: true /turbo-darwin-64@1.7.4: - resolution: - { - integrity: sha512-ZyYrQlUl8K/mYN1e6R7bEhPPYjMakz0DYMaexkyD7TAijQtWmTSd4a+I7VknOYNEssnUZ/v41GU3gPV1JAzxxQ==, - } + resolution: {integrity: sha512-ZyYrQlUl8K/mYN1e6R7bEhPPYjMakz0DYMaexkyD7TAijQtWmTSd4a+I7VknOYNEssnUZ/v41GU3gPV1JAzxxQ==} cpu: [x64] os: [darwin] requiresBuild: true @@ -19239,10 +14489,7 @@ packages: optional: true /turbo-darwin-arm64@1.7.4: - resolution: - { - integrity: sha512-CKIXg9uqp1a+Yeq/c4U0alPOqvwLUq5SBZf1PGYhGqJsfG0fRBtJfkUjHuBsuJIOGXg8rCmcGSWGIsIF6fqYuw==, - } + resolution: {integrity: sha512-CKIXg9uqp1a+Yeq/c4U0alPOqvwLUq5SBZf1PGYhGqJsfG0fRBtJfkUjHuBsuJIOGXg8rCmcGSWGIsIF6fqYuw==} cpu: [arm64] os: [darwin] requiresBuild: true @@ -19250,10 +14497,7 @@ packages: optional: true /turbo-linux-64@1.7.4: - resolution: - { - integrity: sha512-RIUl4RUFFyzD2T024vL7509Ygwcw+SEa8NOwPfaN6TtJHK7RZV/SBP3fLNVOptG9WRLnOWX3OvsLMbiOqDLLyA==, - } + resolution: {integrity: sha512-RIUl4RUFFyzD2T024vL7509Ygwcw+SEa8NOwPfaN6TtJHK7RZV/SBP3fLNVOptG9WRLnOWX3OvsLMbiOqDLLyA==} cpu: [x64] os: [linux] requiresBuild: true @@ -19261,10 +14505,7 @@ packages: optional: true /turbo-linux-arm64@1.7.4: - resolution: - { - integrity: sha512-Bg65F0AjYYYxqE6RPf2H5TIGuA/EyWMeGOATHVSZOWAbYcnG3Ly03GZii8AHnUi7ntWBdjwvXf/QbOS1ayNB6A==, - } + resolution: {integrity: sha512-Bg65F0AjYYYxqE6RPf2H5TIGuA/EyWMeGOATHVSZOWAbYcnG3Ly03GZii8AHnUi7ntWBdjwvXf/QbOS1ayNB6A==} cpu: [arm64] os: [linux] requiresBuild: true @@ -19272,10 +14513,7 @@ packages: optional: true /turbo-windows-64@1.7.4: - resolution: - { - integrity: sha512-rTaV50XZ2BRxRHOHqt1UsWfeDmYLbn8UKE6g2D2ED+uW+kmnTvR9s01nmlGWd2sAuWcRYQyQ2V+O09VfKPKcQw==, - } + resolution: {integrity: sha512-rTaV50XZ2BRxRHOHqt1UsWfeDmYLbn8UKE6g2D2ED+uW+kmnTvR9s01nmlGWd2sAuWcRYQyQ2V+O09VfKPKcQw==} cpu: [x64] os: [win32] requiresBuild: true @@ -19283,10 +14521,7 @@ packages: optional: true /turbo-windows-arm64@1.7.4: - resolution: - { - integrity: sha512-h8sxdKPvHTnWUPtwnYszFMmSO0P/iUUwmYY9n7iYThA71zSao28UeZ0H0Gw75cY3MPjvkjn2C4EBAUGPjuZJLw==, - } + resolution: {integrity: sha512-h8sxdKPvHTnWUPtwnYszFMmSO0P/iUUwmYY9n7iYThA71zSao28UeZ0H0Gw75cY3MPjvkjn2C4EBAUGPjuZJLw==} cpu: [arm64] os: [win32] requiresBuild: true @@ -19294,10 +14529,7 @@ packages: optional: true /turbo@1.7.4: - resolution: - { - integrity: sha512-8RLedDoUL0kkVKWEZ/RMM70BvKLyDFen06QuKKhYC2XNOfNKqFDqzIdcY/vGick869bNIWalChoy4O07k0HLsA==, - } + resolution: {integrity: sha512-8RLedDoUL0kkVKWEZ/RMM70BvKLyDFen06QuKKhYC2XNOfNKqFDqzIdcY/vGick869bNIWalChoy4O07k0HLsA==} hasBin: true requiresBuild: true optionalDependencies: @@ -19310,155 +14542,101 @@ packages: dev: true /type-check@0.3.2: - resolution: - { - integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true /type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true /type-detect@4.0.8: - resolution: - { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} dev: true /type-fest@0.18.1: - resolution: - { - integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} dev: true /type-fest@0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} dev: true /type-fest@0.21.3: - resolution: - { - integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} /type-fest@0.4.1: - resolution: - { - integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==} + engines: {node: '>=6'} dev: true /type-fest@0.6.0: - resolution: - { - integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} dev: true /type-fest@0.8.1: - resolution: - { - integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} dev: true /type-is@1.6.18: - resolution: - { - integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 mime-types: 2.1.35 /typed-array-length@1.0.4: - resolution: - { - integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==, - } + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.10 /typedarray-to-buffer@3.1.5: - resolution: - { - integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==, - } + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true /typedarray@0.0.6: - resolution: - { - integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, - } + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true /typescript@4.9.5: - resolution: - { - integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==, - } - engines: { node: ">=4.2.0" } + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} hasBin: true /ufo@1.0.1: - resolution: - { - integrity: sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA==, - } + resolution: {integrity: sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA==} dev: true /uglify-js@3.17.4: - resolution: - { - integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true dev: true optional: true /ulidx@0.3.0: - resolution: - { - integrity: sha512-Qvpa2xAzS6fBUpiqHSHWvn6XiSLCAPyNDDz035vsEWmUoXRqC4c9JySLIfdBuK0N1xGBxng6GHDOZgyNQfxAHg==, - } + resolution: {integrity: sha512-Qvpa2xAzS6fBUpiqHSHWvn6XiSLCAPyNDDz035vsEWmUoXRqC4c9JySLIfdBuK0N1xGBxng6GHDOZgyNQfxAHg==} dependencies: layerr: 0.1.2 /unbox-primitive@1.0.2: - resolution: - { - integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, - } + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 has-bigints: 1.0.2 @@ -19466,98 +14644,65 @@ packages: which-boxed-primitive: 1.0.2 /undici@5.22.0: - resolution: - { - integrity: sha512-fR9RXCc+6Dxav4P9VV/sp5w3eFiSdOjJYsbtWfd4s5L5C4ogyuVpdKIVHeW0vV1MloM65/f7W45nR9ZxwVdyiA==, - } - engines: { node: ">=14.0" } + resolution: {integrity: sha512-fR9RXCc+6Dxav4P9VV/sp5w3eFiSdOjJYsbtWfd4s5L5C4ogyuVpdKIVHeW0vV1MloM65/f7W45nR9ZxwVdyiA==} + engines: {node: '>=14.0'} dependencies: busboy: 1.6.0 dev: false /unique-filename@1.1.1: - resolution: - { - integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==, - } + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} dependencies: unique-slug: 2.0.2 dev: true /unique-filename@2.0.1: - resolution: - { - integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: unique-slug: 3.0.0 dev: true /unique-slug@2.0.2: - resolution: - { - integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==, - } + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} dependencies: imurmurhash: 0.1.4 dev: true /unique-slug@3.0.0: - resolution: - { - integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 dev: true /universal-user-agent@6.0.0: - resolution: - { - integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==, - } + resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} dev: true /universalify@0.1.2: - resolution: - { - integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, - } - engines: { node: ">= 4.0.0" } + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} dev: true /universalify@2.0.0: - resolution: - { - integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} /unpipe@1.0.0: - resolution: - { - integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} /upath@2.0.1: - resolution: - { - integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} dev: true /update-browserslist-db@1.0.10(browserslist@4.21.5): - resolution: - { - integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==, - } + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: - browserslist: ">= 4.21.0" + browserslist: '>= 4.21.0' dependencies: browserslist: 4.21.5 escalade: 3.1.1 @@ -19565,28 +14710,19 @@ packages: dev: true /uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true /url@0.10.3: - resolution: - { - integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==, - } + resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 /use-sync-external-store@1.2.0(react@18.2.0): - resolution: - { - integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==, - } + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: @@ -19594,16 +14730,10 @@ packages: dev: false /util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, - } + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} /util@0.12.5: - resolution: - { - integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==, - } + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} dependencies: inherits: 2.0.4 is-arguments: 1.1.1 @@ -19612,101 +14742,65 @@ packages: which-typed-array: 1.1.9 /utils-merge@1.0.1: - resolution: - { - integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, - } - engines: { node: ">= 0.4.0" } + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} /uuid@8.0.0: - resolution: - { - integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==, - } + resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} hasBin: true /uuid@8.3.2: - resolution: - { - integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, - } + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true /v8-compile-cache-lib@3.0.1: - resolution: - { - integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==, - } + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} /v8-compile-cache@2.3.0: - resolution: - { - integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==, - } + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true /v8-to-istanbul@9.0.1: - resolution: - { - integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==, - } - engines: { node: ">=10.12.0" } - dependencies: - "@jridgewell/trace-mapping": 0.3.17 - "@types/istanbul-lib-coverage": 2.0.4 + resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.17 + '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true /validate-npm-package-license@3.0.4: - resolution: - { - integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, - } + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 dev: true /validate-npm-package-name@3.0.0: - resolution: - { - integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==, - } + resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} dependencies: builtins: 1.0.3 dev: true /validate-npm-package-name@4.0.0: - resolution: - { - integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: builtins: 5.0.1 dev: true /value-or-promise@1.0.11: - resolution: - { - integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==} + engines: {node: '>=12'} dev: false /vary@1.1.2: - resolution: - { - integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} /vite-node@0.26.3(@types/node@18.13.0): - resolution: - { - integrity: sha512-Te2bq0Bfvq6XiO718I+1EinMjpNYKws6SNHKOmVbILAQimKoZKDd+IZLlkaYcBXPpK3HFe2U80k8Zw+m3w/a2w==, - } - engines: { node: ">=v14.16.0" } + resolution: {integrity: sha512-Te2bq0Bfvq6XiO718I+1EinMjpNYKws6SNHKOmVbILAQimKoZKDd+IZLlkaYcBXPpK3HFe2U80k8Zw+m3w/a2w==} + engines: {node: '>=v14.16.0'} hasBin: true dependencies: debug: 4.3.4 @@ -19716,7 +14810,7 @@ packages: source-map-support: 0.5.21 vite: 4.1.1(@types/node@18.13.0) transitivePeerDependencies: - - "@types/node" + - '@types/node' - less - sass - stylus @@ -19726,21 +14820,18 @@ packages: dev: true /vite@3.2.5(@types/node@18.13.0): - resolution: - { - integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} + engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: - "@types/node": ">= 14" - less: "*" - sass: "*" - stylus: "*" - sugarss: "*" + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true less: optional: true @@ -19753,7 +14844,7 @@ packages: terser: optional: true dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 esbuild: 0.15.18 postcss: 8.4.21 resolve: 1.22.1 @@ -19763,21 +14854,18 @@ packages: dev: false /vite@4.1.1(@types/node@18.13.0): - resolution: - { - integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} + engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: - "@types/node": ">= 14" - less: "*" - sass: "*" - stylus: "*" - sugarss: "*" + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true less: optional: true @@ -19790,7 +14878,7 @@ packages: terser: optional: true dependencies: - "@types/node": 18.13.0 + '@types/node': 18.13.0 esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 @@ -19800,33 +14888,30 @@ packages: dev: true /vitest@0.26.3: - resolution: - { - integrity: sha512-FmHxU9aUCxTi23keF3vxb/Qp0lYXaaJ+jRLGOUmMS3qVTOJvgGE+f1VArupA6pEhaG2Ans4X+zV9dqM5WISMbg==, - } - engines: { node: ">=v14.16.0" } + resolution: {integrity: sha512-FmHxU9aUCxTi23keF3vxb/Qp0lYXaaJ+jRLGOUmMS3qVTOJvgGE+f1VArupA6pEhaG2Ans4X+zV9dqM5WISMbg==} + engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: - "@edge-runtime/vm": "*" - "@vitest/browser": "*" - "@vitest/ui": "*" - happy-dom: "*" - jsdom: "*" + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' peerDependenciesMeta: - "@edge-runtime/vm": + '@edge-runtime/vm': optional: true - "@vitest/browser": + '@vitest/browser': optional: true - "@vitest/ui": + '@vitest/ui': optional: true happy-dom: optional: true jsdom: optional: true dependencies: - "@types/chai": 4.3.4 - "@types/chai-subset": 1.3.3 - "@types/node": 18.13.0 + '@types/chai': 4.3.4 + '@types/chai-subset': 1.3.3 + '@types/node': 18.13.0 acorn: 8.8.2 acorn-walk: 8.2.0 chai: 4.3.7 @@ -19849,69 +14934,45 @@ packages: dev: true /walk-up-path@1.0.0: - resolution: - { - integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==, - } + resolution: {integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==} dev: true /walker@1.0.8: - resolution: - { - integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, - } + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true /watchpack@2.4.0: - resolution: - { - integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 dev: false /wcwidth@1.0.1: - resolution: - { - integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, - } + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 /web-streams-polyfill@3.2.1: - resolution: - { - integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} /webidl-conversions@3.0.1: - resolution: - { - integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, - } + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true /whatwg-url@5.0.0: - resolution: - { - integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, - } + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: true /which-boxed-primitive@1.0.2: - resolution: - { - integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, - } + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -19920,18 +14981,12 @@ packages: is-symbol: 1.0.4 /which-module@2.0.0: - resolution: - { - integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, - } + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} dev: true /which-typed-array@1.1.9: - resolution: - { - integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 @@ -19941,56 +14996,38 @@ packages: is-typed-array: 1.1.10 /which@1.3.1: - resolution: - { - integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, - } + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: false /which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 dev: true /wide-align@1.1.5: - resolution: - { - integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==, - } + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 4.2.3 dev: true /word-wrap@1.2.3: - resolution: - { - integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} dev: true /wordwrap@1.0.0: - resolution: - { - integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, - } + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true /wrap-ansi@6.2.0: - resolution: - { - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 @@ -19998,27 +15035,18 @@ packages: dev: true /wrap-ansi@7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 /wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, - } + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} /write-file-atomic@2.4.3: - resolution: - { - integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==, - } + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} dependencies: graceful-fs: 4.2.11 imurmurhash: 0.1.4 @@ -20026,10 +15054,7 @@ packages: dev: true /write-file-atomic@3.0.3: - resolution: - { - integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==, - } + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 @@ -20038,22 +15063,16 @@ packages: dev: true /write-file-atomic@4.0.2: - resolution: - { - integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 dev: true /write-json-file@3.2.0: - resolution: - { - integrity: sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==} + engines: {node: '>=6'} dependencies: detect-indent: 5.0.0 graceful-fs: 4.2.11 @@ -20064,11 +15083,8 @@ packages: dev: true /write-json-file@4.3.0: - resolution: - { - integrity: sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==, - } - engines: { node: ">=8.3" } + resolution: {integrity: sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==} + engines: {node: '>=8.3'} dependencies: detect-indent: 6.1.0 graceful-fs: 4.2.11 @@ -20079,11 +15095,8 @@ packages: dev: true /write-pkg@4.0.0: - resolution: - { - integrity: sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==} + engines: {node: '>=8'} dependencies: sort-keys: 2.0.0 type-fest: 0.4.1 @@ -20091,11 +15104,8 @@ packages: dev: true /ws@7.5.9: - resolution: - { - integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==, - } - engines: { node: ">=8.3.0" } + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -20107,14 +15117,11 @@ packages: dev: false /ws@8.13.0: - resolution: - { - integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -20123,117 +15130,72 @@ packages: dev: true /xml2js@0.4.19: - resolution: - { - integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==, - } + resolution: {integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==} dependencies: sax: 1.2.1 xmlbuilder: 9.0.7 /xmlbuilder@9.0.7: - resolution: - { - integrity: sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==} + engines: {node: '>=4.0'} /xstate@4.26.1: - resolution: - { - integrity: sha512-JLofAEnN26l/1vbODgsDa+Phqa61PwDlxWu8+2pK+YbXf+y9pQSDLRvcYH2H1kkeUBA5fGp+xFL/zfE8jNMw4g==, - } + resolution: {integrity: sha512-JLofAEnN26l/1vbODgsDa+Phqa61PwDlxWu8+2pK+YbXf+y9pQSDLRvcYH2H1kkeUBA5fGp+xFL/zfE8jNMw4g==} dev: true /xtend@4.0.2: - resolution: - { - integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, - } - engines: { node: ">=0.4" } + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} dev: true /y18n@4.0.3: - resolution: - { - integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, - } + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true /y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} /yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true /yallist@4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, - } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} /yaml@1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} /yaml@2.2.1: - resolution: - { - integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==, - } - engines: { node: ">= 14" } + resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} + engines: {node: '>= 14'} /yargs-parser@18.1.3: - resolution: - { - integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true /yargs-parser@20.2.4: - resolution: - { - integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} dev: true /yargs-parser@20.2.9: - resolution: - { - integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} dev: true /yargs-parser@21.1.1: - resolution: - { - integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} /yargs@15.4.1: - resolution: - { - integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -20249,11 +15211,8 @@ packages: dev: true /yargs@16.2.0: - resolution: - { - integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -20265,11 +15224,8 @@ packages: dev: true /yargs@17.6.2: - resolution: - { - integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} + engines: {node: '>=12'} dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -20280,24 +15236,15 @@ packages: yargs-parser: 21.1.1 /yn@3.1.1: - resolution: - { - integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} /yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} /zip-local@0.3.5: - resolution: - { - integrity: sha512-GRV3D5TJY+/PqyeRm5CYBs7xVrKTKzljBoEXvocZu0HJ7tPEcgpSOYa2zFIsCZWgKWMuc4U3yMFgFkERGFIB9w==, - } + resolution: {integrity: sha512-GRV3D5TJY+/PqyeRm5CYBs7xVrKTKzljBoEXvocZu0HJ7tPEcgpSOYa2zFIsCZWgKWMuc4U3yMFgFkERGFIB9w==} dependencies: async: 1.5.2 graceful-fs: 4.2.11 @@ -20306,11 +15253,8 @@ packages: dev: true /zip-stream@4.1.0: - resolution: - { - integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==} + engines: {node: '>= 10'} dependencies: archiver-utils: 2.1.0 compress-commons: 4.1.1 @@ -20318,7 +15262,4 @@ packages: dev: true /zod@3.20.6: - resolution: - { - integrity: sha512-oyu0m54SGCtzh6EClBVqDDlAYRz4jrVtKwQ7ZnsEmMI9HnzuZFj8QFwAY1M5uniIYACdGvv0PBWPF2kO0aNofA==, - } + resolution: {integrity: sha512-oyu0m54SGCtzh6EClBVqDDlAYRz4jrVtKwQ7ZnsEmMI9HnzuZFj8QFwAY1M5uniIYACdGvv0PBWPF2kO0aNofA==} From b7ef962e6898af182aca22ee8e0f20cd910ba244 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Sat, 6 May 2023 10:04:30 -0500 Subject: [PATCH 02/21] support alternate key types --- .../@eventual/aws-cdk/src/entity-service.ts | 39 ++++++++---- .../aws-runtime/src/stores/entity-store.ts | 53 ++++++++-------- .../src/local/stores/entity-store.ts | 40 ++++++++---- .../core-runtime/src/stores/entity-store.ts | 59 ++++++++++++++---- packages/@eventual/core-runtime/src/utils.ts | 15 +++-- .../test/transaction-executor.test.ts | 10 ++- packages/@eventual/core/src/entity.ts | 61 +++++++++++++++---- .../core/src/internal/service-spec.ts | 25 +++++++- 8 files changed, 220 insertions(+), 82 deletions(-) diff --git a/packages/@eventual/aws-cdk/src/entity-service.ts b/packages/@eventual/aws-cdk/src/entity-service.ts index c419fa345..53c650698 100644 --- a/packages/@eventual/aws-cdk/src/entity-service.ts +++ b/packages/@eventual/aws-cdk/src/entity-service.ts @@ -3,10 +3,19 @@ import { entityServiceTableSuffix, ENV_NAMES, } from "@eventual/aws-runtime"; -import { EntityRuntime, EntityStreamFunction } from "@eventual/core-runtime"; -import { TransactionSpec } from "@eventual/core/internal"; +import { + EntityRuntime, + EntityStreamFunction, + normalizeKeySpec, +} from "@eventual/core-runtime"; +import { + assertNever, + EntityKeySpec, + TransactionSpec, +} from "@eventual/core/internal"; import { Duration, RemovalPolicy, Stack } from "aws-cdk-lib"; import { + Attribute, AttributeType, BillingMode, ITable, @@ -215,16 +224,9 @@ export class Entity extends Construct { props.serviceProps.serviceName, props.entity.name ), - partitionKey: { - name: props.entity.partitionKey, - // TODO: need to determine type... - type: AttributeType.STRING, - }, + partitionKey: entityKeyReferenceToAttribute(props.entity.partitionKey), sortKey: props.entity.sortKey - ? { - name: props.entity.sortKey, - type: AttributeType.STRING, - } + ? entityKeyReferenceToAttribute(props.entity.sortKey) : undefined, billingMode: BillingMode.PAY_PER_REQUEST, removalPolicy: RemovalPolicy.DESTROY, @@ -334,3 +336,18 @@ export class EntityStream extends Construct implements EventualResource { this.grantPrincipal = this.handler.grantPrincipal; } } + +export function entityKeyReferenceToAttribute(ref: EntityKeySpec): Attribute { + const { key, type } = normalizeKeySpec(ref); + return { + name: key, + type: + type === "string" + ? AttributeType.STRING + : type === "number" + ? AttributeType.NUMBER + : type === "binary" + ? AttributeType.BINARY + : assertNever(type), + }; +} diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index d4e36b041..68cbc3315 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -28,11 +28,13 @@ import { UnexpectedVersion, } from "@eventual/core"; import { + convertNormalizedEntityKeyToMap, EntityProvider, EntityStore, getLazy, LazyValue, normalizeCompositeKey, + normalizeKeySpec, } from "@eventual/core-runtime"; import { assertNever } from "@eventual/core/internal"; import { entityServiceTableName, queryPageWithToken } from "../utils.js"; @@ -250,9 +252,10 @@ export class AWSEntityStore implements EntityStore { const entity = typeof _entity === "string" ? this.getEntity(_entity) : _entity; const valueRecord = marshall(value); - delete valueRecord[entity.partitionKey]; - if (entity.sortKey) { - delete valueRecord[entity.sortKey]; + const normalizedKey = normalizeCompositeKey(entity, valueRecord); + delete valueRecord[normalizedKey.partition.field]; + if (normalizedKey.sort) { + delete valueRecord[normalizedKey.sort.field]; } return { Key: this.entityKey(value, entity), @@ -300,14 +303,8 @@ export class AWSEntityStore implements EntityStore { private entityKey(key: AnyEntityKey, entity: AnyEntity) { const compositeKey = normalizeCompositeKey(entity, key); - return compositeKey.sort - ? { - [compositeKey.partition.field]: { S: compositeKey.partition.value }, - [compositeKey.sort.field]: { S: compositeKey.sort.value }, - } - : { - [compositeKey.partition.field]: { S: compositeKey.partition.value }, - }; + const keyMap = convertNormalizedEntityKeyToMap(compositeKey); + return marshall(keyMap); } private listEntries( @@ -316,33 +313,41 @@ export class AWSEntityStore implements EntityStore { fields?: string[] ) { const entity = this.getEntity(entityName); + const partitionKeyRef = normalizeKeySpec(entity.partitionKey); + const sortKeyRef = entity.sortKey + ? normalizeKeySpec(entity.sortKey) + : undefined; const allFields = new Set([ ...(fields ?? []), - entity.partitionKey, - ...(entity.sortKey ? [entity.sortKey] : []), + partitionKeyRef.key, + ...(sortKeyRef ? [sortKeyRef.key] : []), ]); - if (!entity.sortKey && request.prefix) { - throw new Error( - "Cannot use `prefix` when the entity does not have a sortKey." - ); + if (request.prefix) { + if (!sortKeyRef?.key) { + throw new Error( + "Cannot use `prefix` when the entity does not have a sortKey." + ); + } else if (sortKeyRef.type !== "string") { + throw new Error("Sort field must be a string to use the prefix field"); + } } return queryPageWithToken>( { dynamoClient: this.props.dynamo, pageSize: request.limit ?? 1000, - keys: entity.sortKey - ? [entity.partitionKey, entity.sortKey] - : [entity.partitionKey], + keys: sortKeyRef + ? [partitionKeyRef.key, sortKeyRef.key] + : [partitionKeyRef.key], nextToken: request.nextToken, }, { TableName: this.tableName(name), - KeyConditionExpression: entity.sortKey - ? `#${entity.partitionKey}=:pk AND begins_with(#${entity.sortKey}, :sk)` - : `#${entity.partitionKey}=:pk`, + KeyConditionExpression: sortKeyRef + ? `#${partitionKeyRef.key}=:pk AND begins_with(#${sortKeyRef.key}, :sk)` + : `#${partitionKeyRef.key}=:pk`, ExpressionAttributeValues: { ":pk": { S: request.partition }, - ...(entity.sortKey ? { ":sk": { S: request.prefix ?? "" } } : {}), + ...(sortKeyRef ? { ":sk": { S: request.prefix ?? "" } } : {}), }, ExpressionAttributeNames: Object.fromEntries( [...allFields]?.map((f) => [`#${f}`, f]) diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index c4039a7c7..8699eef6d 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -1,10 +1,14 @@ import { AnyEntityKey, - EntityConsistencyOptions, EntityQueryRequest, - EntityQueryResult, EntityQueryResultEntry, EntitySetOptions, + EntityConsistencyOptions, + EntityKeyType, + EntityQueryRequest, + EntityQueryResult, + EntityQueryResultEntry, + EntitySetOptions, EntityTransactItem, TransactionCancelled, - UnexpectedVersion + UnexpectedVersion, } from "@eventual/core"; import { assertNever } from "@eventual/core/internal"; import { EntityProvider } from "../../providers/entity-provider.js"; @@ -12,7 +16,7 @@ import { convertNormalizedEntityKeyToMap, EntityStore, EntityWithMetadata, - normalizeCompositeKey + normalizeCompositeKey, } from "../../stores/entity-store.js"; import { deserializeCompositeKey, serializeCompositeKey } from "../../utils.js"; import { LocalEnvConnector } from "../local-container.js"; @@ -26,7 +30,7 @@ export interface LocalEntityStoreProps { export class LocalEntityStore implements EntityStore { private entities: Record< string, - Record>> + Map>> > = {}; constructor(private props: LocalEntityStoreProps) {} @@ -223,9 +227,15 @@ export class LocalEntityStore implements EntityStore { const result = paginateItems( entries, - (a, b) => a[0].localeCompare(b[0]), + (a, b) => + typeof a[0] === "string" + ? a[0].localeCompare(b[0] as string) + : typeof a[0] === "number" + ? a[0] - (b[0] as number) + : 0, listRequest.prefix - ? ([key]) => key.startsWith(listRequest.prefix!) + ? ([key]) => + typeof key === "string" && key.startsWith(listRequest.prefix!) : undefined, undefined, listRequest.limit, @@ -235,12 +245,16 @@ export class LocalEntityStore implements EntityStore { return result; } - private getPartitionMap(entityName: string, partition: string) { - const entity = (this.entities[entityName] ??= {}); - const namespaceMap = (entity[partition] ??= new Map< - string, - EntityWithMetadata + private getPartitionMap(entityName: string, partition: EntityKeyType) { + const entity = (this.entities[entityName] ??= new Map< + EntityKeyType, + Map> >()); - return namespaceMap; + let partitionMap = entity.get(partition); + if (!partitionMap) { + partitionMap = new Map>(); + entity.set(partition, partitionMap); + } + return partitionMap; } } diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 4b0d70bb7..70517ae77 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -3,8 +3,9 @@ import { AnyEntityKey, EntityCompositeKey, EntityKeyTuple, + EntityKeyType, } from "@eventual/core"; -import { EntityHook } from "@eventual/core/internal"; +import { EntityHook, EntityKeySpec } from "@eventual/core/internal"; export interface EntityStore extends EntityHook {} @@ -43,39 +44,65 @@ export function isTransactionConflictResult( return value && "transactionConflict" in value; } +export interface NormalizeEntityKeyPart { + field: string; + type: "number" | "string" | "binary"; + value: EntityKeyType; +} + export interface NormalizeEntityKey { - partition: { field: string; value: string }; - sort?: { field: string; value: string }; + partition: NormalizeEntityKeyPart; + sort?: NormalizeEntityKeyPart; } export function normalizeCompositeKey( entity: AnyEntity, key: AnyEntityKey ): NormalizeEntityKey { + const { key: partitionField, type: partitionType } = normalizeKeySpec( + entity.partitionKey + ); + const { key: sortField = undefined, type: sortType = undefined } = + entity.sortKey ? normalizeKeySpec(entity.sortKey) : {}; + if (Array.isArray(key)) { const [partition, sort] = key; - return entity.sortKey + return sortField && sortType ? { - partition: { field: entity.partitionKey, value: partition }, - sort: { field: entity.sortKey, value: sort }, + partition: { + field: partitionField, + type: partitionType, + value: partition, + }, + sort: { field: sortField, type: sortType, value: sort }, } : { - partition: { field: entity.partitionKey, value: partition }, + partition: { + field: partitionField, + type: partitionType, + value: partition, + }, }; } else { - return entity.sortKey + return sortField && sortType ? { partition: { - field: entity.partitionKey, - value: key[entity.partitionKey], + field: partitionField, + type: partitionType, + value: key[partitionField], + }, + sort: { + field: sortField, + type: sortType, + value: key[sortField], }, - sort: { field: entity.sortKey, value: key[entity.sortKey] }, } : { partition: { - field: entity.partitionKey, - value: key[entity.partitionKey], + field: partitionField, + type: partitionType, + value: key[partitionField], }, }; } @@ -101,3 +128,9 @@ export function convertNormalizedEntityKeyToTuple( ? [key.partition.value, key.sort.value] : [key.partition.value]; } + +export function normalizeKeySpec( + keyRef: EntityKeySpec +): Exclude { + return typeof keyRef === "string" ? { key: keyRef, type: "string" } : keyRef; +} diff --git a/packages/@eventual/core-runtime/src/utils.ts b/packages/@eventual/core-runtime/src/utils.ts index e7d8b5ba7..d4b4cbb9c 100644 --- a/packages/@eventual/core-runtime/src/utils.ts +++ b/packages/@eventual/core-runtime/src/utils.ts @@ -8,7 +8,10 @@ import { BucketNotificationHandlerSpec, EntityStreamSpec, } from "@eventual/core/internal"; -import { NormalizeEntityKey } from "./stores/entity-store.js"; +import { + normalizeCompositeKey, + NormalizeEntityKey, +} from "./stores/entity-store.js"; export async function promiseAllSettledPartitioned( items: T[], @@ -88,15 +91,19 @@ export function entityStreamMatchesItem( item: EntityStreamItem, streamSpec: EntityStreamSpec ) { - const partition = item.key[entity.partitionKey]; + const { partition } = normalizeCompositeKey(entity, item); return ( streamSpec.entityName === item.entityName && (!streamSpec.options?.operations || streamSpec.options.operations.includes(item.operation)) && (!streamSpec.options?.partitions || - streamSpec.options.partitions.includes(partition)) && + (typeof partition.value === "string" && + streamSpec.options.partitions.includes(partition.value))) && (!streamSpec.options?.partitionPrefixes || - streamSpec.options.partitionPrefixes.some((p) => partition.startsWith(p))) + streamSpec.options.partitionPrefixes.some( + (p) => + typeof partition.value === "string" && partition.value.startsWith(p) + )) ); } diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index e95f7511b..231433f0b 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -136,7 +136,10 @@ test("just delete", async () => { test("multiple operations", async () => { const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); - const d2 = entity({ schema: simpleSchema, partitionKey: "value" }); + const d2 = entity({ + schema: simpleSchema, + partitionKey: { key: "value", type: "number" }, + }); const result = await executor( async () => { @@ -164,7 +167,10 @@ test("multiple operations", async () => { test("multiple operations fail", async () => { const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); - const d2 = entity({ schema: simpleSchema, partitionKey: "value" }); + const d2 = entity({ + schema: simpleSchema, + partitionKey: { key: "value", type: "number" }, + }); await store.set(d1.name, { key: "1", value: 0 }); diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 0fb7c4c03..f24d1921a 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -7,6 +7,9 @@ import { import { getEntityHook } from "./internal/entity-hook.js"; import { entities } from "./internal/global.js"; import { + EntityKeyBinary, + EntityKeyNumber, + EntityKeyString, EntitySpec, EntityStreamOptions, EntityStreamSpec, @@ -128,13 +131,35 @@ export interface EntityStream extends EntityStreamSpec { sourceLocation?: SourceLocation; } -export type AnyEntity = Entity; +export type AnyEntity = Entity; + +export type EntityKeyType = string | number | EntityBinaryMember; + +export type EntityBinaryMember = + | ArrayBuffer + | Blob + | Buffer + | DataView + | File + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; export type EntityValueMember = | EntityValue | string | number | boolean + | EntityBinaryMember + | Set | EntityValueMember[]; export type EntityValue = { @@ -143,17 +168,12 @@ export type EntityValue = { export type EntityKeyField = { [K in keyof E]: K extends string - ? E[K] extends string | number + ? E[K] extends EntityKeyType ? K : never : never; }[keyof E]; -// export type EntitySortKeyField = Exclude< -// EntityKeyField, -// Partition -// >; - export type EntityCompositeKeyFromEntity = E extends Entity ? EntityCompositeKey @@ -190,6 +210,7 @@ export type EntityPartitionKey = E extends Entity< > ? Partition : never; + export type EntitySortKey = E extends Entity< EntitySchema, EntityPartitionKey, @@ -197,6 +218,7 @@ export type EntitySortKey = E extends Entity< > ? Sort : never; + export type EntitySchema = E extends Entity< infer Schema, any, @@ -205,6 +227,19 @@ export type EntitySchema = E extends Entity< ? Schema : never; +export type EntityKeyReference< + E extends EntityValue, + F extends EntityKeyField | undefined +> = F extends undefined + ? undefined + : E[Exclude] extends string + ? F | EntityKeyString> + : E[Exclude] extends number + ? EntityKeyNumber> + : E[Exclude] extends EntityBinaryMember + ? EntityKeyBinary> + : never; + export interface Entity< E extends EntityValue, P extends EntityKeyField, @@ -212,8 +247,8 @@ export interface Entity< > extends Omit { __entityBrand: E; kind: "Entity"; - partitionKey: P; - sortKey?: S; + partitionKey: EntityKeyReference; + sortKey?: EntityKeyReference; schema?: z.Schema; streams: EntityStream>[]; /** @@ -322,11 +357,11 @@ export const Entity = { export interface EntityOptions< E extends EntityValue, - P extends string, - S extends string | undefined + P extends EntityKeyField, + S extends EntityKeyField | undefined > { - partitionKey: P; - sortKey?: S; + partitionKey: EntityKeyReference; + sortKey?: EntityKeyReference; schema: z.Schema; } diff --git a/packages/@eventual/core/src/internal/service-spec.ts b/packages/@eventual/core/src/internal/service-spec.ts index f1cc27494..2f93f5c27 100644 --- a/packages/@eventual/core/src/internal/service-spec.ts +++ b/packages/@eventual/core/src/internal/service-spec.ts @@ -161,10 +161,31 @@ export interface BucketNotificationHandlerSpec { sourceLocation?: SourceLocation; } +export interface EntityKeyString { + key: Name; + type: "string"; +} + +export interface EntityKeyNumber { + key: Name; + type: "number"; +} + +export interface EntityKeyBinary { + key: Name; + type: "binary"; +} + +export type EntityKeySpec = + | Name + | EntityKeyBinary + | EntityKeyNumber + | EntityKeyString; + export interface EntitySpec { name: string; - partitionKey: string; - sortKey?: string; + partitionKey: EntityKeySpec; + sortKey?: EntityKeySpec; /** * An Optional schema for the entity within an entity. */ From f0afadab7ee38bc5bdb06bdfe839b778438189db Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Mon, 8 May 2023 00:46:55 -0500 Subject: [PATCH 03/21] fix bugs and stuff --- apps/tests/aws-runtime/test/test-service.ts | 25 +- .../@eventual/aws-cdk/src/entity-service.ts | 6 +- .../src/clients/transaction-client.ts | 8 + .../src/handlers/entity-stream-worker.ts | 2 +- .../aws-runtime/src/stores/entity-store.ts | 24 +- .../src/handlers/transaction-worker.ts | 4 +- .../src/local/stores/entity-store.ts | 4 +- .../core-runtime/src/stores/entity-store.ts | 20 -- .../core-runtime/src/transaction-executor.ts | 216 ++++++++++-------- packages/@eventual/core/src/entity.ts | 50 ++-- packages/@eventual/core/src/error.ts | 9 + packages/@eventual/core/src/service-client.ts | 2 +- packages/@eventual/core/src/transaction.ts | 9 +- packages/@eventual/testing/test/env.test.ts | 6 +- 14 files changed, 201 insertions(+), 184 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 9ea25b4fd..14d70934e 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -548,7 +548,7 @@ export const createAndDestroyWorkflow = workflow( } ); -export const counter = entity("counter2", { +export const counter = entity("counter3", { schema: z.object({ n: z.number(), id: z.string() }), partitionKey: "id", }); @@ -575,8 +575,9 @@ export const counterNamespaceWatcher = counter.stream( async (item) => { if (item.operation === "insert") { const value = await counter.get(item.key); - await counter.set({ ...item.key, n: (value?.n ?? 0) + 1 }); - await entitySignal.sendSignal(item.key.id); + const id = item.key.id.substring("different".length); + await counter.set({ id, n: (value?.n ?? 0) + 1 }); + await entitySignal.sendSignal(id); } } ); @@ -603,6 +604,7 @@ export const entityWorkflow = workflow( "entityWorkflow", async (_, { execution: { id } }) => { await counter.set({ id, n: 1 }); + await counter.set({ id: "different" + id, n: 1 }); await entitySignal.expectSignal(); await entityTask(); await Promise.all([entityEvent.emit({ id }), entitySignal.expectSignal()]); @@ -620,20 +622,19 @@ export const entityWorkflow = workflow( entity: counter, operation: { operation: "set", - key: id, - value: { n: (value?.n ?? 0) + 1 }, + value: { id, n: (value?.n ?? 0) + 1 }, }, }, ]); // send deletion, to be picked up by the stream - counter.delete([id]); + await counter.delete([id]); await counter.query({ partition: id }); // this signal will contain the final value after deletion return await entitySignal2.expectSignal(); } ); -export const check = entity("check", { +export const check = entity("check2", { schema: z.object({ n: z.number(), id: z.string() }), partitionKey: "id", }); @@ -653,15 +654,23 @@ const noise = task( try { await check.set({ id, n }); } catch (err) { + console.error(err); if (!(err instanceof TransactionConflictException)) { throw err; } } + console.log(n); if (n === x) { transact = gitErDone({ id }); } } - return await transact; + console.log("waiting..."); + try { + return await transact; + } catch (err) { + console.error("Transaction Errored", err); + throw err; + } } ); diff --git a/packages/@eventual/aws-cdk/src/entity-service.ts b/packages/@eventual/aws-cdk/src/entity-service.ts index 53c650698..fa660ac43 100644 --- a/packages/@eventual/aws-cdk/src/entity-service.ts +++ b/packages/@eventual/aws-cdk/src/entity-service.ts @@ -209,10 +209,11 @@ interface EntityStreamProps { table: ITable; serviceProps: EntityServiceProps; entityService: EntityService; + entity: EntityRuntime; stream: EntityStreamFunction; } -export class Entity extends Construct { +class Entity extends Construct { public table: ITable; public streams: Record; @@ -245,6 +246,7 @@ export class Entity extends Construct { props.entity.streams.map((s) => [ s.spec.name, new EntityStream(entityStreamScope, s.spec.name, { + entity: props.entity, entityService: props.entityService, serviceProps: props.serviceProps, stream: s, @@ -281,7 +283,7 @@ export class EntityStream extends Construct implements EventualResource { ? { dynamodb: { Keys: { - pk: { + [normalizeKeySpec(props.entity.partitionKey).key]: { S: FilterRule.or( // for each namespace given, match the complete name. ...(partitions ? partitions : []), diff --git a/packages/@eventual/aws-runtime/src/clients/transaction-client.ts b/packages/@eventual/aws-runtime/src/clients/transaction-client.ts index 464790311..84e32a37d 100644 --- a/packages/@eventual/aws-runtime/src/clients/transaction-client.ts +++ b/packages/@eventual/aws-runtime/src/clients/transaction-client.ts @@ -16,6 +16,7 @@ export class AWSTransactionClient implements TransactionClient { async executeTransaction( request: ExecuteTransactionRequest ): Promise { + console.debug("Invoking Transaction: ", request.transaction); const response = await this.props.lambda.send( new InvokeCommand({ FunctionName: getLazy(this.props.transactionWorkerFunctionArn), @@ -27,9 +28,16 @@ export class AWSTransactionClient implements TransactionClient { ); if (!response.Payload) { + console.error( + "Transaction Returned Invalid Response: ", + request.transaction, + response.FunctionError + ); throw new Error("Invalid response from the transaction worker"); } + console.debug("Transaction Complete: ", request.transaction); + return JSON.parse( Buffer.from(response.Payload).toString("utf-8") ) as ExecuteTransactionResponse; diff --git a/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts b/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts index d8bb643d7..8033eb234 100644 --- a/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts @@ -58,7 +58,7 @@ export default (async (event) => { : {}; const { __version: oldVersion = undefined, ...oldValue } = oldItem - ? unmarshall(newItem as Record) + ? unmarshall(oldItem as Record) : {}; if (keys && operation) { diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 68cbc3315..b3ee29688 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -25,6 +25,7 @@ import { EntityTransactItem, EntityValue, TransactionCancelled, + TransactionConflict, UnexpectedVersion, } from "@eventual/core"; import { @@ -64,13 +65,13 @@ export class AWSEntityStore implements EntityStore { async getWithMetadata( entityName: string, - key: Pick | [p: string, s: string] + key: AnyEntityKey ): Promise<{ entity: any; version: number } | undefined> { const entity = this.getEntity(entityName); const item = await this.props.dynamo.send( new GetItemCommand({ Key: this.entityKey(key, entity), - TableName: this.tableName(name), + TableName: this.tableName(entityName), ConsistentRead: true, }) ); @@ -115,7 +116,7 @@ export class AWSEntityStore implements EntityStore { async delete( entityName: string, - key: Pick | [p: string, s: string], + key: AnyEntityKey, options?: EntityConsistencyOptions | undefined ): Promise { try { @@ -154,7 +155,7 @@ export class AWSEntityStore implements EntityStore { options?.expectedVersion !== undefined ? { ":expectedVersion": { N: options.expectedVersion.toString() } } : undefined, - TableName: this.tableName(name), + TableName: this.tableName(entity.name), }; } @@ -172,9 +173,7 @@ export class AWSEntityStore implements EntityStore { }; } - async transactWrite( - items: EntityTransactItem[] - ): Promise { + async transactWrite(items: EntityTransactItem[]): Promise { try { await this.props.dynamo.send( new TransactWriteItemsCommand({ @@ -238,7 +237,7 @@ export class AWSEntityStore implements EntityStore { ) ?? [] ); } else if (err instanceof TransactionConflictException) { - throw new TransactionCancelled([]); + throw new TransactionConflict(); } throw err; } @@ -251,7 +250,7 @@ export class AWSEntityStore implements EntityStore { ): Update { const entity = typeof _entity === "string" ? this.getEntity(_entity) : _entity; - const valueRecord = marshall(value); + const valueRecord = marshall(value, { removeUndefinedValues: true }); const normalizedKey = normalizeCompositeKey(entity, valueRecord); delete valueRecord[normalizedKey.partition.field]; if (normalizedKey.sort) { @@ -289,7 +288,7 @@ export class AWSEntityStore implements EntityStore { ? "attribute_not_exists(#__version)" : "#__version=:__expectedVersion" : undefined, - TableName: this.tableName(name), + TableName: this.tableName(entity.name), }; } @@ -304,7 +303,8 @@ export class AWSEntityStore implements EntityStore { private entityKey(key: AnyEntityKey, entity: AnyEntity) { const compositeKey = normalizeCompositeKey(entity, key); const keyMap = convertNormalizedEntityKeyToMap(compositeKey); - return marshall(keyMap); + const marshalledKey = marshall(keyMap, { removeUndefinedValues: true }); + return marshalledKey; } private listEntries( @@ -341,7 +341,7 @@ export class AWSEntityStore implements EntityStore { nextToken: request.nextToken, }, { - TableName: this.tableName(name), + TableName: this.tableName(entityName), KeyConditionExpression: sortKeyRef ? `#${partitionKeyRef.key}=:pk AND begins_with(#${sortKeyRef.key}, :sk)` : `#${partitionKeyRef.key}=:pk`, diff --git a/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts b/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts index 8607e2749..9db81b919 100644 --- a/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts +++ b/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts @@ -6,7 +6,7 @@ import { transactions } from "@eventual/core/internal"; import type { EventClient } from "../clients/event-client.js"; import type { ExecutionQueueClient } from "../clients/execution-queue-client.js"; import { EntityProvider } from "../index.js"; -import { isResolved } from "../result.js"; +import { isResolved, normalizeFailedResult } from "../result.js"; import type { EntityStore } from "../stores/entity-store.js"; import { createTransactionExecutor } from "../transaction-executor.js"; import { getLazy, LazyValue } from "../utils.js"; @@ -63,7 +63,7 @@ export function createTransactionWorker( return { output: output.result.value, succeeded: true }; } else { // todo: add reasons - return { succeeded: false }; + return { succeeded: false, ...normalizeFailedResult(output.result) }; } }; } diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index 8699eef6d..abc7c4022 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -134,9 +134,7 @@ export class LocalEntityStore implements EntityStore { }; } - async transactWrite( - items: EntityTransactItem[] - ): Promise { + async transactWrite(items: EntityTransactItem[]): Promise { const keysAndVersions = Object.fromEntries( items.map( (i) => diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 70517ae77..5774a8afe 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -18,32 +18,12 @@ export interface UnexpectedVersionResult { unexpectedVersion: true; } -export interface TransactionCancelledResult { - reasons: (UnexpectedVersionResult | undefined)[]; -} - -export interface TransactionConflictResult { - transactionConflict: true; -} - export function isUnexpectedVersionResult( value: any ): value is UnexpectedVersionResult { return value && "unexpectedVersion" in value; } -export function isTransactionCancelledResult( - value: any -): value is TransactionCancelledResult { - return value && "reasons" in value; -} - -export function isTransactionConflictResult( - value: any -): value is TransactionConflictResult { - return value && "transactionConflict" in value; -} - export interface NormalizeEntityKeyPart { field: string; type: "number" | "string" | "binary"; diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index 769fed284..cbff1e6a0 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -1,10 +1,12 @@ -import type { +import { AnyEntity, EntityCompositeKey, EntityConditionalOperation, EntityDeleteOperation, EntitySetOperation, EntityTransactItem, + TransactionCancelled, + TransactionConflict, TransactionContext, TransactionFunction, } from "@eventual/core"; @@ -28,14 +30,12 @@ import { import type { EventClient } from "./clients/event-client.js"; import type { ExecutionQueueClient } from "./clients/execution-queue-client.js"; import { enterEventualCallHookScope } from "./eventual-hook.js"; -import { EntityProvider } from "./index.js"; +import type { EntityProvider } from "./providers/entity-provider.js"; import { isResolved } from "./result.js"; import { convertNormalizedEntityKeyToMap, EntityStore, EntityWithMetadata, - isTransactionCancelledResult, - isTransactionConflictResult, isUnexpectedVersionResult, normalizeCompositeKey, NormalizeEntityKey, @@ -106,25 +106,31 @@ export function createTransactionExecutor( transactionContext: TransactionContext, retries = 3 ) { - // retry the transaction until it completes, there is an explicit conflict, or we run out of retries. - do { - const result = await executeTransactionOnce(); - if ("output" in result) { - return { result: Result.resolved(result.output) }; - } else if (result.canRetry) { - continue; - } else { - return { - result: Result.failed( - new Error("Failed after an explicit conflict.") - ), - }; - } - } while (retries--); + try { + // retry the transaction until it completes, there is an explicit conflict, or we run out of retries. + do { + const result = await executeTransactionOnce(); + if ("output" in result) { + return { result: Result.resolved(result.output) }; + } else if (result.canRetry) { + continue; + } else { + return { + result: Result.failed( + new Error("Failed after an explicit conflict.") + ), + }; + } + } while (retries--); - return { - result: Result.failed(new Error("Failed after too many retires.")), - }; + return { + result: Result.failed(new Error("Failed after too many retires.")), + }; + } catch (err) { + return { + result: Result.failed(err), + }; + } async function executeTransactionOnce(): Promise< | { output: Output } @@ -161,16 +167,17 @@ export function createTransactionExecutor( const entity = getEntity(eventual.entityName); // should either by the key or the value object, which can be used as the key const key = eventual.params[0]; + const normalizedKey = normalizeCompositeKey(entity, key); const entityValue = await resolveEntity( - eventual.entityName, - key + entity.name, + normalizedKey ); - const normalizedKey = serializeCompositeKey( + const serializedKey = serializeCompositeKey( entity.name, - normalizeCompositeKey(entity, key) + normalizedKey ); - entityCalls.set(normalizedKey, eventual); + entityCalls.set(serializedKey, eventual); return isEntityOperationOfType("set", eventual) ? { version: (entityValue?.version ?? 0) + 1 } : undefined; @@ -183,7 +190,7 @@ export function createTransactionExecutor( const entity = getEntity(eventual.entityName); const key = eventual.params[0]; const value = await resolveEntity( - eventual.entityName, + entity.name, normalizeCompositeKey(entity, key) ); @@ -250,10 +257,10 @@ export function createTransactionExecutor( /** * Build the transaction items that contain mutations with assertions or just assertions. */ - const transactionItems: EntityTransactItem[] = [ + const transactionItems: EntityTransactItem[] = [ ...retrievedEntities.entries(), - ].map(([normalizedKey, { entityName, key, value }], i) => { - const call = entityCalls.get(normalizedKey); + ].map(([serializedKey, { entityName, key, value }], i) => { + const call = entityCalls.get(serializedKey); const retrievedVersion = value?.version ?? 0; if (call) { @@ -291,7 +298,7 @@ export function createTransactionExecutor( expectedVersion: options?.expectedVersion ?? retrievedVersion, }, - } satisfies EntityDeleteOperation), + } satisfies EntityDeleteOperation), }; } else { // values that are retrieved only, will be checked using a condition @@ -301,78 +308,88 @@ export function createTransactionExecutor( operation: "condition", key: convertNormalizedEntityKeyToMap(key), version: retrievedVersion, - } satisfies EntityConditionalOperation, + } satisfies EntityConditionalOperation, }; } }); console.log(JSON.stringify(transactionItems, undefined, 4)); - /** - * Run the transaction - */ - const result = - transactionItems.length > 0 - ? await entityStore.transactWrite(transactionItems) - : undefined; + try { + /** + * Run the transaction + */ + const result = + transactionItems.length > 0 + ? await entityStore.transactWrite(transactionItems) + : undefined; - console.log(JSON.stringify(result, undefined, 4)); + console.log(JSON.stringify(result, undefined, 4)); + } catch (err) { + /** + * If the transaction failed, check if it is retryable or not. + */ + + if (err instanceof TransactionCancelled) { + const retry = !err.reasons.some((r, i) => + isUnexpectedVersionResult(r) + ? versionOverridesIndices.has(i) + : false + ); + return { + canRetry: retry, + failedItems: err.reasons + .map((r, i) => { + if (isUnexpectedVersionResult(r)) { + const x: EntityTransactItem = transactionItems[i]!; + const entity = + typeof x.entity === "string" + ? getEntity(x.entity) + : x.entity; + // normalize the key to extract only the key fields. + const key = normalizeCompositeKey( + entity, + x.operation.operation === "set" + ? x.operation.value + : x.operation.key + ); + return { + entityName: entity.name, + // convert back to a map to send to the caller + key: convertNormalizedEntityKeyToMap(key), + } satisfies TransactionFailedItem; + } + return undefined; + }) + .filter((i): i is Exclude => !!i), + }; + } else if (err instanceof TransactionConflict) { + return { canRetry: true, failedItems: [] }; + } + } /** - * If the transaction failed, check if it is retryable or not. + * If the transaction succeeded, emit events and send signals. + * TODO: move the side effects to a transactional dynamo update. */ - if (isTransactionCancelledResult(result)) { - const retry = !result.reasons.some((r, i) => - isUnexpectedVersionResult(r) ? versionOverridesIndices.has(i) : false - ); - return { - canRetry: retry, - failedItems: result.reasons - .map((r, i) => { - if (isUnexpectedVersionResult(r)) { - const x: EntityTransactItem = - transactionItems[i]!; - const entity = - typeof x.entity === "string" ? getEntity(x.entity) : x.entity; - const key = - x.operation.operation === "set" - ? x.operation.value - : x.operation.key; - return { - entityName: entity.name, - key, - } satisfies TransactionFailedItem; - } - return undefined; - }) - .filter((i): i is Exclude => !!i), - }; - } else if (isTransactionConflictResult(result)) { - return { canRetry: true, failedItems: [] }; - } else { - /** - * If the transaction succeeded, emit events and send signals. - * TODO: move the side effects to a transactional dynamo update. - */ - await Promise.allSettled( - eventCalls.map(async (call) => { - if (isEmitEventsCall(call)) { - await eventClient.emitEvents(...call.events); - } else if (call) { - // shouldn't happen - if (call.target.type === SignalTargetType.ChildExecution) { - return; - } - await executionQueueClient.sendSignal({ - execution: call.target.executionId, - signal: call.signalId, - payload: call.payload, - id: call.id, - }); + await Promise.allSettled( + eventCalls.map(async (call) => { + if (isEmitEventsCall(call)) { + await eventClient.emitEvents(...call.events); + } else if (call) { + // shouldn't happen + if (call.target.type === SignalTargetType.ChildExecution) { + return; } - }) - ); - } + await executionQueueClient.sendSignal({ + execution: call.target.executionId, + signal: call.signalId, + payload: call.payload, + id: call.id, + }); + } + }) + ); return { output }; @@ -388,15 +405,18 @@ export function createTransactionExecutor( entityName: string, key: NormalizeEntityKey ): EventualPromise | undefined> { - const normalizedKey = serializeCompositeKey(entityName, key); - if (retrievedEntities.has(normalizedKey)) { + const serializedKey = serializeCompositeKey(entityName, key); + if (retrievedEntities.has(serializedKey)) { return createResolvedEventualPromise( - Result.resolved(retrievedEntities.get(normalizedKey)?.value) + Result.resolved(retrievedEntities.get(serializedKey)?.value) ); } else { return createEventualPromise(async () => { - const value = await entityStore.get(entityName, key); - retrievedEntities.set(normalizedKey, { + const value = await entityStore.getWithMetadata( + entityName, + convertNormalizedEntityKeyToMap(key) + ); + retrievedEntities.set(serializedKey, { entityName, key, value, diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index f24d1921a..2b6194f9f 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -179,6 +179,14 @@ export type EntityCompositeKeyFromEntity = ? EntityCompositeKey : never; +export type EntityKeyFromEntity = E extends Entity< + infer Schema, + infer Partition, + infer Sort +> + ? EntityKey + : never; + export type EntityCompositeKey< E extends EntityValue, Partition extends EntityKeyField, @@ -204,7 +212,7 @@ export type EntityKey< export type AnyEntityKey = EntityKey; export type EntityPartitionKey = E extends Entity< - EntitySchema, + any, infer Partition, any > @@ -212,8 +220,8 @@ export type EntityPartitionKey = E extends Entity< : never; export type EntitySortKey = E extends Entity< - EntitySchema, - EntityPartitionKey, + any, + any, infer Sort > ? Sort @@ -298,51 +306,37 @@ export interface Entity< ): EntityStream>; } -export interface EntityTransactItem< - E extends EntityValue, - P extends EntityKeyField = EntityKeyField, - S extends EntityKeyField | undefined = EntityKeyField | undefined -> { - entity: Entity | string; +export interface EntityTransactItem { + entity: E | string; operation: | EntitySetOperation - | EntityDeleteOperation - | EntityConditionalOperation; + | EntityDeleteOperation + | EntityConditionalOperation; } -export interface EntitySetOperation { +export interface EntitySetOperation { operation: "set"; - value: E; + value: EntitySchema; options?: EntitySetOptions; } -export interface EntityDeleteOperation< - E extends EntityValue, - P extends EntityKeyField, - S extends EntityKeyField | undefined -> { +export interface EntityDeleteOperation { operation: "delete"; - key: EntityKey; + key: EntityKeyFromEntity; options?: EntitySetOptions; } /** * Used in transactions, cancels the transaction if the key's version does not match. */ -export interface EntityConditionalOperation< - E extends EntityValue = EntityValue, - P extends EntityKeyField = EntityKeyField, - S extends EntityKeyField | undefined = EntityKeyField | undefined -> { +export interface EntityConditionalOperation { operation: "condition"; - key: EntityKey; + key: EntityKeyFromEntity; version?: number; } export const Entity = { - transactWrite: []>( - items: Items - ): Promise => { + transactWrite: (items: EntityTransactItem[]): Promise => { return getEventualCallHook().registerEventualCall( createEventualCall>(EventualCallKind.EntityCall, { operation: "transact", diff --git a/packages/@eventual/core/src/error.ts b/packages/@eventual/core/src/error.ts index 02dd67d1c..f2862cc93 100644 --- a/packages/@eventual/core/src/error.ts +++ b/packages/@eventual/core/src/error.ts @@ -129,3 +129,12 @@ export class TransactionCancelled extends Error { super("Transactions Cancelled, see reasons"); } } + +/** + * + */ +export class TransactionConflict extends Error { + constructor() { + super("Transactions Conflicted with another operation"); + } +} diff --git a/packages/@eventual/core/src/service-client.ts b/packages/@eventual/core/src/service-client.ts index b5178801d..07acc9c1e 100644 --- a/packages/@eventual/core/src/service-client.ts +++ b/packages/@eventual/core/src/service-client.ts @@ -172,7 +172,7 @@ export interface ExecuteTransactionRequest< } export type ExecuteTransactionResponse = - | { succeeded: false } + | { succeeded: false; error: string; message: string } | { output: TransactionOutput; succeeded: true; diff --git a/packages/@eventual/core/src/transaction.ts b/packages/@eventual/core/src/transaction.ts index 270ae0c77..197f58e4f 100644 --- a/packages/@eventual/core/src/transaction.ts +++ b/packages/@eventual/core/src/transaction.ts @@ -1,8 +1,8 @@ -import { TransactionCancelled } from "./error.js"; +import { EventualError } from "./error.js"; import { + createEventualCall, EventualCallKind, InvokeTransactionCall, - createEventualCall, } from "./internal/calls.js"; import { getServiceClient, transactions } from "./internal/global.js"; import { TransactionSpec } from "./internal/service-spec.js"; @@ -63,10 +63,9 @@ export function transaction( if (response.succeeded) { return response.output; + } else { + throw new EventualError(response.error, response.message); } - - // todo: return reason? - throw new TransactionCancelled([]); } ); }) as any; diff --git a/packages/@eventual/testing/test/env.test.ts b/packages/@eventual/testing/test/env.test.ts index a41ed0a31..a671915e2 100644 --- a/packages/@eventual/testing/test/env.test.ts +++ b/packages/@eventual/testing/test/env.test.ts @@ -1437,8 +1437,7 @@ describe("entity", () => { { operation: { operation: "set", - key: namespace ? { key: id, namespace } : id, - value: { n: value }, + value: { id: namespace + id, n: value }, options: { expectedVersion: version }, }, entity: myEntity, @@ -1446,8 +1445,7 @@ describe("entity", () => { { operation: { operation: "set", - key: { key: id, namespace: "3" }, - value: { n: value }, + value: { id: namespace + id, n: value }, options: { expectedVersion: version }, }, entity: myEntity, From f3a6040e6c95e51245aa502761b2dd7132c9ec1e Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Mon, 8 May 2023 01:17:28 -0500 Subject: [PATCH 04/21] simplify schema input --- apps/tests/aws-runtime/test/test-service.ts | 4 ++-- packages/@eventual/compiler/src/eventual-infer.ts | 11 ++++++----- .../core-runtime/test/transaction-executor.test.ts | 4 ++-- packages/@eventual/core/src/entity.ts | 8 ++++++-- packages/@eventual/testing/test/env.test.ts | 4 ++-- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 14d70934e..0a2f5ca26 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -549,7 +549,7 @@ export const createAndDestroyWorkflow = workflow( ); export const counter = entity("counter3", { - schema: z.object({ n: z.number(), id: z.string() }), + schema: { n: z.number(), id: z.string() }, partitionKey: "id", }); const entityEvent = event<{ id: string }>("entityEvent"); @@ -635,7 +635,7 @@ export const entityWorkflow = workflow( ); export const check = entity("check2", { - schema: z.object({ n: z.number(), id: z.string() }), + schema: { n: z.number(), id: z.string() }, partitionKey: "id", }); diff --git a/packages/@eventual/compiler/src/eventual-infer.ts b/packages/@eventual/compiler/src/eventual-infer.ts index 3006d21e4..69dd52131 100644 --- a/packages/@eventual/compiler/src/eventual-infer.ts +++ b/packages/@eventual/compiler/src/eventual-infer.ts @@ -6,24 +6,24 @@ */ import { generateSchema } from "@anatine/zod-openapi"; import { - ServiceSpec, + BucketNotificationHandlerSpec, + buckets, commands, entities, events, + ServiceSpec, subscriptions, tasks, transactions, workflows, - buckets, - BucketNotificationHandlerSpec, } from "@eventual/core/internal"; import { CallExpression, ExportDeclaration, Expression, ModuleDeclaration, - TsType, parseFile, + TsType, } from "@swc/core"; import { Visitor } from "@swc/core/Visitor.js"; import crypto from "crypto"; @@ -31,6 +31,7 @@ import esbuild from "esbuild"; import fs from "fs/promises"; import os from "os"; import path from "path"; +import z from "zod"; import { getSpan, isBucketHandlerMemberCall, @@ -134,7 +135,7 @@ export function inferFromMemory(openApi: ServiceSpec["openApi"]): ServiceSpec { name: d.name, partitionKey: d.partitionKey, sortKey: d.sortKey, - schema: d.schema ? generateSchema(d.schema) : undefined, + schema: d.schema ? generateSchema(z.object(d.schema)) : undefined, streams: d.streams.map((s) => ({ name: s.name, entityName: s.entityName, diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index 231433f0b..4e3642f9f 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -74,11 +74,11 @@ const context: TransactionContext = { }, }; -const simpleSchema = z.object({ key: z.string(), value: z.number() }); +const simpleSchema = { key: z.string(), value: z.number() }; test("just get", async () => { const d1 = entity({ - schema: z.object({ key: z.string(), value: z.number() }), + schema: { key: z.string(), value: z.number() }, partitionKey: "key", }); const result = await executor( diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 2b6194f9f..7f2f119fb 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -257,7 +257,7 @@ export interface Entity< kind: "Entity"; partitionKey: EntityKeyReference; sortKey?: EntityKeyReference; - schema?: z.Schema; + schema?: ZodMappedSchema; streams: EntityStream>[]; /** * Get a value. @@ -349,6 +349,10 @@ export const Entity = { }, }; +export type ZodMappedSchema = { + [k in keyof E]: z.Schema; +}; + export interface EntityOptions< E extends EntityValue, P extends EntityKeyField, @@ -356,7 +360,7 @@ export interface EntityOptions< > { partitionKey: EntityKeyReference; sortKey?: EntityKeyReference; - schema: z.Schema; + schema: ZodMappedSchema; } export function entity< diff --git a/packages/@eventual/testing/test/env.test.ts b/packages/@eventual/testing/test/env.test.ts index a671915e2..7f5279b0f 100644 --- a/packages/@eventual/testing/test/env.test.ts +++ b/packages/@eventual/testing/test/env.test.ts @@ -1290,12 +1290,12 @@ describe("time", () => { }); const myEntity = entity("testEntity1", { - schema: z.object({ n: z.number(), id: z.string() }), + schema: { n: z.number(), id: z.string() }, partitionKey: "id", }); const myEntityWithSort = entity("testEntity2", { - schema: z.object({ n: z.number(), id: z.string(), part: z.string() }), + schema: { n: z.number(), id: z.string(), part: z.string() }, partitionKey: "part", sortKey: "id", }); From b12b002ed421cf631a7d542bc045c8939ffa05e1 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Mon, 8 May 2023 11:07:30 -0500 Subject: [PATCH 05/21] tests are passing --- apps/tests/aws-runtime/test/test-service.ts | 4 +- .../aws-runtime/src/stores/entity-store.ts | 9 +-- .../src/handlers/transaction-worker.ts | 2 +- .../core-runtime/src/handlers/utils.ts | 3 +- .../core-runtime/src/local/local-container.ts | 5 +- .../src/local/stores/entity-store.ts | 72 +++++++++---------- .../core-runtime/src/stores/entity-store.ts | 19 +---- .../core-runtime/src/system-commands.ts | 2 +- .../core-runtime/src/transaction-executor.ts | 10 +-- .../test/command-executor.test.ts | 15 ++-- .../test/transaction-executor.test.ts | 32 ++++----- packages/@eventual/core/src/entity.ts | 7 +- packages/@eventual/testing/test/env.test.ts | 55 +++++++------- 13 files changed, 115 insertions(+), 120 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 0a2f5ca26..1d78183c0 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -614,8 +614,8 @@ export const entityWorkflow = workflow( } catch (err) { console.error("expected the entity set to fail", err); } - const { entity, version } = (await counter.getWithMetadata([id])) ?? {}; - await counter.set({ id, n: entity!.n + 1 }, { expectedVersion: version }); + const { value: entityValue, version } = (await counter.getWithMetadata([id])) ?? {}; + await counter.set({ id, n: entityValue!.n + 1 }, { expectedVersion: version }); const value = await counter.get([id]); await Entity.transactWrite([ { diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index b3ee29688..4b57e0881 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -24,6 +24,7 @@ import { EntitySetOptions, EntityTransactItem, EntityValue, + EntityWithMetadata, TransactionCancelled, TransactionConflict, UnexpectedVersion, @@ -60,13 +61,13 @@ export class AWSEntityStore implements EntityStore { constructor(private props: AWSEntityStoreProps) {} async get(entityName: string, key: AnyEntityKey): Promise { - return (await this.getWithMetadata(entityName, key))?.entity; + return (await this.getWithMetadata(entityName, key))?.value; } async getWithMetadata( entityName: string, key: AnyEntityKey - ): Promise<{ entity: any; version: number } | undefined> { + ): Promise | undefined> { const entity = this.getEntity(entityName); const item = await this.props.dynamo.send( new GetItemCommand({ @@ -80,12 +81,12 @@ export class AWSEntityStore implements EntityStore { return undefined; } - const { __version, ...record } = unmarshall( + const { __version, ...value } = unmarshall( item.Item ) as EntitySchemaWithVersion; return { - entity: record, + value, version: __version, }; } diff --git a/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts b/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts index 9db81b919..4698a9f3a 100644 --- a/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts +++ b/packages/@eventual/core-runtime/src/handlers/transaction-worker.ts @@ -5,7 +5,7 @@ import type { import { transactions } from "@eventual/core/internal"; import type { EventClient } from "../clients/event-client.js"; import type { ExecutionQueueClient } from "../clients/execution-queue-client.js"; -import { EntityProvider } from "../index.js"; +import type { EntityProvider } from "../providers/entity-provider.js"; import { isResolved, normalizeFailedResult } from "../result.js"; import type { EntityStore } from "../stores/entity-store.js"; import { createTransactionExecutor } from "../transaction-executor.js"; diff --git a/packages/@eventual/core-runtime/src/handlers/utils.ts b/packages/@eventual/core-runtime/src/handlers/utils.ts index cd700303a..4664bbd0f 100644 --- a/packages/@eventual/core-runtime/src/handlers/utils.ts +++ b/packages/@eventual/core-runtime/src/handlers/utils.ts @@ -6,7 +6,8 @@ import { registerServiceClient, ServiceSpec, } from "@eventual/core/internal"; -import { BucketStore, EntityStore } from "../index.js"; +import type { BucketStore } from "../stores/bucket-store.js"; +import type { EntityStore } from "../stores/entity-store.js"; import { getLazy, LazyValue } from "../utils.js"; export interface WorkerIntrinsicDeps { diff --git a/packages/@eventual/core-runtime/src/local/local-container.ts b/packages/@eventual/core-runtime/src/local/local-container.ts index 3ee187bc9..49f9a1079 100644 --- a/packages/@eventual/core-runtime/src/local/local-container.ts +++ b/packages/@eventual/core-runtime/src/local/local-container.ts @@ -37,8 +37,11 @@ import { createTransactionWorker, TransactionWorker, } from "../handlers/transaction-worker.js"; -import { EntityProvider, GlobalEntityProvider } from "../index.js"; import { LogAgent } from "../log-agent.js"; +import { + EntityProvider, + GlobalEntityProvider, +} from "../providers/entity-provider.js"; import { InMemoryExecutorProvider } from "../providers/executor-provider.js"; import { GlobalSubscriptionProvider, diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index abc7c4022..aaef98b52 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -7,6 +7,7 @@ import { EntityQueryResultEntry, EntitySetOptions, EntityTransactItem, + EntityWithMetadata, TransactionCancelled, UnexpectedVersion, } from "@eventual/core"; @@ -15,7 +16,6 @@ import { EntityProvider } from "../../providers/entity-provider.js"; import { convertNormalizedEntityKeyToMap, EntityStore, - EntityWithMetadata, normalizeCompositeKey, } from "../../stores/entity-store.js"; import { deserializeCompositeKey, serializeCompositeKey } from "../../utils.js"; @@ -36,16 +36,16 @@ export class LocalEntityStore implements EntityStore { constructor(private props: LocalEntityStoreProps) {} async get(entityName: string, key: AnyEntityKey): Promise { - return this.getWithMetadata(entityName, key); + return (await this.getWithMetadata(entityName, key))?.value; } async getWithMetadata( entityName: string, key: AnyEntityKey - ): Promise<{ entity: any; version: number } | undefined> { + ): Promise | undefined> { const entity = this.getEntity(entityName); const { partition, sort } = normalizeCompositeKey(entity, key); - return this.getPartitionMap(name, partition.value).get( + return this.getPartitionMap(entityName, partition.value).get( sort?.value ?? "default" ); } @@ -57,8 +57,8 @@ export class LocalEntityStore implements EntityStore { ): Promise<{ version: number }> { const entity = this.getEntity(entityName); const normalizedKey = normalizeCompositeKey(entity, value); - const { version = 0, entity: oldValue } = - (await this.get(name, value)) ?? {}; + const { version = 0, value: oldValue } = + (await this.getWithMetadata(entityName, value)) ?? {}; if ( options?.expectedVersion !== undefined && options.expectedVersion !== version @@ -69,15 +69,15 @@ export class LocalEntityStore implements EntityStore { } const newVersion = options?.incrementVersion === false ? version : version + 1; - this.getPartitionMap(name, normalizedKey.partition.value).set( + this.getPartitionMap(entityName, normalizedKey.partition.value).set( normalizedKey.sort?.value ?? "default", { - entity, + value: value, version: newVersion, } ); this.props.localConnector.pushWorkflowTask({ - entityName: name, + entityName, key: convertNormalizedEntityKeyToMap(normalizedKey), operation: version === 0 ? ("insert" as const) : ("modify" as const), newValue: value, @@ -95,21 +95,21 @@ export class LocalEntityStore implements EntityStore { ): Promise { const entity = this.getEntity(entityName); const normalizedKey = normalizeCompositeKey(entity, key); - const item = await this.get(name, key); + const item = await this.getWithMetadata(entityName, key); if (item) { if (options?.expectedVersion !== undefined) { if (options.expectedVersion !== item.version) { throw new UnexpectedVersion("Unexpected Version"); } } - this.getPartitionMap(name, normalizedKey.partition.value).delete( + this.getPartitionMap(entityName, normalizedKey.partition.value).delete( normalizedKey.sort?.value ?? "default" ); this.props.localConnector.pushWorkflowTask({ - entityName: name, + entityName, key: convertNormalizedEntityKeyToMap(normalizedKey), operation: "remove" as const, - oldValue: item.entity, + oldValue: item.value, oldVersion: item.version, }); } @@ -126,7 +126,7 @@ export class LocalEntityStore implements EntityStore { entries: items?.map( ([, value]) => ({ - entity: value.entity, + entity: value.value, version: value.version, } satisfies EntityQueryResultEntry) ), @@ -136,20 +136,20 @@ export class LocalEntityStore implements EntityStore { async transactWrite(items: EntityTransactItem[]): Promise { const keysAndVersions = Object.fromEntries( - items.map( - (i) => - [ - serializeCompositeKey( - typeof i.entity === "string" ? i.entity : i.entity.name, - i.operation.operation === "set" - ? i.operation.value - : i.operation.key - ), - i.operation.operation === "condition" - ? i.operation.version - : i.operation.options?.expectedVersion, - ] as const - ) + items.map((i) => { + const entity = + typeof i.entity === "string" ? this.getEntity(i.entity) : i.entity; + const normalizedKey = normalizeCompositeKey( + entity, + i.operation.operation === "set" ? i.operation.value : i.operation.key + ); + return [ + serializeCompositeKey(entity.name, normalizedKey), + i.operation.operation === "condition" + ? i.operation.version + : i.operation.options?.expectedVersion, + ] as const; + }) ); /** * Evaluate the expected versions against the current state and return the results. @@ -157,24 +157,22 @@ export class LocalEntityStore implements EntityStore { * This is similar to calling TransactWriteItem in dynamo with only ConditionChecks and then * handling the errors. */ - const consistencyResults = await Promise.allSettled( + const consistencyResults = await Promise.all( Object.entries(keysAndVersions).map(async ([sKey, expectedVersion]) => { if (expectedVersion === undefined) { return true; } - const [name, key] = deserializeCompositeKey(sKey); - const { version } = (await this.get(name, key)) ?? { + const [entityName, key] = deserializeCompositeKey(sKey); + const { version } = (await this.getWithMetadata(entityName, key)) ?? { version: 0, }; return version === expectedVersion; }) ); - if (consistencyResults.some((r) => r.status === "rejected")) { + if (consistencyResults.some((r) => !r)) { throw new TransactionCancelled( consistencyResults.map((r) => - r.status === "fulfilled" - ? undefined - : new UnexpectedVersion("Unexpected Version") + r ? undefined : new UnexpectedVersion("Unexpected Version") ) ); } @@ -217,10 +215,10 @@ export class LocalEntityStore implements EntityStore { } private orderedEntries( - name: string, + entityName: string, listRequest: EntityQueryRequest ) { - const partition = this.getPartitionMap(name, listRequest.partition); + const partition = this.getPartitionMap(entityName, listRequest.partition); const entries = partition ? [...partition.entries()] : []; const result = paginateItems( diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 5774a8afe..d18433365 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,29 +1,14 @@ -import { +import type { AnyEntity, AnyEntityKey, EntityCompositeKey, EntityKeyTuple, EntityKeyType, } from "@eventual/core"; -import { EntityHook, EntityKeySpec } from "@eventual/core/internal"; +import type { EntityHook, EntityKeySpec } from "@eventual/core/internal"; export interface EntityStore extends EntityHook {} -export interface EntityWithMetadata { - entity: Entity; - version: number; -} - -export interface UnexpectedVersionResult { - unexpectedVersion: true; -} - -export function isUnexpectedVersionResult( - value: any -): value is UnexpectedVersionResult { - return value && "unexpectedVersion" in value; -} - export interface NormalizeEntityKeyPart { field: string; type: "number" | "string" | "binary"; diff --git a/packages/@eventual/core-runtime/src/system-commands.ts b/packages/@eventual/core-runtime/src/system-commands.ts index 92ca97d41..0f558aa43 100644 --- a/packages/@eventual/core-runtime/src/system-commands.ts +++ b/packages/@eventual/core-runtime/src/system-commands.ts @@ -20,8 +20,8 @@ import { z } from "zod"; import type { EventClient } from "./clients/event-client.js"; import type { ExecutionQueueClient } from "./clients/execution-queue-client.js"; import type { TaskClient } from "./clients/task-client.js"; +import { TransactionClient } from "./clients/transaction-client.js"; import type { WorkflowClient } from "./clients/workflow-client.js"; -import type { TransactionClient } from "./index.js"; import type { WorkflowSpecProvider } from "./providers/workflow-provider.js"; import type { ExecutionHistoryStateStore } from "./stores/execution-history-state-store.js"; import type { ExecutionHistoryStore } from "./stores/execution-history-store.js"; diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index cbff1e6a0..bd3762166 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -5,10 +5,12 @@ import { EntityDeleteOperation, EntitySetOperation, EntityTransactItem, + EntityWithMetadata, TransactionCancelled, TransactionConflict, TransactionContext, TransactionFunction, + UnexpectedVersion, } from "@eventual/core"; import { assertNever, @@ -35,8 +37,6 @@ import { isResolved } from "./result.js"; import { convertNormalizedEntityKeyToMap, EntityStore, - EntityWithMetadata, - isUnexpectedVersionResult, normalizeCompositeKey, NormalizeEntityKey, } from "./stores/entity-store.js"; @@ -195,7 +195,7 @@ export function createTransactionExecutor( ); if (isEntityOperationOfType("get", eventual)) { - return value?.entity; + return value?.value; } else if ( isEntityOperationOfType("getWithMetadata", eventual) ) { @@ -332,7 +332,7 @@ export function createTransactionExecutor( if (err instanceof TransactionCancelled) { const retry = !err.reasons.some((r, i) => - isUnexpectedVersionResult(r) + r instanceof UnexpectedVersion ? versionOverridesIndices.has(i) : false ); @@ -340,7 +340,7 @@ export function createTransactionExecutor( canRetry: retry, failedItems: err.reasons .map((r, i) => { - if (isUnexpectedVersionResult(r)) { + if (r instanceof UnexpectedVersion) { const x: EntityTransactItem = transactionItems[i]!; const entity = typeof x.entity === "string" diff --git a/packages/@eventual/core-runtime/test/command-executor.test.ts b/packages/@eventual/core-runtime/test/command-executor.test.ts index 3d6df4665..f0795073a 100644 --- a/packages/@eventual/core-runtime/test/command-executor.test.ts +++ b/packages/@eventual/core-runtime/test/command-executor.test.ts @@ -300,11 +300,10 @@ describe("entity request", () => { baseTime ); - expect(mockEntityStore.set).toHaveBeenCalledWith( - "ent", - { key: "key", value: "some value" }, - undefined - ); + expect(mockEntityStore.set).toHaveBeenCalledWith("ent", { + key: "key", + value: "some value", + }); expect(event).toMatchObject({ seq: 0, @@ -329,11 +328,7 @@ describe("entity request", () => { baseTime ); - expect(mockEntityStore.delete).toHaveBeenCalledWith( - "ent", - ["key"], - undefined - ); + expect(mockEntityStore.delete).toHaveBeenCalledWith("ent", ["key"]); expect(event).toMatchObject({ seq: 0, diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index 4e3642f9f..549796b67 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -11,9 +11,9 @@ import { jest } from "@jest/globals"; import { z } from "zod"; import { EventClient } from "../src/clients/event-client.js"; import { ExecutionQueueClient } from "../src/clients/execution-queue-client.js"; -import { GlobalEntityProvider } from "../src/index.js"; import { NoOpLocalEnvConnector } from "../src/local/local-container.js"; import { LocalEntityStore } from "../src/local/stores/entity-store.js"; +import { GlobalEntityProvider } from "../src/providers/entity-provider.js"; import { EntityStore } from "../src/stores/entity-store.js"; import { createTransactionExecutor, @@ -89,7 +89,7 @@ test("just get", async () => { context ); - expect(result).toMatchObject>({ + expect(result).toEqual>({ result: Result.resolved(undefined), }); }); @@ -108,8 +108,8 @@ test("just set", async () => { result: Result.resolved({ version: 1 }), }); - await expect(store.get(d1.name, [{ key: "1" }])).resolves.toEqual({ - entity: 1, + await expect(store.getWithMetadata(d1.name, { key: "1" })).resolves.toEqual({ + value: { key: "1", value: 1 }, version: 1, }); }); @@ -154,13 +154,13 @@ test("multiple operations", async () => { result: Result.resolved(undefined), }); - await expect(store.get(d1.name, { key: "1" })).resolves.toEqual({ - entity: { key: "1", value: 1 }, + await expect(store.getWithMetadata(d1.name, { key: "1" })).resolves.toEqual({ + value: { key: "1", value: 1 }, version: 1, }); - await expect(store.get(d2.name, [1])).resolves.toEqual({ - entity: { key: "1", value: 1 }, + await expect(store.getWithMetadata(d2.name, [1])).resolves.toEqual({ + value: { key: "1", value: 1 }, version: 1, }); }); @@ -187,8 +187,8 @@ test("multiple operations fail", async () => { result: Result.failed(Error("Failed after an explicit conflict.")), }); - await expect(store.get(d1.name, ["1"])).resolves.toEqual({ - entity: 0, + await expect(store.getWithMetadata(d1.name, ["1"])).resolves.toEqual({ + value: { key: "1", value: 0 }, version: 1, }); @@ -217,8 +217,8 @@ test("retry when retrieved data changes version", async () => { result: Result.resolved(undefined), }); - await expect(store.get(d1.name, ["1"])).resolves.toEqual({ - entity: { key: "1", value: 2 }, + await expect(store.getWithMetadata(d1.name, ["1"])).resolves.toEqual({ + value: { key: "1", value: 2 }, version: 3, }); }); @@ -245,8 +245,8 @@ test("retry when retrieved data changes version multiple times", async () => { result: Result.resolved(undefined), }); - await expect(store.get(d1.name, ["1"])).resolves.toEqual({ - entity: { key: "1", value: 3 }, + await expect(store.getWithMetadata(d1.name, ["1"])).resolves.toEqual({ + value: { key: "1", value: 3 }, version: 4, }); }); @@ -274,7 +274,7 @@ test("emit events on success", async () => { test("emit events after retry", async () => { const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); - await store.get(d1.name, { key: "1", value: 0 }); + await store.set(d1.name, { key: "1", value: 0 }); const result = await executor( async () => { @@ -292,7 +292,7 @@ test("emit events after retry", async () => { context ); - expect(result).toMatchObject>({ + expect(result).toEqual>({ result: Result.resolved(undefined), }); diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 7f2f119fb..af9d8cc0a 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -248,6 +248,11 @@ export type EntityKeyReference< ? EntityKeyBinary> : never; +export interface EntityWithMetadata { + value: E; + version: number; +} + export interface Entity< E extends EntityValue, P extends EntityKeyField, @@ -274,7 +279,7 @@ export interface Entity< */ getWithMetadata( key: EntityKey - ): Promise<{ entity: E; version: number } | undefined>; + ): Promise | undefined>; /** * Sets or updates a value within an entity and optionally a namespace. * diff --git a/packages/@eventual/testing/test/env.test.ts b/packages/@eventual/testing/test/env.test.ts index 7f5279b0f..de6c17430 100644 --- a/packages/@eventual/testing/test/env.test.ts +++ b/packages/@eventual/testing/test/env.test.ts @@ -1328,16 +1328,14 @@ describe("entity", () => { }); }); - test("workflow and task uses get and set with namespaces", async () => { - const entityTask = task( - async (namespace: string, { execution: { id } }) => { - const key = { part: namespace, id }; - await myEntityWithSort.set({ - ...key, - n: ((await myEntity.get(key))?.n ?? 0) + 1, - }); - } - ); + test("workflow and task uses get and set with partitions and sort keys", async () => { + const entityTask = task(async (part: string, { execution: { id } }) => { + const key = { part, id }; + await myEntityWithSort.set({ + ...key, + n: ((await myEntityWithSort.get(key))?.n ?? 0) + 1, + }); + }); const wf = workflow(async (_, { execution: { id } }) => { await myEntityWithSort.set({ part: "1", id, n: 1 }); await myEntityWithSort.set({ part: "2", id, n: 100 }); @@ -1416,7 +1414,7 @@ describe("entity", () => { Partial> >({ result: { - entity: { n: 5, id: execution.executionId, part: "versionTest" }, + value: { n: 5, id: execution.executionId, part: "versionTest" }, version: 3, }, status: ExecutionStatus.SUCCEEDED, @@ -1428,27 +1426,36 @@ describe("entity", () => { async ( { version, - namespace, + partition, value, - }: { version: number; namespace?: string; value: number }, + }: { version: number; partition?: string; value: number }, { execution: { id } } ) => { return Entity.transactWrite([ + partition + ? { + operation: { + operation: "set", + value: { part: partition, id, n: value }, + options: { expectedVersion: version }, + }, + entity: myEntityWithSort, + } + : { + operation: { + operation: "set", + value: { id, n: value }, + options: { expectedVersion: version }, + }, + entity: myEntity, + }, { operation: { operation: "set", - value: { id: namespace + id, n: value }, - options: { expectedVersion: version }, - }, - entity: myEntity, - }, - { - operation: { - operation: "set", - value: { id: namespace + id, n: value }, + value: { part: "3", id, n: value }, options: { expectedVersion: version }, }, - entity: myEntity, + entity: myEntityWithSort, }, ]); } @@ -1465,7 +1472,7 @@ describe("entity", () => { await testTask({ version: version1, value: 2 }); try { - await testTask({ version: version2 + 1, namespace: "2", value: 3 }); + await testTask({ version: version2 + 1, partition: "2", value: 3 }); } catch {} return Promise.all([ From 34bbe57fd70166f758bee83f23001e86ca760cd1 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Mon, 8 May 2023 11:19:21 -0500 Subject: [PATCH 06/21] clean up --- .../src/handlers/bucket-handler-worker.ts | 10 ++++++---- .../src/handlers/entity-stream-worker.ts | 12 +++++------ .../core-runtime/src/system-commands.ts | 6 +++--- packages/@eventual/core-runtime/src/utils.ts | 4 ++-- .../src/workflow-call-executor.ts | 20 +++++++++---------- packages/@eventual/core/src/entity.ts | 2 +- packages/@eventual/core/src/error.ts | 2 +- packages/@eventual/core/src/internal/calls.ts | 2 +- .../core/src/internal/entity-hook.ts | 2 +- 9 files changed, 31 insertions(+), 29 deletions(-) diff --git a/packages/@eventual/aws-runtime/src/handlers/bucket-handler-worker.ts b/packages/@eventual/aws-runtime/src/handlers/bucket-handler-worker.ts index 72f01c7b6..08a5e9125 100644 --- a/packages/@eventual/aws-runtime/src/handlers/bucket-handler-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/bucket-handler-worker.ts @@ -5,17 +5,19 @@ import "@eventual/injected/entry"; import { createBucketNotificationHandlerWorker, getLazy, - promiseAllSettledPartitioned + promiseAllSettledPartitioned, } from "@eventual/core-runtime"; import { S3Handler } from "aws-lambda"; import { createBucketStore, createEntityStore, - createServiceClient + createServiceClient, } from "../create.js"; import { - bucketHandlerName, bucketName, serviceName, - serviceUrl + bucketHandlerName, + bucketName, + serviceName, + serviceUrl, } from "../env.js"; const worker = createBucketNotificationHandlerWorker({ diff --git a/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts b/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts index 8033eb234..63d4e2ae9 100644 --- a/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts @@ -2,14 +2,16 @@ import serviceSpec from "@eventual/injected/spec"; // the user's entry point will register streams as a side effect. import "@eventual/injected/entry"; -import { EntityStreamItem } from "@eventual/core"; +import type { AttributeValue } from "@aws-sdk/client-dynamodb"; +import { unmarshall } from "@aws-sdk/util-dynamodb"; +import type { EntityStreamItem } from "@eventual/core"; import { createEntityStreamWorker, getLazy, promiseAllSettledPartitioned, } from "@eventual/core-runtime"; -import { EntityStreamOperation } from "@eventual/core/internal"; -import { DynamoDBStreamHandler } from "aws-lambda"; +import type { EntityStreamOperation } from "@eventual/core/internal"; +import type { DynamoDBStreamHandler } from "aws-lambda"; import { createBucketStore, createEntityStore, @@ -21,9 +23,7 @@ import { serviceName, serviceUrl, } from "../env.js"; -import { EntityEntityRecord } from "../stores/entity-store.js"; -import { unmarshall } from "@aws-sdk/util-dynamodb"; -import { AttributeValue } from "@aws-sdk/client-dynamodb"; +import type { EntityEntityRecord } from "../stores/entity-store.js"; const worker = createEntityStreamWorker({ bucketStore: createBucketStore(), diff --git a/packages/@eventual/core-runtime/src/system-commands.ts b/packages/@eventual/core-runtime/src/system-commands.ts index 0f558aa43..ad4a02985 100644 --- a/packages/@eventual/core-runtime/src/system-commands.ts +++ b/packages/@eventual/core-runtime/src/system-commands.ts @@ -1,8 +1,9 @@ import { AnyCommand, api, command, HttpResponse } from "@eventual/core"; import { assertNever, - EVENTUAL_SYSTEM_COMMAND_NAMESPACE, + emitEventsRequestSchema, EventualService, + EVENTUAL_SYSTEM_COMMAND_NAMESPACE, executeTransactionRequestSchema, extendsError, isSendTaskFailureRequest, @@ -10,7 +11,6 @@ import { isSendTaskSuccessRequest, listExecutionEventsRequestSchema, listExecutionsRequestSchema, - emitEventsRequestSchema, sendSignalRequestSchema, sendTaskUpdateSchema, startExecutionRequestSchema, @@ -20,7 +20,7 @@ import { z } from "zod"; import type { EventClient } from "./clients/event-client.js"; import type { ExecutionQueueClient } from "./clients/execution-queue-client.js"; import type { TaskClient } from "./clients/task-client.js"; -import { TransactionClient } from "./clients/transaction-client.js"; +import type { TransactionClient } from "./clients/transaction-client.js"; import type { WorkflowClient } from "./clients/workflow-client.js"; import type { WorkflowSpecProvider } from "./providers/workflow-provider.js"; import type { ExecutionHistoryStateStore } from "./stores/execution-history-state-store.js"; diff --git a/packages/@eventual/core-runtime/src/utils.ts b/packages/@eventual/core-runtime/src/utils.ts index d4b4cbb9c..0a8645f95 100644 --- a/packages/@eventual/core-runtime/src/utils.ts +++ b/packages/@eventual/core-runtime/src/utils.ts @@ -1,10 +1,10 @@ -import { +import type { AnyEntity, BucketNotificationEvent, EntityKeyTuple, EntityStreamItem, } from "@eventual/core"; -import { +import type { BucketNotificationHandlerSpec, EntityStreamSpec, } from "@eventual/core/internal"; diff --git a/packages/@eventual/core-runtime/src/workflow-call-executor.ts b/packages/@eventual/core-runtime/src/workflow-call-executor.ts index c97866a09..6c17e8079 100644 --- a/packages/@eventual/core-runtime/src/workflow-call-executor.ts +++ b/packages/@eventual/core-runtime/src/workflow-call-executor.ts @@ -1,4 +1,4 @@ -import { ExecutionID, Workflow } from "@eventual/core"; +import type { ExecutionID, Workflow } from "@eventual/core"; import { assertNever, AwaitTimerCall, @@ -44,19 +44,19 @@ import { WorkflowEventType, } from "@eventual/core/internal"; import stream from "stream"; -import { EventClient } from "./clients/event-client.js"; -import { ExecutionQueueClient } from "./clients/execution-queue-client.js"; -import { TaskClient, TaskWorkerRequest } from "./clients/task-client.js"; -import { TimerClient } from "./clients/timer-client.js"; -import { TransactionClient } from "./clients/transaction-client.js"; -import { WorkflowClient } from "./clients/workflow-client.js"; +import type { EventClient } from "./clients/event-client.js"; +import type { ExecutionQueueClient } from "./clients/execution-queue-client.js"; +import type { TaskClient, TaskWorkerRequest } from "./clients/task-client.js"; +import type { TimerClient } from "./clients/timer-client.js"; +import type { TransactionClient } from "./clients/transaction-client.js"; +import type { WorkflowClient } from "./clients/workflow-client.js"; import { formatChildExecutionName, formatExecutionId } from "./execution.js"; import { normalizeError } from "./result.js"; import { computeScheduleDate } from "./schedule.js"; -import { BucketStore } from "./stores/bucket-store.js"; -import { EntityStore } from "./stores/entity-store.js"; +import type { BucketStore } from "./stores/bucket-store.js"; +import type { EntityStore } from "./stores/entity-store.js"; import { createEvent } from "./workflow-events.js"; -import { WorkflowCall } from "./workflow-executor.js"; +import type { WorkflowCall } from "./workflow-executor.js"; interface WorkflowCallExecutorProps { bucketStore: BucketStore; diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index af9d8cc0a..95f8681f1 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -1,4 +1,4 @@ -import { z } from "zod"; +import type { z } from "zod"; import { createEventualCall, EntityCall, diff --git a/packages/@eventual/core/src/error.ts b/packages/@eventual/core/src/error.ts index f2862cc93..75add801c 100644 --- a/packages/@eventual/core/src/error.ts +++ b/packages/@eventual/core/src/error.ts @@ -131,7 +131,7 @@ export class TransactionCancelled extends Error { } /** - * + * Thrown when a transaction conflict with another conflict or write operation. */ export class TransactionConflict extends Error { constructor() { diff --git a/packages/@eventual/core/src/internal/calls.ts b/packages/@eventual/core/src/internal/calls.ts index bf4bb7035..cf657b78c 100644 --- a/packages/@eventual/core/src/internal/calls.ts +++ b/packages/@eventual/core/src/internal/calls.ts @@ -5,7 +5,7 @@ import type { EventEnvelope } from "../event.js"; import type { DurationSchedule, Schedule } from "../schedule.js"; import type { WorkflowExecutionOptions } from "../workflow.js"; import type { BucketMethod } from "./bucket-hook.js"; -import { EntityMethod } from "./entity-hook.js"; +import type { EntityMethod } from "./entity-hook.js"; import type { SignalTarget } from "./signal.js"; export type EventualCall = diff --git a/packages/@eventual/core/src/internal/entity-hook.ts b/packages/@eventual/core/src/internal/entity-hook.ts index 1f260574d..f0e0b4c96 100644 --- a/packages/@eventual/core/src/internal/entity-hook.ts +++ b/packages/@eventual/core/src/internal/entity-hook.ts @@ -1,4 +1,4 @@ -import { z } from "zod"; +import type { z } from "zod"; import type { AnyEntity, Entity, EntityTransactItem } from "../entity.js"; declare global { From e86059a973d6f0a042c45e7ca18fe69ab5318d6f Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Tue, 9 May 2023 13:51:41 -0500 Subject: [PATCH 07/21] building with array keys --- apps/tests/aws-runtime/test/test-service.ts | 56 ++- .../@eventual/aws-cdk/src/entity-service.ts | 111 +++-- .../aws-runtime/src/stores/entity-store.ts | 147 +++--- packages/@eventual/cli/src/display/event.ts | 9 +- .../@eventual/compiler/src/eventual-infer.ts | 7 +- .../src/local/local-environment.ts | 3 + .../src/local/stores/entity-store.ts | 88 +++- .../core-runtime/src/stores/entity-store.ts | 255 +++++++---- .../core-runtime/src/transaction-executor.ts | 8 +- packages/@eventual/core-runtime/src/utils.ts | 56 ++- .../test/command-executor.test.ts | 8 +- .../test/transaction-executor.test.ts | 51 ++- packages/@eventual/core/src/entity.ts | 428 ++++++++++-------- packages/@eventual/core/src/internal/calls.ts | 4 +- .../core/src/internal/entity-hook.ts | 8 +- .../core/src/internal/service-spec.ts | 62 +-- packages/@eventual/testing/src/environment.ts | 3 + packages/@eventual/testing/test/env.test.ts | 10 +- pnpm-lock.yaml | 87 +++- 19 files changed, 879 insertions(+), 522 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 4079a55b8..1d9c185e2 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -547,9 +547,13 @@ export const createAndDestroyWorkflow = workflow( } ); -export const counter = entity("counter3", { - schema: { n: z.number(), id: z.string() }, - partitionKey: "id", +export const counter = entity("counter4", { + attributes: { + n: z.number(), + namespace: z.union([z.literal("different"), z.literal("default")]), + id: z.string(), + }, + partition: ["namespace", "id"], }); const entityEvent = event<{ id: string }>("entityEvent"); const entitySignal = signal("entitySignal"); @@ -570,13 +574,16 @@ export const counterWatcher = counter.stream( export const counterNamespaceWatcher = counter.stream( "counterNamespaceWatch", - { partitionPrefixes: ["different"] }, + { queryKeys: [{ namespace: "different" }] }, async (item) => { if (item.operation === "insert") { const value = await counter.get(item.key); - const id = item.key.id.substring("different".length); - await counter.set({ id, n: (value?.n ?? 0) + 1 }); - await entitySignal.sendSignal(id); + await counter.set({ + namespace: "default", + id: value!.id, + n: (value?.n ?? 0) + 1, + }); + await entitySignal.sendSignal(value!.id); } } ); @@ -585,8 +592,8 @@ export const onEntityEvent = subscription( "onEntityEvent", { events: [entityEvent] }, async ({ id }) => { - const value = await counter.get([id]); - await counter.set({ id, n: (value?.n ?? 0) + 1 }); + const value = await counter.get(["default", id]); + await counter.set({ namespace: "default", id, n: (value?.n ?? 0) + 1 }); await entitySignal.sendSignal(id); } ); @@ -594,52 +601,55 @@ export const onEntityEvent = subscription( export const entityTask = task( "entityAct", async (_, { execution: { id } }) => { - const value = await counter.get([id]); - await counter.set({ id, n: (value?.n ?? 0) + 1 }); + const value = await counter.get(["default", id]); + await counter.set({ namespace: "default", id, n: (value?.n ?? 0) + 1 }); } ); export const entityWorkflow = workflow( "entityWorkflow", async (_, { execution: { id } }) => { - await counter.set({ id, n: 1 }); - await counter.set({ id: "different" + id, n: 1 }); + await counter.set({ namespace: "default", id, n: 1 }); + await counter.set({ namespace: "different", id, n: 1 }); await entitySignal.expectSignal(); await entityTask(); await Promise.all([entityEvent.emit({ id }), entitySignal.expectSignal()]); try { // will fail - await counter.set({ id, n: 0 }, { expectedVersion: 1 }); + await counter.set( + { namespace: "default", id, n: 0 }, + { expectedVersion: 1 } + ); } catch (err) { console.error("expected the entity set to fail", err); } const { value: entityValue, version } = - (await counter.getWithMetadata([id])) ?? {}; + (await counter.getWithMetadata(["default", id])) ?? {}; await counter.set( - { id, n: entityValue!.n + 1 }, + { namespace: "default", id, n: entityValue!.n + 1 }, { expectedVersion: version } ); - const value = await counter.get([id]); + const value = await counter.get(["default", id]); await Entity.transactWrite([ { entity: counter, operation: { operation: "set", - value: { id, n: (value?.n ?? 0) + 1 }, + value: { namespace: "default", id, n: (value?.n ?? 0) + 1 }, }, }, ]); // send deletion, to be picked up by the stream - await counter.delete([id]); - await counter.query({ partition: id }); + await counter.delete(["default", id]); + await counter.query(["default", id]); // this signal will contain the final value after deletion return await entitySignal2.expectSignal(); } ); -export const check = entity("check2", { - schema: { n: z.number(), id: z.string() }, - partitionKey: "id", +export const check = entity("check3", { + attributes: { n: z.number(), id: z.string() }, + partition: ["id"], }); const gitErDone = transaction("gitErDone", async ({ id }: { id: string }) => { diff --git a/packages/@eventual/aws-cdk/src/entity-service.ts b/packages/@eventual/aws-cdk/src/entity-service.ts index 82736940a..a7a776a80 100644 --- a/packages/@eventual/aws-cdk/src/entity-service.ts +++ b/packages/@eventual/aws-cdk/src/entity-service.ts @@ -6,11 +6,13 @@ import { import { EntityRuntime, EntityStreamFunction, - normalizeKeySpec, + normalizeCompositeKeyFromKeyDefinition, + NormalizedEntityKeyDefinitionPart, + normalizeEntitySpecKeyDefinition, } from "@eventual/core-runtime"; import { assertNever, - EntityKeySpec, + EntitySpec, TransactionSpec, } from "@eventual/core/internal"; import { Duration, RemovalPolicy, Stack } from "aws-cdk-lib"; @@ -219,14 +221,20 @@ class Entity extends Construct { constructor(scope: Construct, props: EntityProps) { super(scope, props.entity.name); + const normalizedKeyDefinition = normalizeEntitySpecKeyDefinition( + props.entity as unknown as EntitySpec + ); + this.table = new Table(this, "Table", { tableName: entityServiceTableName( props.serviceProps.serviceName, props.entity.name ), - partitionKey: entityKeyReferenceToAttribute(props.entity.partitionKey), - sortKey: props.entity.sortKey - ? entityKeyReferenceToAttribute(props.entity.sortKey) + partitionKey: entityKeyDefinitionToAttribute( + normalizedKeyDefinition.partition + ), + sortKey: normalizedKeyDefinition.sort + ? entityKeyDefinitionToAttribute(normalizedKeyDefinition.sort) : undefined, billingMode: BillingMode.PAY_PER_REQUEST, removalPolicy: RemovalPolicy.DESTROY, @@ -262,11 +270,35 @@ export class EntityStream extends Construct implements EventualResource { constructor(scope: Construct, id: string, props: EntityStreamProps) { super(scope, id); - const partitions = props.stream.spec.options?.partitions; - const partitionPrefixes = props.stream.spec.options?.partitionPrefixes; const streamName = props.stream.spec.name; const entityName = props.stream.spec.entityName; + const normalizedKeyDefinition = normalizeEntitySpecKeyDefinition( + props.entity as unknown as EntitySpec + ); + const normalizedQueryKeys = + props.stream.spec.options?.queryKeys?.map((q) => + normalizeCompositeKeyFromKeyDefinition(normalizedKeyDefinition, q) + ) ?? []; + + const queryPatterns = normalizedQueryKeys.map((k) => { + return { + // if no part of the partition key is provided, do not include it + partition: + k.partition.keyValue !== undefined + ? k.partition.partialValue + ? FilterRule.beginsWith(k.partition.keyValue.toString()) + : k.partition.keyValue + : undefined, + sort: + k.sort && k.sort.keyValue !== undefined + ? k.sort?.partialValue + ? FilterRule.beginsWith(k.sort.keyValue.toString()) + : k.sort.keyValue + : undefined, + }; + }); + const filters = { ...(props.stream.spec.options?.operations ? { @@ -277,23 +309,12 @@ export class EntityStream extends Construct implements EventualResource { ), } : undefined), - ...((partitions && partitions.length > 0) || - (partitionPrefixes && partitionPrefixes.length > 0) + ...(queryPatterns.length > 0 ? { dynamodb: { Keys: { - [normalizeKeySpec(props.entity.partitionKey).key]: { - S: FilterRule.or( - // for each namespace given, match the complete name. - ...(partitions || []), - // for each namespace prefix given, build a prefix statement for each one. - ...(partitionPrefixes - ? partitionPrefixes.flatMap( - (n) => FilterRule.beginsWith(n) as unknown as string[] - ) - : []) - ), - }, + // https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns-content-based-filtering.html#eb-filtering-complex-example-or + $or: queryPatterns.map(keyMatcher), }, }, } @@ -335,20 +356,52 @@ export class EntityStream extends Construct implements EventualResource { props.entityService.configureReadWriteEntityTable(this.handler); this.grantPrincipal = this.handler.grantPrincipal; + + function keyMatcher(item: (typeof queryPatterns)[number]) { + return { + ...(item.partition + ? { + [normalizedKeyDefinition.partition.keyAttribute]: { + [keyTypeToAttributeType(normalizedKeyDefinition.partition)]: [ + item.partition, + ].flat(), + }, + } + : {}), + ...(normalizedKeyDefinition.sort && item.sort + ? { + [normalizedKeyDefinition.sort.keyAttribute]: { + [keyTypeToAttributeType(normalizedKeyDefinition.sort)]: [ + item.sort, + ].flat(), + }, + } + : {}), + }; + + function keyTypeToAttributeType( + keyDef: NormalizedEntityKeyDefinitionPart + ) { + return keyDef.type === "number" + ? "N" + : keyDef.type === "string" + ? "S" + : assertNever(keyDef.type); + } + } } } -export function entityKeyReferenceToAttribute(ref: EntityKeySpec): Attribute { - const { key, type } = normalizeKeySpec(ref); +export function entityKeyDefinitionToAttribute( + part: NormalizedEntityKeyDefinitionPart +): Attribute { return { - name: key, + name: part.keyAttribute, type: - type === "string" + part.type === "string" ? AttributeType.STRING - : type === "number" + : part.type === "number" ? AttributeType.NUMBER - : type === "binary" - ? AttributeType.BINARY - : assertNever(type), + : assertNever(part.type), }; } diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 4b57e0881..8b6f4944c 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -17,13 +17,14 @@ import { marshall, unmarshall } from "@aws-sdk/util-dynamodb"; import { AnyEntity, AnyEntityKey, + EntityAttributes, + EntityAttributesFromEntity, EntityConsistencyOptions, - EntityQueryRequest, + EntityQueryKey, + EntityQueryOptions, EntityQueryResult, - EntitySchema, EntitySetOptions, EntityTransactItem, - EntityValue, EntityWithMetadata, TransactionCancelled, TransactionConflict, @@ -36,7 +37,7 @@ import { getLazy, LazyValue, normalizeCompositeKey, - normalizeKeySpec, + NormalizedEntityKey, } from "@eventual/core-runtime"; import { assertNever } from "@eventual/core/internal"; import { entityServiceTableName, queryPageWithToken } from "../utils.js"; @@ -47,12 +48,13 @@ export interface AWSEntityStoreProps { entityProvider: EntityProvider; } -export type EntitySchemaWithVersion = EntitySchema & { - __version: number; -}; +export type EntityAttributesWithVersion = + EntityAttributesFromEntity & { + __version: number; + }; -export type MarshalledEntitySchemaWithVersion = { - [k in keyof EntitySchema]: AttributeValue; +export type MarshalledEntityAttributesWithVersion = { + [k in keyof EntityAttributesFromEntity]: AttributeValue; } & { __version: AttributeValue.NMember; }; @@ -60,18 +62,19 @@ export type MarshalledEntitySchemaWithVersion = { export class AWSEntityStore implements EntityStore { constructor(private props: AWSEntityStoreProps) {} - async get(entityName: string, key: AnyEntityKey): Promise { + public async get(entityName: string, key: AnyEntityKey): Promise { return (await this.getWithMetadata(entityName, key))?.value; } - async getWithMetadata( + public async getWithMetadata( entityName: string, key: AnyEntityKey ): Promise | undefined> { const entity = this.getEntity(entityName); + const normalizedCompositeKey = normalizeCompositeKey(entity, key); const item = await this.props.dynamo.send( new GetItemCommand({ - Key: this.entityKey(key, entity), + Key: this.entityKey(normalizedCompositeKey), TableName: this.tableName(entityName), ConsistentRead: true, }) @@ -83,7 +86,22 @@ export class AWSEntityStore implements EntityStore { const { __version, ...value } = unmarshall( item.Item - ) as EntitySchemaWithVersion; + ) as EntityAttributesWithVersion; + + // if the key attributes are computed, remove them from the return value. + if ( + !( + normalizedCompositeKey.partition.keyAttribute in entity.attributes.shape + ) + ) { + delete value[normalizedCompositeKey.partition.keyAttribute]; + } + if ( + normalizedCompositeKey.sort && + !(normalizedCompositeKey.sort.keyAttribute in entity.attributes.shape) + ) { + delete value[normalizedCompositeKey.sort.keyAttribute]; + } return { value, @@ -91,7 +109,7 @@ export class AWSEntityStore implements EntityStore { }; } - async set( + public async set( entityName: string, entity: any, options?: EntitySetOptions | undefined @@ -115,7 +133,7 @@ export class AWSEntityStore implements EntityStore { } } - async delete( + public async delete( entityName: string, key: AnyEntityKey, options?: EntityConsistencyOptions | undefined @@ -141,7 +159,7 @@ export class AWSEntityStore implements EntityStore { const entity = typeof _entity === "string" ? this.getEntity(_entity) : _entity; return { - Key: this.entityKey(key, entity), + Key: this.entityKey(normalizeCompositeKey(entity, key)), ConditionExpression: options?.expectedVersion !== undefined ? "#__version=:expectedVersion" @@ -160,11 +178,12 @@ export class AWSEntityStore implements EntityStore { }; } - async query( + public async query( entityName: string, - request: EntityQueryRequest + key: EntityQueryKey, + request?: EntityQueryOptions ): Promise> { - const result = await this.listEntries(entityName, request); + const result = await this.queryEntries(entityName, key, request); return { nextToken: result.nextToken, entries: result.records.map(({ __version, ...r }) => ({ @@ -174,7 +193,7 @@ export class AWSEntityStore implements EntityStore { }; } - async transactWrite(items: EntityTransactItem[]): Promise { + public async transactWrite(items: EntityTransactItem[]): Promise { try { await this.props.dynamo.send( new TransactWriteItemsCommand({ @@ -209,7 +228,9 @@ export class AWSEntityStore implements EntityStore { : "#version=:expectedVersion" : undefined, TableName: this.tableName(entity.name), - Key: this.entityKey(i.operation.key, entity), + Key: this.entityKey( + normalizeCompositeKey(entity, i.operation.key) + ), ExpressionAttributeNames: { "#version": "version", }, @@ -244,7 +265,7 @@ export class AWSEntityStore implements EntityStore { } } - private createSetRequest( + private createSetRequest( _entity: string | AnyEntity, value: E, options?: EntitySetOptions @@ -253,12 +274,15 @@ export class AWSEntityStore implements EntityStore { typeof _entity === "string" ? this.getEntity(_entity) : _entity; const valueRecord = marshall(value, { removeUndefinedValues: true }); const normalizedKey = normalizeCompositeKey(entity, valueRecord); - delete valueRecord[normalizedKey.partition.field]; + + // if the key attributes are not computed and are in the original value, remove them from the set expression + delete valueRecord[normalizedKey.partition.keyAttribute]; if (normalizedKey.sort) { - delete valueRecord[normalizedKey.sort.field]; + delete valueRecord[normalizedKey.sort.keyAttribute]; } + return { - Key: this.entityKey(value, entity), + Key: this.entityKey(normalizedKey), UpdateExpression: [ "SET #__version=if_not_exists(#__version, :__startingVersion) + :__versionIncrement", ...Object.keys(valueRecord).map((key) => `#${key}=:${key}`), @@ -301,54 +325,65 @@ export class AWSEntityStore implements EntityStore { return entity; } - private entityKey(key: AnyEntityKey, entity: AnyEntity) { - const compositeKey = normalizeCompositeKey(entity, key); - const keyMap = convertNormalizedEntityKeyToMap(compositeKey); + private entityKey(key: NormalizedEntityKey) { + const keyMap = convertNormalizedEntityKeyToMap(key); const marshalledKey = marshall(keyMap, { removeUndefinedValues: true }); return marshalledKey; } - private listEntries( + private queryEntries( entityName: string, - request: EntityQueryRequest, + queryKey: EntityQueryKey, + request?: EntityQueryOptions, fields?: string[] - ) { + ): ReturnType< + typeof queryPageWithToken> + > { const entity = this.getEntity(entityName); - const partitionKeyRef = normalizeKeySpec(entity.partitionKey); - const sortKeyRef = entity.sortKey - ? normalizeKeySpec(entity.sortKey) - : undefined; + const normalizedKey = normalizeCompositeKey(entity, queryKey); const allFields = new Set([ ...(fields ?? []), - partitionKeyRef.key, - ...(sortKeyRef ? [sortKeyRef.key] : []), + normalizedKey.partition.keyAttribute, + ...(normalizedKey.sort ? [normalizedKey.sort.keyAttribute] : []), ]); - if (request.prefix) { - if (!sortKeyRef?.key) { - throw new Error( - "Cannot use `prefix` when the entity does not have a sortKey." - ); - } else if (sortKeyRef.type !== "string") { - throw new Error("Sort field must be a string to use the prefix field"); - } + + if (normalizedKey.partition.partialValue) { + throw new Error("Entity partition key cannot be partial for query"); } - return queryPageWithToken>( + + return queryPageWithToken>( { dynamoClient: this.props.dynamo, - pageSize: request.limit ?? 1000, - keys: sortKeyRef - ? [partitionKeyRef.key, sortKeyRef.key] - : [partitionKeyRef.key], - nextToken: request.nextToken, + pageSize: request?.limit ?? 1000, + keys: normalizedKey.sort + ? [ + normalizedKey.partition.keyAttribute, + normalizedKey.sort.keyAttribute, + ] + : [normalizedKey.partition.keyAttribute], + nextToken: request?.nextToken, }, { TableName: this.tableName(entityName), - KeyConditionExpression: sortKeyRef - ? `#${partitionKeyRef.key}=:pk AND begins_with(#${sortKeyRef.key}, :sk)` - : `#${partitionKeyRef.key}=:pk`, + KeyConditionExpression: normalizedKey.sort + ? normalizedKey.sort.partialValue + ? `#${normalizedKey.partition.keyAttribute}=:pk AND begins_with(#${normalizedKey.sort.keyAttribute}, :sk)` + : `#${normalizedKey.partition.keyAttribute}=:pk AND #${normalizedKey.sort.keyAttribute}=:sk` + : `#${normalizedKey.partition.keyAttribute}=:pk`, ExpressionAttributeValues: { - ":pk": { S: request.partition }, - ...(sortKeyRef ? { ":sk": { S: request.prefix ?? "" } } : {}), + ":pk": + typeof normalizedKey.partition.keyValue === "number" + ? { N: normalizedKey.partition.keyValue.toString() } + : { S: normalizedKey.partition.keyValue }, + ...(normalizedKey.sort + ? { + ":sk": + normalizedKey.sort.keyValue === undefined || + typeof normalizedKey.sort.keyValue === "string" + ? { S: normalizedKey.sort.keyValue ?? "" } + : { N: normalizedKey.sort.keyValue.toString() }, + } + : {}), }, ExpressionAttributeNames: Object.fromEntries( [...allFields]?.map((f) => [`#${f}`, f]) diff --git a/packages/@eventual/cli/src/display/event.ts b/packages/@eventual/cli/src/display/event.ts index 4114e8edf..c85b54045 100644 --- a/packages/@eventual/cli/src/display/event.ts +++ b/packages/@eventual/cli/src/display/event.ts @@ -81,13 +81,8 @@ function displayEntityCommand(operation: EntityOperation) { } } if (isEntityOperationOfType("query", operation)) { - const [request] = operation.params; - if (request.partition) { - output.push(`Namespace: ${request.prefix}`); - } - if (request.prefix) { - output.push(`Prefix: ${request.prefix}`); - } + const [key] = operation.params; + output.push(`Key: ${key}`); } } return output; diff --git a/packages/@eventual/compiler/src/eventual-infer.ts b/packages/@eventual/compiler/src/eventual-infer.ts index 6aa84bf5b..684a8cdd4 100644 --- a/packages/@eventual/compiler/src/eventual-infer.ts +++ b/packages/@eventual/compiler/src/eventual-infer.ts @@ -31,7 +31,6 @@ import esbuild from "esbuild"; import fs from "fs/promises"; import os from "os"; import path from "path"; -import z from "zod"; import { getSpan, isBucketHandlerMemberCall, @@ -133,9 +132,9 @@ export function inferFromMemory(openApi: ServiceSpec["openApi"]): ServiceSpec { entities: { entities: [...entities().values()].map((d) => ({ name: d.name, - partitionKey: d.partitionKey, - sortKey: d.sortKey, - schema: d.schema ? generateSchema(z.object(d.schema)) : undefined, + partition: d.partition, + sort: d.sort, + attributes: generateSchema(d.attributes), streams: d.streams.map((s) => ({ name: s.name, entityName: s.entityName, diff --git a/packages/@eventual/core-runtime/src/local/local-environment.ts b/packages/@eventual/core-runtime/src/local/local-environment.ts index 1e2e55334..b99fc40fb 100644 --- a/packages/@eventual/core-runtime/src/local/local-environment.ts +++ b/packages/@eventual/core-runtime/src/local/local-environment.ts @@ -155,6 +155,9 @@ export class LocalEnvironment { const entity = this.localContainer.entityProvider.getEntity( i.entityName ); + if (!entity) { + return false; + } return entityStreamMatchesItem(entity, i, s); }) .map((s) => s.name); diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index aaef98b52..a7c04d55f 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -2,7 +2,8 @@ import { AnyEntityKey, EntityConsistencyOptions, EntityKeyType, - EntityQueryRequest, + EntityQueryKey, + EntityQueryOptions, EntityQueryResult, EntityQueryResultEntry, EntitySetOptions, @@ -35,22 +36,32 @@ export class LocalEntityStore implements EntityStore { constructor(private props: LocalEntityStoreProps) {} - async get(entityName: string, key: AnyEntityKey): Promise { + public async get(entityName: string, key: AnyEntityKey): Promise { return (await this.getWithMetadata(entityName, key))?.value; } - async getWithMetadata( + public async getWithMetadata( entityName: string, key: AnyEntityKey ): Promise | undefined> { const entity = this.getEntity(entityName); const { partition, sort } = normalizeCompositeKey(entity, key); - return this.getPartitionMap(entityName, partition.value).get( - sort?.value ?? "default" + if (partition.partialValue) { + throw new Error( + "Entity key cannot be partial for get or getWithMetadata" + ); + } + + if (sort && sort.partialValue) { + throw new Error("Entity sort key cannot be partial for query"); + } + + return this.getPartitionMap(entityName, partition.keyValue).get( + sort?.keyValue ?? "default" ); } - async set( + public async set( entityName: string, value: any, options?: EntitySetOptions | undefined @@ -69,10 +80,19 @@ export class LocalEntityStore implements EntityStore { } const newVersion = options?.incrementVersion === false ? version : version + 1; - this.getPartitionMap(entityName, normalizedKey.partition.value).set( - normalizedKey.sort?.value ?? "default", + + if (normalizedKey.partition.partialValue) { + throw new Error("Entity partition key cannot be partial for set"); + } + + if (normalizedKey.sort && normalizedKey.sort.partialValue) { + throw new Error("Entity sort key cannot be partial for query"); + } + + this.getPartitionMap(entityName, normalizedKey.partition.keyValue).set( + normalizedKey.sort?.keyValue ?? "default", { - value: value, + value, version: newVersion, } ); @@ -88,7 +108,7 @@ export class LocalEntityStore implements EntityStore { return { version: newVersion }; } - async delete( + public async delete( entityName: string, key: AnyEntityKey, options?: EntityConsistencyOptions | undefined @@ -102,8 +122,17 @@ export class LocalEntityStore implements EntityStore { throw new UnexpectedVersion("Unexpected Version"); } } - this.getPartitionMap(entityName, normalizedKey.partition.value).delete( - normalizedKey.sort?.value ?? "default" + + if (normalizedKey.partition.partialValue) { + throw new Error("Entity partition key cannot be partial for delete"); + } + + if (normalizedKey.sort && normalizedKey.sort.partialValue) { + throw new Error("Entity sort key cannot be partial for query"); + } + + this.getPartitionMap(entityName, normalizedKey.partition.keyValue).delete( + normalizedKey.sort?.keyValue ?? "default" ); this.props.localConnector.pushWorkflowTask({ entityName, @@ -115,11 +144,16 @@ export class LocalEntityStore implements EntityStore { } } - async query( + public async query( entityName: string, - request: EntityQueryRequest + queryKey: EntityQueryKey, + request?: EntityQueryOptions ): Promise> { - const { items, nextToken } = this.orderedEntries(entityName, request); + const { items, nextToken } = this.orderedEntries( + entityName, + queryKey, + request + ); // values should be sorted return { @@ -134,7 +168,7 @@ export class LocalEntityStore implements EntityStore { }; } - async transactWrite(items: EntityTransactItem[]): Promise { + public async transactWrite(items: EntityTransactItem[]): Promise { const keysAndVersions = Object.fromEntries( items.map((i) => { const entity = @@ -216,9 +250,18 @@ export class LocalEntityStore implements EntityStore { private orderedEntries( entityName: string, - listRequest: EntityQueryRequest + queryKey: EntityQueryKey, + queryOptions?: EntityQueryOptions ) { - const partition = this.getPartitionMap(entityName, listRequest.partition); + const entity = this.getEntity(entityName); + const normalizedKey = normalizeCompositeKey(entity, queryKey); + if (normalizedKey.partition.partialValue) { + throw new Error("Partition key part must not be partial."); + } + const partition = this.getPartitionMap( + entityName, + normalizedKey.partition.keyValue + ); const entries = partition ? [...partition.entries()] : []; const result = paginateItems( @@ -229,13 +272,10 @@ export class LocalEntityStore implements EntityStore { : typeof a[0] === "number" ? a[0] - (b[0] as number) : 0, - listRequest.prefix - ? ([key]) => - typeof key === "string" && key.startsWith(listRequest.prefix!) - : undefined, undefined, - listRequest.limit, - listRequest.nextToken + undefined, + queryOptions?.limit, + queryOptions?.nextToken ); return result; diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index d18433365..87af6108b 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,101 +1,200 @@ import type { AnyEntity, - AnyEntityKey, EntityCompositeKey, - EntityKeyTuple, + EntityCompositeKeyFromEntity, + EntityCompositeKeyPart, + EntityKeyFromEntity, EntityKeyType, } from "@eventual/core"; -import type { EntityHook, EntityKeySpec } from "@eventual/core/internal"; +import type { EntityHook, EntitySpec } from "@eventual/core/internal"; +import type openapi from "openapi3-ts"; +import { z } from "zod"; -export interface EntityStore extends EntityHook {} +export type EntityStore = EntityHook; -export interface NormalizeEntityKeyPart { - field: string; - type: "number" | "string" | "binary"; - value: EntityKeyType; +export interface NormalizedEntityKeyDefinitionPart { + type: "number" | "string"; + keyAttribute: string; + fields: readonly string[]; } -export interface NormalizeEntityKey { - partition: NormalizeEntityKeyPart; - sort?: NormalizeEntityKeyPart; +export interface NormalizedEntityKeyDefinition { + partition: NormalizedEntityKeyDefinitionPart; + sort?: NormalizedEntityKeyDefinitionPart; } -export function normalizeCompositeKey( - entity: AnyEntity, - key: AnyEntityKey -): NormalizeEntityKey { - const { key: partitionField, type: partitionType } = normalizeKeySpec( - entity.partitionKey +export type NormalizedEntityKeyPart = NormalizedEntityKeyDefinitionPart & { + parts: { field: string; value: EntityKeyType }[]; +} & ( + | { + keyValue?: string | number; + partialValue: true; + } + | { + keyValue: string | number; + partialValue: false; + } ); - const { key: sortField = undefined, type: sortType = undefined } = - entity.sortKey ? normalizeKeySpec(entity.sortKey) : {}; - - if (Array.isArray(key)) { - const [partition, sort] = key; - - return sortField && sortType - ? { - partition: { - field: partitionField, - type: partitionType, - value: partition, - }, - sort: { field: sortField, type: sortType, value: sort }, - } - : { - partition: { - field: partitionField, - type: partitionType, - value: partition, - }, - }; - } else { - return sortField && sortType - ? { - partition: { - field: partitionField, - type: partitionType, - value: key[partitionField], - }, - sort: { - field: sortField, - type: sortType, - value: key[sortField], - }, - } - : { - partition: { - field: partitionField, - type: partitionType, - value: key[partitionField], - }, - }; - } + +export interface NormalizedEntityKey { + partition: NormalizedEntityKeyPart; + sort?: NormalizedEntityKeyPart; } -export function convertNormalizedEntityKeyToMap( - key: NormalizeEntityKey -): EntityCompositeKey { - return key.sort +/** + * Generate properties for an entity key given the key definition and key values. + */ +export function normalizeCompositeKey( + entity: E, + key: Partial> +): NormalizedEntityKey { + const normalizeKey = normalizeEntityKeyDefinition(entity); + + return normalizeCompositeKeyFromKeyDefinition(normalizeKey, key); +} + +export function normalizeCompositeKeyFromKeyDefinition( + keyDefinition: NormalizedEntityKeyDefinition, + key: Partial> +): NormalizedEntityKey { + const partitionCompositeKey = formatNormalizedPart( + keyDefinition.partition, + (p, i) => + Array.isArray(key) ? key[i] : (key as EntityCompositeKeyFromEntity)[p] + ); + + const sortCompositeKey = keyDefinition.sort + ? formatNormalizedPart(keyDefinition.sort, (p, i) => + Array.isArray(key) + ? key[i] + : (key as EntityCompositeKeyFromEntity)[p] + ) + : undefined; + + return sortCompositeKey ? { - [key.partition.field]: key.partition.value, - [key.sort.field]: key.sort.value, + partition: partitionCompositeKey, + sort: sortCompositeKey, } : { - [key.partition.field]: key.partition.value, + partition: partitionCompositeKey, }; } -export function convertNormalizedEntityKeyToTuple( - key: NormalizeEntityKey -): EntityKeyTuple { - return key.sort - ? [key.partition.value, key.sort.value] - : [key.partition.value]; +function formatNormalizedPart( + keyPart: NormalizedEntityKeyDefinitionPart, + valueRetriever: (field: string, index: number) => string | number +): NormalizedEntityKeyPart { + const parts = keyPart.fields.map((p, i) => ({ + field: p, + value: valueRetriever(p, i), + })); + + const missingValueIndex = parts.findIndex((p) => p.value === undefined); + + return { + type: keyPart.type, + fields: keyPart.fields, + parts, + keyAttribute: keyPart.keyAttribute, + keyValue: (keyPart.type === "number" + ? parts[0]?.value + : parts + .slice(0, missingValueIndex) + .map((p) => p.value) + .join("#")) as any, + partialValue: missingValueIndex !== -1, + }; +} + +/** + * Generate deterministic properties of the entity key for partition and optional sort keys. + */ +export function normalizeEntityKeyDefinition( + entity: AnyEntity +): NormalizedEntityKeyDefinition { + const entityZodShape = entity.attributes.shape; + + return { + partition: formatNormalizedDefinition(entity.partition), + sort: entity.sort ? formatNormalizedDefinition(entity.sort) : undefined, + }; + + function formatNormalizedDefinition( + keyField: EntityCompositeKeyPart + ): NormalizedEntityKeyDefinitionPart { + const [head, ...tail] = keyField; + + if (!head) { + throw new Error( + "Entity Key Part must contain at least one segment. Sort Key maybe undefined." + ); + } + + // the value will be a number if there is a single part to the composite key part and the value is already a number. + // else a string will be formatted + const type = + tail.length === 0 && entityZodShape[head] instanceof z.ZodNumber + ? "number" + : "string"; + + const attribute = keyField.join("|"); + + return { + type, + keyAttribute: attribute, + fields: keyField, + }; + } +} + +export function normalizeEntitySpecKeyDefinition( + entity: EntitySpec +): NormalizedEntityKeyDefinition { + const entityZodShape = entity.attributes; + + return { + partition: formatNormalizedDefinition(entity.partition), + sort: entity.sort ? formatNormalizedDefinition(entity.sort) : undefined, + }; + + function formatNormalizedDefinition( + keyField: EntityCompositeKeyPart + ): NormalizedEntityKeyDefinitionPart { + const [head, ...tail] = keyField; + + if (!head) { + throw new Error( + "Entity Key Part must contain at least one segment. Sort Key may be undefined." + ); + } + + // the value will be a number if there is a single part to the composite key part and the value is already a number. + // else a string will be formatted + const type = + tail.length === 0 || + (entityZodShape.properties?.[head] as openapi.SchemaObject).type === + "number" + ? "number" + : "string"; + + const attribute = keyField.join("|"); + + return { + type, + keyAttribute: attribute, + fields: keyField, + }; + } } -export function normalizeKeySpec( - keyRef: EntityKeySpec -): Exclude { - return typeof keyRef === "string" ? { key: keyRef, type: "string" } : keyRef; +export function convertNormalizedEntityKeyToMap( + key: NormalizedEntityKey +): EntityCompositeKey { + return Object.fromEntries([ + ...key.partition.parts.map(({ field, value }) => [field, value]), + ...(key.sort + ? key.sort.parts.map(({ field, value }) => [field, value]) + : []), + ]); } diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index 1e4a5f9cf..630ca06ea 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -38,7 +38,7 @@ import { convertNormalizedEntityKeyToMap, EntityStore, normalizeCompositeKey, - NormalizeEntityKey, + NormalizedEntityKey, } from "./stores/entity-store.js"; import { serializeCompositeKey } from "./utils.js"; @@ -149,13 +149,13 @@ export function createTransactionExecutor( string, { entityName: string; - key: NormalizeEntityKey; + key: NormalizedEntityKey; value: EntityWithMetadata | undefined; } >(); const eventualCallHook: EventualCallHook = { - registerEventualCall: (eventual) => { + registerEventualCall: (eventual): any => { if (isEntityCall(eventual)) { if ( isEntityOperationOfType("set", eventual) || @@ -403,7 +403,7 @@ export function createTransactionExecutor( function resolveEntity( entityName: string, - key: NormalizeEntityKey + key: NormalizedEntityKey ): EventualPromise | undefined> { const serializedKey = serializeCompositeKey(entityName, key); if (retrievedEntities.has(serializedKey)) { diff --git a/packages/@eventual/core-runtime/src/utils.ts b/packages/@eventual/core-runtime/src/utils.ts index 0a8645f95..b11c0f2c9 100644 --- a/packages/@eventual/core-runtime/src/utils.ts +++ b/packages/@eventual/core-runtime/src/utils.ts @@ -1,6 +1,8 @@ import type { - AnyEntity, BucketNotificationEvent, + Entity, + EntityAttributes, + EntityCompositeKeyPart, EntityKeyTuple, EntityStreamItem, } from "@eventual/core"; @@ -9,8 +11,9 @@ import type { EntityStreamSpec, } from "@eventual/core/internal"; import { + NormalizedEntityKey, + NormalizedEntityKeyPart, normalizeCompositeKey, - NormalizeEntityKey, } from "./stores/entity-store.js"; export async function promiseAllSettledPartitioned( @@ -64,9 +67,9 @@ export function getLazy( export function serializeCompositeKey( entityName: string, - key: NormalizeEntityKey + key: NormalizedEntityKey ) { - return `${entityName}|${key.partition.value}|${key.sort?.value ?? ""}`; + return `${entityName}|${key.partition.keyValue}|${key.sort?.keyValue ?? ""}`; } export function deserializeCompositeKey( @@ -86,27 +89,48 @@ export function isBucketNotificationEvent( return "bucketName" in value && "event" in value; } -export function entityStreamMatchesItem( - entity: E, - item: EntityStreamItem, - streamSpec: EntityStreamSpec +export function entityStreamMatchesItem< + Attr extends EntityAttributes, + const Partition extends EntityCompositeKeyPart, + const Sort extends EntityCompositeKeyPart | undefined +>( + entity: Entity, + item: EntityStreamItem, + streamSpec: EntityStreamSpec ) { - const { partition } = normalizeCompositeKey(entity, item); + const { partition, sort } = normalizeCompositeKey(entity, item.key); + const normalizedQueryKeys = + streamSpec.options?.queryKeys?.map((key) => + normalizeCompositeKey(entity, key) + ) ?? []; return ( streamSpec.entityName === item.entityName && (!streamSpec.options?.operations || streamSpec.options.operations.includes(item.operation)) && - (!streamSpec.options?.partitions || - (typeof partition.value === "string" && - streamSpec.options.partitions.includes(partition.value))) && - (!streamSpec.options?.partitionPrefixes || - streamSpec.options.partitionPrefixes.some( - (p) => - typeof partition.value === "string" && partition.value.startsWith(p) + (normalizedQueryKeys.length === 0 || + normalizedQueryKeys.some( + (k) => + // if the query key exists, it will have at least a partial partition key + compareNormalizedEntityKeyPart(partition, k.partition) && + // if there is a sort part to the query key, there must be a sort key to the value + (!k.sort || (sort && compareNormalizedEntityKeyPart(sort, k.sort))) )) ); } +function compareNormalizedEntityKeyPart( + value: NormalizedEntityKeyPart, + matcher: NormalizedEntityKeyPart +) { + return matcher.partialValue + ? // the matcher is a partial value and both matcher and value are string + typeof value.keyValue === "string" && + typeof matcher.keyValue === "string" && + value.keyValue.startsWith(matcher.keyValue) + : // matcher is not partial, compare the two + matcher.keyValue === value.keyValue; +} + export function bucketHandlerMatchesEvent( item: BucketNotificationEvent, streamSpec: BucketNotificationHandlerSpec diff --git a/packages/@eventual/core-runtime/test/command-executor.test.ts b/packages/@eventual/core-runtime/test/command-executor.test.ts index f0795073a..f4d1d2644 100644 --- a/packages/@eventual/core-runtime/test/command-executor.test.ts +++ b/packages/@eventual/core-runtime/test/command-executor.test.ts @@ -346,16 +346,14 @@ describe("entity request", () => { { entityName: "ent", operation: "query", - params: [{ partition: "part" }], + params: [{ id: "part" }], }, 0 ), baseTime ); - expect(mockEntityStore.query).toHaveBeenCalledWith("ent", { - partition: "part", - }); + expect(mockEntityStore.query).toHaveBeenCalledWith("ent", { id: "part" }); expect(event).toMatchObject({ seq: 0, @@ -363,7 +361,7 @@ describe("entity request", () => { operation: { entityName: "ent", operation: "query", - params: [{ partition: "part" }], + params: [{ partition: ["part"] }], }, timestamp: expect.stringContaining("Z"), }); diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index ce89058f8..91236db43 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -1,12 +1,12 @@ import { - entity as _entity, - EntityKeyField, + EntityAttributes, + EntityCompositeKeyPart, EntityOptions, - EntityValue, - event, TransactionContext, + entity as _entity, + event, } from "@eventual/core"; -import { entities, registerEntityHook, Result } from "@eventual/core/internal"; +import { Result, entities, registerEntityHook } from "@eventual/core/internal"; import { jest } from "@jest/globals"; import { z } from "zod"; import { EventClient } from "../src/clients/event-client.js"; @@ -16,17 +16,17 @@ import { LocalEntityStore } from "../src/local/stores/entity-store.js"; import { GlobalEntityProvider } from "../src/providers/entity-provider.js"; import { EntityStore } from "../src/stores/entity-store.js"; import { - createTransactionExecutor, TransactionExecutor, TransactionResult, + createTransactionExecutor, } from "../src/transaction-executor.js"; const entity = (() => { let n = 0; return < - E extends EntityValue, - P extends EntityKeyField = EntityKeyField, - S extends EntityKeyField | undefined = EntityKeyField | undefined + E extends EntityAttributes, + const P extends EntityCompositeKeyPart = EntityCompositeKeyPart, + const S extends EntityCompositeKeyPart | undefined = undefined >( options: EntityOptions ) => { @@ -79,8 +79,8 @@ const simpleSchema = { key: z.string(), value: z.number() }; test("just get", async () => { const d1 = entity({ - schema: { key: z.string(), value: z.number() }, - partitionKey: "key", + attributes: { key: z.string(), value: z.number() }, + partition: ["key"], }); const result = await executor( () => { @@ -96,7 +96,7 @@ test("just get", async () => { }); test("just set", async () => { - const d1 = entity({ partitionKey: "key", schema: simpleSchema }); + const d1 = entity({ partition: ["key"], attributes: simpleSchema }); const result = await executor( () => { return d1.set({ key: "1", value: 1 }); @@ -116,7 +116,7 @@ test("just set", async () => { }); test("just delete", async () => { - const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d1 = entity({ attributes: simpleSchema, partition: ["key"] }); await store.set(d1.name, [{ key: "1", value: 0 }]); @@ -136,10 +136,10 @@ test("just delete", async () => { }); test("multiple operations", async () => { - const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d1 = entity({ attributes: simpleSchema, partition: ["key"] }); const d2 = entity({ - schema: simpleSchema, - partitionKey: { key: "value", type: "number" }, + attributes: simpleSchema, + partition: ["value"], }); const result = await executor( @@ -167,10 +167,10 @@ test("multiple operations", async () => { }); test("multiple operations fail", async () => { - const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d1 = entity({ attributes: simpleSchema, partition: ["key"] }); const d2 = entity({ - schema: simpleSchema, - partitionKey: { key: "value", type: "number" }, + attributes: simpleSchema, + partition: ["value"], }); await store.set(d1.name, { key: "1", value: 0 }); @@ -197,7 +197,7 @@ test("multiple operations fail", async () => { }); test("retry when retrieved data changes version", async () => { - const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d1 = entity({ attributes: simpleSchema, partition: ["key"] }); await store.set(d1.name, { key: "1", value: 0 }); @@ -225,7 +225,7 @@ test("retry when retrieved data changes version", async () => { }); test("retry when retrieved data changes version multiple times", async () => { - const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d1 = entity({ attributes: simpleSchema, partition: ["key"] }); await store.set(d1.name, { key: "1", value: 0 }); @@ -253,7 +253,7 @@ test("retry when retrieved data changes version multiple times", async () => { }); test("emit events on success", async () => { - const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d1 = entity({ attributes: simpleSchema, partition: ["key"] }); const result = await executor( async () => { @@ -273,7 +273,10 @@ test("emit events on success", async () => { }); test("emit events after retry", async () => { - const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d1 = entity({ + attributes: simpleSchema, + partition: ["key"], + }); await store.set(d1.name, { key: "1", value: 0 }); @@ -301,7 +304,7 @@ test("emit events after retry", async () => { }); test("events not emitted on failure", async () => { - const d1 = entity({ schema: simpleSchema, partitionKey: "key" }); + const d1 = entity({ attributes: simpleSchema, partition: ["key"] }); await store.set(d1.name, { key: "1", value: 0 }); diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 95f8681f1..1dedb77e9 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -1,4 +1,4 @@ -import type { z } from "zod"; +import { z } from "zod"; import { createEventualCall, EntityCall, @@ -7,9 +7,6 @@ import { import { getEntityHook } from "./internal/entity-hook.js"; import { entities } from "./internal/global.js"; import { - EntityKeyBinary, - EntityKeyNumber, - EntityKeyString, EntitySpec, EntityStreamOptions, EntityStreamSpec, @@ -18,12 +15,12 @@ import { } from "./internal/service-spec.js"; import type { ServiceContext } from "./service.js"; -export interface EntityQueryResultEntry { +export interface EntityQueryResultEntry { entity: E; version: number; } -export interface EntityQueryResult { +export interface EntityQueryResult { entries?: EntityQueryResultEntry[]; /** * Returned when there are more values than the limit allowed to return. @@ -31,21 +28,26 @@ export interface EntityQueryResult { nextToken?: string; } -export interface EntityQueryRequest< - E extends EntityValue, - Partition extends EntityKeyField -> { - /** - * Partition key to retrieve values for. - * - * @default - retrieve values with no namespace. - */ - partition: E[Partition]; - /** - * Sort key prefix to retrieve values or keys for. - * Values are only retrieved for a single name + partition pair. - */ - prefix?: string; +export type EntityCompositeKeyPart = + readonly EntityKeyField[]; + +/** + * A partial key that can be used to query an entity. + * + * ```ts + * entity.query({ part1: "val", part2: "val2", sort1: "val" }); + * ``` + * + * TODO: support expressions like between and starts with on sort properties + * TODO: support a progressive builder instead of a simple partial. + */ +export type EntityQueryKey< + E extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined +> = Partial>; + +export interface EntityQueryOptions { /** * Number of items to retrieve * @default 100 @@ -81,135 +83,175 @@ export interface EntityStreamContext { service: ServiceContext; } -export interface EntityStreamHandler { +export interface EntityStreamHandler< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> { /** * Provides the keys, new value */ - (item: EntityStreamItem, context: EntityStreamContext): - | Promise - | void - | false; + ( + item: EntityStreamItem, + context: EntityStreamContext + ): Promise | void | false; } -export interface EntityStreamItemBase { +export interface EntityStreamItemBase< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> { streamName: string; entityName: string; - key: EntityCompositeKeyFromEntity; + key: EntityCompositeKey; } -export type EntityStreamItem = - | EntityStreamInsertItem - | EntityStreamModifyItem - | EntityStreamRemoveItem; - -export interface EntityStreamInsertItem - extends EntityStreamItemBase { - newValue: EntitySchema; +export type EntityStreamItem< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> = + | EntityStreamInsertItem + | EntityStreamModifyItem + | EntityStreamRemoveItem; + +export interface EntityStreamInsertItem< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> extends EntityStreamItemBase { + newValue: z.infer>; newVersion: number; operation: "insert"; } -export interface EntityStreamModifyItem - extends EntityStreamItemBase { +export interface EntityStreamModifyItem< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> extends EntityStreamItemBase { operation: "modify"; - newValue: EntitySchema; + newValue: z.infer>; newVersion: number; - oldValue?: EntitySchema; + oldValue?: z.infer>; oldVersion?: number; } -export interface EntityStreamRemoveItem - extends EntityStreamItemBase { +export interface EntityStreamRemoveItem< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> extends EntityStreamItemBase { operation: "remove"; - oldValue?: EntitySchema; + oldValue?: z.infer>; oldVersion?: number; } -export interface EntityStream extends EntityStreamSpec { +export interface EntityStream< + Attr extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined +> extends EntityStreamSpec { kind: "EntityStream"; - handler: EntityStreamHandler; + handler: EntityStreamHandler; sourceLocation?: SourceLocation; } -export type AnyEntity = Entity; - -export type EntityKeyType = string | number | EntityBinaryMember; - -export type EntityBinaryMember = - | ArrayBuffer - | Blob - | Buffer - | DataView - | File - | Int8Array - | Uint8Array - | Uint8ClampedArray - | Int16Array - | Uint16Array - | Int32Array - | Uint32Array - | Float32Array - | Float64Array - | BigInt64Array - | BigUint64Array; - -export type EntityValueMember = - | EntityValue - | string - | number - | boolean - | EntityBinaryMember - | Set - | EntityValueMember[]; - -export type EntityValue = { - [key: string]: EntityValueMember; -}; +export type AnyEntity = Entity< + any, + readonly string[], + readonly string[] | undefined +>; + +export type EntityKeyType = string | number; +export type EntityKeyZodType = z.ZodString | z.ZodNumber; -export type EntityKeyField = { +export type EntityKeyField = { [K in keyof E]: K extends string - ? E[K] extends EntityKeyType + ? // only include fields that extend string or number + z.infer extends EntityKeyType ? K : never : never; }[keyof E]; export type EntityCompositeKeyFromEntity = - E extends Entity - ? EntityCompositeKey + E extends Entity + ? EntityCompositeKey : never; export type EntityKeyFromEntity = E extends Entity< - infer Schema, + infer Attributes, infer Partition, infer Sort > - ? EntityKey + ? EntityKey : never; export type EntityCompositeKey< - E extends EntityValue, - Partition extends EntityKeyField, - Sort extends EntityKeyField | undefined -> = Sort extends undefined - ? Pick - : Pick>; + Attr extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined +> = { + [k in Partition[number]]: z.infer; +} & (Sort extends readonly (keyof Attr)[] + ? { + [k in Sort[number]]: z.infer; + } + : // eslint-disable-next-line + {}); + +// const T = { n: z.string(), m: z.string(), x: z.number() }; +// type X = EntityKey; +// const x: X = ["hello", "hello", 1]; + +export type EntityKeyArray< + E extends EntityAttributes, + Fields extends readonly (keyof E)[] +> = Fields extends readonly [ + infer X extends keyof E, + ...infer Rest extends readonly (keyof E)[] +] + ? readonly [z.infer, ...EntityKeyArray] + : Fields extends readonly [infer X extends keyof E] + ? readonly [z.infer] + : readonly []; export type EntityKeyTuple< - E extends EntityValue, - Partition extends EntityKeyField, - Sort extends EntityKeyField | undefined + E extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined > = Sort extends undefined - ? [p: E[Partition]] - : [p: E[Partition], s: E[Exclude]]; + ? EntityKeyArray + : readonly [ + ...EntityKeyArray, + ...EntityKeyArray> + ]; export type EntityKey< - E extends EntityValue, - Partition extends EntityKeyField, - Sort extends EntityKeyField | undefined + E extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined > = EntityCompositeKey | EntityKeyTuple; -export type AnyEntityKey = EntityKey; +export type AnyEntityKey = EntityKey< + any, + readonly string[], + readonly string[] | undefined +>; export type EntityPartitionKey = E extends Entity< any, @@ -227,50 +269,56 @@ export type EntitySortKey = E extends Entity< ? Sort : never; -export type EntitySchema = E extends Entity< - infer Schema, +export type EntityAttributesFromEntity = E extends Entity< + infer Attributes, any, any > - ? Schema - : never; - -export type EntityKeyReference< - E extends EntityValue, - F extends EntityKeyField | undefined -> = F extends undefined - ? undefined - : E[Exclude] extends string - ? F | EntityKeyString> - : E[Exclude] extends number - ? EntityKeyNumber> - : E[Exclude] extends EntityBinaryMember - ? EntityKeyBinary> + ? Attributes : never; -export interface EntityWithMetadata { - value: E; +export interface EntityWithMetadata { + value: z.infer>; version: number; } +export type AttributeNames = + Attr extends z.ZodObject ? keyof A : keyof Attr; + +export type AttributeShape = + Attr extends z.ZodObject + ? { + [k in keyof A]: A[k]; + } + : Attr; + +export type EntityAttributes = { + [attribute in string]: z.ZodType; +}; + +export type EntityZodAttributes = + | z.ZodObject + | EntityAttributes; + export interface Entity< - E extends EntityValue, - P extends EntityKeyField, - S extends EntityKeyField | undefined -> extends Omit { - __entityBrand: E; + Attr extends EntityAttributes, + P extends EntityCompositeKeyPart, + S extends EntityCompositeKeyPart | undefined +> extends Omit { kind: "Entity"; - partitionKey: EntityKeyReference; - sortKey?: EntityKeyReference; - schema?: ZodMappedSchema; - streams: EntityStream>[]; + partition: P; + sort?: S; + attributes: z.ZodObject; + streams: EntityStream[]; /** * Get a value. * If your values use composite keys, the namespace must be provided. * * @param key - key or {@link CompositeKey} of the value to retrieve. */ - get(key: EntityKey): Promise; + get( + key: EntityKey + ): Promise> | undefined>; /** * Get a value and metadata like version. * If your values use composite keys, the namespace must be provided. @@ -278,20 +326,23 @@ export interface Entity< * @param key - key or {@link CompositeKey} of the value to retrieve. */ getWithMetadata( - key: EntityKey - ): Promise | undefined>; + key: EntityKey + ): Promise | undefined>; /** * Sets or updates a value within an entity and optionally a namespace. * * Values with namespaces are considered distinct from value without a namespace or within different namespaces. * Values and keys can only be listed within a single namespace. */ - set(entity: E, options?: EntitySetOptions): Promise<{ version: number }>; + set( + entity: z.infer>, + options?: EntitySetOptions + ): Promise<{ version: number }>; /** * Deletes a single entry within an entity and namespace. */ delete( - key: EntityKey, + key: EntityKey, options?: EntityConsistencyOptions ): Promise; /** @@ -299,16 +350,19 @@ export interface Entity< * * If namespace is not provided, only values which do not use composite keys will be returned. */ - query(request: EntityQueryRequest): Promise>; + query( + key: EntityQueryKey, + request?: EntityQueryOptions + ): Promise>; stream( name: string, - options: EntityStreamOptions, - handler: EntityStreamHandler> - ): EntityStream>; + options: EntityStreamOptions, + handler: EntityStreamHandler + ): EntityStream; stream( name: string, - handler: EntityStreamHandler> - ): EntityStream>; + handler: EntityStreamHandler + ): EntityStream; } export interface EntityTransactItem { @@ -321,7 +375,7 @@ export interface EntityTransactItem { export interface EntitySetOperation { operation: "set"; - value: EntitySchema; + value: EntityAttributesFromEntity; options?: EntitySetOptions; } @@ -354,25 +408,21 @@ export const Entity = { }, }; -export type ZodMappedSchema = { - [k in keyof E]: z.Schema; -}; - export interface EntityOptions< - E extends EntityValue, - P extends EntityKeyField, - S extends EntityKeyField | undefined + Attr extends EntityAttributes, + P extends EntityCompositeKeyPart, + S extends EntityCompositeKeyPart | undefined > { - partitionKey: EntityKeyReference; - sortKey?: EntityKeyReference; - schema: ZodMappedSchema; + attributes: Attr | z.ZodObject; + partition: P; + sort?: S; } export function entity< - E extends EntityValue, - P extends EntityKeyField, - S extends EntityKeyField | undefined ->(name: string, options: EntityOptions): Entity { + Attr extends EntityAttributes, + const P extends EntityCompositeKeyPart, + const S extends EntityCompositeKeyPart | undefined +>(name: string, options: EntityOptions): Entity { if (entities().has(name)) { throw new Error(`entity with name '${name}' already exists`); } @@ -380,16 +430,19 @@ export function entity< /** * Used to maintain a limited number of streams on the entity. */ - const streams: EntityStream>[] = []; + const streams: EntityStream[] = []; - const entity: Entity = { + const entity: Entity = { // @ts-ignore __entityBrand: undefined, kind: "Entity", name, - partitionKey: options.partitionKey, - sortKey: options.sortKey, - schema: options.schema, + partition: options.partition, + sort: options.sort, + attributes: + options.attributes instanceof z.ZodObject + ? options.attributes + : z.object(options.attributes), streams, get: (...args) => { return getEventualCallHook().registerEventualCall( @@ -399,7 +452,9 @@ export function entity< params: args, }), async () => { - return getEntityHook().get(name, ...args); + return getEntityHook().get(name, ...args) as Promise< + z.infer> + >; } ); }, @@ -456,22 +511,22 @@ export function entity< }, stream: ( ...args: - | [name: string, handler: EntityStreamHandler>] + | [name: string, handler: EntityStreamHandler] | [ name: string, - options: EntityStreamOptions, - handler: EntityStreamHandler> + options: EntityStreamOptions, + handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - handler: EntityStreamHandler> + handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - options: EntityStreamOptions, - handler: EntityStreamHandler> + options: EntityStreamOptions, + handler: EntityStreamHandler ] ) => { const [sourceLocation, streamName, options, handler] = @@ -481,13 +536,18 @@ export function entity< ? args : isSourceLocation(args[0]) && typeof args[1] === "string" ? [args[0], args[1] as string, , args[2]] - : [, args[0] as string, args[1] as EntityStreamOptions, args[2]]; + : [ + , + args[0] as string, + args[1] as EntityStreamOptions, + args[2], + ]; if (streams.length > 1) { throw new Error("Only two streams are allowed per entity."); } - const entityStream: EntityStream> = { + const entityStream: EntityStream = { kind: "EntityStream", handler, name: streamName, @@ -507,27 +567,35 @@ export function entity< return entity; } -export function entityStream( +export function entityStream< + Attr extends EntityAttributes, + const P extends EntityCompositeKeyPart, + const S extends EntityCompositeKeyPart | undefined +>( ...args: - | [name: string, entity: E, handler: EntityStreamHandler] | [ name: string, - entity: E, - options: EntityStreamOptions, - handler: EntityStreamHandler + entity: Entity, + handler: EntityStreamHandler + ] + | [ + name: string, + entity: Entity, + options: EntityStreamOptions, + handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - entity: E, - handler: EntityStreamHandler + entity: Entity, + handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - entity: E, - options: EntityStreamOptions, - handler: EntityStreamHandler + entity: Entity, + options: EntityStreamOptions, + handler: EntityStreamHandler ] ) { const [sourceLocation, name, entity, options, handler] = @@ -536,12 +604,12 @@ export function entityStream( : args.length === 5 ? args : isSourceLocation(args[0]) - ? [args[0], args[1] as string, args[2] as E, , args[3]] + ? [args[0], args[1] as string, args[2] as Entity, , args[3]] : [ , args[0] as string, - args[1] as E, - args[2] as EntityStreamOptions, + args[1] as Entity, + args[2] as EntityStreamOptions, args[3], ]; diff --git a/packages/@eventual/core/src/internal/calls.ts b/packages/@eventual/core/src/internal/calls.ts index cf657b78c..5b09f934f 100644 --- a/packages/@eventual/core/src/internal/calls.ts +++ b/packages/@eventual/core/src/internal/calls.ts @@ -11,12 +11,12 @@ import type { SignalTarget } from "./signal.js"; export type EventualCall = | AwaitTimerCall | BucketCall + | ChildWorkflowCall | ConditionCall + | EmitEventsCall | EntityCall - | ChildWorkflowCall | ExpectSignalCall | InvokeTransactionCall - | EmitEventsCall | RegisterSignalHandlerCall | SendSignalCall | TaskCall; diff --git a/packages/@eventual/core/src/internal/entity-hook.ts b/packages/@eventual/core/src/internal/entity-hook.ts index 68588bb39..8b9e8e85f 100644 --- a/packages/@eventual/core/src/internal/entity-hook.ts +++ b/packages/@eventual/core/src/internal/entity-hook.ts @@ -1,4 +1,3 @@ -import type { z } from "zod"; import type { AnyEntity, Entity, EntityTransactItem } from "../entity.js"; declare global { @@ -6,16 +5,11 @@ declare global { var eventualEntityHook: EntityHook | undefined; } -export interface EntityDefinition { - name: string; - schema: z.Schema; -} - export type EntityMethod = Exclude< { [k in keyof AnyEntity]: [AnyEntity[k]] extends [Function] ? k : never; }[keyof AnyEntity], - "partitionKey" | "sortKey" | "stream" | "__entityBrand" | undefined + "partition" | "sort" | "stream" | undefined >; /** diff --git a/packages/@eventual/core/src/internal/service-spec.ts b/packages/@eventual/core/src/internal/service-spec.ts index 2f93f5c27..dd467fcd4 100644 --- a/packages/@eventual/core/src/internal/service-spec.ts +++ b/packages/@eventual/core/src/internal/service-spec.ts @@ -8,6 +8,11 @@ import type { SubscriptionRuntimeProps, } from "../subscription.js"; import type { TaskSpec } from "./task.js"; +import { + EntityAttributes, + EntityCompositeKeyPart, + EntityQueryKey, +} from "../entity.js"; /** * Specification for an Eventual application @@ -161,41 +166,26 @@ export interface BucketNotificationHandlerSpec { sourceLocation?: SourceLocation; } -export interface EntityKeyString { - key: Name; - type: "string"; -} - -export interface EntityKeyNumber { - key: Name; - type: "number"; -} - -export interface EntityKeyBinary { - key: Name; - type: "binary"; -} - -export type EntityKeySpec = - | Name - | EntityKeyBinary - | EntityKeyNumber - | EntityKeyString; - export interface EntitySpec { name: string; - partitionKey: EntityKeySpec; - sortKey?: EntityKeySpec; + partition: readonly string[]; + sort?: readonly string[]; /** * An Optional schema for the entity within an entity. */ - schema?: openapi.SchemaObject; + attributes: openapi.SchemaObject; streams: EntityStreamSpec[]; } export type EntityStreamOperation = "insert" | "modify" | "remove"; -export interface EntityStreamOptions extends FunctionRuntimeProps { +export interface EntityStreamOptions< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> extends FunctionRuntimeProps { /** * A list of operations to be send to the stream. * @@ -207,23 +197,21 @@ export interface EntityStreamOptions extends FunctionRuntimeProps { */ includeOld?: boolean; /** - * A subset of namespaces to include in the stream. - * - * If neither `namespaces` or `namespacePrefixes` are provided, all namespaces will be sent. - */ - partitions?: string[]; - /** - * One or more namespace prefixes to match. - * - * If neither `namespaces` or `namespacePrefixes` are provided, all namespaces will be sent. + * One or more key queries that will be included in the stream. */ - partitionPrefixes?: string[]; + queryKeys?: EntityQueryKey[]; } -export interface EntityStreamSpec { +export interface EntityStreamSpec< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> { name: string; entityName: string; - options?: EntityStreamOptions; + options?: EntityStreamOptions; sourceLocation?: SourceLocation; } diff --git a/packages/@eventual/testing/src/environment.ts b/packages/@eventual/testing/src/environment.ts index 58feb1b0e..a2942c587 100644 --- a/packages/@eventual/testing/src/environment.ts +++ b/packages/@eventual/testing/src/environment.ts @@ -410,6 +410,9 @@ export class TestEnvironment extends RuntimeServiceClient { const entity = this.localContainer.entityProvider.getEntity( i.entityName ); + if (!entity) { + return []; + } const streamNames = [...entities().values()] .flatMap((d) => d.streams) .filter((s) => entityStreamMatchesItem(entity, i, s)) diff --git a/packages/@eventual/testing/test/env.test.ts b/packages/@eventual/testing/test/env.test.ts index 5ef67dffd..200a1bf10 100644 --- a/packages/@eventual/testing/test/env.test.ts +++ b/packages/@eventual/testing/test/env.test.ts @@ -1292,14 +1292,14 @@ describe("time", () => { }); const myEntity = entity("testEntity1", { - schema: { n: z.number(), id: z.string() }, - partitionKey: "id", + attributes: { n: z.number(), id: z.string() }, + partition: ["id"], }); const myEntityWithSort = entity("testEntity2", { - schema: { n: z.number(), id: z.string(), part: z.string() }, - partitionKey: "part", - sortKey: "id", + attributes: { n: z.number(), id: z.string(), part: z.string() }, + partition: ["part"], + sort: ["id"], }); describe("entity", () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c55d2cb68..6ff8a0d08 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -180,7 +180,7 @@ importers: version: link:../../packages/@eventual/aws-cdk '@serverless-stack/cli': specifier: ^1.18.4 - version: 1.18.4(constructs@10.1.154) + version: 1.18.4(constructs@10.2.17) '@serverless-stack/core': specifier: ^1.18.4 version: 1.18.4 @@ -192,7 +192,7 @@ importers: version: 1.0.1 aws-cdk-lib: specifier: 2.50.0 - version: 2.50.0(constructs@10.1.154) + version: 2.50.0(constructs@10.2.17) chalk: specifier: ^5.2.0 version: 5.2.0 @@ -993,6 +993,17 @@ packages: constructs: 10.1.154 dev: true + /@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.2.17): + resolution: {integrity: sha512-dttWDqy+nTg/fD9y0egvj7/zdnOVEo0qyGsep1RV+p16R3F4ObMKyPVIg15fz57tK//Gp/i1QgXsZaSqbcWHOg==} + engines: {node: '>= 14.15.0'} + peerDependencies: + aws-cdk-lib: ^2.50.0 + constructs: ^10.0.0 + dependencies: + aws-cdk-lib: 2.50.0(constructs@10.2.17) + constructs: 10.2.17 + dev: true + /@aws-cdk/aws-apigatewayv2-authorizers-alpha@2.50.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.50.0-alpha.0)(aws-cdk-lib@2.50.0)(constructs@10.1.154): resolution: {integrity: sha512-lMXnSpUSOYtCxoAxauNkGJZLsKMonHgd9rzlFUK2zxE7aC1lVwb4qYX4X9WJdvIExkFOHSZQzOTKM6SZqusssw==} engines: {node: '>= 14.15.0'} @@ -5201,7 +5212,7 @@ packages: resolution: {integrity: sha512-QyKIWEnKQFnYu2ey+SAAm1A5xjzJLJJj3bhIZd3QKyXKKjaJ0hlxam/OsWSltxTNbcyH1jRJjC6Cxv31usv0Ag==} engines: {node: ^14.17.0 || >=16.0.0} dependencies: - chalk: 4.1.2 + chalk: 4.1.0 execa: 5.0.0 strong-log-transformer: 2.1.0 dev: true @@ -5369,7 +5380,7 @@ packages: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.0 + semver: 7.3.8 dev: true /@npmcli/fs@2.1.2: @@ -5816,15 +5827,15 @@ packages: - supports-color dev: true - /@serverless-stack/cli@1.18.4(constructs@10.1.154): + /@serverless-stack/cli@1.18.4(constructs@10.2.17): resolution: {integrity: sha512-eEG3brlbF/ptIo/s69Hcrn185CVkLWHpmtOmere7+lMPkmy1vxNhWIUuic+LNG0yweK+sg4uMVipREyvwblNDQ==} hasBin: true dependencies: - '@aws-cdk/aws-apigatewayv2-alpha': 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.1.154) + '@aws-cdk/aws-apigatewayv2-alpha': 2.50.0-alpha.0(aws-cdk-lib@2.50.0)(constructs@10.2.17) '@serverless-stack/core': 1.18.4 '@serverless-stack/resources': 1.18.4 aws-cdk: 2.50.0 - aws-cdk-lib: 2.50.0(constructs@10.1.154) + aws-cdk-lib: 2.50.0(constructs@10.2.17) aws-sdk: 2.1314.0 body-parser: 1.20.1 chalk: 4.1.2 @@ -7082,6 +7093,34 @@ packages: - semver - yaml + /aws-cdk-lib@2.50.0(constructs@10.2.17): + resolution: {integrity: sha512-deDbZTI7oyu3rqUyqjwhP6tnUO8MD70lE98yR65xiYty4yXBpsWKbeH3s1wNLpLAWS3hWJYyMtjZ4ZfC35NtVg==} + engines: {node: '>= 14.15.0'} + peerDependencies: + constructs: ^10.0.0 + dependencies: + '@balena/dockerignore': 1.0.2 + case: 1.6.3 + constructs: 10.2.17 + fs-extra: 9.1.0 + ignore: 5.2.4 + jsonschema: 1.4.1 + minimatch: 3.1.2 + punycode: 2.3.0 + semver: 7.3.8 + yaml: 1.10.2 + dev: true + bundledDependencies: + - '@balena/dockerignore' + - case + - fs-extra + - ignore + - jsonschema + - minimatch + - punycode + - semver + - yaml + /aws-cdk@2.50.0: resolution: {integrity: sha512-55vmKTf2DZRqioumVfXn+S0H9oAbpRK3HFHY8EjZ5ykR5tq2+XiMWEZkYduX2HJhVAeHJJIS6h+Okk3smZjeqw==} engines: {node: '>= 14.15.0'} @@ -7356,7 +7395,7 @@ packages: resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} dependencies: base64-js: 1.5.1 - ieee754: 1.2.1 + ieee754: 1.1.13 isarray: 1.0.0 /buffer@5.7.1: @@ -7811,7 +7850,7 @@ packages: json-schema-typed: 7.0.3 onetime: 5.1.2 pkg-up: 3.1.0 - semver: 7.5.0 + semver: 7.3.8 dev: true /config-chain@1.1.12: @@ -7829,6 +7868,11 @@ packages: resolution: {integrity: sha512-JStQT84+NhsfamESRExZoGzpq/f/gpq9xpzgtQNOzungs42Gy8kxjfU378MnVoRqwCHwk0vLN37HZjgH5tJo2A==} engines: {node: '>= 14.17.0'} + /constructs@10.2.17: + resolution: {integrity: sha512-D3a/+iKMkBj8Elf1NIl1jBNIrK07Pg7ICBe5QEgtEKYEZOuHQvlCK9PK1f87SQ+GhtOnwSyvP+q+Pq5zBLu5kg==} + engines: {node: '>= 14.17.0'} + dev: true + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -8133,7 +8177,7 @@ packages: engines: {node: '>=10'} dependencies: globby: 11.1.0 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 is-glob: 4.0.3 is-path-cwd: 2.2.0 is-path-inside: 3.0.3 @@ -9742,7 +9786,7 @@ packages: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -9761,7 +9805,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 @@ -9996,7 +10040,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.0.5 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -10069,6 +10113,7 @@ packages: /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==} @@ -10797,7 +10842,7 @@ packages: async: 3.2.4 chalk: 4.1.2 filelist: 1.0.4 - minimatch: 3.1.2 + minimatch: 3.0.5 dev: true /jest-changed-files@29.4.2: @@ -11662,7 +11707,7 @@ packages: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -11672,7 +11717,7 @@ packages: resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 parse-json: 5.2.0 strip-bom: 4.0.0 type-fest: 0.6.0 @@ -12235,7 +12280,7 @@ packages: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.1.2 + minimatch: 3.0.5 dev: true /mute-stream@0.0.8: @@ -12321,7 +12366,7 @@ packages: nopt: 5.0.0 npmlog: 4.1.2 rimraf: 3.0.2 - semver: 7.5.0 + semver: 7.3.8 tar: 6.1.14 which: 2.0.2 transitivePeerDependencies: @@ -12336,7 +12381,7 @@ packages: dependencies: env-paths: 2.2.1 glob: 7.2.3 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 make-fetch-happen: 10.2.1 nopt: 6.0.0 npmlog: 6.0.2 @@ -15255,7 +15300,7 @@ packages: /write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 imurmurhash: 0.1.4 signal-exit: 3.0.7 dev: true @@ -15289,7 +15334,7 @@ packages: engines: {node: '>=6'} dependencies: detect-indent: 5.0.0 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 make-dir: 2.1.0 pify: 4.0.1 sort-keys: 2.0.0 From dad6a89e6f8e76dec3523111539d281785a719d2 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Wed, 10 May 2023 16:51:39 -0500 Subject: [PATCH 08/21] tests pass --- apps/tests/aws-runtime/test/test-service.ts | 4 +- .../@eventual/aws-cdk/src/entity-service.ts | 49 ++++++----- .../src/handlers/entity-stream-worker.ts | 56 ++++++++++-- .../aws-runtime/src/stores/entity-store.ts | 87 +++++++++++++++---- .../src/local/stores/entity-store.ts | 31 +++---- .../core-runtime/src/stores/entity-store.ts | 65 ++++++++++---- packages/@eventual/core/src/entity.ts | 4 - 7 files changed, 210 insertions(+), 86 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 1d9c185e2..3362fdeb2 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -576,6 +576,7 @@ export const counterNamespaceWatcher = counter.stream( "counterNamespaceWatch", { queryKeys: [{ namespace: "different" }] }, async (item) => { + console.log(item); if (item.operation === "insert") { const value = await counter.get(item.key); await counter.set({ @@ -583,6 +584,7 @@ export const counterNamespaceWatcher = counter.stream( id: value!.id, n: (value?.n ?? 0) + 1, }); + console.log("send signal to", value!.id); await entitySignal.sendSignal(value!.id); } } @@ -647,7 +649,7 @@ export const entityWorkflow = workflow( } ); -export const check = entity("check3", { +export const check = entity("check", { attributes: { n: z.number(), id: z.string() }, partition: ["id"], }); diff --git a/packages/@eventual/aws-cdk/src/entity-service.ts b/packages/@eventual/aws-cdk/src/entity-service.ts index a7a776a80..4b1fbceb7 100644 --- a/packages/@eventual/aws-cdk/src/entity-service.ts +++ b/packages/@eventual/aws-cdk/src/entity-service.ts @@ -299,27 +299,32 @@ export class EntityStream extends Construct implements EventualResource { }; }); - const filters = { - ...(props.stream.spec.options?.operations - ? { - eventName: FilterRule.or( - ...(props.stream.spec.options?.operations?.map((op) => - op.toUpperCase() - ) ?? []) - ), - } - : undefined), - ...(queryPatterns.length > 0 - ? { - dynamodb: { - Keys: { - // https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns-content-based-filtering.html#eb-filtering-complex-example-or - $or: queryPatterns.map(keyMatcher), + const eventNameFilter = props.stream.spec.options?.operations + ? { + eventName: FilterRule.or( + ...(props.stream.spec.options?.operations?.map((op) => + op.toUpperCase() + ) ?? []) + ), + } + : undefined; + + // create a filter expression for each combination of key filter when present + // Would prefer to use $or within a single expression, but it seems it doesn't work with event source maps (yet?) + // TODO: can reduce the number of unique expressions by merging single field key queries togethers (all partition or all sort) + const filters = + !eventNameFilter && queryPatterns.length === 0 + ? [] + : eventNameFilter && queryPatterns.length === 0 + ? [FilterCriteria.filter(eventNameFilter)] + : queryPatterns.map((q) => + FilterCriteria.filter({ + ...eventNameFilter, + dynamodb: { + Keys: keyMatcher(q), }, - }, - } - : undefined), - }; + }) + ); this.handler = new ServiceFunction(this, "Handler", { build: props.serviceProps.build, @@ -337,9 +342,7 @@ export class EntityStream extends Construct implements EventualResource { new DynamoEventSource(props.table, { startingPosition: StartingPosition.TRIM_HORIZON, maxBatchingWindow: Duration.seconds(0), - ...(Object.keys(filters).length > 0 - ? { filters: [FilterCriteria.filter(filters)] } - : {}), + ...(filters.length > 0 ? { filters } : {}), }), ], }, diff --git a/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts b/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts index 63d4e2ae9..7462a326c 100644 --- a/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts +++ b/packages/@eventual/aws-runtime/src/handlers/entity-stream-worker.ts @@ -6,8 +6,11 @@ import type { AttributeValue } from "@aws-sdk/client-dynamodb"; import { unmarshall } from "@aws-sdk/util-dynamodb"; import type { EntityStreamItem } from "@eventual/core"; import { + GlobalEntityProvider, + convertNormalizedEntityKeyToMap, createEntityStreamWorker, getLazy, + normalizeCompositeKey, promiseAllSettledPartitioned, } from "@eventual/core-runtime"; import type { EntityStreamOperation } from "@eventual/core/internal"; @@ -23,7 +26,9 @@ import { serviceName, serviceUrl, } from "../env.js"; -import type { EntityEntityRecord } from "../stores/entity-store.js"; +import { EntityEntityRecord } from "../stores/entity-store.js"; + +const entityProvider = new GlobalEntityProvider(); const worker = createEntityStreamWorker({ bucketStore: createBucketStore(), @@ -42,7 +47,6 @@ export default (async (event) => { records, async (record) => { try { - const keys = record.dynamodb?.Keys; const operation = record.eventName?.toLowerCase() as | EntityStreamOperation | undefined; @@ -53,20 +57,54 @@ export default (async (event) => { | Partial | undefined; - const { __version: newVersion = undefined, ...newValue } = newItem + const _entityName = getLazy(entityName); + const entity = entityProvider.getEntity(_entityName); + + if (!entity) { + throw new Error(`Entity ${_entityName} was not found`); + } + + const newValue = newItem ? unmarshall(newItem as Record) - : {}; + : undefined; + const newVersion = newValue?.__version; - const { __version: oldVersion = undefined, ...oldValue } = oldItem + const oldValue = oldItem ? unmarshall(oldItem as Record) - : {}; + : undefined; + const oldVersion = oldValue?.__version; + + const bestValue = newValue ?? oldValue; + if (!bestValue) { + throw new Error( + "Expected at least one of old value or new value in the stream event." + ); + } + + const normalizedKey = normalizeCompositeKey(entity, bestValue); + const keyMap = convertNormalizedEntityKeyToMap(normalizedKey); + + if (newValue) { + delete newValue[EntityEntityRecord.VERSION_FIELD]; + delete newValue[normalizedKey.partition.keyAttribute]; + if (normalizedKey.sort) { + delete newValue[normalizedKey.sort.keyAttribute]; + } + } + if (oldValue) { + delete oldValue[EntityEntityRecord.VERSION_FIELD]; + delete oldValue[normalizedKey.partition.keyAttribute]; + if (normalizedKey.sort) { + delete oldValue[normalizedKey.sort.keyAttribute]; + } + } - if (keys && operation) { + if (operation) { const item: EntityStreamItem = { entityName: getLazy(entityName), streamName: getLazy(entityStreamName), - key: unmarshall(keys as Record), - newValue, + key: keyMap, + newValue: newValue as any, newVersion, operation, oldValue, diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 8b6f4944c..6d921a804 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -31,10 +31,11 @@ import { UnexpectedVersion, } from "@eventual/core"; import { - convertNormalizedEntityKeyToMap, EntityProvider, EntityStore, getLazy, + isCompleteKey, + isCompleteKeyPart, LazyValue, normalizeCompositeKey, NormalizedEntityKey, @@ -72,6 +73,11 @@ export class AWSEntityStore implements EntityStore { ): Promise | undefined> { const entity = this.getEntity(entityName); const normalizedCompositeKey = normalizeCompositeKey(entity, key); + + if (!isCompleteKey(normalizedCompositeKey)) { + throw new Error("Key cannot be partial for get or getWithMetadata."); + } + const item = await this.props.dynamo.send( new GetItemCommand({ Key: this.entityKey(normalizedCompositeKey), @@ -158,8 +164,14 @@ export class AWSEntityStore implements EntityStore { ): Delete { const entity = typeof _entity === "string" ? this.getEntity(_entity) : _entity; + const normalizedKey = normalizeCompositeKey(entity, key); + + if (!isCompleteKey(normalizedKey)) { + throw new Error("Key cannot be partial for delete."); + } + return { - Key: this.entityKey(normalizeCompositeKey(entity, key)), + Key: this.entityKey(normalizedKey), ConditionExpression: options?.expectedVersion !== undefined ? "#__version=:expectedVersion" @@ -232,7 +244,7 @@ export class AWSEntityStore implements EntityStore { normalizeCompositeKey(entity, i.operation.key) ), ExpressionAttributeNames: { - "#version": "version", + "#version": EntityEntityRecord.VERSION_FIELD, }, ExpressionAttributeValues: i.operation.version !== undefined @@ -272,8 +284,13 @@ export class AWSEntityStore implements EntityStore { ): Update { const entity = typeof _entity === "string" ? this.getEntity(_entity) : _entity; + const normalizedKey = normalizeCompositeKey(entity, value); + + if (!isCompleteKey(normalizedKey)) { + throw new Error("Key cannot be partial for set."); + } + const valueRecord = marshall(value, { removeUndefinedValues: true }); - const normalizedKey = normalizeCompositeKey(entity, valueRecord); // if the key attributes are not computed and are in the original value, remove them from the set expression delete valueRecord[normalizedKey.partition.keyAttribute]; @@ -285,12 +302,20 @@ export class AWSEntityStore implements EntityStore { Key: this.entityKey(normalizedKey), UpdateExpression: [ "SET #__version=if_not_exists(#__version, :__startingVersion) + :__versionIncrement", - ...Object.keys(valueRecord).map((key) => `#${key}=:${key}`), + ...Object.keys(valueRecord).map( + (key) => + `${formatAttributeNameMapKey(key)}=${formatAttributeValueMapKey( + key + )}` + ), ].join(","), ExpressionAttributeNames: { "#__version": "__version", ...Object.fromEntries( - Object.keys(valueRecord).map((key) => [`#${key}`, key]) + Object.keys(valueRecord).map((key) => [ + formatAttributeNameMapKey(key), + key, + ]) ), }, ExpressionAttributeValues: { @@ -304,7 +329,10 @@ export class AWSEntityStore implements EntityStore { N: options?.incrementVersion === false ? "0" : "1", }, ...Object.fromEntries( - Object.entries(valueRecord).map(([key, value]) => [`:${key}`, value]) + Object.entries(valueRecord).map(([key, value]) => [ + formatAttributeValueMapKey(key), + value, + ]) ), }, ConditionExpression: @@ -326,8 +354,13 @@ export class AWSEntityStore implements EntityStore { } private entityKey(key: NormalizedEntityKey) { - const keyMap = convertNormalizedEntityKeyToMap(key); - const marshalledKey = marshall(keyMap, { removeUndefinedValues: true }); + const marshalledKey = marshall( + { + [key.partition.keyAttribute]: key.partition.keyValue, + ...(key.sort ? { [key.sort.keyAttribute]: key.sort.keyValue } : {}), + }, + { removeUndefinedValues: true } + ); return marshalledKey; } @@ -347,7 +380,7 @@ export class AWSEntityStore implements EntityStore { ...(normalizedKey.sort ? [normalizedKey.sort.keyAttribute] : []), ]); - if (normalizedKey.partition.partialValue) { + if (!isCompleteKeyPart(normalizedKey.partition)) { throw new Error("Entity partition key cannot be partial for query"); } @@ -367,9 +400,19 @@ export class AWSEntityStore implements EntityStore { TableName: this.tableName(entityName), KeyConditionExpression: normalizedKey.sort ? normalizedKey.sort.partialValue - ? `#${normalizedKey.partition.keyAttribute}=:pk AND begins_with(#${normalizedKey.sort.keyAttribute}, :sk)` - : `#${normalizedKey.partition.keyAttribute}=:pk AND #${normalizedKey.sort.keyAttribute}=:sk` - : `#${normalizedKey.partition.keyAttribute}=:pk`, + ? `${formatAttributeNameMapKey( + normalizedKey.partition.keyAttribute + )}=:pk AND begins_with(${formatAttributeNameMapKey( + normalizedKey.sort.keyAttribute + )}, :sk)` + : `${formatAttributeNameMapKey( + normalizedKey.partition.keyAttribute + )}=:pk AND ${formatAttributeNameMapKey( + normalizedKey.sort.keyAttribute + )}=:sk` + : `${formatAttributeNameMapKey( + normalizedKey.partition.keyAttribute + )}=:pk`, ExpressionAttributeValues: { ":pk": typeof normalizedKey.partition.keyValue === "number" @@ -386,9 +429,11 @@ export class AWSEntityStore implements EntityStore { : {}), }, ExpressionAttributeNames: Object.fromEntries( - [...allFields]?.map((f) => [`#${f}`, f]) + [...allFields]?.map((f) => [formatAttributeNameMapKey(f), f]) ), - ProjectionExpression: fields?.map((f) => `#${f}`).join(","), + ProjectionExpression: fields + ?.map((f) => formatAttributeNameMapKey(f)) + .join(","), } ); } @@ -406,3 +451,15 @@ export interface EntityEntityRecord export const EntityEntityRecord = { VERSION_FIELD: "__version", }; + +function formatAttributeNameMapKey(key: string) { + return formatAttributeMapKey(key, "#"); +} + +function formatAttributeValueMapKey(key: string) { + return formatAttributeMapKey(key, ":"); +} + +function formatAttributeMapKey(key: string, prefix: string) { + return `${prefix}${key.replaceAll(/[|.\- ]/g, "_")}`; +} diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index a7c04d55f..ca22387d6 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -17,6 +17,8 @@ import { EntityProvider } from "../../providers/entity-provider.js"; import { convertNormalizedEntityKeyToMap, EntityStore, + isCompleteKey, + isCompleteKeyPart, normalizeCompositeKey, } from "../../stores/entity-store.js"; import { deserializeCompositeKey, serializeCompositeKey } from "../../utils.js"; @@ -45,20 +47,17 @@ export class LocalEntityStore implements EntityStore { key: AnyEntityKey ): Promise | undefined> { const entity = this.getEntity(entityName); - const { partition, sort } = normalizeCompositeKey(entity, key); - if (partition.partialValue) { + const normalizedKey = normalizeCompositeKey(entity, key); + if (!isCompleteKey(normalizedKey)) { throw new Error( "Entity key cannot be partial for get or getWithMetadata" ); } - if (sort && sort.partialValue) { - throw new Error("Entity sort key cannot be partial for query"); - } - - return this.getPartitionMap(entityName, partition.keyValue).get( - sort?.keyValue ?? "default" - ); + return this.getPartitionMap( + entityName, + normalizedKey.partition.keyValue + ).get(normalizedKey.sort?.keyValue ?? "default"); } public async set( @@ -123,12 +122,8 @@ export class LocalEntityStore implements EntityStore { } } - if (normalizedKey.partition.partialValue) { - throw new Error("Entity partition key cannot be partial for delete"); - } - - if (normalizedKey.sort && normalizedKey.sort.partialValue) { - throw new Error("Entity sort key cannot be partial for query"); + if (!isCompleteKey(normalizedKey)) { + throw new Error("Entity key cannot be partial for delete"); } this.getPartitionMap(entityName, normalizedKey.partition.keyValue).delete( @@ -255,9 +250,11 @@ export class LocalEntityStore implements EntityStore { ) { const entity = this.getEntity(entityName); const normalizedKey = normalizeCompositeKey(entity, queryKey); - if (normalizedKey.partition.partialValue) { - throw new Error("Partition key part must not be partial."); + + if (!isCompleteKeyPart(normalizedKey.partition)) { + throw new Error("Entity partition key cannot be partial for query"); } + const partition = this.getPartitionMap( entityName, normalizedKey.partition.keyValue diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 87af6108b..3c8a85cf6 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -23,22 +23,51 @@ export interface NormalizedEntityKeyDefinition { sort?: NormalizedEntityKeyDefinitionPart; } -export type NormalizedEntityKeyPart = NormalizedEntityKeyDefinitionPart & { +export interface NormalizedEntityKeyPartBase + extends NormalizedEntityKeyDefinitionPart { parts: { field: string; value: EntityKeyType }[]; -} & ( - | { - keyValue?: string | number; - partialValue: true; - } - | { - keyValue: string | number; - partialValue: false; - } +} + +export type NormalizedEntityKeyPart = + | NormalizedEntityKeyPartialPart + | NormalizedEntityKeyCompletePart; + +export interface NormalizedEntityKeyCompletePart + extends NormalizedEntityKeyPartBase { + keyValue: string | number; + partialValue: false; +} + +export interface NormalizedEntityKeyPartialPart + extends NormalizedEntityKeyPartBase { + keyValue?: string | number; + partialValue: true; +} + +export function isCompleteKeyPart( + key: NormalizedEntityKeyPart +): key is NormalizedEntityKeyCompletePart { + return !key.partialValue; +} + +export function isCompleteKey( + key: NormalizedEntityKey +): key is NormalizedEntityKey< + NormalizedEntityKeyCompletePart, + NormalizedEntityKeyCompletePart +> { + return ( + isCompleteKeyPart(key.partition) && + (!key.sort || isCompleteKeyPart(key.sort)) ); +} -export interface NormalizedEntityKey { - partition: NormalizedEntityKeyPart; - sort?: NormalizedEntityKeyPart; +export interface NormalizedEntityKey< + Partition extends NormalizedEntityKeyPart = NormalizedEntityKeyPart, + Sort extends NormalizedEntityKeyPart = NormalizedEntityKeyPart +> { + partition: Partition; + sort?: Sort; } /** @@ -99,8 +128,7 @@ function formatNormalizedPart( keyAttribute: keyPart.keyAttribute, keyValue: (keyPart.type === "number" ? parts[0]?.value - : parts - .slice(0, missingValueIndex) + : (missingValueIndex === -1 ? parts : parts.slice(0, missingValueIndex)) .map((p) => p.value) .join("#")) as any, partialValue: missingValueIndex !== -1, @@ -172,7 +200,7 @@ export function normalizeEntitySpecKeyDefinition( // the value will be a number if there is a single part to the composite key part and the value is already a number. // else a string will be formatted const type = - tail.length === 0 || + tail.length === 0 && (entityZodShape.properties?.[head] as openapi.SchemaObject).type === "number" ? "number" @@ -191,10 +219,13 @@ export function normalizeEntitySpecKeyDefinition( export function convertNormalizedEntityKeyToMap( key: NormalizedEntityKey ): EntityCompositeKey { - return Object.fromEntries([ + console.log("input key", JSON.stringify(key)); + const generatedKey = Object.fromEntries([ ...key.partition.parts.map(({ field, value }) => [field, value]), ...(key.sort ? key.sort.parts.map(({ field, value }) => [field, value]) : []), ]); + console.log("generated key", JSON.stringify(generatedKey)); + return generatedKey; } diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 1dedb77e9..8ff1ef6f6 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -214,10 +214,6 @@ export type EntityCompositeKey< : // eslint-disable-next-line {}); -// const T = { n: z.string(), m: z.string(), x: z.number() }; -// type X = EntityKey; -// const x: X = ["hello", "hello", 1]; - export type EntityKeyArray< E extends EntityAttributes, Fields extends readonly (keyof E)[] From 5e8d5e0bcf5c972f5cc7e91225e6e0501e1e0878 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Wed, 10 May 2023 17:40:10 -0500 Subject: [PATCH 09/21] add tests for sort keys --- apps/tests/aws-runtime/test/test-service.ts | 37 ++++++++++++++++++- apps/tests/aws-runtime/test/tester.test.ts | 9 ++++- .../aws-runtime/src/stores/entity-store.ts | 36 +++++++++--------- packages/@eventual/core/src/entity.ts | 2 +- 4 files changed, 64 insertions(+), 20 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 3362fdeb2..ad42f50d3 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -555,6 +555,17 @@ export const counter = entity("counter4", { }, partition: ["namespace", "id"], }); + +export const counterCollection = entity("counter-collection", { + attributes: { + id: z.string(), + counterNumber: z.number(), + n: z.number(), + }, + partition: ["id"], + sort: ["counterNumber"], +}); + const entityEvent = event<{ id: string }>("entityEvent"); const entitySignal = signal("entitySignal"); const entitySignal2 = signal<{ n: number }>("entitySignal2"); @@ -645,7 +656,31 @@ export const entityWorkflow = workflow( await counter.delete(["default", id]); await counter.query(["default", id]); // this signal will contain the final value after deletion - return await entitySignal2.expectSignal(); + const result1 = await entitySignal2.expectSignal(); + + /** + * Testing sort keys and query + */ + + await Promise.all([ + counterCollection.set({ id, counterNumber: 1, n: 1 }), + counterCollection.set({ id, counterNumber: 2, n: 1 }), + counterCollection.set({ id, counterNumber: 3, n: 1 }), + ]); + + const counter1 = await counterCollection.get({ id, counterNumber: 1 }); + await counterCollection.set({ + id, + counterNumber: 2, + n: (counter1?.n ?? 0) + 1, + }); + + const counters = await counterCollection.query({ id }); + + return [ + result1, + counters.entries?.map((c) => [c.entity.counterNumber, c.entity.n]), + ]; } ); diff --git a/apps/tests/aws-runtime/test/tester.test.ts b/apps/tests/aws-runtime/test/tester.test.ts index f94fa3027..b7258514e 100644 --- a/apps/tests/aws-runtime/test/tester.test.ts +++ b/apps/tests/aws-runtime/test/tester.test.ts @@ -119,7 +119,14 @@ eventualRuntimeTestHarness( testCompletion("awsSdkCalls", createAndDestroyWorkflow, "done"); - testCompletion("ent", entityWorkflow, { n: 7 }); + testCompletion("ent", entityWorkflow, [ + { n: 7 }, + [ + [1, 1], + [2, 2], + [3, 1], + ], + ]); testCompletion("transaction", transactionWorkflow, ([one, two, three]) => { expect(one).not.toBeUndefined(); diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 6d921a804..1039e0834 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -377,7 +377,9 @@ export class AWSEntityStore implements EntityStore { const allFields = new Set([ ...(fields ?? []), normalizedKey.partition.keyAttribute, - ...(normalizedKey.sort ? [normalizedKey.sort.keyAttribute] : []), + ...(normalizedKey.sort && normalizedKey.sort.keyValue !== undefined + ? [normalizedKey.sort.keyAttribute] + : []), ]); if (!isCompleteKeyPart(normalizedKey.partition)) { @@ -398,32 +400,32 @@ export class AWSEntityStore implements EntityStore { }, { TableName: this.tableName(entityName), - KeyConditionExpression: normalizedKey.sort - ? normalizedKey.sort.partialValue - ? `${formatAttributeNameMapKey( - normalizedKey.partition.keyAttribute - )}=:pk AND begins_with(${formatAttributeNameMapKey( - normalizedKey.sort.keyAttribute - )}, :sk)` + KeyConditionExpression: + normalizedKey.sort && normalizedKey.sort.keyValue !== undefined + ? normalizedKey.sort.partialValue + ? `${formatAttributeNameMapKey( + normalizedKey.partition.keyAttribute + )}=:pk AND begins_with(${formatAttributeNameMapKey( + normalizedKey.sort.keyAttribute + )}, :sk)` + : `${formatAttributeNameMapKey( + normalizedKey.partition.keyAttribute + )}=:pk AND ${formatAttributeNameMapKey( + normalizedKey.sort.keyAttribute + )}=:sk` : `${formatAttributeNameMapKey( normalizedKey.partition.keyAttribute - )}=:pk AND ${formatAttributeNameMapKey( - normalizedKey.sort.keyAttribute - )}=:sk` - : `${formatAttributeNameMapKey( - normalizedKey.partition.keyAttribute - )}=:pk`, + )}=:pk`, ExpressionAttributeValues: { ":pk": typeof normalizedKey.partition.keyValue === "number" ? { N: normalizedKey.partition.keyValue.toString() } : { S: normalizedKey.partition.keyValue }, - ...(normalizedKey.sort + ...(normalizedKey.sort && normalizedKey.sort.keyValue !== undefined ? { ":sk": - normalizedKey.sort.keyValue === undefined || typeof normalizedKey.sort.keyValue === "string" - ? { S: normalizedKey.sort.keyValue ?? "" } + ? { S: normalizedKey.sort.keyValue } : { N: normalizedKey.sort.keyValue.toString() }, } : {}), diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 8ff1ef6f6..1a31a4309 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -16,7 +16,7 @@ import { import type { ServiceContext } from "./service.js"; export interface EntityQueryResultEntry { - entity: E; + entity: z.infer>; version: number; } From 8bb2e88c444789247e7f319cd336f35f11bce4a8 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Wed, 10 May 2023 17:55:55 -0500 Subject: [PATCH 10/21] reduce use of zod types --- apps/tests/aws-runtime/test/test-service.ts | 2 +- .../aws-runtime/src/stores/entity-store.ts | 2 +- .../src/local/stores/entity-store.ts | 5 +- packages/@eventual/core/src/entity.ts | 94 ++++++++++--------- 4 files changed, 55 insertions(+), 48 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index ad42f50d3..61a5fd09b 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -679,7 +679,7 @@ export const entityWorkflow = workflow( return [ result1, - counters.entries?.map((c) => [c.entity.counterNumber, c.entity.n]), + counters.entries?.map((c) => [c.value.counterNumber, c.value.n]), ]; } ); diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 1039e0834..6e12e0875 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -199,7 +199,7 @@ export class AWSEntityStore implements EntityStore { return { nextToken: result.nextToken, entries: result.records.map(({ __version, ...r }) => ({ - entity: unmarshall(r), + value: unmarshall(r), version: Number(__version.N), })), }; diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index ca22387d6..984e8b421 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -5,7 +5,6 @@ import { EntityQueryKey, EntityQueryOptions, EntityQueryResult, - EntityQueryResultEntry, EntitySetOptions, EntityTransactItem, EntityWithMetadata, @@ -155,9 +154,9 @@ export class LocalEntityStore implements EntityStore { entries: items?.map( ([, value]) => ({ - entity: value.value, + value: value.value, version: value.version, - } satisfies EntityQueryResultEntry) + } satisfies EntityWithMetadata) ), nextToken, }; diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 1a31a4309..b95cf0ef5 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -15,13 +15,8 @@ import { } from "./internal/service-spec.js"; import type { ServiceContext } from "./service.js"; -export interface EntityQueryResultEntry { - entity: z.infer>; - version: number; -} - -export interface EntityQueryResult { - entries?: EntityQueryResultEntry[]; +export interface EntityQueryResult { + entries?: EntityWithMetadata[]; /** * Returned when there are more values than the limit allowed to return. */ @@ -129,7 +124,7 @@ export interface EntityStreamInsertItem< | EntityCompositeKeyPart | undefined > extends EntityStreamItemBase { - newValue: z.infer>; + newValue: Attr; newVersion: number; operation: "insert"; } @@ -142,9 +137,9 @@ export interface EntityStreamModifyItem< | undefined > extends EntityStreamItemBase { operation: "modify"; - newValue: z.infer>; + newValue: Attr; newVersion: number; - oldValue?: z.infer>; + oldValue?: Attr; oldVersion?: number; } @@ -156,7 +151,7 @@ export interface EntityStreamRemoveItem< | undefined > extends EntityStreamItemBase { operation: "remove"; - oldValue?: z.infer>; + oldValue?: Attr; oldVersion?: number; } @@ -177,12 +172,11 @@ export type AnyEntity = Entity< >; export type EntityKeyType = string | number; -export type EntityKeyZodType = z.ZodString | z.ZodNumber; export type EntityKeyField = { [K in keyof E]: K extends string ? // only include fields that extend string or number - z.infer extends EntityKeyType + E[K] extends EntityKeyType ? K : never : never; @@ -206,10 +200,10 @@ export type EntityCompositeKey< Partition extends EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined > = { - [k in Partition[number]]: z.infer; + [k in Partition[number]]: Attr[k]; } & (Sort extends readonly (keyof Attr)[] ? { - [k in Sort[number]]: z.infer; + [k in Sort[number]]: Attr[k]; } : // eslint-disable-next-line {}); @@ -221,9 +215,9 @@ export type EntityKeyArray< infer X extends keyof E, ...infer Rest extends readonly (keyof E)[] ] - ? readonly [z.infer, ...EntityKeyArray] + ? readonly [E[X], ...EntityKeyArray] : Fields extends readonly [infer X extends keyof E] - ? readonly [z.infer] + ? readonly [E[X]] : readonly []; export type EntityKeyTuple< @@ -274,27 +268,48 @@ export type EntityAttributesFromEntity = E extends Entity< : never; export interface EntityWithMetadata { - value: z.infer>; + value: E; version: number; } -export type AttributeNames = - Attr extends z.ZodObject ? keyof A : keyof Attr; - -export type AttributeShape = - Attr extends z.ZodObject - ? { - [k in keyof A]: A[k]; - } - : Attr; +export type EntityBinaryMember = + | ArrayBuffer + | Blob + | Buffer + | DataView + | File + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; + +export type EntityValueMember = + | EntityAttributes + | string + | number + | boolean + | EntityBinaryMember + | Set + | EntityValueMember[]; export type EntityAttributes = { - [attribute in string]: z.ZodType; + [key: string]: EntityValueMember; +}; + +export type EntityZodShape = { + [key in keyof Attr]: z.ZodType; }; -export type EntityZodAttributes = - | z.ZodObject - | EntityAttributes; +export type EntityZodAttributes = + | z.ZodObject> + | EntityZodShape; export interface Entity< Attr extends EntityAttributes, @@ -304,7 +319,7 @@ export interface Entity< kind: "Entity"; partition: P; sort?: S; - attributes: z.ZodObject; + attributes: z.ZodObject>; streams: EntityStream[]; /** * Get a value. @@ -312,9 +327,7 @@ export interface Entity< * * @param key - key or {@link CompositeKey} of the value to retrieve. */ - get( - key: EntityKey - ): Promise> | undefined>; + get(key: EntityKey): Promise; /** * Get a value and metadata like version. * If your values use composite keys, the namespace must be provided. @@ -330,10 +343,7 @@ export interface Entity< * Values with namespaces are considered distinct from value without a namespace or within different namespaces. * Values and keys can only be listed within a single namespace. */ - set( - entity: z.infer>, - options?: EntitySetOptions - ): Promise<{ version: number }>; + set(entity: Attr, options?: EntitySetOptions): Promise<{ version: number }>; /** * Deletes a single entry within an entity and namespace. */ @@ -409,7 +419,7 @@ export interface EntityOptions< P extends EntityCompositeKeyPart, S extends EntityCompositeKeyPart | undefined > { - attributes: Attr | z.ZodObject; + attributes: EntityZodAttributes; partition: P; sort?: S; } @@ -448,9 +458,7 @@ export function entity< params: args, }), async () => { - return getEntityHook().get(name, ...args) as Promise< - z.infer> - >; + return getEntityHook().get(name, ...args) as Promise; } ); }, From e1a879cf6363860ee205fc5e716d957bf4f8c85f Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 07:10:20 -0500 Subject: [PATCH 11/21] improved type names --- .../aws-runtime/src/stores/entity-store.ts | 21 +- .../src/local/stores/entity-store.ts | 11 +- .../core-runtime/src/stores/entity-store.ts | 24 +- .../core-runtime/src/transaction-executor.ts | 10 +- packages/@eventual/core-runtime/src/utils.ts | 4 +- .../test/transaction-executor.test.ts | 12 +- packages/@eventual/core/src/entity.ts | 285 ++++++++++++------ 7 files changed, 245 insertions(+), 122 deletions(-) diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 6e12e0875..92cecd180 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -16,7 +16,7 @@ import { import { marshall, unmarshall } from "@aws-sdk/util-dynamodb"; import { AnyEntity, - AnyEntityKey, + AnyEntityCompositeKey, EntityAttributes, EntityAttributesFromEntity, EntityConsistencyOptions, @@ -38,7 +38,7 @@ import { isCompleteKeyPart, LazyValue, normalizeCompositeKey, - NormalizedEntityKey, + NormalizedEntityCompositeKey, } from "@eventual/core-runtime"; import { assertNever } from "@eventual/core/internal"; import { entityServiceTableName, queryPageWithToken } from "../utils.js"; @@ -63,13 +63,16 @@ export type MarshalledEntityAttributesWithVersion = { export class AWSEntityStore implements EntityStore { constructor(private props: AWSEntityStoreProps) {} - public async get(entityName: string, key: AnyEntityKey): Promise { + public async get( + entityName: string, + key: AnyEntityCompositeKey + ): Promise { return (await this.getWithMetadata(entityName, key))?.value; } public async getWithMetadata( entityName: string, - key: AnyEntityKey + key: AnyEntityCompositeKey ): Promise | undefined> { const entity = this.getEntity(entityName); const normalizedCompositeKey = normalizeCompositeKey(entity, key); @@ -141,7 +144,7 @@ export class AWSEntityStore implements EntityStore { public async delete( entityName: string, - key: AnyEntityKey, + key: AnyEntityCompositeKey, options?: EntityConsistencyOptions | undefined ): Promise { try { @@ -159,7 +162,7 @@ export class AWSEntityStore implements EntityStore { private createDeleteRequest( _entity: string | AnyEntity, - key: AnyEntityKey, + key: AnyEntityCompositeKey, options?: EntityConsistencyOptions ): Delete { const entity = @@ -277,9 +280,9 @@ export class AWSEntityStore implements EntityStore { } } - private createSetRequest( + private createSetRequest( _entity: string | AnyEntity, - value: E, + value: Attr, options?: EntitySetOptions ): Update { const entity = @@ -353,7 +356,7 @@ export class AWSEntityStore implements EntityStore { return entity; } - private entityKey(key: NormalizedEntityKey) { + private entityKey(key: NormalizedEntityCompositeKey) { const marshalledKey = marshall( { [key.partition.keyAttribute]: key.partition.keyValue, diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index 984e8b421..49c3c6d49 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -1,5 +1,5 @@ import { - AnyEntityKey, + AnyEntityCompositeKey, EntityConsistencyOptions, EntityKeyType, EntityQueryKey, @@ -37,13 +37,16 @@ export class LocalEntityStore implements EntityStore { constructor(private props: LocalEntityStoreProps) {} - public async get(entityName: string, key: AnyEntityKey): Promise { + public async get( + entityName: string, + key: AnyEntityCompositeKey + ): Promise { return (await this.getWithMetadata(entityName, key))?.value; } public async getWithMetadata( entityName: string, - key: AnyEntityKey + key: AnyEntityCompositeKey ): Promise | undefined> { const entity = this.getEntity(entityName); const normalizedKey = normalizeCompositeKey(entity, key); @@ -108,7 +111,7 @@ export class LocalEntityStore implements EntityStore { public async delete( entityName: string, - key: AnyEntityKey, + key: AnyEntityCompositeKey, options?: EntityConsistencyOptions | undefined ): Promise { const entity = this.getEntity(entityName); diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 3c8a85cf6..410dd26b8 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,10 +1,10 @@ import type { AnyEntity, - EntityCompositeKey, - EntityCompositeKeyFromEntity, + EntityKeyMap, EntityCompositeKeyPart, EntityKeyFromEntity, EntityKeyType, + EntityCompositeKeyMapFromEntity, } from "@eventual/core"; import type { EntityHook, EntitySpec } from "@eventual/core/internal"; import type openapi from "openapi3-ts"; @@ -51,8 +51,8 @@ export function isCompleteKeyPart( } export function isCompleteKey( - key: NormalizedEntityKey -): key is NormalizedEntityKey< + key: NormalizedEntityCompositeKey +): key is NormalizedEntityCompositeKey< NormalizedEntityKeyCompletePart, NormalizedEntityKeyCompletePart > { @@ -62,7 +62,7 @@ export function isCompleteKey( ); } -export interface NormalizedEntityKey< +export interface NormalizedEntityCompositeKey< Partition extends NormalizedEntityKeyPart = NormalizedEntityKeyPart, Sort extends NormalizedEntityKeyPart = NormalizedEntityKeyPart > { @@ -76,7 +76,7 @@ export interface NormalizedEntityKey< export function normalizeCompositeKey( entity: E, key: Partial> -): NormalizedEntityKey { +): NormalizedEntityCompositeKey { const normalizeKey = normalizeEntityKeyDefinition(entity); return normalizeCompositeKeyFromKeyDefinition(normalizeKey, key); @@ -85,18 +85,20 @@ export function normalizeCompositeKey( export function normalizeCompositeKeyFromKeyDefinition( keyDefinition: NormalizedEntityKeyDefinition, key: Partial> -): NormalizedEntityKey { +): NormalizedEntityCompositeKey { const partitionCompositeKey = formatNormalizedPart( keyDefinition.partition, (p, i) => - Array.isArray(key) ? key[i] : (key as EntityCompositeKeyFromEntity)[p] + Array.isArray(key) + ? key[i] + : (key as EntityCompositeKeyMapFromEntity)[p] ); const sortCompositeKey = keyDefinition.sort ? formatNormalizedPart(keyDefinition.sort, (p, i) => Array.isArray(key) ? key[i] - : (key as EntityCompositeKeyFromEntity)[p] + : (key as EntityCompositeKeyMapFromEntity)[p] ) : undefined; @@ -217,8 +219,8 @@ export function normalizeEntitySpecKeyDefinition( } export function convertNormalizedEntityKeyToMap( - key: NormalizedEntityKey -): EntityCompositeKey { + key: NormalizedEntityCompositeKey +): EntityKeyMap { console.log("input key", JSON.stringify(key)); const generatedKey = Object.fromEntries([ ...key.partition.parts.map(({ field, value }) => [field, value]), diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index 630ca06ea..27b04651f 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -1,6 +1,6 @@ import { AnyEntity, - EntityCompositeKey, + EntityKeyMap, EntityConditionalOperation, EntityDeleteOperation, EntitySetOperation, @@ -38,7 +38,7 @@ import { convertNormalizedEntityKeyToMap, EntityStore, normalizeCompositeKey, - NormalizedEntityKey, + NormalizedEntityCompositeKey, } from "./stores/entity-store.js"; import { serializeCompositeKey } from "./utils.js"; @@ -91,7 +91,7 @@ export interface TransactionExecutor { interface TransactionFailedItem { entityName: string; - key: EntityCompositeKey; + key: EntityKeyMap; } export function createTransactionExecutor( @@ -149,7 +149,7 @@ export function createTransactionExecutor( string, { entityName: string; - key: NormalizedEntityKey; + key: NormalizedEntityCompositeKey; value: EntityWithMetadata | undefined; } >(); @@ -403,7 +403,7 @@ export function createTransactionExecutor( function resolveEntity( entityName: string, - key: NormalizedEntityKey + key: NormalizedEntityCompositeKey ): EventualPromise | undefined> { const serializedKey = serializeCompositeKey(entityName, key); if (retrievedEntities.has(serializedKey)) { diff --git a/packages/@eventual/core-runtime/src/utils.ts b/packages/@eventual/core-runtime/src/utils.ts index b11c0f2c9..ef84e7b63 100644 --- a/packages/@eventual/core-runtime/src/utils.ts +++ b/packages/@eventual/core-runtime/src/utils.ts @@ -11,7 +11,7 @@ import type { EntityStreamSpec, } from "@eventual/core/internal"; import { - NormalizedEntityKey, + NormalizedEntityCompositeKey, NormalizedEntityKeyPart, normalizeCompositeKey, } from "./stores/entity-store.js"; @@ -67,7 +67,7 @@ export function getLazy( export function serializeCompositeKey( entityName: string, - key: NormalizedEntityKey + key: NormalizedEntityCompositeKey ) { return `${entityName}|${key.partition.keyValue}|${key.sort?.keyValue ?? ""}`; } diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index 91236db43..38dd5a0d4 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -24,17 +24,15 @@ import { const entity = (() => { let n = 0; return < - E extends EntityAttributes, - const P extends EntityCompositeKeyPart = EntityCompositeKeyPart, - const S extends EntityCompositeKeyPart | undefined = undefined + Attr extends EntityAttributes, + const Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + const Sort extends EntityCompositeKeyPart | undefined = undefined >( - options: EntityOptions + options: EntityOptions ) => { - // @ts-ignore - const e: E = undefined as any; // eslint-disable-next-line no-empty while (entities().has(`ent${++n}`)) {} - return _entity(`ent${n}`, options); + return _entity(`ent${n}`, options); }; })(); diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index b95cf0ef5..348b35cec 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -23,9 +23,6 @@ export interface EntityQueryResult { nextToken?: string; } -export type EntityCompositeKeyPart = - readonly EntityKeyField[]; - /** * A partial key that can be used to query an entity. * @@ -37,10 +34,10 @@ export type EntityCompositeKeyPart = * TODO: support a progressive builder instead of a simple partial. */ export type EntityQueryKey< - E extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined -> = Partial>; + Attr extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined +> = Partial>; export interface EntityQueryOptions { /** @@ -103,7 +100,7 @@ export interface EntityStreamItemBase< > { streamName: string; entityName: string; - key: EntityCompositeKey; + key: EntityKeyMap; } export type EntityStreamItem< @@ -173,29 +170,56 @@ export type AnyEntity = Entity< export type EntityKeyType = string | number; -export type EntityKeyField = { - [K in keyof E]: K extends string +/** + * A part of the composite key, either the partition or sort key. + */ +export type EntityCompositeKeyPart = + readonly EntityKeyAttribute[]; + +/** + * Any attribute name considered to be a valid key attribute. + */ +export type EntityKeyAttribute = { + [K in keyof Attr]: K extends string ? // only include fields that extend string or number - E[K] extends EntityKeyType + Attr[K] extends EntityKeyType ? K : never : never; -}[keyof E]; +}[keyof Attr]; -export type EntityCompositeKeyFromEntity = +/** + * Extracts an {@link EntityKeyMap} from an {@link Entity} type. + */ +export type EntityCompositeKeyMapFromEntity = E extends Entity - ? EntityCompositeKey + ? EntityKeyMap : never; +/** + * Extracts an {@link EntityCompositeKey} from an {@link Entity} type. + */ export type EntityKeyFromEntity = E extends Entity< infer Attributes, infer Partition, infer Sort > - ? EntityKey + ? EntityCompositeKey : never; -export type EntityCompositeKey< +/** + * All attributes of the composite key as an object. + * + * ```ts + * { + * partitionAttribute1: "", + * partitionAttribute2: "", + * sortAttribute1: "", + * sortAttribute2: "" + * } + * ``` + */ +export type EntityKeyMap< Attr extends EntityAttributes, Partition extends EntityCompositeKeyPart, Sort extends EntityCompositeKeyPart | undefined @@ -208,36 +232,46 @@ export type EntityCompositeKey< : // eslint-disable-next-line {}); -export type EntityKeyArray< - E extends EntityAttributes, - Fields extends readonly (keyof E)[] +export type EntityKeyPartialTuple< + Attr extends EntityAttributes, + Fields extends readonly (keyof Attr)[] > = Fields extends readonly [ - infer X extends keyof E, - ...infer Rest extends readonly (keyof E)[] + infer Head extends keyof Attr, + ...infer Rest extends readonly (keyof Attr)[] ] - ? readonly [E[X], ...EntityKeyArray] - : Fields extends readonly [infer X extends keyof E] - ? readonly [E[X]] + ? readonly [Attr[Head], ...EntityKeyPartialTuple] + : Fields extends readonly [infer Head extends keyof Attr] + ? readonly [Attr[Head]] : readonly []; +/** + * All attributes of the composite key as a in order tuple. + * + * ```ts + * [partitionAttribute1, partitionAttribute2, sortAttribute1, sortAttribute2] + * ``` + */ export type EntityKeyTuple< - E extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined + Attr extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined > = Sort extends undefined - ? EntityKeyArray + ? EntityKeyPartialTuple : readonly [ - ...EntityKeyArray, - ...EntityKeyArray> + ...EntityKeyPartialTuple, + ...EntityKeyPartialTuple> ]; -export type EntityKey< - E extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined -> = EntityCompositeKey | EntityKeyTuple; +/** + * All attributes in either the partition key and the sort key (when present). + */ +export type EntityCompositeKey< + Attr extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined +> = EntityKeyMap | EntityKeyTuple; -export type AnyEntityKey = EntityKey< +export type AnyEntityCompositeKey = EntityCompositeKey< any, readonly string[], readonly string[] | undefined @@ -267,8 +301,8 @@ export type EntityAttributesFromEntity = E extends Entity< ? Attributes : never; -export interface EntityWithMetadata { - value: E; +export interface EntityWithMetadata { + value: Attr; version: number; } @@ -303,31 +337,44 @@ export type EntityAttributes = { [key: string]: EntityValueMember; }; +/** + * Turns a {@link EntityAttributes} type into a Zod {@link z.ZodRawShape}. + */ export type EntityZodShape = { [key in keyof Attr]: z.ZodType; }; +/** + * A map of zod types or a {@link z.ZodObject}. + */ export type EntityZodAttributes = | z.ZodObject> | EntityZodShape; +/** + * An eventual entity. + * + * @see entity + */ export interface Entity< Attr extends EntityAttributes, - P extends EntityCompositeKeyPart, - S extends EntityCompositeKeyPart | undefined + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined > extends Omit { kind: "Entity"; - partition: P; - sort?: S; + partition: Partition; + sort?: Sort; attributes: z.ZodObject>; - streams: EntityStream[]; + streams: EntityStream[]; /** * Get a value. * If your values use composite keys, the namespace must be provided. * * @param key - key or {@link CompositeKey} of the value to retrieve. */ - get(key: EntityKey): Promise; + get( + key: EntityCompositeKey + ): Promise; /** * Get a value and metadata like version. * If your values use composite keys, the namespace must be provided. @@ -335,7 +382,7 @@ export interface Entity< * @param key - key or {@link CompositeKey} of the value to retrieve. */ getWithMetadata( - key: EntityKey + key: EntityCompositeKey ): Promise | undefined>; /** * Sets or updates a value within an entity and optionally a namespace. @@ -348,7 +395,7 @@ export interface Entity< * Deletes a single entry within an entity and namespace. */ delete( - key: EntityKey, + key: EntityCompositeKey, options?: EntityConsistencyOptions ): Promise; /** @@ -357,18 +404,18 @@ export interface Entity< * If namespace is not provided, only values which do not use composite keys will be returned. */ query( - key: EntityQueryKey, + key: EntityQueryKey, request?: EntityQueryOptions ): Promise>; stream( name: string, - options: EntityStreamOptions, - handler: EntityStreamHandler - ): EntityStream; + options: EntityStreamOptions, + handler: EntityStreamHandler + ): EntityStream; stream( name: string, - handler: EntityStreamHandler - ): EntityStream; + handler: EntityStreamHandler + ): EntityStream; } export interface EntityTransactItem { @@ -416,19 +463,83 @@ export const Entity = { export interface EntityOptions< Attr extends EntityAttributes, - P extends EntityCompositeKeyPart, - S extends EntityCompositeKeyPart | undefined + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined > { attributes: EntityZodAttributes; - partition: P; - sort?: S; + partition: Partition; + sort?: Sort; } +/** + * Creates an entity which holds data. + * + * An entity's keys are made up of one or more attributes in the entity. + * When an entity's key is made up of more than one attribute, it is considered to be a composite key. + * + * Each attribute of the composite key is considered to be either a partition key or a sort key, which we consider a composite key part. + * Each entity is required to at least have one partition key attribute, but may have may partition and or sort key attributes. + * To retrieve a single value with an entity, the entire composite key must be used, until the query operation is used to return multiple entities (within a partition). + * + * A partition key separates data within an entity. When using the Query operation, data can only be queried within + * a single partition. + * + * A sort key determines the order of the values when running a query. It also allows for ranges of values to be queried + * using only some of the sort key attributes (in order). + * + * ```ts + * // lets take an example where we have posts for a user, separated by forum. + * const userComments = entity("userComments", { + * attributes: { + * forum: z.string(), + * userId: z.string(), + * postId: z.string(), + * commentId: z.string(), + * message: z.string() + * }, + * partition: ["forum", "userId"], + * sort: ["postId", "id"], + * }); + * + * // add a new post comment + * await userComments.set({ + * forum: "games", + * userId: "1", + * postId: "100", + * commentId: "abc", + * message: "I love games" + * }); + * + * // get all comments for a user in a forum + * await userComments.query({ + * forum: "games", // required in the query + * userId: "1", // required in the query + * }); + * + * // get all comments for a user in a forum and a post + * await userComments.query({ + * forum: "games", // required in the query + * userId: "1", // required in the query + * post: "100", // optional in the query + * }); + * + * // get a single post + * await userComments.get({ + * forum: "games", + * userId: "1", + * postId: "100", + * commentId: "abc" + * }); + * ``` + */ export function entity< Attr extends EntityAttributes, - const P extends EntityCompositeKeyPart, - const S extends EntityCompositeKeyPart | undefined ->(name: string, options: EntityOptions): Entity { + const Partition extends EntityCompositeKeyPart, + const Sort extends EntityCompositeKeyPart | undefined +>( + name: string, + options: EntityOptions +): Entity { if (entities().has(name)) { throw new Error(`entity with name '${name}' already exists`); } @@ -436,9 +547,9 @@ export function entity< /** * Used to maintain a limited number of streams on the entity. */ - const streams: EntityStream[] = []; + const streams: EntityStream[] = []; - const entity: Entity = { + const entity: Entity = { // @ts-ignore __entityBrand: undefined, kind: "Entity", @@ -515,22 +626,22 @@ export function entity< }, stream: ( ...args: - | [name: string, handler: EntityStreamHandler] + | [name: string, handler: EntityStreamHandler] | [ name: string, - options: EntityStreamOptions, - handler: EntityStreamHandler + options: EntityStreamOptions, + handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - handler: EntityStreamHandler + handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - options: EntityStreamOptions, - handler: EntityStreamHandler + options: EntityStreamOptions, + handler: EntityStreamHandler ] ) => { const [sourceLocation, streamName, options, handler] = @@ -543,7 +654,7 @@ export function entity< : [ , args[0] as string, - args[1] as EntityStreamOptions, + args[1] as EntityStreamOptions, args[2], ]; @@ -551,7 +662,7 @@ export function entity< throw new Error("Only two streams are allowed per entity."); } - const entityStream: EntityStream = { + const entityStream: EntityStream = { kind: "EntityStream", handler, name: streamName, @@ -573,33 +684,33 @@ export function entity< export function entityStream< Attr extends EntityAttributes, - const P extends EntityCompositeKeyPart, - const S extends EntityCompositeKeyPart | undefined + const Partition extends EntityCompositeKeyPart, + const Sort extends EntityCompositeKeyPart | undefined >( ...args: | [ name: string, - entity: Entity, - handler: EntityStreamHandler + entity: Entity, + handler: EntityStreamHandler ] | [ name: string, - entity: Entity, - options: EntityStreamOptions, - handler: EntityStreamHandler + entity: Entity, + options: EntityStreamOptions, + handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - entity: Entity, - handler: EntityStreamHandler + entity: Entity, + handler: EntityStreamHandler ] | [ sourceLocation: SourceLocation, name: string, - entity: Entity, - options: EntityStreamOptions, - handler: EntityStreamHandler + entity: Entity, + options: EntityStreamOptions, + handler: EntityStreamHandler ] ) { const [sourceLocation, name, entity, options, handler] = @@ -608,12 +719,18 @@ export function entityStream< : args.length === 5 ? args : isSourceLocation(args[0]) - ? [args[0], args[1] as string, args[2] as Entity, , args[3]] + ? [ + args[0], + args[1] as string, + args[2] as Entity, + , + args[3], + ] : [ , args[0] as string, - args[1] as Entity, - args[2] as EntityStreamOptions, + args[1] as Entity, + args[2] as EntityStreamOptions, args[3], ]; From cc010b04b0a785abc428c0ca2145664276949e40 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 07:40:26 -0500 Subject: [PATCH 12/21] clean up key definition computation --- .../@eventual/aws-cdk/src/entity-service.ts | 46 +++--- .../aws-runtime/src/stores/entity-store.ts | 11 +- .../@eventual/compiler/src/eventual-infer.ts | 10 +- .../core-runtime/src/stores/entity-store.ts | 135 ++---------------- packages/@eventual/core/src/entity.ts | 81 +++++++++-- .../core/src/internal/service-spec.ts | 4 +- 6 files changed, 106 insertions(+), 181 deletions(-) diff --git a/packages/@eventual/aws-cdk/src/entity-service.ts b/packages/@eventual/aws-cdk/src/entity-service.ts index 4b1fbceb7..4e72e4b40 100644 --- a/packages/@eventual/aws-cdk/src/entity-service.ts +++ b/packages/@eventual/aws-cdk/src/entity-service.ts @@ -3,18 +3,13 @@ import { entityServiceTableSuffix, ENV_NAMES, } from "@eventual/aws-runtime"; +import { EntityKeyDefinitionPart } from "@eventual/core"; import { EntityRuntime, EntityStreamFunction, - normalizeCompositeKeyFromKeyDefinition, - NormalizedEntityKeyDefinitionPart, - normalizeEntitySpecKeyDefinition, + normalizeCompositeKey, } from "@eventual/core-runtime"; -import { - assertNever, - EntitySpec, - TransactionSpec, -} from "@eventual/core/internal"; +import { assertNever, TransactionSpec } from "@eventual/core/internal"; import { Duration, RemovalPolicy, Stack } from "aws-cdk-lib"; import { Attribute, @@ -221,20 +216,16 @@ class Entity extends Construct { constructor(scope: Construct, props: EntityProps) { super(scope, props.entity.name); - const normalizedKeyDefinition = normalizeEntitySpecKeyDefinition( - props.entity as unknown as EntitySpec - ); + const keyDefinition = props.entity.key; this.table = new Table(this, "Table", { tableName: entityServiceTableName( props.serviceProps.serviceName, props.entity.name ), - partitionKey: entityKeyDefinitionToAttribute( - normalizedKeyDefinition.partition - ), - sortKey: normalizedKeyDefinition.sort - ? entityKeyDefinitionToAttribute(normalizedKeyDefinition.sort) + partitionKey: entityKeyDefinitionToAttribute(keyDefinition.partition), + sortKey: keyDefinition.sort + ? entityKeyDefinitionToAttribute(keyDefinition.sort) : undefined, billingMode: BillingMode.PAY_PER_REQUEST, removalPolicy: RemovalPolicy.DESTROY, @@ -273,12 +264,11 @@ export class EntityStream extends Construct implements EventualResource { const streamName = props.stream.spec.name; const entityName = props.stream.spec.entityName; - const normalizedKeyDefinition = normalizeEntitySpecKeyDefinition( - props.entity as unknown as EntitySpec - ); + const keyDefinition = props.entity.key; + const normalizedQueryKeys = props.stream.spec.options?.queryKeys?.map((q) => - normalizeCompositeKeyFromKeyDefinition(normalizedKeyDefinition, q) + normalizeCompositeKey(keyDefinition, q) ) ?? []; const queryPatterns = normalizedQueryKeys.map((k) => { @@ -364,17 +354,17 @@ export class EntityStream extends Construct implements EventualResource { return { ...(item.partition ? { - [normalizedKeyDefinition.partition.keyAttribute]: { - [keyTypeToAttributeType(normalizedKeyDefinition.partition)]: [ + [keyDefinition.partition.keyAttribute]: { + [keyTypeToAttributeType(keyDefinition.partition)]: [ item.partition, ].flat(), }, } : {}), - ...(normalizedKeyDefinition.sort && item.sort + ...(keyDefinition.sort && item.sort ? { - [normalizedKeyDefinition.sort.keyAttribute]: { - [keyTypeToAttributeType(normalizedKeyDefinition.sort)]: [ + [keyDefinition.sort.keyAttribute]: { + [keyTypeToAttributeType(keyDefinition.sort)]: [ item.sort, ].flat(), }, @@ -382,9 +372,7 @@ export class EntityStream extends Construct implements EventualResource { : {}), }; - function keyTypeToAttributeType( - keyDef: NormalizedEntityKeyDefinitionPart - ) { + function keyTypeToAttributeType(keyDef: EntityKeyDefinitionPart) { return keyDef.type === "number" ? "N" : keyDef.type === "string" @@ -396,7 +384,7 @@ export class EntityStream extends Construct implements EventualResource { } export function entityKeyDefinitionToAttribute( - part: NormalizedEntityKeyDefinitionPart + part: EntityKeyDefinitionPart ): Attribute { return { name: part.keyAttribute, diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 92cecd180..8d156a92e 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -370,15 +370,13 @@ export class AWSEntityStore implements EntityStore { private queryEntries( entityName: string, queryKey: EntityQueryKey, - request?: EntityQueryOptions, - fields?: string[] + request?: EntityQueryOptions ): ReturnType< typeof queryPageWithToken> > { const entity = this.getEntity(entityName); const normalizedKey = normalizeCompositeKey(entity, queryKey); - const allFields = new Set([ - ...(fields ?? []), + const allAttributes = new Set([ normalizedKey.partition.keyAttribute, ...(normalizedKey.sort && normalizedKey.sort.keyValue !== undefined ? [normalizedKey.sort.keyAttribute] @@ -434,11 +432,8 @@ export class AWSEntityStore implements EntityStore { : {}), }, ExpressionAttributeNames: Object.fromEntries( - [...allFields]?.map((f) => [formatAttributeNameMapKey(f), f]) + [...allAttributes]?.map((f) => [formatAttributeNameMapKey(f), f]) ), - ProjectionExpression: fields - ?.map((f) => formatAttributeNameMapKey(f)) - .join(","), } ); } diff --git a/packages/@eventual/compiler/src/eventual-infer.ts b/packages/@eventual/compiler/src/eventual-infer.ts index 684a8cdd4..9e17e61f5 100644 --- a/packages/@eventual/compiler/src/eventual-infer.ts +++ b/packages/@eventual/compiler/src/eventual-infer.ts @@ -131,16 +131,8 @@ export function inferFromMemory(openApi: ServiceSpec["openApi"]): ServiceSpec { }, entities: { entities: [...entities().values()].map((d) => ({ - name: d.name, - partition: d.partition, - sort: d.sort, + ...d, attributes: generateSchema(d.attributes), - streams: d.streams.map((s) => ({ - name: s.name, - entityName: s.entityName, - options: s.options, - sourceLocation: s.sourceLocation, - })), })), }, transactions: [...transactions().values()].map((t) => ({ diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 410dd26b8..b6e4bf7d5 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,30 +1,17 @@ import type { AnyEntity, - EntityKeyMap, - EntityCompositeKeyPart, + EntityCompositeKeyMapFromEntity, EntityKeyFromEntity, + EntityKeyMap, EntityKeyType, - EntityCompositeKeyMapFromEntity, + EntityKeyDefinition, + EntityKeyDefinitionPart, } from "@eventual/core"; -import type { EntityHook, EntitySpec } from "@eventual/core/internal"; -import type openapi from "openapi3-ts"; -import { z } from "zod"; +import type { EntityHook } from "@eventual/core/internal"; export type EntityStore = EntityHook; -export interface NormalizedEntityKeyDefinitionPart { - type: "number" | "string"; - keyAttribute: string; - fields: readonly string[]; -} - -export interface NormalizedEntityKeyDefinition { - partition: NormalizedEntityKeyDefinitionPart; - sort?: NormalizedEntityKeyDefinitionPart; -} - -export interface NormalizedEntityKeyPartBase - extends NormalizedEntityKeyDefinitionPart { +export interface NormalizedEntityKeyPartBase extends EntityKeyDefinitionPart { parts: { field: string; value: EntityKeyType }[]; } @@ -74,28 +61,17 @@ export interface NormalizedEntityCompositeKey< * Generate properties for an entity key given the key definition and key values. */ export function normalizeCompositeKey( - entity: E, + entity: E | EntityKeyDefinition, key: Partial> ): NormalizedEntityCompositeKey { - const normalizeKey = normalizeEntityKeyDefinition(entity); - - return normalizeCompositeKeyFromKeyDefinition(normalizeKey, key); -} + const keyDef = "partition" in entity ? entity : entity.key; -export function normalizeCompositeKeyFromKeyDefinition( - keyDefinition: NormalizedEntityKeyDefinition, - key: Partial> -): NormalizedEntityCompositeKey { - const partitionCompositeKey = formatNormalizedPart( - keyDefinition.partition, - (p, i) => - Array.isArray(key) - ? key[i] - : (key as EntityCompositeKeyMapFromEntity)[p] + const partitionCompositeKey = formatNormalizedPart(keyDef.partition, (p, i) => + Array.isArray(key) ? key[i] : (key as EntityCompositeKeyMapFromEntity)[p] ); - const sortCompositeKey = keyDefinition.sort - ? formatNormalizedPart(keyDefinition.sort, (p, i) => + const sortCompositeKey = keyDef.sort + ? formatNormalizedPart(keyDef.sort, (p, i) => Array.isArray(key) ? key[i] : (key as EntityCompositeKeyMapFromEntity)[p] @@ -113,10 +89,10 @@ export function normalizeCompositeKeyFromKeyDefinition( } function formatNormalizedPart( - keyPart: NormalizedEntityKeyDefinitionPart, + keyPart: EntityKeyDefinitionPart, valueRetriever: (field: string, index: number) => string | number ): NormalizedEntityKeyPart { - const parts = keyPart.fields.map((p, i) => ({ + const parts = keyPart.attributes.map((p, i) => ({ field: p, value: valueRetriever(p, i), })); @@ -125,7 +101,7 @@ function formatNormalizedPart( return { type: keyPart.type, - fields: keyPart.fields, + attributes: keyPart.attributes, parts, keyAttribute: keyPart.keyAttribute, keyValue: (keyPart.type === "number" @@ -137,87 +113,6 @@ function formatNormalizedPart( }; } -/** - * Generate deterministic properties of the entity key for partition and optional sort keys. - */ -export function normalizeEntityKeyDefinition( - entity: AnyEntity -): NormalizedEntityKeyDefinition { - const entityZodShape = entity.attributes.shape; - - return { - partition: formatNormalizedDefinition(entity.partition), - sort: entity.sort ? formatNormalizedDefinition(entity.sort) : undefined, - }; - - function formatNormalizedDefinition( - keyField: EntityCompositeKeyPart - ): NormalizedEntityKeyDefinitionPart { - const [head, ...tail] = keyField; - - if (!head) { - throw new Error( - "Entity Key Part must contain at least one segment. Sort Key maybe undefined." - ); - } - - // the value will be a number if there is a single part to the composite key part and the value is already a number. - // else a string will be formatted - const type = - tail.length === 0 && entityZodShape[head] instanceof z.ZodNumber - ? "number" - : "string"; - - const attribute = keyField.join("|"); - - return { - type, - keyAttribute: attribute, - fields: keyField, - }; - } -} - -export function normalizeEntitySpecKeyDefinition( - entity: EntitySpec -): NormalizedEntityKeyDefinition { - const entityZodShape = entity.attributes; - - return { - partition: formatNormalizedDefinition(entity.partition), - sort: entity.sort ? formatNormalizedDefinition(entity.sort) : undefined, - }; - - function formatNormalizedDefinition( - keyField: EntityCompositeKeyPart - ): NormalizedEntityKeyDefinitionPart { - const [head, ...tail] = keyField; - - if (!head) { - throw new Error( - "Entity Key Part must contain at least one segment. Sort Key may be undefined." - ); - } - - // the value will be a number if there is a single part to the composite key part and the value is already a number. - // else a string will be formatted - const type = - tail.length === 0 && - (entityZodShape.properties?.[head] as openapi.SchemaObject).type === - "number" - ? "number" - : "string"; - - const attribute = keyField.join("|"); - - return { - type, - keyAttribute: attribute, - fields: keyField, - }; - } -} - export function convertNormalizedEntityKeyToMap( key: NormalizedEntityCompositeKey ): EntityKeyMap { diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 348b35cec..e8c789b1d 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -181,7 +181,7 @@ export type EntityCompositeKeyPart = */ export type EntityKeyAttribute = { [K in keyof Attr]: K extends string - ? // only include fields that extend string or number + ? // only include attributes that extend string or number Attr[K] extends EntityKeyType ? K : never @@ -234,13 +234,13 @@ export type EntityKeyMap< export type EntityKeyPartialTuple< Attr extends EntityAttributes, - Fields extends readonly (keyof Attr)[] -> = Fields extends readonly [ + Attrs extends readonly (keyof Attr)[] +> = Attrs extends readonly [ infer Head extends keyof Attr, ...infer Rest extends readonly (keyof Attr)[] ] ? readonly [Attr[Head], ...EntityKeyPartialTuple] - : Fields extends readonly [infer Head extends keyof Attr] + : Attrs extends readonly [infer Head extends keyof Attr] ? readonly [Attr[Head]] : readonly []; @@ -340,7 +340,7 @@ export type EntityAttributes = { /** * Turns a {@link EntityAttributes} type into a Zod {@link z.ZodRawShape}. */ -export type EntityZodShape = { +type EntityZodShape = { [key in keyof Attr]: z.ZodType; }; @@ -362,8 +362,7 @@ export interface Entity< Sort extends EntityCompositeKeyPart | undefined > extends Omit { kind: "Entity"; - partition: Partition; - sort?: Sort; + key: EntityKeyDefinition; attributes: z.ZodObject>; streams: EntityStream[]; /** @@ -549,17 +548,22 @@ export function entity< */ const streams: EntityStream[] = []; + const attributes = + options.attributes instanceof z.ZodObject + ? options.attributes + : z.object(options.attributes); + const entity: Entity = { // @ts-ignore __entityBrand: undefined, kind: "Entity", name, - partition: options.partition, - sort: options.sort, - attributes: - options.attributes instanceof z.ZodObject - ? options.attributes - : z.object(options.attributes), + key: computeEntityKeyDefinition( + attributes, + options.partition, + options.sort + ), + attributes, streams, get: (...args) => { return getEventualCallHook().registerEventualCall( @@ -744,3 +748,54 @@ export function entityStream< ? entity.stream(name, options, handler) : entity.stream(name, handler); } + +export interface EntityKeyDefinitionPart { + type: "number" | "string"; + keyAttribute: string; + attributes: readonly string[]; +} + +export interface EntityKeyDefinition { + partition: EntityKeyDefinitionPart; + sort?: EntityKeyDefinitionPart; +} + +function computeEntityKeyDefinition( + attributes: z.ZodObject>, + partition: EntityCompositeKeyPart, + sort?: EntityCompositeKeyPart +): EntityKeyDefinition { + const entityZodShape = attributes.shape; + + return { + partition: formatKeyDefinitionPart(partition), + sort: sort ? formatKeyDefinitionPart(sort) : undefined, + }; + + function formatKeyDefinitionPart( + keyAttributes: EntityCompositeKeyPart + ): EntityKeyDefinitionPart { + const [head, ...tail] = keyAttributes; + + if (!head) { + throw new Error( + "Entity Key Part must contain at least one segment. Sort Key may be undefined." + ); + } + + // the value will be a number if there is a single part to the composite key part and the value is already a number. + // else a string will be formatted + const type = + tail.length === 0 && entityZodShape[head] instanceof z.ZodNumber + ? "number" + : "string"; + + const attribute = keyAttributes.join("|"); + + return { + type, + keyAttribute: attribute, + attributes: keyAttributes, + }; + } +} diff --git a/packages/@eventual/core/src/internal/service-spec.ts b/packages/@eventual/core/src/internal/service-spec.ts index dd467fcd4..923b8a857 100644 --- a/packages/@eventual/core/src/internal/service-spec.ts +++ b/packages/@eventual/core/src/internal/service-spec.ts @@ -12,6 +12,7 @@ import { EntityAttributes, EntityCompositeKeyPart, EntityQueryKey, + EntityKeyDefinition, } from "../entity.js"; /** @@ -168,8 +169,7 @@ export interface BucketNotificationHandlerSpec { export interface EntitySpec { name: string; - partition: readonly string[]; - sort?: readonly string[]; + key: EntityKeyDefinition; /** * An Optional schema for the entity within an entity. */ From 98fb53f3a5e2dd11e861eb988e3fedcebe6ffab1 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 09:48:51 -0500 Subject: [PATCH 13/21] Abstract entity store shared logic. --- .../aws-runtime/src/stores/entity-store.ts | 354 +++++++----------- packages/@eventual/cli/src/display/event.ts | 2 +- .../src/local/stores/entity-store.ts | 232 +++++------- .../src/providers/entity-provider.ts | 4 +- .../core-runtime/src/stores/entity-store.ts | 189 +++++++++- .../core-runtime/src/transaction-executor.ts | 4 +- .../test/transaction-executor.test.ts | 2 +- packages/@eventual/core/src/entity.ts | 34 +- packages/@eventual/core/src/internal/calls.ts | 2 +- .../core/src/internal/entity-hook.ts | 4 +- 10 files changed, 442 insertions(+), 385 deletions(-) diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 8d156a92e..5df2e92c4 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -16,15 +16,12 @@ import { import { marshall, unmarshall } from "@aws-sdk/util-dynamodb"; import { AnyEntity, - AnyEntityCompositeKey, EntityAttributes, EntityAttributesFromEntity, EntityConsistencyOptions, - EntityQueryKey, EntityQueryOptions, EntityQueryResult, EntitySetOptions, - EntityTransactItem, EntityWithMetadata, TransactionCancelled, TransactionConflict, @@ -34,11 +31,11 @@ import { EntityProvider, EntityStore, getLazy, - isCompleteKey, - isCompleteKeyPart, LazyValue, - normalizeCompositeKey, NormalizedEntityCompositeKey, + NormalizedEntityCompositeKeyComplete, + NormalizedEntityKeyCompletePart, + NormalizedEntityTransactItem, } from "@eventual/core-runtime"; import { assertNever } from "@eventual/core/internal"; import { entityServiceTableName, queryPageWithToken } from "../utils.js"; @@ -60,31 +57,19 @@ export type MarshalledEntityAttributesWithVersion = { __version: AttributeValue.NMember; }; -export class AWSEntityStore implements EntityStore { - constructor(private props: AWSEntityStoreProps) {} - - public async get( - entityName: string, - key: AnyEntityCompositeKey - ): Promise { - return (await this.getWithMetadata(entityName, key))?.value; +export class AWSEntityStore extends EntityStore { + constructor(private props: AWSEntityStoreProps) { + super(props.entityProvider); } - public async getWithMetadata( - entityName: string, - key: AnyEntityCompositeKey - ): Promise | undefined> { - const entity = this.getEntity(entityName); - const normalizedCompositeKey = normalizeCompositeKey(entity, key); - - if (!isCompleteKey(normalizedCompositeKey)) { - throw new Error("Key cannot be partial for get or getWithMetadata."); - } - + protected override async _getWithMetadata( + entity: AnyEntity, + key: NormalizedEntityCompositeKeyComplete + ): Promise { const item = await this.props.dynamo.send( new GetItemCommand({ - Key: this.entityKey(normalizedCompositeKey), - TableName: this.tableName(entityName), + Key: this.entityKey(key), + TableName: this.tableName(entity), ConsistentRead: true, }) ); @@ -98,18 +83,11 @@ export class AWSEntityStore implements EntityStore { ) as EntityAttributesWithVersion; // if the key attributes are computed, remove them from the return value. - if ( - !( - normalizedCompositeKey.partition.keyAttribute in entity.attributes.shape - ) - ) { - delete value[normalizedCompositeKey.partition.keyAttribute]; + if (!(key.partition.keyAttribute in entity.attributes.shape)) { + delete value[key.partition.keyAttribute]; } - if ( - normalizedCompositeKey.sort && - !(normalizedCompositeKey.sort.keyAttribute in entity.attributes.shape) - ) { - delete value[normalizedCompositeKey.sort.keyAttribute]; + if (key.sort && !(key.sort.keyAttribute in entity.attributes.shape)) { + delete value[key.sort.keyAttribute]; } return { @@ -118,15 +96,16 @@ export class AWSEntityStore implements EntityStore { }; } - public async set( - entityName: string, - entity: any, - options?: EntitySetOptions | undefined + public override async _set( + entity: AnyEntity, + value: EntityAttributes, + key: NormalizedEntityCompositeKeyComplete, + options?: EntitySetOptions ): Promise<{ version: number }> { try { const result = await this.props.dynamo.send( new UpdateItemCommand({ - ...this.createSetRequest(entityName, entity, options), + ...this.createSetRequest(entity, value, key, options), ReturnValues: ReturnValue.ALL_NEW, }) ); @@ -142,16 +121,14 @@ export class AWSEntityStore implements EntityStore { } } - public async delete( - entityName: string, - key: AnyEntityCompositeKey, + protected override async _delete( + entity: AnyEntity, + key: NormalizedEntityCompositeKeyComplete, options?: EntityConsistencyOptions | undefined ): Promise { try { await this.props.dynamo.send( - new DeleteItemCommand( - this.createDeleteRequest(entityName, key, options) - ) + new DeleteItemCommand(this.createDeleteRequest(entity, key, options)) ); } catch (err) { if (err instanceof ConditionalCheckFailedException) { @@ -161,20 +138,12 @@ export class AWSEntityStore implements EntityStore { } private createDeleteRequest( - _entity: string | AnyEntity, - key: AnyEntityCompositeKey, + entity: AnyEntity, + key: NormalizedEntityCompositeKeyComplete, options?: EntityConsistencyOptions ): Delete { - const entity = - typeof _entity === "string" ? this.getEntity(_entity) : _entity; - const normalizedKey = normalizeCompositeKey(entity, key); - - if (!isCompleteKey(normalizedKey)) { - throw new Error("Key cannot be partial for delete."); - } - return { - Key: this.entityKey(normalizedKey), + Key: this.entityKey(key), ConditionExpression: options?.expectedVersion !== undefined ? "#__version=:expectedVersion" @@ -189,16 +158,71 @@ export class AWSEntityStore implements EntityStore { options?.expectedVersion !== undefined ? { ":expectedVersion": { N: options.expectedVersion.toString() } } : undefined, - TableName: this.tableName(entity.name), + TableName: this.tableName(entity), }; } - public async query( - entityName: string, - key: EntityQueryKey, - request?: EntityQueryOptions - ): Promise> { - const result = await this.queryEntries(entityName, key, request); + protected override async _query( + entity: AnyEntity, + queryKey: NormalizedEntityCompositeKey, + options?: EntityQueryOptions + ): Promise { + const allAttributes = new Set([ + queryKey.partition.keyAttribute, + ...(queryKey.sort && queryKey.sort.keyValue !== undefined + ? [queryKey.sort.keyAttribute] + : []), + ]); + + const result = await queryPageWithToken< + MarshalledEntityAttributesWithVersion + >( + { + dynamoClient: this.props.dynamo, + pageSize: options?.limit ?? 1000, + keys: queryKey.sort + ? [queryKey.partition.keyAttribute, queryKey.sort.keyAttribute] + : [queryKey.partition.keyAttribute], + nextToken: options?.nextToken, + }, + { + TableName: this.tableName(entity), + KeyConditionExpression: + queryKey.sort && queryKey.sort.keyValue !== undefined + ? queryKey.sort.partialValue + ? `${formatAttributeNameMapKey( + queryKey.partition.keyAttribute + )}=:pk AND begins_with(${formatAttributeNameMapKey( + queryKey.sort.keyAttribute + )}, :sk)` + : `${formatAttributeNameMapKey( + queryKey.partition.keyAttribute + )}=:pk AND ${formatAttributeNameMapKey( + queryKey.sort.keyAttribute + )}=:sk` + : `${formatAttributeNameMapKey( + queryKey.partition.keyAttribute + )}=:pk`, + ExpressionAttributeValues: { + ":pk": + typeof queryKey.partition.keyValue === "number" + ? { N: queryKey.partition.keyValue.toString() } + : { S: queryKey.partition.keyValue }, + ...(queryKey.sort && queryKey.sort.keyValue !== undefined + ? { + ":sk": + typeof queryKey.sort.keyValue === "string" + ? { S: queryKey.sort.keyValue } + : { N: queryKey.sort.keyValue.toString() }, + } + : {}), + }, + ExpressionAttributeNames: Object.fromEntries( + [...allAttributes]?.map((f) => [formatAttributeNameMapKey(f), f]) + ), + } + ); + return { nextToken: result.nextToken, entries: result.records.map(({ __version, ...r }) => ({ @@ -208,59 +232,55 @@ export class AWSEntityStore implements EntityStore { }; } - public async transactWrite(items: EntityTransactItem[]): Promise { + protected override async _transactWrite( + items: NormalizedEntityTransactItem[] + ): Promise { try { await this.props.dynamo.send( new TransactWriteItemsCommand({ - TransactItems: items.map((i): TransactWriteItem => { - if (i.operation.operation === "set") { - return { - Update: this.createSetRequest( - i.entity, - i.operation.value, - i.operation.options - ), - }; - } else if (i.operation.operation === "delete") { - return { - Delete: this.createDeleteRequest( - i.entity, - i.operation.key, - i.operation.options - ), - }; - } else if (i.operation.operation === "condition") { - const entity = - typeof i.entity === "string" - ? this.getEntity(i.entity) - : i.entity; - return { - ConditionCheck: { - ConditionExpression: - i.operation.version !== undefined - ? i.operation.version === 0 - ? "attribute_not_exists(#version)" - : "#version=:expectedVersion" - : undefined, - TableName: this.tableName(entity.name), - Key: this.entityKey( - normalizeCompositeKey(entity, i.operation.key) + TransactItems: items.map((item): TransactWriteItem => { + return item.operation === "set" + ? { + Update: this.createSetRequest( + item.entity, + item.value, + item.key, + item.options + ), + } + : item.operation === "delete" + ? { + Delete: this.createDeleteRequest( + item.entity, + item.key, + item.options ), - ExpressionAttributeNames: { - "#version": EntityEntityRecord.VERSION_FIELD, + } + : item.operation === "condition" + ? { + ConditionCheck: { + ConditionExpression: + item.version !== undefined + ? item.version === 0 + ? "attribute_not_exists(#version)" + : "#version=:expectedVersion" + : undefined, + TableName: this.tableName(item.entity), + Key: this.entityKey(item.key), + ExpressionAttributeNames: { + "#version": EntityEntityRecord.VERSION_FIELD, + }, + ExpressionAttributeValues: + item.version !== undefined + ? { + ":expectedVersion": { + N: item.version.toString(), + }, + } + : undefined, }, - ExpressionAttributeValues: - i.operation.version !== undefined - ? { - ":expectedVersion": { - N: i.operation.version.toString(), - }, - } - : undefined, - }, - }; - } - return assertNever(i.operation); + } + : assertNever(item); }), }) ); @@ -281,28 +301,21 @@ export class AWSEntityStore implements EntityStore { } private createSetRequest( - _entity: string | AnyEntity, + entity: AnyEntity, value: Attr, + key: NormalizedEntityCompositeKey, options?: EntitySetOptions ): Update { - const entity = - typeof _entity === "string" ? this.getEntity(_entity) : _entity; - const normalizedKey = normalizeCompositeKey(entity, value); - - if (!isCompleteKey(normalizedKey)) { - throw new Error("Key cannot be partial for set."); - } - const valueRecord = marshall(value, { removeUndefinedValues: true }); // if the key attributes are not computed and are in the original value, remove them from the set expression - delete valueRecord[normalizedKey.partition.keyAttribute]; - if (normalizedKey.sort) { - delete valueRecord[normalizedKey.sort.keyAttribute]; + delete valueRecord[key.partition.keyAttribute]; + if (key.sort) { + delete valueRecord[key.sort.keyAttribute]; } return { - Key: this.entityKey(normalizedKey), + Key: this.entityKey(key), UpdateExpression: [ "SET #__version=if_not_exists(#__version, :__startingVersion) + :__versionIncrement", ...Object.keys(valueRecord).map( @@ -344,18 +357,10 @@ export class AWSEntityStore implements EntityStore { ? "attribute_not_exists(#__version)" : "#__version=:__expectedVersion" : undefined, - TableName: this.tableName(entity.name), + TableName: this.tableName(entity), }; } - private getEntity(entityName: string) { - const entity = this.props.entityProvider.getEntity(entityName); - if (!entity) { - throw new Error(`Entity ${entityName} was not found.`); - } - return entity; - } - private entityKey(key: NormalizedEntityCompositeKey) { const marshalledKey = marshall( { @@ -367,79 +372,8 @@ export class AWSEntityStore implements EntityStore { return marshalledKey; } - private queryEntries( - entityName: string, - queryKey: EntityQueryKey, - request?: EntityQueryOptions - ): ReturnType< - typeof queryPageWithToken> - > { - const entity = this.getEntity(entityName); - const normalizedKey = normalizeCompositeKey(entity, queryKey); - const allAttributes = new Set([ - normalizedKey.partition.keyAttribute, - ...(normalizedKey.sort && normalizedKey.sort.keyValue !== undefined - ? [normalizedKey.sort.keyAttribute] - : []), - ]); - - if (!isCompleteKeyPart(normalizedKey.partition)) { - throw new Error("Entity partition key cannot be partial for query"); - } - - return queryPageWithToken>( - { - dynamoClient: this.props.dynamo, - pageSize: request?.limit ?? 1000, - keys: normalizedKey.sort - ? [ - normalizedKey.partition.keyAttribute, - normalizedKey.sort.keyAttribute, - ] - : [normalizedKey.partition.keyAttribute], - nextToken: request?.nextToken, - }, - { - TableName: this.tableName(entityName), - KeyConditionExpression: - normalizedKey.sort && normalizedKey.sort.keyValue !== undefined - ? normalizedKey.sort.partialValue - ? `${formatAttributeNameMapKey( - normalizedKey.partition.keyAttribute - )}=:pk AND begins_with(${formatAttributeNameMapKey( - normalizedKey.sort.keyAttribute - )}, :sk)` - : `${formatAttributeNameMapKey( - normalizedKey.partition.keyAttribute - )}=:pk AND ${formatAttributeNameMapKey( - normalizedKey.sort.keyAttribute - )}=:sk` - : `${formatAttributeNameMapKey( - normalizedKey.partition.keyAttribute - )}=:pk`, - ExpressionAttributeValues: { - ":pk": - typeof normalizedKey.partition.keyValue === "number" - ? { N: normalizedKey.partition.keyValue.toString() } - : { S: normalizedKey.partition.keyValue }, - ...(normalizedKey.sort && normalizedKey.sort.keyValue !== undefined - ? { - ":sk": - typeof normalizedKey.sort.keyValue === "string" - ? { S: normalizedKey.sort.keyValue } - : { N: normalizedKey.sort.keyValue.toString() }, - } - : {}), - }, - ExpressionAttributeNames: Object.fromEntries( - [...allAttributes]?.map((f) => [formatAttributeNameMapKey(f), f]) - ), - } - ); - } - - private tableName(entityName: string) { - return entityServiceTableName(getLazy(this.props.serviceName), entityName); + private tableName(entity: AnyEntity) { + return entityServiceTableName(getLazy(this.props.serviceName), entity.name); } } diff --git a/packages/@eventual/cli/src/display/event.ts b/packages/@eventual/cli/src/display/event.ts index c85b54045..ece4c5856 100644 --- a/packages/@eventual/cli/src/display/event.ts +++ b/packages/@eventual/cli/src/display/event.ts @@ -88,7 +88,7 @@ function displayEntityCommand(operation: EntityOperation) { return output; } -function displayEntityTransactItem(item: EntityTransactItem): string[] { +function displayEntityTransactItem(item: EntityTransactItem): string[] { const entityName = typeof item.entity === "string" ? item.entity : item.entity.name; if (item.operation.operation === "set") { diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index 49c3c6d49..de4919b2e 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -1,12 +1,11 @@ import { - AnyEntityCompositeKey, + AnyEntity, + EntityAttributes, EntityConsistencyOptions, EntityKeyType, - EntityQueryKey, EntityQueryOptions, EntityQueryResult, EntitySetOptions, - EntityTransactItem, EntityWithMetadata, TransactionCancelled, UnexpectedVersion, @@ -14,11 +13,13 @@ import { import { assertNever } from "@eventual/core/internal"; import { EntityProvider } from "../../providers/entity-provider.js"; import { - convertNormalizedEntityKeyToMap, EntityStore, + NormalizedEntityCompositeKey, + NormalizedEntityCompositeKeyComplete, + NormalizedEntityKeyCompletePart, + NormalizedEntityTransactItem, + convertNormalizedEntityKeyToMap, isCompleteKey, - isCompleteKeyPart, - normalizeCompositeKey, } from "../../stores/entity-store.js"; import { deserializeCompositeKey, serializeCompositeKey } from "../../utils.js"; import { LocalEnvConnector } from "../local-container.js"; @@ -29,48 +30,33 @@ export interface LocalEntityStoreProps { entityProvider: EntityProvider; } -export class LocalEntityStore implements EntityStore { +export class LocalEntityStore extends EntityStore { private entities: Record< string, - Map>> + Map> > = {}; - constructor(private props: LocalEntityStoreProps) {} - - public async get( - entityName: string, - key: AnyEntityCompositeKey - ): Promise { - return (await this.getWithMetadata(entityName, key))?.value; + constructor(private props: LocalEntityStoreProps) { + super(props.entityProvider); } - public async getWithMetadata( - entityName: string, - key: AnyEntityCompositeKey - ): Promise | undefined> { - const entity = this.getEntity(entityName); - const normalizedKey = normalizeCompositeKey(entity, key); - if (!isCompleteKey(normalizedKey)) { - throw new Error( - "Entity key cannot be partial for get or getWithMetadata" - ); - } - - return this.getPartitionMap( - entityName, - normalizedKey.partition.keyValue - ).get(normalizedKey.sort?.keyValue ?? "default"); + protected override async _getWithMetadata( + entity: AnyEntity, + key: NormalizedEntityCompositeKeyComplete + ): Promise { + return this.getPartitionMap(entity, key.partition).get( + key.sort?.keyValue ?? "default" + ); } - public async set( - entityName: string, - value: any, - options?: EntitySetOptions | undefined + protected override async _set( + entity: AnyEntity, + value: EntityAttributes, + key: NormalizedEntityCompositeKeyComplete, + options?: EntitySetOptions ): Promise<{ version: number }> { - const entity = this.getEntity(entityName); - const normalizedKey = normalizeCompositeKey(entity, value); const { version = 0, value: oldValue } = - (await this.getWithMetadata(entityName, value)) ?? {}; + (await this._getWithMetadata(entity, key)) ?? {}; if ( options?.expectedVersion !== undefined && options.expectedVersion !== version @@ -82,24 +68,16 @@ export class LocalEntityStore implements EntityStore { const newVersion = options?.incrementVersion === false ? version : version + 1; - if (normalizedKey.partition.partialValue) { - throw new Error("Entity partition key cannot be partial for set"); - } - - if (normalizedKey.sort && normalizedKey.sort.partialValue) { - throw new Error("Entity sort key cannot be partial for query"); - } - - this.getPartitionMap(entityName, normalizedKey.partition.keyValue).set( - normalizedKey.sort?.keyValue ?? "default", + this.getPartitionMap(entity, key.partition).set( + key.sort?.keyValue ?? "default", { value, version: newVersion, } ); this.props.localConnector.pushWorkflowTask({ - entityName, - key: convertNormalizedEntityKeyToMap(normalizedKey), + entityName: entity.name, + key: convertNormalizedEntityKeyToMap(key), operation: version === 0 ? ("insert" as const) : ("modify" as const), newValue: value, newVersion, @@ -109,14 +87,12 @@ export class LocalEntityStore implements EntityStore { return { version: newVersion }; } - public async delete( - entityName: string, - key: AnyEntityCompositeKey, + protected override async _delete( + entity: AnyEntity, + key: NormalizedEntityCompositeKeyComplete, options?: EntityConsistencyOptions | undefined ): Promise { - const entity = this.getEntity(entityName); - const normalizedKey = normalizeCompositeKey(entity, key); - const item = await this.getWithMetadata(entityName, key); + const item = await this._getWithMetadata(entity, key); if (item) { if (options?.expectedVersion !== undefined) { if (options.expectedVersion !== item.version) { @@ -124,16 +100,16 @@ export class LocalEntityStore implements EntityStore { } } - if (!isCompleteKey(normalizedKey)) { + if (!isCompleteKey(key)) { throw new Error("Entity key cannot be partial for delete"); } - this.getPartitionMap(entityName, normalizedKey.partition.keyValue).delete( - normalizedKey.sort?.keyValue ?? "default" + this.getPartitionMap(entity, key.partition).delete( + key.sort?.keyValue ?? "default" ); this.props.localConnector.pushWorkflowTask({ - entityName, - key: convertNormalizedEntityKeyToMap(normalizedKey), + entityName: entity.name, + key: convertNormalizedEntityKeyToMap(key), operation: "remove" as const, oldValue: item.value, oldVersion: item.version, @@ -141,15 +117,26 @@ export class LocalEntityStore implements EntityStore { } } - public async query( - entityName: string, - queryKey: EntityQueryKey, - request?: EntityQueryOptions - ): Promise> { - const { items, nextToken } = this.orderedEntries( - entityName, - queryKey, - request + protected override async _query( + entity: AnyEntity, + queryKey: NormalizedEntityCompositeKey, + options?: EntityQueryOptions + ): Promise { + const partition = this.getPartitionMap(entity, queryKey.partition); + const entries = partition ? [...partition.entries()] : []; + + const { items, nextToken } = paginateItems( + entries, + (a, b) => + typeof a[0] === "string" + ? a[0].localeCompare(b[0] as string) + : typeof a[0] === "number" + ? a[0] - (b[0] as number) + : 0, + undefined, + undefined, + options?.limit, + options?.nextToken ); // values should be sorted @@ -159,26 +146,22 @@ export class LocalEntityStore implements EntityStore { ({ value: value.value, version: value.version, - } satisfies EntityWithMetadata) + } satisfies EntityWithMetadata) ), nextToken, }; } - public async transactWrite(items: EntityTransactItem[]): Promise { + protected override async _transactWrite( + items: NormalizedEntityTransactItem[] + ): Promise { const keysAndVersions = Object.fromEntries( - items.map((i) => { - const entity = - typeof i.entity === "string" ? this.getEntity(i.entity) : i.entity; - const normalizedKey = normalizeCompositeKey( - entity, - i.operation.operation === "set" ? i.operation.value : i.operation.key - ); + items.map((item) => { return [ - serializeCompositeKey(entity.name, normalizedKey), - i.operation.operation === "condition" - ? i.operation.version - : i.operation.options?.expectedVersion, + serializeCompositeKey(item.entity.name, item.key), + item.operation === "condition" + ? item.version + : item.options?.expectedVersion, ] as const; }) ); @@ -213,82 +196,37 @@ export class LocalEntityStore implements EntityStore { * the state of the condition checks will not be invalided. */ await Promise.all( - items.map(async (i) => { - const entityName = - typeof i.entity === "string" ? i.entity : i.entity.name; - if (i.operation.operation === "set") { - return await this.set( - entityName, - i.operation.value, - i.operation.options + items.map(async (item) => { + if (item.operation === "set") { + return await this._set( + item.entity, + item.value, + item.key, + item.options ); - } else if (i.operation.operation === "delete") { - return await this.delete( - entityName, - i.operation.key, - i.operation.options - ); - } else if (i.operation.operation === "condition") { + } else if (item.operation === "delete") { + return await this._delete(item.entity, item.key, item.options); + } else if (item.operation === "condition") { // no op return; } - return assertNever(i.operation); + return assertNever(item); }) ); } - private getEntity(entityName: string) { - const entity = this.props.entityProvider.getEntity(entityName); - if (!entity) { - throw new Error(`Entity ${entityName} was not found.`); - } - return entity; - } - - private orderedEntries( - entityName: string, - queryKey: EntityQueryKey, - queryOptions?: EntityQueryOptions + private getPartitionMap( + entity: AnyEntity, + partitionKey: NormalizedEntityKeyCompletePart ) { - const entity = this.getEntity(entityName); - const normalizedKey = normalizeCompositeKey(entity, queryKey); - - if (!isCompleteKeyPart(normalizedKey.partition)) { - throw new Error("Entity partition key cannot be partial for query"); - } - - const partition = this.getPartitionMap( - entityName, - normalizedKey.partition.keyValue - ); - const entries = partition ? [...partition.entries()] : []; - - const result = paginateItems( - entries, - (a, b) => - typeof a[0] === "string" - ? a[0].localeCompare(b[0] as string) - : typeof a[0] === "number" - ? a[0] - (b[0] as number) - : 0, - undefined, - undefined, - queryOptions?.limit, - queryOptions?.nextToken - ); - - return result; - } - - private getPartitionMap(entityName: string, partition: EntityKeyType) { - const entity = (this.entities[entityName] ??= new Map< + const _entity = (this.entities[entity.name] ??= new Map< EntityKeyType, - Map> + Map >()); - let partitionMap = entity.get(partition); + let partitionMap = _entity.get(partitionKey.keyValue); if (!partitionMap) { - partitionMap = new Map>(); - entity.set(partition, partitionMap); + partitionMap = new Map(); + _entity.set(partitionKey.keyValue, partitionMap); } return partitionMap; } diff --git a/packages/@eventual/core-runtime/src/providers/entity-provider.ts b/packages/@eventual/core-runtime/src/providers/entity-provider.ts index dcddf6666..3af9cf8e9 100644 --- a/packages/@eventual/core-runtime/src/providers/entity-provider.ts +++ b/packages/@eventual/core-runtime/src/providers/entity-provider.ts @@ -1,4 +1,4 @@ -import { AnyEntity } from "@eventual/core"; +import type { AnyEntity } from "@eventual/core"; import { entities } from "@eventual/core/internal"; import type { WorkflowExecutor } from "../workflow-executor.js"; @@ -15,7 +15,7 @@ export interface EntityProvider { * An executor provider that works with an out of memory store. */ export class GlobalEntityProvider implements EntityProvider { - getEntity(entityName: string): AnyEntity | undefined { + public getEntity(entityName: string): AnyEntity | undefined { return entities().get(entityName); } } diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index b6e4bf7d5..77de51957 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,15 +1,193 @@ import type { AnyEntity, + EntityAttributes, + EntityCompositeKey, EntityCompositeKeyMapFromEntity, + EntityConsistencyOptions, + EntityKeyDefinition, + EntityKeyDefinitionPart, EntityKeyFromEntity, EntityKeyMap, EntityKeyType, - EntityKeyDefinition, - EntityKeyDefinitionPart, + EntityQueryKey, + EntityQueryOptions, + EntityQueryResult, + EntitySetOptions, + EntityTransactItem, + EntityWithMetadata, } from "@eventual/core"; import type { EntityHook } from "@eventual/core/internal"; +import { EntityProvider } from "../providers/entity-provider.js"; + +export abstract class EntityStore implements EntityHook { + constructor(private entityProvider: EntityProvider) {} + + public async get(entityName: string, key: EntityCompositeKey): Promise { + return (await this.getWithMetadata(entityName, key))?.value; + } + + public async getWithMetadata( + entityName: string, + key: EntityCompositeKey + ): Promise { + const entity = this.getEntity(entityName); + const normalizedCompositeKey = normalizeCompositeKey(entity, key); + + if (!isCompleteKey(normalizedCompositeKey)) { + throw new Error("Key cannot be partial for get or getWithMetadata."); + } + + return this._getWithMetadata(entity, normalizedCompositeKey); + } + + protected abstract _getWithMetadata( + entity: AnyEntity, + key: NormalizedEntityCompositeKeyComplete + ): Promise; + + public set( + entityName: string, + value: EntityAttributes, + options?: EntitySetOptions + ): Promise<{ version: number }> { + const entity = this.getEntity(entityName); + const normalizedKey = normalizeCompositeKey(entity, value); + + if (!isCompleteKey(normalizedKey)) { + throw new Error("Key cannot be partial for set."); + } + + return this._set(entity, value, normalizedKey, options); + } + + protected abstract _set( + entity: AnyEntity, + value: EntityAttributes, + key: NormalizedEntityCompositeKeyComplete, + options?: EntitySetOptions + ): Promise<{ version: number }>; + + public delete( + entityName: string, + key: EntityCompositeKey, + options?: EntityConsistencyOptions | undefined + ): Promise { + const entity = this.getEntity(entityName); + const normalizedKey = normalizeCompositeKey(entity, key); + + if (!isCompleteKey(normalizedKey)) { + throw new Error("Key cannot be partial for delete."); + } -export type EntityStore = EntityHook; + return this._delete(entity, normalizedKey, options); + } + + protected abstract _delete( + entity: AnyEntity, + key: NormalizedEntityCompositeKeyComplete, + options?: EntityConsistencyOptions | undefined + ): Promise; + + public query( + entityName: string, + queryKey: EntityQueryKey, + options?: EntityQueryOptions | undefined + ): Promise { + const entity = this.getEntity(entityName); + const normalizedKey = normalizeCompositeKey(entity, queryKey); + + if (!isCompleteKeyPart(normalizedKey.partition)) { + throw new Error("Entity partition key cannot be partial for query"); + } + + return this._query( + entity, + normalizedKey as NormalizedEntityCompositeKey, + options + ); + } + + protected abstract _query( + entity: AnyEntity, + queryKey: NormalizedEntityCompositeKey, + options: EntityQueryOptions | undefined + ): Promise; + + public async transactWrite(items: EntityTransactItem[]): Promise { + return this._transactWrite( + items.map((item): NormalizedEntityTransactItem => { + const entity = + typeof item.entity === "string" + ? this.getEntity(item.entity) + : item.entity; + const keyValue = + item.operation.operation === "set" + ? item.operation.value + : item.operation.key; + const key = normalizeCompositeKey(entity, keyValue); + if (!isCompleteKey(key)) { + throw new Error( + "Entity key cannot be partial for set, delete, or condition operations." + ); + } + + return item.operation.operation === "set" + ? { + operation: "set", + entity, + key, + value: item.operation.value, + options: item.operation.options, + } + : item.operation.operation === "delete" + ? { + operation: "delete", + entity, + key, + options: item.operation.options, + } + : { + operation: "condition", + entity, + key, + version: item.operation.version, + }; + }) + ); + } + + protected abstract _transactWrite( + items: NormalizedEntityTransactItem[] + ): Promise; + + protected getEntity(entityName: string) { + const entity = this.entityProvider.getEntity(entityName); + + if (!entity) { + throw new Error(`Entity ${entityName} was not found.`); + } + return entity; + } +} + +export type NormalizedEntityTransactItem = { + entity: AnyEntity; + key: NormalizedEntityCompositeKeyComplete; +} & ( + | { + operation: "set"; + value: EntityAttributes; + options?: EntitySetOptions; + } + | { + operation: "delete"; + options?: EntityConsistencyOptions; + } + | { + operation: "condition"; + version?: number; + } +); export interface NormalizedEntityKeyPartBase extends EntityKeyDefinitionPart { parts: { field: string; value: EntityKeyType }[]; @@ -57,6 +235,11 @@ export interface NormalizedEntityCompositeKey< sort?: Sort; } +export type NormalizedEntityCompositeKeyComplete = NormalizedEntityCompositeKey< + NormalizedEntityKeyCompletePart, + NormalizedEntityKeyCompletePart +>; + /** * Generate properties for an entity key given the key definition and key values. */ diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index 27b04651f..07a020ed0 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -150,7 +150,7 @@ export function createTransactionExecutor( { entityName: string; key: NormalizedEntityCompositeKey; - value: EntityWithMetadata | undefined; + value: EntityWithMetadata | undefined; } >(); @@ -404,7 +404,7 @@ export function createTransactionExecutor( function resolveEntity( entityName: string, key: NormalizedEntityCompositeKey - ): EventualPromise | undefined> { + ): EventualPromise { const serializedKey = serializeCompositeKey(entityName, key); if (retrievedEntities.has(serializedKey)) { return createResolvedEventualPromise( diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index 38dd5a0d4..392fc29c0 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -116,7 +116,7 @@ test("just set", async () => { test("just delete", async () => { const d1 = entity({ attributes: simpleSchema, partition: ["key"] }); - await store.set(d1.name, [{ key: "1", value: 0 }]); + await store.set(d1.name, { key: "1", value: 0 }); const result = await executor( () => { diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index e8c789b1d..3ee749da1 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -15,7 +15,9 @@ import { } from "./internal/service-spec.js"; import type { ServiceContext } from "./service.js"; -export interface EntityQueryResult { +export interface EntityQueryResult< + Attr extends EntityAttributes = EntityAttributes +> { entries?: EntityWithMetadata[]; /** * Returned when there are more values than the limit allowed to return. @@ -34,9 +36,11 @@ export interface EntityQueryResult { * TODO: support a progressive builder instead of a simple partial. */ export type EntityQueryKey< - Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined > = Partial>; export interface EntityQueryOptions { @@ -266,17 +270,13 @@ export type EntityKeyTuple< * All attributes in either the partition key and the sort key (when present). */ export type EntityCompositeKey< - Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined > = EntityKeyMap | EntityKeyTuple; -export type AnyEntityCompositeKey = EntityCompositeKey< - any, - readonly string[], - readonly string[] | undefined ->; - export type EntityPartitionKey = E extends Entity< any, infer Partition, @@ -301,7 +301,9 @@ export type EntityAttributesFromEntity = E extends Entity< ? Attributes : never; -export interface EntityWithMetadata { +export interface EntityWithMetadata< + Attr extends EntityAttributes = EntityAttributes +> { value: Attr; version: number; } @@ -333,9 +335,9 @@ export type EntityValueMember = | Set | EntityValueMember[]; -export type EntityAttributes = { +export interface EntityAttributes { [key: string]: EntityValueMember; -}; +} /** * Turns a {@link EntityAttributes} type into a Zod {@link z.ZodRawShape}. diff --git a/packages/@eventual/core/src/internal/calls.ts b/packages/@eventual/core/src/internal/calls.ts index 5b09f934f..b73385a24 100644 --- a/packages/@eventual/core/src/internal/calls.ts +++ b/packages/@eventual/core/src/internal/calls.ts @@ -120,7 +120,7 @@ export type EntityOperation< export interface EntityTransactOperation { operation: "transact"; - items: EntityTransactItem[]; + items: EntityTransactItem[]; } export function isBucketCall(a: any): a is BucketCall { diff --git a/packages/@eventual/core/src/internal/entity-hook.ts b/packages/@eventual/core/src/internal/entity-hook.ts index 8b9e8e85f..844d8a015 100644 --- a/packages/@eventual/core/src/internal/entity-hook.ts +++ b/packages/@eventual/core/src/internal/entity-hook.ts @@ -1,4 +1,4 @@ -import type { AnyEntity, Entity, EntityTransactItem } from "../entity.js"; +import type { AnyEntity, EntityTransactItem } from "../entity.js"; declare global { // eslint-disable-next-line no-var @@ -23,7 +23,7 @@ export type EntityHook = { ...args: Parameters ) => ReturnType; } & { - transactWrite(items: EntityTransactItem[]): Promise; + transactWrite(items: EntityTransactItem[]): Promise; }; export function getEntityHook() { From d0ecc943d8dec6961358be9d32d1eaea0246db7b Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 11:18:12 -0500 Subject: [PATCH 14/21] more types --- apps/tests/aws-runtime/test/test-service.ts | 2 +- packages/@eventual/core/src/entity.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 61a5fd09b..6d9903035 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -605,7 +605,7 @@ export const onEntityEvent = subscription( "onEntityEvent", { events: [entityEvent] }, async ({ id }) => { - const value = await counter.get(["default", id]); + const value = await counter.get({ namespace: "default", id }); await counter.set({ namespace: "default", id, n: (value?.n ?? 0) + 1 }); await entitySignal.sendSignal(id); } diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity.ts index 3ee749da1..0cb1862f6 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity.ts @@ -361,7 +361,7 @@ export type EntityZodAttributes = export interface Entity< Attr extends EntityAttributes, Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined + Sort extends EntityCompositeKeyPart | undefined = undefined > extends Omit { kind: "Entity"; key: EntityKeyDefinition; @@ -465,7 +465,7 @@ export const Entity = { export interface EntityOptions< Attr extends EntityAttributes, Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined + Sort extends EntityCompositeKeyPart | undefined = undefined > { attributes: EntityZodAttributes; partition: Partition; @@ -536,7 +536,7 @@ export interface EntityOptions< export function entity< Attr extends EntityAttributes, const Partition extends EntityCompositeKeyPart, - const Sort extends EntityCompositeKeyPart | undefined + const Sort extends EntityCompositeKeyPart | undefined = undefined >( name: string, options: EntityOptions From ab02f33273ae08b73ed9f41e4c2ea8b4ad1c9fc8 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 12:57:45 -0500 Subject: [PATCH 15/21] organization --- .../aws-runtime/src/stores/entity-store.ts | 29 +- .../src/local/stores/entity-store.ts | 22 +- .../src/providers/entity-provider.ts | 6 +- .../core-runtime/src/stores/entity-store.ts | 26 +- .../core-runtime/src/transaction-executor.ts | 8 +- .../@eventual/core/src/{ => entity}/entity.ts | 505 +++--------------- packages/@eventual/core/src/entity/index.ts | 3 + packages/@eventual/core/src/entity/key.ts | 124 +++++ packages/@eventual/core/src/entity/stream.ts | 166 ++++++ packages/@eventual/core/src/index.ts | 2 +- packages/@eventual/core/src/internal/calls.ts | 4 +- .../core/src/internal/entity-hook.ts | 10 +- .../@eventual/core/src/internal/entity.ts | 54 ++ .../@eventual/core/src/internal/global.ts | 8 +- packages/@eventual/core/src/internal/index.ts | 1 + .../core/src/internal/service-spec.ts | 9 +- 16 files changed, 499 insertions(+), 478 deletions(-) rename packages/@eventual/core/src/{ => entity}/entity.ts (54%) create mode 100644 packages/@eventual/core/src/entity/index.ts create mode 100644 packages/@eventual/core/src/entity/key.ts create mode 100644 packages/@eventual/core/src/entity/stream.ts create mode 100644 packages/@eventual/core/src/internal/entity.ts diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 5df2e92c4..280554bc3 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -15,9 +15,8 @@ import { } from "@aws-sdk/client-dynamodb"; import { marshall, unmarshall } from "@aws-sdk/util-dynamodb"; import { - AnyEntity, + Entity, EntityAttributes, - EntityAttributesFromEntity, EntityConsistencyOptions, EntityQueryOptions, EntityQueryResult, @@ -46,12 +45,20 @@ export interface AWSEntityStoreProps { entityProvider: EntityProvider; } -export type EntityAttributesWithVersion = +export type EntityAttributesFromEntity = E extends Entity< + infer Attributes, + any, + any +> + ? Attributes + : never; + +export type EntityAttributesWithVersion = EntityAttributesFromEntity & { __version: number; }; -export type MarshalledEntityAttributesWithVersion = { +export type MarshalledEntityAttributesWithVersion = { [k in keyof EntityAttributesFromEntity]: AttributeValue; } & { __version: AttributeValue.NMember; @@ -63,7 +70,7 @@ export class AWSEntityStore extends EntityStore { } protected override async _getWithMetadata( - entity: AnyEntity, + entity: Entity, key: NormalizedEntityCompositeKeyComplete ): Promise { const item = await this.props.dynamo.send( @@ -97,7 +104,7 @@ export class AWSEntityStore extends EntityStore { } public override async _set( - entity: AnyEntity, + entity: Entity, value: EntityAttributes, key: NormalizedEntityCompositeKeyComplete, options?: EntitySetOptions @@ -122,7 +129,7 @@ export class AWSEntityStore extends EntityStore { } protected override async _delete( - entity: AnyEntity, + entity: Entity, key: NormalizedEntityCompositeKeyComplete, options?: EntityConsistencyOptions | undefined ): Promise { @@ -138,7 +145,7 @@ export class AWSEntityStore extends EntityStore { } private createDeleteRequest( - entity: AnyEntity, + entity: Entity, key: NormalizedEntityCompositeKeyComplete, options?: EntityConsistencyOptions ): Delete { @@ -163,7 +170,7 @@ export class AWSEntityStore extends EntityStore { } protected override async _query( - entity: AnyEntity, + entity: Entity, queryKey: NormalizedEntityCompositeKey, options?: EntityQueryOptions ): Promise { @@ -301,7 +308,7 @@ export class AWSEntityStore extends EntityStore { } private createSetRequest( - entity: AnyEntity, + entity: Entity, value: Attr, key: NormalizedEntityCompositeKey, options?: EntitySetOptions @@ -372,7 +379,7 @@ export class AWSEntityStore extends EntityStore { return marshalledKey; } - private tableName(entity: AnyEntity) { + private tableName(entity: Entity) { return entityServiceTableName(getLazy(this.props.serviceName), entity.name); } } diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index de4919b2e..58db9f479 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -1,8 +1,8 @@ import { - AnyEntity, + Entity, EntityAttributes, EntityConsistencyOptions, - EntityKeyType, + EntityKeyValue, EntityQueryOptions, EntityQueryResult, EntitySetOptions, @@ -33,7 +33,7 @@ export interface LocalEntityStoreProps { export class LocalEntityStore extends EntityStore { private entities: Record< string, - Map> + Map> > = {}; constructor(private props: LocalEntityStoreProps) { @@ -41,7 +41,7 @@ export class LocalEntityStore extends EntityStore { } protected override async _getWithMetadata( - entity: AnyEntity, + entity: Entity, key: NormalizedEntityCompositeKeyComplete ): Promise { return this.getPartitionMap(entity, key.partition).get( @@ -50,7 +50,7 @@ export class LocalEntityStore extends EntityStore { } protected override async _set( - entity: AnyEntity, + entity: Entity, value: EntityAttributes, key: NormalizedEntityCompositeKeyComplete, options?: EntitySetOptions @@ -88,7 +88,7 @@ export class LocalEntityStore extends EntityStore { } protected override async _delete( - entity: AnyEntity, + entity: Entity, key: NormalizedEntityCompositeKeyComplete, options?: EntityConsistencyOptions | undefined ): Promise { @@ -118,7 +118,7 @@ export class LocalEntityStore extends EntityStore { } protected override async _query( - entity: AnyEntity, + entity: Entity, queryKey: NormalizedEntityCompositeKey, options?: EntityQueryOptions ): Promise { @@ -216,16 +216,16 @@ export class LocalEntityStore extends EntityStore { } private getPartitionMap( - entity: AnyEntity, + entity: Entity, partitionKey: NormalizedEntityKeyCompletePart ) { const _entity = (this.entities[entity.name] ??= new Map< - EntityKeyType, - Map + EntityKeyValue, + Map >()); let partitionMap = _entity.get(partitionKey.keyValue); if (!partitionMap) { - partitionMap = new Map(); + partitionMap = new Map(); _entity.set(partitionKey.keyValue, partitionMap); } return partitionMap; diff --git a/packages/@eventual/core-runtime/src/providers/entity-provider.ts b/packages/@eventual/core-runtime/src/providers/entity-provider.ts index 3af9cf8e9..3733e7f8f 100644 --- a/packages/@eventual/core-runtime/src/providers/entity-provider.ts +++ b/packages/@eventual/core-runtime/src/providers/entity-provider.ts @@ -1,4 +1,4 @@ -import type { AnyEntity } from "@eventual/core"; +import type { Entity } from "@eventual/core"; import { entities } from "@eventual/core/internal"; import type { WorkflowExecutor } from "../workflow-executor.js"; @@ -8,14 +8,14 @@ export interface EntityProvider { * * Use {@link WorkflowExecutor}.isStarted to determine if it is already started. */ - getEntity(entityName: string): AnyEntity | undefined; + getEntity(entityName: string): Entity | undefined; } /** * An executor provider that works with an out of memory store. */ export class GlobalEntityProvider implements EntityProvider { - public getEntity(entityName: string): AnyEntity | undefined { + public getEntity(entityName: string): Entity | undefined { return entities().get(entityName); } } diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 77de51957..512fd8063 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,14 +1,12 @@ import type { - AnyEntity, + Entity, EntityAttributes, EntityCompositeKey, EntityCompositeKeyMapFromEntity, EntityConsistencyOptions, - EntityKeyDefinition, - EntityKeyDefinitionPart, EntityKeyFromEntity, EntityKeyMap, - EntityKeyType, + EntityKeyValue, EntityQueryKey, EntityQueryOptions, EntityQueryResult, @@ -16,7 +14,11 @@ import type { EntityTransactItem, EntityWithMetadata, } from "@eventual/core"; -import type { EntityHook } from "@eventual/core/internal"; +import type { + EntityHook, + EntityKeyDefinition, + EntityKeyDefinitionPart, +} from "@eventual/core/internal"; import { EntityProvider } from "../providers/entity-provider.js"; export abstract class EntityStore implements EntityHook { @@ -41,7 +43,7 @@ export abstract class EntityStore implements EntityHook { } protected abstract _getWithMetadata( - entity: AnyEntity, + entity: Entity, key: NormalizedEntityCompositeKeyComplete ): Promise; @@ -61,7 +63,7 @@ export abstract class EntityStore implements EntityHook { } protected abstract _set( - entity: AnyEntity, + entity: Entity, value: EntityAttributes, key: NormalizedEntityCompositeKeyComplete, options?: EntitySetOptions @@ -83,7 +85,7 @@ export abstract class EntityStore implements EntityHook { } protected abstract _delete( - entity: AnyEntity, + entity: Entity, key: NormalizedEntityCompositeKeyComplete, options?: EntityConsistencyOptions | undefined ): Promise; @@ -108,7 +110,7 @@ export abstract class EntityStore implements EntityHook { } protected abstract _query( - entity: AnyEntity, + entity: Entity, queryKey: NormalizedEntityCompositeKey, options: EntityQueryOptions | undefined ): Promise; @@ -171,7 +173,7 @@ export abstract class EntityStore implements EntityHook { } export type NormalizedEntityTransactItem = { - entity: AnyEntity; + entity: Entity; key: NormalizedEntityCompositeKeyComplete; } & ( | { @@ -190,7 +192,7 @@ export type NormalizedEntityTransactItem = { ); export interface NormalizedEntityKeyPartBase extends EntityKeyDefinitionPart { - parts: { field: string; value: EntityKeyType }[]; + parts: { field: string; value: EntityKeyValue }[]; } export type NormalizedEntityKeyPart = @@ -243,7 +245,7 @@ export type NormalizedEntityCompositeKeyComplete = NormalizedEntityCompositeKey< /** * Generate properties for an entity key given the key definition and key values. */ -export function normalizeCompositeKey( +export function normalizeCompositeKey( entity: E | EntityKeyDefinition, key: Partial> ): NormalizedEntityCompositeKey { diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index 07a020ed0..5c5118dc0 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -1,5 +1,5 @@ import { - AnyEntity, + Entity, EntityKeyMap, EntityConditionalOperation, EntityDeleteOperation, @@ -162,7 +162,7 @@ export function createTransactionExecutor( isEntityOperationOfType("delete", eventual) ) { return createEventualPromise< - Awaited> + Awaited> >(async () => { const entity = getEntity(eventual.entityName); // should either by the key or the value object, which can be used as the key @@ -289,7 +289,7 @@ export function createTransactionExecutor( expectedVersion: options?.expectedVersion ?? retrievedVersion, }, - } satisfies EntitySetOperation) + } satisfies EntitySetOperation) : ({ operation: "delete", key: call.params[0], @@ -298,7 +298,7 @@ export function createTransactionExecutor( expectedVersion: options?.expectedVersion ?? retrievedVersion, }, - } satisfies EntityDeleteOperation), + } satisfies EntityDeleteOperation), }; } else { // values that are retrieved only, will be checked using a condition diff --git a/packages/@eventual/core/src/entity.ts b/packages/@eventual/core/src/entity/entity.ts similarity index 54% rename from packages/@eventual/core/src/entity.ts rename to packages/@eventual/core/src/entity/entity.ts index 0cb1862f6..fb98f3fb3 100644 --- a/packages/@eventual/core/src/entity.ts +++ b/packages/@eventual/core/src/entity/entity.ts @@ -3,310 +3,25 @@ import { createEventualCall, EntityCall, EventualCallKind, -} from "./internal/calls.js"; -import { getEntityHook } from "./internal/entity-hook.js"; -import { entities } from "./internal/global.js"; +} from "../internal/calls.js"; +import { getEntityHook } from "../internal/entity-hook.js"; +import { + computeEntityKeyDefinition, + EntityKeyDefinition, +} from "../internal/entity.js"; +import { entities } from "../internal/global.js"; import { EntitySpec, EntityStreamOptions, - EntityStreamSpec, isSourceLocation, SourceLocation, -} from "./internal/service-spec.js"; -import type { ServiceContext } from "./service.js"; - -export interface EntityQueryResult< - Attr extends EntityAttributes = EntityAttributes -> { - entries?: EntityWithMetadata[]; - /** - * Returned when there are more values than the limit allowed to return. - */ - nextToken?: string; -} - -/** - * A partial key that can be used to query an entity. - * - * ```ts - * entity.query({ part1: "val", part2: "val2", sort1: "val" }); - * ``` - * - * TODO: support expressions like between and starts with on sort properties - * TODO: support a progressive builder instead of a simple partial. - */ -export type EntityQueryKey< - Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart - | undefined -> = Partial>; - -export interface EntityQueryOptions { - /** - * Number of items to retrieve - * @default 100 - */ - limit?: number; - nextToken?: string; -} - -export interface EntityConsistencyOptions { - /** - * The expected version of the entity in the entity. - * - * Used to support consistent writes and deletes. - * A value of 0 will only pass if the item is new. - */ - expectedVersion?: number; -} - -export interface EntitySetOptions extends EntityConsistencyOptions { - /** - * Whether or not to update the version on change. - * If this is the first time the value has been set, it will be set to 1. - * - * @default true - version will be incremented. - */ - incrementVersion?: boolean; -} - -export interface EntityStreamContext { - /** - * Information about the containing service. - */ - service: ServiceContext; -} - -export interface EntityStreamHandler< - Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart - | undefined -> { - /** - * Provides the keys, new value - */ - ( - item: EntityStreamItem, - context: EntityStreamContext - ): Promise | void | false; -} - -export interface EntityStreamItemBase< - Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart - | undefined -> { - streamName: string; - entityName: string; - key: EntityKeyMap; -} - -export type EntityStreamItem< - Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart - | undefined -> = - | EntityStreamInsertItem - | EntityStreamModifyItem - | EntityStreamRemoveItem; - -export interface EntityStreamInsertItem< - Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart - | undefined -> extends EntityStreamItemBase { - newValue: Attr; - newVersion: number; - operation: "insert"; -} - -export interface EntityStreamModifyItem< - Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart - | undefined -> extends EntityStreamItemBase { - operation: "modify"; - newValue: Attr; - newVersion: number; - oldValue?: Attr; - oldVersion?: number; -} - -export interface EntityStreamRemoveItem< - Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart - | undefined -> extends EntityStreamItemBase { - operation: "remove"; - oldValue?: Attr; - oldVersion?: number; -} - -export interface EntityStream< - Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined -> extends EntityStreamSpec { - kind: "EntityStream"; - handler: EntityStreamHandler; - sourceLocation?: SourceLocation; -} - -export type AnyEntity = Entity< - any, - readonly string[], - readonly string[] | undefined ->; - -export type EntityKeyType = string | number; - -/** - * A part of the composite key, either the partition or sort key. - */ -export type EntityCompositeKeyPart = - readonly EntityKeyAttribute[]; - -/** - * Any attribute name considered to be a valid key attribute. - */ -export type EntityKeyAttribute = { - [K in keyof Attr]: K extends string - ? // only include attributes that extend string or number - Attr[K] extends EntityKeyType - ? K - : never - : never; -}[keyof Attr]; - -/** - * Extracts an {@link EntityKeyMap} from an {@link Entity} type. - */ -export type EntityCompositeKeyMapFromEntity = - E extends Entity - ? EntityKeyMap - : never; - -/** - * Extracts an {@link EntityCompositeKey} from an {@link Entity} type. - */ -export type EntityKeyFromEntity = E extends Entity< - infer Attributes, - infer Partition, - infer Sort -> - ? EntityCompositeKey - : never; - -/** - * All attributes of the composite key as an object. - * - * ```ts - * { - * partitionAttribute1: "", - * partitionAttribute2: "", - * sortAttribute1: "", - * sortAttribute2: "" - * } - * ``` - */ -export type EntityKeyMap< - Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined -> = { - [k in Partition[number]]: Attr[k]; -} & (Sort extends readonly (keyof Attr)[] - ? { - [k in Sort[number]]: Attr[k]; - } - : // eslint-disable-next-line - {}); - -export type EntityKeyPartialTuple< - Attr extends EntityAttributes, - Attrs extends readonly (keyof Attr)[] -> = Attrs extends readonly [ - infer Head extends keyof Attr, - ...infer Rest extends readonly (keyof Attr)[] -] - ? readonly [Attr[Head], ...EntityKeyPartialTuple] - : Attrs extends readonly [infer Head extends keyof Attr] - ? readonly [Attr[Head]] - : readonly []; - -/** - * All attributes of the composite key as a in order tuple. - * - * ```ts - * [partitionAttribute1, partitionAttribute2, sortAttribute1, sortAttribute2] - * ``` - */ -export type EntityKeyTuple< - Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined -> = Sort extends undefined - ? EntityKeyPartialTuple - : readonly [ - ...EntityKeyPartialTuple, - ...EntityKeyPartialTuple> - ]; - -/** - * All attributes in either the partition key and the sort key (when present). - */ -export type EntityCompositeKey< - Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart - | undefined -> = EntityKeyMap | EntityKeyTuple; - -export type EntityPartitionKey = E extends Entity< - any, - infer Partition, - any -> - ? Partition - : never; - -export type EntitySortKey = E extends Entity< - any, - any, - infer Sort -> - ? Sort - : never; - -export type EntityAttributesFromEntity = E extends Entity< - infer Attributes, - any, - any -> - ? Attributes - : never; - -export interface EntityWithMetadata< - Attr extends EntityAttributes = EntityAttributes -> { - value: Attr; - version: number; -} +} from "../internal/service-spec.js"; +import { + EntityCompositeKey, + EntityCompositeKeyPart, + EntityQueryKey, +} from "./key.js"; +import { EntityStream, EntityStreamHandler } from "./stream.js"; export type EntityBinaryMember = | ArrayBuffer @@ -342,7 +57,7 @@ export interface EntityAttributes { /** * Turns a {@link EntityAttributes} type into a Zod {@link z.ZodRawShape}. */ -type EntityZodShape = { +export type EntityZodShape = { [key in keyof Attr]: z.ZodType; }; @@ -359,9 +74,11 @@ export type EntityZodAttributes = * @see entity */ export interface Entity< - Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = undefined + Attr extends EntityAttributes = any, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined > extends Omit { kind: "Entity"; key: EntityKeyDefinition; @@ -419,32 +136,50 @@ export interface Entity< ): EntityStream; } -export interface EntityTransactItem { - entity: E | string; +export interface EntityTransactItem< + Attr extends EntityAttributes = any, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> { + entity: Entity | string; operation: - | EntitySetOperation - | EntityDeleteOperation - | EntityConditionalOperation; + | EntitySetOperation + | EntityDeleteOperation + | EntityConditionalOperation; } -export interface EntitySetOperation { +export interface EntitySetOperation { operation: "set"; - value: EntityAttributesFromEntity; + value: Attr; options?: EntitySetOptions; } -export interface EntityDeleteOperation { +export interface EntityDeleteOperation< + Attr extends EntityAttributes = any, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> { operation: "delete"; - key: EntityKeyFromEntity; + key: EntityCompositeKey; options?: EntitySetOptions; } /** * Used in transactions, cancels the transaction if the key's version does not match. */ -export interface EntityConditionalOperation { +export interface EntityConditionalOperation< + Attr extends EntityAttributes = any, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> { operation: "condition"; - key: EntityKeyFromEntity; + key: EntityCompositeKey; version?: number; } @@ -688,116 +423,48 @@ export function entity< return entity; } -export function entityStream< - Attr extends EntityAttributes, - const Partition extends EntityCompositeKeyPart, - const Sort extends EntityCompositeKeyPart | undefined ->( - ...args: - | [ - name: string, - entity: Entity, - handler: EntityStreamHandler - ] - | [ - name: string, - entity: Entity, - options: EntityStreamOptions, - handler: EntityStreamHandler - ] - | [ - sourceLocation: SourceLocation, - name: string, - entity: Entity, - handler: EntityStreamHandler - ] - | [ - sourceLocation: SourceLocation, - name: string, - entity: Entity, - options: EntityStreamOptions, - handler: EntityStreamHandler - ] -) { - const [sourceLocation, name, entity, options, handler] = - args.length === 3 - ? [, args[0], args[1], , args[2]] - : args.length === 5 - ? args - : isSourceLocation(args[0]) - ? [ - args[0], - args[1] as string, - args[2] as Entity, - , - args[3], - ] - : [ - , - args[0] as string, - args[1] as Entity, - args[2] as EntityStreamOptions, - args[3], - ]; - - return sourceLocation - ? options - ? // @ts-ignore - entity.stream(sourceLocation, name, options, handler) - : // @ts-ignore - entity.stream(sourceLocation, name, handler) - : options - ? entity.stream(name, options, handler) - : entity.stream(name, handler); +export interface EntityQueryResult< + Attr extends EntityAttributes = EntityAttributes +> { + entries?: EntityWithMetadata[]; + /** + * Returned when there are more values than the limit allowed to return. + */ + nextToken?: string; } -export interface EntityKeyDefinitionPart { - type: "number" | "string"; - keyAttribute: string; - attributes: readonly string[]; +export interface EntityQueryOptions { + /** + * Number of items to retrieve + * @default 100 + */ + limit?: number; + nextToken?: string; } -export interface EntityKeyDefinition { - partition: EntityKeyDefinitionPart; - sort?: EntityKeyDefinitionPart; +export interface EntityConsistencyOptions { + /** + * The expected version of the entity in the entity. + * + * Used to support consistent writes and deletes. + * A value of 0 will only pass if the item is new. + */ + expectedVersion?: number; } -function computeEntityKeyDefinition( - attributes: z.ZodObject>, - partition: EntityCompositeKeyPart, - sort?: EntityCompositeKeyPart -): EntityKeyDefinition { - const entityZodShape = attributes.shape; - - return { - partition: formatKeyDefinitionPart(partition), - sort: sort ? formatKeyDefinitionPart(sort) : undefined, - }; - - function formatKeyDefinitionPart( - keyAttributes: EntityCompositeKeyPart - ): EntityKeyDefinitionPart { - const [head, ...tail] = keyAttributes; - - if (!head) { - throw new Error( - "Entity Key Part must contain at least one segment. Sort Key may be undefined." - ); - } - - // the value will be a number if there is a single part to the composite key part and the value is already a number. - // else a string will be formatted - const type = - tail.length === 0 && entityZodShape[head] instanceof z.ZodNumber - ? "number" - : "string"; - - const attribute = keyAttributes.join("|"); +export interface EntitySetOptions extends EntityConsistencyOptions { + /** + * Whether or not to update the version on change. + * If this is the first time the value has been set, it will be set to 1. + * + * @default true - version will be incremented. + */ + incrementVersion?: boolean; +} - return { - type, - keyAttribute: attribute, - attributes: keyAttributes, - }; - } +export interface EntityWithMetadata< + Attr extends EntityAttributes = EntityAttributes +> { + value: Attr; + version: number; } diff --git a/packages/@eventual/core/src/entity/index.ts b/packages/@eventual/core/src/entity/index.ts new file mode 100644 index 000000000..03f448212 --- /dev/null +++ b/packages/@eventual/core/src/entity/index.ts @@ -0,0 +1,3 @@ +export * from "./entity.js"; +export * from "./key.js"; +export * from "./stream.js"; diff --git a/packages/@eventual/core/src/entity/key.ts b/packages/@eventual/core/src/entity/key.ts new file mode 100644 index 000000000..0e525fc9b --- /dev/null +++ b/packages/@eventual/core/src/entity/key.ts @@ -0,0 +1,124 @@ +import type { Entity, EntityAttributes } from "./entity.js"; + +export type EntityKeyValue = string | number; + +/** + * A part of the composite key, either the partition or sort key. + */ +export type EntityCompositeKeyPart = + readonly EntityKeyAttribute[]; + +/** + * Any attribute name considered to be a valid key attribute. + */ +export type EntityKeyAttribute = { + [K in keyof Attr]: K extends string + ? // only include attributes that extend string or number + Attr[K] extends EntityKeyValue + ? K + : never + : never; +}[keyof Attr]; + +/** + * Extracts an {@link EntityKeyMap} from an {@link Entity} type. + */ +export type EntityCompositeKeyMapFromEntity = + E extends Entity + ? EntityKeyMap + : never; + +/** + * Extracts an {@link EntityCompositeKey} from an {@link Entity} type. + */ +export type EntityKeyFromEntity = E extends Entity< + infer Attributes, + infer Partition, + infer Sort +> + ? EntityCompositeKey + : never; + +/** + * All attributes of the composite key as an object. + * + * ```ts + * { + * partitionAttribute1: "", + * partitionAttribute2: "", + * sortAttribute1: "", + * sortAttribute2: "" + * } + * ``` + */ +export type EntityKeyMap< + Attr extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined +> = { + [k in Partition[number]]: Attr[k]; +} & (Sort extends readonly (keyof Attr)[] + ? { + [k in Sort[number]]: Attr[k]; + } + : // eslint-disable-next-line + {}); + +export type EntityKeyPartialTuple< + Attr extends EntityAttributes, + Attrs extends readonly (keyof Attr)[] +> = Attrs extends readonly [ + infer Head extends keyof Attr, + ...infer Rest extends readonly (keyof Attr)[] +] + ? readonly [Attr[Head], ...EntityKeyPartialTuple] + : Attrs extends readonly [infer Head extends keyof Attr] + ? readonly [Attr[Head]] + : readonly []; + +/** + * All attributes of the composite key as a in order tuple. + * + * ```ts + * [partitionAttribute1, partitionAttribute2, sortAttribute1, sortAttribute2] + * ``` + */ +export type EntityKeyTuple< + Attr extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined +> = Sort extends undefined + ? EntityKeyPartialTuple + : readonly [ + ...EntityKeyPartialTuple, + ...EntityKeyPartialTuple> + ]; + +/** + * All attributes in either the partition key and the sort key (when present). + */ +export type EntityCompositeKey< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> = EntityKeyMap | EntityKeyTuple; + +/** + * A partial key that can be used to query an entity. + * + * ```ts + * entity.query({ part1: "val", part2: "val2", sort1: "val" }); + * ``` + * + * TODO: support expressions like between and starts with on sort properties + * TODO: support a progressive builder instead of a simple partial. + */ +export type EntityQueryKey< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> = Partial>; diff --git a/packages/@eventual/core/src/entity/stream.ts b/packages/@eventual/core/src/entity/stream.ts new file mode 100644 index 000000000..1b74c978e --- /dev/null +++ b/packages/@eventual/core/src/entity/stream.ts @@ -0,0 +1,166 @@ +import { + EntityStreamOptions, + EntityStreamSpec, + SourceLocation, + isSourceLocation, +} from "../internal/service-spec.js"; +import { ServiceContext } from "../service.js"; +import { Entity, EntityAttributes } from "./entity.js"; +import { EntityCompositeKeyPart, EntityKeyMap } from "./key.js"; + +export interface EntityStreamContext { + /** + * Information about the containing service. + */ + service: ServiceContext; +} + +export interface EntityStreamHandler< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> { + /** + * Provides the keys, new value + */ + ( + item: EntityStreamItem, + context: EntityStreamContext + ): Promise | void | false; +} + +export interface EntityStreamItemBase< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> { + streamName: string; + entityName: string; + key: EntityKeyMap; +} + +export type EntityStreamItem< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> = + | EntityStreamInsertItem + | EntityStreamModifyItem + | EntityStreamRemoveItem; + +export interface EntityStreamInsertItem< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> extends EntityStreamItemBase { + newValue: Attr; + newVersion: number; + operation: "insert"; +} + +export interface EntityStreamModifyItem< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> extends EntityStreamItemBase { + operation: "modify"; + newValue: Attr; + newVersion: number; + oldValue?: Attr; + oldVersion?: number; +} + +export interface EntityStreamRemoveItem< + Attr extends EntityAttributes = EntityAttributes, + Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined = + | EntityCompositeKeyPart + | undefined +> extends EntityStreamItemBase { + operation: "remove"; + oldValue?: Attr; + oldVersion?: number; +} + +export interface EntityStream< + Attr extends EntityAttributes, + Partition extends EntityCompositeKeyPart, + Sort extends EntityCompositeKeyPart | undefined +> extends EntityStreamSpec { + kind: "EntityStream"; + handler: EntityStreamHandler; + sourceLocation?: SourceLocation; +} + +export function entityStream< + Attr extends EntityAttributes, + const Partition extends EntityCompositeKeyPart, + const Sort extends EntityCompositeKeyPart | undefined +>( + ...args: + | [ + name: string, + entity: Entity, + handler: EntityStreamHandler + ] + | [ + name: string, + entity: Entity, + options: EntityStreamOptions, + handler: EntityStreamHandler + ] + | [ + sourceLocation: SourceLocation, + name: string, + entity: Entity, + handler: EntityStreamHandler + ] + | [ + sourceLocation: SourceLocation, + name: string, + entity: Entity, + options: EntityStreamOptions, + handler: EntityStreamHandler + ] +) { + const [sourceLocation, name, entity, options, handler] = + args.length === 3 + ? [, args[0], args[1], , args[2]] + : args.length === 5 + ? args + : isSourceLocation(args[0]) + ? [ + args[0], + args[1] as string, + args[2] as Entity, + , + args[3], + ] + : [ + , + args[0] as string, + args[1] as Entity, + args[2] as EntityStreamOptions, + args[3], + ]; + + return sourceLocation + ? options + ? // @ts-ignore + entity.stream(sourceLocation, name, options, handler) + : // @ts-ignore + entity.stream(sourceLocation, name, handler) + : options + ? entity.stream(name, options, handler) + : entity.stream(name, handler); +} diff --git a/packages/@eventual/core/src/index.ts b/packages/@eventual/core/src/index.ts index bbbc3dea3..93742f78d 100644 --- a/packages/@eventual/core/src/index.ts +++ b/packages/@eventual/core/src/index.ts @@ -1,7 +1,7 @@ export * from "./await-time.js"; export * from "./bucket.js"; export * from "./condition.js"; -export * from "./entity.js"; +export * from "./entity/index.js"; export * from "./error.js"; export * from "./event.js"; export * from "./execution.js"; diff --git a/packages/@eventual/core/src/internal/calls.ts b/packages/@eventual/core/src/internal/calls.ts index b73385a24..76e6eda74 100644 --- a/packages/@eventual/core/src/internal/calls.ts +++ b/packages/@eventual/core/src/internal/calls.ts @@ -1,6 +1,6 @@ import type { Bucket } from "../bucket.js"; import type { ConditionPredicate } from "../condition.js"; -import type { AnyEntity, EntityTransactItem } from "../entity.js"; +import type { Entity, EntityTransactItem } from "../entity/entity.js"; import type { EventEnvelope } from "../event.js"; import type { DurationSchedule, Schedule } from "../schedule.js"; import type { WorkflowExecutionOptions } from "../workflow.js"; @@ -114,7 +114,7 @@ export type EntityOperation< ? { operation: Op; entityName: string; - params: Parameters; + params: Parameters; } : EntityTransactOperation; diff --git a/packages/@eventual/core/src/internal/entity-hook.ts b/packages/@eventual/core/src/internal/entity-hook.ts index 844d8a015..9897de75a 100644 --- a/packages/@eventual/core/src/internal/entity-hook.ts +++ b/packages/@eventual/core/src/internal/entity-hook.ts @@ -1,4 +1,4 @@ -import type { AnyEntity, EntityTransactItem } from "../entity.js"; +import type { Entity, EntityTransactItem } from "../entity/entity.js"; declare global { // eslint-disable-next-line no-var @@ -7,8 +7,8 @@ declare global { export type EntityMethod = Exclude< { - [k in keyof AnyEntity]: [AnyEntity[k]] extends [Function] ? k : never; - }[keyof AnyEntity], + [k in keyof Entity]: [Entity[k]] extends [Function] ? k : never; + }[keyof Entity], "partition" | "sort" | "stream" | undefined >; @@ -20,8 +20,8 @@ export type EntityMethod = Exclude< export type EntityHook = { [K in EntityMethod]: ( entityName: string, - ...args: Parameters - ) => ReturnType; + ...args: Parameters + ) => ReturnType; } & { transactWrite(items: EntityTransactItem[]): Promise; }; diff --git a/packages/@eventual/core/src/internal/entity.ts b/packages/@eventual/core/src/internal/entity.ts new file mode 100644 index 000000000..1910de65a --- /dev/null +++ b/packages/@eventual/core/src/internal/entity.ts @@ -0,0 +1,54 @@ +import { z } from "zod"; +import { EntityAttributes, EntityZodShape } from "../entity/entity.js"; +import { EntityCompositeKeyPart } from "../entity/key.js"; + +export interface EntityKeyDefinitionPart { + type: "number" | "string"; + keyAttribute: string; + attributes: readonly string[]; +} + +export interface EntityKeyDefinition { + partition: EntityKeyDefinitionPart; + sort?: EntityKeyDefinitionPart; +} + +export function computeEntityKeyDefinition( + attributes: z.ZodObject>, + partition: EntityCompositeKeyPart, + sort?: EntityCompositeKeyPart +): EntityKeyDefinition { + const entityZodShape = attributes.shape; + + return { + partition: formatKeyDefinitionPart(partition), + sort: sort ? formatKeyDefinitionPart(sort) : undefined, + }; + + function formatKeyDefinitionPart( + keyAttributes: EntityCompositeKeyPart + ): EntityKeyDefinitionPart { + const [head, ...tail] = keyAttributes; + + if (!head) { + throw new Error( + "Entity Key Part must contain at least one segment. Sort Key may be undefined." + ); + } + + // the value will be a number if there is a single part to the composite key part and the value is already a number. + // else a string will be formatted + const type = + tail.length === 0 && entityZodShape[head] instanceof z.ZodNumber + ? "number" + : "string"; + + const attribute = keyAttributes.join("|"); + + return { + type, + keyAttribute: attribute, + attributes: keyAttributes, + }; + } +} diff --git a/packages/@eventual/core/src/internal/global.ts b/packages/@eventual/core/src/internal/global.ts index 1f78e2057..c5b8b217c 100644 --- a/packages/@eventual/core/src/internal/global.ts +++ b/packages/@eventual/core/src/internal/global.ts @@ -1,6 +1,6 @@ import type { AsyncLocalStorage } from "async_hooks"; import type { Bucket } from "../bucket.js"; -import type { AnyEntity } from "../entity.js"; +import type { Entity } from "../entity/entity.js"; import type { Event } from "../event.js"; import type { AnyCommand } from "../http/command.js"; import type { EventualServiceClient } from "../service-client.js"; @@ -33,7 +33,7 @@ declare global { /** * A simple key value store that work efficiently within eventual. */ - entities?: Map; + entities?: Map; /** * A data bucket within eventual. */ @@ -80,8 +80,8 @@ export const events = (): Map => export const subscriptions = (): Subscription[] => (globalThis._eventual.subscriptions ??= []); -export const entities = (): Map => - (globalThis._eventual.entities ??= new Map()); +export const entities = (): Map => + (globalThis._eventual.entities ??= new Map()); export const buckets = (): Map => (globalThis._eventual.buckets ??= new Map()); diff --git a/packages/@eventual/core/src/internal/index.ts b/packages/@eventual/core/src/internal/index.ts index 990afda07..037657d52 100644 --- a/packages/@eventual/core/src/internal/index.ts +++ b/packages/@eventual/core/src/internal/index.ts @@ -1,6 +1,7 @@ export * from "./bucket-hook.js"; export * from "./calls.js"; export * from "./entity-hook.js"; +export * from "./entity.js"; export * from "./eventual-hook.js"; export * from "./eventual-service.js"; export * from "./flags.js"; diff --git a/packages/@eventual/core/src/internal/service-spec.ts b/packages/@eventual/core/src/internal/service-spec.ts index 923b8a857..4d34c3c65 100644 --- a/packages/@eventual/core/src/internal/service-spec.ts +++ b/packages/@eventual/core/src/internal/service-spec.ts @@ -1,4 +1,6 @@ import type openapi from "openapi3-ts"; +import { EntityAttributes } from "../entity/entity.js"; +import { EntityCompositeKeyPart, EntityQueryKey } from "../entity/key.js"; import type { FunctionRuntimeProps } from "../function-props.js"; import type { HttpMethod } from "../http-method.js"; import type { RestParams } from "../http/command.js"; @@ -7,13 +9,8 @@ import type { SubscriptionFilter, SubscriptionRuntimeProps, } from "../subscription.js"; +import { EntityKeyDefinition } from "./entity.js"; import type { TaskSpec } from "./task.js"; -import { - EntityAttributes, - EntityCompositeKeyPart, - EntityQueryKey, - EntityKeyDefinition, -} from "../entity.js"; /** * Specification for an Eventual application From 54a08c767b251e96aaf84237236944f3b3a019d8 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 13:20:58 -0500 Subject: [PATCH 16/21] more cleanup --- .../src/local/stores/entity-store.ts | 10 +- .../core-runtime/src/stores/entity-store.ts | 30 +++--- .../core-runtime/src/transaction-executor.ts | 4 +- packages/@eventual/core-runtime/src/utils.ts | 10 +- .../test/transaction-executor.test.ts | 6 +- packages/@eventual/core/src/entity/entity.ts | 63 +++++-------- packages/@eventual/core/src/entity/key.ts | 93 ++++++++----------- packages/@eventual/core/src/entity/stream.ts | 52 +++++------ .../@eventual/core/src/internal/entity.ts | 8 +- .../core/src/internal/service-spec.ts | 16 ++-- 10 files changed, 132 insertions(+), 160 deletions(-) diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index 58db9f479..ced4d13fc 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -2,7 +2,7 @@ import { Entity, EntityAttributes, EntityConsistencyOptions, - EntityKeyValue, + KeyValue, EntityQueryOptions, EntityQueryResult, EntitySetOptions, @@ -33,7 +33,7 @@ export interface LocalEntityStoreProps { export class LocalEntityStore extends EntityStore { private entities: Record< string, - Map> + Map> > = {}; constructor(private props: LocalEntityStoreProps) { @@ -220,12 +220,12 @@ export class LocalEntityStore extends EntityStore { partitionKey: NormalizedEntityKeyCompletePart ) { const _entity = (this.entities[entity.name] ??= new Map< - EntityKeyValue, - Map + KeyValue, + Map >()); let partitionMap = _entity.get(partitionKey.keyValue); if (!partitionMap) { - partitionMap = new Map(); + partitionMap = new Map(); _entity.set(partitionKey.keyValue, partitionMap); } return partitionMap; diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 512fd8063..2b68c17bb 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,13 +1,11 @@ import type { Entity, EntityAttributes, - EntityCompositeKey, - EntityCompositeKeyMapFromEntity, + CompositeKey, EntityConsistencyOptions, - EntityKeyFromEntity, - EntityKeyMap, - EntityKeyValue, - EntityQueryKey, + KeyMap, + KeyValue, + QueryKey, EntityQueryOptions, EntityQueryResult, EntitySetOptions, @@ -24,13 +22,13 @@ import { EntityProvider } from "../providers/entity-provider.js"; export abstract class EntityStore implements EntityHook { constructor(private entityProvider: EntityProvider) {} - public async get(entityName: string, key: EntityCompositeKey): Promise { + public async get(entityName: string, key: CompositeKey): Promise { return (await this.getWithMetadata(entityName, key))?.value; } public async getWithMetadata( entityName: string, - key: EntityCompositeKey + key: CompositeKey ): Promise { const entity = this.getEntity(entityName); const normalizedCompositeKey = normalizeCompositeKey(entity, key); @@ -71,7 +69,7 @@ export abstract class EntityStore implements EntityHook { public delete( entityName: string, - key: EntityCompositeKey, + key: CompositeKey, options?: EntityConsistencyOptions | undefined ): Promise { const entity = this.getEntity(entityName); @@ -92,7 +90,7 @@ export abstract class EntityStore implements EntityHook { public query( entityName: string, - queryKey: EntityQueryKey, + queryKey: QueryKey, options?: EntityQueryOptions | undefined ): Promise { const entity = this.getEntity(entityName); @@ -192,7 +190,7 @@ export type NormalizedEntityTransactItem = { ); export interface NormalizedEntityKeyPartBase extends EntityKeyDefinitionPart { - parts: { field: string; value: EntityKeyValue }[]; + parts: { field: string; value: KeyValue }[]; } export type NormalizedEntityKeyPart = @@ -247,19 +245,17 @@ export type NormalizedEntityCompositeKeyComplete = NormalizedEntityCompositeKey< */ export function normalizeCompositeKey( entity: E | EntityKeyDefinition, - key: Partial> + key: Partial ): NormalizedEntityCompositeKey { const keyDef = "partition" in entity ? entity : entity.key; const partitionCompositeKey = formatNormalizedPart(keyDef.partition, (p, i) => - Array.isArray(key) ? key[i] : (key as EntityCompositeKeyMapFromEntity)[p] + Array.isArray(key) ? key[i] : (key as KeyMap)[p] ); const sortCompositeKey = keyDef.sort ? formatNormalizedPart(keyDef.sort, (p, i) => - Array.isArray(key) - ? key[i] - : (key as EntityCompositeKeyMapFromEntity)[p] + Array.isArray(key) ? key[i] : (key as KeyMap)[p] ) : undefined; @@ -300,7 +296,7 @@ function formatNormalizedPart( export function convertNormalizedEntityKeyToMap( key: NormalizedEntityCompositeKey -): EntityKeyMap { +): KeyMap { console.log("input key", JSON.stringify(key)); const generatedKey = Object.fromEntries([ ...key.partition.parts.map(({ field, value }) => [field, value]), diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index 5c5118dc0..04785b1ed 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -1,6 +1,6 @@ import { Entity, - EntityKeyMap, + KeyMap, EntityConditionalOperation, EntityDeleteOperation, EntitySetOperation, @@ -91,7 +91,7 @@ export interface TransactionExecutor { interface TransactionFailedItem { entityName: string; - key: EntityKeyMap; + key: KeyMap; } export function createTransactionExecutor( diff --git a/packages/@eventual/core-runtime/src/utils.ts b/packages/@eventual/core-runtime/src/utils.ts index ef84e7b63..c7ecc1f1f 100644 --- a/packages/@eventual/core-runtime/src/utils.ts +++ b/packages/@eventual/core-runtime/src/utils.ts @@ -2,8 +2,8 @@ import type { BucketNotificationEvent, Entity, EntityAttributes, - EntityCompositeKeyPart, - EntityKeyTuple, + CompositeKeyPart, + KeyTuple, EntityStreamItem, } from "@eventual/core"; import type { @@ -74,7 +74,7 @@ export function serializeCompositeKey( export function deserializeCompositeKey( sKey: string -): [string, EntityKeyTuple] { +): [string, KeyTuple] { const [name, partition, sort] = sKey.split("|") as [string, string, string]; return [name, sort ? [partition, sort] : [partition]]; } @@ -91,8 +91,8 @@ export function isBucketNotificationEvent( export function entityStreamMatchesItem< Attr extends EntityAttributes, - const Partition extends EntityCompositeKeyPart, - const Sort extends EntityCompositeKeyPart | undefined + const Partition extends CompositeKeyPart, + const Sort extends CompositeKeyPart | undefined >( entity: Entity, item: EntityStreamItem, diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index 392fc29c0..6ebe99d86 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -1,6 +1,6 @@ import { EntityAttributes, - EntityCompositeKeyPart, + CompositeKeyPart, EntityOptions, TransactionContext, entity as _entity, @@ -25,8 +25,8 @@ const entity = (() => { let n = 0; return < Attr extends EntityAttributes, - const Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - const Sort extends EntityCompositeKeyPart | undefined = undefined + const Partition extends CompositeKeyPart = CompositeKeyPart, + const Sort extends CompositeKeyPart | undefined = undefined >( options: EntityOptions ) => { diff --git a/packages/@eventual/core/src/entity/entity.ts b/packages/@eventual/core/src/entity/entity.ts index fb98f3fb3..f34888dd7 100644 --- a/packages/@eventual/core/src/entity/entity.ts +++ b/packages/@eventual/core/src/entity/entity.ts @@ -16,12 +16,8 @@ import { isSourceLocation, SourceLocation, } from "../internal/service-spec.js"; -import { - EntityCompositeKey, - EntityCompositeKeyPart, - EntityQueryKey, -} from "./key.js"; -import { EntityStream, EntityStreamHandler } from "./stream.js"; +import type { CompositeKey, CompositeKeyPart, QueryKey } from "./key.js"; +import type { EntityStream, EntityStreamHandler } from "./stream.js"; export type EntityBinaryMember = | ArrayBuffer @@ -61,13 +57,6 @@ export type EntityZodShape = { [key in keyof Attr]: z.ZodType; }; -/** - * A map of zod types or a {@link z.ZodObject}. - */ -export type EntityZodAttributes = - | z.ZodObject> - | EntityZodShape; - /** * An eventual entity. * @@ -75,9 +64,9 @@ export type EntityZodAttributes = */ export interface Entity< Attr extends EntityAttributes = any, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > extends Omit { kind: "Entity"; @@ -90,9 +79,7 @@ export interface Entity< * * @param key - key or {@link CompositeKey} of the value to retrieve. */ - get( - key: EntityCompositeKey - ): Promise; + get(key: CompositeKey): Promise; /** * Get a value and metadata like version. * If your values use composite keys, the namespace must be provided. @@ -100,7 +87,7 @@ export interface Entity< * @param key - key or {@link CompositeKey} of the value to retrieve. */ getWithMetadata( - key: EntityCompositeKey + key: CompositeKey ): Promise | undefined>; /** * Sets or updates a value within an entity and optionally a namespace. @@ -113,7 +100,7 @@ export interface Entity< * Deletes a single entry within an entity and namespace. */ delete( - key: EntityCompositeKey, + key: CompositeKey, options?: EntityConsistencyOptions ): Promise; /** @@ -122,7 +109,7 @@ export interface Entity< * If namespace is not provided, only values which do not use composite keys will be returned. */ query( - key: EntityQueryKey, + key: QueryKey, request?: EntityQueryOptions ): Promise>; stream( @@ -138,9 +125,9 @@ export interface Entity< export interface EntityTransactItem< Attr extends EntityAttributes = any, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > { entity: Entity | string; @@ -158,13 +145,13 @@ export interface EntitySetOperation { export interface EntityDeleteOperation< Attr extends EntityAttributes = any, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > { operation: "delete"; - key: EntityCompositeKey; + key: CompositeKey; options?: EntitySetOptions; } @@ -173,13 +160,13 @@ export interface EntityDeleteOperation< */ export interface EntityConditionalOperation< Attr extends EntityAttributes = any, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > { operation: "condition"; - key: EntityCompositeKey; + key: CompositeKey; version?: number; } @@ -199,10 +186,10 @@ export const Entity = { export interface EntityOptions< Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = undefined + Partition extends CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = undefined > { - attributes: EntityZodAttributes; + attributes: z.ZodObject> | EntityZodShape; partition: Partition; sort?: Sort; } @@ -270,8 +257,8 @@ export interface EntityOptions< */ export function entity< Attr extends EntityAttributes, - const Partition extends EntityCompositeKeyPart, - const Sort extends EntityCompositeKeyPart | undefined = undefined + const Partition extends CompositeKeyPart, + const Sort extends CompositeKeyPart | undefined = undefined >( name: string, options: EntityOptions diff --git a/packages/@eventual/core/src/entity/key.ts b/packages/@eventual/core/src/entity/key.ts index 0e525fc9b..705ccef5d 100644 --- a/packages/@eventual/core/src/entity/key.ts +++ b/packages/@eventual/core/src/entity/key.ts @@ -1,43 +1,30 @@ -import type { Entity, EntityAttributes } from "./entity.js"; +import type { EntityAttributes } from "./entity.js"; -export type EntityKeyValue = string | number; +export type KeyValue = string | number; /** - * A part of the composite key, either the partition or sort key. + * Composite Key - Whole key used to get and set an entity, made up of partition and sort key parts containing one or more attribute. + * Key Part - partition or sort key of the composite key, each made up of one or more key attribute. + * Key Attribute - A single attribute used as a segment of a key part. */ -export type EntityCompositeKeyPart = - readonly EntityKeyAttribute[]; /** * Any attribute name considered to be a valid key attribute. */ -export type EntityKeyAttribute = { +export type KeyAttribute = { [K in keyof Attr]: K extends string ? // only include attributes that extend string or number - Attr[K] extends EntityKeyValue + Attr[K] extends KeyValue ? K : never : never; }[keyof Attr]; /** - * Extracts an {@link EntityKeyMap} from an {@link Entity} type. - */ -export type EntityCompositeKeyMapFromEntity = - E extends Entity - ? EntityKeyMap - : never; - -/** - * Extracts an {@link EntityCompositeKey} from an {@link Entity} type. + * A part of the composite key, either the partition or sort key. */ -export type EntityKeyFromEntity = E extends Entity< - infer Attributes, - infer Partition, - infer Sort -> - ? EntityCompositeKey - : never; +export type CompositeKeyPart = + readonly KeyAttribute[]; /** * All attributes of the composite key as an object. @@ -51,29 +38,31 @@ export type EntityKeyFromEntity = E extends Entity< * } * ``` */ -export type EntityKeyMap< - Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined +export type KeyMap< + Attr extends EntityAttributes = any, + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart + | undefined > = { [k in Partition[number]]: Attr[k]; -} & (Sort extends readonly (keyof Attr)[] +} & (Sort extends CompositeKeyPart ? { [k in Sort[number]]: Attr[k]; } : // eslint-disable-next-line {}); -export type EntityKeyPartialTuple< +export type KeyPartialTuple< Attr extends EntityAttributes, Attrs extends readonly (keyof Attr)[] -> = Attrs extends readonly [ - infer Head extends keyof Attr, - ...infer Rest extends readonly (keyof Attr)[] -] - ? readonly [Attr[Head], ...EntityKeyPartialTuple] - : Attrs extends readonly [infer Head extends keyof Attr] - ? readonly [Attr[Head]] +> = Attrs extends [] + ? readonly [] + : Attrs extends readonly [ + infer Head extends keyof Attr, + ...infer Rest extends readonly (keyof Attr)[] + ] + ? readonly [Attr[Head], ...KeyPartialTuple] : readonly []; /** @@ -83,27 +72,27 @@ export type EntityKeyPartialTuple< * [partitionAttribute1, partitionAttribute2, sortAttribute1, sortAttribute2] * ``` */ -export type EntityKeyTuple< +export type KeyTuple< Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined + Partition extends CompositeKeyPart, + Sort extends CompositeKeyPart | undefined > = Sort extends undefined - ? EntityKeyPartialTuple + ? KeyPartialTuple : readonly [ - ...EntityKeyPartialTuple, - ...EntityKeyPartialTuple> + ...KeyPartialTuple, + ...KeyPartialTuple> ]; /** * All attributes in either the partition key and the sort key (when present). */ -export type EntityCompositeKey< +export type CompositeKey< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined -> = EntityKeyMap | EntityKeyTuple; +> = KeyMap | KeyTuple; /** * A partial key that can be used to query an entity. @@ -115,10 +104,10 @@ export type EntityCompositeKey< * TODO: support expressions like between and starts with on sort properties * TODO: support a progressive builder instead of a simple partial. */ -export type EntityQueryKey< +export type QueryKey< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined -> = Partial>; +> = Partial>; diff --git a/packages/@eventual/core/src/entity/stream.ts b/packages/@eventual/core/src/entity/stream.ts index 1b74c978e..d49b87904 100644 --- a/packages/@eventual/core/src/entity/stream.ts +++ b/packages/@eventual/core/src/entity/stream.ts @@ -4,9 +4,9 @@ import { SourceLocation, isSourceLocation, } from "../internal/service-spec.js"; -import { ServiceContext } from "../service.js"; -import { Entity, EntityAttributes } from "./entity.js"; -import { EntityCompositeKeyPart, EntityKeyMap } from "./key.js"; +import type { ServiceContext } from "../service.js"; +import type { Entity, EntityAttributes } from "./entity.js"; +import type { CompositeKeyPart, KeyMap } from "./key.js"; export interface EntityStreamContext { /** @@ -17,9 +17,9 @@ export interface EntityStreamContext { export interface EntityStreamHandler< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > { /** @@ -33,21 +33,21 @@ export interface EntityStreamHandler< export interface EntityStreamItemBase< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > { streamName: string; entityName: string; - key: EntityKeyMap; + key: KeyMap; } export type EntityStreamItem< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > = | EntityStreamInsertItem @@ -56,9 +56,9 @@ export type EntityStreamItem< export interface EntityStreamInsertItem< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > extends EntityStreamItemBase { newValue: Attr; @@ -68,9 +68,9 @@ export interface EntityStreamInsertItem< export interface EntityStreamModifyItem< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > extends EntityStreamItemBase { operation: "modify"; @@ -82,9 +82,9 @@ export interface EntityStreamModifyItem< export interface EntityStreamRemoveItem< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > extends EntityStreamItemBase { operation: "remove"; @@ -94,8 +94,8 @@ export interface EntityStreamRemoveItem< export interface EntityStream< Attr extends EntityAttributes, - Partition extends EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined + Partition extends CompositeKeyPart, + Sort extends CompositeKeyPart | undefined > extends EntityStreamSpec { kind: "EntityStream"; handler: EntityStreamHandler; @@ -104,8 +104,8 @@ export interface EntityStream< export function entityStream< Attr extends EntityAttributes, - const Partition extends EntityCompositeKeyPart, - const Sort extends EntityCompositeKeyPart | undefined + const Partition extends CompositeKeyPart, + const Sort extends CompositeKeyPart | undefined >( ...args: | [ diff --git a/packages/@eventual/core/src/internal/entity.ts b/packages/@eventual/core/src/internal/entity.ts index 1910de65a..ba84e0f84 100644 --- a/packages/@eventual/core/src/internal/entity.ts +++ b/packages/@eventual/core/src/internal/entity.ts @@ -1,6 +1,6 @@ import { z } from "zod"; import { EntityAttributes, EntityZodShape } from "../entity/entity.js"; -import { EntityCompositeKeyPart } from "../entity/key.js"; +import { CompositeKeyPart } from "../entity/key.js"; export interface EntityKeyDefinitionPart { type: "number" | "string"; @@ -15,8 +15,8 @@ export interface EntityKeyDefinition { export function computeEntityKeyDefinition( attributes: z.ZodObject>, - partition: EntityCompositeKeyPart, - sort?: EntityCompositeKeyPart + partition: CompositeKeyPart, + sort?: CompositeKeyPart ): EntityKeyDefinition { const entityZodShape = attributes.shape; @@ -26,7 +26,7 @@ export function computeEntityKeyDefinition( }; function formatKeyDefinitionPart( - keyAttributes: EntityCompositeKeyPart + keyAttributes: CompositeKeyPart ): EntityKeyDefinitionPart { const [head, ...tail] = keyAttributes; diff --git a/packages/@eventual/core/src/internal/service-spec.ts b/packages/@eventual/core/src/internal/service-spec.ts index 4d34c3c65..ede9fb661 100644 --- a/packages/@eventual/core/src/internal/service-spec.ts +++ b/packages/@eventual/core/src/internal/service-spec.ts @@ -1,6 +1,6 @@ import type openapi from "openapi3-ts"; import { EntityAttributes } from "../entity/entity.js"; -import { EntityCompositeKeyPart, EntityQueryKey } from "../entity/key.js"; +import { CompositeKeyPart, QueryKey } from "../entity/key.js"; import type { FunctionRuntimeProps } from "../function-props.js"; import type { HttpMethod } from "../http-method.js"; import type { RestParams } from "../http/command.js"; @@ -178,9 +178,9 @@ export type EntityStreamOperation = "insert" | "modify" | "remove"; export interface EntityStreamOptions< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > extends FunctionRuntimeProps { /** @@ -196,14 +196,14 @@ export interface EntityStreamOptions< /** * One or more key queries that will be included in the stream. */ - queryKeys?: EntityQueryKey[]; + queryKeys?: QueryKey[]; } export interface EntityStreamSpec< Attr extends EntityAttributes = EntityAttributes, - Partition extends EntityCompositeKeyPart = EntityCompositeKeyPart, - Sort extends EntityCompositeKeyPart | undefined = - | EntityCompositeKeyPart + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart | undefined > { name: string; From 05c30cc201593e419490d197640e05b7384108a9 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 13:43:54 -0500 Subject: [PATCH 17/21] tests passing --- .../@eventual/core-runtime/src/stores/entity-store.ts | 4 +++- .../core-runtime/test/command-executor.test.ts | 2 +- packages/@eventual/core/src/error.ts | 11 +++++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 2b68c17bb..592957b2e 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -255,7 +255,9 @@ export function normalizeCompositeKey( const sortCompositeKey = keyDef.sort ? formatNormalizedPart(keyDef.sort, (p, i) => - Array.isArray(key) ? key[i] : (key as KeyMap)[p] + Array.isArray(key) + ? key[keyDef.partition.attributes.length + i] + : (key as KeyMap)[p] ) : undefined; diff --git a/packages/@eventual/core-runtime/test/command-executor.test.ts b/packages/@eventual/core-runtime/test/command-executor.test.ts index f4d1d2644..8ae88f1aa 100644 --- a/packages/@eventual/core-runtime/test/command-executor.test.ts +++ b/packages/@eventual/core-runtime/test/command-executor.test.ts @@ -361,7 +361,7 @@ describe("entity request", () => { operation: { entityName: "ent", operation: "query", - params: [{ partition: ["part"] }], + params: [{ id: "part" }], }, timestamp: expect.stringContaining("Z"), }); diff --git a/packages/@eventual/core/src/error.ts b/packages/@eventual/core/src/error.ts index 75add801c..7d3f82fda 100644 --- a/packages/@eventual/core/src/error.ts +++ b/packages/@eventual/core/src/error.ts @@ -124,17 +124,20 @@ export class UnexpectedVersion extends Error { * * Returns reasons in the same order as the input items. */ -export class TransactionCancelled extends Error { +export class TransactionCancelled extends EventualError { constructor(public reasons: (UnexpectedVersion | undefined)[]) { - super("Transactions Cancelled, see reasons"); + super("TransactionCancelled", "Transaction cancelled, see reasons"); } } /** * Thrown when a transaction conflict with another conflict or write operation. */ -export class TransactionConflict extends Error { +export class TransactionConflict extends EventualError { constructor() { - super("Transactions Conflicted with another operation"); + super( + "TransactionConflict", + "Transaction conflicted with another operation" + ); } } From 93eb94b40f5a5c4e858b5771a178e164d45e5388 Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 13:46:14 -0500 Subject: [PATCH 18/21] more things --- .../aws-runtime/src/stores/entity-store.ts | 6 +-- .../src/local/stores/entity-store.ts | 4 +- .../core-runtime/src/stores/entity-store.ts | 8 ++-- packages/@eventual/core-runtime/src/utils.ts | 4 +- .../test/transaction-executor.test.ts | 4 +- packages/@eventual/core/src/entity/entity.ts | 42 +++++++++---------- packages/@eventual/core/src/entity/key.ts | 16 +++---- packages/@eventual/core/src/entity/stream.ts | 18 ++++---- .../@eventual/core/src/internal/entity.ts | 4 +- .../core/src/internal/service-spec.ts | 6 +-- 10 files changed, 54 insertions(+), 58 deletions(-) diff --git a/packages/@eventual/aws-runtime/src/stores/entity-store.ts b/packages/@eventual/aws-runtime/src/stores/entity-store.ts index 280554bc3..8f35d8358 100644 --- a/packages/@eventual/aws-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/aws-runtime/src/stores/entity-store.ts @@ -16,7 +16,7 @@ import { import { marshall, unmarshall } from "@aws-sdk/util-dynamodb"; import { Entity, - EntityAttributes, + Attributes, EntityConsistencyOptions, EntityQueryOptions, EntityQueryResult, @@ -105,7 +105,7 @@ export class AWSEntityStore extends EntityStore { public override async _set( entity: Entity, - value: EntityAttributes, + value: Attributes, key: NormalizedEntityCompositeKeyComplete, options?: EntitySetOptions ): Promise<{ version: number }> { @@ -307,7 +307,7 @@ export class AWSEntityStore extends EntityStore { } } - private createSetRequest( + private createSetRequest( entity: Entity, value: Attr, key: NormalizedEntityCompositeKey, diff --git a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts index ced4d13fc..8a4000c49 100644 --- a/packages/@eventual/core-runtime/src/local/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/local/stores/entity-store.ts @@ -1,6 +1,6 @@ import { Entity, - EntityAttributes, + Attributes, EntityConsistencyOptions, KeyValue, EntityQueryOptions, @@ -51,7 +51,7 @@ export class LocalEntityStore extends EntityStore { protected override async _set( entity: Entity, - value: EntityAttributes, + value: Attributes, key: NormalizedEntityCompositeKeyComplete, options?: EntitySetOptions ): Promise<{ version: number }> { diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index 592957b2e..db91721f1 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -1,6 +1,6 @@ import type { Entity, - EntityAttributes, + Attributes, CompositeKey, EntityConsistencyOptions, KeyMap, @@ -47,7 +47,7 @@ export abstract class EntityStore implements EntityHook { public set( entityName: string, - value: EntityAttributes, + value: Attributes, options?: EntitySetOptions ): Promise<{ version: number }> { const entity = this.getEntity(entityName); @@ -62,7 +62,7 @@ export abstract class EntityStore implements EntityHook { protected abstract _set( entity: Entity, - value: EntityAttributes, + value: Attributes, key: NormalizedEntityCompositeKeyComplete, options?: EntitySetOptions ): Promise<{ version: number }>; @@ -176,7 +176,7 @@ export type NormalizedEntityTransactItem = { } & ( | { operation: "set"; - value: EntityAttributes; + value: Attributes; options?: EntitySetOptions; } | { diff --git a/packages/@eventual/core-runtime/src/utils.ts b/packages/@eventual/core-runtime/src/utils.ts index c7ecc1f1f..4c6091af9 100644 --- a/packages/@eventual/core-runtime/src/utils.ts +++ b/packages/@eventual/core-runtime/src/utils.ts @@ -1,7 +1,7 @@ import type { BucketNotificationEvent, Entity, - EntityAttributes, + Attributes, CompositeKeyPart, KeyTuple, EntityStreamItem, @@ -90,7 +90,7 @@ export function isBucketNotificationEvent( } export function entityStreamMatchesItem< - Attr extends EntityAttributes, + Attr extends Attributes, const Partition extends CompositeKeyPart, const Sort extends CompositeKeyPart | undefined >( diff --git a/packages/@eventual/core-runtime/test/transaction-executor.test.ts b/packages/@eventual/core-runtime/test/transaction-executor.test.ts index 6ebe99d86..c0e5b5646 100644 --- a/packages/@eventual/core-runtime/test/transaction-executor.test.ts +++ b/packages/@eventual/core-runtime/test/transaction-executor.test.ts @@ -1,5 +1,5 @@ import { - EntityAttributes, + Attributes, CompositeKeyPart, EntityOptions, TransactionContext, @@ -24,7 +24,7 @@ import { const entity = (() => { let n = 0; return < - Attr extends EntityAttributes, + Attr extends Attributes, const Partition extends CompositeKeyPart = CompositeKeyPart, const Sort extends CompositeKeyPart | undefined = undefined >( diff --git a/packages/@eventual/core/src/entity/entity.ts b/packages/@eventual/core/src/entity/entity.ts index f34888dd7..e1259d132 100644 --- a/packages/@eventual/core/src/entity/entity.ts +++ b/packages/@eventual/core/src/entity/entity.ts @@ -19,7 +19,7 @@ import { import type { CompositeKey, CompositeKeyPart, QueryKey } from "./key.js"; import type { EntityStream, EntityStreamHandler } from "./stream.js"; -export type EntityBinaryMember = +export type AttributeBinaryValue = | ArrayBuffer | Blob | Buffer @@ -37,23 +37,23 @@ export type EntityBinaryMember = | BigInt64Array | BigUint64Array; -export type EntityValueMember = - | EntityAttributes +export type AttributeValue = + | Attributes | string | number | boolean - | EntityBinaryMember - | Set - | EntityValueMember[]; + | AttributeBinaryValue + | Set + | AttributeValue[]; -export interface EntityAttributes { - [key: string]: EntityValueMember; +export interface Attributes { + [key: string]: AttributeValue; } /** - * Turns a {@link EntityAttributes} type into a Zod {@link z.ZodRawShape}. + * Turns a {@link Attributes} type into a Zod {@link z.ZodRawShape}. */ -export type EntityZodShape = { +export type EntityZodShape = { [key in keyof Attr]: z.ZodType; }; @@ -63,7 +63,7 @@ export type EntityZodShape = { * @see entity */ export interface Entity< - Attr extends EntityAttributes = any, + Attr extends Attributes = any, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -124,7 +124,7 @@ export interface Entity< } export interface EntityTransactItem< - Attr extends EntityAttributes = any, + Attr extends Attributes = any, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -137,14 +137,14 @@ export interface EntityTransactItem< | EntityConditionalOperation; } -export interface EntitySetOperation { +export interface EntitySetOperation { operation: "set"; value: Attr; options?: EntitySetOptions; } export interface EntityDeleteOperation< - Attr extends EntityAttributes = any, + Attr extends Attributes = any, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -159,7 +159,7 @@ export interface EntityDeleteOperation< * Used in transactions, cancels the transaction if the key's version does not match. */ export interface EntityConditionalOperation< - Attr extends EntityAttributes = any, + Attr extends Attributes = any, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -185,7 +185,7 @@ export const Entity = { }; export interface EntityOptions< - Attr extends EntityAttributes, + Attr extends Attributes, Partition extends CompositeKeyPart, Sort extends CompositeKeyPart | undefined = undefined > { @@ -256,7 +256,7 @@ export interface EntityOptions< * ``` */ export function entity< - Attr extends EntityAttributes, + Attr extends Attributes, const Partition extends CompositeKeyPart, const Sort extends CompositeKeyPart | undefined = undefined >( @@ -410,9 +410,7 @@ export function entity< return entity; } -export interface EntityQueryResult< - Attr extends EntityAttributes = EntityAttributes -> { +export interface EntityQueryResult { entries?: EntityWithMetadata[]; /** * Returned when there are more values than the limit allowed to return. @@ -449,9 +447,7 @@ export interface EntitySetOptions extends EntityConsistencyOptions { incrementVersion?: boolean; } -export interface EntityWithMetadata< - Attr extends EntityAttributes = EntityAttributes -> { +export interface EntityWithMetadata { value: Attr; version: number; } diff --git a/packages/@eventual/core/src/entity/key.ts b/packages/@eventual/core/src/entity/key.ts index 705ccef5d..d0153dbe1 100644 --- a/packages/@eventual/core/src/entity/key.ts +++ b/packages/@eventual/core/src/entity/key.ts @@ -1,4 +1,4 @@ -import type { EntityAttributes } from "./entity.js"; +import type { Attributes } from "./entity.js"; export type KeyValue = string | number; @@ -11,7 +11,7 @@ export type KeyValue = string | number; /** * Any attribute name considered to be a valid key attribute. */ -export type KeyAttribute = { +export type KeyAttribute = { [K in keyof Attr]: K extends string ? // only include attributes that extend string or number Attr[K] extends KeyValue @@ -23,7 +23,7 @@ export type KeyAttribute = { /** * A part of the composite key, either the partition or sort key. */ -export type CompositeKeyPart = +export type CompositeKeyPart = readonly KeyAttribute[]; /** @@ -39,7 +39,7 @@ export type CompositeKeyPart = * ``` */ export type KeyMap< - Attr extends EntityAttributes = any, + Attr extends Attributes = any, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -54,7 +54,7 @@ export type KeyMap< {}); export type KeyPartialTuple< - Attr extends EntityAttributes, + Attr extends Attributes, Attrs extends readonly (keyof Attr)[] > = Attrs extends [] ? readonly [] @@ -73,7 +73,7 @@ export type KeyPartialTuple< * ``` */ export type KeyTuple< - Attr extends EntityAttributes, + Attr extends Attributes, Partition extends CompositeKeyPart, Sort extends CompositeKeyPart | undefined > = Sort extends undefined @@ -87,7 +87,7 @@ export type KeyTuple< * All attributes in either the partition key and the sort key (when present). */ export type CompositeKey< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -105,7 +105,7 @@ export type CompositeKey< * TODO: support a progressive builder instead of a simple partial. */ export type QueryKey< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart diff --git a/packages/@eventual/core/src/entity/stream.ts b/packages/@eventual/core/src/entity/stream.ts index d49b87904..3c4acad08 100644 --- a/packages/@eventual/core/src/entity/stream.ts +++ b/packages/@eventual/core/src/entity/stream.ts @@ -5,7 +5,7 @@ import { isSourceLocation, } from "../internal/service-spec.js"; import type { ServiceContext } from "../service.js"; -import type { Entity, EntityAttributes } from "./entity.js"; +import type { Entity, Attributes } from "./entity.js"; import type { CompositeKeyPart, KeyMap } from "./key.js"; export interface EntityStreamContext { @@ -16,7 +16,7 @@ export interface EntityStreamContext { } export interface EntityStreamHandler< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -32,7 +32,7 @@ export interface EntityStreamHandler< } export interface EntityStreamItemBase< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -44,7 +44,7 @@ export interface EntityStreamItemBase< } export type EntityStreamItem< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -55,7 +55,7 @@ export type EntityStreamItem< | EntityStreamRemoveItem; export interface EntityStreamInsertItem< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -67,7 +67,7 @@ export interface EntityStreamInsertItem< } export interface EntityStreamModifyItem< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -81,7 +81,7 @@ export interface EntityStreamModifyItem< } export interface EntityStreamRemoveItem< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -93,7 +93,7 @@ export interface EntityStreamRemoveItem< } export interface EntityStream< - Attr extends EntityAttributes, + Attr extends Attributes, Partition extends CompositeKeyPart, Sort extends CompositeKeyPart | undefined > extends EntityStreamSpec { @@ -103,7 +103,7 @@ export interface EntityStream< } export function entityStream< - Attr extends EntityAttributes, + Attr extends Attributes, const Partition extends CompositeKeyPart, const Sort extends CompositeKeyPart | undefined >( diff --git a/packages/@eventual/core/src/internal/entity.ts b/packages/@eventual/core/src/internal/entity.ts index ba84e0f84..7c2372e9b 100644 --- a/packages/@eventual/core/src/internal/entity.ts +++ b/packages/@eventual/core/src/internal/entity.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { EntityAttributes, EntityZodShape } from "../entity/entity.js"; +import { Attributes, EntityZodShape } from "../entity/entity.js"; import { CompositeKeyPart } from "../entity/key.js"; export interface EntityKeyDefinitionPart { @@ -13,7 +13,7 @@ export interface EntityKeyDefinition { sort?: EntityKeyDefinitionPart; } -export function computeEntityKeyDefinition( +export function computeEntityKeyDefinition( attributes: z.ZodObject>, partition: CompositeKeyPart, sort?: CompositeKeyPart diff --git a/packages/@eventual/core/src/internal/service-spec.ts b/packages/@eventual/core/src/internal/service-spec.ts index ede9fb661..66235e24e 100644 --- a/packages/@eventual/core/src/internal/service-spec.ts +++ b/packages/@eventual/core/src/internal/service-spec.ts @@ -1,5 +1,5 @@ import type openapi from "openapi3-ts"; -import { EntityAttributes } from "../entity/entity.js"; +import { Attributes } from "../entity/entity.js"; import { CompositeKeyPart, QueryKey } from "../entity/key.js"; import type { FunctionRuntimeProps } from "../function-props.js"; import type { HttpMethod } from "../http-method.js"; @@ -177,7 +177,7 @@ export interface EntitySpec { export type EntityStreamOperation = "insert" | "modify" | "remove"; export interface EntityStreamOptions< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart @@ -200,7 +200,7 @@ export interface EntityStreamOptions< } export interface EntityStreamSpec< - Attr extends EntityAttributes = EntityAttributes, + Attr extends Attributes = Attributes, Partition extends CompositeKeyPart = CompositeKeyPart, Sort extends CompositeKeyPart | undefined = | CompositeKeyPart From 41455664fcef63dbfd86c8880243b7b28f1fcf7f Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 14:20:26 -0500 Subject: [PATCH 19/21] fix bug and rename --- .../@eventual/aws-cdk/src/entity-service.ts | 11 ++-- .../core-runtime/src/stores/entity-store.ts | 10 ++-- packages/@eventual/core/src/entity/entity.ts | 15 ++---- packages/@eventual/core/src/entity/key.ts | 52 +++++++++++++++++-- .../@eventual/core/src/internal/entity.ts | 14 ++--- .../core/src/internal/service-spec.ts | 8 +-- 6 files changed, 75 insertions(+), 35 deletions(-) diff --git a/packages/@eventual/aws-cdk/src/entity-service.ts b/packages/@eventual/aws-cdk/src/entity-service.ts index 4e72e4b40..e12b5db09 100644 --- a/packages/@eventual/aws-cdk/src/entity-service.ts +++ b/packages/@eventual/aws-cdk/src/entity-service.ts @@ -3,13 +3,16 @@ import { entityServiceTableSuffix, ENV_NAMES, } from "@eventual/aws-runtime"; -import { EntityKeyDefinitionPart } from "@eventual/core"; import { EntityRuntime, EntityStreamFunction, normalizeCompositeKey, } from "@eventual/core-runtime"; -import { assertNever, TransactionSpec } from "@eventual/core/internal"; +import { + assertNever, + KeyDefinitionPart, + TransactionSpec, +} from "@eventual/core/internal"; import { Duration, RemovalPolicy, Stack } from "aws-cdk-lib"; import { Attribute, @@ -372,7 +375,7 @@ export class EntityStream extends Construct implements EventualResource { : {}), }; - function keyTypeToAttributeType(keyDef: EntityKeyDefinitionPart) { + function keyTypeToAttributeType(keyDef: KeyDefinitionPart) { return keyDef.type === "number" ? "N" : keyDef.type === "string" @@ -384,7 +387,7 @@ export class EntityStream extends Construct implements EventualResource { } export function entityKeyDefinitionToAttribute( - part: EntityKeyDefinitionPart + part: KeyDefinitionPart ): Attribute { return { name: part.keyAttribute, diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index db91721f1..cf9fd3662 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -14,8 +14,8 @@ import type { } from "@eventual/core"; import type { EntityHook, - EntityKeyDefinition, - EntityKeyDefinitionPart, + KeyDefinition, + KeyDefinitionPart, } from "@eventual/core/internal"; import { EntityProvider } from "../providers/entity-provider.js"; @@ -189,7 +189,7 @@ export type NormalizedEntityTransactItem = { } ); -export interface NormalizedEntityKeyPartBase extends EntityKeyDefinitionPart { +export interface NormalizedEntityKeyPartBase extends KeyDefinitionPart { parts: { field: string; value: KeyValue }[]; } @@ -244,7 +244,7 @@ export type NormalizedEntityCompositeKeyComplete = NormalizedEntityCompositeKey< * Generate properties for an entity key given the key definition and key values. */ export function normalizeCompositeKey( - entity: E | EntityKeyDefinition, + entity: E | KeyDefinition, key: Partial ): NormalizedEntityCompositeKey { const keyDef = "partition" in entity ? entity : entity.key; @@ -272,7 +272,7 @@ export function normalizeCompositeKey( } function formatNormalizedPart( - keyPart: EntityKeyDefinitionPart, + keyPart: KeyDefinitionPart, valueRetriever: (field: string, index: number) => string | number ): NormalizedEntityKeyPart { const parts = keyPart.attributes.map((p, i) => ({ diff --git a/packages/@eventual/core/src/entity/entity.ts b/packages/@eventual/core/src/entity/entity.ts index e1259d132..3320cf43b 100644 --- a/packages/@eventual/core/src/entity/entity.ts +++ b/packages/@eventual/core/src/entity/entity.ts @@ -5,10 +5,7 @@ import { EventualCallKind, } from "../internal/calls.js"; import { getEntityHook } from "../internal/entity-hook.js"; -import { - computeEntityKeyDefinition, - EntityKeyDefinition, -} from "../internal/entity.js"; +import { computeKeyDefinition, KeyDefinition } from "../internal/entity.js"; import { entities } from "../internal/global.js"; import { EntitySpec, @@ -70,7 +67,7 @@ export interface Entity< | undefined > extends Omit { kind: "Entity"; - key: EntityKeyDefinition; + key: KeyDefinition; attributes: z.ZodObject>; streams: EntityStream[]; /** @@ -282,11 +279,7 @@ export function entity< __entityBrand: undefined, kind: "Entity", name, - key: computeEntityKeyDefinition( - attributes, - options.partition, - options.sort - ), + key: computeKeyDefinition(attributes, options.partition, options.sort), attributes, streams, get: (...args) => { @@ -405,7 +398,7 @@ export function entity< }, }; - entities().set(name, entity); + entities().set(name, entity as any); return entity; } diff --git a/packages/@eventual/core/src/entity/key.ts b/packages/@eventual/core/src/entity/key.ts index d0153dbe1..fe07abad6 100644 --- a/packages/@eventual/core/src/entity/key.ts +++ b/packages/@eventual/core/src/entity/key.ts @@ -23,8 +23,10 @@ export type KeyAttribute = { /** * A part of the composite key, either the partition or sort key. */ -export type CompositeKeyPart = - readonly KeyAttribute[]; +export type CompositeKeyPart = readonly [ + KeyAttribute, + ...KeyAttribute[] +]; /** * All attributes of the composite key as an object. @@ -94,6 +96,27 @@ export type CompositeKey< | undefined > = KeyMap | KeyTuple; +export type ProgressiveQueryKey< + Attr extends Attributes, + Sort extends readonly (keyof Attr)[], + Accum extends object = object +> = Sort extends readonly [] + ? Accum + : Sort extends readonly [ + infer k extends keyof Attr, + ...infer ks extends readonly (keyof Attr)[] + ] + ? + | Accum + | ProgressiveQueryKey< + Attr, + ks, + Accum & { + [sk in k]: Attr[sk]; + } + > + : never; + /** * A partial key that can be used to query an entity. * @@ -102,7 +125,6 @@ export type CompositeKey< * ``` * * TODO: support expressions like between and starts with on sort properties - * TODO: support a progressive builder instead of a simple partial. */ export type QueryKey< Attr extends Attributes = Attributes, @@ -110,4 +132,26 @@ export type QueryKey< Sort extends CompositeKeyPart | undefined = | CompositeKeyPart | undefined -> = Partial>; +> = + | ({ + [pk in Partition[number]]: Attr[pk]; + } & (Sort extends undefined + ? // eslint-disable-next-line + {} + : ProgressiveQueryKey>)) + | Partial>; + +/** + * A stream query can contain partial sort keys and partial partition keys. + */ +export type StreamQueryKey< + Attr extends Attributes = Attributes, + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart + | undefined +> = ProgressiveQueryKey & + (Sort extends undefined + ? // eslint-disable-next-line + {} + : ProgressiveQueryKey>); diff --git a/packages/@eventual/core/src/internal/entity.ts b/packages/@eventual/core/src/internal/entity.ts index 7c2372e9b..16285893d 100644 --- a/packages/@eventual/core/src/internal/entity.ts +++ b/packages/@eventual/core/src/internal/entity.ts @@ -2,22 +2,22 @@ import { z } from "zod"; import { Attributes, EntityZodShape } from "../entity/entity.js"; import { CompositeKeyPart } from "../entity/key.js"; -export interface EntityKeyDefinitionPart { +export interface KeyDefinitionPart { type: "number" | "string"; keyAttribute: string; attributes: readonly string[]; } -export interface EntityKeyDefinition { - partition: EntityKeyDefinitionPart; - sort?: EntityKeyDefinitionPart; +export interface KeyDefinition { + partition: KeyDefinitionPart; + sort?: KeyDefinitionPart; } -export function computeEntityKeyDefinition( +export function computeKeyDefinition( attributes: z.ZodObject>, partition: CompositeKeyPart, sort?: CompositeKeyPart -): EntityKeyDefinition { +): KeyDefinition { const entityZodShape = attributes.shape; return { @@ -27,7 +27,7 @@ export function computeEntityKeyDefinition( function formatKeyDefinitionPart( keyAttributes: CompositeKeyPart - ): EntityKeyDefinitionPart { + ): KeyDefinitionPart { const [head, ...tail] = keyAttributes; if (!head) { diff --git a/packages/@eventual/core/src/internal/service-spec.ts b/packages/@eventual/core/src/internal/service-spec.ts index 66235e24e..c0c9a9110 100644 --- a/packages/@eventual/core/src/internal/service-spec.ts +++ b/packages/@eventual/core/src/internal/service-spec.ts @@ -1,6 +1,6 @@ import type openapi from "openapi3-ts"; import { Attributes } from "../entity/entity.js"; -import { CompositeKeyPart, QueryKey } from "../entity/key.js"; +import { CompositeKeyPart, StreamQueryKey } from "../entity/key.js"; import type { FunctionRuntimeProps } from "../function-props.js"; import type { HttpMethod } from "../http-method.js"; import type { RestParams } from "../http/command.js"; @@ -9,7 +9,7 @@ import type { SubscriptionFilter, SubscriptionRuntimeProps, } from "../subscription.js"; -import { EntityKeyDefinition } from "./entity.js"; +import { KeyDefinition } from "./entity.js"; import type { TaskSpec } from "./task.js"; /** @@ -166,7 +166,7 @@ export interface BucketNotificationHandlerSpec { export interface EntitySpec { name: string; - key: EntityKeyDefinition; + key: KeyDefinition; /** * An Optional schema for the entity within an entity. */ @@ -196,7 +196,7 @@ export interface EntityStreamOptions< /** * One or more key queries that will be included in the stream. */ - queryKeys?: QueryKey[]; + queryKeys?: StreamQueryKey[]; } export interface EntityStreamSpec< From 299965f0d7d3088a7d494543593849a7f43c340e Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 16:20:06 -0500 Subject: [PATCH 20/21] change test table name --- apps/tests/aws-runtime/test/test-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 6d9903035..2b58ff63b 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -684,7 +684,7 @@ export const entityWorkflow = workflow( } ); -export const check = entity("check", { +export const check = entity("check4", { attributes: { n: z.number(), id: z.string() }, partition: ["id"], }); From 2e4b9c84fe353e4b20cf295e56970e79c0e314ec Mon Sep 17 00:00:00 2001 From: Sam Sussman Date: Thu, 11 May 2023 17:51:09 -0500 Subject: [PATCH 21/21] feedback and refactor transact item --- apps/tests/aws-runtime/test/test-service.ts | 6 +- packages/@eventual/cli/src/display/event.ts | 20 ++-- .../core-runtime/src/stores/entity-store.ts | 17 ++- .../core-runtime/src/transaction-executor.ts | 62 +++++------ packages/@eventual/core/src/entity/entity.ts | 105 ++++++++++-------- packages/@eventual/testing/test/env.test.ts | 24 ++-- 6 files changed, 113 insertions(+), 121 deletions(-) diff --git a/apps/tests/aws-runtime/test/test-service.ts b/apps/tests/aws-runtime/test/test-service.ts index 2b58ff63b..637c7d9f2 100644 --- a/apps/tests/aws-runtime/test/test-service.ts +++ b/apps/tests/aws-runtime/test/test-service.ts @@ -646,10 +646,8 @@ export const entityWorkflow = workflow( await Entity.transactWrite([ { entity: counter, - operation: { - operation: "set", - value: { namespace: "default", id, n: (value?.n ?? 0) + 1 }, - }, + operation: "set", + value: { namespace: "default", id, n: (value?.n ?? 0) + 1 }, }, ]); // send deletion, to be picked up by the stream diff --git a/packages/@eventual/cli/src/display/event.ts b/packages/@eventual/cli/src/display/event.ts index ece4c5856..1332a9d7d 100644 --- a/packages/@eventual/cli/src/display/event.ts +++ b/packages/@eventual/cli/src/display/event.ts @@ -65,7 +65,7 @@ function displayEntityCommand(operation: EntityOperation) { isEntityOperationOfType("getWithMetadata", operation) ) { const [key] = operation.params; - output.push(`Key: ${key}`); + output.push(`Key: ${JSON.stringify(key)}`); } if (isEntityOperationOfType("set", operation)) { const [value] = operation.params; @@ -82,7 +82,7 @@ function displayEntityCommand(operation: EntityOperation) { } if (isEntityOperationOfType("query", operation)) { const [key] = operation.params; - output.push(`Key: ${key}`); + output.push(`Key: ${JSON.stringify(key)}`); } } return output; @@ -91,25 +91,25 @@ function displayEntityCommand(operation: EntityOperation) { function displayEntityTransactItem(item: EntityTransactItem): string[] { const entityName = typeof item.entity === "string" ? item.entity : item.entity.name; - if (item.operation.operation === "set") { + if (item.operation === "set") { return displayEntityCommand({ operation: "set", entityName, - params: [item.operation.value, item.operation.options], + params: [item.value, item.options], }); - } else if (item.operation.operation === "delete") { + } else if (item.operation === "delete") { return displayEntityCommand({ operation: "delete", entityName, - params: [item.operation.key, item.operation.options], + params: [item.key, item.options], }); } else { const output = [ - `Operation: ${item.operation.operation}`, - `Key: ${item.operation.key}`, + `Operation: ${item.operation}`, + `Key: ${JSON.stringify(item.key)}`, ]; - if (item.operation.version !== undefined) { - output.push(`Version: ${item.operation.version}`); + if (item.version !== undefined) { + output.push(`Version: ${item.version}`); } return output; } diff --git a/packages/@eventual/core-runtime/src/stores/entity-store.ts b/packages/@eventual/core-runtime/src/stores/entity-store.ts index cf9fd3662..50001d77f 100644 --- a/packages/@eventual/core-runtime/src/stores/entity-store.ts +++ b/packages/@eventual/core-runtime/src/stores/entity-store.ts @@ -120,10 +120,7 @@ export abstract class EntityStore implements EntityHook { typeof item.entity === "string" ? this.getEntity(item.entity) : item.entity; - const keyValue = - item.operation.operation === "set" - ? item.operation.value - : item.operation.key; + const keyValue = item.operation === "set" ? item.value : item.key; const key = normalizeCompositeKey(entity, keyValue); if (!isCompleteKey(key)) { throw new Error( @@ -131,26 +128,26 @@ export abstract class EntityStore implements EntityHook { ); } - return item.operation.operation === "set" + return item.operation === "set" ? { operation: "set", entity, key, - value: item.operation.value, - options: item.operation.options, + value: item.value, + options: item.options, } - : item.operation.operation === "delete" + : item.operation === "delete" ? { operation: "delete", entity, key, - options: item.operation.options, + options: item.options, } : { operation: "condition", entity, key, - version: item.operation.version, + version: item.version, }; }) ); diff --git a/packages/@eventual/core-runtime/src/transaction-executor.ts b/packages/@eventual/core-runtime/src/transaction-executor.ts index 04785b1ed..ae0cf75e4 100644 --- a/packages/@eventual/core-runtime/src/transaction-executor.ts +++ b/packages/@eventual/core-runtime/src/transaction-executor.ts @@ -1,9 +1,9 @@ import { Entity, KeyMap, - EntityConditionalOperation, - EntityDeleteOperation, - EntitySetOperation, + EntityTransactConditionalOperation, + EntityTransactDeleteOperation, + EntityTransactSetOperation, EntityTransactItem, EntityWithMetadata, TransactionCancelled, @@ -277,39 +277,33 @@ export function createTransactionExecutor( versionOverridesIndices.add(i); } - return { - entity: entityName, - operation: - call.operation === "set" - ? ({ - operation: "set", - value: call.params[0], - options: { - ...options, - expectedVersion: - options?.expectedVersion ?? retrievedVersion, - }, - } satisfies EntitySetOperation) - : ({ - operation: "delete", - key: call.params[0], - options: { - ...options, - expectedVersion: - options?.expectedVersion ?? retrievedVersion, - }, - } satisfies EntityDeleteOperation), - }; + return call.operation === "set" + ? ({ + entity: entityName, + operation: "set", + value: call.params[0], + options: { + ...options, + expectedVersion: options?.expectedVersion ?? retrievedVersion, + }, + } satisfies EntityTransactSetOperation) + : ({ + entity: entityName, + operation: "delete", + key: call.params[0], + options: { + ...options, + expectedVersion: options?.expectedVersion ?? retrievedVersion, + }, + } satisfies EntityTransactDeleteOperation); } else { // values that are retrieved only, will be checked using a condition return { entity: entityName, - operation: { - operation: "condition", - key: convertNormalizedEntityKeyToMap(key), - version: retrievedVersion, - } satisfies EntityConditionalOperation, - }; + operation: "condition", + key: convertNormalizedEntityKeyToMap(key), + version: retrievedVersion, + } satisfies EntityTransactConditionalOperation; } }); @@ -349,9 +343,7 @@ export function createTransactionExecutor( // normalize the key to extract only the key fields. const key = normalizeCompositeKey( entity, - x.operation.operation === "set" - ? x.operation.value - : x.operation.key + x.operation === "set" ? x.value : x.key ); return { entityName: entity.name, diff --git a/packages/@eventual/core/src/entity/entity.ts b/packages/@eventual/core/src/entity/entity.ts index 3320cf43b..735195b25 100644 --- a/packages/@eventual/core/src/entity/entity.ts +++ b/packages/@eventual/core/src/entity/entity.ts @@ -120,53 +120,6 @@ export interface Entity< ): EntityStream; } -export interface EntityTransactItem< - Attr extends Attributes = any, - Partition extends CompositeKeyPart = CompositeKeyPart, - Sort extends CompositeKeyPart | undefined = - | CompositeKeyPart - | undefined -> { - entity: Entity | string; - operation: - | EntitySetOperation - | EntityDeleteOperation - | EntityConditionalOperation; -} - -export interface EntitySetOperation { - operation: "set"; - value: Attr; - options?: EntitySetOptions; -} - -export interface EntityDeleteOperation< - Attr extends Attributes = any, - Partition extends CompositeKeyPart = CompositeKeyPart, - Sort extends CompositeKeyPart | undefined = - | CompositeKeyPart - | undefined -> { - operation: "delete"; - key: CompositeKey; - options?: EntitySetOptions; -} - -/** - * Used in transactions, cancels the transaction if the key's version does not match. - */ -export interface EntityConditionalOperation< - Attr extends Attributes = any, - Partition extends CompositeKeyPart = CompositeKeyPart, - Sort extends CompositeKeyPart | undefined = - | CompositeKeyPart - | undefined -> { - operation: "condition"; - key: CompositeKey; - version?: number; -} - export const Entity = { transactWrite: (items: EntityTransactItem[]): Promise => { return getEventualCallHook().registerEventualCall( @@ -444,3 +397,61 @@ export interface EntityWithMetadata { value: Attr; version: number; } + +interface EntityTransactItemBase< + Attr extends Attributes, + Partition extends CompositeKeyPart, + Sort extends CompositeKeyPart | undefined +> { + entity: Entity | string; +} + +export type EntityTransactItem< + Attr extends Attributes = any, + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart + | undefined +> = + | EntityTransactSetOperation + | EntityTransactDeleteOperation + | EntityTransactConditionalOperation; + +export interface EntityTransactSetOperation< + Attr extends Attributes = any, + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart + | undefined +> extends EntityTransactItemBase { + operation: "set"; + value: Attr; + options?: EntitySetOptions; +} + +export interface EntityTransactDeleteOperation< + Attr extends Attributes = any, + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart + | undefined +> extends EntityTransactItemBase { + operation: "delete"; + key: CompositeKey; + options?: EntitySetOptions; +} + +/** + * Used in transactions, cancels the transaction if the key's version does not match. + */ +export interface EntityTransactConditionalOperation< + Attr extends Attributes = any, + Partition extends CompositeKeyPart = CompositeKeyPart, + Sort extends CompositeKeyPart | undefined = + | CompositeKeyPart + | undefined +> extends EntityTransactItemBase { + operation: "condition"; + key: CompositeKey; + version?: number; +} diff --git a/packages/@eventual/testing/test/env.test.ts b/packages/@eventual/testing/test/env.test.ts index 200a1bf10..481553ce8 100644 --- a/packages/@eventual/testing/test/env.test.ts +++ b/packages/@eventual/testing/test/env.test.ts @@ -1436,27 +1436,21 @@ describe("entity", () => { return Entity.transactWrite([ partition ? { - operation: { - operation: "set", - value: { part: partition, id, n: value }, - options: { expectedVersion: version }, - }, + operation: "set", + value: { part: partition, id, n: value }, + options: { expectedVersion: version }, entity: myEntityWithSort, } : { - operation: { - operation: "set", - value: { id, n: value }, - options: { expectedVersion: version }, - }, + operation: "set", + value: { id, n: value }, + options: { expectedVersion: version }, entity: myEntity, }, { - operation: { - operation: "set", - value: { part: "3", id, n: value }, - options: { expectedVersion: version }, - }, + operation: "set", + value: { part: "3", id, n: value }, + options: { expectedVersion: version }, entity: myEntityWithSort, }, ]);