From 62c535bf2a1e6b37f55129e4badacd877f1358f3 Mon Sep 17 00:00:00 2001 From: 1ncounter <1ncounter.100@gmail.com> Date: Sat, 23 Mar 2024 14:05:25 +0800 Subject: [PATCH] fix(packages): delete types and utils buildscripts --- .editorconfig | 13 --- TODOS.md | 11 ++ babel.config.js | 6 - lerna.json | 37 ------ package.json | 18 +-- packages/engine/build.plugin.js | 17 ++- packages/types/.eslintignore | 3 - packages/types/.prettierrc.js | 6 - packages/types/build.json | 5 - packages/types/package.json | 19 ++-- packages/types/src/deprecated/index.ts | 18 --- .../src/deprecated/isActionContentObject.ts | 8 -- packages/types/src/deprecated/isCustomView.ts | 10 -- packages/types/src/deprecated/isDOMText.ts | 8 -- .../types/src/deprecated/isDynamicSetter.ts | 9 -- packages/types/src/deprecated/isI18nData.ts | 7 -- packages/types/src/deprecated/isJSBlock.ts | 8 -- .../types/src/deprecated/isJSExpression.ts | 8 -- packages/types/src/deprecated/isJSFunction.ts | 8 -- packages/types/src/deprecated/isJSSlot.ts | 8 -- .../src/deprecated/isLowCodeComponentType.ts | 9 -- packages/types/src/deprecated/isNodeSchema.ts | 8 -- .../types/src/deprecated/isPlainObject.ts | 10 -- .../src/deprecated/isProCodeComponentType.ts | 8 -- .../types/src/deprecated/isProjectSchema.ts | 6 - packages/types/src/deprecated/isReactClass.ts | 8 -- .../types/src/deprecated/isReactComponent.ts | 9 -- .../types/src/deprecated/isSetterConfig.ts | 9 -- .../types/src/deprecated/isTitleConfig.ts | 10 -- packages/types/src/event/index.ts | 3 +- packages/types/src/event/prop.ts | 8 +- packages/types/src/index.ts | 2 - packages/types/src/shell/api/commonUI.ts | 42 ++++++- .../types/src/shell/type/title-content.ts | 11 +- .../src/shell/type/widget-base-config.ts | 19 +++- packages/types/tsconfig.json | 6 +- packages/utils/build.json | 5 - packages/utils/build.test.json | 6 - packages/utils/jest.config.js | 21 ---- packages/utils/jest.setup.js | 1 - packages/utils/package.json | 34 +++--- packages/utils/src/asset.ts | 76 ++++++++++--- packages/utils/src/build-components.ts | 37 ++++-- packages/utils/src/check-prop-types.ts | 17 ++- packages/utils/src/context-menu.tsx | 106 ++++++++++-------- packages/utils/src/create-icon.tsx | 8 +- packages/utils/src/css-helper.ts | 84 +++++++------- packages/utils/src/is-plain-object.ts | 2 +- packages/utils/src/is-react.ts | 6 +- packages/utils/src/misc.ts | 26 ++--- packages/utils/src/schema.ts | 12 +- packages/utils/tsconfig.json | 9 +- playground/tsconfig.json | 8 ++ pnpm-workspace.yaml | 2 + runtime/renderer-core/package.json | 5 +- runtime/renderer-react/package.json | 8 +- runtime/router/package.json | 6 +- scripts/setup-for-test.sh | 13 --- scripts/setup.js | 26 ----- scripts/start.js | 10 -- scripts/watchdog.js | 24 ---- tsconfig.json | 6 +- 62 files changed, 372 insertions(+), 581 deletions(-) delete mode 100644 .editorconfig create mode 100644 TODOS.md delete mode 100644 babel.config.js delete mode 100644 lerna.json delete mode 100644 packages/types/.eslintignore delete mode 100644 packages/types/.prettierrc.js delete mode 100644 packages/types/build.json delete mode 100644 packages/types/src/deprecated/index.ts delete mode 100644 packages/types/src/deprecated/isActionContentObject.ts delete mode 100644 packages/types/src/deprecated/isCustomView.ts delete mode 100644 packages/types/src/deprecated/isDOMText.ts delete mode 100644 packages/types/src/deprecated/isDynamicSetter.ts delete mode 100644 packages/types/src/deprecated/isI18nData.ts delete mode 100644 packages/types/src/deprecated/isJSBlock.ts delete mode 100644 packages/types/src/deprecated/isJSExpression.ts delete mode 100644 packages/types/src/deprecated/isJSFunction.ts delete mode 100644 packages/types/src/deprecated/isJSSlot.ts delete mode 100644 packages/types/src/deprecated/isLowCodeComponentType.ts delete mode 100644 packages/types/src/deprecated/isNodeSchema.ts delete mode 100644 packages/types/src/deprecated/isPlainObject.ts delete mode 100644 packages/types/src/deprecated/isProCodeComponentType.ts delete mode 100644 packages/types/src/deprecated/isProjectSchema.ts delete mode 100644 packages/types/src/deprecated/isReactClass.ts delete mode 100644 packages/types/src/deprecated/isReactComponent.ts delete mode 100644 packages/types/src/deprecated/isSetterConfig.ts delete mode 100644 packages/types/src/deprecated/isTitleConfig.ts delete mode 100644 packages/utils/build.json delete mode 100644 packages/utils/build.test.json delete mode 100644 packages/utils/jest.config.js delete mode 100644 packages/utils/jest.setup.js create mode 100644 playground/tsconfig.json delete mode 100755 scripts/setup-for-test.sh delete mode 100644 scripts/setup.js delete mode 100644 scripts/start.js delete mode 100755 scripts/watchdog.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 319299684..000000000 --- a/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -quote_type = single - -[*.md] -trim_trailing_whitespace = false diff --git a/TODOS.md b/TODOS.md new file mode 100644 index 000000000..9b549c3b2 --- /dev/null +++ b/TODOS.md @@ -0,0 +1,11 @@ +## project + +### docs for contributing: + +1. init +2. develop +3. debug +4. build +5. test +6. publish +7. github workflows diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index a089167a7..000000000 --- a/babel.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: [ - ['@babel/plugin-proposal-decorators', { legacy: true }], - [require.resolve('@babel/plugin-proposal-class-properties'), { loose: true }], - ], -}; \ No newline at end of file diff --git a/lerna.json b/lerna.json deleted file mode 100644 index d70acb63f..000000000 --- a/lerna.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "lerna": "4.0.0", - "version": "1.3.2", - "npmClient": "yarn", - "useWorkspaces": true, - "packages": [ - "packages/*", - "runtime/*" - ], - "command": { - "bootstrap": { - "npmClientArgs": [ - "--no-package-lock" - ] - }, - "version": { - "allowBranch": [ - "master", - "main", - "release/*", - "daily/*", - "refactor/*" - ] - }, - "publish": { - "npmClient": "npm", - "verifyRegistry": false, - "verifyAccess": false, - "ignoreChanges": [ - "**/*.md", - "**/test/**" - ], - "message": "chore(release): publish %v", - "conventionalCommits": true - } - } -} diff --git a/package.json b/package.json index 2a73cc746..484b066ea 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,7 @@ { "private": true, - "workspaces": { - "packages": [ - "packages/*", - "runtime/*", - "examples/*" - ], - "nohoist": [ - "**/css-modules-typescript-loader", - "**/@alifc/theme-lowcode-*", - "**/jest" - ] - }, "scripts": { - "dev": "pnpm --filter playground dev", + "playground": "pnpm --filter playground dev", "build": "./scripts/build.sh", "build:npm": "lerna run build --stream", "build:umd": "lerna run build:umd --stream", @@ -30,13 +18,9 @@ "pub:preminor": "npm run watchdog:build && lerna publish preminor --force-publish --exact --dist-tag beta --preid beta --no-changelog", "pub:prepatch": "npm run watchdog:build && lerna publish prepatch --force-publish --exact --dist-tag beta --preid beta --no-changelog", "pub:prerelease": "npm run watchdog:build && lerna publish prerelease --yes --force-publish --exact --dist-tag beta --preid beta --no-changelog", - "setup": "node ./scripts/setup.js", - "setup:test": "./scripts/setup-for-test.sh", "setup:skip-build": "./scripts/setup-skip-build.sh", - "start": "node ./scripts/start.js", "test": "lerna run test --stream", "test:snapshot": "lerna run test:snapshot", - "watchdog:build": "node ./scripts/watchdog.js", "sync": "./scripts/sync.sh", "syncOss": "node ./scripts/sync-oss.js" }, diff --git a/packages/engine/build.plugin.js b/packages/engine/build.plugin.js index 5c4ab7bfb..731d4a406 100644 --- a/packages/engine/build.plugin.js +++ b/packages/engine/build.plugin.js @@ -1,6 +1,5 @@ const { execSync } = require('child_process'); const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); -const fse = require('fs-extra'); // get version from git branch name, // e.g. release/1.0.7 => 1.0.7 @@ -25,16 +24,16 @@ const releaseVersion = getVersion(); module.exports = ({ context, onGetWebpackConfig }) => { onGetWebpackConfig((config) => { - config.resolve - .plugin('tsconfigpaths') - .use(TsconfigPathsPlugin, [{ + config.resolve.plugin('tsconfigpaths').use(TsconfigPathsPlugin, [ + { configFile: './tsconfig.json', - }]); - config - .plugin('define') - .use(context.webpack.DefinePlugin, [{ + }, + ]); + config.plugin('define').use(context.webpack.DefinePlugin, [ + { VERSION_PLACEHOLDER: JSON.stringify(releaseVersion), - }]); + }, + ]); config.plugins.delete('hot'); config.devServer.hot(false); }); diff --git a/packages/types/.eslintignore b/packages/types/.eslintignore deleted file mode 100644 index a218a6cce..000000000 --- a/packages/types/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -lib -es -node_modules \ No newline at end of file diff --git a/packages/types/.prettierrc.js b/packages/types/.prettierrc.js deleted file mode 100644 index 092b67059..000000000 --- a/packages/types/.prettierrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - printWidth: 80, - singleQuote: true, - trailingComma: 'all', - tabSize: 2, -}; diff --git a/packages/types/build.json b/packages/types/build.json deleted file mode 100644 index 3e9260055..000000000 --- a/packages/types/build.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "plugins": [ - "@alilc/build-plugin-lce" - ] -} diff --git a/packages/types/package.json b/packages/types/package.json index 7b3a7dbad..b859cf77d 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,25 +1,28 @@ { "name": "@alilc/lowcode-types", - "version": "1.3.3", + "version": "2.0.0-beta.0", "description": "Types for Ali lowCode engine", "files": [ "es", "lib" ], - "main": "lib/index.js", - "module": "es/index.js", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { - "build": "build-scripts build" + "build": "tsc" }, "dependencies": { "@alilc/lowcode-datasource-types": "^1.0.0", - "react": "^16.9", + "@alifd/next": "^1.27.8", + "react": "^18.2.0", "strict-event-emitter-types": "^2.0.0" }, "devDependencies": { - "@alib/build-scripts": "^0.1.18", - "@types/node": "^13.7.1", - "@types/react": "^16" + "@types/react": "^18" + }, + "peerDependencies": { + "react": "^18.2.0" }, "publishConfig": { "access": "public", diff --git a/packages/types/src/deprecated/index.ts b/packages/types/src/deprecated/index.ts deleted file mode 100644 index 7e65173c0..000000000 --- a/packages/types/src/deprecated/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -export * from './isActionContentObject'; -export * from './isCustomView'; -export * from './isDOMText'; -export * from './isDynamicSetter'; -export * from './isI18nData'; -export * from './isJSBlock'; -export * from './isJSExpression'; -export * from './isJSFunction'; -export * from './isJSSlot'; -export * from './isLowCodeComponentType'; -export * from './isNodeSchema'; -export * from './isPlainObject'; -export * from './isProCodeComponentType'; -export * from './isProjectSchema'; -export * from './isReactClass'; -export * from './isReactComponent'; -export * from './isSetterConfig'; -export * from './isTitleConfig'; \ No newline at end of file diff --git a/packages/types/src/deprecated/isActionContentObject.ts b/packages/types/src/deprecated/isActionContentObject.ts deleted file mode 100644 index 88a8e57d2..000000000 --- a/packages/types/src/deprecated/isActionContentObject.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IPublicTypeActionContentObject } from '../shell'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isActionContentObject(obj: any): obj is IPublicTypeActionContentObject { - return obj && typeof obj === 'object'; -} diff --git a/packages/types/src/deprecated/isCustomView.ts b/packages/types/src/deprecated/isCustomView.ts deleted file mode 100644 index 159490e55..000000000 --- a/packages/types/src/deprecated/isCustomView.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { isValidElement } from 'react'; -import { isReactComponent } from './isReactComponent'; -import { IPublicTypeCustomView } from '../shell/type/custom-view'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isCustomView(obj: any): obj is IPublicTypeCustomView { - return obj && (isValidElement(obj) || isReactComponent(obj)); -} diff --git a/packages/types/src/deprecated/isDOMText.ts b/packages/types/src/deprecated/isDOMText.ts deleted file mode 100644 index 4ddc91320..000000000 --- a/packages/types/src/deprecated/isDOMText.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IPublicTypeDOMText } from '../shell/type/dom-text'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isDOMText(data: any): data is IPublicTypeDOMText { - return typeof data === 'string'; -} diff --git a/packages/types/src/deprecated/isDynamicSetter.ts b/packages/types/src/deprecated/isDynamicSetter.ts deleted file mode 100644 index 55532d258..000000000 --- a/packages/types/src/deprecated/isDynamicSetter.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { isReactClass } from './isReactClass'; -import { IPublicTypeDynamicSetter } from '../shell/type/dynamic-setter'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isDynamicSetter(obj: any): obj is IPublicTypeDynamicSetter { - return obj && typeof obj === 'function' && !isReactClass(obj); -} diff --git a/packages/types/src/deprecated/isI18nData.ts b/packages/types/src/deprecated/isI18nData.ts deleted file mode 100644 index 4767ccd37..000000000 --- a/packages/types/src/deprecated/isI18nData.ts +++ /dev/null @@ -1,7 +0,0 @@ - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isI18nData(obj: any): boolean { - return obj && obj.type === 'i18n'; -} diff --git a/packages/types/src/deprecated/isJSBlock.ts b/packages/types/src/deprecated/isJSBlock.ts deleted file mode 100644 index 6f92e2fcf..000000000 --- a/packages/types/src/deprecated/isJSBlock.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IPublicTypeJSBlock } from '../shell/type/value-type'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isJSBlock(data: any): data is IPublicTypeJSBlock { - return data && data.type === 'JSBlock'; -} diff --git a/packages/types/src/deprecated/isJSExpression.ts b/packages/types/src/deprecated/isJSExpression.ts deleted file mode 100644 index f722d5529..000000000 --- a/packages/types/src/deprecated/isJSExpression.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IPublicTypeJSExpression } from '../shell/type/value-type'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isJSExpression(data: any): data is IPublicTypeJSExpression { - return data && data.type === 'JSExpression' && data.extType !== 'function'; -} diff --git a/packages/types/src/deprecated/isJSFunction.ts b/packages/types/src/deprecated/isJSFunction.ts deleted file mode 100644 index 40ab4f52d..000000000 --- a/packages/types/src/deprecated/isJSFunction.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IPublicTypeJSFunction } from '../shell/type/value-type'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isJSFunction(x: any): x is IPublicTypeJSFunction { - return typeof x === 'object' && x && x.type === 'JSFunction'; -} diff --git a/packages/types/src/deprecated/isJSSlot.ts b/packages/types/src/deprecated/isJSSlot.ts deleted file mode 100644 index 7cba65195..000000000 --- a/packages/types/src/deprecated/isJSSlot.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IPublicTypeJSSlot } from '../shell/type/value-type'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isJSSlot(data: any): data is IPublicTypeJSSlot { - return data && data.type === 'JSSlot'; -} diff --git a/packages/types/src/deprecated/isLowCodeComponentType.ts b/packages/types/src/deprecated/isLowCodeComponentType.ts deleted file mode 100644 index c14c85f1e..000000000 --- a/packages/types/src/deprecated/isLowCodeComponentType.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { isProCodeComponentType } from './isProCodeComponentType'; -import { IPublicTypeComponentMap, IPublicTypeLowCodeComponent } from '../shell/type/npm'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isLowCodeComponentType(desc: IPublicTypeComponentMap): desc is IPublicTypeLowCodeComponent { - return !isProCodeComponentType(desc); -} diff --git a/packages/types/src/deprecated/isNodeSchema.ts b/packages/types/src/deprecated/isNodeSchema.ts deleted file mode 100644 index cab4dc46e..000000000 --- a/packages/types/src/deprecated/isNodeSchema.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IPublicTypeNodeSchema } from '../shell'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isNodeSchema(data: any): data is IPublicTypeNodeSchema { - return data && data.componentName; -} diff --git a/packages/types/src/deprecated/isPlainObject.ts b/packages/types/src/deprecated/isPlainObject.ts deleted file mode 100644 index 549f49736..000000000 --- a/packages/types/src/deprecated/isPlainObject.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isPlainObject(value: any): value is Record { - if (typeof value !== 'object') { - return false; - } - const proto = Object.getPrototypeOf(value); - return proto === Object.prototype || proto === null || Object.getPrototypeOf(proto) === null; -} diff --git a/packages/types/src/deprecated/isProCodeComponentType.ts b/packages/types/src/deprecated/isProCodeComponentType.ts deleted file mode 100644 index 40e8e977f..000000000 --- a/packages/types/src/deprecated/isProCodeComponentType.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IPublicTypeComponentMap, IPublicTypeProCodeComponent } from '../shell/type/npm'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isProCodeComponentType(desc: IPublicTypeComponentMap): desc is IPublicTypeProCodeComponent { - return 'package' in desc; -} diff --git a/packages/types/src/deprecated/isProjectSchema.ts b/packages/types/src/deprecated/isProjectSchema.ts deleted file mode 100644 index 1622fa846..000000000 --- a/packages/types/src/deprecated/isProjectSchema.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isProjectSchema(data: any): boolean { - return data && data.componentsTree; -} diff --git a/packages/types/src/deprecated/isReactClass.ts b/packages/types/src/deprecated/isReactClass.ts deleted file mode 100644 index 846c522d7..000000000 --- a/packages/types/src/deprecated/isReactClass.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ComponentClass, Component } from 'react'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isReactClass(obj: any): obj is ComponentClass { - return obj && obj.prototype && (obj.prototype.isReactComponent || obj.prototype instanceof Component); -} diff --git a/packages/types/src/deprecated/isReactComponent.ts b/packages/types/src/deprecated/isReactComponent.ts deleted file mode 100644 index 1ed04427f..000000000 --- a/packages/types/src/deprecated/isReactComponent.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ComponentType } from 'react'; -import { isReactClass } from './isReactClass'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isReactComponent(obj: any): obj is ComponentType { - return obj && (isReactClass(obj) || typeof obj === 'function'); -} diff --git a/packages/types/src/deprecated/isSetterConfig.ts b/packages/types/src/deprecated/isSetterConfig.ts deleted file mode 100644 index bf0d77e11..000000000 --- a/packages/types/src/deprecated/isSetterConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IPublicTypeSetterConfig } from '../shell/type/setter-config'; -import { isCustomView } from './isCustomView'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isSetterConfig(obj: any): obj is IPublicTypeSetterConfig { - return obj && typeof obj === 'object' && 'componentName' in obj && !isCustomView(obj); -} diff --git a/packages/types/src/deprecated/isTitleConfig.ts b/packages/types/src/deprecated/isTitleConfig.ts deleted file mode 100644 index 9ee38c9c2..000000000 --- a/packages/types/src/deprecated/isTitleConfig.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { isI18nData } from './isI18nData'; -import { isPlainObject } from './isPlainObject'; -import { IPublicTypeTitleConfig } from '../shell/type/title-config'; - -/** - * @deprecated use same function from '@alilc/lowcode-utils' instead - */ -export function isTitleConfig(obj: any): obj is IPublicTypeTitleConfig { - return isPlainObject(obj) && !isI18nData(obj); -} diff --git a/packages/types/src/event/index.ts b/packages/types/src/event/index.ts index 6cba1be3e..3f2e1c944 100644 --- a/packages/types/src/event/index.ts +++ b/packages/types/src/event/index.ts @@ -1,10 +1,9 @@ import * as Node from './node'; export interface EventConfig { - [Node.Prop.Change]: (options: Node.Prop.ChangeOptions) => any; [Node.Prop.InnerChange]: (options: Node.Prop.ChangeOptions) => any; [Node.Rerender]: (options: Node.RerenderOptions) => void; [eventName: string]: any; } -export * as Node from './node'; \ No newline at end of file +export * as Node from './node'; diff --git a/packages/types/src/event/prop.ts b/packages/types/src/event/prop.ts index bba55ca80..486ae3aef 100644 --- a/packages/types/src/event/prop.ts +++ b/packages/types/src/event/prop.ts @@ -6,11 +6,5 @@ export interface ChangeOptions { oldValue: any; } -/** - * Node Prop 变化事件 - * @Deprecated Please Replace With InnerPropChange - */ -export const Change = 'node.prop.change'; - /** Node Prop 变化事件 */ -export const InnerChange = 'node.innerProp.change'; \ No newline at end of file +export const InnerChange = 'node.innerProp.change'; diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index d14dc9b99..8b34c3d47 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -7,5 +7,3 @@ export * from './assets'; export * as GlobalEvent from './event'; export * from './shell'; export * from './shell-model-factory'; -// TODO: remove this in future versions -export * from './deprecated'; diff --git a/packages/types/src/shell/api/commonUI.ts b/packages/types/src/shell/api/commonUI.ts index 5ac025fcd..bed9030a9 100644 --- a/packages/types/src/shell/api/commonUI.ts +++ b/packages/types/src/shell/api/commonUI.ts @@ -1,7 +1,41 @@ -import React, { ReactElement } from 'react'; -import { IPublicTypeContextMenuAction, IPublicTypeHelpTipConfig, IPublicTypeTipConfig, IPublicTypeTitleContent } from '../type'; -import { Balloon, Breadcrumb, Button, Card, Checkbox, DatePicker, Dialog, Dropdown, Form, Icon, Input, Loading, Message, Overlay, Pagination, Radio, Search, Select, SplitButton, Step, Switch, Tab, Table, Tree, TreeSelect, Upload, Divider } from '@alifd/next'; -import { IconProps } from '@alifd/next/types/icon'; +import React, { ReactElement, ComponentProps } from 'react'; +import { + IPublicTypeContextMenuAction, + IPublicTypeHelpTipConfig, + IPublicTypeTipConfig, + IPublicTypeTitleContent, +} from '../type'; +import { + Balloon, + Breadcrumb, + Button, + Card, + Checkbox, + DatePicker, + Dialog, + Dropdown, + Form, + Icon, + Input, + Loading, + Message, + Overlay, + Pagination, + Radio, + Search, + Select, + SplitButton, + Step, + Switch, + Tab, + Table, + Tree, + TreeSelect, + Upload, + Divider, +} from '@alifd/next'; + +type IconProps = ComponentProps; export interface IPublicApiCommonUI { Balloon: typeof Balloon; diff --git a/packages/types/src/shell/type/title-content.ts b/packages/types/src/shell/type/title-content.ts index b17a476a5..203cd61b4 100644 --- a/packages/types/src/shell/type/title-content.ts +++ b/packages/types/src/shell/type/title-content.ts @@ -1,5 +1,10 @@ -import { ReactElement, ReactNode } from 'react'; -import { IPublicTypeI18nData, IPublicTypeTitleConfig } from './'; +import type { ReactElement, ReactNode } from 'react'; +import type { IPublicTypeI18nData, IPublicTypeTitleConfig } from './'; // eslint-disable-next-line max-len -export type IPublicTypeTitleContent = string | IPublicTypeI18nData | ReactElement | ReactNode | IPublicTypeTitleConfig; \ No newline at end of file +export type IPublicTypeTitleContent = + | string + | IPublicTypeI18nData + | ReactElement + | ReactNode + | IPublicTypeTitleConfig; diff --git a/packages/types/src/shell/type/widget-base-config.ts b/packages/types/src/shell/type/widget-base-config.ts index 02785148c..daa6e8d89 100644 --- a/packages/types/src/shell/type/widget-base-config.ts +++ b/packages/types/src/shell/type/widget-base-config.ts @@ -1,5 +1,11 @@ -import { ReactElement, ComponentType } from 'react'; -import { IPublicTypeI18nData, IPublicTypeIconType, IPublicTypeTitleContent, IPublicTypeWidgetConfigArea, TipContent } from './'; +import type { ReactElement, ComponentType } from 'react'; +import type { + IPublicTypeI18nData, + IPublicTypeIconType, + IPublicTypeTitleContent, + IPublicTypeWidgetConfigArea, + TipContent, +} from './'; export type IPublicTypeHelpTipConfig = string | { url?: string; content?: string | ReactElement }; @@ -36,7 +42,12 @@ export interface IPublicTypeWidgetBaseConfig { */ area?: IPublicTypeWidgetConfigArea; props?: Record; - content?: string | ReactElement | ComponentType | IPublicTypePanelConfig[] | IPublicTypePanelConfig; + content?: + | string + | ReactElement + | ComponentType + | IPublicTypePanelConfig[] + | IPublicTypePanelConfig; contentProps?: Record; /** @@ -96,4 +107,4 @@ export interface IPublicTypePanelDockPanelProps { area?: IPublicTypeWidgetConfigArea; } -export type IPublicTypeSkeletonConfig = IPublicTypePanelDockConfig | IPublicTypeWidgetBaseConfig; \ No newline at end of file +export type IPublicTypeSkeletonConfig = IPublicTypePanelDockConfig | IPublicTypeWidgetBaseConfig; diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json index c37b76ecc..039e0b4d1 100644 --- a/packages/types/tsconfig.json +++ b/packages/types/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "lib" + "outDir": "dist" }, - "include": [ - "./src/" - ] + "include": ["src"] } diff --git a/packages/utils/build.json b/packages/utils/build.json deleted file mode 100644 index 3e9260055..000000000 --- a/packages/utils/build.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "plugins": [ - "@alilc/build-plugin-lce" - ] -} diff --git a/packages/utils/build.test.json b/packages/utils/build.test.json deleted file mode 100644 index 9cc30d746..000000000 --- a/packages/utils/build.test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "plugins": [ - "@alilc/build-plugin-lce", - "@alilc/lowcode-test-mate/plugin/index.ts" - ] -} diff --git a/packages/utils/jest.config.js b/packages/utils/jest.config.js deleted file mode 100644 index 0631fa00c..000000000 --- a/packages/utils/jest.config.js +++ /dev/null @@ -1,21 +0,0 @@ -const fs = require('fs'); -const { join } = require('path'); -const pkgNames = fs.readdirSync(join('..')).filter(pkgName => !pkgName.startsWith('.')); - -const jestConfig = { - moduleFileExtensions: ['ts', 'tsx', 'js', 'json'], - collectCoverage: false, - collectCoverageFrom: [ - 'src/**/*.ts', - '!src/**/*.d.ts', - '!**/node_modules/**', - '!**/vendor/**', - ], - setupFilesAfterEnv: ['./jest.setup.js'], -}; - -// 只对本仓库内的 pkg 做 mapping -jestConfig.moduleNameMapper = {}; -jestConfig.moduleNameMapper[`^@alilc/lowcode\\-(${pkgNames.join('|')})$`] = '/../$1/src'; - -module.exports = jestConfig; \ No newline at end of file diff --git a/packages/utils/jest.setup.js b/packages/utils/jest.setup.js deleted file mode 100644 index 7b0828bfa..000000000 --- a/packages/utils/jest.setup.js +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-dom'; diff --git a/packages/utils/package.json b/packages/utils/package.json index 60605d81e..e7b55471e 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,32 +1,36 @@ { "name": "@alilc/lowcode-utils", - "version": "1.3.2", + "version": "2.0.0-beta.0", "description": "Utils for Ali lowCode engine", "files": [ "lib", "es" ], "main": "lib/index.js", - "module": "es/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { - "test": "build-scripts test --config build.test.json --jest-coverage", - "build": "build-scripts build" + "build": "tsc" }, "dependencies": { - "@alifd/next": "^1.19.16", - "@alilc/lowcode-types": "1.3.2", - "lodash": "^4.17.21", - "mobx": "^6.3.0", + "@alifd/next": "^1.27.8", + "@alilc/lowcode-types": "workspace:*", + "classnames": "^2.5.1", + "lodash-es": "^4.17.21", + "mobx": "^6.12.1", "prop-types": "^15.8.1", - "react": "^16" + "react": "^18.2.0", + "react-is": "^18.2.0" }, "devDependencies": { - "@alib/build-scripts": "^0.1.18", - "@testing-library/jest-dom": "^6.1.4", - "@testing-library/react": "^11.2.7", - "@types/node": "^13.7.1", - "@types/react": "^16", - "react-dom": "^16.14.0" + "@testing-library/react": "^14.2.2", + "@types/lodash-es": "^4.17.12", + "@types/react": "^18.2.67", + "@types/react-is": "^18.2.4", + "@types/prop-types": "^15.7.12" + }, + "peerDependencies": { + "react": "^18.2.0" }, "publishConfig": { "access": "public", diff --git a/packages/utils/src/asset.ts b/packages/utils/src/asset.ts index 3400f965b..261e2171e 100644 --- a/packages/utils/src/asset.ts +++ b/packages/utils/src/asset.ts @@ -1,12 +1,24 @@ import { AssetType, AssetLevels, AssetLevel } from '@alilc/lowcode-types'; -import type { AssetItem, Asset, AssetList, AssetBundle, IPublicTypeAssetsJson } from '@alilc/lowcode-types'; +import type { + AssetItem, + Asset, + AssetList, + AssetBundle, + IPublicTypeAssetsJson, +} from '@alilc/lowcode-types'; import { isCSSUrl } from './is-css-url'; import { createDefer } from './create-defer'; import { load, evaluate } from './script'; // API 向下兼容 export { AssetType, AssetLevels, AssetLevel } from '@alilc/lowcode-types'; -export type { AssetItem, Asset, AssetList, AssetBundle, IPublicTypeAssetsJson } from '@alilc/lowcode-types'; +export type { + AssetItem, + Asset, + AssetList, + AssetBundle, + IPublicTypeAssetsJson, +} from '@alilc/lowcode-types'; export function isAssetItem(obj: any): obj is AssetItem { return obj && obj.type; @@ -17,9 +29,9 @@ export function isAssetBundle(obj: any): obj is AssetBundle { } export function assetBundle( - assets?: Asset | AssetList | null, - level?: AssetLevel, - ): AssetBundle | null { + assets?: Asset | AssetList | null, + level?: AssetLevel, +): AssetBundle | null { if (!assets) { return null; } @@ -38,7 +50,12 @@ urls: [ "view1.js mobile|pc", "view2.js " ] */ -export function assetItem(type: AssetType, content?: string | null, level?: AssetLevel, id?: string): AssetItem | null { +export function assetItem( + type: AssetType, + content?: string | null, + level?: AssetLevel, + id?: string, +): AssetItem | null { if (!content) { return null; } @@ -50,7 +67,10 @@ export function assetItem(type: AssetType, content?: string | null, level?: Asse }; } -export function mergeAssets(assets: IPublicTypeAssetsJson, incrementalAssets: IPublicTypeAssetsJson): IPublicTypeAssetsJson { +export function mergeAssets( + assets: IPublicTypeAssetsJson, + incrementalAssets: IPublicTypeAssetsJson, +): IPublicTypeAssetsJson { if (incrementalAssets.packages) { assets.packages = [...(assets.packages || []), ...incrementalAssets.packages]; } @@ -65,7 +85,11 @@ export function mergeAssets(assets: IPublicTypeAssetsJson, incrementalAssets: IP return assets; } -function mergeAssetsComponentList(assets: IPublicTypeAssetsJson, incrementalAssets: IPublicTypeAssetsJson, listName: keyof IPublicTypeAssetsJson): void { +function mergeAssetsComponentList( + assets: IPublicTypeAssetsJson, + incrementalAssets: IPublicTypeAssetsJson, + listName: keyof Omit, +): void { if (incrementalAssets[listName]) { if (assets[listName]) { // 根据title进行合并 @@ -131,7 +155,10 @@ export class StylePoint { element.setAttribute('data-id', this.id); } element.appendChild(document.createTextNode(content)); - document.head.insertBefore(element, this.placeholder.parentNode === document.head ? this.placeholder.nextSibling : null); + document.head.insertBefore( + element, + this.placeholder.parentNode === document.head ? this.placeholder.nextSibling : null, + ); document.head.removeChild(this.placeholder); this.placeholder = element; } @@ -162,7 +189,10 @@ export class StylePoint { if (this.id) { element.setAttribute('data-id', this.id); } - document.head.insertBefore(element, this.placeholder.parentNode === document.head ? this.placeholder.nextSibling : null); + document.head.insertBefore( + element, + this.placeholder.parentNode === document.head ? this.placeholder.nextSibling : null, + ); document.head.removeChild(this.placeholder); this.placeholder = element; return i.promise(); @@ -175,7 +205,12 @@ function parseAssetList(scripts: any, styles: any, assets: AssetList, level?: As } } -function parseAsset(scripts: any, styles: any, asset: Asset | undefined | null, level?: AssetLevel) { +function parseAsset( + scripts: any, + styles: any, + asset: Asset | undefined | null, + level?: AssetLevel, +) { if (!asset) { return; } @@ -219,7 +254,7 @@ export class AssetLoader { async load(asset: Asset) { const styles: any = {}; const scripts: any = {}; - AssetLevels.forEach(lv => { + AssetLevels.forEach((lv) => { styles[lv] = []; scripts[lv] = []; }); @@ -237,12 +272,23 @@ export class AssetLoader { scripts[AssetLevel.App], ); await Promise.all( - styleQueue.map(({ content, level, type, id }) => this.loadStyle(content, level!, type === AssetType.CSSUrl, id)), + styleQueue.map(({ content, level, type, id }) => + this.loadStyle(content, level!, type === AssetType.CSSUrl, id), + ), + ); + await Promise.all( + scriptQueue.map(({ content, type, scriptType }) => + this.loadScript(content, type === AssetType.JSUrl, scriptType), + ), ); - await Promise.all(scriptQueue.map(({ content, type, scriptType }) => this.loadScript(content, type === AssetType.JSUrl, scriptType))); } - private loadStyle(content: string | undefined | null, level: AssetLevel, isUrl?: boolean, id?: string) { + private loadStyle( + content: string | undefined | null, + level: AssetLevel, + isUrl?: boolean, + id?: string, + ) { if (!content) { return; } diff --git a/packages/utils/src/build-components.ts b/packages/utils/src/build-components.ts index 909248524..8763592f4 100644 --- a/packages/utils/src/build-components.ts +++ b/packages/utils/src/build-components.ts @@ -1,5 +1,9 @@ import { ComponentType, forwardRef, createElement, FunctionComponent } from 'react'; -import { IPublicTypeNpmInfo, IPublicTypeComponentSchema, IPublicTypeProjectSchema } from '@alilc/lowcode-types'; +import { + IPublicTypeNpmInfo, + IPublicTypeComponentSchema, + IPublicTypeProjectSchema, +} from '@alilc/lowcode-types'; import { isESModule } from './is-es-module'; import { isReactComponent, acceptsRef, wrapReactClass } from './is-react'; import { isObject } from './is-object'; @@ -19,9 +23,9 @@ export function accessLibrary(library: string | Record) { return (window as any)[library] || generateHtmlComp(library); } -export function generateHtmlComp(library: string) { +export function generateHtmlComp(library: string): any { if (['a', 'img', 'div', 'span', 'svg'].includes(library)) { - return forwardRef((props, ref) => { + return forwardRef((props: any, ref) => { return createElement(library, { ref, ...props }, props.children); }); } @@ -92,12 +96,20 @@ function isMixinComponent(components: any) { return false; } - return Object.keys(components).some(componentName => isReactComponent(components[componentName])); + return Object.keys(components).some((componentName) => + isReactComponent(components[componentName]), + ); } -export function buildComponents(libraryMap: LibraryMap, - componentsMap: { [componentName: string]: IPublicTypeNpmInfo | ComponentType | IPublicTypeComponentSchema }, - createComponent: (schema: IPublicTypeProjectSchema) => Component | null) { +export function buildComponents( + libraryMap: LibraryMap, + componentsMap: { + [componentName: string]: IPublicTypeNpmInfo | ComponentType | IPublicTypeComponentSchema; + }, + createComponent: ( + schema: IPublicTypeProjectSchema, + ) => Component | null, +) { const components: any = {}; Object.keys(componentsMap).forEach((componentName) => { let component = componentsMap[componentName]; @@ -150,14 +162,17 @@ interface LibrayMap { interface ProjectUtils { [packageName: string]: any; } -export function getProjectUtils(librayMap: LibrayMap, utilsMetadata: UtilsMetadata[]): ProjectUtils { +export function getProjectUtils( + librayMap: LibrayMap, + utilsMetadata: UtilsMetadata[], +): ProjectUtils { const projectUtils: ProjectUtils = {}; if (utilsMetadata) { - utilsMetadata.forEach(meta => { + utilsMetadata.forEach((meta) => { if (librayMap[meta?.npm?.package]) { const lib = accessLibrary(librayMap[meta?.npm.package]); if (lib?.destructuring) { - Object.keys(lib).forEach(name => { + Object.keys(lib).forEach((name) => { if (name === 'destructuring') return; projectUtils[name] = lib[name]; }); @@ -168,4 +183,4 @@ export function getProjectUtils(librayMap: LibrayMap, utilsMetadata: UtilsMetada }); } return projectUtils; -} \ No newline at end of file +} diff --git a/packages/utils/src/check-prop-types.ts b/packages/utils/src/check-prop-types.ts index dc9ce31ed..94b60cc4f 100644 --- a/packages/utils/src/check-prop-types.ts +++ b/packages/utils/src/check-prop-types.ts @@ -1,5 +1,7 @@ import * as ReactIs from 'react-is'; +// @ts-expect-error import { default as ReactPropTypesSecret } from 'prop-types/lib/ReactPropTypesSecret'; +// @ts-expect-error import { default as factoryWithTypeCheckers } from 'prop-types/factoryWithTypeCheckers'; import { IPublicTypePropType } from '@alilc/lowcode-types'; import { isRequiredPropType } from './check-types/is-required-prop-type'; @@ -41,15 +43,24 @@ export function transformPropTypesRuleToString(rule: IPublicTypePropType | strin return 'PropTypes.any'; } -export function checkPropTypes(value: any, name: string, rule: any, componentName: string): boolean { +export function checkPropTypes( + value: any, + name: string, + rule: any, + componentName: string, +): boolean { let ruleFunction = rule; if (typeof rule === 'object') { // eslint-disable-next-line no-new-func - ruleFunction = new Function(`"use strict"; const PropTypes = arguments[0]; return ${transformPropTypesRuleToString(rule)}`)(PropTypes2); + ruleFunction = new Function( + `"use strict"; const PropTypes = arguments[0]; return ${transformPropTypesRuleToString(rule)}`, + )(PropTypes2); } if (typeof rule === 'string') { // eslint-disable-next-line no-new-func - ruleFunction = new Function(`"use strict"; const PropTypes = arguments[0]; return ${transformPropTypesRuleToString(rule)}`)(PropTypes2); + ruleFunction = new Function( + `"use strict"; const PropTypes = arguments[0]; return ${transformPropTypesRuleToString(rule)}`, + )(PropTypes2); } if (!ruleFunction || typeof ruleFunction !== 'function') { logger.warn('checkPropTypes should have a function type rule argument'); diff --git a/packages/utils/src/context-menu.tsx b/packages/utils/src/context-menu.tsx index 185abbb34..bddd9e276 100644 --- a/packages/utils/src/context-menu.tsx +++ b/packages/utils/src/context-menu.tsx @@ -1,8 +1,15 @@ import { Menu, Icon } from '@alifd/next'; -import { IPublicEnumContextMenuType, IPublicModelNode, IPublicModelPluginContext, IPublicTypeContextMenuAction, IPublicTypeContextMenuItem } from '@alilc/lowcode-types'; -import { Logger } from '@alilc/lowcode-utils'; +import { + IPublicEnumContextMenuType, + IPublicModelNode, + IPublicModelPluginContext, + IPublicTypeContextMenuAction, + IPublicTypeContextMenuItem, +} from '@alilc/lowcode-types'; +import { Logger } from './logger'; import classNames from 'classnames'; import React from 'react'; + import './context-menu.scss'; const logger = new Logger({ level: 'warn', bizName: 'utils' }); @@ -24,9 +31,7 @@ const Tree = (props: { const { node } = props; if (!node) { - return ( -
{ props.children }
- ); + return
{props.children}
; } const { common } = props.options.pluginContext || {}; @@ -40,7 +45,7 @@ const Tree = (props: { }; return ( - +
{ @@ -49,21 +54,22 @@ const Tree = (props: { }} style={style} > - {props.options.nodes?.[0].id === node.id ? () : null} + {props.options.nodes?.[0].id === node.id ? ( + + ) : null} {intl(node.title)}
-
- { props.children } -
+
{props.children}
); }; let destroyFn: Function | undefined; -export function parseContextMenuAsReactNode(menus: IPublicTypeContextMenuItem[], options: IOptions): React.ReactNode[] { +export function parseContextMenuAsReactNode( + menus: IPublicTypeContextMenuItem[], + options: IOptions, +): React.ReactNode[] { const { common, commonUI } = options.pluginContext || {}; const { intl = (title: any) => title } = common?.utils || {}; const { HelpTip } = commonUI || {}; @@ -77,7 +83,7 @@ export function parseContextMenuAsReactNode(menus: IPublicTypeContextMenuItem[], if (menu.type === IPublicEnumContextMenuType.MENU_ITEM) { if (menu.items && menu.items.length) { - children.push(( + children.push( {intl(menu.title)}} > - { parseContextMenuAsReactNode(menu.items, options) } + {parseContextMenuAsReactNode(menu.items, options)} - - )); + , + ); } else { - children.push(( + children.push(
- { menu.title ? intl(menu.title) : null } - { menu.help ? : null } + {menu.title ? intl(menu.title) : null} + {menu.help ? : null}
-
- )); + , + ); } } if (menu.type === IPublicEnumContextMenuType.NODE_TREE) { - children.push(( - - )); + children.push(); } }); return children; } -export function parseContextMenuProperties(menus: (IPublicTypeContextMenuAction | Omit)[], options: IOptions & { - event?: MouseEvent; -}, level = 1): IPublicTypeContextMenuItem[] { +export function parseContextMenuProperties( + menus: (IPublicTypeContextMenuAction | Omit)[], + options: IOptions & { + event?: MouseEvent; + }, + level = 1, +): IPublicTypeContextMenuItem[] { destroyFn?.(); const { nodes, destroy } = options; @@ -133,14 +141,9 @@ export function parseContextMenuProperties(menus: (IPublicTypeContextMenuAction } return menus - .filter(menu => !menu.condition || (menu.condition && menu.condition(nodes || []))) + .filter((menu) => !menu.condition || (menu.condition && menu.condition(nodes || []))) .map((menu) => { - const { - name, - title, - type = IPublicEnumContextMenuType.MENU_ITEM, - help, - } = menu; + const { name, title, type = IPublicEnumContextMenuType.MENU_ITEM, help } = menu; const result: IPublicTypeContextMenuItem = { name, @@ -151,7 +154,7 @@ export function parseContextMenuProperties(menus: (IPublicTypeContextMenuAction destroy?.(); menu.action?.(nodes || [], options.event); }, - disabled: menu.disabled && menu.disabled(nodes || []) || false, + disabled: (menu.disabled && menu.disabled(nodes || [])) || false, }; if ('items' in menu && menu.items) { @@ -169,7 +172,7 @@ export function parseContextMenuProperties(menus: (IPublicTypeContextMenuAction return menus.concat([currentMenu]); } - const index = menus.find(item => item.name === currentMenu.name); + const index = menus.find((item) => item.name === currentMenu.name); if (!index) { return menus.concat([currentMenu]); } else { @@ -192,20 +195,29 @@ function getMenuItemHeight() { return menuItemHeight; } -export function createContextMenu(children: React.ReactNode[], { - event, - offset = [0, 0], -}: { - event: MouseEvent | React.MouseEvent; - offset?: [number, number]; -}) { +export function createContextMenu( + children: React.ReactNode[], + { + event, + offset = [0, 0], + }: { + event: MouseEvent | React.MouseEvent; + offset?: [number, number]; + }, +) { event.preventDefault(); event.stopPropagation(); const viewportWidth = window.innerWidth; const viewportHeight = window.innerHeight; - const dividerCount = React.Children.count(children.filter(child => React.isValidElement(child) && child.type === Divider)); - const popupItemCount = React.Children.count(children.filter(child => React.isValidElement(child) && (child.type === PopupItem || child.type === Item))); + const dividerCount = React.Children.count( + children.filter((child) => React.isValidElement(child) && child.type === Divider), + ); + const popupItemCount = React.Children.count( + children.filter( + (child) => React.isValidElement(child) && (child.type === PopupItem || child.type === Item), + ), + ); const menuHeight = popupItemCount * parseInt(getMenuItemHeight(), 10) + dividerCount * 8 + 16; const menuWidthLimit = 200; let x = event.clientX + offset[0]; @@ -227,4 +239,4 @@ export function createContextMenu(children: React.ReactNode[], { destroyFn = (menuInstance as any).destroy; return destroyFn; -} \ No newline at end of file +} diff --git a/packages/utils/src/create-icon.tsx b/packages/utils/src/create-icon.tsx index 621b5c7ab..a5c94a915 100644 --- a/packages/utils/src/create-icon.tsx +++ b/packages/utils/src/create-icon.tsx @@ -7,9 +7,9 @@ import { isESModule } from './is-es-module'; const URL_RE = /^(https?:)\/\//i; export function createIcon( - icon?: IPublicTypeIconType | null, - props?: Record, - ): ReactNode { + icon?: IPublicTypeIconType | null, + props?: Record, +): ReactNode { if (!icon) { return null; } @@ -36,5 +36,5 @@ export function createIcon( }); } - return ; + return ; } diff --git a/packages/utils/src/css-helper.ts b/packages/utils/src/css-helper.ts index 98bf1bbf0..2bd6db0d1 100644 --- a/packages/utils/src/css-helper.ts +++ b/packages/utils/src/css-helper.ts @@ -4,7 +4,7 @@ */ // 需要通过 Env 来判断是否需要 -import { some } from 'lodash'; +import { some } from 'lodash-es'; const pseudoMap = ['hover', 'focus', 'active', 'visited']; @@ -37,7 +37,7 @@ function isString(str: any): str is string { } function hyphenate(str: string): string { - return str.replace(RE_CAMEL, w => `-${w}`).toLowerCase(); + return str.replace(RE_CAMEL, (w) => `-${w}`).toLowerCase(); } function camelize(str: string): string { @@ -63,30 +63,30 @@ function toNativeStyle(runtime: Record | undefined) { return {}; } if (runtime.default) { - const normalized: Record = {}; + const normalized: any = {}; Object.keys(runtime).forEach((pseudo) => { if (pseudo === 'extra') { normalized[pseudo] = runtime[pseudo]; return; } - normalized[pseudo] = toNativeStyle(runtime[pseudo]); + normalized[pseudo] = toNativeStyle(runtime[pseudo] as any); }); return normalized; } - const normalized = {}; + const normalized: any = {}; Object.keys(runtime).forEach((key) => { normalized[camelize(key)] = runtime[key]; }); return normalized; } -function normalizeStyle(style) { +function normalizeStyle(style: any): any { if (!style) { return {}; } if (style.default) { - const normalized = {}; + const normalized: Record = {}; Object.keys(style).forEach((pseudo) => { if (pseudo === 'extra') { normalized[pseudo] = style[pseudo]; @@ -104,12 +104,11 @@ function normalizeStyle(style) { return normalized; } -function toCss(runtime) { +function toCss(runtime: Record) { if (!runtime) { - return ( - `:root { + return `:root { -}`); +}`; } if (runtime.default) { @@ -125,17 +124,15 @@ function toCss(runtime) { `:root${pseudo === 'default' ? '' : `${prefix}${pseudo}`} { ${runtimeToCss(normalizeStyle(runtime[pseudo]))} }\n`, -); + ); }); return css.join('\n'); } - return ( - `:root { + return `:root { ${runtimeToCss(normalizeStyle(runtime))} } -` - ); +`; } function cssToRuntime(css: string) { @@ -152,45 +149,48 @@ function cssToRuntime(css: string) { runtime.extra = runtime.extra || []; runtime.extra.push(cssItem.trim()); } else { - const res = /:root:?(.*)?{(.*)/ig.exec(cssItem.replace(/[\r\n]+/ig, '').trim()); + const res = /:root:?(.*)?{(.*)/gi.exec(cssItem.replace(/[\r\n]+/gi, '').trim()); if (res) { let pseudo: string | undefined; - if (res[1] && res[1].trim() && some(pseudoMap, pse => res[1].indexOf(pse) === 0)) { + if (res[1] && res[1].trim() && some(pseudoMap, (pse) => res[1].indexOf(pse) === 0)) { pseudo = res[1].trim(); } else if (res[1] && res[1].trim()) { pseudo = res[1]; } const s: Record = {}; - res[2].split(';').reduce((prev, next) => { - if (next.indexOf('base64') > -1) { - prev[prev.length - 1] += `;${next}`; - } else { - prev.push(next); - } - return prev; - }, []).forEach((item) => { - if (item) { - if (PROPS_REG.test(item)) { - const props = item.match(PROPS_REG); - const key = props?.[1]; - const value = props?.[2]; - if (key && value) { - s[key.trim()] = value.trim(); + res[2] + .split(';') + .reduce((prev, next) => { + if (next.indexOf('base64') > -1) { + prev[prev.length - 1] += `;${next}`; + } else { + prev.push(next); + } + return prev; + }, []) + .forEach((item) => { + if (item) { + if (PROPS_REG.test(item)) { + const props = item.match(PROPS_REG); + const key = props?.[1]; + const value = props?.[2]; + if (key && value) { + s[key.trim()] = value.trim(); + } } } - } - }); + }); - runtime[pseudo || 'default'] = s; + (runtime as any)[pseudo || 'default'] = s; } } }); return runtime; } -function cssToStyle(css) { +function cssToStyle(css: any) { try { if (isString(css)) { return toNativeStyle(cssToRuntime(css).default); @@ -205,12 +205,4 @@ function cssToStyle(css) { return {}; } -export { - hyphenate, - camelize, - toNativeStyle, - normalizeStyle, - toCss, - cssToRuntime, - cssToStyle, -}; +export { hyphenate, camelize, toNativeStyle, normalizeStyle, toCss, cssToRuntime, cssToStyle }; diff --git a/packages/utils/src/is-plain-object.ts b/packages/utils/src/is-plain-object.ts index bb199e630..3fef56fa4 100644 --- a/packages/utils/src/is-plain-object.ts +++ b/packages/utils/src/is-plain-object.ts @@ -1,6 +1,6 @@ import { isObject } from './is-object'; -export function isPlainObject(value: any): value is T { +export function isPlainObject>(value: any): value is T { if (!isObject(value)) { return false; } diff --git a/packages/utils/src/is-react.ts b/packages/utils/src/is-react.ts index 1d6c939ea..391a89871 100644 --- a/packages/utils/src/is-react.ts +++ b/packages/utils/src/is-react.ts @@ -57,11 +57,13 @@ export function isReactComponent(obj: any): obj is ComponentType { return false; } - return Boolean(isReactClass(obj) || typeof obj === 'function' || isForwardRefType(obj) || isMemoType(obj)); + return Boolean( + isReactClass(obj) || typeof obj === 'function' || isForwardRefType(obj) || isMemoType(obj), + ); } export function wrapReactClass(view: FunctionComponent) { - let ViewComponentClass = class extends Component { + let ViewComponentClass = class extends Component { render() { const { children, ...other } = this.props; return createElement(view, other, children); diff --git a/packages/utils/src/misc.ts b/packages/utils/src/misc.ts index 28833ef32..7c3151c7e 100644 --- a/packages/utils/src/misc.ts +++ b/packages/utils/src/misc.ts @@ -1,6 +1,5 @@ - import { isI18NObject } from './is-object'; -import { get } from 'lodash'; +import { get } from 'lodash-es'; import { IPublicEnumTransformStage, IPublicModelComponentMeta } from '@alilc/lowcode-types'; import { Logger } from './logger'; @@ -22,7 +21,7 @@ export function isVariable(obj: any): obj is Variable { export function isUseI18NSetter(prototype: any, propName: string) { const configure = prototype?.options?.configure; if (Array.isArray(configure)) { - return configure.some(c => { + return configure.some((c) => { return c.name === propName && c?.setter?.type?.displayName === 'I18nSetter'; }); } @@ -64,14 +63,14 @@ export function waitForThing(obj: any, path: string): Promise { export function arrShallowEquals(arr1: any[], arr2: any[]): boolean { if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false; if (arr1.length !== arr2.length) return false; - return arr1.every(item => arr2.includes(item)); + return arr1.every((item) => arr2.includes(item)); } /** * 判断当前 meta 是否从 vc prototype 转换而来 * @param meta */ - export function isFromVC(meta: IPublicModelComponentMeta) { +export function isFromVC(meta: IPublicModelComponentMeta) { return !!meta?.getMetadata().configure?.advanced; } @@ -79,14 +78,7 @@ export function executePendingFn(fn: () => void, timeout: number = 2000) { return setTimeout(fn, timeout); } -const stageList = [ - 'render', - 'serilize', - 'save', - 'clone', - 'init', - 'upgrade', -]; +const stageList = ['render', 'serilize', 'save', 'clone', 'init', 'upgrade']; /** * 兼容原来的数字版本的枚举对象 @@ -95,7 +87,9 @@ const stageList = [ */ export function compatStage(stage: IPublicEnumTransformStage | number): IPublicEnumTransformStage { if (typeof stage === 'number') { - console.warn('stage 直接指定为数字的使用方式已经过时,将在下一版本移除,请直接使用 IPublicEnumTransformStage.Render|Serilize|Save|Clone|Init|Upgrade'); + console.warn( + 'stage 直接指定为数字的使用方式已经过时,将在下一版本移除,请直接使用 IPublicEnumTransformStage.Render|Serilize|Save|Clone|Init|Upgrade', + ); return stageList[stage - 1] as IPublicEnumTransformStage; } return stage as IPublicEnumTransformStage; @@ -103,7 +97,7 @@ export function compatStage(stage: IPublicEnumTransformStage | number): IPublicE export function invariant(check: any, message: string, thing?: any) { if (!check) { - throw new Error(`Invariant failed: ${ message }${thing ? ` in '${thing}'` : ''}`); + throw new Error(`Invariant failed: ${message}${thing ? ` in '${thing}'` : ''}`); } } @@ -132,4 +126,4 @@ export function shouldUseVariableSetter( ) { if (propSupportVariable === false) return false; return propSupportVariable || globalSupportVariable; -} \ No newline at end of file +} diff --git a/packages/utils/src/schema.ts b/packages/utils/src/schema.ts index 2e7dec70f..dfeaf4b71 100644 --- a/packages/utils/src/schema.ts +++ b/packages/utils/src/schema.ts @@ -23,7 +23,7 @@ export function compatibleLegaoSchema(props: any): any { } if (Array.isArray(props)) { - return props.map(k => compatibleLegaoSchema(k)); + return props.map((k) => compatibleLegaoSchema(k)); } if (!isPlainObject(props)) { @@ -78,7 +78,10 @@ export function compatibleLegaoSchema(props: any): any { return newProps; } -export function getNodeSchemaById(schema: IPublicTypeNodeSchema, nodeId: string): IPublicTypeNodeSchema | undefined { +export function getNodeSchemaById( + schema: IPublicTypeNodeSchema, + nodeId: string, +): IPublicTypeNodeSchema | undefined { let found: IPublicTypeNodeSchema | undefined; if (schema.id === nodeId) { return schema; @@ -123,7 +126,10 @@ function getNodeSchemaFromPropsById(props: any, nodeId: string): IPublicTypeNode * TODO: not sure if this is used anywhere * @deprecated */ -export function applyActivities(pivotSchema: IPublicTypeRootSchema, activities: any): IPublicTypeRootSchema { +export function applyActivities( + pivotSchema: IPublicTypeRootSchema, + activities: any, +): IPublicTypeRootSchema { let schema = { ...pivotSchema }; if (!Array.isArray(activities)) { activities = [activities]; diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json index c37b76ecc..f6366069d 100644 --- a/packages/utils/tsconfig.json +++ b/packages/utils/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "lib" + "outDir": "dist", + "paths": { + "@alilc/lowcode-*": ["packages/*"] + } }, - "include": [ - "./src/" - ] + "include": ["src"] } diff --git a/playground/tsconfig.json b/playground/tsconfig.json new file mode 100644 index 000000000..a6294ffbd --- /dev/null +++ b/playground/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "paths": { + "@alilc/renderer-react": ["runtime/renderer-react"] + } + } +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7687b3373..57f2836ed 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,6 @@ packages: - 'runtime/*' + - 'packages/types' + - 'packages/utils' - 'playground' - 'docs' diff --git a/runtime/renderer-core/package.json b/runtime/renderer-core/package.json index 84c7cdfcc..5c2d9613e 100644 --- a/runtime/renderer-core/package.json +++ b/runtime/renderer-core/package.json @@ -14,10 +14,13 @@ "test:watch": "vitest" }, "dependencies": { - "@alilc/lowcode-types": "1.3.2", "lodash-es": "^4.17.21" }, "devDependencies": { "@types/lodash-es": "^4.17.12" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" } } diff --git a/runtime/renderer-react/package.json b/runtime/renderer-react/package.json index 66e367743..e0933de33 100644 --- a/runtime/renderer-react/package.json +++ b/runtime/renderer-react/package.json @@ -13,8 +13,9 @@ "test": "vitest" }, "dependencies": { + "@alilc/renderer-core": "workspace:*", + "@alilc/runtime-router": "workspace:*", "@vue/reactivity": "^3.4.21", - "@alilc/renderer-core": "^2.0.0-beta.0", "lodash-es": "^4.17.21", "hoist-non-react-statics": "^3.3.2", "use-sync-external-store": "^1.2.0", @@ -22,7 +23,6 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@alilc/runtime-router": "1.0.0-beta.0", "@testing-library/react": "^14.2.0", "@types/lodash-es": "^4.17.12", "@types/hoist-non-react-statics": "^3.3.5", @@ -34,5 +34,9 @@ "peerDependencies": { "react": "^18.2.0", "react-dom": "^18.2.0" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" } } diff --git a/runtime/router/package.json b/runtime/router/package.json index 38281000a..c99f88c0d 100644 --- a/runtime/router/package.json +++ b/runtime/router/package.json @@ -13,7 +13,7 @@ "test": "vitest" }, "dependencies": { - "@alilc/renderer-core": "^2.0.0-beta.0", + "@alilc/renderer-core": "workspace:*", "lodash-es": "^4.17.21", "path-to-regexp": "^6.2.1", "qs": "^6.12.0" @@ -21,5 +21,9 @@ "devDependencies": { "@types/lodash-es": "^4.17.12", "@types/qs": "^6.9.13" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" } } diff --git a/scripts/setup-for-test.sh b/scripts/setup-for-test.sh deleted file mode 100755 index b0734c362..000000000 --- a/scripts/setup-for-test.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -rm -rf node_modules package-lock.json yarn.lock -lerna clean -y -find ./packages -type f -name "package-lock.json" -exec rm -f {} \; - -lerna bootstrap - -lerna exec --stream \ - --scope @alilc/lowcode-editor-core \ - --scope @alilc/lowcode-types \ - --scope @alilc/lowcode-utils \ - -- npm run build diff --git a/scripts/setup.js b/scripts/setup.js deleted file mode 100644 index 77da2291f..000000000 --- a/scripts/setup.js +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env node -const os = require('os'); -const del = require('del'); -const gulp = require('gulp'); -const execa = require('execa'); - -async function deleteRootDirLockFile() { - await del('package-lock.json'); - await del('yarn.lock'); -} - -async function clean() { - await execa.command('lerna clean -y', { stdio: 'inherit', encoding: 'utf-8' }); -} - -async function deletePackagesDirLockFile() { - await del('packages/**/package-lock.json'); -} - -async function bootstrap() { - await execa.command('lerna bootstrap --force-local', { stdio: 'inherit', encoding: 'utf-8' }); -} - -const setup = gulp.series(deleteRootDirLockFile, clean, deletePackagesDirLockFile, bootstrap); - -os.type() === 'Windows_NT' ? setup() : execa.command('scripts/setup.sh', { stdio: 'inherit', encoding: 'utf-8' }); \ No newline at end of file diff --git a/scripts/start.js b/scripts/start.js deleted file mode 100644 index e1a83ea73..000000000 --- a/scripts/start.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -const os = require('os'); -const execa = require('execa'); - -async function start() { - const [, , pkgName = '@alilc/lowcode-ignitor'] = process.argv; - await execa.command(`lerna exec --scope ${pkgName} -- npm start`, { stdio: 'inherit', encoding: 'utf-8' }); -} - -os.type() === 'Windows_NT' ? start() : execa.command('scripts/start.sh', { stdio: 'inherit', encoding: 'utf-8' }); diff --git a/scripts/watchdog.js b/scripts/watchdog.js deleted file mode 100755 index f393ca88d..000000000 --- a/scripts/watchdog.js +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env node -const fs = require('fs'); -const { join } = require('path'); - -const packagesDir = join(__dirname, '../packages'); -const blacklistPkgNames = ['code-generator', 'material-parser']; - -const dirs = fs.readdirSync(packagesDir); -dirs - .filter(dir => { - return !dir.startsWith('.') && !blacklistPkgNames.includes(dir); - }) - .forEach(dir => { - const pkgDir = join(packagesDir, dir); - const pkg = JSON.parse(fs.readFileSync(join(pkgDir, 'package.json'), 'utf-8')); - if (pkg.private) return; - const { files } = pkg; - files.forEach(file => { - const fileDir = join(pkgDir, file); - if (!fs.existsSync(fileDir)) { - throw new Error(`${fileDir} does not exist, plz run build`); - } - }); - }); diff --git a/tsconfig.json b/tsconfig.json index 2203cc737..b4d174437 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -31,11 +31,7 @@ // skip type checking of declaration files "skipLibCheck": true, "baseUrl": "./packages", - "useDefineForClassFields": true, - "paths": { - "@alilc/lowcode-*": ["./*/src"] - }, - "outDir": "lib" + "useDefineForClassFields": true }, "exclude": ["**/tests/*", "**/*.test.ts", "**/lib", "**/es", "node_modules"] }