annil 1.5.3 → 1.5.4
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 +7 -0
- package/README.md +22 -19
- package/dist/api/DefineComponent/collectOptionsForComponent.d.ts +2 -1
- package/dist/api/DefineComponent/collectOptionsForComponent.js +17 -2
- 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 +44 -27
- 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,13 @@
|
|
|
4
4
|
|
|
5
5
|
* 解决DetailedType不接收接口类型的错误 ([ae8acbf](https://github.com/missannil/annil/commit/ae8acbfc2e62f99db565c448ad9253aa549e78bb))
|
|
6
6
|
|
|
7
|
+
## [1.5.4](https://github.com/missannil/annil/compare/v1.5.3...v1.5.4) (2023-12-25)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* isPagecheck ([03f6452](https://github.com/missannil/annil/commit/03f64523dc5f7da32616ec5c0ecfc4f50d4d4b7d))
|
|
13
|
+
|
|
7
14
|
## [1.5.3](https://github.com/missannil/annil/compare/v1.5.2...v1.5.3) (2023-12-22)
|
|
8
15
|
|
|
9
16
|
|
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
32
|
新的组件构建API加入了[computed](./doc/fields/computed.md)、[watch](./doc/fields/watch.md)、[store](./doc/fields/store.md)(基于mobx的全局响应式数据)`等功能,使开发更便捷。
|
|
33
33
|
|
|
34
34
|
- **复杂组件解决方案**
|
|
35
35
|
|
|
36
|
-
新的组件构建方案(根组件 + 子组件(可选)),组件逻辑与wxml
|
|
36
|
+
新的组件构建方案(根组件 + 子组件(可选)),组件逻辑与wxml标签一一对应。解决书写复杂组件时不同组件代码耦合的问题。
|
|
37
|
+
- **专为typescript开发设计**
|
|
38
|
+
|
|
39
|
+
annil是专为TS开发而设计的,通过类型提示、约束、检测,提升开发效率,避免运行时错误的发生。使用js开发时可忽略开发文档中的ts部分。
|
|
37
40
|
|
|
38
41
|
- **组件类型概念**
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
新的组件构建API(DefineComponent)返回的类型叫组件(文档)类型,好比传统组件(UI)库为每个组件书写的使用文档,在做为子组件构建新组件(页面)时,子组件API(SubComponent)要求使用者输入组件类型,在定义选项字段时,会得到类型提示、约束和检测。这样实现了一个页面中所有子组件之间的类型耦合,无论组件嵌套多少层,无论哪层组件数据类型发生改变,所有相关组件类型都会得到感知。当您增改、重构代码时,只要无类型报错(tsc --noEmit --watch)就不会有运行时报错的心智负担。
|
|
41
44
|
|
|
42
|
-
-
|
|
45
|
+
- **类型约束书写规范**
|
|
43
46
|
|
|
44
|
-
js
|
|
47
|
+
annil通过类型来约束代码书写规范,例如在js开发时可以通过`this.setData({...})`新增一个未在data字段中定义的数据或修改properties中定义的数据,这显然是不对的。新API通过类型报错的形式约束[书写规范](./doc/designIdea.md),在特定情形下(例如测试)你可以通过 `//@ts-ignore`或`as any`关闭类型检测。
|
|
45
48
|
|
|
46
49
|
- **高兼容性**
|
|
47
50
|
|
|
48
|
-
annil提供的API都是原生API
|
|
51
|
+
annil提供的API都是原生API的语法糖,不具有强制性和侵入性,可渐进性使用或重构代码。
|
|
49
52
|
|
|
50
53
|
- **类型修补**
|
|
51
54
|
|
|
52
|
-
官方类型(miniprogram-api-typings)存在更新不及时等问题,annil
|
|
53
|
-
这些类型都采用ES模块化,不会污染全局类型。
|
|
55
|
+
官方类型(miniprogram-api-typings)存在更新不及时等问题,annil提供了新的类型方便开发,这些类型都采用ES模块化,不会污染全局类型。
|
|
54
56
|
|
|
55
|
-
-
|
|
57
|
+
- **适配第三方库类型**
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
第三方组件库一般都是以文档的形式对组件说明,插件提供了泛型[GenerateDoc](./src/types/GenerateDoc.ts),可根据组件文档快速书写组件类型,使第三方组件融入组件构建模型,后续插件会陆续添加原生(Wm)和常用第三方组件库(Vant)类型。
|
|
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,18 @@ 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
|
+
[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";
|
|
@@ -27,4 +27,5 @@ export type FinalOptionsOfComponent = {
|
|
|
27
27
|
lifetimes?: LifetimesConstraint;
|
|
28
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)
|
|
@@ -78,12 +89,15 @@ function funcFieldsCollect(options, funcOptions) {
|
|
|
78
89
|
function otherFieldsHandle(finalOptions, rootComponentOptions) {
|
|
79
90
|
for (const key in rootComponentOptions) {
|
|
80
91
|
const config = rootComponentOptions[key];
|
|
81
|
-
if (
|
|
92
|
+
if (Array.isArray(config) === true) {
|
|
82
93
|
finalOptions[key].push(...config);
|
|
83
94
|
}
|
|
84
|
-
else {
|
|
95
|
+
else if (typeof config === "object") {
|
|
85
96
|
Object.assign(finalOptions[key] || (finalOptions[key] = {}), config);
|
|
86
97
|
}
|
|
98
|
+
else {
|
|
99
|
+
finalOptions[key] = config;
|
|
100
|
+
}
|
|
87
101
|
}
|
|
88
102
|
}
|
|
89
103
|
function eventsHandle(methods, eventsConfig) {
|
|
@@ -170,6 +184,7 @@ export function collectOptionsForComponent(defineComponentOption) {
|
|
|
170
184
|
finalOptionsForComponent.isPage
|
|
171
185
|
&& hijack(finalOptionsForComponent.pageLifetimes || (finalOptionsForComponent.pageLifetimes = {}), "load", [loadReceivedDataHandle], []);
|
|
172
186
|
hijack(finalOptionsForComponent.methods, "onLoad", [onLoadReceivedDataHandle], []);
|
|
187
|
+
hijack(finalOptionsForComponent.lifetimes, "attached", [isPageCheck(rootComponentOption === null || rootComponentOption === void 0 ? void 0 : rootComponentOption.isPage)], []);
|
|
173
188
|
finalOptionsForComponent.isPage
|
|
174
189
|
&& finalOptionsForComponent.options && Reflect.deleteProperty(finalOptionsForComponent.options, "virtualHost");
|
|
175
190
|
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
|
@@ -52,6 +52,28 @@ export type FinalOptionsOfComponent = {
|
|
|
52
52
|
pageLifetimes?: PageLifetimesOption<false, object>["pageLifetimes"];
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* 劫持attached,根据this.route做判断 isPage值是否正确
|
|
57
|
+
*/
|
|
58
|
+
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
|
|
59
|
+
export function isPageCheck(isPage: boolean | undefined) {
|
|
60
|
+
return function(this: Instance) {
|
|
61
|
+
const route = (this as PageInstance).route as string | undefined;
|
|
62
|
+
if (route && isPage !== true) {
|
|
63
|
+
// 页面isPage值错误
|
|
64
|
+
throw Error(
|
|
65
|
+
`页面 /${route} 中, RootComponent构建页面时,isPage字段值应为 true`,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
if (!route && isPage !== false && isPage !== undefined) {
|
|
69
|
+
// 组件写了isPage = true
|
|
70
|
+
throw Error(
|
|
71
|
+
`组件 ${this.is} 中 RootComponent构建组件时,可不写isPage字段或值为 false`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
55
77
|
/**
|
|
56
78
|
* 原生Component会对传入的对象字段匹配的properties字段setData赋值。不符合字段或Page时不会赋值。
|
|
57
79
|
* 此函数为给实例setData赋值,默认传递值与properties相符(ts类型安全)。
|
|
@@ -80,27 +102,7 @@ function onLoadReceivedDataHandle(
|
|
|
80
102
|
|
|
81
103
|
this.setData(option);
|
|
82
104
|
}
|
|
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
|
-
// }
|
|
105
|
+
|
|
104
106
|
/**
|
|
105
107
|
* 针对通过 navigateTo传过来的数据对组件load周期传入数据解析
|
|
106
108
|
* @param option - option中的url是拼接了encodeURIComponent转码的data对象的,key为INNERMARKER.url
|
|
@@ -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
|
}
|
|
@@ -381,9 +388,19 @@ export function collectOptionsForComponent(
|
|
|
381
388
|
&& hijack(finalOptionsForComponent.pageLifetimes ||= {}, "load", [loadReceivedDataHandle], []);
|
|
382
389
|
|
|
383
390
|
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
|
|
384
|
-
hijack(
|
|
385
|
-
|
|
386
|
-
|
|
391
|
+
hijack(
|
|
392
|
+
finalOptionsForComponent.methods,
|
|
393
|
+
"onLoad",
|
|
394
|
+
[onLoadReceivedDataHandle],
|
|
395
|
+
[],
|
|
396
|
+
);
|
|
397
|
+
|
|
398
|
+
hijack(
|
|
399
|
+
finalOptionsForComponent.lifetimes!,
|
|
400
|
+
"attached",
|
|
401
|
+
[isPageCheck(rootComponentOption?.isPage)],
|
|
402
|
+
[],
|
|
403
|
+
);
|
|
387
404
|
|
|
388
405
|
/* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
|
|
389
406
|
finalOptionsForComponent.isPage
|
|
@@ -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
|