diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index b06ec3c3f3..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,10 +0,0 @@ -.vscode -dist -public -package-lock.json -**/node_modules/** -tmp -temp -mockServer -packages/vue-generator/**/output/** -packages/build/vite-plugin-meta-comments/src/test/code/** diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 9d1f4572d3..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - env: { - browser: true, - es2015: true, - worker: true, - node: true, - jest: true - }, - extends: ['eslint:recommended', 'plugin:vue/vue3-essential'], - parser: 'vue-eslint-parser', - parserOptions: { - parser: '@babel/eslint-parser', - ecmaVersion: 'latest', - sourceType: 'module', - requireConfigFile: false, - babelOptions: { - parserOpts: { - plugins: ['jsx'] - } - } - }, - plugins: ['vue'], - rules: { - 'no-console': 'error', - 'no-debugger': 'error', - 'space-before-function-paren': 'off', - 'vue/multi-word-component-names': 'off', - 'no-use-before-define': 'error', - 'no-unused-vars': ['error', { ignoreRestSiblings: true, varsIgnorePattern: '^_', argsIgnorePattern: '^_' }] - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..29d90a357d --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,76 @@ +import js from '@eslint/js' +import { configureVueProject, defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript' +import pluginVue from 'eslint-plugin-vue' +import globals from 'globals' + +configureVueProject({ + scriptLangs: ['ts', 'js', 'tsx', 'jsx'] +}) + +export default defineConfigWithVueTs( + { + ignores: [ + '.vscode', + 'docs', + '**/dist', + '**/public', + '**/package-lock.json', + '**/node_modules', + '**/tmp', + '**/temp', + 'mockServer', + '**/bin', + '**/expected', + '**/output', + '**/test' + ] + }, + { + files: ['**/*.{js,mjs,jsx,ts,mts,tsx,vue}'] + }, + js.configs.recommended, + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.worker, + ...globals.node, + ...globals.jest + } + }, + rules: { + 'no-console': 'error', + 'no-debugger': 'error', + 'no-eq-null': 'error', + 'no-extra-semi': 'off', + 'no-eval': 'error', + 'space-before-function-paren': 'off', + 'vue/multi-word-component-names': 'off', + 'vue/prefer-import-from-vue': 'off', + // 允许 @ts-ignore + '@typescript-eslint/ban-ts-comment': 'off', + // 允许非空断言 + '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-use-before-define': 'error', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + ignoreRestSiblings: true, + varsIgnorePattern: '^_', + argsIgnorePattern: '^_', + caughtErrors: 'none' + } + ] + } + }, + { + files: ['scripts/**/*'], + rules: { + 'no-console': 'off', + '@typescript-eslint/no-require-imports': 'off' + } + } +) diff --git a/lint-staged.config.js b/lint-staged.config.js index d673344c2e..f794152af8 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,4 +1,4 @@ module.exports = { - './packages/**/**.{js,vue,jsx}': 'eslint', - './packages/**/**.{vue,js,ts,html,json,less}': 'prettier --write' + './packages/**/**.{js,mjs,jsx,ts,mts,tsx,vue}': 'eslint', + './packages/**/**.{js,mjs,jsx,ts,mts,tsx,vue,html,json,less}': 'prettier --write' } diff --git a/package.json b/package.json index b6d3bead50..439d992387 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "build:alpha": "pnpm --filter designer-demo build:alpha", "build:prod": "pnpm --filter designer-demo build", "buildComponentSchemas": "node scripts/buildComponentSchemas.js", - "lint": "eslint . --ext .js,.vue,.jsx --fix", - "format": "prettier --write **/*{.vue,.js,.ts,.html,.json}", + "lint": "eslint . --ext .js,.mjs,.jsx,.ts,.mts,.tsx,.vue --fix", + "format": "prettier --write --list-different **/*{.vue,.js,.mjs,.jsx,.ts,.mts,.tsx,.html,.json}", "prepare": "node -e \"if(require('fs').existsSync('.git')){process.exit(1)}\" || husky install", "pub:premajor": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version premajor --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", "pub:preminor": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version preminor --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", @@ -23,24 +23,26 @@ "updateTemplate": "node ./scripts/updateTemplate.mjs" }, "devDependencies": { - "@babel/eslint-parser": "^7.21.3", + "@eslint/js": "^8.57.1", "@types/node": "^18.0.0", - "@vue/eslint-config-typescript": "^11.0.3", + "@vue/eslint-config-typescript": "^14.4.0", + "@vue/tsconfig": "^0.7.0", "chokidar": "^3.5.3", "concurrently": "^8.2.0", "cross-env": "^7.0.3", "dotenv": "^16.3.1", - "eslint": "^8.38.0", - "eslint-plugin-vue": "^8.0.0", + "eslint": "^9.21.0", + "eslint-plugin-vue": "^9.32.0", "fast-glob": "^3.3.2", "fs-extra": "^10.1.0", + "globals": "^16.0.0", "husky": "^8.0.0", "lerna": "^7.2.0", "lint-staged": "^13.2.0", "mysql": "^2.18.1", "picocolors": "^1.0.0", "prettier": "^2.7.1", - "vue-eslint-parser": "^8.0.1" + "typescript": "~5.4.5" }, "browserslist": [ "> 1%", diff --git a/packages/block-compiler/.eslintrc.cjs b/packages/block-compiler/.eslintrc.cjs deleted file mode 100644 index eb1014c689..0000000000 --- a/packages/block-compiler/.eslintrc.cjs +++ /dev/null @@ -1,27 +0,0 @@ -const path = require('path') -const { rules } = require('../../.eslintrc') - -module.exports = { - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], - root: true, - parser: '@typescript-eslint/parser', - parserOptions: { - projectService: true, - project: [path.join(__dirname, './tsconfig.json') ], - ecmaVersion: 'latest', - }, - plugins: ['@typescript-eslint'], - env: { - browser: true, - es2015: true, - node: true - }, - rules: { - ...rules, - // 允许 @ts-ignore - "@typescript-eslint/ban-ts-comment": "off", - // 允许非空断言 - "@typescript-eslint/no-non-null-asserted-optional-chain": "off" - }, - ignorePatterns: ['test/sample/*.vue', '.eslintrc.cjs'] -} diff --git a/packages/block-compiler/eslint.config.mjs b/packages/block-compiler/eslint.config.mjs new file mode 100644 index 0000000000..0b4237a604 --- /dev/null +++ b/packages/block-compiler/eslint.config.mjs @@ -0,0 +1,19 @@ +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import rootConfig from '../../eslint.config.mjs' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + ...rootConfig, + { + languageOptions: { + parserOptions: { + projectService: true, + project: [path.join(__dirname, './tsconfig.json')] + } + } + } +] diff --git a/packages/block-compiler/tsconfig.node.json b/packages/block-compiler/tsconfig.node.json index 1020d544b9..16bb2100f9 100644 --- a/packages/block-compiler/tsconfig.node.json +++ b/packages/block-compiler/tsconfig.node.json @@ -20,5 +20,5 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["vite.config.ts", ".eslintrc.cjs"] + "include": ["vite.config.ts", "eslint.config.mjs"] } diff --git a/packages/build/vite-config/src/localCdnFile/replaceImportPath.mjs b/packages/build/vite-config/src/localCdnFile/replaceImportPath.mjs index 47ae67ed72..877945d54b 100644 --- a/packages/build/vite-config/src/localCdnFile/replaceImportPath.mjs +++ b/packages/build/vite-config/src/localCdnFile/replaceImportPath.mjs @@ -11,7 +11,8 @@ export function relativePathPattern(relativePath) { } export function resolvePath(importPath, currentFilePath) { - if (['js', 'mjs'].some(suffix =>importPath.endsWith(suffix))) { // 文件名已经带有.js,.mjs后缀 + if (['js', 'mjs'].some((suffix) => importPath.endsWith(suffix))) { + // 文件名已经带有.js,.mjs后缀 return importPath } const parentPath = path.resolve(currentFilePath, '../') @@ -21,9 +22,9 @@ export function resolvePath(importPath, currentFilePath) { const stat = fs.statSync(filePrefix) if (stat.isDirectory()) { let mainFileName = 'index.js' - + const packageFile = path.resolve(filePrefix, 'package.json') - + if (fs.existsSync(packageFile)) { const packageFileContent = fs.readFileSync(packageFile, { encoding: 'utf-8' }) const packageJson = JSON.parse(packageFileContent) @@ -39,7 +40,7 @@ export function resolvePath(importPath, currentFilePath) { return importPath } const possibleSuffix = ['.js', '.mjs'] - const suffix = possibleSuffix.find(suf => fs.existsSync(filePrefix + suf)) + const suffix = possibleSuffix.find((suf) => fs.existsSync(filePrefix + suf)) if (suffix) { return relativePathPattern(path.relative(path.resolve(currentFilePath, '../'), filePrefix + suffix)) } @@ -62,16 +63,16 @@ export function babelReplaceImportPathWithCertainFileName(content, currentFilePa return } const importPath = node.source.value - if(importPath.startsWith('.')) { + if (importPath.startsWith('.')) { const certainPath = resolvePath(importPath, currentFilePath) - if(!certainPath) { + if (!certainPath) { logger.warn(`File not found: ${importPath} used in ${currentFilePath}`) result.error.push(importPath) } - if(certainPath !== importPath) { + if (certainPath !== importPath) { node.source.value = certainPath fileChangedMark = true - result.success.push({before: importPath, after: certainPath}) + result.success.push({ before: importPath, after: certainPath }) } } } @@ -86,4 +87,3 @@ export function babelReplaceImportPathWithCertainFileName(content, currentFilePa } return result } - diff --git a/packages/build/vite-config/src/vite-plugins/devAliasPlugin.js b/packages/build/vite-config/src/vite-plugins/devAliasPlugin.js index a4bf54d386..28b4c11d6b 100644 --- a/packages/build/vite-config/src/vite-plugins/devAliasPlugin.js +++ b/packages/build/vite-config/src/vite-plugins/devAliasPlugin.js @@ -22,7 +22,7 @@ const getDevAlias = (useSourceAlias) => { '@opentiny/tiny-engine-plugin-datasource': path.resolve(basePath, 'packages/plugins/datasource/index.js'), '@opentiny/tiny-engine-plugin-script': path.resolve(basePath, 'packages/plugins/script/index.js'), '@opentiny/tiny-engine-plugin-tree': path.resolve(basePath, 'packages/plugins/tree/index.js'), - '@opentiny/tiny-engine-plugin-help': path.resolve(basePath, 'packages/plugins/help/index.js'), + '@opentiny/tiny-engine-plugin-help': path.resolve(basePath, 'packages/plugins/help/index.ts'), '@opentiny/tiny-engine-plugin-schema': path.resolve(basePath, 'packages/plugins/schema/index.js'), '@opentiny/tiny-engine-plugin-page': path.resolve(basePath, 'packages/plugins/page/index.js'), '@opentiny/tiny-engine-plugin-i18n': path.resolve(basePath, 'packages/plugins/i18n/index.js'), diff --git a/packages/canvas/DesignCanvas/src/api/useCanvas.js b/packages/canvas/DesignCanvas/src/api/useCanvas.js index ebb02943aa..7dda1d3b50 100644 --- a/packages/canvas/DesignCanvas/src/api/useCanvas.js +++ b/packages/canvas/DesignCanvas/src/api/useCanvas.js @@ -10,7 +10,6 @@ * */ -/* eslint-disable no-new-func */ import { reactive, ref, toRaw } from 'vue' import * as jsonDiffPatch from 'jsondiffpatch' import DiffMatchPatch from 'diff-match-patch' @@ -90,7 +89,7 @@ const handleTinyGridColumnsSlots = (node) => { nodesMap.value.set(item.id, { node: item, parent: node }) if (Array.isArray(item.children)) { - // eslint-disable-next-line no-use-before-define + // eslint-disable-next-line @typescript-eslint/no-use-before-define generateNodesMap(item.children, item) } }) @@ -589,10 +588,12 @@ const getSchema = () => { const getNodePath = (id, nodes = []) => { const { parent, node } = getNodeWithParentById(id) || {} - node && nodes.unshift({ name: node.componentName, node: id }) + if (node) { + nodes.unshift({ name: node.componentName, node: id }) + } if (parent) { - parent && getNodePath(parent.id, nodes) + getNodePath(parent.id, nodes) } else { nodes.unshift({ name: 'BODY', node: id }) } diff --git a/packages/canvas/container/src/CanvasContainer.vue b/packages/canvas/container/src/CanvasContainer.vue index 97e688aa09..2812572d21 100644 --- a/packages/canvas/container/src/CanvasContainer.vue +++ b/packages/canvas/container/src/CanvasContainer.vue @@ -100,8 +100,8 @@ export default { const insertPanel = ref(null) const insertPosition = ref(false) const loading = computed(() => useCanvas().isLoading()) - let showSettingModel = ref(false) - let target = ref(null) + const showSettingModel = ref(false) + const target = ref(null) const srcAttrName = computed(() => (props.canvasSrc ? 'src' : 'srcdoc')) const containerPanel = ref(null) diff --git a/packages/canvas/container/src/components/CanvasAction.vue b/packages/canvas/container/src/components/CanvasAction.vue index b82392e6e9..8e8383a952 100644 --- a/packages/canvas/container/src/components/CanvasAction.vue +++ b/packages/canvas/container/src/components/CanvasAction.vue @@ -208,7 +208,6 @@ export default { const toIndex = index + addend if (toIndex > -1 && toIndex < list.length) { - // eslint-disable-next-line no-extra-semi ;[list[index], list[toIndex]] = [list[toIndex], list[index]] updateRect() @@ -228,7 +227,9 @@ export default { const selectParent = () => { const parentId = getCurrent().parent?.id - parentId && selectNode(parentId) + if (parentId) { + selectNode(parentId) + } } const copy = () => { @@ -266,20 +267,20 @@ export default { const optionRef = ref(null) const fixStyle = ref('') - let showPopover = ref(false) + const showPopover = ref(false) const activeSetting = () => { showPopover.value = false } const findParentHasClass = (target) => { - let parent = target.parentNode + const parent = target.parentNode if (parent.className === undefined) { return false } - let name = JSON.stringify(parent.className) + const name = JSON.stringify(parent.className) const preventClassNameList = ['short-cut-set', 'tiny-dialog-box', 'icon-popover', 'i18n-input-popover'] @@ -313,7 +314,7 @@ export default { () => props.windowGetClickEventTarget, (newProps) => { if (newProps) { - let flag = findParentHasClass(newProps) + const flag = findParentHasClass(newProps) if (!flag) { showPopover.value = false } diff --git a/packages/canvas/container/src/components/CanvasResizeBorder.vue b/packages/canvas/container/src/components/CanvasResizeBorder.vue index 1a5d6f538b..d15d733529 100644 --- a/packages/canvas/container/src/components/CanvasResizeBorder.vue +++ b/packages/canvas/container/src/components/CanvasResizeBorder.vue @@ -84,7 +84,7 @@ export default { } if (state.direction === 'vertical') { - let target = schema.componentName === 'CanvasRow' ? schema : parent + const target = schema.componentName === 'CanvasRow' ? schema : parent const dis = clientY - state.startPosition.y const minHeight = state.startPosition.height + dis diff --git a/packages/canvas/container/src/components/shortCutPopover.vue b/packages/canvas/container/src/components/shortCutPopover.vue index 19c6c14366..5837595786 100644 --- a/packages/canvas/container/src/components/shortCutPopover.vue +++ b/packages/canvas/container/src/components/shortCutPopover.vue @@ -54,7 +54,9 @@ export default { properties.value.forEach((group) => { group.content.forEach((prop) => { - shortcuts.includes(prop.property) && quickProps.push(prop) + if (shortcuts.includes(prop.property)) { + quickProps.push(prop) + } }) // 如果目标元素的快速设置值没有,则取属性值放置 diff --git a/packages/canvas/container/src/container.js b/packages/canvas/container/src/container.js index 3599af9fc7..a9e1aa55dd 100644 --- a/packages/canvas/container/src/container.js +++ b/packages/canvas/container/src/container.js @@ -154,7 +154,9 @@ const smoothScroll = { this.timmer = setTimeout(fn, time) } - this.timmer || fn() + if (!this.timmer) { + fn() + } }, stop() { clearTimeout(this.timmer) @@ -766,7 +768,9 @@ export const selectNode = async (id, type) => { export const hoverNode = (id, data) => { const element = querySelectById(id) - element && setHoverRect(element, data) + if (element) { + setHoverRect(element, data) + } } export const insertNode = (node, position = POSITION.IN, select = true) => { @@ -794,7 +798,9 @@ export const insertNode = (node, position = POSITION.IN, select = true) => { } } - select && setTimeout(() => selectNode(node.data.id)) + if (select) { + setTimeout(() => selectNode(node.data.id)) + } getController().addHistory() } diff --git a/packages/canvas/container/src/keyboard.js b/packages/canvas/container/src/keyboard.js index bb47b33910..0689f997ad 100644 --- a/packages/canvas/container/src/keyboard.js +++ b/packages/canvas/container/src/keyboard.js @@ -30,15 +30,21 @@ function handlerLeft({ parent }) { } function handlerRight({ schema }) { const id = schema.children?.[0]?.id - id && selectNode(id) + if (id) { + selectNode(id) + } } function handlerUp({ index, parent }) { const id = (parent?.children[index - 1] || parent)?.id - id && selectNode(id) + if (id) { + selectNode(id) + } } function handlerDown({ index, parent }) { const id = parent?.children[index + 1]?.id - id && selectNode(id) + if (id) { + selectNode(id) + } } const { multiSelectedStates, clearMultiSelection } = useMultiSelect() diff --git a/packages/canvas/render/src/RenderMain.ts b/packages/canvas/render/src/RenderMain.ts index fa1d08d90a..a3e1d8b04d 100644 --- a/packages/canvas/render/src/RenderMain.ts +++ b/packages/canvas/render/src/RenderMain.ts @@ -22,7 +22,7 @@ import { } from './canvas-function' import { removeBlockCompsCache, setConfigure } from './material-function' import { useUtils, useBridge, useDataSourceMap, useGlobalState } from './application-function' -import { IPageSchema, useContext, usePageContext, useSchema } from './page-block-function' +import { type IPageSchema, useContext, usePageContext, useSchema } from './page-block-function' import { api, setCurrentApi } from './canvas-function/canvas-api' import { getPageAncestors } from './material-function/page-getter' import CanvasEmpty from './canvas-function/CanvasEmpty.vue' diff --git a/packages/canvas/render/src/application-function/utils.ts b/packages/canvas/render/src/application-function/utils.ts index 16bf82791f..2011fdc0c4 100644 --- a/packages/canvas/render/src/application-function/utils.ts +++ b/packages/canvas/render/src/application-function/utils.ts @@ -16,7 +16,7 @@ export interface IUtil { export function useUtils(context: Record) { const refreshKey = ref(0) - const utils: Record = {} + const utils: Record any | any> = {} const getUtils = () => utils const setUtils = async (data: Array) => { diff --git a/packages/canvas/render/src/builtin/CanvasCollection.js b/packages/canvas/render/src/builtin/CanvasCollection.js index d5104ee996..35aeff5907 100644 --- a/packages/canvas/render/src/builtin/CanvasCollection.js +++ b/packages/canvas/render/src/builtin/CanvasCollection.js @@ -51,7 +51,9 @@ const removeState = (pageSchema, variableName) => { traverse(ast, { ExpressionStatement(path) { - path.toString().includes(variableName) && path.remove() + if (path.toString().includes(variableName)) { + path.remove() + } } }) diff --git a/packages/canvas/render/src/canvas-function/canvas-api.ts b/packages/canvas/render/src/canvas-function/canvas-api.ts index 8899f0a982..867c568ff8 100644 --- a/packages/canvas/render/src/canvas-function/canvas-api.ts +++ b/packages/canvas/render/src/canvas-function/canvas-api.ts @@ -8,7 +8,7 @@ import type { setController } from './controller' export interface IApplicationFunctionAPI extends Pick, 'getUtils'>, Pick, 'getDataSourceMap'> {} -export interface IPageContextAPI extends Pick {} +export type IPageContextAPI = Pick export interface ICanvasFunctionAPI extends Pick, 'getRenderer' | 'setRenderer'> { getDesignMode: typeof getDesignMode setDesignMode: typeof setDesignMode diff --git a/packages/canvas/render/src/canvas-function/locale.ts b/packages/canvas/render/src/canvas-function/locale.ts index 9973baea9c..b91a03e7b8 100644 --- a/packages/canvas/render/src/canvas-function/locale.ts +++ b/packages/canvas/render/src/canvas-function/locale.ts @@ -1,4 +1,4 @@ -import { inject, watch, WritableComputedRef } from 'vue' +import { inject, watch, type WritableComputedRef } from 'vue' import { I18nInjectionKey } from 'vue-i18n' import { useBroadcastChannel } from '@vueuse/core' import { constants } from '@opentiny/tiny-engine-utils' diff --git a/packages/canvas/render/src/canvas-function/page-switcher.ts b/packages/canvas/render/src/canvas-function/page-switcher.ts index 5b84894572..b14f3293d2 100644 --- a/packages/canvas/render/src/canvas-function/page-switcher.ts +++ b/packages/canvas/render/src/canvas-function/page-switcher.ts @@ -1,5 +1,5 @@ import { reactive } from 'vue' -import { IPageContext } from '../page-block-function' +import type { IPageContext } from '../page-block-function' export interface ICurrentPage { pageId: string | number diff --git a/packages/canvas/render/src/lowcode.ts b/packages/canvas/render/src/lowcode.ts index ea5fb42bf9..748b7f6bbd 100644 --- a/packages/canvas/render/src/lowcode.ts +++ b/packages/canvas/render/src/lowcode.ts @@ -10,7 +10,7 @@ * */ -import { getCurrentInstance, nextTick, provide, inject, Ref } from 'vue' +import { getCurrentInstance, nextTick, provide, inject, type Ref } from 'vue' import { I18nInjectionKey } from 'vue-i18n' import { api } from './RenderMain' import { globalNotify } from './canvas-function' diff --git a/packages/canvas/render/src/material-function/scope-css-plugin.ts b/packages/canvas/render/src/material-function/scope-css-plugin.ts index 8f56f6535d..297a99c50c 100644 --- a/packages/canvas/render/src/material-function/scope-css-plugin.ts +++ b/packages/canvas/render/src/material-function/scope-css-plugin.ts @@ -1,6 +1,6 @@ /** @ref {@vue/compiler-sfc@2.7.16/src/stylePlugins/scoped.ts } */ -/* eslint-disable no-use-before-define, prefer-const*/ -import { PluginCreator, Rule, AtRule } from 'postcss' +/* eslint-disable @typescript-eslint/no-use-before-define, prefer-const*/ +import { type PluginCreator, Rule, AtRule } from 'postcss' import selectorParser from 'postcss-selector-parser' const animationNameRE = /^(-\w+-)?animation-name$/ diff --git a/packages/canvas/render/src/page-block-function/accessor-map.ts b/packages/canvas/render/src/page-block-function/accessor-map.ts index 2318197425..3c6541caab 100644 --- a/packages/canvas/render/src/page-block-function/accessor-map.ts +++ b/packages/canvas/render/src/page-block-function/accessor-map.ts @@ -1,4 +1,4 @@ -import { watchEffect, WatchStopHandle } from 'vue' +import { watchEffect, type WatchStopHandle } from 'vue' import { generateFunction } from '../data-utils' import { globalNotify } from '../canvas-function' @@ -10,7 +10,7 @@ interface IAccessor { export function useAccessorMap(context) { const generateAccessor = (type: IAccessorType, accessor: IAccessor, property: string) => { - const accessorFn = generateFunction(accessor[type].value, context) as Function + const accessorFn = generateFunction(accessor[type].value, context) as (...args: any) => any return { property, accessorFn, type } } diff --git a/packages/canvas/render/src/page-block-function/context.ts b/packages/canvas/render/src/page-block-function/context.ts index 3958920e4e..8a3cf6ca4a 100644 --- a/packages/canvas/render/src/page-block-function/context.ts +++ b/packages/canvas/render/src/page-block-function/context.ts @@ -15,7 +15,9 @@ import { shallowReactive } from 'vue' export function useContext() { const context = shallowReactive({}) const setContext = (ctx, clear) => { - clear && Object.keys(context).forEach((key) => delete context[key]) + if (clear) { + Object.keys(context).forEach((key) => delete context[key]) + } Object.assign(context, ctx) } diff --git a/packages/canvas/render/src/page-block-function/methods.ts b/packages/canvas/render/src/page-block-function/methods.ts index 8d0c037e0b..6261e4558d 100644 --- a/packages/canvas/render/src/page-block-function/methods.ts +++ b/packages/canvas/render/src/page-block-function/methods.ts @@ -7,7 +7,9 @@ export function useMethods({ getContext, setContext }) { const getMethods = () => methods const setMethods = (data: Record = {}, clear = false) => { - clear && reset(methods) + if (clear) { + reset(methods) + } // 这里有些方法在画布还是有执行的必要的,比如说表格的renderer和formatText方法,包括一些自定义渲染函数 Object.assign( methods, diff --git a/packages/canvas/render/src/page-block-function/props.ts b/packages/canvas/render/src/page-block-function/props.ts index 9cc7fcde5e..6bafd60d64 100644 --- a/packages/canvas/render/src/page-block-function/props.ts +++ b/packages/canvas/render/src/page-block-function/props.ts @@ -4,7 +4,9 @@ import { useAccessorMap } from './accessor-map' export function useProps(generateAccessor: ReturnType['generateAccessor']) { const props = {} const setProps = (data: Record, clear = false) => { - clear && reset(props) + if (clear) { + reset(props) + } Object.assign(props, data) } diff --git a/packages/canvas/render/src/render.ts b/packages/canvas/render/src/render.ts index 7cda653af1..2294188827 100644 --- a/packages/canvas/render/src/render.ts +++ b/packages/canvas/render/src/render.ts @@ -10,7 +10,7 @@ * */ -import { defineComponent, h, inject, provide, Ref, Suspense } from 'vue' +import { defineComponent, h, inject, provide, type Ref, Suspense } from 'vue' import { NODE_UID as DESIGN_UIDKEY, @@ -26,7 +26,7 @@ import BlockLoading from './BlockLoading.vue' export const renderDefault = (children, scope, parent) => children.map?.((child) => - // eslint-disable-next-line no-use-before-define + // eslint-disable-next-line @typescript-eslint/no-use-before-define h(renderer, { schema: child, scope, diff --git a/packages/canvas/render/src/runner.ts b/packages/canvas/render/src/runner.ts index 7786dcce45..903c83cd02 100644 --- a/packages/canvas/render/src/runner.ts +++ b/packages/canvas/render/src/runner.ts @@ -50,7 +50,9 @@ const create = async (config) => { if (typeof beforeAppCreate === 'function') { await beforeAppCreate({ api: renderer }) } - App && App.unmount() + if (App) { + App.unmount() + } App = null document.body.remove() diff --git a/packages/common/component/BindI18n.vue b/packages/common/component/BindI18n.vue index 599909bc36..6d2feb259e 100644 --- a/packages/common/component/BindI18n.vue +++ b/packages/common/component/BindI18n.vue @@ -98,7 +98,9 @@ export default { const data = props?.data?.params || {} curValue.replace(/\{(.+?)\}/g, (substr, key) => { - key && params.push({ name: key, value: data[key] || '' }) + if (key) { + params.push({ name: key, value: data[key] || '' }) + } }) paramsForm.value = params } diff --git a/packages/common/component/ConfigItem.vue b/packages/common/component/ConfigItem.vue index 6ab4a1d6c1..c296ffbdfb 100644 --- a/packages/common/component/ConfigItem.vue +++ b/packages/common/component/ConfigItem.vue @@ -321,6 +321,7 @@ export default { const isEmptyInputValue = (value) => { // 通过 value == null 做隐式类型转换 // 空值约定为 undefined | null | '' + // eslint-disable-next-line no-eq-null return value == null || (typeOf(value) === TYPES.StringType && value.trim() === '') } const verifyRequired = (value) => { @@ -436,7 +437,7 @@ export default { const showErrorPopup = ref(false) - let isFocus = ref(false) + const isFocus = ref(false) watch( () => [verification.failed, isFocus.value], diff --git a/packages/common/component/ConfigRender.vue b/packages/common/component/ConfigRender.vue index f7bd2b623d..03d855c46a 100644 --- a/packages/common/component/ConfigRender.vue +++ b/packages/common/component/ConfigRender.vue @@ -66,7 +66,7 @@ export default { const obj = {} data?.forEach(({ content }) => { - content.length && + if (content.length) { content.forEach((item) => { const node = item.schema?.length ? getPropsObj(item.schema) : {} @@ -75,6 +75,7 @@ export default { } obj[item.property] = node }) + } }) return obj diff --git a/packages/common/component/MetaChildItem.vue b/packages/common/component/MetaChildItem.vue index 78720d0255..2e28cbe7a7 100644 --- a/packages/common/component/MetaChildItem.vue +++ b/packages/common/component/MetaChildItem.vue @@ -67,7 +67,7 @@ export default { if (props.type === 'array' && props.arrayIndex > -1) { modelValue = modelValue[props.arrayIndex] } - let model_value_property = modelValue[item.property] + const model_value_property = modelValue[item.property] item.widget.props.modelValue = typeof model_value_property === 'boolean' ? model_value_property : model_value_property || null }) diff --git a/packages/common/component/MetaCodeEditor.vue b/packages/common/component/MetaCodeEditor.vue index 39abbc2fe5..4c7b244a1d 100644 --- a/packages/common/component/MetaCodeEditor.vue +++ b/packages/common/component/MetaCodeEditor.vue @@ -221,7 +221,6 @@ export default { if (dataType) { value = value === '' ? '' : { type: dataType, value } } else if (language === 'json') { - // eslint-disable-next-line no-new-func value = new Func(`return ${content}`)() } else { value = typeof props.modelValue === 'string' ? content : JSON.parse(content) diff --git a/packages/common/component/MetaListItem.vue b/packages/common/component/MetaListItem.vue index 8d607fe4ba..d6ea37502e 100644 --- a/packages/common/component/MetaListItem.vue +++ b/packages/common/component/MetaListItem.vue @@ -130,7 +130,7 @@ export default { const isShow = ref(false) const isVisible = ref(false) const showMask = ref(false) - let top = ref(0) + const top = ref(0) const deleteItem = () => { isShow.value = true diff --git a/packages/common/component/MetaListItems.vue b/packages/common/component/MetaListItems.vue index b770266dc3..08c217eff1 100644 --- a/packages/common/component/MetaListItems.vue +++ b/packages/common/component/MetaListItems.vue @@ -153,14 +153,14 @@ export default { let text = '' - let name = computed(() => { + const name = computed(() => { if (item.type) { text = typeDesc[item.type] } if (item[props.textField]) { if (item[props.textField].i18nKey) { - let i18nKey = item[props.textField].i18nKey + const i18nKey = item[props.textField].i18nKey text = appSchemaState.langs[i18nKey][appSchemaState.currentLang] } else { text = item[props.textField] diff --git a/packages/common/component/Notify.jsx b/packages/common/component/Notify.jsx index c9a27b3170..4ec4661e09 100644 --- a/packages/common/component/Notify.jsx +++ b/packages/common/component/Notify.jsx @@ -10,7 +10,6 @@ const durationMap = { const useNotify = (config) => { const { customClass, title, type = 'info', position = 'top-right', ...otherConfig } = config - Notify({ duration: durationMap[type], ...otherConfig, @@ -18,7 +17,7 @@ const useNotify = (config) => { title, type, customClass: `${customClass}`, - verticalOffset: 46, + verticalOffset: 46 }) } diff --git a/packages/common/component/SplitPanes.vue b/packages/common/component/SplitPanes.vue index 09e368cd49..48c3b8cd51 100644 --- a/packages/common/component/SplitPanes.vue +++ b/packages/common/component/SplitPanes.vue @@ -84,10 +84,11 @@ export default { methods: { updateLowCodePaneComponents() { this.panes.forEach((item) => { - item.update && + if (item.update) { item.update({ [this.horizontal ? 'height' : 'width']: `${this.indexedPanes[item.id].size}%` }) + } }) }, bindEvents() { @@ -450,8 +451,8 @@ export default { equalize() { const equalSpace = 100 / this.panesCount let leftLowCodeToAllocate = 0 - let ungrowableLowCode = [] - let unshrinkableLowCode = [] + const ungrowableLowCode = [] + const unshrinkableLowCode = [] this.panes.forEach((pane) => { pane.size = Math.max(Math.min(equalSpace, pane.max), pane.min) @@ -466,8 +467,8 @@ export default { initialPanesSizing() { let leftLowCodeToAllocate = 100 - let ungrowableLowCode = [] - let unshrinkableLowCode = [] + const ungrowableLowCode = [] + const unshrinkableLowCode = [] let definedSizes = 0 this.panes.forEach((pane) => { leftLowCodeToAllocate -= pane.size @@ -493,8 +494,8 @@ export default { equalizeAfterAddOrRemove({ addedPane } = {}) { let equalSpace = 100 / this.panesCount let leftLowCodeToAllocate = 0 - let ungrowableLowCode = [] - let unshrinkableLowCode = [] + const ungrowableLowCode = [] + const unshrinkableLowCode = [] if (addedPane && addedPane.givenSize !== null) { equalSpace = (100 - addedPane.givenSize) / (this.panesCount - 1) diff --git a/packages/common/component/VueMonaco.vue b/packages/common/component/VueMonaco.vue index 901028be5f..b42e4b6452 100644 --- a/packages/common/component/VueMonaco.vue +++ b/packages/common/component/VueMonaco.vue @@ -144,7 +144,9 @@ export default { }) onBeforeUnmount(() => { - vueMonaco.editor && vueMonaco.editor.dispose() + if (vueMonaco.editor) { + vueMonaco.editor.dispose() + } }) watch( diff --git a/packages/configurator/src/html-attributes-configurator/HtmlAttributesConfigurator.vue b/packages/configurator/src/html-attributes-configurator/HtmlAttributesConfigurator.vue index 57c173dd43..07fd09f8d3 100644 --- a/packages/configurator/src/html-attributes-configurator/HtmlAttributesConfigurator.vue +++ b/packages/configurator/src/html-attributes-configurator/HtmlAttributesConfigurator.vue @@ -145,7 +145,7 @@ export default { const save = () => { state.visible = false - let data = {} + const data = {} let index = -1 if (state.currentAttr.id) { diff --git a/packages/configurator/src/slot-configurator/SlotConfigurator.vue b/packages/configurator/src/slot-configurator/SlotConfigurator.vue index 367f8c235f..f6c73a105a 100644 --- a/packages/configurator/src/slot-configurator/SlotConfigurator.vue +++ b/packages/configurator/src/slot-configurator/SlotConfigurator.vue @@ -44,14 +44,15 @@ export default { watchEffect(() => { const slots = {} - let children = useProperties().getSchema()?.children - Array.isArray(children) && + const children = useProperties().getSchema()?.children + if (Array.isArray(children)) { children.forEach((child) => { if (child.componentName === 'Template' && child.props?.slot) { const slotName = child.props.slot?.name || child.props.slot slots[slotName] = child.props.slot } }) + } slotList.value = Object.keys(props.slots).map((name) => { const { label, description, params } = props.slots[name] || {} return { diff --git a/packages/design-core/src/init.js b/packages/design-core/src/init.js index 6dbdf703e4..427e0a93e4 100644 --- a/packages/design-core/src/init.js +++ b/packages/design-core/src/init.js @@ -59,7 +59,7 @@ const defaultLifeCycles = { // import(`./theme/${newRegistry.config.theme}.js`) const theme = localStorage.getItem(`tiny-engine-theme-${appId}`) || newRegistry.config.theme || 'light' - // eslint-disable-next-line no-new + new TinyThemeTool(defaultThemeList[theme], defaultThemeList[theme]?.id) document.documentElement?.setAttribute?.('data-theme', theme) diff --git a/packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js b/packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js index 17b018be99..742f27e0c4 100644 --- a/packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js +++ b/packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js @@ -14,7 +14,7 @@ import dataSources from './dataSource.js' const dataSourceMap = {} -Array.isArray(dataSources.list) && +if (Array.isArray(dataSources.list)) { dataSources.list.forEach((config) => { const dataSource = { config: config.data } @@ -31,5 +31,6 @@ Array.isArray(dataSources.list) && dataSource.load = () => Promise.resolve(result) }) +} export default dataSourceMap diff --git a/packages/i18n/src/I18nHost.vue b/packages/i18n/src/I18nHost.vue index 7d1544e31e..7b55060c47 100644 --- a/packages/i18n/src/I18nHost.vue +++ b/packages/i18n/src/I18nHost.vue @@ -23,7 +23,6 @@ export default { // 通过 provide ,可以让 tiny-i18n-host 树结构下的 webcomponent 通过 inject(I18nInjectionKey),获取 i18n 对象 provide(I18nInjectionKey, i18n) - // eslint-disable-next-line vue/no-setup-props-destructure i18n.global.locale.value = props.locale watch( diff --git a/packages/plugins/block/src/BlockSetting.vue b/packages/plugins/block/src/BlockSetting.vue index a20f6b947c..95c3652ebc 100644 --- a/packages/plugins/block/src/BlockSetting.vue +++ b/packages/plugins/block/src/BlockSetting.vue @@ -242,7 +242,7 @@ export default { const previewHistory = (item) => { const theme = getMetaApi(META_SERVICE.ThemeSwitch)?.getThemeState()?.theme - item && + if (item) { previewBlock({ id: item.blockId, history: item.id, @@ -254,6 +254,7 @@ export default { schema: item.content } }) + } } const onMouseLeave = () => { diff --git a/packages/plugins/block/src/SaveNewBlock.vue b/packages/plugins/block/src/SaveNewBlock.vue index cd0548c1f9..ce051e77ec 100644 --- a/packages/plugins/block/src/SaveNewBlock.vue +++ b/packages/plugins/block/src/SaveNewBlock.vue @@ -88,7 +88,11 @@ export default { } const handleAddBlock = () => { - props.fromCanvas ? createBlock(formData) : createEmptyBlock(formData) + if (props.fromCanvas) { + createBlock(formData) + } else { + createEmptyBlock(formData) + } activePlugin(PLUGIN_NAME.Materials) // ?? 疑问:新建区块后,这里为啥要激活物料 cancel() } diff --git a/packages/plugins/bridge/src/Main.vue b/packages/plugins/bridge/src/Main.vue index 638db35849..0d4588ffca 100644 --- a/packages/plugins/bridge/src/Main.vue +++ b/packages/plugins/bridge/src/Main.vue @@ -35,11 +35,11 @@ export default { } const refreshList = (type) => { - type == utilsRef.value.refresh(type) + utilsRef.value.refresh(type) } const addResource = (type) => { - activedName.value == utilsRef.value.add(type) + utilsRef.value.add(type) } return { diff --git a/packages/plugins/bridge/src/js/resource.js b/packages/plugins/bridge/src/js/resource.js index e99d670f25..f967aaa053 100644 --- a/packages/plugins/bridge/src/js/resource.js +++ b/packages/plugins/bridge/src/js/resource.js @@ -120,10 +120,11 @@ const getAppId = () => getMetaApi(META_SERVICE.GlobalService).getBaseInfo().id export const getResources = () => { const id = getAppId() - state.resources.length || + if (!state.resources.length) { fetchResourceList(id).then((data) => { state.resources = data || TempBridge }) + } } export const getResourceNamesByType = (type) => state.resourceNames[type] diff --git a/packages/plugins/datasource/src/DataSourceFieldType.vue b/packages/plugins/datasource/src/DataSourceFieldType.vue index c4f408cc88..a065bd462f 100644 --- a/packages/plugins/datasource/src/DataSourceFieldType.vue +++ b/packages/plugins/datasource/src/DataSourceFieldType.vue @@ -25,7 +25,7 @@ import { reactive, ref } from 'vue' import { iconArrowDown } from '@opentiny/vue-icon' import fieldTypes from './config' -let isOpen = ref(false) +const isOpen = ref(false) export const open = () => { isOpen.value = true diff --git a/packages/plugins/datasource/src/DataSourceForm.vue b/packages/plugins/datasource/src/DataSourceForm.vue index 12b2bc5015..d36c358883 100644 --- a/packages/plugins/datasource/src/DataSourceForm.vue +++ b/packages/plugins/datasource/src/DataSourceForm.vue @@ -44,7 +44,7 @@ import { import { useModal, useDataSource, useNotify, getMetaApi, META_SERVICE } from '@opentiny/tiny-engine-meta-register' import { extend } from '@opentiny/vue-renderless/common/object' -let isOpen = ref(false) +const isOpen = ref(false) export const open = () => { isOpen.value = true diff --git a/packages/plugins/datasource/src/DataSourceGlobalDataHandler.vue b/packages/plugins/datasource/src/DataSourceGlobalDataHandler.vue index c2b0a8f17f..1cfc9d7a83 100644 --- a/packages/plugins/datasource/src/DataSourceGlobalDataHandler.vue +++ b/packages/plugins/datasource/src/DataSourceGlobalDataHandler.vue @@ -80,7 +80,9 @@ export default { () => isOpen.value, (value) => { nextTick(() => { - value && window.dispatchEvent(new Event('resize')) + if (value) { + window.dispatchEvent(new Event('resize')) + } }) } ) diff --git a/packages/plugins/datasource/src/DataSourceRecordForm.vue b/packages/plugins/datasource/src/DataSourceRecordForm.vue index fc8c0f15b1..0541b4f0df 100644 --- a/packages/plugins/datasource/src/DataSourceRecordForm.vue +++ b/packages/plugins/datasource/src/DataSourceRecordForm.vue @@ -68,8 +68,8 @@ const CONSTANTS = { MAX_LENGTH_TIP: '长度不大于' } -let isOpen = ref(false) -let recordFormData = reactive({}) +const isOpen = ref(false) +const recordFormData = reactive({}) export const open = () => { isOpen.value = true @@ -158,10 +158,12 @@ export default { const format = item.format const fieldRules = [] - !isEmptyObject(format) && + if (!isEmptyObject(format)) { Object.keys(format).forEach((key) => { if (key === CONSTANTS.REQUIRED) { - format[key] && (state.recordMapping[item.name] = format[key]) + if (format[key]) { + state.recordMapping[item.name] = format[key] + } fieldRules.push({ [key]: format[key], @@ -187,6 +189,7 @@ export default { } } }) + } state.rules[item.name] = fieldRules }) diff --git a/packages/plugins/datasource/src/DataSourceRecordList.vue b/packages/plugins/datasource/src/DataSourceRecordList.vue index 62bc7c3023..11ede61f27 100644 --- a/packages/plugins/datasource/src/DataSourceRecordList.vue +++ b/packages/plugins/datasource/src/DataSourceRecordList.vue @@ -90,7 +90,7 @@ import { fetchDataSourceDetail, requestUpdateDataSource } from './js/http' import { downloadFn, handleImportedData, overrideOrMergeData, getDataAfterPage } from './js/datasource' import DataSourceRecordUpload from './DataSourceRecordUpload.vue' -let isOpen = ref(false) +const isOpen = ref(false) export const open = () => { isOpen.value = true @@ -482,8 +482,8 @@ export default { const syncDataToTotalData = () => { const { insertRecords, updateRecords } = grid.value.getRecordset() - let updatedData = [...insertRecords, ...updateRecords] - let updatedIds = updatedData.filter(({ _id }) => _id) + const updatedData = [...insertRecords, ...updateRecords] + const updatedIds = updatedData.filter(({ _id }) => _id) state.totalData = state.totalData.map((item) => { if (!updatedIds.includes(item._id)) { diff --git a/packages/plugins/datasource/src/DataSourceRemotePanel.vue b/packages/plugins/datasource/src/DataSourceRemotePanel.vue index 15073545a6..da43728331 100644 --- a/packages/plugins/datasource/src/DataSourceRemotePanel.vue +++ b/packages/plugins/datasource/src/DataSourceRemotePanel.vue @@ -136,7 +136,9 @@ export default { state.responseData.dataHandler = dataHandler?.value || '' state.responseData.shouldFetch = shouldFetch?.value || '' state.responseData.errorHandler = errorHandler?.value || '' - columns?.length === 0 && (state.remoteData.result = {}) + if (columns?.length === 0) { + state.remoteData.result = {} + } }, { immediate: true } ) diff --git a/packages/plugins/help/index.js b/packages/plugins/help/index.ts similarity index 95% rename from packages/plugins/help/index.js rename to packages/plugins/help/index.ts index 430c0bc358..1da0d7bb09 100644 --- a/packages/plugins/help/index.js +++ b/packages/plugins/help/index.ts @@ -10,7 +10,7 @@ * */ -import metaData from './meta.js' +import metaData from './meta' import { HelpService } from './src/composable' import './src/styles/vars.less' diff --git a/packages/plugins/help/meta.js b/packages/plugins/help/meta.ts similarity index 100% rename from packages/plugins/help/meta.js rename to packages/plugins/help/meta.ts diff --git a/packages/plugins/help/mock/test.js b/packages/plugins/help/mock/test.ts similarity index 100% rename from packages/plugins/help/mock/test.js rename to packages/plugins/help/mock/test.ts diff --git a/packages/plugins/help/src/HelpIcon.vue b/packages/plugins/help/src/HelpIcon.vue index 4140ce92f7..7edc9026be 100644 --- a/packages/plugins/help/src/HelpIcon.vue +++ b/packages/plugins/help/src/HelpIcon.vue @@ -51,7 +51,7 @@ -