From 05f0610c995cf3fa5464016f4df4f1591e940f80 Mon Sep 17 00:00:00 2001 From: chaoling <11017647@qq.com> Date: Thu, 11 Apr 2024 14:13:49 +0800 Subject: [PATCH] feat: add vue-reactive apis --- .../pinia-adapter/.prettierrc.js | 32 + .../inula-adapter/pinia-adapter/README.md | 18 + .../inula-adapter/pinia-adapter/package.json | 21 + .../inula-adapter/pinia-adapter/src/index.ts | 16 + .../inula-adapter/pinia-adapter/src/pinia.ts | 143 ++++ .../inula-adapter/pinia-adapter/src/ref.ts | 68 ++ .../pinia-adapter/tests/actions.test.ts | 154 +++++ .../pinia-adapter/tests/getters.test.ts | 153 +++++ .../pinia-adapter/tests/state.test.ts | 55 ++ .../pinia-adapter/tests/store.test.ts | 67 ++ .../inula-adapter/pinia-adapter/tsconfig.json | 13 + .../pinia-adapter/vitest.config.ts | 20 + .../ReactiveTest/computed.test.tsx | 255 ++++++++ .../ReactiveTest/reactive.test.tsx | 214 ++++++ .../HorizonXTest/ReactiveTest/ref.test.tsx | 216 +++++++ .../ReactiveTest/watchEffect.test.tsx | 611 ++++++++++++++++++ .../StateManager/StateArray.test.tsx | 7 +- .../StateManager/StateSet.test.tsx | 56 ++ .../StateManager/StateWeakMap.test.tsx | 1 - .../StoreFunctionality/watch.test.tsx | 211 +++++- .../edgeCases/deepVariableObserver.test.tsx | 7 +- .../HorizonXTest/edgeCases/proxy.test.tsx | 2 +- .../HorizonXTest/reactive/reactive.test.tsx | 35 + packages/inula/src/index.ts | 36 +- packages/inula/src/inulax/CommonUtils.ts | 19 +- packages/inula/src/inulax/Constants.ts | 19 +- packages/inula/src/inulax/docs/change_list.md | 76 +++ .../inula/src/inulax/docs/reactive_feature.md | 187 ++++++ .../src/inulax/proxy/HooklessObserver.ts | 4 +- packages/inula/src/inulax/proxy/Observer.ts | 79 ++- .../inula/src/inulax/proxy/ProxyHandler.ts | 72 +-- .../{readonlyProxy.ts => ReadonlyProxy.ts} | 0 .../proxy/handlers/ArrayProxyHandler.ts | 149 +---- .../proxy/handlers/BaseCollectionHandler.ts | 236 +++++++ .../proxy/handlers/BaseObjectHandler.ts | 179 +++++ .../proxy/handlers/CollectionProxyHandler.ts | 19 +- .../src/inulax/proxy/handlers/HandlerUtils.ts | 89 +++ .../src/inulax/proxy/handlers/MapProxy.ts | 379 +++-------- .../proxy/handlers/ObjectProxyHandler.ts | 122 +--- .../src/inulax/proxy/handlers/SetProxy.ts | 285 ++------ .../src/inulax/proxy/handlers/WeakMapProxy.ts | 175 +---- .../src/inulax/proxy/handlers/WeakSetProxy.ts | 128 +--- .../inula/src/inulax/reactive/Computed.ts | 60 ++ .../inula/src/inulax/reactive/RContext.ts | 94 +++ .../inula/src/inulax/reactive/Reactive.ts | 29 + packages/inula/src/inulax/reactive/Ref.ts | 92 +++ .../{proxy/watch.ts => reactive/Watch.ts} | 16 +- .../inula/src/inulax/store/StoreHandler.ts | 12 +- packages/inula/src/inulax/types/ProxyTypes.ts | 69 ++ .../inula/src/inulax/types/ReactiveTypes.ts | 46 ++ .../inulax/{types.ts => types/StoreTypes.ts} | 39 +- pnpm-workspace.yaml | 1 + 52 files changed, 3905 insertions(+), 1181 deletions(-) create mode 100644 packages/inula-adapter/pinia-adapter/.prettierrc.js create mode 100644 packages/inula-adapter/pinia-adapter/README.md create mode 100644 packages/inula-adapter/pinia-adapter/package.json create mode 100644 packages/inula-adapter/pinia-adapter/src/index.ts create mode 100644 packages/inula-adapter/pinia-adapter/src/pinia.ts create mode 100644 packages/inula-adapter/pinia-adapter/src/ref.ts create mode 100644 packages/inula-adapter/pinia-adapter/tests/actions.test.ts create mode 100644 packages/inula-adapter/pinia-adapter/tests/getters.test.ts create mode 100644 packages/inula-adapter/pinia-adapter/tests/state.test.ts create mode 100644 packages/inula-adapter/pinia-adapter/tests/store.test.ts create mode 100644 packages/inula-adapter/pinia-adapter/tsconfig.json create mode 100644 packages/inula-adapter/pinia-adapter/vitest.config.ts create mode 100644 packages/inula/__tests__/HorizonXTest/ReactiveTest/computed.test.tsx create mode 100644 packages/inula/__tests__/HorizonXTest/ReactiveTest/reactive.test.tsx create mode 100644 packages/inula/__tests__/HorizonXTest/ReactiveTest/ref.test.tsx create mode 100644 packages/inula/__tests__/HorizonXTest/ReactiveTest/watchEffect.test.tsx create mode 100644 packages/inula/__tests__/HorizonXTest/reactive/reactive.test.tsx create mode 100644 packages/inula/src/inulax/docs/change_list.md create mode 100644 packages/inula/src/inulax/docs/reactive_feature.md rename packages/inula/src/inulax/proxy/{readonlyProxy.ts => ReadonlyProxy.ts} (100%) create mode 100644 packages/inula/src/inulax/proxy/handlers/BaseCollectionHandler.ts create mode 100644 packages/inula/src/inulax/proxy/handlers/BaseObjectHandler.ts create mode 100644 packages/inula/src/inulax/proxy/handlers/HandlerUtils.ts create mode 100644 packages/inula/src/inulax/reactive/Computed.ts create mode 100644 packages/inula/src/inulax/reactive/RContext.ts create mode 100644 packages/inula/src/inulax/reactive/Reactive.ts create mode 100644 packages/inula/src/inulax/reactive/Ref.ts rename packages/inula/src/inulax/{proxy/watch.ts => reactive/Watch.ts} (71%) create mode 100644 packages/inula/src/inulax/types/ProxyTypes.ts create mode 100644 packages/inula/src/inulax/types/ReactiveTypes.ts rename packages/inula/src/inulax/{types.ts => types/StoreTypes.ts} (77%) diff --git a/packages/inula-adapter/pinia-adapter/.prettierrc.js b/packages/inula-adapter/pinia-adapter/.prettierrc.js new file mode 100644 index 00000000..c2622eaa --- /dev/null +++ b/packages/inula-adapter/pinia-adapter/.prettierrc.js @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Huawei Technologies Co.,Ltd. + * + * openInula is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +'use strict'; + +module.exports = { + printWidth: 120, // 一行120字符数,如果超过会进行换行 + tabWidth: 2, // tab等2个空格 + useTabs: false, // 用空格缩进行 + semi: true, // 行尾使用分号 + singleQuote: true, // 字符串使用单引号 + quoteProps: 'as-needed', // 仅在需要时在对象属性添加引号 + jsxSingleQuote: false, // 在JSX中使用双引号 + trailingComma: 'es5', // 使用尾逗号(对象、数组等) + bracketSpacing: true, // 对象的括号间增加空格 + bracketSameLine: false, // 将多行JSX元素的>放在最后一行的末尾 + arrowParens: 'avoid', // 在唯一的arrow函数参数周围省略括号 + vueIndentScriptAndStyle: false, // 不缩进Vue文件中的