diff --git a/package.json b/package.json index 59709cd7..1b4856d7 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "chalk": "^4.1.0", "commitizen": "^4.3.0", "conventional-changelog-cli": "^4.1.0", + "cosmiconfig": "^8.3.6", "cz-conventional-changelog": "^3.3.0", "element-plus": "^2.2.32", "enquirer": "^2.3.6", @@ -79,7 +80,7 @@ "vite": "^4.4.4", "vitepress": "1.0.0-rc.24", "vitest": "^0.31.1", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "config": { "commitizen": { diff --git a/packages/dep/package.json b/packages/dep/package.json new file mode 100644 index 00000000..9fabe605 --- /dev/null +++ b/packages/dep/package.json @@ -0,0 +1,42 @@ +{ + "version": "1.3.1", + "name": "@tmagic/dep", + "type": "module", + "sideEffects": [ + "dist/*" + ], + "main": "dist/tmagic-dep.umd.cjs", + "module": "dist/tmagic-dep.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "import": "./dist/tmagic-dep.js", + "require": "./dist/tmagic-dep.umd.cjs" + }, + "./*": "./*" + }, + "license": "Apache-2.0", + "scripts": { + "build": "npm run build:type && vite build", + "build:type": "npm run clear:type && tsc --declaration --emitDeclarationOnly --project tsconfig.build.json", + "clear:type": "rimraf ./types" + }, + "engines": { + "node": ">=14" + }, + "repository": { + "type": "git", + "url": "https://github.com/Tencent/tmagic-editor.git" + }, + "dependencies": { + "@tmagic/schema": "1.3.1", + "@tmagic/utils": "1.3.1" + }, + "devDependencies": { + "@types/node": "^15.12.4", + "rimraf": "^3.0.2", + "typescript": "^5.0.4", + "vite": "^4.4.4" + } +} diff --git a/packages/dep/src/Target.ts b/packages/dep/src/Target.ts new file mode 100644 index 00000000..96ba3c14 --- /dev/null +++ b/packages/dep/src/Target.ts @@ -0,0 +1,112 @@ +import type { DepData } from '@tmagic/schema'; + +import { DepTargetType, type IsTarget, type TargetOptions } from './types'; + +/** + * 需要收集依赖的目标 + * 例如:一个代码块可以为一个目标 + */ +export default class Target { + /** + * 如何识别目标 + */ + public isTarget: IsTarget; + /** + * 目标id,不可重复 + * 例如目标是代码块,则为代码块id + */ + public id: string | number; + /** + * 目标名称,用于显示在依赖列表中 + */ + public name?: string; + /** + * 不同的目标可以进行分类,例如代码块,数据源可以为两个不同的type + */ + public type: string = DepTargetType.DEFAULT; + /** + * 依赖详情 + * 实例:{ 'node_id': { name: 'node_name', keys: [ created, mounted ] } } + */ + public deps: DepData = {}; + + constructor(options: TargetOptions) { + this.isTarget = options.isTarget; + this.id = options.id; + this.name = options.name; + if (options.type) { + this.type = options.type; + } + if (options.initialDeps) { + this.deps = options.initialDeps; + } + } + + /** + * 更新依赖 + * @param node 节点配置 + * @param key 哪个key配置了这个目标的id + */ + public updateDep(node: Record, key: string | number) { + const dep = this.deps[node.id] || { + name: node.name, + keys: [], + }; + + if (node.name) { + dep.name = node.name; + } + + this.deps[node.id] = dep; + + if (dep.keys.indexOf(key) === -1) { + dep.keys.push(key); + } + } + + /** + * 删除依赖 + * @param node 哪个节点的依赖需要移除,如果为空,则移除所有依赖 + * @param key 节点下哪个key需要移除,如果为空,则移除改节点下的所有依赖key + * @returns void + */ + public removeDep(node?: Record, key?: string | number) { + if (!node) { + Object.keys(this.deps).forEach((depKey) => { + delete this.deps[depKey]; + }); + return; + } + + const dep = this.deps[node.id]; + + if (!dep) return; + + if (key) { + const index = dep.keys.indexOf(key); + dep.keys.splice(index, 1); + + if (dep.keys.length === 0) { + delete this.deps[node.id]; + } + } else { + delete this.deps[node.id]; + } + } + + /** + * 判断指定节点下的指定key是否存在在依赖列表中 + * @param node 哪个节点 + * @param key 哪个key + * @returns boolean + */ + public hasDep(node: Record, key: string | number) { + const dep = this.deps[node.id]; + + return Boolean(dep?.keys.find((d) => d === key)); + } + + public destroy() { + this.deps = {}; + } +} diff --git a/packages/dep/src/Watcher.ts b/packages/dep/src/Watcher.ts new file mode 100644 index 00000000..813f089e --- /dev/null +++ b/packages/dep/src/Watcher.ts @@ -0,0 +1,175 @@ +import { isObject } from '@tmagic/utils'; + +import type Target from './Target'; +import { DepTargetType, type TargetList } from './types'; + +export default class Watcher { + private targetsList: TargetList = {}; + + constructor(options?: { initialTargets?: TargetList }) { + if (options?.initialTargets) { + this.targetsList = options.initialTargets; + } + } + + public getTargetsList() { + return this.targetsList; + } + + /** + * 获取指定类型中的所有target + * @param type 分类 + * @returns Target[] + */ + public getTargets(type: string = DepTargetType.DEFAULT) { + return this.targetsList[type] || {}; + } + + /** + * 添加新的目标 + * @param target Target + */ + public addTarget(target: Target) { + const targets = this.getTargets(target.type) || {}; + this.targetsList[target.type] = targets; + targets[target.id] = target; + } + + /** + * 获取指定id的target + * @param id target id + * @returns Target + */ + public getTarget(id: string | number) { + const allTargets = Object.values(this.targetsList); + for (const targets of allTargets) { + if (targets[id]) { + return targets[id]; + } + } + } + + /** + * 判断是否存在指定id的target + * @param id target id + * @returns boolean + */ + public hasTarget(id: string | number) { + return Boolean(this.getTarget(id)); + } + + /** + * 删除指定id的target + * @param id target id + */ + public removeTarget(id: string | number) { + const allTargets = Object.values(this.targetsList); + for (const targets of allTargets) { + if (targets[id]) { + targets[id].destroy(); + delete targets[id]; + } + } + } + + /** + * 删除指定分类的所有target + * @param type 分类 + * @returns void + */ + public removeTargets(type: string = DepTargetType.DEFAULT) { + const targets = this.targetsList[type]; + + if (!targets) return; + + for (const target of Object.values(targets)) { + target.destroy(); + } + + delete this.targetsList[type]; + } + + /** + * 删除所有target + */ + public clearTargets() { + Object.keys(this.targetsList).forEach((key) => { + delete this.targetsList[key]; + }); + } + + /** + * 收集依赖 + * @param nodes 需要收集的节点 + * @param deep 是否需要收集子节点 + */ + public collect(nodes: Record[], deep = false) { + Object.values(this.targetsList).forEach((targets) => { + Object.values(targets).forEach((target) => { + nodes.forEach((node) => { + // 先删除原有依赖,重新收集 + target.removeDep(node); + this.collectItem(node, target, deep); + }); + }); + }); + } + + /** + * 清除依赖 + * @param nodes 需要清除依赖的节点 + */ + public clear(nodes?: Record[]) { + const clearedItemsNodeIds: (string | number)[] = []; + Object.values(this.targetsList).forEach((targets) => { + Object.values(targets).forEach((target) => { + if (nodes) { + nodes.forEach((node) => { + target.removeDep(node); + + if (Array.isArray(node.items) && node.items.length && !clearedItemsNodeIds.includes(node.id)) { + clearedItemsNodeIds.push(node.id); + this.clear(node.items); + } + }); + } else { + target.removeDep(); + } + }); + }); + } + + private collectItem(node: Record, target: Target, deep = false) { + const collectTarget = (config: Record, prop = '') => { + const doCollect = (key: string, value: any) => { + const keyIsItems = key === 'items'; + const fullKey = prop ? `${prop}.${key}` : key; + + if (target.isTarget(fullKey, value)) { + target.updateDep(node, fullKey); + } else if (!keyIsItems && Array.isArray(value)) { + value.forEach((item, index) => { + if (isObject(item)) { + collectTarget(item, `${fullKey}.${index}`); + } + }); + } else if (isObject(value)) { + collectTarget(value, fullKey); + } + + if (keyIsItems && deep && Array.isArray(value)) { + value.forEach((child) => { + this.collectItem(child, target, deep); + }); + } + }; + + Object.entries(config).forEach(([key, value]) => { + if (typeof value === 'undefined' || value === '') return; + doCollect(key, value); + }); + }; + + collectTarget(node); + } +} diff --git a/packages/dep/src/index.ts b/packages/dep/src/index.ts new file mode 100644 index 00000000..8c7e146e --- /dev/null +++ b/packages/dep/src/index.ts @@ -0,0 +1,4 @@ +export { default as Target } from './Target'; +export { default as Watcher } from './Watcher'; +export * from './utils'; +export * from './types'; diff --git a/packages/dep/src/types.ts b/packages/dep/src/types.ts new file mode 100644 index 00000000..6a01d276 --- /dev/null +++ b/packages/dep/src/types.ts @@ -0,0 +1,33 @@ +import { DepData } from '@tmagic/schema'; + +import type Target from './Target'; + +/** 依赖收集的目标类型 */ +export enum DepTargetType { + DEFAULT = 'default', + /** 代码块 */ + CODE_BLOCK = 'code-block', + /** 数据源 */ + DATA_SOURCE = 'data-source', + /** 数据源方法 */ + DATA_SOURCE_METHOD = 'data-source-method', + /** 数据源条件 */ + DATA_SOURCE_COND = 'data-source-cond', +} + +export type IsTarget = (key: string | number, value: any) => boolean; + +export interface TargetOptions { + isTarget: IsTarget; + id: string | number; + /** 类型,数据源、代码块或其他 */ + type?: string; + name?: string; + initialDeps?: DepData; +} + +export interface TargetList { + [type: string]: { + [targetId: string | number]: Target; + }; +} diff --git a/packages/editor/src/utils/dep.ts b/packages/dep/src/utils.ts similarity index 50% rename from packages/editor/src/utils/dep.ts rename to packages/dep/src/utils.ts index f3dae333..94d9caf4 100644 --- a/packages/editor/src/utils/dep.ts +++ b/packages/dep/src/utils.ts @@ -1,23 +1,28 @@ -import { isEmpty } from 'lodash-es'; - -import { type CodeBlockContent, HookType, type Id } from '@tmagic/schema'; +import { + type CodeBlockContent, + type DataSourceSchema, + type DepData, + type HookData, + HookType, + type Id, +} from '@tmagic/schema'; import { DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX } from '@tmagic/utils'; -import dataSourceService from '@editor/services/dataSource'; -import { Target } from '@editor/services/dep'; -import { DepTargetType, type HookData } from '@editor/type'; +import Target from './Target'; +import { DepTargetType } from './types'; -export const createCodeBlockTarget = (id: Id, codeBlock: CodeBlockContent) => +export const createCodeBlockTarget = (id: Id, codeBlock: CodeBlockContent, initialDeps: DepData = {}) => new Target({ type: DepTargetType.CODE_BLOCK, id, + initialDeps, name: codeBlock.name, isTarget: (key: string | number, value: any) => { if (id === value) { return true; } - if (value?.hookType === HookType.CODE && !isEmpty(value.hookData)) { + if (value?.hookType === HookType.CODE && Array.isArray(value.hookData)) { const index = value.hookData.findIndex((item: HookData) => item.codeId === id); return Boolean(index > -1); } @@ -26,13 +31,23 @@ export const createCodeBlockTarget = (id: Id, codeBlock: CodeBlockContent) => }, }); -export const createDataSourceTarget = (id: Id) => +export const createDataSourceTarget = (ds: DataSourceSchema, initialDeps: DepData = {}) => new Target({ type: DepTargetType.DATA_SOURCE, - id, + id: ds.id, + initialDeps, isTarget: (key: string | number, value: any) => { - // 关联数据源对象或者在模板在使用数据源 - if ((value?.isBindDataSource && value.dataSourceId) || (typeof value === 'string' && value.includes(`${id}`))) { + // 关联数据源对象,如:{ isBindDataSource: true, dataSourceId: 'xxx'} + // 或者在模板在使用数据源,如:`xxx${id.field}xxx` + if ( + (value?.isBindDataSource && value.dataSourceId) || + (typeof value === 'string' && value.includes(`${ds.id}`)) + ) { + return true; + } + + // 指定数据源的字符串模板,如:{ isBindDataSourceField: true, dataSourceId: 'id', template: `xxx${field}xxx`} + if (value?.isBindDataSourceField && value.dataSourceId && typeof value.template === 'string') { return true; } @@ -50,31 +65,28 @@ export const createDataSourceTarget = (id: Id) => const dsId = prefixId.substring(prefixIndex + DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX.length); - return dsId === id && Boolean(dataSourceService.getDataSourceById(id)); + return dsId === ds.id; }, }); -export const createDataSourceCondTarget = (id: string) => +export const createDataSourceCondTarget = (ds: DataSourceSchema, initialDeps: DepData = {}) => new Target({ type: DepTargetType.DATA_SOURCE_COND, - id, + id: ds.id, + initialDeps, isTarget: (key: string | number, value: any) => { - if (!Array.isArray(value) || value[0] !== id || !`${key}`.startsWith('displayConds')) return false; - - const ds = dataSourceService.getDataSourceById(id); - + if (!Array.isArray(value) || value[0] !== ds.id || !`${key}`.startsWith('displayConds')) return false; return Boolean(ds?.fields?.find((field) => field.name === value[1])); }, }); -export const createDataSourceMethodTarget = (id: string) => +export const createDataSourceMethodTarget = (ds: DataSourceSchema, initialDeps: DepData = {}) => new Target({ type: DepTargetType.DATA_SOURCE_METHOD, - id, + id: ds.id, + initialDeps, isTarget: (key: string | number, value: any) => { - if (!Array.isArray(value) || value[0] !== id) return false; - - const ds = dataSourceService.getDataSourceById(id); + if (!Array.isArray(value) || value[0] !== ds.id) return false; return Boolean(ds?.methods?.find((method) => method.name === value[1])); }, diff --git a/packages/dep/tests/Target.spec.ts b/packages/dep/tests/Target.spec.ts new file mode 100644 index 00000000..80c8ae27 --- /dev/null +++ b/packages/dep/tests/Target.spec.ts @@ -0,0 +1,28 @@ +import { describe, expect, test } from 'vitest'; + +import Target from '../src/Target'; + +describe('Target', () => { + test('instance', () => { + const target = new Target({ + isTarget: () => true, + id: 'target', + }); + expect(target).toBeInstanceOf(Target); + }); + + test('default target type', () => { + const defaultTarget = new Target({ + isTarget: () => true, + id: 'default', + type: 'default', + }); + const target = new Target({ + isTarget: () => true, + id: 'target', + type: 'target', + }); + expect(defaultTarget.type).toBe('default'); + expect(target.type).toBe('target'); + }); +}); diff --git a/packages/editor/tests/unit/services/dep.spec.ts b/packages/dep/tests/Watch.spec.ts similarity index 54% rename from packages/editor/tests/unit/services/dep.spec.ts rename to packages/dep/tests/Watch.spec.ts index 65c21c01..e73614f6 100644 --- a/packages/editor/tests/unit/services/dep.spec.ts +++ b/packages/dep/tests/Watch.spec.ts @@ -1,88 +1,110 @@ import { describe, expect, test } from 'vitest'; -import depService, { Target, Watcher } from '@editor/services/dep'; +import Target from '../src/Target'; +import Watcher from '../src/Watcher'; describe('Watcher', () => { test('instance', () => { const watcher = new Watcher(); expect(watcher).toBeInstanceOf(Watcher); }); -}); - -describe('depService', () => { - const defaultTarget = new Target({ - id: 1, - name: 'test', - isTarget: () => true, - }); - - const target = new Target({ - type: 'target', - id: 2, - name: 'test', - isTarget: () => true, - }); - - test('default target type', () => { - expect(defaultTarget.type).toBe('default'); - expect(target.type).toBe('target'); - }); test('addTarget', () => { - depService.addTarget(target); + const watcher = new Watcher(); + const target = new Target({ + isTarget: () => true, + id: 'target', + type: 'target', + }); - expect(depService.getTarget(1)).toBeUndefined(); - expect(depService.getTarget(2)?.id).toBe(2); - expect(Object.keys(depService.getTargets())).toHaveLength(0); - expect(Object.keys(depService.getTargets('target'))).toHaveLength(1); + watcher.addTarget(target); + + expect(watcher.getTarget(1)).toBeUndefined(); + expect(watcher.getTarget('target')?.id).toBe('target'); + expect(Object.keys(watcher.getTargets())).toHaveLength(0); + expect(Object.keys(watcher.getTargets('target'))).toHaveLength(1); }); test('clearTargets', () => { - depService.clearTargets(); + const watcher = new Watcher(); + watcher.clearTargets(); - depService.addTarget(target); + const target = new Target({ + isTarget: () => true, + id: 'target', + }); - expect(depService.hasTarget(2)).toBeTruthy(); + watcher.addTarget(target); - depService.clearTargets(); + expect(watcher.hasTarget('target')).toBeTruthy(); - expect(depService.hasTarget(2)).toBeFalsy(); + watcher.clearTargets(); + + expect(watcher.hasTarget('target')).toBeFalsy(); }); test('hasTarget', () => { - depService.clearTargets(); + const watcher = new Watcher(); - depService.addTarget(target); + const target = new Target({ + isTarget: () => true, + id: 'target2', + }); - expect(depService.hasTarget(1)).toBeFalsy(); - expect(depService.hasTarget(2)).toBeTruthy(); + watcher.clearTargets(); + + watcher.addTarget(target); + + expect(watcher.hasTarget('target')).toBeFalsy(); + expect(watcher.hasTarget('target2')).toBeTruthy(); }); test('removeTarget', () => { - depService.clearTargets(); - depService.addTarget(target); - expect(depService.hasTarget(2)).toBeTruthy(); - depService.removeTarget(2); - expect(depService.hasTarget(2)).toBeFalsy(); + const watcher = new Watcher(); + + const target = new Target({ + isTarget: () => true, + id: 'target', + }); + + watcher.clearTargets(); + watcher.addTarget(target); + expect(watcher.hasTarget('target')).toBeTruthy(); + watcher.removeTarget('target'); + expect(watcher.hasTarget('target')).toBeFalsy(); }); test('removeTargets', () => { - depService.clearTargets(); - depService.addTarget(defaultTarget); - depService.addTarget(target); - expect(depService.hasTarget(1)).toBeTruthy(); - expect(depService.hasTarget(2)).toBeTruthy(); - depService.removeTargets('target'); - expect(depService.hasTarget(1)).toBeTruthy(); - expect(depService.hasTarget(2)).toBeFalsy(); + const watcher = new Watcher(); - depService.removeTargets('target1'); + const defaultTarget = new Target({ + isTarget: () => true, + id: 'defaultTarget', + }); + + const target = new Target({ + isTarget: () => true, + type: 'targetType', + id: 'target', + }); + + watcher.clearTargets(); + watcher.addTarget(defaultTarget); + watcher.addTarget(target); + expect(watcher.hasTarget('defaultTarget')).toBeTruthy(); + expect(watcher.hasTarget('target')).toBeTruthy(); + + watcher.removeTargets('targetType'); + expect(watcher.hasTarget('defaultTarget')).toBeTruthy(); + expect(watcher.hasTarget('target')).toBeFalsy(); }); test('collect', () => { - depService.clearTargets(); + const watcher = new Watcher(); - depService.addTarget( + watcher.clearTargets(); + + watcher.addTarget( new Target({ type: 'target', id: 'collect_1', @@ -91,7 +113,7 @@ describe('depService', () => { }), ); - depService.addTarget( + watcher.addTarget( new Target({ type: 'target', id: 'collect_2', @@ -100,7 +122,7 @@ describe('depService', () => { }), ); - depService.collect([ + watcher.collect([ { id: 'node_1', name: 'node', @@ -119,15 +141,15 @@ describe('depService', () => { }, ]); - const target1 = depService.getTarget('collect_1'); - const target2 = depService.getTarget('collect_2'); + const target1 = watcher.getTarget('collect_1'); + const target2 = watcher.getTarget('collect_2'); expect(target1?.deps?.node_1.name).toBe('node'); expect(target2?.deps?.node_1.name).toBe('node'); expect(target1?.deps?.node_1.keys).toHaveLength(1); expect(target2?.deps?.node_1.keys).toHaveLength(3); - depService.collect([ + watcher.collect([ { id: 'node_1', name: 'node', @@ -149,7 +171,7 @@ describe('depService', () => { expect(target1?.deps?.node_1).toBeUndefined(); expect(target2?.deps?.node_1.keys).toHaveLength(1); - depService.collect([ + watcher.collect([ { id: 'node_1', name: 'node', @@ -161,7 +183,7 @@ describe('depService', () => { expect(target1?.deps?.node_1).toBeUndefined(); expect(target2?.deps?.node_1.keys[0]).toBe('text1'); - depService.clear([ + watcher.clear([ { id: 'node_1', name: 'node', @@ -173,9 +195,11 @@ describe('depService', () => { }); test('collect deep', () => { - depService.clearTargets(); + const watcher = new Watcher(); - depService.addTarget( + watcher.clearTargets(); + + watcher.addTarget( new Target({ type: 'target', id: 'collect_1', @@ -184,7 +208,7 @@ describe('depService', () => { }), ); - depService.collect( + watcher.collect( [ { id: 'node_1', @@ -202,12 +226,12 @@ describe('depService', () => { true, ); - const target1 = depService.getTarget('collect_1'); + const target1 = watcher.getTarget('collect_1'); expect(target1?.deps?.node_1.name).toBe('node'); expect(target1?.deps?.node_2.name).toBe('node2'); - depService.clear([ + watcher.clear([ { id: 'node_1', name: 'node', diff --git a/packages/editor/tests/unit/utils/dep.spec.ts b/packages/dep/tests/utils.spec.ts similarity index 83% rename from packages/editor/tests/unit/utils/dep.spec.ts rename to packages/dep/tests/utils.spec.ts index d89f4848..18f5c3a8 100644 --- a/packages/editor/tests/unit/utils/dep.spec.ts +++ b/packages/dep/tests/utils.spec.ts @@ -1,10 +1,10 @@ import { describe, expect, test } from 'vitest'; -import * as dep from '@editor/utils/dep'; +import * as utils from '../src/utils'; -describe('dep', () => { +describe('utils', () => { test('createCodeBlockTarget', () => { - const target = dep.createCodeBlockTarget('code_5316', { + const target = utils.createCodeBlockTarget('code_5316', { name: 'code', content: () => false, params: [], @@ -33,7 +33,7 @@ describe('dep', () => { expect(isTarget).toBeTruthy(); - const target1 = dep.createCodeBlockTarget('1', { + const target1 = utils.createCodeBlockTarget('1', { name: 'code', content: () => false, params: [], diff --git a/packages/dep/tsconfig.build.json b/packages/dep/tsconfig.build.json new file mode 100644 index 00000000..c9476221 --- /dev/null +++ b/packages/dep/tsconfig.build.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "declaration": true, + "declarationDir": "types", + "forceConsistentCasingInFileNames": true, + "paths": {}, + }, + "include": [ + "src" + ], +} diff --git a/packages/dep/tsconfig.json b/packages/dep/tsconfig.json new file mode 100644 index 00000000..6c40cf1e --- /dev/null +++ b/packages/dep/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": "../..", + }, +} diff --git a/packages/dep/vite.config.ts b/packages/dep/vite.config.ts new file mode 100644 index 00000000..0566e99b --- /dev/null +++ b/packages/dep/vite.config.ts @@ -0,0 +1,51 @@ +/* + * Tencent is pleased to support the open source community by making TMagicEditor available. + * + * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import path from 'path'; + +import { defineConfig } from 'vite'; + +import pkg from './package.json'; + +export default defineConfig({ + resolve: { + alias: + process.env.NODE_ENV === 'production' + ? [] + : [{ find: /^@tmagic\/schema/, replacement: path.join(__dirname, '../schema/src/index.ts') }], + }, + + build: { + sourcemap: true, + minify: false, + target: 'esnext', + + lib: { + entry: 'src/index.ts', + name: 'TMagicDep', + fileName: 'tmagic-dep', + }, + + rollupOptions: { + // 确保外部化处理那些你不想打包进库的依赖 + external(id: string) { + return Object.keys(pkg.dependencies).some((k) => new RegExp(`^${k}`).test(id)); + }, + }, + }, +}); diff --git a/packages/design/package.json b/packages/design/package.json index 57232988..e07cc6e8 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -37,15 +37,15 @@ "typescript" ], "dependencies": { - "vue": "^3.3.4" + "vue": "^3.3.8" }, "peerDependencies": { - "vue": "^3.3.4" + "vue": "^3.3.8" }, "devDependencies": { "@types/node": "^15.12.4", "@vitejs/plugin-vue": "^4.2.3", - "@vue/compiler-sfc": "^3.3.4", + "@vue/compiler-sfc": "^3.3.8", "@vue/test-utils": "^2.3.2", "rimraf": "^3.0.2", "typescript": "^5.0.4", diff --git a/packages/editor/package.json b/packages/editor/package.json index 028d0843..3e320179 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -48,6 +48,7 @@ "@babel/core": "^7.18.0", "@element-plus/icons-vue": "^2.0.9", "@tmagic/core": "1.3.1", + "@tmagic/dep": "1.3.1", "@tmagic/design": "1.3.1", "@tmagic/form": "1.3.1", "@tmagic/schema": "1.3.1", @@ -63,13 +64,13 @@ "monaco-editor": "^0.41.0", "moveable": "^0.51.1", "serialize-javascript": "^6.0.0", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "peerDependencies": { "@tmagic/design": "1.3.1", "@tmagic/form": "1.3.1", "monaco-editor": "^0.41.0", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "devDependencies": { "@types/events": "^3.0.0", @@ -77,7 +78,7 @@ "@types/node": "^15.12.4", "@types/serialize-javascript": "^5.0.1", "@vitejs/plugin-vue": "^4.2.3", - "@vue/compiler-sfc": "^3.3.4", + "@vue/compiler-sfc": "^3.3.8", "@vue/test-utils": "^2.3.2", "rimraf": "^3.0.2", "sass": "^1.35.1", diff --git a/packages/editor/src/index.ts b/packages/editor/src/index.ts index 04907efa..10181ceb 100644 --- a/packages/editor/src/index.ts +++ b/packages/editor/src/index.ts @@ -40,6 +40,7 @@ import './theme/index.scss'; export type { OnDrag } from 'gesto'; +export type { DepTargetType } from '@tmagic/dep'; export type { MoveableOptions } from '@tmagic/stage'; export * from './type'; export * from './hooks'; diff --git a/packages/editor/src/initService.ts b/packages/editor/src/initService.ts index 6cd7f8a3..e44f476a 100644 --- a/packages/editor/src/initService.ts +++ b/packages/editor/src/initService.ts @@ -1,20 +1,21 @@ -import { onUnmounted, toRaw, watch } from 'vue'; +import { onUnmounted, reactive, toRaw, watch } from 'vue'; import { cloneDeep } from 'lodash-es'; import type { EventOption } from '@tmagic/core'; -import type { CodeBlockContent, DataSourceSchema, Id, MApp, MNode, MPage } from '@tmagic/schema'; -import { getNodes } from '@tmagic/utils'; - -import PropsPanel from './layouts/PropsPanel.vue'; -import type { Target } from './services/dep'; +import type { Target } from '@tmagic/dep'; import { createCodeBlockTarget, createDataSourceCondTarget, createDataSourceMethodTarget, createDataSourceTarget, -} from './utils/dep'; + DepTargetType, +} from '@tmagic/dep'; +import type { CodeBlockContent, DataSourceSchema, Id, MApp, MNode, MPage } from '@tmagic/schema'; +import { getNodes } from '@tmagic/utils'; + +import PropsPanel from './layouts/PropsPanel.vue'; import { EditorProps } from './editorProps'; -import { DepTargetType, Services } from './type'; +import { Services } from './type'; export declare type LooseRequired = { [P in string & keyof T]: T[P]; @@ -270,9 +271,9 @@ export const initServiceEvents = ( depService.on('collected', collectedHandler); const initDataSourceDepTarget = (ds: DataSourceSchema) => { - depService.addTarget(createDataSourceTarget(ds.id)); - depService.addTarget(createDataSourceMethodTarget(ds.id)); - depService.addTarget(createDataSourceCondTarget(ds.id)); + depService.addTarget(createDataSourceTarget(ds, reactive({}))); + depService.addTarget(createDataSourceMethodTarget(ds, reactive({}))); + depService.addTarget(createDataSourceCondTarget(ds, reactive({}))); }; const rootChangeHandler = async (value: MApp | null, preValue?: MApp | null) => { diff --git a/packages/editor/src/layouts/sidebar/code-block/CodeBlockList.vue b/packages/editor/src/layouts/sidebar/code-block/CodeBlockList.vue index f89f71c2..218c077a 100644 --- a/packages/editor/src/layouts/sidebar/code-block/CodeBlockList.vue +++ b/packages/editor/src/layouts/sidebar/code-block/CodeBlockList.vue @@ -44,13 +44,14 @@ import { computed, inject, ref } from 'vue'; import { Close, Edit, View } from '@element-plus/icons-vue'; +import { DepTargetType } from '@tmagic/dep'; import { tMagicMessage, tMagicMessageBox, TMagicTooltip, TMagicTree } from '@tmagic/design'; import type { Id } from '@tmagic/schema'; import Icon from '@editor/components/Icon.vue'; import AppManageIcon from '@editor/icons/AppManageIcon.vue'; import CodeIcon from '@editor/icons/CodeIcon.vue'; -import { CodeBlockListSlots, CodeDeleteErrorType, CodeDslItem, DepTargetType, Services } from '@editor/type'; +import { type CodeBlockListSlots, CodeDeleteErrorType, type CodeDslItem, type Services } from '@editor/type'; defineSlots(); diff --git a/packages/editor/src/layouts/sidebar/data-source/DataSourceList.vue b/packages/editor/src/layouts/sidebar/data-source/DataSourceList.vue index dc770731..006acb18 100644 --- a/packages/editor/src/layouts/sidebar/data-source/DataSourceList.vue +++ b/packages/editor/src/layouts/sidebar/data-source/DataSourceList.vue @@ -38,11 +38,12 @@ import { computed, inject, ref } from 'vue'; import { Aim, Close, Coin, Edit, View } from '@element-plus/icons-vue'; +import { DepTargetType } from '@tmagic/dep'; import { tMagicMessageBox, TMagicTooltip, TMagicTree } from '@tmagic/design'; -import { Dep, Id } from '@tmagic/schema'; +import { DepData, Id } from '@tmagic/schema'; import Icon from '@editor/components/Icon.vue'; -import { type DataSourceListSlots, DepTargetType, type Services } from '@editor/type'; +import type { DataSourceListSlots, Services } from '@editor/type'; defineSlots(); @@ -65,10 +66,10 @@ const dsDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE) | const dsMethodDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE_METHOD) || {}); const dsCondDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE_COND) || {}); -const getKeyTreeConfig = (dep: Dep[string], type?: string) => +const getKeyTreeConfig = (dep: DepData[string], type?: string) => dep.keys.map((key) => ({ name: key, id: key, type: 'key', isMethod: type === 'method', isCond: type === 'cond' })); -const getNodeTreeConfig = (id: string, dep: Dep[string], type?: string) => ({ +const getNodeTreeConfig = (id: string, dep: DepData[string], type?: string) => ({ name: dep.name, type: 'node', id, @@ -81,7 +82,7 @@ const getNodeTreeConfig = (id: string, dep: Dep[string], type?: string) => ({ * @param deps 依赖 * @param type 依赖类型 */ -const mergeChildren = (children: any[], deps: Dep, type?: string) => { +const mergeChildren = (children: any[], deps: DepData, type?: string) => { Object.entries(deps).forEach(([id, dep]) => { // 已经生成过的节点 const nodeItem = children.find((item) => item.id === id); @@ -97,9 +98,9 @@ const mergeChildren = (children: any[], deps: Dep, type?: string) => { const list = computed(() => dataSources.value.map((ds) => { - const dsDeps = dsDep.value[ds.id].deps; - const dsMethodDeps = dsMethodDep.value[ds.id].deps; - const dsCondDeps = dsCondDep.value[ds.id].deps; + const dsDeps = dsDep.value[ds.id]?.deps || {}; + const dsMethodDeps = dsMethodDep.value[ds.id]?.deps || {}; + const dsCondDeps = dsCondDep.value[ds.id]?.deps || {}; const children: any[] = []; // 数据源依赖分为三种类型:key/node、method、cond,是分开存储,这里将其合并展示 diff --git a/packages/editor/src/services/dep.ts b/packages/editor/src/services/dep.ts index 40ed85e5..3381a2d6 100644 --- a/packages/editor/src/services/dep.ts +++ b/packages/editor/src/services/dep.ts @@ -15,320 +15,58 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { EventEmitter } from 'events'; - import { reactive } from 'vue'; -import type { Dep, Id, MNode } from '@tmagic/schema'; -import { isObject } from '@tmagic/utils'; +import { DepTargetType, type Target, Watcher } from '@tmagic/dep'; +import type { Id, MNode } from '@tmagic/schema'; -import { DepTargetType } from '@editor/type'; +import BaseService from './BaseService'; -type IsTarget = (key: string | number, value: any) => boolean; +class Dep extends BaseService { + private watcher = new Watcher({ initialTargets: reactive({}) }); -interface TargetOptions { - isTarget: IsTarget; - id: string | number; - /** 类型,数据源、代码块或其他 */ - type?: DepTargetType | string; - name?: string; -} + public removeTargets(type: string = DepTargetType.DEFAULT) { + this.watcher.removeTargets(type); -interface TargetList { - [type: DepTargetType | string]: { - [targetId: string | number]: Target; - }; -} - -/** - * 需要收集依赖的目标 - * 例如:一个代码块可以为一个目标 - */ -export class Target extends EventEmitter { - /** - * 如何识别目标 - */ - public isTarget: IsTarget; - /** - * 目标id,不可重复 - * 例如目标是代码块,则为代码块id - */ - public id: string | number; - /** - * 目标名称,用于显示在依赖列表中 - */ - public name?: string; - /** - * 不同的目标可以进行分类,例如代码块,数据源可以为两个不同的type - */ - public type: DepTargetType | string = DepTargetType.DEFAULT; - /** - * 依赖详情 - * 实例:{ 'node_id': { name: 'node_name', keys: [ created, mounted ] } } - */ - public deps = reactive({}); - - constructor(options: TargetOptions) { - super(); - this.isTarget = options.isTarget; - this.id = options.id; - this.name = options.name; - if (options.type) { - this.type = options.type; - } + this.emit('remove-target'); } - /** - * 更新依赖 - * @param node 节点配置 - * @param key 哪个key配置了这个目标的id - */ - public updateDep(node: MNode, key: string | number) { - const dep = this.deps[node.id] || { - name: node.name, - keys: [], - }; - - if (node.name) { - dep.name = node.name; - } - - this.deps[node.id] = dep; - - if (dep.keys.indexOf(key) === -1) { - dep.keys.push(key); - } - - this.emit('change'); + public getTargets(type: string = DepTargetType.DEFAULT) { + return this.watcher.getTargets(type); } - /** - * 删除依赖 - * @param node 哪个节点的依赖需要移除,如果为空,则移除所有依赖 - * @param key 节点下哪个key需要移除,如果为空,则移除改节点下的所有依赖key - * @returns void - */ - public removeDep(node?: MNode, key?: string | number) { - if (!node) { - Object.keys(this.deps).forEach((depKey) => { - delete this.deps[depKey]; - }); - this.emit('change'); - return; - } - - const dep = this.deps[node.id]; - - if (!dep) return; - - if (key) { - const index = dep.keys.indexOf(key); - dep.keys.splice(index, 1); - - if (dep.keys.length === 0) { - delete this.deps[node.id]; - } - } else { - delete this.deps[node.id]; - } - - this.emit('change'); + public getTarget(id: Id) { + return this.watcher.getTarget(id); } - /** - * 判断指定节点下的指定key是否存在在依赖列表中 - * @param node 哪个节点 - * @param key 哪个key - * @returns boolean - */ - public hasDep(node: MNode, key: string | number) { - const dep = this.deps[node.id]; - - return Boolean(dep?.keys.find((d) => d === key)); - } - - public destroy() { - this.removeAllListeners(); - } -} - -export class Watcher extends EventEmitter { - private targets = reactive({}); - - /** - * 获取指定类型中的所有target - * @param type 分类 - * @returns Target[] - */ - public getTargets(type: DepTargetType | string = DepTargetType.DEFAULT) { - return this.targets[type] || {}; - } - - /** - * 添加新的目标 - * @param target Target - */ public addTarget(target: Target) { - const targets = this.getTargets(target.type) || {}; - this.targets[target.type] = targets; - targets[target.id] = target; - + this.watcher.addTarget(target); this.emit('add-target', target); } - /** - * 获取指定id的target - * @param id target id - * @returns Target - */ - public getTarget(id: string | number) { - const allTargets = Object.values(this.targets); - for (const targets of allTargets) { - if (targets[id]) { - return targets[id]; - } - } - } - - /** - * 判断是否存在指定id的target - * @param id target id - * @returns boolean - */ - public hasTarget(id: string | number) { - const allTargets = Object.values(this.targets); - for (const targets of allTargets) { - if (targets[id]) { - return true; - } - } - - return false; - } - - /** - * 删除指定id的target - * @param id target id - */ - public removeTarget(id: string | number) { - const allTargets = Object.values(this.targets); - for (const targets of allTargets) { - if (targets[id]) { - targets[id].destroy(); - delete targets[id]; - } - } - + public removeTarget(id: Id) { + this.watcher.removeTarget(id); this.emit('remove-target'); } - /** - * 删除指定分类的所有target - * @param type 分类 - * @returns void - */ - public removeTargets(type: DepTargetType | string = DepTargetType.DEFAULT) { - const targets = this.targets[type]; - - if (!targets) return; - - for (const target of Object.values(targets)) { - target.destroy(); - } - - delete this.targets[type]; - - this.emit('remove-target'); - } - - /** - * 删除所有target - */ public clearTargets() { - Object.keys(this.targets).forEach((key) => { - delete this.targets[key]; - }); + this.watcher.clearTargets(); } - /** - * 收集依赖 - * @param nodes 需要收集的节点 - * @param deep 是否需要收集子节点 - */ public collect(nodes: MNode[], deep = false) { - Object.values(this.targets).forEach((targets) => { - Object.values(targets).forEach((target) => { - nodes.forEach((node) => { - // 先删除原有依赖,重新收集 - target.removeDep(node); - this.collectItem(node, target, deep); - }); - }); - }); - + this.watcher.collect(nodes, deep); this.emit('collected', nodes, deep); } - /** - * 清除依赖 - * @param nodes 需要清除依赖的节点 - */ public clear(nodes?: MNode[]) { - const clearedItemsNodeIds: Id[] = []; - Object.values(this.targets).forEach((targets) => { - Object.values(targets).forEach((target) => { - if (nodes) { - nodes.forEach((node) => { - target.removeDep(node); - - if (Array.isArray(node.items) && node.items.length && !clearedItemsNodeIds.includes(node.id)) { - clearedItemsNodeIds.push(node.id); - this.clear(node.items); - } - }); - } else { - target.removeDep(); - } - }); - }); + return this.watcher.clear(nodes); } - private collectItem(node: MNode, target: Target, deep = false) { - const collectTarget = (config: Record, prop = '') => { - const doCollect = (key: string, value: any) => { - const keyIsItems = key === 'items'; - const fullKey = prop ? `${prop}.${key}` : key; - - if (target.isTarget(fullKey, value)) { - target.updateDep(node, fullKey); - this.emit('update-dep', node, fullKey); - } else if (!keyIsItems && Array.isArray(value)) { - value.forEach((item, index) => { - if (isObject(item)) { - collectTarget(item, `${fullKey}.${index}`); - } - }); - } else if (isObject(value)) { - collectTarget(value, fullKey); - } - - if (keyIsItems && deep && Array.isArray(value)) { - value.forEach((child) => { - this.collectItem(child, target, deep); - }); - } - }; - - Object.entries(config).forEach(([key, value]) => { - if (typeof value === 'undefined' || value === '') return; - doCollect(key, value); - }); - }; - - collectTarget(node); + public hasTarget(id: Id) { + return this.watcher.hasTarget(id); } } -export type DepService = Watcher; +export type DepService = Dep; -export default new Watcher(); +export default new Dep(); diff --git a/packages/editor/src/type.ts b/packages/editor/src/type.ts index 20397fae..cd95f5b8 100644 --- a/packages/editor/src/type.ts +++ b/packages/editor/src/type.ts @@ -425,13 +425,6 @@ export type CodeState = { paramsColConfig?: ColumnConfig; }; -export type HookData = { - /** 代码块id */ - codeId: Id; - /** 参数 */ - params?: object; -}; - export type CodeRelation = { /** 组件id:[代码id1,代码id2] */ [compId: Id]: Id[]; @@ -594,19 +587,6 @@ export interface DataSourceFieldSelectConfig { display?: boolean | FilterFunction; } -/** 依赖收集的目标类型 */ -export enum DepTargetType { - DEFAULT = 'default', - /** 代码块 */ - CODE_BLOCK = 'code-block', - /** 数据源 */ - DATA_SOURCE = 'data-source', - /** 数据源方法 */ - DATA_SOURCE_METHOD = 'data-source-method', - /** 数据源条件 */ - DATA_SOURCE_COND = 'data-source-cond', -} - /** 可新增的数据源类型选项 */ export interface DatasourceTypeOption { /** 数据源类型 */ diff --git a/packages/element-plus-adapter/package.json b/packages/element-plus-adapter/package.json index 1dc525a9..50f07e01 100644 --- a/packages/element-plus-adapter/package.json +++ b/packages/element-plus-adapter/package.json @@ -39,12 +39,12 @@ "dependencies": { "@tmagic/design": "1.3.1", "element-plus": "^2.2.32", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "peerDependencies": { "@tmagic/design": "1.3.1", "element-plus": "^2.2.32", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "devDependencies": { "@types/node": "^15.12.4", diff --git a/packages/form/package.json b/packages/form/package.json index 552bbcac..1d099c81 100644 --- a/packages/form/package.json +++ b/packages/form/package.json @@ -41,10 +41,10 @@ "@tmagic/utils": "1.3.1", "lodash-es": "^4.17.21", "sortablejs": "^1.14.0", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "peerDependencies": { - "vue": "^3.3.4" + "vue": "^3.3.8" }, "devDependencies": { "@babel/core": "^7.18.0", @@ -52,7 +52,7 @@ "@types/node": "^15.12.4", "@types/sortablejs": "^1.10.7", "@vitejs/plugin-vue": "^4.2.3", - "@vue/compiler-sfc": "^3.3.4", + "@vue/compiler-sfc": "^3.3.8", "@vue/test-utils": "^2.3.2", "rimraf": "^3.0.2", "sass": "^1.35.1", diff --git a/packages/schema/src/index.ts b/packages/schema/src/index.ts index 5bd42abd..8277716d 100644 --- a/packages/schema/src/index.ts +++ b/packages/schema/src/index.ts @@ -64,7 +64,7 @@ export enum ActionType { } export interface DataSourceDeps { - [dataSourceId: string | number]: Dep; + [dataSourceId: string | number]: DepData; } /** 事件类型(已废弃,后续不建议继续使用) */ @@ -241,10 +241,17 @@ export interface DataSourceSchema { [key: string]: any; } -export interface Dep { +export interface DepData { [nodeId: Id]: { /** 组件名称 */ name: string; keys: (string | number)[]; }; } + +export type HookData = { + /** 代码块id */ + codeId: Id; + /** 参数 */ + params?: object; +}; diff --git a/packages/table/package.json b/packages/table/package.json index 1574cd91..111501bd 100644 --- a/packages/table/package.json +++ b/packages/table/package.json @@ -38,18 +38,18 @@ "@tmagic/form": "1.3.1", "@tmagic/utils": "1.3.1", "lodash-es": "^4.17.21", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "peerDependencies": { "@tmagic/form": "1.3.1", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "devDependencies": { "@types/color": "^3.0.1", "@types/lodash-es": "^4.17.4", "@types/node": "^15.12.4", "@vitejs/plugin-vue": "^4.2.3", - "@vue/compiler-sfc": "^3.3.4", + "@vue/compiler-sfc": "^3.3.8", "@vue/test-utils": "^2.3.2", "rimraf": "^3.0.2", "sass": "^1.35.1", diff --git a/packages/tdesign-vue-next-adapter/package.json b/packages/tdesign-vue-next-adapter/package.json index 66046d38..b4e02c27 100644 --- a/packages/tdesign-vue-next-adapter/package.json +++ b/packages/tdesign-vue-next-adapter/package.json @@ -39,16 +39,16 @@ "dependencies": { "@tmagic/design": "1.3.1", "tdesign-vue-next": "^1.3.4", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "peerDependencies": { "@tmagic/design": "1.3.1", "tdesign-vue-next": "^1.3.4", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", - "@vue/compiler-sfc": "^3.3.4", + "@vue/compiler-sfc": "^3.3.8", "@types/node": "^15.12.4", "rimraf": "^3.0.2", "typescript": "^5.0.4", diff --git a/packages/ui/package.json b/packages/ui/package.json index 3d444690..db60db58 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -18,16 +18,16 @@ "delegate": "^3.2.0", "qrcode": "^1.5.0", "tiny-emitter": "^2.1.0", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "peerDependencies": { "qrcode": "^1.5.0", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "devDependencies": { "@testing-library/vue": "^6.4.2", "@types/qrcode": "^1.4.2", - "@vue/compiler-sfc": "^3.3.4", + "@vue/compiler-sfc": "^3.3.8", "@vue/test-utils": "^2.3.2" } } diff --git a/playground/package.json b/playground/package.json index 739c3851..b3ec8a14 100644 --- a/playground/package.json +++ b/playground/package.json @@ -24,7 +24,7 @@ "element-plus": "^2.2.32", "monaco-editor": "^0.41.0", "serialize-javascript": "^6.0.0", - "vue": "^3.3.4", + "vue": "^3.3.8", "vue-router": "^4.0.10" }, "devDependencies": { @@ -34,7 +34,7 @@ "@vitejs/plugin-legacy": "^4.1.0", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.0.1", - "@vue/compiler-sfc": "^3.3.4", + "@vue/compiler-sfc": "^3.3.8", "sass": "^1.35.1", "terser": "^5.14.2", "typescript": "^5.0.4", diff --git a/playground/vite.config.ts b/playground/vite.config.ts index 524023b4..c352feed 100644 --- a/playground/vite.config.ts +++ b/playground/vite.config.ts @@ -59,6 +59,7 @@ export default defineConfig({ { find: /^@tmagic\/utils/, replacement: path.join(__dirname, '../packages/utils/src/index.ts') }, { find: /^@tmagic\/design/, replacement: path.join(__dirname, '../packages/design/src/index.ts') }, { find: /^@tmagic\/data-source/, replacement: path.join(__dirname, '../packages/data-source/src/index.ts') }, + { find: /^@tmagic\/dep/, replacement: path.join(__dirname, '../packages/dep/src/index.ts') }, { find: /^@data-source/, replacement: path.join(__dirname, '../packages/data-source/src') }, { find: /^@tmagic\/element-plus-adapter/, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c83adbd2..2eecb771 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,7 +31,7 @@ importers: version: 5.57.1(eslint@8.38.0)(typescript@5.0.4) '@vitejs/plugin-vue': specifier: ^4.2.3 - version: 4.2.3(vite@4.4.4)(vue@3.3.4) + version: 4.2.3(vite@4.4.4)(vue@3.3.8) '@vitest/coverage-c8': specifier: ^0.30.0 version: 0.30.0(vitest@0.31.1) @@ -47,12 +47,15 @@ importers: conventional-changelog-cli: specifier: ^4.1.0 version: 4.1.0 + cosmiconfig: + specifier: ^8.3.6 + version: 8.3.6(typescript@5.0.4) cz-conventional-changelog: specifier: ^3.3.0 version: 3.3.0(typescript@5.0.4) element-plus: specifier: ^2.2.32 - version: 2.2.32(vue@3.3.4) + version: 2.2.32(vue@3.3.8) enquirer: specifier: ^2.3.6 version: 2.3.6 @@ -123,8 +126,8 @@ importers: specifier: ^0.31.1 version: 0.31.1(jsdom@19.0.0) vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) packages/cli: dependencies: @@ -225,24 +228,46 @@ importers: specifier: ^4.4.4 version: 4.4.4(@types/node@15.12.4)(sass@1.35.1)(terser@5.14.2) + packages/dep: + dependencies: + '@tmagic/schema': + specifier: 1.3.1 + version: link:../schema + '@tmagic/utils': + specifier: 1.3.1 + version: link:../utils + devDependencies: + '@types/node': + specifier: ^15.12.4 + version: 15.12.4 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + typescript: + specifier: ^5.0.4 + version: 5.0.4 + vite: + specifier: ^4.4.4 + version: 4.5.0(@types/node@15.12.4) + packages/design: dependencies: vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) devDependencies: '@types/node': specifier: ^15.12.4 version: 15.12.4 '@vitejs/plugin-vue': specifier: ^4.2.3 - version: 4.2.3(vite@4.4.4)(vue@3.3.4) + version: 4.2.3(vite@4.4.4)(vue@3.3.8) '@vue/compiler-sfc': - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8 '@vue/test-utils': specifier: ^2.3.2 - version: 2.3.2(vue@3.3.4) + version: 2.3.2(vue@3.3.8) rimraf: specifier: ^3.0.2 version: 3.0.2 @@ -263,10 +288,13 @@ importers: version: 7.18.0 '@element-plus/icons-vue': specifier: ^2.0.9 - version: 2.0.9(vue@3.3.4) + version: 2.0.9(vue@3.3.8) '@tmagic/core': specifier: 1.3.1 version: link:../core + '@tmagic/dep': + specifier: 1.3.1 + version: link:../dep '@tmagic/design': specifier: 1.3.1 version: link:../design @@ -306,12 +334,15 @@ importers: monaco-editor: specifier: ^0.41.0 version: 0.41.0 + moveable: + specifier: ^0.51.1 + version: 0.51.1 serialize-javascript: specifier: ^6.0.0 version: 6.0.0 vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) devDependencies: '@types/events': specifier: ^3.0.0 @@ -327,13 +358,13 @@ importers: version: 5.0.1 '@vitejs/plugin-vue': specifier: ^4.2.3 - version: 4.2.3(vite@4.4.4)(vue@3.3.4) + version: 4.2.3(vite@4.4.4)(vue@3.3.8) '@vue/compiler-sfc': - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8 '@vue/test-utils': specifier: ^2.3.2 - version: 2.3.2(vue@3.3.4) + version: 2.3.2(vue@3.3.8) rimraf: specifier: ^3.0.2 version: 3.0.2 @@ -360,10 +391,10 @@ importers: version: link:../design element-plus: specifier: ^2.2.32 - version: 2.2.32(vue@3.3.4) + version: 2.2.32(vue@3.3.8) vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) devDependencies: '@types/node': specifier: ^15.12.4 @@ -382,7 +413,7 @@ importers: dependencies: '@element-plus/icons-vue': specifier: ^2.0.9 - version: 2.0.9(vue@3.3.4) + version: 2.0.9(vue@3.3.8) '@tmagic/design': specifier: 1.3.1 version: link:../design @@ -396,8 +427,8 @@ importers: specifier: ^1.14.0 version: 1.14.0 vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) devDependencies: '@babel/core': specifier: ^7.18.0 @@ -413,13 +444,13 @@ importers: version: 1.10.7 '@vitejs/plugin-vue': specifier: ^4.2.3 - version: 4.2.3(vite@4.4.4)(vue@3.3.4) + version: 4.2.3(vite@4.4.4)(vue@3.3.8) '@vue/compiler-sfc': - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8 '@vue/test-utils': specifier: ^2.3.2 - version: 2.3.2(vue@3.3.4) + version: 2.3.2(vue@3.3.8) rimraf: specifier: ^3.0.2 version: 3.0.2 @@ -518,8 +549,8 @@ importers: specifier: ^4.17.21 version: 4.17.21 vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) devDependencies: '@types/color': specifier: ^3.0.1 @@ -532,13 +563,13 @@ importers: version: 15.12.4 '@vitejs/plugin-vue': specifier: ^4.2.3 - version: 4.2.3(vite@4.4.4)(vue@3.3.4) + version: 4.2.3(vite@4.4.4)(vue@3.3.8) '@vue/compiler-sfc': - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8 '@vue/test-utils': specifier: ^2.3.2 - version: 2.3.2(vue@3.3.4) + version: 2.3.2(vue@3.3.8) rimraf: specifier: ^3.0.2 version: 3.0.2 @@ -562,20 +593,20 @@ importers: version: link:../design tdesign-vue-next: specifier: ^1.3.4 - version: 1.3.4(vue@3.3.4) + version: 1.3.4(vue@3.3.8) vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) devDependencies: '@types/node': specifier: ^15.12.4 version: 15.12.4 '@vitejs/plugin-vue': specifier: ^4.2.3 - version: 4.2.3(vite@4.4.4)(vue@3.3.4) + version: 4.2.3(vite@4.4.4)(vue@3.3.8) '@vue/compiler-sfc': - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8 rimraf: specifier: ^3.0.2 version: 3.0.2 @@ -607,21 +638,21 @@ importers: specifier: ^2.1.0 version: 2.1.0 vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) devDependencies: '@testing-library/vue': specifier: ^6.4.2 - version: 6.4.2(@vue/compiler-sfc@3.3.4)(vue@3.3.4) + version: 6.4.2(@vue/compiler-sfc@3.3.8)(vue@3.3.8) '@types/qrcode': specifier: ^1.4.2 version: 1.4.2 '@vue/compiler-sfc': - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8 '@vue/test-utils': specifier: ^2.3.2 - version: 2.3.2(vue@3.3.4) + version: 2.3.2(vue@3.3.8) packages/ui-react: dependencies: @@ -702,7 +733,7 @@ importers: dependencies: '@element-plus/icons-vue': specifier: ^2.0.9 - version: 2.0.9(vue@3.3.4) + version: 2.0.9(vue@3.3.8) '@tmagic/core': specifier: 1.3.1 version: link:../packages/core @@ -729,7 +760,7 @@ importers: version: link:../packages/utils element-plus: specifier: ^2.2.32 - version: 2.2.32(vue@3.3.4) + version: 2.2.32(vue@3.3.8) monaco-editor: specifier: ^0.41.0 version: 0.41.0 @@ -737,11 +768,11 @@ importers: specifier: ^6.0.0 version: 6.0.0 vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@5.0.4) vue-router: specifier: ^4.0.10 - version: 4.0.10(vue@3.3.4) + version: 4.0.10(vue@3.3.8) devDependencies: '@babel/preset-env': specifier: ^7.21.4 @@ -757,13 +788,13 @@ importers: version: 4.1.0(terser@5.14.2)(vite@4.4.4) '@vitejs/plugin-vue': specifier: ^4.2.3 - version: 4.2.3(vite@4.4.4)(vue@3.3.4) + version: 4.2.3(vite@4.4.4)(vue@3.3.8) '@vitejs/plugin-vue-jsx': specifier: ^3.0.1 - version: 3.0.1(vite@4.4.4)(vue@3.3.4) + version: 3.0.1(vite@4.4.4)(vue@3.3.8) '@vue/compiler-sfc': - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8 sass: specifier: ^1.35.1 version: 1.35.1 @@ -778,7 +809,7 @@ importers: version: 0.12.0 unplugin-vue-components: specifier: ^0.22.11 - version: 0.22.11(vue@3.3.4) + version: 0.22.11(vue@3.3.8) vite: specifier: ^4.4.4 version: 4.4.4(@types/node@15.12.4)(sass@1.35.1)(terser@5.14.2) @@ -944,8 +975,8 @@ importers: specifier: ^0.25.0 version: 0.25.0 vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8(typescript@4.3.4) devDependencies: '@babel/preset-env': specifier: ^7.21.4 @@ -958,16 +989,16 @@ importers: version: 4.1.0(terser@5.14.2)(vite@4.4.4) '@vitejs/plugin-vue': specifier: ^4.2.3 - version: 4.2.3(vite@4.4.4)(vue@3.3.4) + version: 4.2.3(vite@4.4.4)(vue@3.3.8) '@vitejs/plugin-vue-jsx': specifier: ^3.0.1 - version: 3.0.1(vite@4.4.4)(vue@3.3.4) + version: 3.0.1(vite@4.4.4)(vue@3.3.8) '@vue/compiler-sfc': - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.3.8 + version: 3.3.8 '@vue/test-utils': specifier: ^2.3.2 - version: 2.3.2(vue@3.3.4) + version: 2.3.2(vue@3.3.8) recast: specifier: ^0.20.4 version: 0.20.4 @@ -3550,8 +3581,8 @@ packages: '@commitlint/types': 18.1.0 '@types/node': 18.15.11 chalk: 4.1.2 - cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 5.0.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(typescript@5.0.4) + cosmiconfig: 8.3.6(typescript@5.0.4) + cosmiconfig-typescript-loader: 5.0.0(@types/node@18.15.11)(cosmiconfig@8.3.6)(typescript@5.0.4) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -3701,12 +3732,12 @@ packages: resolution: {integrity: sha512-OTFTDQcWS+1ZREOdCWuk5hCBgYO4OsD30lXcOCyVOAjXMhgL5rBRDnt/otb6Nz8CzU0L/igdcaQBDLWc4t9gvg==} dev: false - /@element-plus/icons-vue@2.0.9(vue@3.3.4): + /@element-plus/icons-vue@2.0.9(vue@3.3.8): resolution: {integrity: sha512-okdrwiVeKBmW41Hkl0eMrXDjzJwhQMuKiBOu17rOszqM+LS/yBYpNQNV5Jvoh06Wc+89fMmb/uhzf8NZuDuUaQ==} peerDependencies: vue: ^3.2.0 dependencies: - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) /@esbuild/android-arm64@0.17.19: resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} @@ -4345,7 +4376,7 @@ packages: pretty-format: 26.6.2 dev: true - /@testing-library/vue@6.4.2(@vue/compiler-sfc@3.3.4)(vue@3.3.4): + /@testing-library/vue@6.4.2(@vue/compiler-sfc@3.3.8)(vue@3.3.8): resolution: {integrity: sha512-L+yFRVu+zc/kwYWRaEF3gkEwUcoxhKNz74aya1NmAni2xrJORMqpY7URKxjfiJb4YchLgA47qEZ3irE11/x/+A==} engines: {node: '>10.18'} peerDependencies: @@ -4354,9 +4385,9 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@testing-library/dom': 7.31.2 - '@vue/compiler-sfc': 3.3.4 - '@vue/test-utils': 2.3.2(vue@3.3.4) - vue: 3.3.4 + '@vue/compiler-sfc': 3.3.8 + '@vue/test-utils': 2.3.2(vue@3.3.8) + vue: 3.3.8(typescript@5.0.4) dev: true /@tootallnate/once@2.0.0: @@ -4712,7 +4743,7 @@ packages: - supports-color dev: true - /@vitejs/plugin-vue-jsx@3.0.1(vite@4.4.4)(vue@3.3.4): + /@vitejs/plugin-vue-jsx@3.0.1(vite@4.4.4)(vue@3.3.8): resolution: {integrity: sha512-+Jb7ggL48FSPS1uhPnJbJwWa9Sr90vQ+d0InW+AhBM22n+cfuYqJZDckBc+W3QSHe1WDvewMZfa4wZOtk5pRgw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4723,7 +4754,7 @@ packages: '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.4) '@vue/babel-plugin-jsx': 1.1.1(@babel/core@7.21.4) vite: 4.4.4(@types/node@15.12.4)(sass@1.35.1)(terser@5.14.2) - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) transitivePeerDependencies: - supports-color dev: true @@ -4739,7 +4770,7 @@ packages: vue: 2.7.4 dev: true - /@vitejs/plugin-vue@4.2.3(vite@4.4.4)(vue@3.3.4): + /@vitejs/plugin-vue@4.2.3(vite@4.4.4)(vue@3.3.8): resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4747,10 +4778,10 @@ packages: vue: ^3.2.25 dependencies: vite: 4.4.4(@types/node@18.15.11)(sass@1.35.1)(terser@5.14.2) - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) dev: true - /@vitejs/plugin-vue@4.3.1(vite@4.5.0)(vue@3.3.7): + /@vitejs/plugin-vue@4.3.1(vite@4.5.0)(vue@3.3.8): resolution: {integrity: sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4758,7 +4789,7 @@ packages: vue: ^3.2.25 dependencies: vite: 4.5.0(@types/node@18.15.11) - vue: 3.3.7(typescript@5.0.4) + vue: 3.3.8(typescript@5.0.4) dev: true /@vitest/coverage-c8@0.30.0(vitest@0.31.1): @@ -4847,7 +4878,7 @@ packages: '@volar/language-core': 1.4.1 '@volar/source-map': 1.4.1 '@vue/compiler-dom': 3.3.7 - '@vue/compiler-sfc': 3.3.4 + '@vue/compiler-sfc': 3.3.8 '@vue/reactivity': 3.3.4 '@vue/shared': 3.3.7 minimatch: 9.0.1 @@ -4896,14 +4927,6 @@ packages: - supports-color dev: true - /@vue/compiler-core@3.3.4: - resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} - dependencies: - '@babel/parser': 7.21.4 - '@vue/shared': 3.3.4 - estree-walker: 2.0.2 - source-map-js: 1.0.2 - /@vue/compiler-core@3.3.7: resolution: {integrity: sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==} dependencies: @@ -4913,11 +4936,13 @@ packages: source-map-js: 1.0.2 dev: true - /@vue/compiler-dom@3.3.4: - resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} + /@vue/compiler-core@3.3.8: + resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==} dependencies: - '@vue/compiler-core': 3.3.4 - '@vue/shared': 3.3.4 + '@babel/parser': 7.23.0 + '@vue/shared': 3.3.8 + estree-walker: 2.0.2 + source-map-js: 1.0.2 /@vue/compiler-dom@3.3.7: resolution: {integrity: sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==} @@ -4926,54 +4951,38 @@ packages: '@vue/shared': 3.3.7 dev: true + /@vue/compiler-dom@3.3.8: + resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==} + dependencies: + '@vue/compiler-core': 3.3.8 + '@vue/shared': 3.3.8 + /@vue/compiler-sfc@2.7.4: resolution: {integrity: sha512-WCaF33mlKLSvHDKvOD6FzTa5CI2FlMTeJf3MxJsNP0KDgRoI6RdXhHo9dtvCqV4Sywf9Owm17wTLT1Ymu/WsOQ==} dependencies: - '@babel/parser': 7.21.4 - postcss: 8.4.26 + '@babel/parser': 7.23.0 + postcss: 8.4.31 source-map: 0.6.1 - /@vue/compiler-sfc@3.3.4: - resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} - dependencies: - '@babel/parser': 7.21.4 - '@vue/compiler-core': 3.3.4 - '@vue/compiler-dom': 3.3.4 - '@vue/compiler-ssr': 3.3.4 - '@vue/reactivity-transform': 3.3.4 - '@vue/shared': 3.3.4 - estree-walker: 2.0.2 - magic-string: 0.30.0 - postcss: 8.4.23 - source-map-js: 1.0.2 - - /@vue/compiler-sfc@3.3.7: - resolution: {integrity: sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==} + /@vue/compiler-sfc@3.3.8: + resolution: {integrity: sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==} dependencies: '@babel/parser': 7.23.0 - '@vue/compiler-core': 3.3.7 - '@vue/compiler-dom': 3.3.7 - '@vue/compiler-ssr': 3.3.7 - '@vue/reactivity-transform': 3.3.7 - '@vue/shared': 3.3.7 + '@vue/compiler-core': 3.3.8 + '@vue/compiler-dom': 3.3.8 + '@vue/compiler-ssr': 3.3.8 + '@vue/reactivity-transform': 3.3.8 + '@vue/shared': 3.3.8 estree-walker: 2.0.2 magic-string: 0.30.5 postcss: 8.4.31 source-map-js: 1.0.2 - dev: true - /@vue/compiler-ssr@3.3.4: - resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} + /@vue/compiler-ssr@3.3.8: + resolution: {integrity: sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==} dependencies: - '@vue/compiler-dom': 3.3.4 - '@vue/shared': 3.3.4 - - /@vue/compiler-ssr@3.3.7: - resolution: {integrity: sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==} - dependencies: - '@vue/compiler-dom': 3.3.7 - '@vue/shared': 3.3.7 - dev: true + '@vue/compiler-dom': 3.3.8 + '@vue/shared': 3.3.8 /@vue/devtools-api@6.5.0: resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} @@ -4983,137 +4992,95 @@ packages: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} dev: true - /@vue/reactivity-transform@3.3.4: - resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} - dependencies: - '@babel/parser': 7.21.4 - '@vue/compiler-core': 3.3.4 - '@vue/shared': 3.3.4 - estree-walker: 2.0.2 - magic-string: 0.30.0 - - /@vue/reactivity-transform@3.3.7: - resolution: {integrity: sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==} + /@vue/reactivity-transform@3.3.8: + resolution: {integrity: sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==} dependencies: '@babel/parser': 7.23.0 - '@vue/compiler-core': 3.3.7 - '@vue/shared': 3.3.7 + '@vue/compiler-core': 3.3.8 + '@vue/shared': 3.3.8 estree-walker: 2.0.2 magic-string: 0.30.5 - dev: true /@vue/reactivity@3.3.4: resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} dependencies: '@vue/shared': 3.3.4 - - /@vue/reactivity@3.3.7: - resolution: {integrity: sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==} - dependencies: - '@vue/shared': 3.3.7 dev: true - /@vue/runtime-core@3.3.4: - resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} + /@vue/reactivity@3.3.8: + resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==} dependencies: - '@vue/reactivity': 3.3.4 - '@vue/shared': 3.3.4 + '@vue/shared': 3.3.8 - /@vue/runtime-core@3.3.7: - resolution: {integrity: sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==} + /@vue/runtime-core@3.3.8: + resolution: {integrity: sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==} dependencies: - '@vue/reactivity': 3.3.7 - '@vue/shared': 3.3.7 - dev: true + '@vue/reactivity': 3.3.8 + '@vue/shared': 3.3.8 - /@vue/runtime-dom@3.3.4: - resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} + /@vue/runtime-dom@3.3.8: + resolution: {integrity: sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==} dependencies: - '@vue/runtime-core': 3.3.4 - '@vue/shared': 3.3.4 + '@vue/runtime-core': 3.3.8 + '@vue/shared': 3.3.8 csstype: 3.1.2 - /@vue/runtime-dom@3.3.7: - resolution: {integrity: sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==} - dependencies: - '@vue/runtime-core': 3.3.7 - '@vue/shared': 3.3.7 - csstype: 3.1.2 - dev: true - - /@vue/server-renderer@3.3.4(vue@3.3.4): - resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} + /@vue/server-renderer@3.3.8(vue@3.3.8): + resolution: {integrity: sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==} peerDependencies: - vue: 3.3.4 + vue: 3.3.8 dependencies: - '@vue/compiler-ssr': 3.3.4 - '@vue/shared': 3.3.4 - vue: 3.3.4 - - /@vue/server-renderer@3.3.7(vue@3.3.4): - resolution: {integrity: sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==} - peerDependencies: - vue: 3.3.7 - dependencies: - '@vue/compiler-ssr': 3.3.7 - '@vue/shared': 3.3.7 - vue: 3.3.4 - dev: true - optional: true - - /@vue/server-renderer@3.3.7(vue@3.3.7): - resolution: {integrity: sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==} - peerDependencies: - vue: 3.3.7 - dependencies: - '@vue/compiler-ssr': 3.3.7 - '@vue/shared': 3.3.7 - vue: 3.3.7(typescript@5.0.4) - dev: true + '@vue/compiler-ssr': 3.3.8 + '@vue/shared': 3.3.8 + vue: 3.3.8(typescript@5.0.4) /@vue/shared@3.3.4: resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + dev: true /@vue/shared@3.3.7: resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==} dev: true - /@vue/test-utils@2.3.2(vue@3.3.4): + /@vue/shared@3.3.8: + resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} + + /@vue/test-utils@2.3.2(vue@3.3.8): resolution: {integrity: sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==} peerDependencies: vue: ^3.0.1 dependencies: js-beautify: 1.14.6 - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) optionalDependencies: - '@vue/compiler-dom': 3.3.7 - '@vue/server-renderer': 3.3.7(vue@3.3.4) + '@vue/compiler-dom': 3.3.8 + '@vue/server-renderer': 3.3.8(vue@3.3.8) dev: true - /@vueuse/core@10.5.0(vue@3.3.7): + /@vueuse/core@10.5.0(vue@3.3.8): resolution: {integrity: sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==} dependencies: '@types/web-bluetooth': 0.0.18 '@vueuse/metadata': 10.5.0 - '@vueuse/shared': 10.5.0(vue@3.3.7) - vue-demi: 0.14.6(vue@3.3.7) + '@vueuse/shared': 10.5.0(vue@3.3.8) + vue-demi: 0.14.6(vue@3.3.8) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/core@9.13.0(vue@3.3.4): + /@vueuse/core@9.13.0(vue@3.3.8): resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} dependencies: '@types/web-bluetooth': 0.0.16 '@vueuse/metadata': 9.13.0 - '@vueuse/shared': 9.13.0(vue@3.3.4) - vue-demi: 0.13.11(vue@3.3.4) + '@vueuse/shared': 9.13.0(vue@3.3.8) + vue-demi: 0.13.11(vue@3.3.8) transitivePeerDependencies: - '@vue/composition-api' - vue - /@vueuse/integrations@10.5.0(focus-trap@7.5.4)(vue@3.3.7): + /@vueuse/integrations@10.5.0(focus-trap@7.5.4)(vue@3.3.8): resolution: {integrity: sha512-fm5sXLCK0Ww3rRnzqnCQRmfjDURaI4xMsx+T+cec0ngQqHx/JgUtm8G0vRjwtonIeTBsH1Q8L3SucE+7K7upJQ==} peerDependencies: async-validator: '*' @@ -5154,10 +5121,10 @@ packages: universal-cookie: optional: true dependencies: - '@vueuse/core': 10.5.0(vue@3.3.7) - '@vueuse/shared': 10.5.0(vue@3.3.7) + '@vueuse/core': 10.5.0(vue@3.3.8) + '@vueuse/shared': 10.5.0(vue@3.3.8) focus-trap: 7.5.4 - vue-demi: 0.14.6(vue@3.3.7) + vue-demi: 0.14.6(vue@3.3.8) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -5170,19 +5137,19 @@ packages: /@vueuse/metadata@9.13.0: resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} - /@vueuse/shared@10.5.0(vue@3.3.7): + /@vueuse/shared@10.5.0(vue@3.3.8): resolution: {integrity: sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==} dependencies: - vue-demi: 0.14.6(vue@3.3.7) + vue-demi: 0.14.6(vue@3.3.8) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/shared@9.13.0(vue@3.3.4): + /@vueuse/shared@9.13.0(vue@3.3.8): resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} dependencies: - vue-demi: 0.14.5(vue@3.3.4) + vue-demi: 0.14.5(vue@3.3.8) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -6097,7 +6064,7 @@ packages: requiresBuild: true dev: true - /cosmiconfig-typescript-loader@5.0.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(typescript@5.0.4): + /cosmiconfig-typescript-loader@5.0.0(@types/node@18.15.11)(cosmiconfig@8.3.6)(typescript@5.0.4): resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} engines: {node: '>=v16'} requiresBuild: true @@ -6107,7 +6074,7 @@ packages: typescript: '>=4' dependencies: '@types/node': 18.15.11 - cosmiconfig: 8.1.3 + cosmiconfig: 8.3.6(typescript@5.0.4) jiti: 1.21.0 typescript: 5.0.4 dev: true @@ -6123,15 +6090,20 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig@8.1.3: - resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} + /cosmiconfig@8.3.6(typescript@5.0.4): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} - requiresBuild: true + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + typescript: 5.0.4 dev: true /croact-css-styled@1.1.9: @@ -6432,18 +6404,18 @@ packages: resolution: {integrity: sha512-guZ84yoou4+ILNdj0XEbmGs6DEWj6zpVOWYpY09GU66yEb0DSYvP/biBPzHn0GuW/3RC/pnaYNUWlQE1fJYtgA==} dev: true - /element-plus@2.2.32(vue@3.3.4): + /element-plus@2.2.32(vue@3.3.8): resolution: {integrity: sha512-DTJMhYOy6MApbmh6z/95hPTK5WrBiNHGzV4IN+uEkup1WoimQ+Qyt8RxKdTe/X1LWEJ8YgWv/Cl8P4ocrt5z5g==} peerDependencies: vue: ^3.2.0 dependencies: '@ctrl/tinycolor': 3.6.0 - '@element-plus/icons-vue': 2.0.9(vue@3.3.4) + '@element-plus/icons-vue': 2.0.9(vue@3.3.8) '@floating-ui/dom': 1.2.6 '@popperjs/core': /@sxzz/popperjs-es@2.11.7 '@types/lodash': 4.14.192 '@types/lodash-es': 4.17.7 - '@vueuse/core': 9.13.0(vue@3.3.4) + '@vueuse/core': 9.13.0(vue@3.3.8) async-validator: 4.2.5 dayjs: 1.11.4 escape-html: 1.0.3 @@ -6452,7 +6424,7 @@ packages: lodash-unified: 1.0.3(@types/lodash-es@4.17.7)(lodash-es@4.17.21)(lodash@4.17.21) memoize-one: 6.0.0 normalize-wheel-es: 1.2.0 - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) transitivePeerDependencies: - '@vue/composition-api' @@ -8236,6 +8208,7 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /magic-string@0.30.1: resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} @@ -8249,7 +8222,6 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -8695,7 +8667,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -8797,14 +8769,6 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss@8.4.23: - resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - /postcss@8.4.26: resolution: {integrity: sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==} engines: {node: ^10 || ^12 || >=14} @@ -8812,6 +8776,7 @@ packages: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true /postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} @@ -8820,7 +8785,6 @@ packages: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /preact@10.13.2: resolution: {integrity: sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==} @@ -9652,16 +9616,16 @@ packages: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} dev: true - /tdesign-icons-vue-next@0.1.8(vue@3.3.4): + /tdesign-icons-vue-next@0.1.8(vue@3.3.8): resolution: {integrity: sha512-ssI/KJHlhUMYbf+dk+7Ab3LQbWc5wJBjWF9GaGZWPlMU0Yhui9oa2Dvm97Pbx8Ba6drTEDKwfmtJV2R4V6e84Q==} peerDependencies: vue: ^3.0.0 dependencies: '@babel/runtime': 7.21.0 - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) dev: false - /tdesign-vue-next@1.3.4(vue@3.3.4): + /tdesign-vue-next@1.3.4(vue@3.3.8): resolution: {integrity: sha512-6rCEvH4JQoKJZH7MWhF+i1cFBa+GybuulHI4/Wto4GWjeTNG+OnJwjYD3ZLcpGZHuVadP01/oYOFbMZoOQlllg==} peerDependencies: vue: '>=3.1.0' @@ -9676,10 +9640,10 @@ packages: lodash: 4.17.21 mitt: 3.0.0 sortablejs: 1.15.0 - tdesign-icons-vue-next: 0.1.8(vue@3.3.4) + tdesign-icons-vue-next: 0.1.8(vue@3.3.8) tinycolor2: 1.6.0 validator: 13.9.0 - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) dev: false /temp-dir@3.0.0: @@ -9902,7 +9866,6 @@ packages: resolution: {integrity: sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==} engines: {node: '>=4.2.0'} hasBin: true - dev: true /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} @@ -9914,7 +9877,6 @@ packages: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true - dev: true /ufo@1.1.1: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} @@ -10006,7 +9968,7 @@ packages: - rollup dev: true - /unplugin-vue-components@0.22.11(vue@3.3.4): + /unplugin-vue-components@0.22.11(vue@3.3.8): resolution: {integrity: sha512-GTzqPl0Ek8fq8qMufjR6hvtnjnSwMpJ1Rg2Ez9AcKZVp1piWoU/Q4FDnI9wHVKX8eenYL0nqAF3ejYAk1TUfqQ==} engines: {node: '>=14'} peerDependencies: @@ -10026,7 +9988,7 @@ packages: minimatch: 5.1.6 resolve: 1.22.2 unplugin: 1.3.1 - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) transitivePeerDependencies: - rollup - supports-color @@ -10110,7 +10072,7 @@ packages: mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.4.4(@types/node@18.15.11)(sass@1.35.1)(terser@5.14.2) + vite: 4.5.0(@types/node@18.15.11) transitivePeerDependencies: - '@types/node' - less @@ -10198,6 +10160,42 @@ packages: fsevents: 2.3.2 dev: true + /vite@4.5.0(@types/node@15.12.4): + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 15.12.4 + esbuild: 0.18.14 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vite@4.5.0(@types/node@18.15.11): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -10249,16 +10247,16 @@ packages: '@docsearch/css': 3.5.2 '@docsearch/js': 3.5.2(@algolia/client-search@4.9.1)(search-insights@2.9.0) '@types/markdown-it': 13.0.5 - '@vitejs/plugin-vue': 4.3.1(vite@4.5.0)(vue@3.3.7) + '@vitejs/plugin-vue': 4.3.1(vite@4.5.0)(vue@3.3.8) '@vue/devtools-api': 6.5.1 - '@vueuse/core': 10.5.0(vue@3.3.7) - '@vueuse/integrations': 10.5.0(focus-trap@7.5.4)(vue@3.3.7) + '@vueuse/core': 10.5.0(vue@3.3.8) + '@vueuse/integrations': 10.5.0(focus-trap@7.5.4)(vue@3.3.8) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.1.0 shiki: 0.14.5 vite: 4.5.0(@types/node@18.15.11) - vue: 3.3.7(typescript@5.0.4) + vue: 3.3.8(typescript@5.0.4) transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -10362,7 +10360,7 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /vue-demi@0.13.11(vue@3.3.4): + /vue-demi@0.13.11(vue@3.3.8): resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} engines: {node: '>=12'} hasBin: true @@ -10374,9 +10372,9 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) - /vue-demi@0.14.5(vue@3.3.4): + /vue-demi@0.14.5(vue@3.3.8): resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} engines: {node: '>=12'} hasBin: true @@ -10388,9 +10386,9 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) - /vue-demi@0.14.6(vue@3.3.7): + /vue-demi@0.14.6(vue@3.3.8): resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} engines: {node: '>=12'} hasBin: true @@ -10402,7 +10400,7 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.3.7(typescript@5.0.4) + vue: 3.3.8(typescript@5.0.4) dev: true /vue-eslint-parser@9.1.1(eslint@8.38.0): @@ -10423,13 +10421,13 @@ packages: - supports-color dev: true - /vue-router@4.0.10(vue@3.3.4): + /vue-router@4.0.10(vue@3.3.8): resolution: {integrity: sha512-YbPf6QnZpyyWfnk7CUt2Bme+vo7TLfg1nGZNkvYqKYh4vLaFw6Gn8bPGdmt5m4qrGnKoXLqc4htAsd3dIukICA==} peerDependencies: vue: ^3.0.0 dependencies: '@vue/devtools-api': 6.5.0 - vue: 3.3.4 + vue: 3.3.8(typescript@5.0.4) dev: false /vue-template-compiler@2.7.14: @@ -10476,30 +10474,36 @@ packages: '@vue/compiler-sfc': 2.7.4 csstype: 3.1.2 - /vue@3.3.4: - resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} - dependencies: - '@vue/compiler-dom': 3.3.4 - '@vue/compiler-sfc': 3.3.4 - '@vue/runtime-dom': 3.3.4 - '@vue/server-renderer': 3.3.4(vue@3.3.4) - '@vue/shared': 3.3.4 - - /vue@3.3.7(typescript@5.0.4): - resolution: {integrity: sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==} + /vue@3.3.8(typescript@4.3.4): + resolution: {integrity: sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.3.7 - '@vue/compiler-sfc': 3.3.7 - '@vue/runtime-dom': 3.3.7 - '@vue/server-renderer': 3.3.7(vue@3.3.7) - '@vue/shared': 3.3.7 + '@vue/compiler-dom': 3.3.8 + '@vue/compiler-sfc': 3.3.8 + '@vue/runtime-dom': 3.3.8 + '@vue/server-renderer': 3.3.8(vue@3.3.8) + '@vue/shared': 3.3.8 + typescript: 4.3.4 + dev: false + + /vue@3.3.8(typescript@5.0.4): + resolution: {integrity: sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.3.8 + '@vue/compiler-sfc': 3.3.8 + '@vue/runtime-dom': 3.3.8 + '@vue/server-renderer': 3.3.8(vue@3.3.8) + '@vue/shared': 3.3.8 typescript: 5.0.4 - dev: true /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} diff --git a/runtime/vue3/package.json b/runtime/vue3/package.json index 7dd49eb1..2bf69386 100644 --- a/runtime/vue3/package.json +++ b/runtime/vue3/package.json @@ -26,7 +26,7 @@ "@tmagic/stage": "1.3.1", "@tmagic/utils": "1.3.1", "axios": "^0.25.0", - "vue": "^3.3.4" + "vue": "^3.3.8" }, "devDependencies": { "@babel/preset-env": "^7.21.4", @@ -34,7 +34,7 @@ "@vitejs/plugin-legacy": "^4.1.0", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.0.1", - "@vue/compiler-sfc": "^3.3.4", + "@vue/compiler-sfc": "^3.3.8", "@vue/test-utils": "^2.3.2", "recast": "^0.20.4", "rollup": "^2.25.0", diff --git a/vitest.config.ts b/vitest.config.ts index 84248fa2..38738bca 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -22,6 +22,7 @@ export default defineConfig({ './packages/stage/tests/**', './packages/utils/tests/**', './packages/data-source/tests/**', + './packages/dep/tests/**', ], environment: 'jsdom', },