annil 1.5.3 → 1.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +27 -22
- package/dist/api/DefineComponent/collectOptionsForComponent.d.ts +3 -2
- package/dist/api/DefineComponent/collectOptionsForComponent.js +23 -10
- package/dist/api/DefineComponent/collectOptionsForComponent.js.map +1 -1
- package/dist/api/RootComponent/Lifetimes/LifetimesOption.d.ts +2 -2
- package/dist/api/RootComponent/PageLifetimes/PageLifetimesOption.d.ts +1 -1
- package/dist/api/RootComponent/RootComponentDoc.d.ts +5 -18
- package/dist/api/RootComponent/index.d.ts +1 -1
- package/dist/api/SubComponent/SubLifetimes/SubLifetimesOption.d.ts +2 -2
- package/dist/api/SubComponent/SubStore/SubStoreConstraint.js +2 -0
- package/dist/api/SubComponent/SubStore/SubStoreConstraint.js.map +1 -0
- package/dist/api/SubComponent/SubStore/SubStoreOption.d.ts +2 -2
- package/dist/api/SubComponent/index.d.ts +2 -2
- package/dist/api/SubComponent/index.js.map +1 -1
- package/dist/behaviors/BComputedAndWatch/isEqual.js +1 -1
- package/dist/behaviors/BComputedAndWatch/isEqual.js.map +1 -1
- package/package.json +1 -1
- package/src/api/DefineComponent/collectOptionsForComponent.ts +57 -44
- package/src/api/RootComponent/Data/test/normal.test.ts +1 -1
- package/src/api/RootComponent/Events/test/normal.test.ts +2 -2
- package/src/api/RootComponent/Lifetimes/LifetimesOption.ts +29 -32
- package/src/api/RootComponent/Lifetimes/test/error.test.ts +1 -7
- package/src/api/RootComponent/Methods/test/mormal.test.ts +1 -1
- package/src/api/RootComponent/PageLifetimes/PageLifetimesOption.ts +1 -4
- package/src/api/RootComponent/PageLifetimes/test/normal.test.ts +13 -4
- package/src/api/RootComponent/RootComponentDoc.ts +10 -22
- package/src/api/RootComponent/Watch/test/WtachInject.test.ts +1 -1
- package/src/api/RootComponent/index.ts +2 -2
- package/src/api/SubComponent/SubData/SubDataConstraint.ts +1 -1
- package/src/api/SubComponent/SubInherit/SubInheritConstraint.ts +1 -1
- package/src/api/SubComponent/SubInstance/test/normal.test.ts +0 -4
- package/src/api/SubComponent/SubLifetimes/SubLifetimesOption.ts +2 -2
- package/src/api/SubComponent/SubStore/SubStoreOption.ts +3 -2
- package/src/api/SubComponent/SubStore/test/error.test.ts +1 -3
- package/src/api/SubComponent/SubStore/test/normal.test.ts +12 -2
- package/src/api/SubComponent/SubWatch/test/WatchProperties.test.ts +161 -0
- package/src/api/SubComponent/index.ts +3 -4
- package/src/behaviors/BComputedAndWatch/isEqual.ts +2 -1
- package/dist/api/SubComponent/SubStore/SubDataConstraint.js +0 -2
- package/dist/api/SubComponent/SubStore/SubDataConstraint.js.map +0 -1
- /package/dist/api/SubComponent/SubStore/{SubDataConstraint.d.ts → SubStoreConstraint.d.ts} +0 -0
- /package/src/api/SubComponent/SubStore/{SubDataConstraint.ts → SubStoreConstraint.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
* 解决DetailedType不接收接口类型的错误 ([ae8acbf](https://github.com/missannil/annil/commit/ae8acbfc2e62f99db565c448ad9253aa549e78bb))
|
|
6
6
|
|
|
7
|
+
## [1.5.5](https://github.com/missannil/annil/compare/v1.5.4...v1.5.5) (2024-01-01)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* 修复isPage错误 ([301366d](https://github.com/missannil/annil/commit/301366d9b30f909c59db727db53847bd789cb144))
|
|
13
|
+
|
|
14
|
+
## [1.5.4](https://github.com/missannil/annil/compare/v1.5.3...v1.5.4) (2023-12-25)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* isPagecheck ([03f6452](https://github.com/missannil/annil/commit/03f64523dc5f7da32616ec5c0ecfc4f50d4d4b7d))
|
|
20
|
+
|
|
7
21
|
## [1.5.3](https://github.com/missannil/annil/compare/v1.5.2...v1.5.3) (2023-12-22)
|
|
8
22
|
|
|
9
23
|
|
package/README.md
CHANGED
|
@@ -23,38 +23,40 @@
|
|
|
23
23
|
|
|
24
24
|
### 简介
|
|
25
25
|
|
|
26
|
-
annil(安奈儿)
|
|
26
|
+
annil(安奈儿)是微信小程序原生开发插件,相较于原生API,使用annil会大大提高开发效率和代码质量。
|
|
27
27
|
|
|
28
28
|
### 特点
|
|
29
29
|
|
|
30
|
-
-
|
|
30
|
+
- **组件构建API功能更强大**
|
|
31
31
|
|
|
32
|
-
新的组件构建API加入了[computed](./doc/
|
|
32
|
+
新的组件构建API加入了[computed](./doc/demo/computed.md)、[watch](./doc/demo/watch.md)、[store](./doc/demo/store.md)(基于mobx的全局响应式数据)`等功能,使开发更便捷。
|
|
33
33
|
|
|
34
34
|
- **复杂组件解决方案**
|
|
35
35
|
|
|
36
|
-
新的组件构建方案(根组件 + 子组件(可选)),组件逻辑与wxml
|
|
36
|
+
新的组件构建方案(根组件 + 子组件(可选)),组件逻辑与wxml标签一一对应。解决书写复杂组件时不同组件代码耦合的问题。
|
|
37
|
+
- **专为typescript开发设计**
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
在使用ts开发时,新的组件构建API返回的类型叫组件文档类型,好比传统组件(UI)库为每个组件书写的使用文档,在做为子组件构建新组件(页面)时,子组件API要求使用者输入组件类型,让使用者知道该定义哪些字段(类型提示)并确保字段值类型正确(类型约束和检测)。这样实现了一个页面中所有子组件之间的类型耦合,无论组件嵌套多少层,无论哪层组件数据类型发生改变,所有相关组件类型都会得到感知。当您修改、重构代码时,只要无类型报错(tsc --noEmit --watch)就不会有运行时报错的心智负担。
|
|
39
|
+
annil是专为TS开发而设计的,通过类型提示、约束、检测,提升开发效率,避免运行时错误的发生。使用js开发时可忽略开发文档中的ts部分。
|
|
41
40
|
|
|
42
|
-
-
|
|
41
|
+
- **组件类型概念**
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
新的组件构建API(DefineComponent)返回的类型叫组件(文档)类型,好比传统组件(UI)库为每个组件书写的使用文档,在做为子组件构建新组件(页面)时,子组件API(SubComponent)要求使用者输入组件类型,在定义选项字段时,会得到类型提示、约束和检测。这样实现了一个页面中所有子组件之间的类型耦合,无论组件嵌套多少层,无论哪层组件数据类型发生改变,所有相关组件类型都会得到感知。当您增改、重构代码时,只要无类型报错(tsc --noEmit --watch)就不会有运行时报错的心智负担。
|
|
45
44
|
|
|
46
45
|
- **高兼容性**
|
|
47
46
|
|
|
48
|
-
annil提供的API都是原生API
|
|
47
|
+
annil提供的API都是原生API的语法糖,不具有强制性和侵入性,可渐进性使用或重构代码。
|
|
49
48
|
|
|
50
49
|
- **类型修补**
|
|
51
50
|
|
|
52
|
-
官方类型(miniprogram-api-typings)存在更新不及时等问题,annil
|
|
53
|
-
|
|
51
|
+
官方类型(miniprogram-api-typings)存在更新不及时等问题,annil提供了新的类型方便开发,这些类型都采用ES模块化,不会污染全局类型。
|
|
52
|
+
|
|
53
|
+
- **适配第三方库类型**
|
|
54
|
+
|
|
55
|
+
第三方组件库一般都是以文档的形式对组件说明,插件提供了泛型[GenerateDoc](./src/types/GenerateDoc.ts),可根据组件文档快速书写组件类型,使第三方组件融入组件构建模型,后续插件会陆续添加原生(Wm)和常用第三方组件库(Vant)类型。
|
|
54
56
|
|
|
55
|
-
-
|
|
57
|
+
- **设计思想**
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
请参考[设计思想](./doc/designIdea.md)
|
|
58
60
|
|
|
59
61
|
### 安装
|
|
60
62
|
|
|
@@ -69,6 +71,7 @@ annil(安奈儿)是微信小程序原生开发插件。
|
|
|
69
71
|
- 可选
|
|
70
72
|
|
|
71
73
|
```bash
|
|
74
|
+
# 使用ts开发
|
|
72
75
|
npm typescript --save-dev
|
|
73
76
|
```
|
|
74
77
|
|
|
@@ -115,18 +118,20 @@ annil(安奈儿)是微信小程序原生开发插件。
|
|
|
115
118
|
|
|
116
119
|
### 使用文档
|
|
117
120
|
|
|
118
|
-
|
|
121
|
+
- **组件构建API**
|
|
119
122
|
|
|
120
|
-
|
|
123
|
+
[DefineComponent](./doc/api/DefineComponent.md)
|
|
121
124
|
|
|
122
|
-
|
|
125
|
+
[RootComopnent](./doc/api/RootComopnent.md)
|
|
123
126
|
|
|
124
|
-
|
|
127
|
+
[SubComponent](./doc/api/SubComponent.md)
|
|
125
128
|
|
|
126
|
-
|
|
129
|
+
- **navigateTo**
|
|
127
130
|
|
|
128
|
-
[
|
|
131
|
+
[navigateTo](./doc/api/navigateTo.md)
|
|
129
132
|
|
|
130
|
-
|
|
133
|
+
- 实用类型
|
|
131
134
|
|
|
132
|
-
|
|
135
|
+
### 更新日志
|
|
136
|
+
|
|
137
|
+
[CHANGELOG](./CHANGELOG.md)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Func } from "hry-types/src/Misc/_api";
|
|
2
|
-
import type { ComputedCache } from "../../behaviors/BComputedAndWatch/types";
|
|
2
|
+
import type { ComputedCache, Instance } from "../../behaviors/BComputedAndWatch/types";
|
|
3
3
|
import type { WMComponent } from "../../types/OfficialTypeAlias";
|
|
4
4
|
import type { ComputedConstraint } from "../RootComponent/Computed/ComputedConstraint";
|
|
5
5
|
import type { DataConstraint } from "../RootComponent/Data/DataConstraint";
|
|
@@ -18,6 +18,7 @@ export type FinalOptionsOfComponent = {
|
|
|
18
18
|
__computedInitCache__?: () => ComputedCache;
|
|
19
19
|
};
|
|
20
20
|
externalClasses: string[];
|
|
21
|
+
pageLifetimes: PageLifetimesOption<false, object>["pageLifetimes"] & {};
|
|
21
22
|
isPage?: boolean;
|
|
22
23
|
options?: WMComponent.Options;
|
|
23
24
|
properties?: PropertiesConstraint;
|
|
@@ -25,6 +26,6 @@ export type FinalOptionsOfComponent = {
|
|
|
25
26
|
computed?: ComputedConstraint;
|
|
26
27
|
watch?: Record<string, Func>;
|
|
27
28
|
lifetimes?: LifetimesConstraint;
|
|
28
|
-
pageLifetimes?: PageLifetimesOption<false, object>["pageLifetimes"];
|
|
29
29
|
};
|
|
30
|
+
export declare function isPageCheck(isPage: boolean | undefined): (this: Instance) => void;
|
|
30
31
|
export declare function collectOptionsForComponent(defineComponentOption: DefineComponentOption): FinalOptionsOfComponent;
|
|
@@ -4,6 +4,17 @@ import { BStore } from "../../behaviors/BStore";
|
|
|
4
4
|
import { INNERMARKER } from "../../utils/InnerMarker";
|
|
5
5
|
import { isEmptyObject } from "../../utils/isEmptyObject";
|
|
6
6
|
import { instanceConfig } from "../InstanceInject/instanceConfig";
|
|
7
|
+
export function isPageCheck(isPage) {
|
|
8
|
+
return function () {
|
|
9
|
+
const route = this.route;
|
|
10
|
+
if (route && isPage !== true) {
|
|
11
|
+
throw Error(`页面 /${route} 中, RootComponent构建页面时,isPage字段值应为 true`);
|
|
12
|
+
}
|
|
13
|
+
if (!route && isPage !== false && isPage !== undefined) {
|
|
14
|
+
throw Error(`组件 ${this.is} 中 RootComponent构建组件时,可不写isPage字段或值为 false`);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
7
18
|
function onLoadReceivedDataHandle(option) {
|
|
8
19
|
const innerData = option[INNERMARKER.url];
|
|
9
20
|
if (innerData === undefined)
|
|
@@ -27,18 +38,15 @@ function loadReceivedDataHandle(option) {
|
|
|
27
38
|
}
|
|
28
39
|
option[INNERMARKER.url] = INNERMARKER.url;
|
|
29
40
|
}
|
|
30
|
-
function hijack(config, field, before
|
|
41
|
+
function hijack(config, field, before) {
|
|
31
42
|
const originalFunc = config[field];
|
|
32
43
|
config[field] = function (...args) {
|
|
33
44
|
before.forEach(func => func.call(this, ...args));
|
|
34
45
|
originalFunc && originalFunc.apply(this, args);
|
|
35
|
-
after.forEach(func => func.call(this, ...args));
|
|
36
46
|
};
|
|
37
47
|
return;
|
|
38
48
|
}
|
|
39
49
|
function InternalFieldProtection(config, keys) {
|
|
40
|
-
if (!config)
|
|
41
|
-
return;
|
|
42
50
|
const methodsConfigKeys = Object.keys(config);
|
|
43
51
|
for (const key of keys) {
|
|
44
52
|
if (methodsConfigKeys.includes(key)) {
|
|
@@ -60,7 +68,7 @@ function funcOptionsHandle(finalOptionsForComponent, isPage, funcOptions) {
|
|
|
60
68
|
}
|
|
61
69
|
else {
|
|
62
70
|
!(isEmptyObject(funcOptions.pageLifetimes))
|
|
63
|
-
&& _funcOptionsHandle(finalOptionsForComponent.pageLifetimes
|
|
71
|
+
&& _funcOptionsHandle(finalOptionsForComponent.pageLifetimes, funcOptions.pageLifetimes);
|
|
64
72
|
}
|
|
65
73
|
funcOptions.lifetimes && _funcOptionsHandle(finalOptionsForComponent.lifetimes || (finalOptionsForComponent.lifetimes = {}), funcOptions.lifetimes);
|
|
66
74
|
funcOptions.watch && _funcOptionsHandle(finalOptionsForComponent.watch || (finalOptionsForComponent.watch = {}), funcOptions.watch);
|
|
@@ -78,12 +86,15 @@ function funcFieldsCollect(options, funcOptions) {
|
|
|
78
86
|
function otherFieldsHandle(finalOptions, rootComponentOptions) {
|
|
79
87
|
for (const key in rootComponentOptions) {
|
|
80
88
|
const config = rootComponentOptions[key];
|
|
81
|
-
if (
|
|
89
|
+
if (Array.isArray(config) === true) {
|
|
82
90
|
finalOptions[key].push(...config);
|
|
83
91
|
}
|
|
84
|
-
else {
|
|
92
|
+
else if (typeof config === "object") {
|
|
85
93
|
Object.assign(finalOptions[key] || (finalOptions[key] = {}), config);
|
|
86
94
|
}
|
|
95
|
+
else {
|
|
96
|
+
finalOptions[key] = config;
|
|
97
|
+
}
|
|
87
98
|
}
|
|
88
99
|
}
|
|
89
100
|
function eventsHandle(methods, eventsConfig) {
|
|
@@ -147,12 +158,13 @@ function merge(target, source) {
|
|
|
147
158
|
export function collectOptionsForComponent(defineComponentOption) {
|
|
148
159
|
const rootComponentOption = defineComponentOption.rootComponent;
|
|
149
160
|
const subComponentsList = defineComponentOption.subComponents;
|
|
150
|
-
const finalOptionsForComponent = merge(
|
|
161
|
+
const finalOptionsForComponent = merge(Object.assign({}, instanceConfig.injectInfo), {
|
|
151
162
|
observers: {},
|
|
152
163
|
data: {},
|
|
153
164
|
methods: {},
|
|
154
165
|
behaviors: [BStore, BComputedAndWatch],
|
|
155
166
|
externalClasses: [],
|
|
167
|
+
pageLifetimes: {},
|
|
156
168
|
});
|
|
157
169
|
const funcOptions = {
|
|
158
170
|
pageLifetimes: {},
|
|
@@ -168,8 +180,9 @@ export function collectOptionsForComponent(defineComponentOption) {
|
|
|
168
180
|
funcOptionsHandle(finalOptionsForComponent, rootComponentOption === null || rootComponentOption === void 0 ? void 0 : rootComponentOption.isPage, funcOptions);
|
|
169
181
|
InternalFieldProtection(finalOptionsForComponent.methods, ["disposer"]);
|
|
170
182
|
finalOptionsForComponent.isPage
|
|
171
|
-
&& hijack(finalOptionsForComponent.pageLifetimes
|
|
172
|
-
hijack(finalOptionsForComponent.methods, "onLoad", [onLoadReceivedDataHandle]
|
|
183
|
+
&& hijack(finalOptionsForComponent.pageLifetimes, "load", [loadReceivedDataHandle]);
|
|
184
|
+
hijack(finalOptionsForComponent.methods, "onLoad", [onLoadReceivedDataHandle]);
|
|
185
|
+
hijack(finalOptionsForComponent.lifetimes, "attached", [isPageCheck(rootComponentOption === null || rootComponentOption === void 0 ? void 0 : rootComponentOption.isPage)]);
|
|
173
186
|
finalOptionsForComponent.isPage
|
|
174
187
|
&& finalOptionsForComponent.options && Reflect.deleteProperty(finalOptionsForComponent.options, "virtualHost");
|
|
175
188
|
finalOptionsForComponent.behaviors.push(BBeforeCreate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collectOptionsForComponent.js","sourceRoot":"","sources":["../../../src/api/DefineComponent/collectOptionsForComponent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"collectOptionsForComponent.js","sourceRoot":"","sources":["../../../src/api/DefineComponent/collectOptionsForComponent.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { ComputeIntersection } from "hry-types/src/Object/ComputeIntersecti
|
|
|
3
3
|
import type { WMCompPageLifetimes, WMPageLifetimes } from "../../../types/OfficialTypeAlias";
|
|
4
4
|
export type PageLifetimesOption<TIsPage extends boolean, PropertiesDoc extends object> = IfExtends<TIsPage, false, {
|
|
5
5
|
pageLifetimes?: ComputeIntersection<Partial<WMCompPageLifetimes> & {
|
|
6
|
-
load?: (props
|
|
6
|
+
load?: (props?: object) => void;
|
|
7
7
|
}>;
|
|
8
8
|
}, {
|
|
9
9
|
pageLifetimes?: ComputeIntersection<Partial<Omit<WMPageLifetimes, "onLoad">> & {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="miniprogram-api-typings" />
|
|
2
2
|
import type { WMCompPageLifetimes, WMPageLifetimes } from "../../types/OfficialTypeAlias";
|
|
3
3
|
import type { LifetimesConstraint } from "./Lifetimes/LifetimesConstraint";
|
|
4
4
|
type _RootComponentDoc = {
|
|
@@ -10,27 +10,14 @@ type _RootComponentDoc = {
|
|
|
10
10
|
methods?: object;
|
|
11
11
|
events?: object;
|
|
12
12
|
store?: object;
|
|
13
|
-
watch?: Record<string,
|
|
13
|
+
watch?: Record<string, AnyFunction>;
|
|
14
14
|
lifetimes?: LifetimesConstraint;
|
|
15
15
|
pageLifetimes?: Partial<WMCompPageLifetimes & {
|
|
16
|
-
load:
|
|
17
|
-
}>;
|
|
16
|
+
load: AnyFunction;
|
|
17
|
+
}> | Partial<WMPageLifetimes>;
|
|
18
18
|
externalClasses?: string[];
|
|
19
|
+
export?: () => void;
|
|
19
20
|
};
|
|
20
21
|
type _Validator<O, Doc, ErrKeys = Exclude<keyof O, keyof Doc>> = [ErrKeys] extends [never] ? Doc : `错误的字段${ErrKeys & string}`;
|
|
21
22
|
export type RootComponentDoc<O extends _Validator<O, _RootComponentDoc> = _RootComponentDoc> = O;
|
|
22
|
-
type _RootPageDoc = {
|
|
23
|
-
isPage?: boolean;
|
|
24
|
-
properties?: object;
|
|
25
|
-
data?: object;
|
|
26
|
-
computed?: object;
|
|
27
|
-
customEvents?: object;
|
|
28
|
-
methods?: object;
|
|
29
|
-
events?: object;
|
|
30
|
-
store?: object;
|
|
31
|
-
watch?: Record<string, Func>;
|
|
32
|
-
lifetimes?: LifetimesConstraint;
|
|
33
|
-
pageLifetimes?: Partial<WMPageLifetimes>;
|
|
34
|
-
};
|
|
35
|
-
export type RootPageDoc<O extends _Validator<O, _RootPageDoc> = _RootPageDoc> = O;
|
|
36
23
|
export {};
|
|
@@ -31,7 +31,7 @@ import type { GetStoreDoc } from "./Store/GeTStoreDoc";
|
|
|
31
31
|
import type { StoreConstraint } from "./Store/StoreConstraint";
|
|
32
32
|
import type { StoreOption } from "./Store/StoreOption";
|
|
33
33
|
import type { WatchOption } from "./Watch/WatchOption";
|
|
34
|
-
type RootComponentOptions<TEvents extends object, TIsPage extends boolean, TCustomEvents extends CustomEventConstraint, TMethods extends MethodsConstraint, TProperties extends PropertiesConstraint, TData extends object, TStore extends StoreConstraint, TComputed extends Record<string, Func>, EventsDoc extends object, CustomEventsDoc extends object, PropertiesDoc extends object, DataDoc extends object, StoreDoc extends object, ComputedDoc extends object> = MethodsOption<TMethods, keyof (EventsDoc & CustomEventsDoc)> & PropertiesOption<TProperties> & IsPageOption<TIsPage> & EventsOption<TEvents> & CustomEventsOption<TCustomEvents, keyof EventsDoc> & DataOption<TData, keyof PropertiesDoc> & StoreOption<TStore, keyof (PropertiesDoc & DataDoc)> & ComputedOption<TComputed, keyof (PropertiesDoc & DataDoc & StoreDoc)> & PageLifetimesOption<TIsPage, PropertiesDoc> & LifetimesOption
|
|
34
|
+
type RootComponentOptions<TEvents extends object, TIsPage extends boolean, TCustomEvents extends CustomEventConstraint, TMethods extends MethodsConstraint, TProperties extends PropertiesConstraint, TData extends object, TStore extends StoreConstraint, TComputed extends Record<string, Func>, EventsDoc extends object, CustomEventsDoc extends object, PropertiesDoc extends object, DataDoc extends object, StoreDoc extends object, ComputedDoc extends object> = MethodsOption<TMethods, keyof (EventsDoc & CustomEventsDoc)> & PropertiesOption<TProperties> & IsPageOption<TIsPage> & EventsOption<TEvents> & CustomEventsOption<TCustomEvents, keyof EventsDoc> & DataOption<TData, keyof PropertiesDoc> & StoreOption<TStore, keyof (PropertiesDoc & DataDoc)> & ComputedOption<TComputed, keyof (PropertiesDoc & DataDoc & StoreDoc)> & PageLifetimesOption<TIsPage, PropertiesDoc> & LifetimesOption & WatchOption<ComputedDoc & Required<PropertiesDoc> & DataDoc & StoreDoc & IInjectStore> & Partial<Omit<WMCompOtherOption, "pageLifetimes" | "definitionFilter" | "observers">> & ObserversOption<ComputedDoc & Required<PropertiesDoc> & DataDoc & StoreDoc & IInjectStore> & ThisType<RootComponentInstance<TIsPage, TMethods, DataDoc, DataDoc & Required<PropertiesDoc> & StoreDoc & ComputedDoc, CustomEventsDoc, StoreDoc>>;
|
|
35
35
|
type RootComponentConstructor<TComponentDocList extends ComponentDoc[]> = {
|
|
36
36
|
<TEvents extends EventsConstraint<TComponentDocList>, TIsPage extends boolean = false, const TProperties extends PropertiesConstraint = {}, TData extends object = {}, TStore extends StoreConstraint = {}, TComputed extends ComputedConstraint = {}, TCustomEvents extends IfExtends<TIsPage, false, CustomEventConstraint, EmptyObject> = {}, TMethods extends MethodsConstraint = {}, EventsDoc extends object = IfExtends<EventsConstraint<TComponentDocList>, TEvents, {}, TEvents>, CustomEventsDoc extends object = GetCustomEventDoc<TCustomEvents>, PropertiesDoc extends object = GetPropertiesDoc<TProperties, TIsPage>, DataDoc extends object = TData, StoreDoc extends object = GetStoreDoc<TStore>, ComputedDoc extends object = GetComputedDoc<TComputed>>(options: RootComponentOptions<TEvents, TIsPage, TCustomEvents, TMethods, TProperties, TData, TStore, TComputed, EventsDoc, CustomEventsDoc, PropertiesDoc, DataDoc, StoreDoc, ComputedDoc>): ComputeIntersection<IfExtends<TIsPage, false, {}, {
|
|
37
37
|
isPage: true;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export type SubLifetimesOption =
|
|
1
|
+
import type { LifetimesOption } from "../../RootComponent/Lifetimes/LifetimesOption";
|
|
2
|
+
export type SubLifetimesOption = LifetimesOption;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubStoreConstraint.js","sourceRoot":"","sources":["../../../../src/api/SubComponent/SubStore/SubStoreConstraint.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { V } from "hry-types";
|
|
2
|
-
export type SubStoreOption<TSubStore extends object, legalKeys extends PropertyKey
|
|
3
|
-
store?: TSubStore & V.IllegalFieldValidator<TSubStore, legalKeys
|
|
2
|
+
export type SubStoreOption<TSubStore extends object, legalKeys extends PropertyKey> = {
|
|
3
|
+
store?: TSubStore & V.IllegalFieldValidator<TSubStore, legalKeys, 0, "", "与inherit和data字段重复或前缀错误">;
|
|
4
4
|
};
|
|
@@ -31,10 +31,10 @@ import type { SubMethodsOption } from "./SubMethods/SubMethodsOption";
|
|
|
31
31
|
import type { SubObserversOption } from "./SubObservers/SubObserversOption";
|
|
32
32
|
import type { SubPageLifetimesOption } from "./SubPageLifetimes/SubPageLifetimesOption";
|
|
33
33
|
import type { CreateSubComponentDoc } from "./SubReturnType/CreateSubComponentDoc";
|
|
34
|
-
import type { SubStoreConstraint } from "./SubStore/
|
|
34
|
+
import type { SubStoreConstraint } from "./SubStore/SubStoreConstraint";
|
|
35
35
|
import type { SubStoreOption } from "./SubStore/SubStoreOption";
|
|
36
36
|
import type { SubWatchOption } from "./SubWatch/SubWatchOption";
|
|
37
|
-
type Options<RootDoc extends RootComponentDoc, IsPage extends boolean, CurrentCompDoc extends ComponentDoc, Prefix extends string, AllRootDataDoc extends object, TInherit extends object, TSubData extends object, TSubStore extends object, TSubComputed extends object, TEvents extends object, TSubMethods extends SubMethodsConstraint, InheritDoc extends object, SubDataDoc extends object, SubStoreDoc extends object, SubComputedDoc extends object, SubEventsDoc extends object, SubMethodsDoc extends object> = SubInheritOption<TInherit> & SubDataOption<TSubData, Exclude<keyof CurrentCompDoc["properties"], (keyof InheritDoc)>, Prefix> & SubStoreOption<TSubStore, Exclude<keyof CurrentCompDoc["properties"], (keyof (InheritDoc & SubDataDoc))
|
|
37
|
+
type Options<RootDoc extends RootComponentDoc, IsPage extends boolean, CurrentCompDoc extends ComponentDoc, Prefix extends string, AllRootDataDoc extends object, TInherit extends object, TSubData extends object, TSubStore extends object, TSubComputed extends object, TEvents extends object, TSubMethods extends SubMethodsConstraint, InheritDoc extends object, SubDataDoc extends object, SubStoreDoc extends object, SubComputedDoc extends object, SubEventsDoc extends object, SubMethodsDoc extends object> = SubInheritOption<TInherit> & SubDataOption<TSubData, Exclude<keyof CurrentCompDoc["properties"], (keyof InheritDoc)>, Prefix> & SubStoreOption<TSubStore, Exclude<keyof CurrentCompDoc["properties"], (keyof (InheritDoc & SubDataDoc))>> & SubComputedOption<TSubComputed, Omit<CurrentCompDoc["properties"], (keyof (InheritDoc & SubDataDoc & SubStoreDoc))>> & SubEventsOption<TEvents, SubEventsDoc, keyof SubEventsConstraint<CurrentCompDoc>> & SubMethodsOption<TSubMethods, Prefix, keyof (CurrentCompDoc["customEvents"] & SubEventsDoc)> & SubPageLifetimesOption<IsPage, RootDoc["properties"] & {}> & SubLifetimesOption & SubWatchOption<SubComputedDoc & SubDataDoc & AllRootDataDoc & SubStoreDoc & IInjectStore> & Partial<Omit<WMCompOtherOption, "pageLifetimes" | "definitionFilter" | "export" | "observers" | "relations">> & SubObserversOption<SubComputedDoc & SubDataDoc & AllRootDataDoc & SubStoreDoc & IInjectStore> & ThisType<SubInstance<SubMethodsDoc & RootDoc["methods"], TSubData, AllRootDataDoc & SubDataDoc & SubComputedDoc & SubStoreDoc, RootDoc["customEvents"] & {}, SubStoreDoc>>;
|
|
38
38
|
type SubComponentConstructor<TRootDoc extends RootComponentDoc, TOriginalCompDoc extends ComponentDoc, TSupplementalPrefix extends string = "", IsPage extends boolean = TRootDoc["isPage"] extends true ? true : false, CurrentPrefix extends string = `${GetComponentPrefix<TOriginalCompDoc>}${Capitalize<TSupplementalPrefix>}`, CurrentCompDoc extends ComponentDoc = IfExtends<TSupplementalPrefix, "", TOriginalCompDoc, ReplacePrefix<TOriginalCompDoc, CurrentPrefix>>, AllRootDataDoc extends object = Required<TRootDoc["properties"]> & TRootDoc["data"] & TRootDoc["computed"] & TRootDoc["store"]> = {
|
|
39
39
|
<TInherit extends InheritConstraint<AllRootDataDoc, CurrentCompDoc>, TSubData extends SubDataConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof InheritDoc>>, TSubStore extends SubStoreConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof (InheritDoc & SubDataDoc)>>, TEvents extends SubEventsConstraint<CurrentCompDoc>, TSubComputed extends SubComputedConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof (InheritDoc & SubDataDoc & SubStoreDoc)>> = {}, TSubMethods extends SubMethodsConstraint = {}, InheritDoc extends object = IfExtends<InheritConstraint<AllRootDataDoc, CurrentCompDoc>, TInherit, {}, TInherit>, SubDataDoc extends object = IfExtends<SubDataConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof InheritDoc>>, TSubData, {}, TSubData>, SubStoreDoc extends object = IfExtends<SubStoreConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof (InheritDoc & SubDataDoc)>>, TSubStore, {}, {
|
|
40
40
|
[k in keyof TSubStore]: ReturnType<TSubStore[k] & {}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/SubComponent/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/SubComponent/index.ts"],"names":[],"mappings":"AAiNA,MAAM,UAAU,YAAY;IAK1B,OAAO,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,OAAkC,CAAQ,CAAC;AACvE,CAAC"}
|
|
@@ -5,7 +5,7 @@ function isSameSize(a, b) {
|
|
|
5
5
|
return Object.keys(a).length === Object.keys(b).length;
|
|
6
6
|
}
|
|
7
7
|
function isSameCode(a, b) {
|
|
8
|
-
return a.toString() === b.toString();
|
|
8
|
+
return a.toString().split(" ").join("") === b.toString().split(" ").join("");
|
|
9
9
|
}
|
|
10
10
|
function isSameTime(a, b) {
|
|
11
11
|
return a.getTime() === b.getTime();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isEqual.js","sourceRoot":"","sources":["../../../src/behaviors/BComputedAndWatch/isEqual.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAGD,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzD,CAAC;AAGD,SAAS,UAAU,CAAC,CAAW,EAAE,CAAW;
|
|
1
|
+
{"version":3,"file":"isEqual.js","sourceRoot":"","sources":["../../../src/behaviors/BComputedAndWatch/isEqual.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAGD,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzD,CAAC;AAGD,SAAS,UAAU,CAAC,CAAW,EAAE,CAAW;IAE1C,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/E,CAAC;AAGD,SAAS,UAAU,CAAC,CAAO,EAAE,CAAO;IAClC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACrC,CAAC;AAGD,SAAS,aAAa,CAAC,CAAS,EAAE,CAAS;IACzC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;AACtD,CAAC;AAQD,MAAM,UAAU,OAAO,CAAC,CAAU,EAAE,CAAU;IAE5C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/E,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAGD,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,CAAC,EAAE,CAAa,CAAC,CAAC;IACtC,CAAC;IAGD,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,CAAC,EAAE,CAAS,CAAC,CAAC;IAClC,CAAC;IAGD,IAAI,CAAC,YAAY,MAAM,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,CAAC,EAAE,CAAW,CAAC,CAAC;IACvC,CAAC;IAGD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAExB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAGD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -42,6 +42,7 @@ export type FinalOptionsOfComponent = {
|
|
|
42
42
|
__computedInitCache__?: () => ComputedCache;
|
|
43
43
|
};
|
|
44
44
|
externalClasses: string[];
|
|
45
|
+
pageLifetimes: PageLifetimesOption<false, object>["pageLifetimes"] & {};
|
|
45
46
|
isPage?: boolean;
|
|
46
47
|
options?: WMComponent.Options;
|
|
47
48
|
properties?: PropertiesConstraint;
|
|
@@ -49,9 +50,29 @@ export type FinalOptionsOfComponent = {
|
|
|
49
50
|
computed?: ComputedConstraint;
|
|
50
51
|
watch?: Record<string, Func>;
|
|
51
52
|
lifetimes?: LifetimesConstraint;
|
|
52
|
-
pageLifetimes?: PageLifetimesOption<false, object>["pageLifetimes"];
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* 劫持attached,根据this.route做判断 isPage值是否正确
|
|
57
|
+
*/
|
|
58
|
+
export function isPageCheck(isPage: boolean | undefined) {
|
|
59
|
+
return function(this: Instance) {
|
|
60
|
+
const route = (this as PageInstance).route as string | undefined;
|
|
61
|
+
if (route && isPage !== true) {
|
|
62
|
+
// 页面isPage值错误
|
|
63
|
+
throw Error(
|
|
64
|
+
`页面 /${route} 中, RootComponent构建页面时,isPage字段值应为 true`,
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
if (!route && isPage !== false && isPage !== undefined) {
|
|
68
|
+
// 组件写了isPage = true
|
|
69
|
+
throw Error(
|
|
70
|
+
`组件 ${this.is} 中 RootComponent构建组件时,可不写isPage字段或值为 false`,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
55
76
|
/**
|
|
56
77
|
* 原生Component会对传入的对象字段匹配的properties字段setData赋值。不符合字段或Page时不会赋值。
|
|
57
78
|
* 此函数为给实例setData赋值,默认传递值与properties相符(ts类型安全)。
|
|
@@ -59,7 +80,7 @@ export type FinalOptionsOfComponent = {
|
|
|
59
80
|
* 1. 使用wx.navigateTo传值的。这种情况无内置字段 option[INNERMARKER.url] 等于 undefined
|
|
60
81
|
* 2. 使用插件提供的navigateTo传值。这种情况 INNERMARKER.url被load周期劫持函数解码后赋值INNERMARKER.url字段为本身,即option[INNERMARKER.url] 等于 INNERMARKER.url
|
|
61
82
|
*/
|
|
62
|
-
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1)
|
|
83
|
+
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面生命周期 */
|
|
63
84
|
function onLoadReceivedDataHandle(
|
|
64
85
|
this: PageInstance,
|
|
65
86
|
option: Record<typeof INNERMARKER.url, string>,
|
|
@@ -80,32 +101,12 @@ function onLoadReceivedDataHandle(
|
|
|
80
101
|
|
|
81
102
|
this.setData(option);
|
|
82
103
|
}
|
|
83
|
-
|
|
84
|
-
// function isPageInstance(ins: Instance): ins is PageInstance & InstanceCustomFields {
|
|
85
|
-
// return (ins as PageInstance).route !== undefined;
|
|
86
|
-
// }
|
|
87
|
-
/**
|
|
88
|
-
* 验证path是否正确
|
|
89
|
-
* @param path - 配置路径
|
|
90
|
-
* @returns
|
|
91
|
-
*/
|
|
92
|
-
// function pathCheck(path: string | undefined) {
|
|
93
|
-
// return function(this: Instance) {
|
|
94
|
-
// if (isPageInstance(this)) {
|
|
95
|
-
// const route = this.route;
|
|
96
|
-
// if (route !== path) {
|
|
97
|
-
// throw Error(
|
|
98
|
-
// `[ /${route} ] DefinedComponent的配置字段path值错误,应为: /${route}`,
|
|
99
|
-
// );
|
|
100
|
-
// }
|
|
101
|
-
// }
|
|
102
|
-
// };
|
|
103
|
-
// }
|
|
104
|
+
|
|
104
105
|
/**
|
|
105
106
|
* 针对通过 navigateTo传过来的数据对组件load周期传入数据解析
|
|
106
107
|
* @param option - option中的url是拼接了encodeURIComponent转码的data对象的,key为INNERMARKER.url
|
|
107
108
|
*/
|
|
108
|
-
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1)
|
|
109
|
+
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试load */
|
|
109
110
|
function loadReceivedDataHandle(
|
|
110
111
|
this: PageInstance,
|
|
111
112
|
option: Record<typeof INNERMARKER.url, string>,
|
|
@@ -125,8 +126,12 @@ function loadReceivedDataHandle(
|
|
|
125
126
|
/**
|
|
126
127
|
* 劫持指定配置字段
|
|
127
128
|
*/
|
|
128
|
-
|
|
129
|
-
|
|
129
|
+
function hijack<T extends FinalOptionsOfComponent[keyof FinalOptionsOfComponent]>(
|
|
130
|
+
config: T,
|
|
131
|
+
field: keyof T,
|
|
132
|
+
before: Func[],
|
|
133
|
+
// after: Func[] = [],
|
|
134
|
+
) {
|
|
130
135
|
// @ts-ignore 隐式索引
|
|
131
136
|
const originalFunc: Func | undefined = config[field];
|
|
132
137
|
|
|
@@ -136,7 +141,7 @@ function hijack(config: object, field: string, before: Func[] = [], after: Func[
|
|
|
136
141
|
|
|
137
142
|
originalFunc && originalFunc.apply(this, args);
|
|
138
143
|
|
|
139
|
-
after.forEach(func => func.call(this, ...args));
|
|
144
|
+
// after.forEach(func => func.call(this, ...args));
|
|
140
145
|
};
|
|
141
146
|
|
|
142
147
|
return;
|
|
@@ -145,9 +150,7 @@ function hijack(config: object, field: string, before: Func[] = [], after: Func[
|
|
|
145
150
|
/**
|
|
146
151
|
* 报错的形式避免输入字段和内部字段冲突,保证config下不包含内部预定字段(列表)
|
|
147
152
|
*/
|
|
148
|
-
|
|
149
|
-
function InternalFieldProtection(config: object | undefined, keys: string[]) {
|
|
150
|
-
if (!config) return;
|
|
153
|
+
function InternalFieldProtection(config: object, keys: string[]) {
|
|
151
154
|
const methodsConfigKeys = Object.keys(config);
|
|
152
155
|
for (const key of keys) {
|
|
153
156
|
if (methodsConfigKeys.includes(key)) {
|
|
@@ -174,7 +177,6 @@ function funcOptionsHandle(
|
|
|
174
177
|
isPage: boolean | undefined,
|
|
175
178
|
funcOptions: FuncOptions,
|
|
176
179
|
) {
|
|
177
|
-
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
|
|
178
180
|
if (isPage) {
|
|
179
181
|
// 页面时 生命周期方法(即 on 开头的方法),(https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/component.html)
|
|
180
182
|
!(isEmptyObject(funcOptions.pageLifetimes))
|
|
@@ -182,7 +184,7 @@ function funcOptionsHandle(
|
|
|
182
184
|
} else {
|
|
183
185
|
// 组件时
|
|
184
186
|
!(isEmptyObject(funcOptions.pageLifetimes))
|
|
185
|
-
&& _funcOptionsHandle(finalOptionsForComponent.pageLifetimes
|
|
187
|
+
&& _funcOptionsHandle(finalOptionsForComponent.pageLifetimes, funcOptions.pageLifetimes);
|
|
186
188
|
}
|
|
187
189
|
funcOptions.lifetimes && _funcOptionsHandle(finalOptionsForComponent.lifetimes ||= {}, funcOptions.lifetimes);
|
|
188
190
|
|
|
@@ -218,12 +220,17 @@ function otherFieldsHandle(
|
|
|
218
220
|
for (const key in rootComponentOptions) {
|
|
219
221
|
// @ts-ignore 隐式索引
|
|
220
222
|
const config = rootComponentOptions[key];
|
|
221
|
-
if (
|
|
222
|
-
//
|
|
223
|
+
if (Array.isArray(config) === true) {
|
|
224
|
+
// "behaviors" || "externalClasses"是数组
|
|
225
|
+
// @ts-ignore 只有 behaviors 和 externalClasses, 且都默认为[]
|
|
223
226
|
finalOptions[key].push(...config);
|
|
224
|
-
} else {
|
|
227
|
+
} else if (typeof config === "object") {
|
|
225
228
|
// @ts-ignore 隐式索引
|
|
226
229
|
Object.assign(finalOptions[key] ||= {}, config);
|
|
230
|
+
} else {
|
|
231
|
+
// 函数字段有 根组件有 `export` 子组件无此字段
|
|
232
|
+
// @ts-ignore 隐式索引
|
|
233
|
+
finalOptions[key] = config;
|
|
227
234
|
}
|
|
228
235
|
}
|
|
229
236
|
}
|
|
@@ -345,12 +352,13 @@ export function collectOptionsForComponent(
|
|
|
345
352
|
const rootComponentOption = defineComponentOption.rootComponent;
|
|
346
353
|
const subComponentsList = defineComponentOption.subComponents;
|
|
347
354
|
|
|
348
|
-
const finalOptionsForComponent: FinalOptionsOfComponent = merge(instanceConfig.injectInfo
|
|
355
|
+
const finalOptionsForComponent: FinalOptionsOfComponent = merge({ ...instanceConfig.injectInfo }, {
|
|
349
356
|
observers: {},
|
|
350
357
|
data: {},
|
|
351
358
|
methods: {},
|
|
352
359
|
behaviors: [BStore, BComputedAndWatch],
|
|
353
360
|
externalClasses: [],
|
|
361
|
+
pageLifetimes: {},
|
|
354
362
|
});
|
|
355
363
|
|
|
356
364
|
/**
|
|
@@ -369,23 +377,28 @@ export function collectOptionsForComponent(
|
|
|
369
377
|
if (subComponentsList && !isEmptyObject(subComponentsList)) {
|
|
370
378
|
subComponentsHandle(finalOptionsForComponent, subComponentsList, funcOptions);
|
|
371
379
|
}
|
|
372
|
-
|
|
373
|
-
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
|
|
380
|
+
|
|
374
381
|
funcOptionsHandle(finalOptionsForComponent, rootComponentOption?.isPage, funcOptions);
|
|
375
382
|
|
|
376
383
|
InternalFieldProtection(finalOptionsForComponent.methods, ["disposer"]);
|
|
377
384
|
|
|
378
385
|
// 对页面传入参数进行处理 老框架劫持页面methods.onLoad,新框架劫持页面pageLifetimes.load
|
|
379
|
-
|
|
386
|
+
|
|
380
387
|
finalOptionsForComponent.isPage
|
|
381
|
-
&& hijack(finalOptionsForComponent.pageLifetimes
|
|
388
|
+
&& hijack(finalOptionsForComponent.pageLifetimes, "load", [loadReceivedDataHandle]);
|
|
382
389
|
|
|
383
|
-
|
|
384
|
-
|
|
390
|
+
hijack(
|
|
391
|
+
finalOptionsForComponent.methods,
|
|
392
|
+
"onLoad",
|
|
393
|
+
[onLoadReceivedDataHandle],
|
|
394
|
+
);
|
|
385
395
|
|
|
386
|
-
|
|
396
|
+
hijack(
|
|
397
|
+
finalOptionsForComponent.lifetimes!,
|
|
398
|
+
"attached",
|
|
399
|
+
[isPageCheck(rootComponentOption?.isPage)],
|
|
400
|
+
);
|
|
387
401
|
|
|
388
|
-
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
|
|
389
402
|
finalOptionsForComponent.isPage
|
|
390
403
|
// 页面时删除预设的虚拟组件字段
|
|
391
404
|
&& finalOptionsForComponent.options && Reflect.deleteProperty(finalOptionsForComponent.options, "virtualHost");
|
|
@@ -24,7 +24,7 @@ RootComponent()({
|
|
|
24
24
|
});
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
* 2. 没有子组件时,事件参数e可通过WMBaseEvent
|
|
27
|
+
* 2. 没有子组件时,事件参数e可通过WMBaseEvent、WMCustomEvent、Detail、Mark等插件提供的类型快速定义事件类型。
|
|
28
28
|
*/
|
|
29
29
|
RootComponent()({
|
|
30
30
|
events: {
|
|
@@ -122,7 +122,7 @@ type RootDocExpect = {
|
|
|
122
122
|
};
|
|
123
123
|
};
|
|
124
124
|
|
|
125
|
-
// 4 返回EventsDoc
|
|
125
|
+
// 4 返回EventsDoc
|
|
126
126
|
Checking<typeof RootDoc, RootDocExpect, Test.Pass>;
|
|
127
127
|
|
|
128
128
|
/**
|
|
@@ -1,34 +1,31 @@
|
|
|
1
1
|
import type { LifetimesConstraint } from "./LifetimesConstraint";
|
|
2
2
|
|
|
3
|
-
export type LifetimesOption
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
// 页面关闭lifetimes字段(其实也可以开启)
|
|
34
|
-
: unknown;
|
|
3
|
+
export type LifetimesOption = {
|
|
4
|
+
/**
|
|
5
|
+
* 在原生类型上增加了beforeCreate周期
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* RootComponent()({
|
|
9
|
+
* lifetimes: {
|
|
10
|
+
* beforeCreate(opitons) {
|
|
11
|
+
* opitons;//为最终进入Component的配置对象
|
|
12
|
+
* },
|
|
13
|
+
* created() {
|
|
14
|
+
* },
|
|
15
|
+
* attached() {
|
|
16
|
+
* },
|
|
17
|
+
* ready() {
|
|
18
|
+
* },
|
|
19
|
+
* detached() {
|
|
20
|
+
* },
|
|
21
|
+
* error(err) {
|
|
22
|
+
* err.cause;
|
|
23
|
+
* },
|
|
24
|
+
* moved() {
|
|
25
|
+
* },
|
|
26
|
+
* },
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
lifetimes?: LifetimesConstraint;
|
|
31
|
+
};
|
|
@@ -11,13 +11,7 @@ RootComponent()({
|
|
|
11
11
|
err.message;
|
|
12
12
|
},
|
|
13
13
|
moved() {},
|
|
14
|
-
// @ts-expect-error 1
|
|
14
|
+
// @ts-expect-error 1 错误的生命周期字段报错
|
|
15
15
|
xxx() {},
|
|
16
16
|
},
|
|
17
17
|
});
|
|
18
|
-
|
|
19
|
-
RootComponent()({
|
|
20
|
-
isPage: true,
|
|
21
|
-
// @ts-expect-error 2 页面时未开启此字段
|
|
22
|
-
lifetimes: {},
|
|
23
|
-
});
|
|
@@ -6,9 +6,6 @@ export type PageLifetimesOption<TIsPage extends boolean, PropertiesDoc extends o
|
|
|
6
6
|
TIsPage,
|
|
7
7
|
false,
|
|
8
8
|
{
|
|
9
|
-
/**
|
|
10
|
-
* 比官方定义新增load周期,发生在页面onLoad事件后
|
|
11
|
-
*/
|
|
12
9
|
pageLifetimes?: ComputeIntersection<
|
|
13
10
|
// 官方组件页面生命周期
|
|
14
11
|
& Partial<WMCompPageLifetimes>
|
|
@@ -17,7 +14,7 @@ export type PageLifetimesOption<TIsPage extends boolean, PropertiesDoc extends o
|
|
|
17
14
|
* 周期发生在组件attached之后,页面onLoad之前,要求组件为同步组件
|
|
18
15
|
* 最低基础库: `3.0.2`
|
|
19
16
|
*/
|
|
20
|
-
load?: (props
|
|
17
|
+
load?: (props?: object) => void;
|
|
21
18
|
}
|
|
22
19
|
>;
|
|
23
20
|
},
|
|
@@ -7,16 +7,15 @@ import type { Mock_User } from "../../Properties/test/normalRequired.test";
|
|
|
7
7
|
* 组件时
|
|
8
8
|
*/
|
|
9
9
|
RootComponent()({
|
|
10
|
-
// 1 官方类型 加入load类型(同步组件时触发)
|
|
11
10
|
pageLifetimes: {
|
|
12
11
|
hide() {},
|
|
13
12
|
resize(size) {
|
|
14
13
|
Checking<typeof size, WechatMiniprogram.Page.IResizeOption, Test.Pass>;
|
|
15
14
|
},
|
|
16
15
|
show() {},
|
|
17
|
-
//
|
|
16
|
+
// 1 glass-easel(最低版本库3.0.2)支持的周期函数
|
|
18
17
|
load(obj) {
|
|
19
|
-
Checking<typeof obj, object, Test.Pass>;
|
|
18
|
+
Checking<typeof obj, object | undefined, Test.Pass>;
|
|
20
19
|
},
|
|
21
20
|
},
|
|
22
21
|
});
|
|
@@ -40,7 +39,7 @@ RootComponent()({
|
|
|
40
39
|
},
|
|
41
40
|
// 2 官方是把事件写在methods字段中,更改为写在pageLifetimes字段下
|
|
42
41
|
pageLifetimes: {
|
|
43
|
-
// 3 重写onLoad周期参数props
|
|
42
|
+
// 3 重写onLoad周期参数props的类型(同页面properties定义类型).
|
|
44
43
|
onLoad(props) {
|
|
45
44
|
Checking<
|
|
46
45
|
typeof props,
|
|
@@ -56,5 +55,15 @@ RootComponent()({
|
|
|
56
55
|
onHide() {
|
|
57
56
|
console.log("onHide");
|
|
58
57
|
},
|
|
58
|
+
// onReady
|
|
59
|
+
// onResize
|
|
60
|
+
// onUnload
|
|
61
|
+
// onPageScroll
|
|
62
|
+
// onPullDownRefresh
|
|
63
|
+
// onReachBottom
|
|
64
|
+
// onShareAppMessage
|
|
65
|
+
// onShareTimeline
|
|
66
|
+
// onTabItemTap
|
|
67
|
+
// ...
|
|
59
68
|
},
|
|
60
69
|
});
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Func } from "hry-types/src/Misc/Func";
|
|
2
1
|
import type { WMCompPageLifetimes, WMPageLifetimes } from "../../types/OfficialTypeAlias";
|
|
3
2
|
import type { LifetimesConstraint } from "./Lifetimes/LifetimesConstraint";
|
|
4
3
|
|
|
@@ -11,10 +10,11 @@ type _RootComponentDoc = {
|
|
|
11
10
|
methods?: object;
|
|
12
11
|
events?: object;
|
|
13
12
|
store?: object;
|
|
14
|
-
watch?: Record<string,
|
|
13
|
+
watch?: Record<string, AnyFunction>;
|
|
15
14
|
lifetimes?: LifetimesConstraint;
|
|
16
|
-
pageLifetimes?: Partial<WMCompPageLifetimes & { load:
|
|
15
|
+
pageLifetimes?: Partial<WMCompPageLifetimes & { load: AnyFunction }> | Partial<WMPageLifetimes>;
|
|
17
16
|
externalClasses?: string[];
|
|
17
|
+
export?: () => void; // behaviors 'wx://component-export' 使用
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
// 验证key是否合法
|
|
@@ -24,32 +24,20 @@ type _Validator<O, Doc, ErrKeys = Exclude<keyof O, keyof Doc>> = [ErrKeys] exten
|
|
|
24
24
|
/**
|
|
25
25
|
* RootComponent Api 返回的类型
|
|
26
26
|
* ```ts
|
|
27
|
-
*
|
|
28
|
-
* isPage?: true;
|
|
27
|
+
* isPage?: boolean;
|
|
29
28
|
* properties?: object;
|
|
30
29
|
* data?: object;
|
|
31
|
-
* store?:object;
|
|
32
30
|
* computed?: object;
|
|
33
31
|
* customEvents?: object;
|
|
34
32
|
* methods?: object;
|
|
35
33
|
* events?: object;
|
|
34
|
+
* store?: object;
|
|
35
|
+
* watch?: Record<string, AnyFunction>;
|
|
36
|
+
* lifetimes?: LifetimesConstraint;
|
|
37
|
+
* pageLifetimes?: Partial<WMCompPageLifetimes & { load: AnyFunction }> | Partial<WMPageLifetimes>;
|
|
38
|
+
* export?:AnyFunction
|
|
39
|
+
* externalClasses?: string[];
|
|
36
40
|
* };
|
|
37
41
|
* ```
|
|
38
42
|
*/
|
|
39
43
|
export type RootComponentDoc<O extends _Validator<O, _RootComponentDoc> = _RootComponentDoc> = O;
|
|
40
|
-
|
|
41
|
-
type _RootPageDoc = {
|
|
42
|
-
isPage?: boolean;
|
|
43
|
-
properties?: object;
|
|
44
|
-
data?: object;
|
|
45
|
-
computed?: object;
|
|
46
|
-
customEvents?: object;
|
|
47
|
-
methods?: object;
|
|
48
|
-
events?: object;
|
|
49
|
-
store?: object;
|
|
50
|
-
watch?: Record<string, Func>;
|
|
51
|
-
lifetimes?: LifetimesConstraint;
|
|
52
|
-
pageLifetimes?: Partial<WMPageLifetimes>;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export type RootPageDoc<O extends _Validator<O, _RootPageDoc> = _RootPageDoc> = O;
|
|
@@ -57,7 +57,7 @@ type RootComponentOptions<
|
|
|
57
57
|
& StoreOption<TStore, keyof (PropertiesDoc & DataDoc)>
|
|
58
58
|
& ComputedOption<TComputed, keyof (PropertiesDoc & DataDoc & StoreDoc)>
|
|
59
59
|
& PageLifetimesOption<TIsPage, PropertiesDoc>
|
|
60
|
-
& LifetimesOption
|
|
60
|
+
& LifetimesOption
|
|
61
61
|
& WatchOption<
|
|
62
62
|
& ComputedDoc
|
|
63
63
|
& Required<PropertiesDoc>
|
|
@@ -65,7 +65,7 @@ type RootComponentOptions<
|
|
|
65
65
|
& StoreDoc
|
|
66
66
|
& IInjectStore
|
|
67
67
|
>
|
|
68
|
-
& Partial<Omit<WMCompOtherOption, "pageLifetimes" | "definitionFilter" | "
|
|
68
|
+
& Partial<Omit<WMCompOtherOption, "pageLifetimes" | "definitionFilter" | "observers">>
|
|
69
69
|
& ObserversOption<
|
|
70
70
|
& ComputedDoc
|
|
71
71
|
& Required<PropertiesDoc>
|
|
@@ -5,7 +5,7 @@ import type { ComponentDoc } from "../../DefineComponent/ReturnType/ComponentDoc
|
|
|
5
5
|
type WXMLSign = "wxml";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* 子组件inherit字段约束,key
|
|
8
|
+
* 子组件inherit字段约束,key为构建组件所需的properties字段,类型为根组件数据的key或`WXMLSign`。要求根数据类型为子数据类型的子类型。当key的值来自wxml(循环产生的子数据等情况)时用`WXMLSign`表示。
|
|
9
9
|
* @returns object
|
|
10
10
|
*/
|
|
11
11
|
export type InheritConstraint<AllRootData extends object, TComponentDoc extends ComponentDoc> = {
|
|
@@ -43,9 +43,6 @@ SubComponent<RootDoc, CompDoc>()({
|
|
|
43
43
|
data: {
|
|
44
44
|
aaa_str: "str",
|
|
45
45
|
},
|
|
46
|
-
store: {
|
|
47
|
-
_aaa_SubReactive: () => 123,
|
|
48
|
-
},
|
|
49
46
|
computed: {},
|
|
50
47
|
methods: {
|
|
51
48
|
aaa_SubM() {},
|
|
@@ -68,7 +65,6 @@ SubComponent<RootDoc, CompDoc>()({
|
|
|
68
65
|
Cnum: number;
|
|
69
66
|
// 自身Data
|
|
70
67
|
aaa_str: "str";
|
|
71
|
-
_aaa_SubReactive: 123;
|
|
72
68
|
} & IInjectData
|
|
73
69
|
>,
|
|
74
70
|
Test.Pass
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LifetimesOption } from "../../RootComponent/Lifetimes/LifetimesOption";
|
|
2
2
|
|
|
3
|
-
export type SubLifetimesOption =
|
|
3
|
+
export type SubLifetimesOption = LifetimesOption;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { V } from "hry-types";
|
|
2
2
|
|
|
3
|
-
export type SubStoreOption<TSubStore extends object, legalKeys extends PropertyKey
|
|
3
|
+
export type SubStoreOption<TSubStore extends object, legalKeys extends PropertyKey> = {
|
|
4
4
|
/**
|
|
5
5
|
* 全局响应式数据字段,全局store对应数据变化实例对应数据自动setData。
|
|
6
6
|
* 约束为组件properties字段去除inherit和data的剩余字段和内部字段
|
|
@@ -19,7 +19,8 @@ export type SubStoreOption<TSubStore extends object, legalKeys extends PropertyK
|
|
|
19
19
|
& TSubStore
|
|
20
20
|
& V.IllegalFieldValidator<
|
|
21
21
|
TSubStore,
|
|
22
|
-
legalKeys
|
|
22
|
+
legalKeys,
|
|
23
|
+
// legalKeys | `_${TPrefix}_${string}`,
|
|
23
24
|
0,
|
|
24
25
|
"",
|
|
25
26
|
"与inherit和data字段重复或前缀错误"
|
|
@@ -31,9 +31,7 @@ SubComponent<{
|
|
|
31
31
|
aaa_str: () => user.name,
|
|
32
32
|
// @ts-expect-error 2 与 data 字段重复
|
|
33
33
|
aaa_num: () => user.age,
|
|
34
|
-
// @ts-expect-error 3
|
|
35
|
-
_num: () => user.age,
|
|
36
|
-
// @ts-expect-error 4 超出约束字段
|
|
34
|
+
// @ts-expect-error 3 超出约束字段
|
|
37
35
|
num: () => user.age,
|
|
38
36
|
},
|
|
39
37
|
});
|
|
@@ -19,7 +19,17 @@ SubComponent<{}, DocA>()({
|
|
|
19
19
|
aaa_str: () => user.name,
|
|
20
20
|
|
|
21
21
|
aaa_num: () => user.age,
|
|
22
|
-
//
|
|
23
|
-
_aaa_ddd: () => user.age,
|
|
22
|
+
// 内部字段
|
|
23
|
+
// _aaa_ddd: () => user.age,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
SubComponent<{}, DocA, "a">()({
|
|
28
|
+
store: {
|
|
29
|
+
aaaA_str: () => user.name,
|
|
30
|
+
|
|
31
|
+
aaaA_num: () => user.age,
|
|
32
|
+
// 内部字段
|
|
33
|
+
// _aaaA_ddd: () => user.age,
|
|
24
34
|
},
|
|
25
35
|
});
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { Checking, type Test } from "hry-types";
|
|
2
|
+
import type { ReadonlyDeep } from "hry-types/src/Any/ReadonlyDeep";
|
|
3
|
+
import { type DetailedType, RootComponent, SubComponent } from "../../../..";
|
|
4
|
+
import type { OptionalType } from "../../../RootComponent/Properties/PropertiesConstraint";
|
|
5
|
+
import {
|
|
6
|
+
type Mock_Cart,
|
|
7
|
+
mock_requiredTypes,
|
|
8
|
+
mock_requiredUnion,
|
|
9
|
+
type Mock_User,
|
|
10
|
+
} from "../../../RootComponent/Properties/test/normalRequired.test";
|
|
11
|
+
|
|
12
|
+
const mock_optional = {
|
|
13
|
+
optional_num: {
|
|
14
|
+
type: Number,
|
|
15
|
+
value: 123,
|
|
16
|
+
},
|
|
17
|
+
optional_gender: {
|
|
18
|
+
type: String as DetailedType<"male" | "female">,
|
|
19
|
+
value: "male" as const,
|
|
20
|
+
},
|
|
21
|
+
optional_obj: {
|
|
22
|
+
type: Object as DetailedType<Mock_User>,
|
|
23
|
+
value: {
|
|
24
|
+
id: "id",
|
|
25
|
+
name: "name",
|
|
26
|
+
age: 20,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
optional_objOrNull: {
|
|
30
|
+
type: Object as DetailedType<Mock_User | null>, // 可选类型定义null默认值方可为null
|
|
31
|
+
value: null,
|
|
32
|
+
},
|
|
33
|
+
} satisfies Record<string, OptionalType>;
|
|
34
|
+
|
|
35
|
+
const rootComponent = RootComponent()({
|
|
36
|
+
properties: {
|
|
37
|
+
...mock_requiredTypes,
|
|
38
|
+
...mock_requiredUnion,
|
|
39
|
+
...mock_optional,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
type Root = typeof rootComponent;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* watch properties字段 深度只读, 必传对象字段newValue去除null
|
|
47
|
+
*/
|
|
48
|
+
SubComponent<Root, { properties: { aaa_num: number } }>()({
|
|
49
|
+
watch: {
|
|
50
|
+
// 必传单一字段
|
|
51
|
+
str(newValue, oldValue) {
|
|
52
|
+
Checking<string, typeof newValue, Test.Pass>;
|
|
53
|
+
|
|
54
|
+
Checking<string, typeof oldValue, Test.Pass>;
|
|
55
|
+
},
|
|
56
|
+
num(newValue, oldValue) {
|
|
57
|
+
Checking<number, typeof newValue, Test.Pass>;
|
|
58
|
+
|
|
59
|
+
Checking<number, typeof oldValue, Test.Pass>;
|
|
60
|
+
},
|
|
61
|
+
bool(newValue, oldValue) {
|
|
62
|
+
Checking<boolean, typeof newValue, Test.Pass>;
|
|
63
|
+
|
|
64
|
+
Checking<boolean, typeof oldValue, Test.Pass>;
|
|
65
|
+
},
|
|
66
|
+
arr(newValue, oldValue) {
|
|
67
|
+
newValue; // readonly ReadonlyDeep<unknown>[]
|
|
68
|
+
|
|
69
|
+
oldValue; // readonly ReadonlyDeep<unknown>[]
|
|
70
|
+
|
|
71
|
+
// ts中很多不是错误的错误,写 typeof newValue 结果是错误
|
|
72
|
+
Checking<unknown[], typeof newValue, Test.Fail>;
|
|
73
|
+
|
|
74
|
+
// ts中很多不是错误的错误,写 readonly ReadonlyDeep<unknown>[] 结果是正确的
|
|
75
|
+
Checking<readonly unknown[], readonly ReadonlyDeep<unknown>[], Test.Pass>;
|
|
76
|
+
},
|
|
77
|
+
obj(newValue, oldValue) {
|
|
78
|
+
Checking<object, typeof newValue, Test.Pass>;
|
|
79
|
+
|
|
80
|
+
Checking<object | null, typeof oldValue, Test.Pass>;
|
|
81
|
+
},
|
|
82
|
+
tuple(newValue, oldValue) {
|
|
83
|
+
Checking<readonly [string, number, boolean], typeof newValue, Test.Pass>;
|
|
84
|
+
|
|
85
|
+
Checking<readonly [string, number, boolean], typeof oldValue, Test.Pass>;
|
|
86
|
+
},
|
|
87
|
+
union_str(newValue, oldValue) {
|
|
88
|
+
Checking<"male" | "female", typeof newValue, Test.Pass>;
|
|
89
|
+
|
|
90
|
+
Checking<"male" | "female", typeof oldValue, Test.Pass>;
|
|
91
|
+
},
|
|
92
|
+
union_num(newValue, oldValue) {
|
|
93
|
+
Checking<0 | 1 | 2, typeof newValue, Test.Pass>;
|
|
94
|
+
|
|
95
|
+
Checking<0 | 1 | 2, typeof oldValue, Test.Pass>;
|
|
96
|
+
},
|
|
97
|
+
union_bool(newValue, oldValue) {
|
|
98
|
+
Checking<false | true, typeof newValue, Test.Pass>;
|
|
99
|
+
|
|
100
|
+
Checking<false | true, typeof oldValue, Test.Pass>;
|
|
101
|
+
},
|
|
102
|
+
union_arr(newValue, oldValue) {
|
|
103
|
+
Checking<readonly number[] | readonly string[], typeof newValue, Test.Pass>;
|
|
104
|
+
|
|
105
|
+
Checking<readonly number[] | readonly string[], typeof oldValue, Test.Pass>;
|
|
106
|
+
},
|
|
107
|
+
union_obj(newValue, oldValue) {
|
|
108
|
+
Checking<ReadonlyDeep<Mock_User | Mock_Cart>, typeof newValue, Test.Pass>;
|
|
109
|
+
|
|
110
|
+
Checking<ReadonlyDeep<Mock_User | Mock_Cart | null>, typeof oldValue, Test.Pass>;
|
|
111
|
+
},
|
|
112
|
+
// 必传多类型联合
|
|
113
|
+
union_str_num_bool(newValue, oldValue) {
|
|
114
|
+
Checking<string | number | boolean, typeof newValue, Test.Pass>;
|
|
115
|
+
|
|
116
|
+
Checking<string | number | boolean, typeof oldValue, Test.Pass>;
|
|
117
|
+
},
|
|
118
|
+
union_literalStr_Literalnum(newValue, oldValue) {
|
|
119
|
+
Checking<0 | 1 | 2 | "male" | "female", typeof newValue, Test.Pass>;
|
|
120
|
+
|
|
121
|
+
Checking<0 | 1 | 2 | "male" | "female", typeof oldValue, Test.Pass>;
|
|
122
|
+
},
|
|
123
|
+
union_mockUser_num(newValue, oldValue) {
|
|
124
|
+
Checking<ReadonlyDeep<number | Mock_User>, typeof newValue, Test.Pass>;
|
|
125
|
+
|
|
126
|
+
Checking<ReadonlyDeep<number | Mock_User | null>, typeof oldValue, Test.Pass>;
|
|
127
|
+
},
|
|
128
|
+
// 可选字段
|
|
129
|
+
optional_gender(newValue, oldValue) {
|
|
130
|
+
Checking<"male" | "female", typeof newValue, Test.Pass>;
|
|
131
|
+
|
|
132
|
+
Checking<"male" | "female", typeof oldValue, Test.Pass>;
|
|
133
|
+
},
|
|
134
|
+
optional_num(newValue, oldValue) {
|
|
135
|
+
Checking<number, typeof newValue, Test.Pass>;
|
|
136
|
+
|
|
137
|
+
Checking<number, typeof oldValue, Test.Pass>;
|
|
138
|
+
},
|
|
139
|
+
optional_obj(newValue, oldValue) {
|
|
140
|
+
Checking<ReadonlyDeep<Mock_User>, typeof newValue, Test.Pass>;
|
|
141
|
+
|
|
142
|
+
Checking<ReadonlyDeep<Mock_User | null>, typeof oldValue, Test.Pass>;
|
|
143
|
+
},
|
|
144
|
+
// 对象的二段key
|
|
145
|
+
"optional_obj.age"(newValue, oldValue) {
|
|
146
|
+
Checking<number, typeof newValue, Test.Pass>;
|
|
147
|
+
|
|
148
|
+
Checking<number | undefined, typeof oldValue, Test.Pass>;
|
|
149
|
+
},
|
|
150
|
+
"optional_obj.**"(newValue, oldValue) {
|
|
151
|
+
Checking<ReadonlyDeep<Mock_User>, typeof newValue, Test.Pass>;
|
|
152
|
+
|
|
153
|
+
Checking<ReadonlyDeep<Mock_User | null>, typeof oldValue, Test.Pass>;
|
|
154
|
+
},
|
|
155
|
+
"optional_obj.id"(newValue, oldValue) {
|
|
156
|
+
Checking<string, typeof newValue, Test.Pass>;
|
|
157
|
+
|
|
158
|
+
Checking<string, typeof oldValue, Test.Pass>;
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
});
|
|
@@ -32,7 +32,7 @@ import type { SubMethodsOption } from "./SubMethods/SubMethodsOption";
|
|
|
32
32
|
import type { SubObserversOption } from "./SubObservers/SubObserversOption";
|
|
33
33
|
import type { SubPageLifetimesOption } from "./SubPageLifetimes/SubPageLifetimesOption";
|
|
34
34
|
import type { CreateSubComponentDoc } from "./SubReturnType/CreateSubComponentDoc";
|
|
35
|
-
import type { SubStoreConstraint } from "./SubStore/
|
|
35
|
+
import type { SubStoreConstraint } from "./SubStore/SubStoreConstraint";
|
|
36
36
|
import type { SubStoreOption } from "./SubStore/SubStoreOption";
|
|
37
37
|
import type { SubWatchOption } from "./SubWatch/SubWatchOption";
|
|
38
38
|
|
|
@@ -63,8 +63,7 @@ type Options<
|
|
|
63
63
|
>
|
|
64
64
|
& SubStoreOption<
|
|
65
65
|
TSubStore,
|
|
66
|
-
Exclude<keyof CurrentCompDoc["properties"], (keyof (InheritDoc & SubDataDoc))
|
|
67
|
-
Prefix
|
|
66
|
+
Exclude<keyof CurrentCompDoc["properties"], (keyof (InheritDoc & SubDataDoc))>
|
|
68
67
|
>
|
|
69
68
|
& SubComputedOption<
|
|
70
69
|
TSubComputed,
|
|
@@ -84,7 +83,7 @@ type Options<
|
|
|
84
83
|
& SubStoreDoc
|
|
85
84
|
& IInjectStore
|
|
86
85
|
>
|
|
87
|
-
& Partial<Omit<WMCompOtherOption, "pageLifetimes" | "definitionFilter" | "export" | "observers">>
|
|
86
|
+
& Partial<Omit<WMCompOtherOption, "pageLifetimes" | "definitionFilter" | "export" | "observers" | "relations">>
|
|
88
87
|
& SubObserversOption<
|
|
89
88
|
& SubComputedDoc
|
|
90
89
|
& SubDataDoc
|
|
@@ -11,7 +11,8 @@ function isSameSize(a: object, b: object) {
|
|
|
11
11
|
|
|
12
12
|
// 定义一个辅助函数,用于判断两个函数的代码是否相同
|
|
13
13
|
function isSameCode(a: Function, b: Function) {
|
|
14
|
-
|
|
14
|
+
// 去除空格比较函数字符串
|
|
15
|
+
return a.toString().split(" ").join("") === b.toString().split(" ").join("");
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
// 定义一个辅助函数,用于判断两个日期的时间戳是否相同
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SubDataConstraint.js","sourceRoot":"","sources":["../../../../src/api/SubComponent/SubStore/SubDataConstraint.ts"],"names":[],"mappings":""}
|
|
File without changes
|
|
File without changes
|