annil 1.8.1 → 1.8.3
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/dist/api/DefineComponent/normalizeOptions/computedWatchHandle/index.js +2 -2
- package/dist/api/DefineComponent/normalizeOptions/computedWatchHandle/index.js.map +1 -1
- package/dist/api/SubComponent/SubComponentType.d.ts +1 -1
- package/dist/api/SubComponent/index.d.ts +7 -1
- package/dist/api/SubComponent/index.js.map +1 -1
- package/dist/types/Extra.d.ts +3 -0
- package/dist/types/Extra.js +2 -0
- package/dist/types/Extra.js.map +1 -0
- package/dist/utils/_utils.d.ts +2 -2
- package/dist/utils/_utils.js +2 -2
- package/dist/utils/_utils.js.map +1 -1
- package/dist/utils/debounce.d.ts +2 -1
- package/dist/utils/debounce.js +3 -2
- package/dist/utils/debounce.js.map +1 -1
- package/dist/utils/deepClone.d.ts +1 -1
- package/dist/utils/deepClone.js +2 -2
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/deepEqual.js +7 -8
- package/dist/utils/deepEqual.js.map +1 -1
- package/dist/utils/isEmptyObject.d.ts +3 -2
- package/dist/utils/isEmptyObject.js +6 -5
- package/dist/utils/isEmptyObject.js.map +1 -1
- package/dist/utils/nonNullable.d.ts +7 -0
- package/dist/utils/nonNullable.js +13 -0
- package/dist/utils/nonNullable.js.map +1 -0
- package/package.json +2 -2
- package/src/api/DefineComponent/normalizeOptions/computedWatchHandle/index.ts +2 -2
- package/src/api/RootComponent/Events/test/normal.test.ts +2 -2
- package/src/api/SubComponent/SubComponentType.ts +2 -1
- package/src/api/SubComponent/SubComputed/test/normal.test.ts +8 -0
- package/src/api/SubComponent/SubData/test/normal.test.ts +7 -1
- package/src/api/SubComponent/SubStore/test/normal.test.ts +6 -0
- package/src/api/SubComponent/index.ts +3 -2
- package/src/types/Extra.ts +1 -1
- package/src/utils/_utils.ts +2 -2
- package/src/utils/debounce.ts +3 -2
- package/src/utils/deepClone.ts +2 -2
- package/src/utils/deepEqual.ts +8 -9
- package/src/utils/isEmptyObject.ts +6 -5
- package/src/utils/{assertNonNullable.ts → nonNullable.ts} +6 -1
- package/dist/utils/assertNonNullable.d.ts +0 -2
- package/dist/utils/assertNonNullable.js +0 -8
- package/dist/utils/assertNonNullable.js.map +0 -1
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.8.3](https://github.com/missannil/annil/compare/v1.8.2...v1.8.3) (2024-09-08)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* 为subComponents内部组件类型增加 prefix_isReady?:boolean 字段。 ([e78041d](https://github.com/missannil/annil/commit/e78041d5f151d71c1d45652b0508aa4c2430ecde))
|
|
13
|
+
|
|
14
|
+
## [1.8.2](https://github.com/missannil/annil/compare/v1.8.1...v1.8.2) (2024-09-07)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* 优化_SubComponentType类型,避免接口或类的类型由于无签名照成的报错 ([ab97097](https://github.com/missannil/annil/commit/ab970972717b08138c8438825a1e19f7e3dd7c38))
|
|
20
|
+
|
|
7
21
|
## [1.8.1](https://github.com/missannil/annil/compare/v1.8.0...v1.8.1) (2024-09-07)
|
|
8
22
|
|
|
9
23
|
|
|
@@ -3,9 +3,9 @@ import { computedUpdater } from "./computedUpdater";
|
|
|
3
3
|
import { getPathsValue } from "./getPathsValue";
|
|
4
4
|
import { getPropertiesValue } from "./getPropertiesValue";
|
|
5
5
|
import { initComputedAndGetCache } from "./initComputedAndGetCache";
|
|
6
|
-
import { assertNonNullable } from "../../../../utils/assertNonNullable";
|
|
7
6
|
import { deepClone } from "../../../../utils/deepClone";
|
|
8
7
|
import { isEmptyObject } from "../../../../utils/isEmptyObject";
|
|
8
|
+
import { nonNullable } from "../../../../utils/nonNullable";
|
|
9
9
|
function initWatchOldValue(data, watchConfig) {
|
|
10
10
|
const watchOldValue = {};
|
|
11
11
|
for (const key in watchConfig) {
|
|
@@ -47,7 +47,7 @@ export function computedWatchHandle(options) {
|
|
|
47
47
|
// 在监控多个数据时,参数是多个值
|
|
48
48
|
observersConfig[key] = function (...newValue) {
|
|
49
49
|
originObserversHandle === null || originObserversHandle === void 0 ? void 0 : originObserversHandle.call(this, ...newValue);
|
|
50
|
-
const watchOldValue =
|
|
50
|
+
const watchOldValue = nonNullable(this.data.__watchOldValue__);
|
|
51
51
|
const oldValue = watchOldValue[key];
|
|
52
52
|
if (deepEqual(newValue, oldValue))
|
|
53
53
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/api/DefineComponent/normalizeOptions/computedWatchHandle/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/api/DefineComponent/normalizeOptions/computedWatchHandle/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SelectKeys } from "hry-types/src/Object/_api";
|
|
2
2
|
import type { Composed, CustomEventsTags } from "../RootComponent/CustomEvents/CustomEventsTag";
|
|
3
3
|
type _SubComponentType = {
|
|
4
|
-
[k in string]: string | number | bigint | boolean | symbol | null | Record<string,
|
|
4
|
+
[k in string]: string | number | bigint | boolean | symbol | null | Record<string, any> | unknown[] | CustomEventsTags;
|
|
5
5
|
};
|
|
6
6
|
type _Validator<O, ErrKeys = Exclude<keyof O, SelectKeys<O, Composed, "contains->">>> = [ErrKeys] extends [never] ? _SubComponentType : `${ErrKeys & string} 不是穿透事件`;
|
|
7
7
|
/**
|
|
@@ -3,6 +3,7 @@ import type { EmptyObject } from "hry-types/src/Misc/EmptyObject";
|
|
|
3
3
|
import type { Func } from "hry-types/src/Misc/Func";
|
|
4
4
|
import type { RequiredKeys } from "hry-types/src/Object/RequiredKeys";
|
|
5
5
|
import type { ComputeObject } from "../../types/ComputeObj";
|
|
6
|
+
import type { Extra } from "../../types/Extra";
|
|
6
7
|
import type { GetComponentPrefix } from "../../types/GetComponentPrefix";
|
|
7
8
|
import type { InnerFields } from "../../types/InnerData";
|
|
8
9
|
import type { WMCompOtherOption } from "../../types/OfficialTypeAlias";
|
|
@@ -40,7 +41,12 @@ import type { SubWatchOption } from "./SubWatch/SubWatchOption";
|
|
|
40
41
|
type Options<RootDoc extends RootComponentType, IsPage extends boolean, CurrentCompDoc extends ComponentType, 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, CompDocKeys extends PropertyKey = keyof CurrentCompDoc["properties"]> = SubInheritOption<TInherit, CompDocKeys> & SubDataOption<TSubData, Exclude<CompDocKeys, (keyof InheritDoc)> | InnerFields<Prefix>> & SubStoreOption<TSubStore, Exclude<CompDocKeys, (keyof (InheritDoc & SubDataDoc))> | InnerFields<Prefix>> & SubComputedOption<TSubComputed, Exclude<CompDocKeys, (keyof (InheritDoc & SubDataDoc & SubStoreDoc))> | InnerFields<Prefix>, {
|
|
41
42
|
data: ComputeObject<AllRootDataDoc & Replace<SubComputedDoc, Required<CurrentCompDoc["properties"]>> & SubStoreDoc & SubDataDoc & IInjectAllData>;
|
|
42
43
|
}> & SubEventsOption<TEvents, SubEventsDoc, keyof SubEventsConstraint<CurrentCompDoc>> & SubMethodsOption<TSubMethods, Prefix, keyof (CurrentCompDoc["customEvents"] & SubEventsDoc)> & SubPageLifetimesOption<IsPage, NonNullable<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"], Replace<SubDataDoc, Required<CurrentCompDoc["properties"]>>, AllRootDataDoc & Replace<SubDataDoc & SubComputedDoc & SubStoreDoc, Required<CurrentCompDoc["properties"]>>, NonNullable<RootDoc["customEvents"]>, SubStoreDoc>>;
|
|
43
|
-
type SubComponentConstructor<TRootDoc extends RootComponentType, TOriginalCompDoc extends ComponentType, TSupplementalPrefix extends string = "", IsPage extends boolean = TRootDoc["isPage"] extends true ? true : false, CurrentPrefix extends string = `${GetComponentPrefix<TOriginalCompDoc>}${Capitalize<TSupplementalPrefix>}`, CurrentCompDoc extends ComponentType = IfExtends<TSupplementalPrefix, "", TOriginalCompDoc
|
|
44
|
+
type SubComponentConstructor<TRootDoc extends RootComponentType, TOriginalCompDoc extends ComponentType, TSupplementalPrefix extends string = "", IsPage extends boolean = TRootDoc["isPage"] extends true ? true : false, CurrentPrefix extends string = `${GetComponentPrefix<TOriginalCompDoc>}${Capitalize<TSupplementalPrefix>}`, CurrentCompDoc extends ComponentType = IfExtends<TSupplementalPrefix, "", TOriginalCompDoc & {
|
|
45
|
+
properties: Extra<CurrentPrefix>;
|
|
46
|
+
}, // 为文档增加格外字段
|
|
47
|
+
ReplacePrefix<TOriginalCompDoc & {
|
|
48
|
+
properties: Extra<CurrentPrefix>;
|
|
49
|
+
}, CurrentPrefix>>, AllRootDataDoc extends object = Required<TRootDoc["properties"]> & TRootDoc["data"] & TRootDoc["computed"] & TRootDoc["store"]> = <TInherit extends InheritConstraint<AllRootDataDoc, CurrentCompDoc>, TSubData extends SubDataConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof InheritDoc> & Record<InnerFields<CurrentPrefix>, unknown>>, TSubStore extends SubStoreConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof (InheritDoc & SubDataDoc)> & Record<InnerFields<CurrentPrefix>, unknown>>, TEvents extends SubEventsConstraint<CurrentCompDoc>, TSubComputed extends SubComputedConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof (InheritDoc & SubDataDoc & SubStoreDoc)> & Record<InnerFields<CurrentPrefix>, unknown>>, TSubMethods extends SubMethodsConstraint = {}, InheritDoc extends object = IfExtends<InheritConstraint<AllRootDataDoc, CurrentCompDoc>, TInherit, {}, TInherit>, SubDataDoc extends object = IfExtends<SubDataConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof InheritDoc> & Record<InnerFields<CurrentPrefix>, unknown>>, TSubData, {}, TSubData>, SubStoreDoc extends object = IfExtends<SubStoreConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof (InheritDoc & SubDataDoc)> & Record<InnerFields<CurrentPrefix>, unknown>>, TSubStore, {}, {
|
|
44
50
|
[k in keyof TSubStore]: ReturnType<NonNullable<TSubStore[k]>>;
|
|
45
51
|
}>, SubComputedDoc extends object = IfExtends<SubComputedConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof (InheritDoc & SubDataDoc & SubStoreDoc)> & Record<InnerFields<CurrentPrefix>, unknown>>, TSubComputed, {}, GetSubComputedDoc<TSubComputed>>, SubEventsDoc extends object = IfExtends<SubEventsConstraint<CurrentCompDoc>, TEvents, {}, TEvents>, SubMethodsDoc extends object = TSubMethods, MissingRequiredField extends PropertyKey = Exclude<RequiredKeys<NonNullable<CurrentCompDoc["properties"]>>, keyof (InheritDoc & SubDataDoc & SubStoreDoc & IfExtends<SubComputedConstraint<Omit<Required<CurrentCompDoc["properties"]>, keyof (InheritDoc & SubDataDoc & SubStoreDoc)>>, TSubComputed, {}, GetSubComputedDoc<TSubComputed>>)>>(options: Options<TRootDoc, IsPage, CurrentCompDoc, CurrentPrefix, AllRootDataDoc, TInherit, TSubData, TSubStore, TSubComputed, TEvents, TSubMethods, InheritDoc, SubDataDoc, SubStoreDoc, SubComputedDoc, SubEventsDoc, SubMethodsDoc>) => CreateSubComponentDoc<NonNullable<CurrentCompDoc["customEvents"]>, SubEventsDoc, MissingRequiredField>;
|
|
46
52
|
/**
|
|
@@ -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":"AA4OA;;;GAGG;AACH,MAAM,UAAU,YAAY;IAK1B,8DAA8D;IAC9D,OAAO,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,OAAkC,CAAQ,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Extra.js","sourceRoot":"","sources":["../../src/types/Extra.ts"],"names":[],"mappings":""}
|
package/dist/utils/_utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { assertNonNullable } from "./assertNonNullable";
|
|
2
1
|
import { debounce } from "./debounce";
|
|
3
2
|
import { deepClone } from "./deepClone";
|
|
4
3
|
import { deepEqual } from "./deepEqual";
|
|
5
4
|
import { isEmptyObject } from "./isEmptyObject";
|
|
5
|
+
import { nonNullable } from "./nonNullable";
|
|
6
6
|
import { throttle } from "./throttle";
|
|
7
|
-
export {
|
|
7
|
+
export { debounce, deepClone, deepEqual, isEmptyObject, nonNullable, throttle };
|
package/dist/utils/_utils.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { assertNonNullable } from "./assertNonNullable";
|
|
2
1
|
import { debounce } from "./debounce";
|
|
3
2
|
import { deepClone } from "./deepClone";
|
|
4
3
|
import { deepEqual } from "./deepEqual";
|
|
5
4
|
import { isEmptyObject } from "./isEmptyObject";
|
|
5
|
+
import { nonNullable } from "./nonNullable";
|
|
6
6
|
import { throttle } from "./throttle";
|
|
7
|
-
export {
|
|
7
|
+
export { debounce, deepClone, deepEqual, isEmptyObject, nonNullable, throttle };
|
|
8
8
|
//# sourceMappingURL=_utils.js.map
|
package/dist/utils/_utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_utils.js","sourceRoot":"","sources":["../../src/utils/_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"_utils.js","sourceRoot":"","sources":["../../src/utils/_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/utils/debounce.d.ts
CHANGED
package/dist/utils/debounce.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
1
|
/**
|
|
3
2
|
* 防抖函数
|
|
4
|
-
*
|
|
3
|
+
* 注意 需要在tsconfig.json的types中添加"node",否则NodeJS.Timeout会报错
|
|
4
|
+
* 例如 应用在输入框输入时,只有在输入完成并delay后,才会触发搜索,
|
|
5
5
|
* @param func
|
|
6
6
|
* @param delay
|
|
7
7
|
* @returns
|
|
8
8
|
*/
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
10
|
export function debounce(func, delay) {
|
|
10
11
|
let timeoutId = null;
|
|
11
12
|
return (...args) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../src/utils/debounce.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../src/utils/debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,8DAA8D;AAC9D,MAAM,UAAU,QAAQ,CAAoC,IAAO,EAAE,KAAa;IAChF,IAAI,SAAS,GAA0B,IAAI,CAAC;IAE5C,OAAO,CAAC,GAAG,IAAmB,EAAQ,EAAE;QACtC,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/utils/deepClone.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 数组和普通对象的深度克隆,原型相同
|
|
3
3
|
*/
|
|
4
4
|
export function deepClone(value) {
|
|
5
|
-
if (typeof value !== "object" || value === null
|
|
5
|
+
if (typeof value !== "object" || value === null) {
|
|
6
6
|
return value;
|
|
7
7
|
}
|
|
8
8
|
const clone = (Array.isArray(value) ? [] : {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../../src/utils/deepClone.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,SAAS,CAAI,KAAQ;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../../src/utils/deepClone.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,SAAS,CAAI,KAAQ;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAM,CAAC;IAEpD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/utils/deepEqual.js
CHANGED
|
@@ -3,7 +3,7 @@ function isNonNullObject(value) {
|
|
|
3
3
|
return value !== null && typeof value === "object";
|
|
4
4
|
}
|
|
5
5
|
export function deepEqual(value1, value2) {
|
|
6
|
-
//
|
|
6
|
+
// 两个非对象类型相等或同引用对象的情况。
|
|
7
7
|
if (Object.is(value1, value2)) {
|
|
8
8
|
return true;
|
|
9
9
|
}
|
|
@@ -11,16 +11,15 @@ export function deepEqual(value1, value2) {
|
|
|
11
11
|
if (!isNonNullObject(value1) || !isNonNullObject(value2)) {
|
|
12
12
|
return false;
|
|
13
13
|
}
|
|
14
|
-
//
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
if (value1Keys.length !== value2Keys.length) {
|
|
14
|
+
// 到此两个值都是对象类型。
|
|
15
|
+
const value1Keys = Object.keys(value1);
|
|
16
|
+
// 使用Set提高查找效率。
|
|
17
|
+
const value2KeysSet = new Set(Object.keys(value2));
|
|
18
|
+
if (value1Keys.length !== value2KeysSet.size) {
|
|
20
19
|
return false;
|
|
21
20
|
}
|
|
22
21
|
for (const key of value1Keys) {
|
|
23
|
-
if (!
|
|
22
|
+
if (!value2KeysSet.has(key) || !deepEqual(value1[key], value2[key])) {
|
|
24
23
|
return false;
|
|
25
24
|
}
|
|
26
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepEqual.js","sourceRoot":"","sources":["../../src/utils/deepEqual.ts"],"names":[],"mappings":"AACA,aAAa;AACb,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,MAAe;IACxD,sBAAsB;IACtB,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,qBAAqB;IACrB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,eAAe;IACf,MAAM,
|
|
1
|
+
{"version":3,"file":"deepEqual.js","sourceRoot":"","sources":["../../src/utils/deepEqual.ts"],"names":[],"mappings":"AACA,aAAa;AACb,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,MAAe;IACxD,sBAAsB;IACtB,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,qBAAqB;IACrB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,eAAe;IACf,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,eAAe;IACf,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnD,IAAI,UAAU,CAAC,MAAM,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 判断一个值是否为空的普通对象 `{}`
|
|
3
|
+
* 有symblo和非枚举属性的对象会返回 `false`
|
|
3
4
|
*/
|
|
4
|
-
export function isEmptyObject(
|
|
5
|
-
if (typeof
|
|
6
|
-
||
|
|
5
|
+
export function isEmptyObject(value) {
|
|
6
|
+
if (typeof value !== "object" || value === null || Array.isArray(value) || value instanceof Set || value instanceof Map
|
|
7
|
+
|| value instanceof WeakSet || value instanceof WeakMap) {
|
|
7
8
|
return false;
|
|
8
9
|
}
|
|
9
|
-
return Reflect.ownKeys(
|
|
10
|
+
return Reflect.ownKeys(value).length === 0;
|
|
10
11
|
}
|
|
11
12
|
//# sourceMappingURL=isEmptyObject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isEmptyObject.js","sourceRoot":"","sources":["../../src/utils/isEmptyObject.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"isEmptyObject.js","sourceRoot":"","sources":["../../src/utils/isEmptyObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IACE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,GAAG,IAAI,KAAK,YAAY,GAAG;WAChH,KAAK,YAAY,OAAO,IAAI,KAAK,YAAY,OAAO,EACvD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IfContains } from "hry-types/src/Any/IfContains";
|
|
2
|
+
/**
|
|
3
|
+
* 使用此函数代替!断言
|
|
4
|
+
* @param value 类型中必须包含 null 或 undefined
|
|
5
|
+
* @returns 去除 null 和 undefined 后的类型
|
|
6
|
+
*/
|
|
7
|
+
export declare function nonNullable<T>(value: IfContains<T, null | undefined, T, "参数类型必须包含 null 或 undefined">): NonNullable<T>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 使用此函数代替!断言
|
|
3
|
+
* @param value 类型中必须包含 null 或 undefined
|
|
4
|
+
* @returns 去除 null 和 undefined 后的类型
|
|
5
|
+
*/
|
|
6
|
+
export function nonNullable(value) {
|
|
7
|
+
/* istanbul ignore next */
|
|
8
|
+
if (value === null || value === undefined) {
|
|
9
|
+
throw new Error(`${value} should not be null or undefined`);
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=nonNullable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nonNullable.js","sourceRoot":"","sources":["../../src/utils/nonNullable.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,KAAsE;IAEtE,2BAA2B;IAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kCAAkC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,KAAuB,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "annil",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.3",
|
|
4
4
|
"description": "微信小程序(原生开发)插件",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "src/index.ts",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"tsc": "tsc --watch",
|
|
18
18
|
"test": "jest --watch",
|
|
19
19
|
"build": "tsc -p tsconfig.build.json",
|
|
20
|
-
"check": "eslint . --fix --max-warnings 0 && (dprint check || (dprint fmt && exit 1)) "
|
|
20
|
+
"check": "tsc --noEmit && eslint . --fix --max-warnings 0 && (dprint check || (dprint fmt && exit 1)) "
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@commitlint/config-conventional": "^17.6.5",
|
|
@@ -5,9 +5,9 @@ import { getPathsValue } from "./getPathsValue";
|
|
|
5
5
|
import { getPropertiesValue } from "./getPropertiesValue";
|
|
6
6
|
import { initComputedAndGetCache } from "./initComputedAndGetCache";
|
|
7
7
|
|
|
8
|
-
import { assertNonNullable } from "../../../../utils/assertNonNullable";
|
|
9
8
|
import { deepClone } from "../../../../utils/deepClone";
|
|
10
9
|
import { isEmptyObject } from "../../../../utils/isEmptyObject";
|
|
10
|
+
import { nonNullable } from "../../../../utils/nonNullable";
|
|
11
11
|
import type { Instance } from "../../../RootComponent/Instance/RootComponentInstance";
|
|
12
12
|
import type { FinalOptionsOfComponent } from "..";
|
|
13
13
|
|
|
@@ -68,7 +68,7 @@ export function computedWatchHandle(options: FinalOptionsOfComponent) {
|
|
|
68
68
|
observersConfig[key] = function(this: Instance, ...newValue: unknown[]) {
|
|
69
69
|
originObserversHandle?.call(this, ...newValue);
|
|
70
70
|
|
|
71
|
-
const watchOldValue =
|
|
71
|
+
const watchOldValue = nonNullable(this.data.__watchOldValue__);
|
|
72
72
|
const oldValue = watchOldValue[key];
|
|
73
73
|
|
|
74
74
|
if (deepEqual(newValue, oldValue)) return;
|
|
@@ -10,7 +10,7 @@ import type {
|
|
|
10
10
|
WMBaseEvent,
|
|
11
11
|
WMCustomEvent,
|
|
12
12
|
} from "../../../../types/OfficialTypeAlias";
|
|
13
|
-
import {
|
|
13
|
+
import { nonNullable } from "../../../../utils/nonNullable";
|
|
14
14
|
import type { ComponentType } from "../../../DefineComponent/ReturnType/ComponentType";
|
|
15
15
|
import { RootComponent } from "../..";
|
|
16
16
|
import type { Bubbles, Capture } from "../../CustomEvents/CustomEventsTag";
|
|
@@ -42,7 +42,7 @@ RootComponent()({
|
|
|
42
42
|
) {
|
|
43
43
|
Checking<typeof e.detail, string, Test.Pass>;
|
|
44
44
|
|
|
45
|
-
const markData =
|
|
45
|
+
const markData = nonNullable(e.mark).markData;
|
|
46
46
|
|
|
47
47
|
Checking<typeof markData, { id: string }, Test.Pass>;
|
|
48
48
|
|
|
@@ -48,7 +48,7 @@ SubComponent<{}, CompDoc>()({
|
|
|
48
48
|
},
|
|
49
49
|
methods: {
|
|
50
50
|
aaa_1() {
|
|
51
|
-
// 4 this.data中的data
|
|
51
|
+
// 4 this.data中的data配置数据类型应该与文档类型一致,比如aaa_str的类型为"a" | "b"而非string
|
|
52
52
|
void Checking<
|
|
53
53
|
typeof this.data,
|
|
54
54
|
ComputeIntersection<
|
|
@@ -80,3 +80,9 @@ SubComponent<{ data: { _num: number } }, CompDoc>()({
|
|
|
80
80
|
},
|
|
81
81
|
},
|
|
82
82
|
});
|
|
83
|
+
// data中可写 额外字段 isReady
|
|
84
|
+
SubComponent<{ data: { _num: number } }, CompDoc>()({
|
|
85
|
+
data: {
|
|
86
|
+
aaa_isReady: false,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
@@ -3,6 +3,7 @@ import type { EmptyObject } from "hry-types/src/Misc/EmptyObject";
|
|
|
3
3
|
import type { Func } from "hry-types/src/Misc/Func";
|
|
4
4
|
import type { RequiredKeys } from "hry-types/src/Object/RequiredKeys";
|
|
5
5
|
import type { ComputeObject } from "../../types/ComputeObj";
|
|
6
|
+
import type { Extra } from "../../types/Extra";
|
|
6
7
|
import type { GetComponentPrefix } from "../../types/GetComponentPrefix";
|
|
7
8
|
import type { InnerFields } from "../../types/InnerData";
|
|
8
9
|
import type { WMCompOtherOption } from "../../types/OfficialTypeAlias";
|
|
@@ -125,8 +126,8 @@ type SubComponentConstructor<
|
|
|
125
126
|
CurrentCompDoc extends ComponentType = IfExtends<
|
|
126
127
|
TSupplementalPrefix,
|
|
127
128
|
"",
|
|
128
|
-
TOriginalCompDoc,
|
|
129
|
-
ReplacePrefix<TOriginalCompDoc, CurrentPrefix>
|
|
129
|
+
TOriginalCompDoc & { properties: Extra<CurrentPrefix> }, // 为文档增加格外字段
|
|
130
|
+
ReplacePrefix<TOriginalCompDoc & { properties: Extra<CurrentPrefix> }, CurrentPrefix> // 为文档增加格外字段
|
|
130
131
|
>,
|
|
131
132
|
AllRootDataDoc extends object =
|
|
132
133
|
// rootDoc中的properties是带有可选的,这是为了给使用者(上层组件)提示,而在自身组件实例中并不存在可选状态,故加了Required,正因加了Required使得最终结果不可能为unknown而是`{}`,满足object约束
|
package/src/types/Extra.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export type Extra<Prefix extends string> = { [K in `${Prefix}_isReady`]?: boolean };
|
package/src/utils/_utils.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { assertNonNullable } from "./assertNonNullable";
|
|
2
1
|
import { debounce } from "./debounce";
|
|
3
2
|
import { deepClone } from "./deepClone";
|
|
4
3
|
import { deepEqual } from "./deepEqual";
|
|
5
4
|
import { isEmptyObject } from "./isEmptyObject";
|
|
5
|
+
import { nonNullable } from "./nonNullable";
|
|
6
6
|
import { throttle } from "./throttle";
|
|
7
7
|
|
|
8
|
-
export {
|
|
8
|
+
export { debounce, deepClone, deepEqual, isEmptyObject, nonNullable, throttle };
|
package/src/utils/debounce.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
1
|
/**
|
|
3
2
|
* 防抖函数
|
|
4
|
-
*
|
|
3
|
+
* 注意 需要在tsconfig.json的types中添加"node",否则NodeJS.Timeout会报错
|
|
4
|
+
* 例如 应用在输入框输入时,只有在输入完成并delay后,才会触发搜索,
|
|
5
5
|
* @param func
|
|
6
6
|
* @param delay
|
|
7
7
|
* @returns
|
|
8
8
|
*/
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
10
|
export function debounce<F extends (...args: any[]) => any>(func: F, delay: number): (...args: Parameters<F>) => void {
|
|
10
11
|
let timeoutId: NodeJS.Timeout | null = null;
|
|
11
12
|
|
package/src/utils/deepClone.ts
CHANGED
package/src/utils/deepEqual.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
type PlainObject = Record<string, unknown>;
|
|
2
2
|
// 非null的对象类型
|
|
3
|
-
function isNonNullObject(value: unknown):
|
|
3
|
+
function isNonNullObject(value: unknown): value is PlainObject {
|
|
4
4
|
return value !== null && typeof value === "object";
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
export function deepEqual(value1: unknown, value2: unknown): boolean {
|
|
8
|
-
//
|
|
8
|
+
// 两个非对象类型相等或同引用对象的情况。
|
|
9
9
|
if (Object.is(value1, value2)) {
|
|
10
10
|
return true;
|
|
11
11
|
}
|
|
@@ -13,18 +13,17 @@ export function deepEqual(value1: unknown, value2: unknown): boolean {
|
|
|
13
13
|
if (!isNonNullObject(value1) || !isNonNullObject(value2)) {
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
|
-
//
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
const value2Keys = Object.keys(_value2);
|
|
16
|
+
// 到此两个值都是对象类型。
|
|
17
|
+
const value1Keys = Object.keys(value1);
|
|
18
|
+
// 使用Set提高查找效率。
|
|
19
|
+
const value2KeysSet = new Set(Object.keys(value2));
|
|
21
20
|
|
|
22
|
-
if (value1Keys.length !==
|
|
21
|
+
if (value1Keys.length !== value2KeysSet.size) {
|
|
23
22
|
return false;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
for (const key of value1Keys) {
|
|
27
|
-
if (!
|
|
26
|
+
if (!value2KeysSet.has(key) || !deepEqual(value1[key], value2[key])) {
|
|
28
27
|
return false;
|
|
29
28
|
}
|
|
30
29
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 判断一个值是否为空的普通对象 `{}`
|
|
3
|
+
* 有symblo和非枚举属性的对象会返回 `false`
|
|
3
4
|
*/
|
|
4
|
-
export function isEmptyObject(
|
|
5
|
+
export function isEmptyObject(value: unknown): boolean {
|
|
5
6
|
if (
|
|
6
|
-
typeof
|
|
7
|
-
||
|
|
7
|
+
typeof value !== "object" || value === null || Array.isArray(value) || value instanceof Set || value instanceof Map
|
|
8
|
+
|| value instanceof WeakSet || value instanceof WeakMap
|
|
8
9
|
) {
|
|
9
10
|
return false;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
return Reflect.ownKeys(
|
|
13
|
+
return Reflect.ownKeys(value).length === 0;
|
|
13
14
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { IfContains } from "hry-types/src/Any/IfContains";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* 使用此函数代替!断言
|
|
5
|
+
* @param value 类型中必须包含 null 或 undefined
|
|
6
|
+
* @returns 去除 null 和 undefined 后的类型
|
|
7
|
+
*/
|
|
8
|
+
export function nonNullable<T>(
|
|
4
9
|
value: IfContains<T, null | undefined, T, "参数类型必须包含 null 或 undefined">,
|
|
5
10
|
): NonNullable<T> {
|
|
6
11
|
/* istanbul ignore next */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assertNonNullable.js","sourceRoot":"","sources":["../../src/utils/assertNonNullable.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAC/B,KAAsE;IAEtE,2BAA2B;IAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kCAAkC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,KAAuB,CAAC;AACjC,CAAC"}
|