diff --git a/docs/guide/advanced/build.md b/docs/guide/advanced/build.md index 000903ff54d..ef5c0eb6f61 100644 --- a/docs/guide/advanced/build.md +++ b/docs/guide/advanced/build.md @@ -23,11 +23,11 @@ export default { extraBabelPlugins: [ [ 'babel-plugin-import', - { libraryName: 'antd', libraryDirectory: 'lib', style: true }, + { libraryName: 'antd', libraryDirectory: 'es', style: true }, ], [ 'babel-plugin-import', - { libraryName: '@formily/antd', libraryDirectory: 'lib', style: true }, + { libraryName: '@formily/antd', libraryDirectory: 'esm', style: true }, ], ], } @@ -94,12 +94,12 @@ modify `config-overrides.js` + module.exports = override( + fixBabelImports('import', { + libraryName: 'antd', -+ libraryDirectory: 'lib', ++ libraryDirectory: 'es', + style: true + }), + fixBabelImports('import', { + libraryName: '@formily/antd', -+ libraryDirectory: 'lib', ++ libraryDirectory: 'esm', + style: true + }), + ); @@ -128,7 +128,7 @@ Modify `.babelrc` or babel-loader "import", { "libraryName": "antd", - "libraryDirectory": "lib", + "libraryDirectory": "es", "style": true } ], @@ -136,7 +136,7 @@ Modify `.babelrc` or babel-loader "import", { "libraryName": "@formily/antd", - "libraryDirectory": "lib", + "libraryDirectory": "esm", "style": true } ] diff --git a/docs/guide/advanced/build.zh-CN.md b/docs/guide/advanced/build.zh-CN.md index 0f3a912b79b..862a4168252 100644 --- a/docs/guide/advanced/build.zh-CN.md +++ b/docs/guide/advanced/build.zh-CN.md @@ -23,11 +23,11 @@ export default { extraBabelPlugins: [ [ 'babel-plugin-import', - { libraryName: 'antd', libraryDirectory: 'lib', style: true }, + { libraryName: 'antd', libraryDirectory: 'es', style: true }, ], [ 'babel-plugin-import', - { libraryName: '@formily/antd', libraryDirectory: 'lib', style: true }, + { libraryName: '@formily/antd', libraryDirectory: 'esm', style: true }, ], ], } @@ -94,12 +94,12 @@ yarn add babel-plugin-import --dev + module.exports = override( + fixBabelImports('import', { + libraryName: 'antd', -+ libraryDirectory: 'lib', ++ libraryDirectory: 'es', + style: true + }), + fixBabelImports('import', { + libraryName: '@formily/antd', -+ libraryDirectory: 'lib', ++ libraryDirectory: 'esm', + style: true + }), + ); @@ -128,7 +128,7 @@ yarn add babel-plugin-import --dev "import", { "libraryName": "antd", - "libraryDirectory": "lib", + "libraryDirectory": "es", "style": true } ], @@ -136,7 +136,7 @@ yarn add babel-plugin-import --dev "import", { "libraryName": "@formily/antd", - "libraryDirectory": "lib", + "libraryDirectory": "esn", "style": true } ] diff --git a/packages/react/docs/api/shared/Schema.md b/packages/react/docs/api/shared/Schema.md index 84eb81e2ad9..9f1ea3977da 100644 --- a/packages/react/docs/api/shared/Schema.md +++ b/packages/react/docs/api/shared/Schema.md @@ -959,7 +959,7 @@ It can only be consumed by expressions in x-reactions, corresponding to the depe ### $form -Can only be consumed by expressions in x-reactions, representing the current field instance +Can only be consumed by expressions in x-reactions, representing the current Form instance ### $target diff --git a/packages/react/docs/api/shared/Schema.zh-CN.md b/packages/react/docs/api/shared/Schema.zh-CN.md index 96aa3fbca16..f249e65df1e 100644 --- a/packages/react/docs/api/shared/Schema.zh-CN.md +++ b/packages/react/docs/api/shared/Schema.zh-CN.md @@ -959,7 +959,7 @@ type SchemaReactions = ### $form -只能在 x-reactions 中的表达式消费,代表当前字段实例 +只能在 x-reactions 中的表达式消费,代表当前 Form 实例 ### $target diff --git a/packages/shared/src/__tests__/index.spec.ts b/packages/shared/src/__tests__/index.spec.ts index c3e1adc0072..236f2e62364 100644 --- a/packages/shared/src/__tests__/index.spec.ts +++ b/packages/shared/src/__tests__/index.spec.ts @@ -22,6 +22,7 @@ import { merge } from '../merge' import { instOf } from '../instanceof' import { isFn, isHTMLElement, isNumberLike, isReactElement } from '../checkers' import { defaults } from '../defaults' +import { applyMiddleware } from '../middleware' describe('array', () => { test('toArr', () => { @@ -499,6 +500,7 @@ describe('shared Subscribable', () => { objWithCustomNotify.subscribe(cb) objWithCustomNotify.notify({ key3: 'val3' }) expect(customNotify).toBeCalledTimes(1) + objWithCustomNotify.unsubscribe() }) }) @@ -694,3 +696,23 @@ test('defaults', () => { mm: { value: 123 }, }) }) + +test('applyMiddleware', async () => { + expect( + await applyMiddleware(0, [ + (num: number, next) => next(num + 1), + (num: number, next) => next(num + 1), + (num: number, next) => next(num + 1), + ]) + ).toEqual(3) + + expect( + await applyMiddleware(0, [ + (num: number, next) => next(num + 1), + () => '123', + (num: number, next) => next(num + 1), + ]) + ).toEqual('123') + + expect(await applyMiddleware(0)).toEqual(0) +}) diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 301044bad89..4e7ea208b95 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -9,6 +9,7 @@ export * from './global' export * from './path' export * from './deprecate' export * from './subscribable' +export * from './middleware' export * from './merge' export * from './instanceof' export * from './defaults' diff --git a/packages/shared/src/middleware.ts b/packages/shared/src/middleware.ts new file mode 100644 index 00000000000..eb3f3184d27 --- /dev/null +++ b/packages/shared/src/middleware.ts @@ -0,0 +1,13 @@ +export interface IMiddleware { + (payload: any, next: (payload: any) => any): any +} + +export const applyMiddleware = (payload: any, fns: IMiddleware[] = []) => { + const compose = (payload: any, fns: IMiddleware[]) => { + if (fns.length === 0) return Promise.resolve(payload) + return Promise.resolve( + fns[0](payload, (payload) => compose(payload, fns.slice(1))) + ) + } + return compose(payload, fns) +} diff --git a/packages/vue/docs/api/shared/schema.md b/packages/vue/docs/api/shared/schema.md index 265fd11016f..8f21773dc5c 100644 --- a/packages/vue/docs/api/shared/schema.md +++ b/packages/vue/docs/api/shared/schema.md @@ -958,7 +958,7 @@ type SchemaReactions = ### $form -只能在 x-reactions 中的表达式消费,代表当前字段实例 +只能在 x-reactions 中的表达式消费,代表当前 Form 实例 ### $target