From fb7a45db3f137e58e4df00d8e2f51913b5a1f310 Mon Sep 17 00:00:00 2001 From: maslow Date: Tue, 31 Oct 2023 14:04:57 +0800 Subject: [PATCH 1/9] fix(server): update logic of cronjob deletion (#1623) --- server/src/constants.ts | 4 +-- server/src/instance/instance-task.service.ts | 27 ++++++++++++-------- server/src/instance/instance.module.ts | 3 +-- server/src/trigger/trigger-task.service.ts | 4 ++- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/server/src/constants.ts b/server/src/constants.ts index 485dc79058..1a18eb035c 100644 --- a/server/src/constants.ts +++ b/server/src/constants.ts @@ -42,8 +42,8 @@ export class ServerConfig { return process.env.DISABLED_GATEWAY_TASK === 'true' } - static get DISABLED_SUBSCRIPTION_TASK() { - return process.env.DISABLED_GATEWAY_TASK === 'true' + static get DISABLED_TRIGGER_TASK() { + return process.env.DISABLED_TRIGGER_TASK === 'true' } static get DISABLED_STORAGE_TASK() { diff --git a/server/src/instance/instance-task.service.ts b/server/src/instance/instance-task.service.ts index 9533e7ab66..e9263d27ff 100644 --- a/server/src/instance/instance-task.service.ts +++ b/server/src/instance/instance-task.service.ts @@ -4,7 +4,6 @@ import { isConditionTrue } from '../utils/getter' import { InstanceService } from './instance.service' import { ServerConfig, TASK_LOCK_INIT_TIME } from 'src/constants' import { SystemDatabase } from 'src/system-database' -import { CronJobService } from 'src/trigger/cron-job.service' import { Application, ApplicationPhase, @@ -13,16 +12,14 @@ import { import { DomainState, RuntimeDomain } from 'src/gateway/entities/runtime-domain' import { BucketDomain } from 'src/gateway/entities/bucket-domain' import { WebsiteHosting } from 'src/website/entities/website' +import { CronTrigger, TriggerState } from 'src/trigger/entities/cron-trigger' @Injectable() export class InstanceTaskService { readonly lockTimeout = 15 // in second private readonly logger = new Logger(InstanceTaskService.name) - constructor( - private readonly instanceService: InstanceService, - private readonly cronService: CronJobService, - ) {} + constructor(private readonly instanceService: InstanceService) {} @Cron(CronExpression.EVERY_SECOND) async tick() { @@ -175,8 +172,13 @@ export class InstanceTaskService { { $set: { state: DomainState.Active, updatedAt: new Date() } }, ) - // resume cronjobs if any - await this.cronService.resumeAll(app.appid) + // active triggers if any + await db + .collection('CronTrigger') + .updateMany( + { appid, state: TriggerState.Inactive }, + { $set: { state: TriggerState.Active, updatedAt: new Date() } }, + ) // if state is `Restarting`, update state to `Running` with phase `Started` let toState = app.state @@ -272,6 +274,14 @@ export class InstanceTaskService { { $set: { state: DomainState.Inactive, updatedAt: new Date() } }, ) + // inactive triggers if any + await db + .collection('CronTrigger') + .updateMany( + { appid, state: TriggerState.Active }, + { $set: { state: TriggerState.Inactive, updatedAt: new Date() } }, + ) + // check if the instance is removed const instance = await this.instanceService.get(app.appid) if (instance.deployment) { @@ -287,9 +297,6 @@ export class InstanceTaskService { return } - // suspend cronjobs if any - await this.cronService.suspendAll(app.appid) - // update application phase to `Stopped` await db.collection('Application').updateOne( { appid, phase: ApplicationPhase.Stopping }, diff --git a/server/src/instance/instance.module.ts b/server/src/instance/instance.module.ts index 65497ed3c1..2fc7675fb0 100644 --- a/server/src/instance/instance.module.ts +++ b/server/src/instance/instance.module.ts @@ -3,12 +3,11 @@ import { InstanceService } from './instance.service' import { InstanceTaskService } from './instance-task.service' import { StorageModule } from '../storage/storage.module' import { DatabaseModule } from '../database/database.module' -import { TriggerModule } from 'src/trigger/trigger.module' import { ApplicationModule } from 'src/application/application.module' import { JwtService } from '@nestjs/jwt' @Module({ - imports: [StorageModule, DatabaseModule, TriggerModule, ApplicationModule], + imports: [StorageModule, DatabaseModule, ApplicationModule], providers: [InstanceService, InstanceTaskService, JwtService], }) export class InstanceModule {} diff --git a/server/src/trigger/trigger-task.service.ts b/server/src/trigger/trigger-task.service.ts index 54ff71ccf8..4b50d24b4e 100644 --- a/server/src/trigger/trigger-task.service.ts +++ b/server/src/trigger/trigger-task.service.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common' import { Cron, CronExpression } from '@nestjs/schedule' -import { TASK_LOCK_INIT_TIME } from 'src/constants' +import { ServerConfig, TASK_LOCK_INIT_TIME } from 'src/constants' import { SystemDatabase } from 'src/system-database' import { CronJobService } from './cron-job.service' import { @@ -19,6 +19,8 @@ export class TriggerTaskService { @Cron(CronExpression.EVERY_SECOND) async tick() { + if (ServerConfig.DISABLED_TRIGGER_TASK) return + // Phase `Creating` -> `Created` this.handleCreatingPhase().catch((err) => { this.logger.error('handleCreatingPhase error: ' + err) From f8c068a95022be80b3fa229db90fb70b70a1fb46 Mon Sep 17 00:00:00 2001 From: 0fatal <72899968+0fatal@users.noreply.github.com> Date: Tue, 31 Oct 2023 14:09:49 +0800 Subject: [PATCH 2/9] feat(web): add database indexes management (#1611) * feat(sdk): add db index method * fix(sdk): fix index res type * feat(web): add index manage * refactor(sdk): remove useless code --- .../database-proxy/src/accessor/accessor.ts | 13 +- packages/database-proxy/src/accessor/mongo.ts | 122 +++++-- packages/database-proxy/src/types.ts | 28 +- packages/database-ql/src/collection.ts | 22 ++ packages/database-ql/src/constant.ts | 5 +- packages/database-ql/src/document.ts | 95 ++++- packages/database-ql/src/interface.ts | 2 +- packages/database-ql/src/query.ts | 2 +- packages/database-ql/src/result-types.ts | 14 +- web/public/locales/en/translation.json | 27 +- web/public/locales/zh-CN/translation.json | 25 +- web/public/locales/zh/translation.json | 25 +- web/src/components/PopConfirm/index.tsx | 83 +++++ .../mods/DataPanel/index.tsx | 19 +- .../app/database/mods/AddIndexModal/index.tsx | 342 ++++++++++++++++++ .../app/database/mods/IndexModal/index.tsx | 153 ++++++++ web/src/pages/app/database/service.ts | 70 ++++ 17 files changed, 1002 insertions(+), 45 deletions(-) create mode 100644 web/src/components/PopConfirm/index.tsx create mode 100644 web/src/pages/app/database/mods/AddIndexModal/index.tsx create mode 100644 web/src/pages/app/database/mods/IndexModal/index.tsx diff --git a/packages/database-proxy/src/accessor/accessor.ts b/packages/database-proxy/src/accessor/accessor.ts index ca71840bdc..e4697ec16e 100644 --- a/packages/database-proxy/src/accessor/accessor.ts +++ b/packages/database-proxy/src/accessor/accessor.ts @@ -26,10 +26,21 @@ export interface CountResult { total: number } +export interface CreateIndexResult { + indexName: string +} + +export interface DropIndexResult { + result: any +} + +export interface ListIndexesResult { + list: object[] +} export interface AccessorInterface { type: string, - execute(params: Params): Promise + execute(params: Params): Promise get(collection: string, query: any): Promise close(): void on(event: string | symbol, listener: (...args: any[]) => void): void diff --git a/packages/database-proxy/src/accessor/mongo.ts b/packages/database-proxy/src/accessor/mongo.ts index b833fea938..2ded3a1774 100644 --- a/packages/database-proxy/src/accessor/mongo.ts +++ b/packages/database-proxy/src/accessor/mongo.ts @@ -1,4 +1,4 @@ -import { AccessorInterface, ReadResult, UpdateResult, AddResult, RemoveResult, CountResult } from "./accessor" +import { AccessorInterface, ReadResult, UpdateResult, AddResult, RemoveResult, CountResult, ListIndexesResult, DropIndexResult, CreateIndexResult } from "./accessor" import { Params, ActionType, Order, Direction } from '../types' import { MongoClient, ObjectId, MongoClientOptions, Db, UpdateOptions, Filter } from 'mongodb' import * as mongodb from 'mongodb' @@ -141,33 +141,32 @@ export class MongoAccessor implements AccessorInterface { * @param params 数据请求参数 * @returns */ - async execute(params: Params): Promise { + async execute(params: Params): Promise { const { collection, action } = params this.logger.info(`mongo start executing {${collection}}: ` + JSON.stringify(params)) - if (action === ActionType.READ) { - return await this.read(collection, params) - } - - if (action === ActionType.AGGREGATE) { - return await this.aggregate(collection, params) - } - - if (action === ActionType.UPDATE) { - return await this.update(collection, params) - } - - if (action === ActionType.ADD) { - return await this.add(collection, params) - } - - if (action === ActionType.REMOVE) { - return await this.remove(collection, params) - } - - if (action === ActionType.COUNT) { - return await this.count(collection, params) + switch (action) { + case ActionType.READ: + return await this.read(collection, params) + case ActionType.UPDATE: + return await this.update(collection, params) + case ActionType.AGGREGATE: + return await this.aggregate(collection, params) + case ActionType.REMOVE: + return await this.remove(collection, params) + case ActionType.ADD: + return await this.add(collection, params) + case ActionType.COUNT: + return await this.count(collection, params) + case ActionType.CREATE_INDEX: + return await this.createIndex(collection, params) + case ActionType.CREATE_INDEX: + return await this.createIndex(collection, params) + case ActionType.DROP_INDEX: + return await this.dropIndex(collection, params) + case ActionType.LIST_INDEXES: + return await this.listIndexes(collection, params) } const error = new Error(`invalid 'action': ${action}`) @@ -446,4 +445,79 @@ export class MongoAccessor implements AccessorInterface { }) return _stages } + + /** + * Execute create index query + * @param collection Collection name + * @param params + * @returns + */ + protected async createIndex(collection: string, params: Params): Promise { + const coll = this.db.collection(collection) + let { data } = params + data = this.deserializedEjson(data || {}) + + const { keys, options } = data; + + this.logger.debug(`mongo before creating index {${collection}}: `, { data }) + + const result = await coll.createIndex( + keys as mongodb.IndexSpecification, + options as mongodb.CreateIndexesOptions + ) + + const ret: CreateIndexResult = { + indexName: result + } + + this.emitResult(params, ret) + this.logger.debug(`mongo end of creating index {${collection}}: `, { data, result: ret }) + return ret + } + + /** + * Execute drop index query + * @param collection Collection name + * @param params + * @returns + */ + protected async dropIndex(collection: string, params: Params): Promise { + const coll = this.db.collection(collection) + let { data } = params + data = this.deserializedEjson(data || {}) + + this.logger.debug(`mongo before drop index {${collection}}: `, { data }) + + const result = await coll.dropIndex(data) + + const ret: DropIndexResult = { + result + } + + this.emitResult(params, ret) + this.logger.debug(`mongo end of drop index {${collection}}: `, { data, result: ret }) + return ret + } + + /** + * Execute list indexes query + * @param collection Collection name + * @param params + * @returns + */ + protected async listIndexes(collection: string, params: Params): Promise { + const coll = this.db.collection(collection) + let { data } = params + data = this.deserializedEjson(data || {}) + + this.logger.debug(`mongo before listing indexes {${collection}}: `, { data }) + + const result = await coll.listIndexes(data).toArray() + + this.logger.debug(`mongo end of listing indexes {${collection}}: `, { data }) + + this.emitResult(params, { result }) + const serialized = result.map(doc => this.serializeBson(doc)) + return { list: serialized } + } } \ No newline at end of file diff --git a/packages/database-proxy/src/types.ts b/packages/database-proxy/src/types.ts index 46b88b677e..a40995d0a5 100644 --- a/packages/database-proxy/src/types.ts +++ b/packages/database-proxy/src/types.ts @@ -6,7 +6,12 @@ export enum ActionType { REMOVE = 'database.deleteDocument', COUNT = 'database.countDocument', WATCH = 'database.watchDocument', - AGGREGATE = 'database.aggregateDocuments' + AGGREGATE = 'database.aggregateDocuments', + CREATE_INDEX = 'database.createIndex', + CREATE_INDEXES = "database.createIndexes", + DROP_INDEX = "database.dropIndex", + DROP_INDEXES = "database.dropIndexes", + LIST_INDEXES = "database.listIndexes", } export interface Action { @@ -78,6 +83,10 @@ const AddAcceptParams = ['data', 'multi'] const RemoveAcceptParams = ['query', 'multi', 'joins'] const CountAcceptParams = ['query', 'joins'] const AggregateAcceptParams = ['stages'] +const CreateIndexParams = ['data'] +const DropIndexParams = ['data'] +const DropIndexesParams = ['data'] +const ListIndexesParams = ['data'] const ReadAction: Action = { type: ActionType.READ, fields: ReadAcceptParams } const UpdateAction: Action = { type: ActionType.UPDATE, fields: UpdateAcceptParams } @@ -86,9 +95,12 @@ const AddAction: Action = { type: ActionType.ADD, fields: AddAcceptParams } const CountAction: Action = { type: ActionType.COUNT, fields: CountAcceptParams } const WatchAction: Action = { type: ActionType.WATCH, fields: ReadAcceptParams } const AggregateAction: Action = { type: ActionType.AGGREGATE, fields: AggregateAcceptParams } +const CreateIndexAction: Action = { type: ActionType.CREATE_INDEX, fields: CreateIndexParams } +const DropIndexAction: Action = { type: ActionType.DROP_INDEX, fields: DropIndexParams } +const DropIndexesAction: Action = { type: ActionType.DROP_INDEXES, fields:DropIndexesParams } +const ListIndexesAction: Action = { type: ActionType.LIST_INDEXES, fields: ListIndexesParams } export function getAction(actionName: ActionType): Action | null { - let action: Action switch (actionName) { case ActionType.READ: @@ -112,6 +124,18 @@ export function getAction(actionName: ActionType): Action | null { case ActionType.AGGREGATE: action = AggregateAction break + case ActionType.CREATE_INDEX: + action = CreateIndexAction + break + case ActionType.DROP_INDEX: + action = DropIndexAction + break + case ActionType.DROP_INDEXES: + action = DropIndexesAction + break + case ActionType.LIST_INDEXES: + action = ListIndexesAction + break default: action = null } diff --git a/packages/database-ql/src/collection.ts b/packages/database-ql/src/collection.ts index 26d8c8d101..7bcba9921a 100644 --- a/packages/database-ql/src/collection.ts +++ b/packages/database-ql/src/collection.ts @@ -2,6 +2,7 @@ import { Db } from './index' import { DocumentReference } from './document' import { Query } from './query' import Aggregation from './aggregate' +import { CreateIndexRes, DropIndexRes, ListIndexesRes } from './result-types' /** @@ -53,4 +54,25 @@ export class CollectionReference extends Query { aggregate(rawPipeline: object[] = []) { return new Aggregation(this._db, this._coll, rawPipeline) } + + /** + * 创建索引 + */ + public async createIndex(keys: Record, options?: any): Promise { + let docRef = new DocumentReference(this._db, this._coll, undefined) + return docRef.createIndex(keys, options) + } + + /** + * 删除索引 + */ + public async dropIndex(index: string | Record): Promise { + let docRef = new DocumentReference(this._db, this._coll, undefined) + return docRef.dropIndex(index) + } + + public async listIndexes(): Promise { + let docRef = new DocumentReference(this._db, this._coll, undefined) + return docRef.listIndexes() + } } diff --git a/packages/database-ql/src/constant.ts b/packages/database-ql/src/constant.ts index aec94b4c49..494d1223cb 100644 --- a/packages/database-ql/src/constant.ts +++ b/packages/database-ql/src/constant.ts @@ -104,7 +104,10 @@ enum ActionType { update = 'database.updateDocument', count = 'database.countDocument', remove = 'database.deleteDocument', - aggregate = 'database.aggregateDocuments' + aggregate = 'database.aggregateDocuments', + createIndex = 'database.createIndex', + dropIndex = "database.dropIndex", + listIndexes = "database.listIndexes", } export { diff --git a/packages/database-ql/src/document.ts b/packages/database-ql/src/document.ts index c78deddbf2..531fe82f8c 100644 --- a/packages/database-ql/src/document.ts +++ b/packages/database-ql/src/document.ts @@ -3,7 +3,7 @@ import { Db } from './index' import { serialize } from './serializer/datatype' import { UpdateCommand } from './commands/update' import { ActionType } from './constant' -import { AddRes, GetOneRes, RemoveRes, UpdateRes } from './result-types' +import { AddRes, CreateIndexRes, DropIndexRes, GetOneRes, ListIndexesRes, RemoveRes, UpdateRes } from './result-types' import { ProjectionType } from './interface' import { Query } from './query' @@ -165,4 +165,97 @@ export class DocumentReference { field(projection: string[] | ProjectionType): DocumentReference { return new DocumentReference(this._db, this._coll, this.id, this._query.field(projection)) } + + + /** + * 创建索引 + * + * @param data - document data + */ + async createIndex(keys: object, options?: object): Promise { + if (typeof keys !== 'object' || Object.keys(keys)?.length === 0) { + throw new Error('keys cannot be empty object') + } + + const data = { + keys, + options + } + + const params = { + collectionName: this._coll, + data: serialize(data), + } + + const res = await this._query + .send(ActionType.createIndex, params) + + if (res.error) { + return { + requestId: res.requestId, + error: res.error, + ok: false, + code: res.code, + indexName: null, + } + } + + return { + requestId: res.requestId, + ok: true, + indexName: res.data.indexName, + } + } + + async dropIndex(index: string | object): Promise { + const params = { + collectionName: this._coll, + data: serialize(index), + } + + const res = await this._query + .send(ActionType.dropIndex, params) + + if (res.error) { + return { + requestId: res.requestId, + error: res.error, + ok: false, + code: res.code, + result: null, + } + } + + return { + requestId: res.requestId, + ok: true, + result: res.data.result, + } + } + + async listIndexes(options?: object): Promise { + const params = { + collectionName: this._coll, + data: serialize(options), + } + + const res = await this._query + .send(ActionType.listIndexes, params) + + if (res.error) { + return { + requestId: res.requestId, + error: res.error, + ok: false, + code: res.code, + list: res.data.list + } + } + + return { + requestId: res.requestId, + ok: true, + list: res.data.list, + } + } } diff --git a/packages/database-ql/src/interface.ts b/packages/database-ql/src/interface.ts index 011375380b..052a403c64 100644 --- a/packages/database-ql/src/interface.ts +++ b/packages/database-ql/src/interface.ts @@ -3,7 +3,7 @@ import { ActionType, OrderByDirection } from "./constant" export interface ResponseStruct { code: number data: any - error: string + error: any requestId: string [extra: string]: any } diff --git a/packages/database-ql/src/query.ts b/packages/database-ql/src/query.ts index 385aaf9e99..9d29b4ba7d 100644 --- a/packages/database-ql/src/query.ts +++ b/packages/database-ql/src/query.ts @@ -5,7 +5,7 @@ import { Validate } from './validate' import { QuerySerializer } from './serializer/query' import { UpdateSerializer } from './serializer/update' import { ErrorCode } from './constant' -import { GetOneRes, GetRes, CountRes, UpdateRes, RemoveRes } from './result-types' +import { GetOneRes, GetRes, CountRes, UpdateRes, RemoveRes} from './result-types' import { ProjectionType, QueryOrder, RequestInterface, QueryParam } from './interface' import { Util } from './util' import { serialize } from './serializer/datatype' diff --git a/packages/database-ql/src/result-types.ts b/packages/database-ql/src/result-types.ts index 847d76be6f..ccee545314 100644 --- a/packages/database-ql/src/result-types.ts +++ b/packages/database-ql/src/result-types.ts @@ -2,7 +2,7 @@ interface BaseResult { requestId?: string code?: string | number - error?: string + error?: any ok?: boolean } @@ -35,3 +35,15 @@ export interface RemoveRes extends BaseResult { export interface CountRes extends BaseResult { total: number } + +export interface CreateIndexRes extends BaseResult{ + indexName: string +} + +export interface DropIndexRes extends BaseResult{ + result: any +} + +export interface ListIndexesRes extends BaseResult{ + list: object[] +} \ No newline at end of file diff --git a/web/public/locales/en/translation.json b/web/public/locales/en/translation.json index 4472c07d79..2e81a53860 100644 --- a/web/public/locales/en/translation.json +++ b/web/public/locales/en/translation.json @@ -15,7 +15,7 @@ "EditPolicy": "Edit Access Policy", "EmptyCollectionText": "No collection information yet,", "EmptyPolicyText": "No strategy information yet,", - "IndexName": "Index Name", + "IndexName": "Index name", "InputName": "Please enter a collection name", "Policy": "Access Policy", "PolicyAddress": "Entry Address", @@ -32,7 +32,21 @@ "Query": "Please enter the ID or Mongo where statement, press Enter to query. For example: {_id: {$eq: 'document id'}}.", "Search": "Please enter ID to search", "CreateTagTip": "Press \"Enter\" to separate tags, each tag can be up to 16 characters", - "CollectionNameRule": "The collection name can only start with a letter and consist of 3 to 32 characters including letters, _ or -" + "CollectionNameRule": "The collection name can only start with a letter and consist of 3 to 32 characters including letters, _ or -", + "IndexManage": "Index manage", + "ConfirmDeleteIndex": "Are you sure to delete the index?", + "IndexKey": "Index key", + "SelectIndexType": "Select a type", + "AddIndexKey": "Add key", + "AdvancedOptions": "Advanced options", + "CreateIndex": "Create index", + "CapacityLimit": "Capacity", + "CreateTTL": "Create TTL", + "CreateUniqueIndex": "Create unique index", + "UniqueIndexDescription": "A unique index ensures that the indexed keys do not store duplicate values. If there is already duplicate data in the field, an error is reported when creating a unique index.", + "TTLDescription": "TTL indexes are special single-field indexes that MongoDB can use to automatically remove documents from a collection after a certain amount of time or at a specific clock time.", + "CapacityLimitDescription": "Use a \"fixed collection\" to limit the size of a collection.A fixed collection has a fixed size, and when it is full, new documents replace the oldest ones.", + "DocumentNum": "doc" }, "Add": "Add ", "AddData": "Add data", @@ -660,5 +674,10 @@ "Bind": "Bind", "UnBind": "Unbind", "UnBindSuccess": "Unbind Successfully", - "CreateSuccess": "create success" -} + "CreateSuccess": "create success", + "Properties": "Properties", + "Action": "Action", + "Byte": "byte", + "Second": "second", + "Optional": "optional" +} \ No newline at end of file diff --git a/web/public/locales/zh-CN/translation.json b/web/public/locales/zh-CN/translation.json index 6645b6178c..6e6993f32f 100644 --- a/web/public/locales/zh-CN/translation.json +++ b/web/public/locales/zh-CN/translation.json @@ -32,7 +32,21 @@ "EmptyDataText": "暂无数据信息,", "EmptyPolicyTip": "您还没有创建策略", "EmptyRuleTip": "此策略还没有规则,", - "CreateTagTip": "按「回车键」输入标签,每个标签最多由16个字符组成" + "CreateTagTip": "按「回车键」输入标签,每个标签最多由16个字符组成", + "IndexManage": "索引管理", + "ConfirmDeleteIndex": "确定删除该索引吗?", + "IndexKey": "索引字段", + "SelectIndexType": "选择类型", + "AddIndexKey": "添加字段", + "AdvancedOptions": "高级选项", + "CreateIndex": "创建索引", + "CapacityLimit": "容量限制", + "CreateTTL": "创建 TTL", + "CreateUniqueIndex": "创建唯一索引", + "UniqueIndexDescription": "唯一索引可确保索引字段不存储重复的值,如果该字段中已有重复的数据,创建唯一索引时会报错。", + "TTLDescription": "TTL索引使文档在特定时间后自动过期和删除,需要在一个日期字段上创建索引。", + "CapacityLimitDescription": "使用“固定集合”来限制集合的容量。固定集合有一个固定的大小,当它满了之后,新的文档会替代最老的文档。", + "DocumentNum": "条" }, "Add": "添加", "AddData": "新增数据", @@ -660,5 +674,10 @@ "UnBind": "解绑", "UnBindSuccess": "解绑成功", "SavedSuccessfully": "保存成功", - "CreateSuccess": "创建成功" -} + "CreateSuccess": "创建成功", + "Properties": "属性", + "Action": "操作", + "Byte": "字节", + "Second": "秒", + "Optional": "可选" +} \ No newline at end of file diff --git a/web/public/locales/zh/translation.json b/web/public/locales/zh/translation.json index 176c810ab4..4de857e634 100644 --- a/web/public/locales/zh/translation.json +++ b/web/public/locales/zh/translation.json @@ -32,7 +32,21 @@ "EmptyDataText": "暂无数据信息,", "EmptyPolicyTip": "您还没有创建策略", "EmptyRuleTip": "此策略还没有规则,", - "CreateTagTip": "按「回车键」输入标签,每个标签最多由16个字符组成" + "CreateTagTip": "按「回车键」输入标签,每个标签最多由16个字符组成", + "IndexManage": "索引管理", + "ConfirmDeleteIndex": "确定删除该索引吗?", + "IndexKey": "索引字段", + "SelectIndexType": "选择类型", + "AddIndexKey": "添加字段", + "AdvancedOptions": "高级选项", + "CreateIndex": "创建索引", + "CapacityLimit": "容量限制", + "CreateTTL": "创建 TTL", + "CreateUniqueIndex": "创建唯一索引", + "UniqueIndexDescription": "唯一索引可确保索引字段不存储重复的值,如果该字段中已有重复的数据,创建唯一索引时会报错。", + "TTLDescription": "TTL索引使文档在特定时间后自动过期和删除,需要在一个日期字段上创建索引。", + "CapacityLimitDescription": "使用“固定集合”来限制集合的容量。固定集合有一个固定的大小,当它满了之后,新的文档会替代最老的文档。", + "DocumentNum": "条" }, "Add": "添加", "AddData": "新增数据", @@ -660,5 +674,10 @@ "UnBind": "解绑", "UnBindSuccess": "解绑成功", "SavedSuccessfully": "保存成功", - "CreateSuccess": "创建成功" -} + "CreateSuccess": "创建成功", + "Properties": "属性", + "Action": "操作", + "Byte": "字节", + "Second": "秒", + "Optional": "可选" +} \ No newline at end of file diff --git a/web/src/components/PopConfirm/index.tsx b/web/src/components/PopConfirm/index.tsx new file mode 100644 index 0000000000..7238ab7b65 --- /dev/null +++ b/web/src/components/PopConfirm/index.tsx @@ -0,0 +1,83 @@ +import React, { FC, useCallback } from "react"; +import { + Button, + ButtonGroup, + PlacementWithLogical, + Popover, + PopoverArrow, + PopoverBody, + PopoverCloseButton, + PopoverContent, + PopoverFooter, + PopoverHeader, + PopoverTrigger, + useDisclosure, +} from "@chakra-ui/react"; +import { t } from "i18next"; + +interface PopConfirmProps { + title: string | React.ReactElement | any; + description: string | React.ReactElement | any; + onConfirm?: React.MouseEventHandler; + onCancel?: React.MouseEventHandler; + okText?: string; + cancelText?: string; + placement?: PlacementWithLogical; + children: React.ReactNode; +} + +const PopConfirm: FC = ({ + children, + title, + description, + onConfirm, + onCancel, + okText, + cancelText, + placement, +}) => { + const { onOpen, onClose, isOpen } = useDisclosure(); + + const onSubmit: React.MouseEventHandler = useCallback( + (event) => { + onConfirm?.(event); + onClose(); + }, + [onClose, onConfirm], + ); + + const onPopCancel: React.MouseEventHandler = useCallback( + (event) => { + onCancel?.(event); + onClose(); + }, + [onClose, onCancel], + ); + + return ( + + {children} + + + + {title} + + + + {description} + + + + + + + + + + ); +}; +export default PopConfirm; diff --git a/web/src/pages/app/database/CollectionDataList/mods/DataPanel/index.tsx b/web/src/pages/app/database/CollectionDataList/mods/DataPanel/index.tsx index 06fb107172..132cae1083 100644 --- a/web/src/pages/app/database/CollectionDataList/mods/DataPanel/index.tsx +++ b/web/src/pages/app/database/CollectionDataList/mods/DataPanel/index.tsx @@ -1,5 +1,5 @@ import { useEffect, useMemo, useState } from "react"; -import { AddIcon, Search2Icon } from "@chakra-ui/icons"; +import { AddIcon, LinkIcon, Search2Icon } from "@chakra-ui/icons"; import { Button, HStack, @@ -23,6 +23,7 @@ import { COLOR_MODE } from "@/constants"; import getPageInfo from "@/utils/getPageInfo"; import AddDataModal from "../../../mods/AddDataModal/index"; +import IndexModal from "../../../mods/IndexModal"; import RightPanelEditBox from "../../../RightComponent/EditBox"; import RightPanelList from "../../../RightComponent/List"; import { useDeleteDataMutation, useEntryDataQuery, useUpdateDataMutation } from "../../../service"; @@ -167,7 +168,7 @@ export default function DataPanel() { size="xs" variant="textGhost" leftIcon={} - disabled={store.currentDB === undefined} + disabled={!store.currentDB} isLoading={entryDataQuery.isFetching} className="mr-2 font-bold" > @@ -178,7 +179,7 @@ export default function DataPanel() { + + +
{ diff --git a/web/src/pages/app/database/mods/AddIndexModal/index.tsx b/web/src/pages/app/database/mods/AddIndexModal/index.tsx new file mode 100644 index 0000000000..0d3bad01e8 --- /dev/null +++ b/web/src/pages/app/database/mods/AddIndexModal/index.tsx @@ -0,0 +1,342 @@ +import React, { useCallback, useState } from "react"; +import { Controller, SubmitHandler, useFieldArray, useForm, useWatch } from "react-hook-form"; +import { AddIcon, ChevronDownIcon, ChevronRightIcon } from "@chakra-ui/icons"; +import { + Button, + Checkbox, + CloseButton, + Divider, + FormControl, + FormLabel, + HStack, + Input, + InputGroup, + InputRightAddon, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + NumberDecrementStepper, + NumberIncrementStepper, + NumberInput, + NumberInputField, + NumberInputStepper, + Select, + Spacer, + useDisclosure, + VStack, +} from "@chakra-ui/react"; +import { t } from "i18next"; + +import { useCreateIndexMutation } from "../../service"; + +interface FormData { + name: string; + capped: boolean; + unique: boolean; + indexTTL: boolean; + keys: { + name: string; + type: 1 | -1 | "text" | "2dsphere"; + }[]; + size: number; + max: number; + expireAfterSeconds: number; +} + +const AddIndexModal = (props: { children: React.ReactElement }) => { + const { children } = props; + const { isOpen, onOpen, onClose } = useDisclosure(); + const createIndexMutation = useCreateIndexMutation(); + const [showAdvancedOptions, setShowAdvancedOptions] = useState(false); + + const { register, control, handleSubmit } = useForm({ + defaultValues: { + name: "", + capped: false, + unique: false, + indexTTL: false, + keys: [ + { + name: "", + type: 1, + }, + ], + size: 1, + max: 1, + expireAfterSeconds: 60 * 60 * 24 * 10, + }, + }); + + const [capped, indexTTL] = useWatch({ + control, + name: ["capped", "indexTTL"], + }); + + const indexKeys = useFieldArray({ + control, + name: "keys", + rules: { minLength: 1, required: true }, + }); + + const onSubmit: SubmitHandler = useCallback( + async (value) => { + const keys = value.keys.reduce>((acc, cur) => { + acc[cur.name] = cur.type; + return acc; + }, {}); + + const options: any = { + unique: value.unique, + }; + if (value.indexTTL) { + options["expireAfterSeconds"] = value.expireAfterSeconds; + } + if (value.capped) { + options["capped"] = true; + options["size"] = value.size; + options["max"] = value.max; + } + if (value.name) { + options["name"] = value.name; + } + + await createIndexMutation.mutateAsync({ + keys, + options, + }); + + onClose(); + }, + [createIndexMutation, onClose], + ); + + return ( + <> + {React.cloneElement(children, { + onClick: () => { + onOpen(); + }, + })} + + + + {t("CollectionPanel.AddIndex")} + + + + + {t("CollectionPanel.IndexKey")} + + {indexKeys.fields.map((v, idx) => ( + + + + {indexKeys.fields.length > 1 && ( + { + indexKeys.remove(idx); + }} + /> + )} + + ))} + + + + + + {t("CollectionPanel.IndexName")} + {` (${t("Optional")})`} + + + + + + + +
{ + e.preventDefault(); + setShowAdvancedOptions((v) => !v); + }} + > + {!showAdvancedOptions ? ( + + ) : ( + + )} + {t("CollectionPanel.AdvancedOptions")} +
+
+ {showAdvancedOptions && ( + + + +

{t("CollectionPanel.CreateUniqueIndex")}

+

+ {t("CollectionPanel.UniqueIndexDescription")} +

+
+
+ + + +

{t("CollectionPanel.CreateTTL")}

+

+ {t("CollectionPanel.TTLDescription")} +

+
+
+ {indexTTL && ( + + + ( + + { + onChange(num); + }} + min={1} + > + + + + + + + + + )} + /> + + + )} +
+ + + +

{t("CollectionPanel.CapacityLimit")}

+

+ {t("CollectionPanel.CapacityLimitDescription")} +

+
+
+ {capped && ( + + + + ( + + { + onChange(num); + }} + min={1} + > + + + + + + + + + )} + /> + + + ( + + { + onChange(num); + }} + min={1} + > + + + + + + + + + )} + /> + + + + )} +
+
+ )} +
+
+
+ + + + + + + +
+
+ + ); +}; + +export default AddIndexModal; diff --git a/web/src/pages/app/database/mods/IndexModal/index.tsx b/web/src/pages/app/database/mods/IndexModal/index.tsx new file mode 100644 index 0000000000..b7977e17f5 --- /dev/null +++ b/web/src/pages/app/database/mods/IndexModal/index.tsx @@ -0,0 +1,153 @@ +import React from "react"; +import { ArrowDownIcon, ArrowUpIcon } from "@chakra-ui/icons"; +import { + Button, + Center, + CloseButton, + HStack, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + Spinner, + Table, + TableContainer, + Tag, + TagLabel, + Tbody, + Td, + Th, + Thead, + Tr, + useDisclosure, +} from "@chakra-ui/react"; +import { t } from "i18next"; + +import PopConfirm from "@/components/PopConfirm"; + +import { useCollectionIndexQuery, useDropIndexMutation } from "../../service"; +import AddIndexModal from "../AddIndexModal"; + +const IndexModal = (props: { children: React.ReactElement }) => { + const { children } = props; + const { isOpen, onOpen, onClose } = useDisclosure(); + const { data: indexList, isLoading } = useCollectionIndexQuery(); + const dropIndexMutation = useDropIndexMutation(); + + return ( + <> + {React.cloneElement(children, { + onClick: () => { + onOpen(); + }, + })} + + + + {t("CollectionPanel.IndexManage")} + + + + + + + + + + + + + + {indexList?.list?.map((v: any) => ( + + + + + + + ))} + +
{t("CollectionPanel.IndexName")}{t("CollectionPanel.IndexKey")}{t("Properties")}{t("Action")}
{v.name} + + {Object.entries(v.key || {}).map(([name, type]) => ( + + {name} + + | + + + {type === 1 && } + {type === -1 && } + {typeof type === "string" && `(${type})`} + + + ))} + + + + {v.unique && UNIQUE} + {v.max && ( + + MAX + + | + + + {v.max} + + + )} + {!!v.expireAfterSeconds && ( + + TTL + + | + + + {v.expireAfterSeconds} + + + )} + + +
+ dropIndexMutation.mutateAsync(v.name)} + title={String(t("Delete"))} + placement="left" + description={t("CollectionPanel.ConfirmDeleteIndex")} + > + + +
+
+ {isLoading && ( +
+ +
+ )} +
+
+ + + + + +
+
+ + ); +}; + +IndexModal.displayName = "IndexModal"; + +export default IndexModal; diff --git a/web/src/pages/app/database/service.ts b/web/src/pages/app/database/service.ts index f5e8907e18..352106f30b 100644 --- a/web/src/pages/app/database/service.ts +++ b/web/src/pages/app/database/service.ts @@ -25,6 +25,7 @@ const queryKeys = { useEntryDataQuery: (db: string) => ["useEntryDataQuery", db], usePolicyListQuery: ["usePolicyListQuery"], useRulesListQuery: (name: string) => ["useRulesListQuery", name], + useCollectionIndexQuery: (db: string) => ["useCollectionIndexQuery", db], }; export const useCollectionListQuery = (config?: { onSuccess: (data: any) => void }) => { @@ -339,3 +340,72 @@ export const useDeleteRuleMutation = (onSuccess?: () => void) => { }, ); }; + +export const useCollectionIndexQuery = (config?: { onSuccess: (data: any) => void }) => { + const { currentDB } = useDBMStore(); + const { db } = useDB(); + + return useQuery( + queryKeys.useCollectionIndexQuery(currentDB?.name!), + async () => { + const result = await db.collection(currentDB?.name!).listIndexes(); + return result; + }, + { + onSuccess: config?.onSuccess, + enabled: !!currentDB, + }, + ); +}; + +export const useCreateIndexMutation = (config?: { onSuccess: (data: any) => void }) => { + const { currentDB } = useDBMStore(); + const globalStore = useGlobalStore(); + const { db } = useDB(); + const queryClient = useQueryClient(); + + return useMutation( + async (values: any) => { + const result = await db + .collection(currentDB?.name!) + .createIndex(values.fields, values.options); + return result; + }, + { + onSuccess(data) { + if (data.ok) { + globalStore.showSuccess(t("AddSuccess")); + queryClient.invalidateQueries(queryKeys.useCollectionIndexQuery(currentDB?.name!)); + config && config.onSuccess(data); + } else { + globalStore.showError(data.error.codeName); + } + }, + }, + ); +}; + +export const useDropIndexMutation = (config?: { onSuccess: (data: any) => void }) => { + const { currentDB } = useDBMStore(); + const globalStore = useGlobalStore(); + const { db } = useDB(); + const queryClient = useQueryClient(); + + return useMutation( + async (indexName: string) => { + const result = await db.collection(currentDB?.name!).dropIndex(indexName); + return result; + }, + { + onSuccess(data) { + if (data.ok) { + globalStore.showSuccess(t("DeleteSuccess")); + queryClient.invalidateQueries(queryKeys.useCollectionIndexQuery(currentDB?.name!)); + config && config.onSuccess(data); + } else { + globalStore.showError(data.error.codeName); + } + }, + }, + ); +}; From e9e205649de50db766521753c019c4bffe65db53 Mon Sep 17 00:00:00 2001 From: maslow Date: Tue, 31 Oct 2023 14:24:44 +0800 Subject: [PATCH 3/9] chore: remove husky from laf-web (#1624) --- web/.husky/pre-commit | 7 ------- web/package-lock.json | 19 ------------------- web/package.json | 2 -- 3 files changed, 28 deletions(-) delete mode 100755 web/.husky/pre-commit diff --git a/web/.husky/pre-commit b/web/.husky/pre-commit deleted file mode 100755 index 315cf4a261..0000000000 --- a/web/.husky/pre-commit +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -cd $(dirname -- "$0") -cd ../ -npm run tsc -npm run lint-staged --allow-empty diff --git a/web/package-lock.json b/web/package-lock.json index 8104af69f4..41a6e6f585 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -64,7 +64,6 @@ "eslint": "^8.41.0", "eslint-config-react-app": "^7.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", - "husky": "^8.0.3", "install": "^0.13.0", "lint-staged": "^13.2.2", "postcss": "^8.4.23", @@ -7419,18 +7418,6 @@ "node": ">=14.18.0" } }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmmirror.com/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/i18next": { "version": "22.5.0", "resolved": "https://registry.npmmirror.com/i18next/-/i18next-22.5.0.tgz", @@ -17774,12 +17761,6 @@ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true }, - "husky": { - "version": "8.0.3", - "resolved": "https://registry.npmmirror.com/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true - }, "i18next": { "version": "22.5.0", "resolved": "https://registry.npmmirror.com/i18next/-/i18next-22.5.0.tgz", diff --git a/web/package.json b/web/package.json index 6e75952954..cac8e3e82a 100644 --- a/web/package.json +++ b/web/package.json @@ -9,7 +9,6 @@ "preview": "vite preview", "lint": "eslint src --fix", "prettier": "prettier --write ./src", - "prepare": "cd .. && husky install web/.husky", "intercept": "telepresence intercept laf-web -n laf-system -p 3001:80", "leave": "telepresence leave laf-web-laf-system", "lint-staged": "lint-staged" @@ -71,7 +70,6 @@ "eslint": "^8.41.0", "eslint-config-react-app": "^7.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", - "husky": "^8.0.3", "install": "^0.13.0", "lint-staged": "^13.2.2", "postcss": "^8.4.23", From f50a14e4984f9649447140550a19a6603df84598 Mon Sep 17 00:00:00 2001 From: maslow Date: Tue, 31 Oct 2023 14:26:37 +0800 Subject: [PATCH 4/9] v1.0.0-beta.12 --- cli/package-lock.json | 4 ++-- cli/package.json | 2 +- e2e/package-lock.json | 4 ++-- e2e/package.json | 2 +- lerna.json | 2 +- packages/client-sdk/package-lock.json | 6 +++--- packages/client-sdk/package.json | 4 ++-- packages/cloud-sdk/package-lock.json | 6 +++--- packages/cloud-sdk/package.json | 4 ++-- packages/database-proxy/package-lock.json | 6 +++--- packages/database-proxy/package.json | 4 ++-- packages/database-ql/package-lock.json | 4 ++-- packages/database-ql/package.json | 2 +- runtimes/nodejs/package-lock.json | 8 ++++---- runtimes/nodejs/package.json | 6 +++--- server/package-lock.json | 6 +++--- server/package.json | 4 ++-- services/log-server/package-lock.json | 6 +++--- services/log-server/package.json | 4 ++-- web/package-lock.json | 6 +++--- web/package.json | 6 +++--- 21 files changed, 48 insertions(+), 48 deletions(-) diff --git a/cli/package-lock.json b/cli/package-lock.json index 7fe6d32bb5..b637c59d66 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -1,12 +1,12 @@ { "name": "laf-cli", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "laf-cli", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.45.0", diff --git a/cli/package.json b/cli/package.json index 86be536ccb..19f7ec4f14 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "laf-cli", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "description": "", "main": "dist/main.js", "bin": { diff --git a/e2e/package-lock.json b/e2e/package-lock.json index c0dd14bcbb..c7d8a19248 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -1,12 +1,12 @@ { "name": "laf-testing", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "laf-testing", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "license": "ISC", "dependencies": { "axios": "^1.4.0", diff --git a/e2e/package.json b/e2e/package.json index b233598f45..67ffb08341 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "laf-testing", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "private": true, "description": "", "scripts": { diff --git a/lerna.json b/lerna.json index 5b113f9d55..510f4aedd6 100644 --- a/lerna.json +++ b/lerna.json @@ -9,7 +9,7 @@ "./services/*", "./e2e" ], - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "command": { "publish": { "ignoreChanges": [ diff --git a/packages/client-sdk/package-lock.json b/packages/client-sdk/package-lock.json index 4e73a77f57..e673f2d655 100644 --- a/packages/client-sdk/package-lock.json +++ b/packages/client-sdk/package-lock.json @@ -1,16 +1,16 @@ { "name": "laf-client-sdk", - "version": "1.0.0-beta.10", + "version": "1.0.0-beta.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "laf-client-sdk", - "version": "1.0.0-beta.10", + "version": "1.0.0-beta.12", "license": "ISC", "dependencies": { "axios": "^0.21.1", - "database-ql": "^1.0.0-beta.2" + "database-ql": "^1.0.0-beta.12" }, "devDependencies": { "clean-webpack-plugin": "^3.0.0", diff --git a/packages/client-sdk/package.json b/packages/client-sdk/package.json index b5f3f341ff..80383f6242 100644 --- a/packages/client-sdk/package.json +++ b/packages/client-sdk/package.json @@ -1,6 +1,6 @@ { "name": "laf-client-sdk", - "version": "1.0.0-beta.10", + "version": "1.0.0-beta.12", "description": "", "main": "dist/commonjs/index.js", "module": "dist/esm/index.js", @@ -29,7 +29,7 @@ "homepage": "https://github.com/labring/laf#readme", "dependencies": { "axios": "^0.21.1", - "database-ql": "^1.0.0-beta.2" + "database-ql": "^1.0.0-beta.12" }, "devDependencies": { "clean-webpack-plugin": "^3.0.0", diff --git a/packages/cloud-sdk/package-lock.json b/packages/cloud-sdk/package-lock.json index 2b607abd82..bb3911438a 100644 --- a/packages/cloud-sdk/package-lock.json +++ b/packages/cloud-sdk/package-lock.json @@ -1,18 +1,18 @@ { "name": "@lafjs/cloud", - "version": "1.0.0-beta.7", + "version": "1.0.0-beta.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lafjs/cloud", - "version": "1.0.0-beta.7", + "version": "1.0.0-beta.12", "license": "ISC", "dependencies": { "@types/express": "^4.17.15", "@types/ws": "^8.5.3", "axios": "^1.2.1", - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "mongodb": "^4.12.1", "ws": "^8.11.0" }, diff --git a/packages/cloud-sdk/package.json b/packages/cloud-sdk/package.json index 114aabe944..10091e90f1 100644 --- a/packages/cloud-sdk/package.json +++ b/packages/cloud-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@lafjs/cloud", - "version": "1.0.0-beta.7", + "version": "1.0.0-beta.12", "description": "The cloud sdk for laf cloud function", "main": "dist/index.js", "scripts": { @@ -31,7 +31,7 @@ "@types/express": "^4.17.15", "@types/ws": "^8.5.3", "axios": "^1.2.1", - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "mongodb": "^4.12.1", "ws": "^8.11.0" } diff --git a/packages/database-proxy/package-lock.json b/packages/database-proxy/package-lock.json index 9749578c5e..4666d6fba2 100644 --- a/packages/database-proxy/package-lock.json +++ b/packages/database-proxy/package-lock.json @@ -1,15 +1,15 @@ { "name": "database-proxy", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "database-proxy", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.12", "license": "ISC", "dependencies": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", diff --git a/packages/database-proxy/package.json b/packages/database-proxy/package.json index f0a70e22d3..f154f3ebfc 100644 --- a/packages/database-proxy/package.json +++ b/packages/database-proxy/package.json @@ -1,6 +1,6 @@ { "name": "database-proxy", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.12", "description": "通过一套「访问控制规则」配置数据库访问,用一个 API 替代服务端 90% 的数据访问 APIs。", "main": "./dist", "scripts": { @@ -26,7 +26,7 @@ "author": "maslow(wangfugen@126.com)", "license": "ISC", "dependencies": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", diff --git a/packages/database-ql/package-lock.json b/packages/database-ql/package-lock.json index 96acb38001..699f512c97 100644 --- a/packages/database-ql/package-lock.json +++ b/packages/database-ql/package-lock.json @@ -1,12 +1,12 @@ { "name": "database-ql", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "database-ql", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.12", "license": "ISC", "dependencies": { "bson": "^4.5.3", diff --git a/packages/database-ql/package.json b/packages/database-ql/package.json index 8d60bb1d60..18f12bbc88 100644 --- a/packages/database-ql/package.json +++ b/packages/database-ql/package.json @@ -1,6 +1,6 @@ { "name": "database-ql", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.12", "description": "Database interface for laf", "main": "dist/commonjs/index.js", "module": "dist/esm/index.js", diff --git a/runtimes/nodejs/package-lock.json b/runtimes/nodejs/package-lock.json index 001678e384..c5697c2bb0 100644 --- a/runtimes/nodejs/package-lock.json +++ b/runtimes/nodejs/package-lock.json @@ -1,22 +1,22 @@ { "name": "runtime-nodejs", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "runtime-nodejs", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "dependencies": { "@aws-sdk/client-s3": "^3.231.0", "@aws-sdk/client-sts": "^3.231.0", "@aws-sdk/s3-request-presigner": "^3.231.0", "@kubernetes/client-node": "^0.18.0", - "@lafjs/cloud": "^1.0.0-beta.7", + "@lafjs/cloud": "^1.0.0-beta.12", "axios": "^1.4.0", "chatgpt": "^5.2.5", "cors": "^2.8.5", - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "dayjs": "^1.11.7", "dotenv": "^8.2.0", "ejs": "^3.1.8", diff --git a/runtimes/nodejs/package.json b/runtimes/nodejs/package.json index b218a36df4..9bf31d83a5 100644 --- a/runtimes/nodejs/package.json +++ b/runtimes/nodejs/package.json @@ -1,6 +1,6 @@ { "name": "runtime-nodejs", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "description": "the node runtime for laf", "main": "./dist/index.js", "typings": "./dist/index.d.ts", @@ -29,11 +29,11 @@ "@aws-sdk/client-sts": "^3.231.0", "@aws-sdk/s3-request-presigner": "^3.231.0", "@kubernetes/client-node": "^0.18.0", - "@lafjs/cloud": "^1.0.0-beta.7", + "@lafjs/cloud": "^1.0.0-beta.12", "axios": "^1.4.0", "chatgpt": "^5.2.5", "cors": "^2.8.5", - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "dayjs": "^1.11.7", "dotenv": "^8.2.0", "ejs": "^3.1.8", diff --git a/server/package-lock.json b/server/package-lock.json index 6e3f42cd29..b883eb1db7 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "laf-server", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "laf-server", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "license": "Apache-2.0", "dependencies": { "@alicloud/dysmsapi20170525": "^2.0.22", @@ -32,7 +32,7 @@ "class-validator": "^0.14.0", "compression": "^1.7.4", "cron-validate": "^1.4.5", - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "dayjs": "^1.11.7", "decimal.js": "^10.4.3", "dotenv": "^16.0.3", diff --git a/server/package.json b/server/package.json index d09da4c28f..6f0edd29b0 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "laf-server", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "description": "laf server", "author": "maslow(wangfugen@126.com)", "private": true, @@ -47,7 +47,7 @@ "class-validator": "^0.14.0", "compression": "^1.7.4", "cron-validate": "^1.4.5", - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "dayjs": "^1.11.7", "decimal.js": "^10.4.3", "dotenv": "^16.0.3", diff --git a/services/log-server/package-lock.json b/services/log-server/package-lock.json index 8f469b6315..9ddc500681 100644 --- a/services/log-server/package-lock.json +++ b/services/log-server/package-lock.json @@ -1,14 +1,14 @@ { "name": "log-server", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "log-server", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "dependencies": { - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "dotenv": "^16.3.1", "express": "^4.18.2", "express-async-errors": "^3.1.1", diff --git a/services/log-server/package.json b/services/log-server/package.json index a86747536c..a93834c97b 100644 --- a/services/log-server/package.json +++ b/services/log-server/package.json @@ -1,6 +1,6 @@ { "name": "log-server", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "description": "the function log server for laf", "main": "./dist/index.js", "private": true, @@ -18,7 +18,7 @@ "typescript": "^5.1.6" }, "dependencies": { - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "dotenv": "^16.3.1", "express": "^4.18.2", "express-async-errors": "^3.1.1", diff --git a/web/package-lock.json b/web/package-lock.json index 41a6e6f585..484ddb67d1 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "web", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "web", - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "dependencies": { "@chakra-ui/anatomy": "^2.1.1", "@chakra-ui/icons": "^2.0.19", @@ -27,7 +27,7 @@ "i18next-browser-languagedetector": "7.0.1", "i18next-http-backend": "2.2.1", "immer": "^10.0.2", - "laf-client-sdk": "^1.0.0-beta.10", + "laf-client-sdk": "^1.0.0-beta.12", "lodash": "^4.17.21", "monaco-editor": "^0.38.0", "qrcode.react": "^3.1.0", diff --git a/web/package.json b/web/package.json index cac8e3e82a..722b0933f6 100644 --- a/web/package.json +++ b/web/package.json @@ -1,7 +1,7 @@ { "name": "web", "private": true, - "version": "1.0.0-beta.11", + "version": "1.0.0-beta.12", "scripts": { "dev": "vite", "build": "tsc && node --max_old_space_size=32768 ./node_modules/vite/bin/vite.js build", @@ -33,7 +33,7 @@ "i18next-browser-languagedetector": "7.0.1", "i18next-http-backend": "2.2.1", "immer": "^10.0.2", - "laf-client-sdk": "^1.0.0-beta.10", + "laf-client-sdk": "^1.0.0-beta.12", "lodash": "^4.17.21", "monaco-editor": "^0.38.0", "qrcode.react": "^3.1.0", @@ -87,4 +87,4 @@ "prettier --write" ] } -} \ No newline at end of file +} From 537225e75dc34899fcaae4b9dcfef82185d7a0f5 Mon Sep 17 00:00:00 2001 From: maslow Date: Tue, 31 Oct 2023 14:47:09 +0800 Subject: [PATCH 5/9] chore: update change log --- CHANGELOG.md | 60 +- package-lock.json | 1114 +++++++++++++-------- packages/client-sdk/package-lock.json | 12 +- packages/cloud-sdk/package-lock.json | 28 +- packages/database-proxy/package-lock.json | 12 +- runtimes/nodejs/package-lock.json | 56 +- server/package-lock.json | 28 +- services/log-server/package-lock.json | 14 +- web/package-lock.json | 28 +- 9 files changed, 852 insertions(+), 500 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 615e8f5ec5..617c591db4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,62 @@ -# [1.0.0-beta.4](https://github.com/labring/laf/compare/v1.0.0-beta.11...v1.0.0-beta.4) (2023-09-12) +# [1.0.0-beta.4](https://github.com/labring/laf/compare/v1.0.0-beta.12...v1.0.0-beta.4) (2023-10-31) + + + +# [1.0.0-beta.12](https://github.com/labring/laf/compare/v1.0.0-beta.11...v1.0.0-beta.12) (2023-10-31) + + +### Bug Fixes + +* **cli:** fix app init error ([#1608](https://github.com/labring/laf/issues/1608)) ([7788d6c](https://github.com/labring/laf/commit/7788d6c7811cc5bb2e5f26474abfc70273ba3f60)) +* **cli:** fix update func bug ([#1610](https://github.com/labring/laf/issues/1610)) ([92c9830](https://github.com/labring/laf/commit/92c98309a0259cda2768e16feb4c40104a8bf64c)) +* **cli:** storage server api changed for cli ([#1609](https://github.com/labring/laf/issues/1609)) ([bf4150e](https://github.com/labring/laf/commit/bf4150e6a0136d80993c1b21836665d928fac232)) +* **deploy:** minio console ingress enable websocket ([#1555](https://github.com/labring/laf/issues/1555)) ([f360709](https://github.com/labring/laf/commit/f3607099e72c7e0ca8c22f770f8140788c9bec7c)) +* **gateway:** fix cors headers conf of runtime, ingress nginx installation ([#1565](https://github.com/labring/laf/issues/1565)) ([8de0a29](https://github.com/labring/laf/commit/8de0a29de636ecd10287b17fad5504f9c66e4270)) +* **runtime:** default close module cache ([#1604](https://github.com/labring/laf/issues/1604)) ([ba378a6](https://github.com/labring/laf/commit/ba378a6e51551e48a5129385dcf3d07f9844e0fa)) +* **runtime:** enable cors in runtime; disable cors in gateway ingress ([#1603](https://github.com/labring/laf/issues/1603)) ([06cafd4](https://github.com/labring/laf/commit/06cafd4a793afb9c55f0d3f577aa4e0128bc5180)) +* **runtime:** fix compile error ([#1563](https://github.com/labring/laf/issues/1563)) ([3878bc0](https://github.com/labring/laf/commit/3878bc092c4e830cbcb7641da26eed89afc885a6)) +* **runtime:** fix db stream initialize ([#1592](https://github.com/labring/laf/issues/1592)) ([40e25f1](https://github.com/labring/laf/commit/40e25f13163f1a0d1274caa8ae4f091e15710fba)) +* **runtime:** fix runtime cors options ([#1607](https://github.com/labring/laf/issues/1607)) ([366a6a4](https://github.com/labring/laf/commit/366a6a4e8989ce2f8fd362479001da6b4fd6eb25)) +* **runtime:** fix update function not effective ([#1597](https://github.com/labring/laf/issues/1597)) ([0c9daa3](https://github.com/labring/laf/commit/0c9daa304e51d3cb60c7aa1875960c9d8c67bc79)) +* **runtime:** support default function ([#1602](https://github.com/labring/laf/issues/1602)) ([04905dc](https://github.com/labring/laf/commit/04905dce839ab1aea2acc29ed8d7cb522fd0f32d)) +* **server:** add storage service conf for runtime, add cors conf for bucket ingress ([fc73e6f](https://github.com/labring/laf/commit/fc73e6f9355d2145ee4f24a26ce897430004dbff)) +* **server:** fix nest deps missing ([#1564](https://github.com/labring/laf/issues/1564)) ([7781a3e](https://github.com/labring/laf/commit/7781a3ef6c30882a7c2e789b5dfb255bc0d35931)) +* **server:** fix not reapply service when restart app ([#1578](https://github.com/labring/laf/issues/1578)) ([bb9e8e2](https://github.com/labring/laf/commit/bb9e8e24a588ddcbe10dc5cc019d0be694889184)) +* **server:** fix runtime deployment labels ([#1585](https://github.com/labring/laf/issues/1585)) ([93de793](https://github.com/labring/laf/commit/93de793a119507e5d57f51646203c6d4b5509873)) +* **server:** fix user quota ([#1534](https://github.com/labring/laf/issues/1534)) ([d3a2e65](https://github.com/labring/laf/commit/d3a2e65ed86161a6ddd3ff962a53247f0b659689)) +* **server:** fixed runtime manifest labels ([#1583](https://github.com/labring/laf/issues/1583)) ([364c7a6](https://github.com/labring/laf/commit/364c7a68526c703d9bb3aa2b9d0b82d0206e8484)) +* **server:** set deleting phase for runtime domain and website when deleting app ([#1613](https://github.com/labring/laf/issues/1613)) ([27b0587](https://github.com/labring/laf/commit/27b0587f18f57b04d2a207eae44a27f833ed4b2e)) +* **server:** update logic of cronjob deletion ([#1623](https://github.com/labring/laf/issues/1623)) ([fb7a45d](https://github.com/labring/laf/commit/fb7a45db3f137e58e4df00d8e2f51913b5a1f310)) +* **web:** disable navigate cache for api endpoint ([#1579](https://github.com/labring/laf/issues/1579)) ([f7b8775](https://github.com/labring/laf/commit/f7b8775843c2908b82761ae93a9e9f78343bf82b)) +* **web:** fix bucket display name in edit mode ([#1606](https://github.com/labring/laf/issues/1606)) ([d16bb36](https://github.com/labring/laf/commit/d16bb361d529da9349ebdb739a3334e95246efc1)) +* **web:** fix create function default code ([#1544](https://github.com/labring/laf/issues/1544)) ([0b903e8](https://github.com/labring/laf/commit/0b903e8e8fd002d2a0e60a123524ea69a8d23288)) +* **web:** fix delete button covered in dependency panel ([#1546](https://github.com/labring/laf/issues/1546)) ([b065acd](https://github.com/labring/laf/commit/b065acdd21b020713243dd8964b667fbb55808b6)) +* **web:** fix files can't be accessed before refreshing & change file path ([#1538](https://github.com/labring/laf/issues/1538)) ([86250d9](https://github.com/labring/laf/commit/86250d9b3ad9f9936734af55beadb4af30560a53)) +* **web:** fix function list folder name display ([#1561](https://github.com/labring/laf/issues/1561)) ([1f7d6af](https://github.com/labring/laf/commit/1f7d6af998d2b9229ab381f0c092cc957e901f9b)) +* **web:** fix params not update & change function list type ([#1535](https://github.com/labring/laf/issues/1535)) ([5366201](https://github.com/labring/laf/commit/53662012e96f3238128623440be9e90bd9104aa8)) +* **web:** fix sentry allowlist ([#1587](https://github.com/labring/laf/issues/1587)) ([6c812bd](https://github.com/labring/laf/commit/6c812bd674ccac959c5331d90aa33dd07d8fd2d9)) +* **web:** fix sign up navigate & storage display ([#1580](https://github.com/labring/laf/issues/1580)) ([7dac760](https://github.com/labring/laf/commit/7dac7602eb91d7d66aa28ad31c17e961666a2f01)) +* **web:** remove storage.credential ([#1594](https://github.com/labring/laf/issues/1594)) ([8e5f568](https://github.com/labring/laf/commit/8e5f56836582b9b4719a9b666c124b93eb92dcb0)) + + +### Features + +* **cli:** improve the cli interface ([#1591](https://github.com/labring/laf/issues/1591)) ([fdbfc5c](https://github.com/labring/laf/commit/fdbfc5c518f641c7cd54dd3750a4ba5ea17c2851)) +* **cli:** support database export and import ([#1540](https://github.com/labring/laf/issues/1540)) ([8c68089](https://github.com/labring/laf/commit/8c68089a7864cf0eb0895199512f9be72ec48d5f)) +* **gateway:** refactor gateway to support ingress ([#1559](https://github.com/labring/laf/issues/1559)) ([155814b](https://github.com/labring/laf/commit/155814bd6751c2962238c8c3d9b5598dea179634)) +* **runtime:** add Access-Control-Max-Age to cors options ([#1615](https://github.com/labring/laf/issues/1615)) ([c4b79fb](https://github.com/labring/laf/commit/c4b79fbc041d04a3d960ec182d287e2f46ce73a8)) +* **runtime:** proxy cloud storage & website hosting request to minio ([#1560](https://github.com/labring/laf/issues/1560)) ([5456de2](https://github.com/labring/laf/commit/5456de268b8d6fb5128eef499be5e2e980f00db5)) +* **runtime:** refactor function engine ([#1590](https://github.com/labring/laf/issues/1590)) ([811066b](https://github.com/labring/laf/commit/811066b5e76f2d85212df8d682a6ebe6edef3824)) +* **runtime:** reuse context ([#1539](https://github.com/labring/laf/issues/1539)) ([acafda5](https://github.com/labring/laf/commit/acafda5d43e661ec772cee6790d89066debcb12e)) +* **server:** add runtime affinity settings in region ([#1548](https://github.com/labring/laf/issues/1548)) ([d3da138](https://github.com/labring/laf/commit/d3da138bc585ede2d0ee158884e0c40763087cbe)) +* **server:** add sealos manager labels to rumtime manifest([#1577](https://github.com/labring/laf/issues/1577)) ([f71ea31](https://github.com/labring/laf/commit/f71ea31457ad22881a32f26ccbdc06a256b3a9b8)) +* **server:** add tls config for ingress gateway ([#1569](https://github.com/labring/laf/issues/1569)) ([8751858](https://github.com/labring/laf/commit/8751858cb2fd130fc8030fb5e4caaae86b948c54)) +* **server:** support github login ([#1542](https://github.com/labring/laf/issues/1542)) ([14540c1](https://github.com/labring/laf/commit/14540c1a061b9dc24220effded8fa3c759127a8e)) +* **web:** add client settings & change settings directory ([#1536](https://github.com/labring/laf/issues/1536)) ([d22fd4e](https://github.com/labring/laf/commit/d22fd4e4469a204efe3e35f9da92bcc1801d7efe)) +* **web:** add database indexes management ([#1611](https://github.com/labring/laf/issues/1611)) ([f8c068a](https://github.com/labring/laf/commit/f8c068a95022be80b3fa229db90fb70b70a1fb46)) +* **web:** add function list desc-name display & fix editor min-h ([#1545](https://github.com/labring/laf/issues/1545)) ([2b252f2](https://github.com/labring/laf/commit/2b252f2591f8e0d49b09755a46e449e2bba8c3ed)) +* **web:** optimize editor ctx type definition ([#1558](https://github.com/labring/laf/issues/1558)) ([b3ecb45](https://github.com/labring/laf/commit/b3ecb4515dd894930b434bebedca87c9db813301)) +* **web:** support github login ([#1543](https://github.com/labring/laf/issues/1543)) ([e8b8380](https://github.com/labring/laf/commit/e8b838090ae997add978ca3d0a348d831b268a0f)) diff --git a/package-lock.json b/package-lock.json index b8b4556af6..89635ed5db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,17 +22,80 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.15.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", @@ -73,9 +136,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -91,28 +154,20 @@ } }, "node_modules/@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.15.6", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", @@ -132,47 +187,43 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" - }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -261,21 +312,30 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" @@ -305,13 +365,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -356,13 +416,13 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -381,9 +441,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -393,32 +453,33 @@ } }, "node_modules/@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -427,12 +488,13 @@ } }, "node_modules/@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -485,6 +547,54 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@lerna/add": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/@lerna/add/-/add-6.4.1.tgz", @@ -1624,21 +1734,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/fs": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", @@ -1837,52 +1932,193 @@ } }, "node_modules/@nrwl/cli": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.5.3.tgz", - "integrity": "sha512-NWf9CWswvdYM6YzXuweaZPAZ2erMtQrrHZdgFbUGeojZBZ+b4TCGzLWNodZj4yQOa/eTwlyPMYO2LEw9CoapDQ==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.7.tgz", + "integrity": "sha512-1jtHBDuJzA57My5nLzYiM372mJW0NY6rFKxlWt5a0RLsAZdPTHsd8lE3Gs9XinGC1jhXbruWmhhnKyYtZvX/zA==", "dev": true, "dependencies": { - "nx": "15.5.3" + "nx": "15.9.7" } }, "node_modules/@nrwl/devkit": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.5.3.tgz", - "integrity": "sha512-GGNLLGXDGWflrpaLimnE6hChfZfq3+XWZ0LJWL0IuCnchngPbNzuyh8S8KPgNKKgq4Nv0hglWefIwMg2UhHysA==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.9.7.tgz", + "integrity": "sha512-Sb7Am2TMT8AVq8e+vxOlk3AtOA2M0qCmhBzoM1OJbdHaPKc0g0UgSnWRml1kPGg5qfPk72tWclLoZJ5/ut0vTg==", "dev": true, "dependencies": { - "@phenomnomnominal/tsquery": "4.1.1", "ejs": "^3.1.7", "ignore": "^5.0.4", - "semver": "7.3.4", + "semver": "7.5.4", + "tmp": "~0.2.1", "tslib": "^2.3.0" }, "peerDependencies": { - "nx": ">= 14 <= 16" + "nx": ">= 14.1 <= 16" } }, - "node_modules/@nrwl/devkit/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "node_modules/@nrwl/devkit/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8.17.0" + } + }, + "node_modules/@nrwl/nx-darwin-arm64": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.7.tgz", + "integrity": "sha512-aBUgnhlkrgC0vu0fK6eb9Vob7eFnkuknrK+YzTjmLrrZwj7FGNAeyGXSlyo1dVokIzjVKjJg2saZZ0WQbfuCJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-darwin-x64": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.7.tgz", + "integrity": "sha512-L+elVa34jhGf1cmn38Z0sotQatmLovxoASCIw5r1CBZZeJ5Tg7Y9nOwjRiDixZxNN56hPKXm6xl9EKlVHVeKlg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-linux-arm-gnueabihf": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.7.tgz", + "integrity": "sha512-pqmfqqEUGFu6PmmHKyXyUw1Al0Ki8PSaR0+ndgCAb1qrekVDGDfznJfaqxN0JSLeolPD6+PFtLyXNr9ZyPFlFg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-linux-arm64-gnu": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.7.tgz", + "integrity": "sha512-NYOa/eRrqmM+In5g3M0rrPVIS9Z+q6fvwXJYf/KrjOHqqan/KL+2TOfroA30UhcBrwghZvib7O++7gZ2hzwOnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-linux-arm64-musl": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.7.tgz", + "integrity": "sha512-zyStqjEcmbvLbejdTOrLUSEdhnxNtdQXlmOuymznCzYUEGRv+4f7OAepD3yRoR0a/57SSORZmmGQB7XHZoYZJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-linux-x64-gnu": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.7.tgz", + "integrity": "sha512-saNK5i2A8pKO3Il+Ejk/KStTApUpWgCxjeUz9G+T8A+QHeDloZYH2c7pU/P3jA9QoNeKwjVO9wYQllPL9loeVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-linux-x64-musl": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.7.tgz", + "integrity": "sha512-extIUThYN94m4Vj4iZggt6hhMZWQSukBCo8pp91JHnDcryBg7SnYmnikwtY1ZAFyyRiNFBLCKNIDFGkKkSrZ9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-win32-arm64-msvc": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.7.tgz", + "integrity": "sha512-GSQ54hJ5AAnKZb4KP4cmBnJ1oC4ILxnrG1mekxeM65c1RtWg9NpBwZ8E0gU3xNrTv8ZNsBeKi/9UhXBxhsIh8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-win32-x64-msvc": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.7.tgz", + "integrity": "sha512-x6URof79RPd8AlapVbPefUD3ynJZpmah3tYaYZ9xZRMXojVtEHV8Qh5vysKXQ1rNYJiiB8Ah6evSKWLbAH60tw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, "node_modules/@nrwl/tao": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.5.3.tgz", - "integrity": "sha512-vgPLIW9IoBfQ4IkHRT5RC4LqNwFBK5jmHYmFIRgbIeFRudFBbnpmOaKRME0OwN7qJ6964PVVbzahAPvYVD02xw==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.7.tgz", + "integrity": "sha512-OBnHNvQf3vBH0qh9YnvBQQWyyFZ+PWguF6dJ8+1vyQYlrLVk/XZ8nJ4ukWFb+QfPv/O8VBmqaofaOI9aFC4yTw==", "dev": true, "dependencies": { - "nx": "15.5.3" + "nx": "15.9.7" }, "bin": { "tao": "index.js" @@ -2071,18 +2307,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@phenomnomnominal/tsquery": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz", - "integrity": "sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==", - "dev": true, - "dependencies": { - "esquery": "^1.0.1" - }, - "peerDependencies": { - "typescript": "^3 || ^4" - } - }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -2129,9 +2353,9 @@ "dev": true }, "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.36", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.36.tgz", - "integrity": "sha512-PvTlgUr7WO2qDnph8tVdItbJlo9hEcGSVd8+ppn/tvcn8XZUaD1z4EgvMEZcJYZi3LmHJGzSgVZzcFE+zQiz8A==", + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", "dev": true, "dependencies": { "js-yaml": "^3.10.0", @@ -3222,9 +3446,9 @@ } }, "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3712,27 +3936,6 @@ "node": ">=4" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -4202,9 +4405,9 @@ "dev": true }, "node_modules/get-pkg-repo/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -4336,9 +4539,9 @@ } }, "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5123,9 +5326,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5511,21 +5714,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmpublish/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -5630,9 +5818,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5780,9 +5968,9 @@ } }, "node_modules/meow/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -6693,17 +6881,17 @@ } }, "node_modules/nx": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-15.5.3.tgz", - "integrity": "sha512-PHB8VbiBLP108xb+yR8IGEsYWr7OcmDDOjHL+73oP4lVjyPgT8wdTMe6tI5LdBgv+KZ+0kiThK3ckvcPsfgvLQ==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.7.tgz", + "integrity": "sha512-1qlEeDjX9OKZEryC8i4bA+twNg+lB5RKrozlNwWx/lLJHqWPUfvUTvxh+uxlPYL9KzVReQjUuxMLFMsHNqWUrA==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/cli": "15.5.3", - "@nrwl/tao": "15.5.3", + "@nrwl/cli": "15.9.7", + "@nrwl/tao": "15.9.7", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", + "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", "axios": "^1.0.0", "chalk": "^4.1.0", @@ -6724,7 +6912,7 @@ "minimatch": "3.0.5", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "semver": "7.3.4", + "semver": "7.5.4", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", @@ -6738,6 +6926,17 @@ "bin": { "nx": "bin/nx.js" }, + "optionalDependencies": { + "@nrwl/nx-darwin-arm64": "15.9.7", + "@nrwl/nx-darwin-x64": "15.9.7", + "@nrwl/nx-linux-arm-gnueabihf": "15.9.7", + "@nrwl/nx-linux-arm64-gnu": "15.9.7", + "@nrwl/nx-linux-arm64-musl": "15.9.7", + "@nrwl/nx-linux-x64-gnu": "15.9.7", + "@nrwl/nx-linux-x64-musl": "15.9.7", + "@nrwl/nx-win32-arm64-msvc": "15.9.7", + "@nrwl/nx-win32-x64-msvc": "15.9.7" + }, "peerDependencies": { "@swc-node/register": "^1.4.2", "@swc/core": "^1.2.173" @@ -6837,21 +7036,6 @@ "node": "*" } }, - "node_modules/nx/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/nx/node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -7897,9 +8081,9 @@ } }, "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -8142,9 +8326,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -9039,9 +9223,9 @@ } }, "node_modules/write-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -9219,12 +9403,65 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { @@ -9257,9 +9494,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "source-map": { @@ -9271,22 +9508,15 @@ } }, "@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "requires": { - "@babel/types": "^7.15.6", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" } }, "@babel/helper-compilation-targets": { @@ -9302,40 +9532,36 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, - "@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" - } + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true }, - "@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { @@ -9403,18 +9629,24 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.22.5" } }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { @@ -9435,13 +9667,13 @@ } }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -9477,13 +9709,13 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { @@ -9498,46 +9730,48 @@ } }, "@babel/parser": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true }, "@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -9578,6 +9812,45 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@lerna/add": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/@lerna/add/-/add-6.4.1.tgz", @@ -10514,15 +10787,6 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -10682,45 +10946,108 @@ } }, "@nrwl/cli": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.5.3.tgz", - "integrity": "sha512-NWf9CWswvdYM6YzXuweaZPAZ2erMtQrrHZdgFbUGeojZBZ+b4TCGzLWNodZj4yQOa/eTwlyPMYO2LEw9CoapDQ==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.7.tgz", + "integrity": "sha512-1jtHBDuJzA57My5nLzYiM372mJW0NY6rFKxlWt5a0RLsAZdPTHsd8lE3Gs9XinGC1jhXbruWmhhnKyYtZvX/zA==", "dev": true, "requires": { - "nx": "15.5.3" + "nx": "15.9.7" } }, "@nrwl/devkit": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.5.3.tgz", - "integrity": "sha512-GGNLLGXDGWflrpaLimnE6hChfZfq3+XWZ0LJWL0IuCnchngPbNzuyh8S8KPgNKKgq4Nv0hglWefIwMg2UhHysA==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.9.7.tgz", + "integrity": "sha512-Sb7Am2TMT8AVq8e+vxOlk3AtOA2M0qCmhBzoM1OJbdHaPKc0g0UgSnWRml1kPGg5qfPk72tWclLoZJ5/ut0vTg==", "dev": true, "requires": { - "@phenomnomnominal/tsquery": "4.1.1", "ejs": "^3.1.7", "ignore": "^5.0.4", - "semver": "7.3.4", + "semver": "7.5.4", + "tmp": "~0.2.1", "tslib": "^2.3.0" }, "dependencies": { - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "rimraf": "^3.0.0" } } } }, + "@nrwl/nx-darwin-arm64": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.7.tgz", + "integrity": "sha512-aBUgnhlkrgC0vu0fK6eb9Vob7eFnkuknrK+YzTjmLrrZwj7FGNAeyGXSlyo1dVokIzjVKjJg2saZZ0WQbfuCJw==", + "dev": true, + "optional": true + }, + "@nrwl/nx-darwin-x64": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.7.tgz", + "integrity": "sha512-L+elVa34jhGf1cmn38Z0sotQatmLovxoASCIw5r1CBZZeJ5Tg7Y9nOwjRiDixZxNN56hPKXm6xl9EKlVHVeKlg==", + "dev": true, + "optional": true + }, + "@nrwl/nx-linux-arm-gnueabihf": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.7.tgz", + "integrity": "sha512-pqmfqqEUGFu6PmmHKyXyUw1Al0Ki8PSaR0+ndgCAb1qrekVDGDfznJfaqxN0JSLeolPD6+PFtLyXNr9ZyPFlFg==", + "dev": true, + "optional": true + }, + "@nrwl/nx-linux-arm64-gnu": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.7.tgz", + "integrity": "sha512-NYOa/eRrqmM+In5g3M0rrPVIS9Z+q6fvwXJYf/KrjOHqqan/KL+2TOfroA30UhcBrwghZvib7O++7gZ2hzwOnA==", + "dev": true, + "optional": true + }, + "@nrwl/nx-linux-arm64-musl": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.7.tgz", + "integrity": "sha512-zyStqjEcmbvLbejdTOrLUSEdhnxNtdQXlmOuymznCzYUEGRv+4f7OAepD3yRoR0a/57SSORZmmGQB7XHZoYZJA==", + "dev": true, + "optional": true + }, + "@nrwl/nx-linux-x64-gnu": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.7.tgz", + "integrity": "sha512-saNK5i2A8pKO3Il+Ejk/KStTApUpWgCxjeUz9G+T8A+QHeDloZYH2c7pU/P3jA9QoNeKwjVO9wYQllPL9loeVg==", + "dev": true, + "optional": true + }, + "@nrwl/nx-linux-x64-musl": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.7.tgz", + "integrity": "sha512-extIUThYN94m4Vj4iZggt6hhMZWQSukBCo8pp91JHnDcryBg7SnYmnikwtY1ZAFyyRiNFBLCKNIDFGkKkSrZ9Q==", + "dev": true, + "optional": true + }, + "@nrwl/nx-win32-arm64-msvc": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.7.tgz", + "integrity": "sha512-GSQ54hJ5AAnKZb4KP4cmBnJ1oC4ILxnrG1mekxeM65c1RtWg9NpBwZ8E0gU3xNrTv8ZNsBeKi/9UhXBxhsIh8A==", + "dev": true, + "optional": true + }, + "@nrwl/nx-win32-x64-msvc": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.7.tgz", + "integrity": "sha512-x6URof79RPd8AlapVbPefUD3ynJZpmah3tYaYZ9xZRMXojVtEHV8Qh5vysKXQ1rNYJiiB8Ah6evSKWLbAH60tw==", + "dev": true, + "optional": true + }, "@nrwl/tao": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.5.3.tgz", - "integrity": "sha512-vgPLIW9IoBfQ4IkHRT5RC4LqNwFBK5jmHYmFIRgbIeFRudFBbnpmOaKRME0OwN7qJ6964PVVbzahAPvYVD02xw==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.7.tgz", + "integrity": "sha512-OBnHNvQf3vBH0qh9YnvBQQWyyFZ+PWguF6dJ8+1vyQYlrLVk/XZ8nJ4ukWFb+QfPv/O8VBmqaofaOI9aFC4yTw==", "dev": true, "requires": { - "nx": "15.5.3" + "nx": "15.9.7" } }, "@octokit/auth-token": { @@ -10863,15 +11190,6 @@ "node-gyp-build": "^4.3.0" } }, - "@phenomnomnominal/tsquery": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz", - "integrity": "sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==", - "dev": true, - "requires": { - "esquery": "^1.0.1" - } - }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -10915,9 +11233,9 @@ "dev": true }, "@yarnpkg/parsers": { - "version": "3.0.0-rc.36", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.36.tgz", - "integrity": "sha512-PvTlgUr7WO2qDnph8tVdItbJlo9hEcGSVd8+ppn/tvcn8XZUaD1z4EgvMEZcJYZi3LmHJGzSgVZzcFE+zQiz8A==", + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", "dev": true, "requires": { "js-yaml": "^3.10.0", @@ -11758,9 +12076,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -12130,21 +12448,6 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -12500,9 +12803,9 @@ "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "string_decoder": { @@ -12596,9 +12899,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -13191,9 +13494,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -13497,15 +13800,6 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -13591,9 +13885,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -13713,9 +14007,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "type-fest": { @@ -14394,16 +14688,25 @@ } }, "nx": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-15.5.3.tgz", - "integrity": "sha512-PHB8VbiBLP108xb+yR8IGEsYWr7OcmDDOjHL+73oP4lVjyPgT8wdTMe6tI5LdBgv+KZ+0kiThK3ckvcPsfgvLQ==", - "dev": true, - "requires": { - "@nrwl/cli": "15.5.3", - "@nrwl/tao": "15.5.3", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.7.tgz", + "integrity": "sha512-1qlEeDjX9OKZEryC8i4bA+twNg+lB5RKrozlNwWx/lLJHqWPUfvUTvxh+uxlPYL9KzVReQjUuxMLFMsHNqWUrA==", + "dev": true, + "requires": { + "@nrwl/cli": "15.9.7", + "@nrwl/nx-darwin-arm64": "15.9.7", + "@nrwl/nx-darwin-x64": "15.9.7", + "@nrwl/nx-linux-arm-gnueabihf": "15.9.7", + "@nrwl/nx-linux-arm64-gnu": "15.9.7", + "@nrwl/nx-linux-arm64-musl": "15.9.7", + "@nrwl/nx-linux-x64-gnu": "15.9.7", + "@nrwl/nx-linux-x64-musl": "15.9.7", + "@nrwl/nx-win32-arm64-msvc": "15.9.7", + "@nrwl/nx-win32-x64-msvc": "15.9.7", + "@nrwl/tao": "15.9.7", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", + "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", "axios": "^1.0.0", "chalk": "^4.1.0", @@ -14424,7 +14727,7 @@ "minimatch": "3.0.5", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "semver": "7.3.4", + "semver": "7.5.4", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", @@ -14504,15 +14807,6 @@ "brace-expansion": "^1.1.7" } }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -15248,9 +15542,9 @@ "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "strip-bom": { @@ -15478,9 +15772,9 @@ "dev": true }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -16179,9 +16473,9 @@ "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "sort-keys": { diff --git a/packages/client-sdk/package-lock.json b/packages/client-sdk/package-lock.json index e673f2d655..48c44a3654 100644 --- a/packages/client-sdk/package-lock.json +++ b/packages/client-sdk/package-lock.json @@ -1457,9 +1457,9 @@ "dev": true }, "node_modules/database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "dependencies": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", @@ -8391,9 +8391,9 @@ "dev": true }, "database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "requires": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", diff --git a/packages/cloud-sdk/package-lock.json b/packages/cloud-sdk/package-lock.json index bb3911438a..92e301202a 100644 --- a/packages/cloud-sdk/package-lock.json +++ b/packages/cloud-sdk/package-lock.json @@ -1261,11 +1261,11 @@ } }, "node_modules/database-proxy": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.2.tgz", - "integrity": "sha512-sN4TffB5on0vqNs7pNOzgQLkNmVphotehI1ZMpnSXSMDjXN2RQVwMrOWhOFScuF63efj3dlHPahdgmsbzh9KMA==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.12.tgz", + "integrity": "sha512-kakf0lNpCJTG+ji9lXERfRl+FjkUQwI/edpdbnI+PwY1Ex8un1BPuOE/JstlNegaP9fB7dhtRkvvA6au0A5Hgg==", "dependencies": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", @@ -1273,9 +1273,9 @@ } }, "node_modules/database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "dependencies": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", @@ -2751,11 +2751,11 @@ } }, "database-proxy": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.2.tgz", - "integrity": "sha512-sN4TffB5on0vqNs7pNOzgQLkNmVphotehI1ZMpnSXSMDjXN2RQVwMrOWhOFScuF63efj3dlHPahdgmsbzh9KMA==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.12.tgz", + "integrity": "sha512-kakf0lNpCJTG+ji9lXERfRl+FjkUQwI/edpdbnI+PwY1Ex8un1BPuOE/JstlNegaP9fB7dhtRkvvA6au0A5Hgg==", "requires": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", @@ -2763,9 +2763,9 @@ } }, "database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "requires": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", diff --git a/packages/database-proxy/package-lock.json b/packages/database-proxy/package-lock.json index 4666d6fba2..94df4d64c0 100644 --- a/packages/database-proxy/package-lock.json +++ b/packages/database-proxy/package-lock.json @@ -339,9 +339,9 @@ "dev": true }, "node_modules/database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "dependencies": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", @@ -1596,9 +1596,9 @@ "dev": true }, "database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "requires": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", diff --git a/runtimes/nodejs/package-lock.json b/runtimes/nodejs/package-lock.json index c5697c2bb0..8df98a068b 100644 --- a/runtimes/nodejs/package-lock.json +++ b/runtimes/nodejs/package-lock.json @@ -2086,14 +2086,14 @@ } }, "node_modules/@lafjs/cloud": { - "version": "1.0.0-beta.7", - "resolved": "https://registry.npmjs.org/@lafjs/cloud/-/cloud-1.0.0-beta.7.tgz", - "integrity": "sha512-JyVIon9sxq7fqROCU/4pn/2xcORKEZfZ65MwpUSf7yvXYv/BvhRMHFj98N9r6mGFLyfwJXfzGDNdjqMlGUKGPg==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/@lafjs/cloud/-/cloud-1.0.0-beta.12.tgz", + "integrity": "sha512-YNUJ0P9o6htAIA8V5cUl0bouq5WvPw3NKaPnzp4ZE7HFab3jO9McIElAPfI4T4R7Knxxkpm8S00l0oDjm6B68g==", "dependencies": { "@types/express": "^4.17.15", "@types/ws": "^8.5.3", "axios": "^1.2.1", - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "mongodb": "^4.12.1", "ws": "^8.11.0" } @@ -3466,11 +3466,11 @@ } }, "node_modules/database-proxy": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.2.tgz", - "integrity": "sha512-sN4TffB5on0vqNs7pNOzgQLkNmVphotehI1ZMpnSXSMDjXN2RQVwMrOWhOFScuF63efj3dlHPahdgmsbzh9KMA==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.12.tgz", + "integrity": "sha512-kakf0lNpCJTG+ji9lXERfRl+FjkUQwI/edpdbnI+PwY1Ex8un1BPuOE/JstlNegaP9fB7dhtRkvvA6au0A5Hgg==", "dependencies": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", @@ -3478,9 +3478,9 @@ } }, "node_modules/database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "dependencies": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", @@ -5002,9 +5002,9 @@ } }, "node_modules/named-placeholders/node_modules/lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "engines": { "node": ">=12" } @@ -7970,14 +7970,14 @@ } }, "@lafjs/cloud": { - "version": "1.0.0-beta.7", - "resolved": "https://registry.npmjs.org/@lafjs/cloud/-/cloud-1.0.0-beta.7.tgz", - "integrity": "sha512-JyVIon9sxq7fqROCU/4pn/2xcORKEZfZ65MwpUSf7yvXYv/BvhRMHFj98N9r6mGFLyfwJXfzGDNdjqMlGUKGPg==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/@lafjs/cloud/-/cloud-1.0.0-beta.12.tgz", + "integrity": "sha512-YNUJ0P9o6htAIA8V5cUl0bouq5WvPw3NKaPnzp4ZE7HFab3jO9McIElAPfI4T4R7Knxxkpm8S00l0oDjm6B68g==", "requires": { "@types/express": "^4.17.15", "@types/ws": "^8.5.3", "axios": "^1.2.1", - "database-proxy": "^1.0.0-beta.2", + "database-proxy": "^1.0.0-beta.12", "mongodb": "^4.12.1", "ws": "^8.11.0" } @@ -9103,11 +9103,11 @@ } }, "database-proxy": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.2.tgz", - "integrity": "sha512-sN4TffB5on0vqNs7pNOzgQLkNmVphotehI1ZMpnSXSMDjXN2RQVwMrOWhOFScuF63efj3dlHPahdgmsbzh9KMA==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.12.tgz", + "integrity": "sha512-kakf0lNpCJTG+ji9lXERfRl+FjkUQwI/edpdbnI+PwY1Ex8un1BPuOE/JstlNegaP9fB7dhtRkvvA6au0A5Hgg==", "requires": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", @@ -9115,9 +9115,9 @@ } }, "database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "requires": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", @@ -10301,9 +10301,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.17.0.tgz", - "integrity": "sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==" + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" } } }, diff --git a/server/package-lock.json b/server/package-lock.json index b883eb1db7..1a9e9f7748 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -8072,11 +8072,11 @@ } }, "node_modules/database-proxy": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.2.tgz", - "integrity": "sha512-sN4TffB5on0vqNs7pNOzgQLkNmVphotehI1ZMpnSXSMDjXN2RQVwMrOWhOFScuF63efj3dlHPahdgmsbzh9KMA==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.12.tgz", + "integrity": "sha512-kakf0lNpCJTG+ji9lXERfRl+FjkUQwI/edpdbnI+PwY1Ex8un1BPuOE/JstlNegaP9fB7dhtRkvvA6au0A5Hgg==", "dependencies": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", @@ -8101,9 +8101,9 @@ } }, "node_modules/database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "dependencies": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", @@ -22189,11 +22189,11 @@ } }, "database-proxy": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.2.tgz", - "integrity": "sha512-sN4TffB5on0vqNs7pNOzgQLkNmVphotehI1ZMpnSXSMDjXN2RQVwMrOWhOFScuF63efj3dlHPahdgmsbzh9KMA==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.12.tgz", + "integrity": "sha512-kakf0lNpCJTG+ji9lXERfRl+FjkUQwI/edpdbnI+PwY1Ex8un1BPuOE/JstlNegaP9fB7dhtRkvvA6au0A5Hgg==", "requires": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", @@ -22215,9 +22215,9 @@ } }, "database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "requires": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", diff --git a/services/log-server/package-lock.json b/services/log-server/package-lock.json index 9ddc500681..9d4c0a899e 100644 --- a/services/log-server/package-lock.json +++ b/services/log-server/package-lock.json @@ -1443,11 +1443,11 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/database-proxy": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.2.tgz", - "integrity": "sha512-sN4TffB5on0vqNs7pNOzgQLkNmVphotehI1ZMpnSXSMDjXN2RQVwMrOWhOFScuF63efj3dlHPahdgmsbzh9KMA==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-proxy/-/database-proxy-1.0.0-beta.12.tgz", + "integrity": "sha512-kakf0lNpCJTG+ji9lXERfRl+FjkUQwI/edpdbnI+PwY1Ex8un1BPuOE/JstlNegaP9fB7dhtRkvvA6au0A5Hgg==", "dependencies": { - "database-ql": "^1.0.0-beta.2", + "database-ql": "^1.0.0-beta.12", "lodash": "^4.17.21", "mongodb": "^4.1.1", "mysql2": "^2.2.5", @@ -1472,9 +1472,9 @@ } }, "node_modules/database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "dependencies": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", diff --git a/web/package-lock.json b/web/package-lock.json index 484ddb67d1..0b7c0e5127 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -5848,9 +5848,9 @@ "dev": true }, "node_modules/database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "dependencies": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", @@ -8164,12 +8164,12 @@ } }, "node_modules/laf-client-sdk": { - "version": "1.0.0-beta.10", - "resolved": "https://registry.npmjs.org/laf-client-sdk/-/laf-client-sdk-1.0.0-beta.10.tgz", - "integrity": "sha512-6lWCL2wq+ZO58u755JJa2W7zfqu5mHIxQN7vuOm+HZHkvtmoBTYTZjxcw9wSb32McyTmQpItUpFMW1dJ8rjXvg==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/laf-client-sdk/-/laf-client-sdk-1.0.0-beta.12.tgz", + "integrity": "sha512-ERrNK/1Qa0MtJ/0VjLqNhZzXYrUm1OzOotmtpx0Bzxv14kc1pPN8GsPdkILUWz24HJQFeJ8nNxUAM8kFhf2KyQ==", "dependencies": { "axios": "^0.21.1", - "database-ql": "^1.0.0-beta.2" + "database-ql": "^1.0.0-beta.12" } }, "node_modules/laf-client-sdk/node_modules/axios": { @@ -16579,9 +16579,9 @@ "dev": true }, "database-ql": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.2.tgz", - "integrity": "sha512-3q1ttPwaOdaOpG8BiKZOs6Jr8g9cxCM4hBbmFP1VOwijAcXNsbEj04dB6WJjX+THFxa3VFSxvReGC0TfHFxo5g==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/database-ql/-/database-ql-1.0.0-beta.12.tgz", + "integrity": "sha512-Irt5Ed8+gy5Aj8ZWGAycxl32SEhHPZqIh2k6G87URji4ra9uIOZZqdM33KVqsynPdwxSalEUCmF75ZSujX26/w==", "requires": { "bson": "^4.5.3", "lodash.clonedeep": "4.5.0", @@ -18292,12 +18292,12 @@ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" }, "laf-client-sdk": { - "version": "1.0.0-beta.10", - "resolved": "https://registry.npmjs.org/laf-client-sdk/-/laf-client-sdk-1.0.0-beta.10.tgz", - "integrity": "sha512-6lWCL2wq+ZO58u755JJa2W7zfqu5mHIxQN7vuOm+HZHkvtmoBTYTZjxcw9wSb32McyTmQpItUpFMW1dJ8rjXvg==", + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/laf-client-sdk/-/laf-client-sdk-1.0.0-beta.12.tgz", + "integrity": "sha512-ERrNK/1Qa0MtJ/0VjLqNhZzXYrUm1OzOotmtpx0Bzxv14kc1pPN8GsPdkILUWz24HJQFeJ8nNxUAM8kFhf2KyQ==", "requires": { "axios": "^0.21.1", - "database-ql": "^1.0.0-beta.2" + "database-ql": "^1.0.0-beta.12" }, "dependencies": { "axios": { From 525a063987604ea7d96e2555d8274c48cf66844e Mon Sep 17 00:00:00 2001 From: 0fatal <72899968+0fatal@users.noreply.github.com> Date: Tue, 31 Oct 2023 16:43:03 +0800 Subject: [PATCH 6/9] fix(web): fix add index bug (#1626) --- .../app/database/mods/AddIndexModal/index.tsx | 5 +++-- .../app/database/mods/IndexModal/index.tsx | 18 ++++++++---------- web/src/pages/app/database/service.ts | 4 +--- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/web/src/pages/app/database/mods/AddIndexModal/index.tsx b/web/src/pages/app/database/mods/AddIndexModal/index.tsx index 0d3bad01e8..d9f97e69ad 100644 --- a/web/src/pages/app/database/mods/AddIndexModal/index.tsx +++ b/web/src/pages/app/database/mods/AddIndexModal/index.tsx @@ -53,7 +53,7 @@ const AddIndexModal = (props: { children: React.ReactElement }) => { const createIndexMutation = useCreateIndexMutation(); const [showAdvancedOptions, setShowAdvancedOptions] = useState(false); - const { register, control, handleSubmit } = useForm({ + const { register, control, handleSubmit, reset } = useForm({ defaultValues: { name: "", capped: false, @@ -85,7 +85,7 @@ const AddIndexModal = (props: { children: React.ReactElement }) => { const onSubmit: SubmitHandler = useCallback( async (value) => { const keys = value.keys.reduce>((acc, cur) => { - acc[cur.name] = cur.type; + acc[cur.name] = Number(cur.type) || cur.type; return acc; }, {}); @@ -118,6 +118,7 @@ const AddIndexModal = (props: { children: React.ReactElement }) => { <> {React.cloneElement(children, { onClick: () => { + reset(); onOpen(); }, })} diff --git a/web/src/pages/app/database/mods/IndexModal/index.tsx b/web/src/pages/app/database/mods/IndexModal/index.tsx index b7977e17f5..9c1086b083 100644 --- a/web/src/pages/app/database/mods/IndexModal/index.tsx +++ b/web/src/pages/app/database/mods/IndexModal/index.tsx @@ -115,16 +115,14 @@ const IndexModal = (props: { children: React.ReactElement }) => { -
- dropIndexMutation.mutateAsync(v.name)} - title={String(t("Delete"))} - placement="left" - description={t("CollectionPanel.ConfirmDeleteIndex")} - > - - -
+ dropIndexMutation.mutateAsync(v.name)} + title={String(t("Delete"))} + placement="left" + description={t("CollectionPanel.ConfirmDeleteIndex")} + > + + ))} diff --git a/web/src/pages/app/database/service.ts b/web/src/pages/app/database/service.ts index 352106f30b..71060a0089 100644 --- a/web/src/pages/app/database/service.ts +++ b/web/src/pages/app/database/service.ts @@ -366,9 +366,7 @@ export const useCreateIndexMutation = (config?: { onSuccess: (data: any) => void return useMutation( async (values: any) => { - const result = await db - .collection(currentDB?.name!) - .createIndex(values.fields, values.options); + const result = await db.collection(currentDB?.name!).createIndex(values.keys, values.options); return result; }, { From 779fae94655c2eefdf989b2d8f4f559c4d3dfd94 Mon Sep 17 00:00:00 2001 From: heheer <71265218+newfish-cmyk@users.noreply.github.com> Date: Tue, 31 Oct 2023 17:11:42 +0800 Subject: [PATCH 7/9] feat(web): footer add 'about us' page (#1622) --- web/public/locales/en/translation.json | 3 ++- web/public/locales/zh-CN/translation.json | 3 ++- web/public/locales/zh/translation.json | 3 ++- web/src/constants/index.ts | 1 + web/src/pages/homepage/footer.tsx | 12 ++++++++++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/web/public/locales/en/translation.json b/web/public/locales/en/translation.json index 2e81a53860..51fb2b84ff 100644 --- a/web/public/locales/en/translation.json +++ b/web/public/locales/en/translation.json @@ -483,7 +483,8 @@ "item2_5": "Docs", "support": "Support", "item3_1": "Feedback", - "item3_2": "Forum" + "item3_2": "Forum", + "item3_3": "About us" } }, "ChatGPT example": "ChatGPT example", diff --git a/web/public/locales/zh-CN/translation.json b/web/public/locales/zh-CN/translation.json index 6e6993f32f..714f1a0d1f 100644 --- a/web/public/locales/zh-CN/translation.json +++ b/web/public/locales/zh-CN/translation.json @@ -483,7 +483,8 @@ "item2_5": "文档", "support": "支持", "item3_1": "问题反馈", - "item3_2": "开发者社区" + "item3_2": "开发者社区", + "item3_3": "关于我们" } }, "ChatGPT example": "ChatGPT 示例", diff --git a/web/public/locales/zh/translation.json b/web/public/locales/zh/translation.json index 4de857e634..2be9f5d5f0 100644 --- a/web/public/locales/zh/translation.json +++ b/web/public/locales/zh/translation.json @@ -483,7 +483,8 @@ "item2_5": "文档", "support": "支持", "item3_1": "问题反馈", - "item3_2": "开发者社区" + "item3_2": "开发者社区", + "item3_3": "关于我们" } }, "ChatGPT example": "ChatGPT 示例", diff --git a/web/src/constants/index.ts b/web/src/constants/index.ts index f2ed4de97e..4f03060da2 100644 --- a/web/src/constants/index.ts +++ b/web/src/constants/index.ts @@ -73,6 +73,7 @@ export const site_url = { laf_doc: "https://doc.laf.run/guide/", laf_github: "https://github.com/labring/laf", laf_index_video: "https://itceb8-video.oss.laf.run/laf-website.mp4", + laf_about_us: "https://sealos.run/zh-Hans/company/", }; export const CHAKRA_UI_COLOR_MODE_KEY = "chakra-ui-color-mode"; diff --git a/web/src/pages/homepage/footer.tsx b/web/src/pages/homepage/footer.tsx index 9a7da4bfa0..2f5c8390e6 100644 --- a/web/src/pages/homepage/footer.tsx +++ b/web/src/pages/homepage/footer.tsx @@ -148,6 +148,12 @@ const Footer = (props: Props) => { {t("HomePage.Footer.item3_2")} + +
  • + + {t("HomePage.Footer.item3_3")} + +
  • @@ -270,6 +276,12 @@ const Footer = (props: Props) => { {t("HomePage.Footer.item3_2")} + +
  • + + {t("HomePage.Footer.item3_3")} + +
  • From 8d95fff415b52a18b7a152e4a88d2c7e7fbbda34 Mon Sep 17 00:00:00 2001 From: skyoct <764213885@qq.com> Date: Wed, 1 Nov 2023 13:53:26 +0800 Subject: [PATCH 8/9] feat(runtime): refactor log console & enable module cache (#1618) * feat: refactor log console * feat(runtime): opt console * fix: fix some problem * fix: opt cache remove * fix: default enable module cache * feat: console add function name * fix: fix runtime log format & websocket cache --------- Co-authored-by: maslow --- package-lock.json | 11 +++ package.json | 1 + runtimes/nodejs/README.md | 8 +-- runtimes/nodejs/package.json | 2 +- runtimes/nodejs/src/config.ts | 4 +- runtimes/nodejs/src/handler/invoke.ts | 19 +++-- runtimes/nodejs/src/index.ts | 13 ---- runtimes/nodejs/src/storage-server.ts | 14 ++-- runtimes/nodejs/src/support/engine/cache.ts | 5 +- runtimes/nodejs/src/support/engine/console.ts | 72 +++++++++---------- .../nodejs/src/support/engine/function.ts | 7 +- runtimes/nodejs/src/support/engine/module.ts | 23 +++--- runtimes/nodejs/src/support/engine/types.ts | 3 +- runtimes/nodejs/src/support/engine/utils.ts | 14 ++-- runtimes/nodejs/src/support/ws.ts | 36 +++------- .../ingress/runtime-ingress.service.ts | 3 +- 16 files changed, 116 insertions(+), 119 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89635ed5db..d8c201d87d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "dependencies": { "commander": "^9.2.0", + "dayjs": "^1.11.10", "dotenv": "^10.0.0" }, "devDependencies": { @@ -3597,6 +3598,11 @@ "node": "*" } }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -12192,6 +12198,11 @@ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true }, + "dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", diff --git a/package.json b/package.json index 6e07b04e6d..9e0933d645 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ }, "dependencies": { "commander": "^9.2.0", + "dayjs": "^1.11.10", "dotenv": "^10.0.0" } } diff --git a/runtimes/nodejs/README.md b/runtimes/nodejs/README.md index 05715f5a76..3745037e60 100644 --- a/runtimes/nodejs/README.md +++ b/runtimes/nodejs/README.md @@ -30,13 +30,13 @@ cd runtimes/nodejs # connect the cluster if not connected telepresence connect -export APPID=your-app-id +export appid=your-app-id # proxy app cluster traffic to local, replace `APPID` with your prepared appid -telepresence intercept $APPID -n $APPID -p 8000:8000 -e $(pwd)/.env +telepresence intercept $appid -n laf-runtime -p 8000:8000 -e $(pwd)/.env # after intercept command, you can use following command to check if intercept active -telepresence list -n $APPID +telepresence list -n $appid # Start local service first, required nodejs version >= 18.0.0 npm install @@ -50,5 +50,5 @@ npm start > Clean up ```bash -telepresence leave $APPID-$APPID +telepresence leave $appid-laf-runtime ``` diff --git a/runtimes/nodejs/package.json b/runtimes/nodejs/package.json index 9bf31d83a5..c8644dd861 100644 --- a/runtimes/nodejs/package.json +++ b/runtimes/nodejs/package.json @@ -77,4 +77,4 @@ ], "delay": 1000 } -} +} \ No newline at end of file diff --git a/runtimes/nodejs/src/config.ts b/runtimes/nodejs/src/config.ts index a2ee79583e..7ace9516ec 100644 --- a/runtimes/nodejs/src/config.ts +++ b/runtimes/nodejs/src/config.ts @@ -101,7 +101,7 @@ export default class Config { return process.env.OSS_EXTERNAL_ENDPOINT } - static get ENABLE_MODULE_CACHE(): boolean { - return process.env.ENABLE_MODULE_CACHE === 'true' || false + static get DISABLE_MODULE_CACHE(): boolean { + return process.env.DISABLE_MODULE_CACHE === 'true' } } diff --git a/runtimes/nodejs/src/handler/invoke.ts b/runtimes/nodejs/src/handler/invoke.ts index 159b03a5b9..70c7d76927 100644 --- a/runtimes/nodejs/src/handler/invoke.ts +++ b/runtimes/nodejs/src/handler/invoke.ts @@ -5,6 +5,7 @@ import { parseToken } from '../support/token' import { logger } from '../support/logger' import { CloudFunction, + DebugConsole, FunctionCache, FunctionContext, ICloudFunctionData, @@ -84,12 +85,10 @@ async function invokeFunction( result, ) - ctx.response - .status(400) - .send({ - error: `invoke ${ctx.__function_name} function got error, please check the function logs`, - requestId, - }) + ctx.response.status(400).send({ + error: `invoke ${ctx.__function_name} function got error, please check the function logs`, + requestId, + }) return false } @@ -168,10 +167,16 @@ async function invokeDebug( const func = new CloudFunction(funcData) + const debugConsole = new DebugConsole(funcName) + try { // execute the func ctx.__function_name = funcName - const result = await func.execute(ctx, useInterceptor) + const result = await func.execute(ctx, useInterceptor, debugConsole) + + // set logs to response header + ctx.response.set('x-laf-func-logs', debugConsole.getLogs()) + ctx.response.set('x-laf-func-time-usage', result.time_usage.toString()) if (result.error) { logger.error(requestId, `debug function ${funcName} error: `, result) diff --git a/runtimes/nodejs/src/index.ts b/runtimes/nodejs/src/index.ts index ea0722bd34..20f3794391 100644 --- a/runtimes/nodejs/src/index.ts +++ b/runtimes/nodejs/src/index.ts @@ -69,19 +69,6 @@ app.use(function (req, res, next) { const requestId = (req['requestId'] = req.headers['x-request-id'] || generateUUID()) - if (req.url !== '/_/healthz') { - logger.info( - requestId, - `${req.method} "${req.url}" - referer: ${ - req.get('referer') || '-' - } ${req.get('user-agent')}`, - ) - logger.trace(requestId, `${req.method} ${req.url}`, { - body: req.body, - headers: req.headers, - auth, - }) - } res.set('request-id', requestId) next() }) diff --git a/runtimes/nodejs/src/storage-server.ts b/runtimes/nodejs/src/storage-server.ts index 5a7050bea1..605ad1814d 100644 --- a/runtimes/nodejs/src/storage-server.ts +++ b/runtimes/nodejs/src/storage-server.ts @@ -9,12 +9,14 @@ import cors from 'cors' const app = express() -app.use(cors({ - origin: true, - methods: '*', - exposedHeaders: '*', - credentials: true, -})) +app.use( + cors({ + origin: true, + methods: '*', + exposedHeaders: '*', + credentials: true, + }), +) const tryPath = (bucket: string, path: string) => { const testPaths = path.endsWith('/') diff --git a/runtimes/nodejs/src/support/engine/cache.ts b/runtimes/nodejs/src/support/engine/cache.ts index 5962ada460..f8e43c4a89 100644 --- a/runtimes/nodejs/src/support/engine/cache.ts +++ b/runtimes/nodejs/src/support/engine/cache.ts @@ -6,6 +6,7 @@ import { CLOUD_FUNCTION_COLLECTION } from '../../constants' import { InitHook } from '../init-hook' import { DatabaseChangeStream } from '../database-change-stream' import { FunctionModule } from './module' +import { ChangeStreamDocument } from 'mongodb' export class FunctionCache { private static cache: Map = new Map() @@ -36,7 +37,7 @@ export class FunctionCache { * @param change * @returns */ - private static async streamChange(change): Promise { + private static async streamChange(change: ChangeStreamDocument): Promise { if (change.operationType === 'insert') { const func = await DatabaseAgent.db .collection(CLOUD_FUNCTION_COLLECTION) @@ -45,11 +46,11 @@ export class FunctionCache { // add func in map FunctionCache.cache.set(func.name, func) } else if (change.operationType == 'delete') { + FunctionModule.deleteAllCache() // remove this func for (const [funcName, func] of this.cache) { if (change.documentKey._id.equals(func._id)) { FunctionCache.cache.delete(funcName) - FunctionModule.deleteCache(funcName) } } } diff --git a/runtimes/nodejs/src/support/engine/console.ts b/runtimes/nodejs/src/support/engine/console.ts index aa60cb4099..6b38c1df42 100644 --- a/runtimes/nodejs/src/support/engine/console.ts +++ b/runtimes/nodejs/src/support/engine/console.ts @@ -1,48 +1,23 @@ import * as util from 'util' -import { FunctionContext } from './types' -import Config from '../../config' -import axios from 'axios' +import dayjs from 'dayjs' -export class FunctionConsole { - ctx: FunctionContext +export class Console { + functionName: string - static write(message: string, ctx: FunctionContext) { - if (!Config.LOG_SERVER_URL || !Config.LOG_SERVER_TOKEN) return - - const doc = { - request_id: ctx.requestId || '', - func: ctx.__function_name, - is_required: ctx.__is_required || false, - data: message, - created_at: new Date(), - } - - axios.post( - `${Config.LOG_SERVER_URL}/function/log`, - { - appid: Config.APPID, - log: doc, - }, - { - headers: { - 'x-token': Config.LOG_SERVER_TOKEN, - }, - }, - ) + constructor(functionName: string) { + this.functionName = functionName } - constructor(ctx: FunctionContext) { - this.ctx = ctx - } - - private _log(...params: any[]) { + _log(...params: any[]): void { + const now = dayjs().format('YYYY-MM-DD HH:mm:ss.SSS') const content = params .map((param) => { - return util.inspect(param, { depth: 30 }) + return util.inspect(param, { depth: 1 }) }) .join(' ') - - FunctionConsole.write(content, this.ctx) + + const data = `[${now}] [${this.functionName}] ${content}` + console.log(data) } debug(...params: any[]) { @@ -60,8 +35,29 @@ export class FunctionConsole { warn(...params: any[]) { this._log(...params) } +} - error(...params: any[]) { - this._log(...params) +export class DebugConsole extends Console { + constructor(functionName: string) { + super(functionName) + } + + private _logs: string[] = [] + + _log(...params: any[]): void { + const now = dayjs().format('YYYY-MM-DD HH:mm:ss.SSS') + const content = params + .map((param) => { + return util.inspect(param, { depth: 1 }) + }) + .join(' ') + + const data = `[${now}] [${this.functionName}] ${content}` + this._logs.push(data) + console.log(data) + } + + getLogs() { + return JSON.stringify(this._logs) } } diff --git a/runtimes/nodejs/src/support/engine/function.ts b/runtimes/nodejs/src/support/engine/function.ts index 172ea3672c..cd86ca3925 100644 --- a/runtimes/nodejs/src/support/engine/function.ts +++ b/runtimes/nodejs/src/support/engine/function.ts @@ -44,8 +44,9 @@ export class CloudFunction { async execute( param: FunctionContext, useInterceptor: boolean = false, + debugConsole: any = null, ): Promise { - const sandbox = buildSandbox(param, []) + const sandbox = buildSandbox(param, [], debugConsole) let code = `` if (useInterceptor) { const interceptorFunc = FunctionCache.get(INTERCEPTOR_FUNCTION_NAME) @@ -102,7 +103,7 @@ export class CloudFunction { const wrapped = ` const require = (module) => { fromModule.push(__filename) - return requireFunc(module, fromModule, __context__) + return requireFunc(module, fromModule) } ${code}; const __main__ = exports.main || exports.default @@ -122,7 +123,7 @@ export class CloudFunction { const wrapped = ` const require = (module) => { fromModule.push(__filename) - return requireFunc(module, fromModule, __context__) + return requireFunc(module, fromModule) } function __next__() { diff --git a/runtimes/nodejs/src/support/engine/module.ts b/runtimes/nodejs/src/support/engine/module.ts index da49b799c0..5435872238 100644 --- a/runtimes/nodejs/src/support/engine/module.ts +++ b/runtimes/nodejs/src/support/engine/module.ts @@ -1,16 +1,11 @@ +import { FunctionCache, FunctionContext } from '.' import Config from '../../config' -import { FunctionCache } from './cache' -import { FunctionContext } from './types' import { buildSandbox, createScript } from './utils' export class FunctionModule { private static cache: Map = new Map() - static require( - name: string, - fromModule: string[], - functionContext: FunctionContext, - ): any { + static require(name: string, fromModule: string[]): any { if (name === '@/cloud-sdk') { return require('@lafjs/cloud') } else if (name.startsWith('@/')) { @@ -28,6 +23,12 @@ export class FunctionModule { ) } + // build function context + const functionContext: FunctionContext = { + requestId: '', + __function_name: name, + } + // build function module const data = FunctionCache.get(name) const functionModule = FunctionModule.build( @@ -37,7 +38,7 @@ export class FunctionModule { ) // cache module - if (Config.ENABLE_MODULE_CACHE) { + if (Config.DISABLE_MODULE_CACHE) { FunctionModule.cache.set(name, functionModule) } return functionModule @@ -67,11 +68,15 @@ export class FunctionModule { FunctionModule.cache.delete(name) } + static deleteAllCache(): void { + FunctionModule.cache.clear() + } + private static wrap(code: string): string { return ` const require = (name) => { fromModule.push(__filename) - return requireFunc(name, fromModule, __context__) + return requireFunc(name, fromModule) } const exports = {}; ${code} diff --git a/runtimes/nodejs/src/support/engine/types.ts b/runtimes/nodejs/src/support/engine/types.ts index c9cf430fec..04f8a426bf 100644 --- a/runtimes/nodejs/src/support/engine/types.ts +++ b/runtimes/nodejs/src/support/engine/types.ts @@ -2,7 +2,6 @@ import { IncomingHttpHeaders } from 'http' import { Request, Response } from 'express' import { ObjectId } from 'mongodb' import WebSocket = require('ws') -import { FunctionConsole } from './console' export type RequireFuncType = ( module: string, @@ -17,7 +16,7 @@ export interface RuntimeContext { __context__: FunctionContext module: { exports: Object } exports: Object - console: FunctionConsole + console: any requireFunc: RequireFuncType Buffer: typeof Buffer setTimeout: typeof setTimeout diff --git a/runtimes/nodejs/src/support/engine/utils.ts b/runtimes/nodejs/src/support/engine/utils.ts index 08313b4aea..9343ffd09a 100644 --- a/runtimes/nodejs/src/support/engine/utils.ts +++ b/runtimes/nodejs/src/support/engine/utils.ts @@ -1,4 +1,4 @@ -import { FunctionConsole } from './console' +import { Console } from './console' import { FunctionModule } from './module' import { FunctionContext, RuntimeContext } from './types' import * as vm from 'vm' @@ -35,9 +35,8 @@ export function createScript( export function buildSandbox( functionContext: FunctionContext, fromModule: string[], + debugConsole: any = null, ): RuntimeContext { - const fconsole = new FunctionConsole(functionContext) - const _module = { exports: {}, } @@ -46,12 +45,19 @@ export function buildSandbox( fromModule = [] } + let fConsole = null + if (debugConsole) { + fConsole = debugConsole + } else { + fConsole = new Console(functionContext.__function_name) + } + const sandbox = { __context__: functionContext, __filename: functionContext.__function_name, module: _module, exports: _module.exports, - console: fconsole, + console: fConsole, requireFunc: FunctionModule.require, Buffer: Buffer, setImmediate: setImmediate, diff --git a/runtimes/nodejs/src/support/ws.ts b/runtimes/nodejs/src/support/ws.ts index 4d38b9d142..c5f6a3acc7 100644 --- a/runtimes/nodejs/src/support/ws.ts +++ b/runtimes/nodejs/src/support/ws.ts @@ -1,11 +1,9 @@ import { IncomingMessage } from 'http' import { WebSocket, WebSocketServer } from 'ws' import { - CLOUD_FUNCTION_COLLECTION, - WEBSOCKET_FUNCTION_NAME, + WEBSOCKET_FUNCTION_NAME, } from '../constants' -import { DatabaseAgent } from '../db' -import { CloudFunction, ICloudFunctionData } from './engine' +import { FunctionCache } from './engine' import { logger } from './logger' import { generateUUID } from './utils' @@ -70,37 +68,21 @@ async function handleWebSocketEvent( socket: WebSocket, request?: IncomingMessage, ) { - const func = await getWebsocketCloudFunction() - if (!func) { - logger.error('WebSocket function not found') - return 'WebSocket handler not found' - } const param: any = { params: data, method: event, requestId: generateUUID(), socket, - __function_name: func.name, + __function_name: WEBSOCKET_FUNCTION_NAME, headers: request?.headers, } - const cf = new CloudFunction(func) + // const cf = new CloudFunction(func) + const cf = FunctionCache.getEngine(WEBSOCKET_FUNCTION_NAME) + if (!cf) { + logger.error('WebSocket function not found') + return 'WebSocket handler not found' + } await cf.execute(param) } - -/** - * Get websocket handler cloud function - * @returns - */ -async function getWebsocketCloudFunction() { - const db = DatabaseAgent.db - - const doc = await db - .collection(CLOUD_FUNCTION_COLLECTION) - .findOne({ - name: WEBSOCKET_FUNCTION_NAME, - }) - - return doc -} diff --git a/server/src/gateway/ingress/runtime-ingress.service.ts b/server/src/gateway/ingress/runtime-ingress.service.ts index 62c1a36bf0..b87dbde587 100644 --- a/server/src/gateway/ingress/runtime-ingress.service.ts +++ b/server/src/gateway/ingress/runtime-ingress.service.ts @@ -87,8 +87,9 @@ export class RuntimeGatewayService { // k8s nginx ingress annotations // websocket is enabled by default in k8s nginx ingress 'nginx.ingress.kubernetes.io/proxy-body-size': '0', + 'nginx.ingress.kubernetes.io/proxy-buffer-size': '8192k', 'nginx.ingress.kubernetes.io/server-snippet': - 'client_header_buffer_size 4096k;\nlarge_client_header_buffers 8 512k;\n', + 'client_header_buffer_size 8192k;\nlarge_client_header_buffers 8 512k;\n', }, }, spec: { ingressClassName, rules, tls }, From c92d405de8443f0bfb1df3f41d22c59e7c32e734 Mon Sep 17 00:00:00 2001 From: heheer <71265218+newfish-cmyk@users.noreply.github.com> Date: Wed, 1 Nov 2023 13:54:23 +0800 Subject: [PATCH 9/9] fix(web): fix upload file entry 100 items limit (#1629) * fix(web): fix upload file entry 100 items limit * feat: add failed function retry --- web/public/locales/en/translation.json | 6 +- web/public/locales/zh-CN/translation.json | 6 +- web/public/locales/zh/translation.json | 6 +- web/src/components/FileUpload/index.tsx | 15 +- .../app/storages/mods/UploadButton/index.tsx | 139 ++++++++++++------ 5 files changed, 119 insertions(+), 53 deletions(-) diff --git a/web/public/locales/en/translation.json b/web/public/locales/en/translation.json index 51fb2b84ff..d28efdc8bc 100644 --- a/web/public/locales/en/translation.json +++ b/web/public/locales/en/translation.json @@ -287,7 +287,9 @@ "DomainUpdateSuccess": "Domain Update Success", "DomainDeleteSuccess": "Domain Delete Success", "CustomApplicationDomain": "Custom Application Domain", - "BucketNameisRequired": "Bucket name is required" + "BucketNameisRequired": "Bucket name is required", + "Fail": "upload failed", + "UploadFailTip": "{{number}} files upload failed" }, "TriggerPanel": { "AddTrigger": "Add Trigger", @@ -681,4 +683,4 @@ "Byte": "byte", "Second": "second", "Optional": "optional" -} \ No newline at end of file +} diff --git a/web/public/locales/zh-CN/translation.json b/web/public/locales/zh-CN/translation.json index 714f1a0d1f..4ada5e8ff2 100644 --- a/web/public/locales/zh-CN/translation.json +++ b/web/public/locales/zh-CN/translation.json @@ -287,7 +287,9 @@ "DomainUpdateSuccess": "域名修改成功", "DomainDeleteSuccess": "域名删除成功", "CustomApplicationDomain": "自定义应用域名", - "BucketNameisRequired": "请输入 Bucket 名称" + "BucketNameisRequired": "请输入 Bucket 名称", + "Fail": "上传失败", + "UploadFailTip": "{{number}} 个文件上传失败" }, "TriggerPanel": { "AddTrigger": "新建触发器", @@ -681,4 +683,4 @@ "Byte": "字节", "Second": "秒", "Optional": "可选" -} \ No newline at end of file +} diff --git a/web/public/locales/zh/translation.json b/web/public/locales/zh/translation.json index 2be9f5d5f0..3b69a5a293 100644 --- a/web/public/locales/zh/translation.json +++ b/web/public/locales/zh/translation.json @@ -287,7 +287,9 @@ "DomainUpdateSuccess": "域名修改成功", "DomainDeleteSuccess": "域名删除成功", "CustomApplicationDomain": "自定义应用域名", - "BucketNameisRequired": "请输入 Bucket 名称" + "BucketNameisRequired": "请输入 Bucket 名称", + "Fail": "上传失败", + "UploadFailTip": "{{number}} 个文件上传失败" }, "TriggerPanel": { "AddTrigger": "新建触发器", @@ -681,4 +683,4 @@ "Byte": "字节", "Second": "秒", "Optional": "可选" -} \ No newline at end of file +} diff --git a/web/src/components/FileUpload/index.tsx b/web/src/components/FileUpload/index.tsx index ff4c45f50a..fcf63bf30d 100644 --- a/web/src/components/FileUpload/index.tsx +++ b/web/src/components/FileUpload/index.tsx @@ -63,7 +63,7 @@ function FileUpload(props: { onUpload: (files: any) => void; darkMode: boolean } }); } else { const dirReader = file.createReader(); - dirReader.readEntries(function (entries: any) { + readAllEntries(dirReader, []).then((entries: any) => { const promises = []; for (let i = 0; i < entries.length; i++) { const entry = entries[i]; @@ -76,6 +76,19 @@ function FileUpload(props: { onUpload: (files: any) => void; darkMode: boolean } }); }; + function readAllEntries(dirReader: any, entries: any) { + return new Promise((resolve, reject) => { + dirReader.readEntries(function (newEntries: any) { + if (newEntries.length === 0) { + resolve(entries); + } else { + entries = entries.concat(newEntries); + readAllEntries(dirReader, entries).then(resolve).catch(reject); + } + }); + }); + } + // triggers when file is selected with click const handleChange = function (e: React.ChangeEvent) { e.preventDefault(); diff --git a/web/src/pages/app/storages/mods/UploadButton/index.tsx b/web/src/pages/app/storages/mods/UploadButton/index.tsx index b4a0a1a826..34ae05fcb7 100644 --- a/web/src/pages/app/storages/mods/UploadButton/index.tsx +++ b/web/src/pages/app/storages/mods/UploadButton/index.tsx @@ -1,7 +1,8 @@ import React from "react"; -import { useTranslation } from "react-i18next"; -import { CheckCircleIcon } from "@chakra-ui/icons"; +import { Trans, useTranslation } from "react-i18next"; +import { CheckCircleIcon, WarningIcon } from "@chakra-ui/icons"; import { + Button, Modal, ModalCloseButton, ModalContent, @@ -21,23 +22,85 @@ import useAwsS3 from "@/hooks/useAwsS3"; import useGlobalStore from "@/pages/globalStore"; export type TFileItem = { - status: boolean; + status: string; fileName: string; }; function UploadButton(props: { onUploadSuccess: Function; children: React.ReactElement }) { const { isOpen, onOpen, onClose } = useDisclosure(); const { currentStorage, prefix } = useStorageStore(); - const { showSuccess } = useGlobalStore(); + const { showSuccess, showError } = useGlobalStore(); const { uploadFile } = useAwsS3(); const [fileList, setFileList] = React.useState([]); const { t } = useTranslation(); const darkMode = useColorMode().colorMode === "dark"; const { onUploadSuccess, children } = props; + const [failedFileList, setFailedFileList] = React.useState([]); + + const handleUpload = async (files: any) => { + setFailedFileList([]); + const newFileList = Array.from(files).map((item: any) => ({ + fileName: + files[0] instanceof File + ? item.webkitRelativePath + ? item.webkitRelativePath.replace(/^[^/]*\//, "") + : item.name + : item.webkitRelativePath + ? item.webkitRelativePath + : item.file.name, + status: "pending", + })); + setFileList(newFileList); + const tasks = []; + const failedFiles: any[] = []; + for (let i = 0; i < files.length; i++) { + const file = files[0] instanceof File ? files[i] : files[i].file; + const fileName = + files[0] instanceof File + ? file.webkitRelativePath + ? file.webkitRelativePath.replace(/^[^/]*\//, "") + : file.name + : files[i].webkitRelativePath + ? files[i].webkitRelativePath + : file.name; + const task = uploadFile(currentStorage?.name!, prefix + fileName, file, { + contentType: file.type, + }) + .then(() => { + setFileList((pre) => { + const newList = [...pre]; + newList[i].status = "success"; + return newList; + }); + return true; + }) + .catch(() => { + setFileList((pre) => { + const newList = [...pre]; + newList[i].status = "fail"; + failedFiles.push(files[i]); + return newList; + }); + return false; + }); + tasks.push(task); + } + const res = await Promise.all(tasks); + onUploadSuccess(); + if (!res.includes(false)) { + onClose(); + showSuccess(t("StoragePanel.Success")); + } else { + setFailedFileList(failedFiles); + showError(t("StoragePanel.Fail")); + } + }; + return (
    {React.cloneElement(children, { onClick: () => { setFileList([]); + setFailedFileList([]); onOpen(); }, })} @@ -48,45 +111,27 @@ function UploadButton(props: { onUploadSuccess: Function; children: React.ReactE {t("StoragePanel.UploadFile")}
    - { - const newFileList = Array.from(files).map((item: any) => ({ - fileName: - files[0] instanceof File - ? item.webkitRelativePath - ? item.webkitRelativePath.replace(/^[^/]*\//, "") - : item.name - : item.webkitRelativePath - ? item.webkitRelativePath - : item.file.name, - status: false, - })); - setFileList(newFileList); - for (let i = 0; i < files.length; i++) { - const file = files[0] instanceof File ? files[i] : files[i].file; - const fileName = - files[0] instanceof File - ? file.webkitRelativePath - ? file.webkitRelativePath.replace(/^[^/]*\//, "") - : file.name - : files[i].webkitRelativePath - ? files[i].webkitRelativePath - : file.name; - await uploadFile(currentStorage?.name!, prefix + fileName, file, { - contentType: file.type, - }); - setFileList((pre) => { - const newList = [...pre]; - newList[i].status = true; - return newList; - }); - } - onUploadSuccess(); - onClose(); - showSuccess(t("StoragePanel.Success")); - }} - darkMode={darkMode} - /> + + {!!failedFileList.length && ( +
    + + +
    + )}
    {fileList.map((item) => { return ( @@ -98,10 +143,12 @@ function UploadButton(props: { onUploadSuccess: Function; children: React.ReactE )} > {item.fileName} - {item.status ? ( + {item.status === "success" && ( - ) : ( - + )} + {item.status === "pending" && } + {item.status === "fail" && ( + )}
    );