annil 1.8.3 → 1.9.0

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/api/DefineComponent/normalizeOptions/hijackHandle/pagePathCheck.d.ts +2 -0
  4. package/dist/api/DefineComponent/normalizeOptions/hijackHandle/pagePathCheck.js +8 -0
  5. package/dist/api/DefineComponent/normalizeOptions/hijackHandle/pagePathCheck.js.map +1 -0
  6. package/dist/api/DefineComponent/normalizeOptions/index.d.ts +1 -2
  7. package/dist/api/DefineComponent/normalizeOptions/index.js +5 -1
  8. package/dist/api/DefineComponent/normalizeOptions/index.js.map +1 -1
  9. package/dist/api/{navigateTo.d.ts → wxSugar.d.ts} +1 -0
  10. package/dist/api/{navigateTo.js → wxSugar.js} +10 -1
  11. package/dist/api/wxSugar.js.map +1 -0
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +2 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/utils/applyDebounceAndThrottle.d.ts +7 -0
  16. package/dist/utils/applyDebounceAndThrottle.js +28 -0
  17. package/dist/utils/applyDebounceAndThrottle.js.map +1 -0
  18. package/dist/utils/debounce.d.ts +5 -3
  19. package/dist/utils/debounce.js +6 -6
  20. package/dist/utils/debounce.js.map +1 -1
  21. package/dist/utils/throttle.js +2 -1
  22. package/dist/utils/throttle.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/api/DefineComponent/normalizeOptions/hijackHandle/pagePathCheck.ts +9 -0
  25. package/src/api/DefineComponent/normalizeOptions/index.ts +8 -4
  26. package/src/api/{navigateTo.ts → wxSugar.ts} +12 -0
  27. package/src/index.ts +2 -1
  28. package/src/utils/applyDebounceAndThrottle.ts +31 -0
  29. package/src/utils/debounce.ts +8 -6
  30. package/src/utils/throttle.ts +3 -2
  31. package/dist/api/navigateTo.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,18 @@
4
4
 
5
5
  * 解决DetailedType不接收接口类型的错误 ([ae8acbf](https://github.com/missannil/annil/commit/ae8acbfc2e62f99db565c448ad9253aa549e78bb))
6
6
 
7
+ ## [1.9.0](https://github.com/missannil/annil/compare/v1.8.3...v1.9.0) (2024-10-23)
8
+
9
+
10
+ ### Features
11
+
12
+ * api/navigateTo 改为wxSugar 增加导出redirectTo ([f5a6141](https://github.com/missannil/annil/commit/f5a61411fa903545de8460052ca3512923905388))
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * 增加对DefinedComponent 的 path字段检测(与实例的is比较) ([8460e4e](https://github.com/missannil/annil/commit/8460e4eb29ad21a2df7adf53bffeb4c887a122e9))
18
+
7
19
  ## [1.8.3](https://github.com/missannil/annil/compare/v1.8.2...v1.8.3) (2024-09-08)
8
20
 
9
21
 
package/README.md CHANGED
@@ -137,7 +137,7 @@ annil(安奈儿)是微信小程序原生开发插件。她会给您更佳的开
137
137
 
138
138
  - **常用API**
139
139
 
140
- [navigateTo](./doc/api/navigateTo.md)
140
+ [navigateTo](./doc/api/wxSugar.md)
141
141
 
142
142
  - 实用泛型
143
143
 
@@ -0,0 +1,2 @@
1
+ import type { Instance } from "../../../RootComponent/Instance/RootComponentInstance";
2
+ export declare function pagePathCheck(path?: string): (this: Instance) => void;
@@ -0,0 +1,8 @@
1
+ export function pagePathCheck(path) {
2
+ return function () {
3
+ if (path && `/${this.is}` !== path) {
4
+ throw new Error(`页面路径错误,应为 /${this.is}`);
5
+ }
6
+ };
7
+ }
8
+ //# sourceMappingURL=pagePathCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagePathCheck.js","sourceRoot":"","sources":["../../../../../src/api/DefineComponent/normalizeOptions/hijackHandle/pagePathCheck.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO;QACL,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -18,7 +18,6 @@ export type OptionsInnerFields = {
18
18
  __throttleDebounce__?: ThrottleDebounce;
19
19
  };
20
20
  methods: {
21
- disposer?: Record<string, Func>;
22
21
  __computedUpdater__?: Func;
23
22
  };
24
23
  };
@@ -34,7 +33,7 @@ export type FinalOptionsOfComponent = {
34
33
  data: DataConstraint & OptionsInnerFields["data"];
35
34
  observers: Record<string, Func>;
36
35
  behaviors: string[];
37
- methods: MethodsConstraint & OptionsInnerFields["methods"];
36
+ methods: MethodsConstraint;
38
37
  externalClasses: string[];
39
38
  pageLifetimes: PageLifetimesOption<false, object>["pageLifetimes"] & {};
40
39
  isPage: boolean;
@@ -1,6 +1,7 @@
1
1
  import { BBeforeCreate } from "../../../behaviors/BbeforeCreated";
2
2
  import { BStore } from "../../../behaviors/BStore";
3
3
  import { BthrottleDebounce } from "../../../behaviors/BthrottleDebounce";
4
+ import { applyDebounceAndThrottle } from "../../../utils/applyDebounceAndThrottle";
4
5
  import { isEmptyObject } from "../../../utils/isEmptyObject";
5
6
  import { instanceConfig } from "../../InstanceInject/instanceConfig";
6
7
  import { __throttleDebounce__FieldCheck } from "./__throttleDebounce__FieldCheck";
@@ -9,6 +10,7 @@ import { hijack } from "./hijackHandle";
9
10
  import { isPageCheck } from "./hijackHandle/isPageCheck";
10
11
  import { loadReceivedDataHandle } from "./hijackHandle/loadReceivedDataHandle";
11
12
  import { onLoadReceivedDataHandle } from "./hijackHandle/onLoadReceivedDataHandle";
13
+ import { pagePathCheck } from "./hijackHandle/pagePathCheck";
12
14
  import { initStore } from "./initStore";
13
15
  import { injectInfoHandler } from "./injectInfoHandler";
14
16
  import { InternalFieldProtection } from "./internalFieldProtection";
@@ -67,11 +69,13 @@ export function normalizeOptions(defineComponentOption) {
67
69
  }
68
70
  hijack(finalOptionsForComponent.methods, "onLoad", [onLoadReceivedDataHandle]);
69
71
  // 验证isPage字段是否配置正确
70
- hijack(finalOptionsForComponent.lifetimes, "attached", [isPageCheck(rootComponentOption === null || rootComponentOption === void 0 ? void 0 : rootComponentOption.isPage)]);
72
+ hijack(finalOptionsForComponent.lifetimes, "attached", [isPageCheck(rootComponentOption === null || rootComponentOption === void 0 ? void 0 : rootComponentOption.isPage), pagePathCheck(defineComponentOption.path)]);
71
73
  // 页面时删除预设的虚拟组件字段
72
74
  if (finalOptionsForComponent.isPage && finalOptionsForComponent.options) {
73
75
  Reflect.deleteProperty(finalOptionsForComponent.options, "virtualHost");
74
76
  }
77
+ // 处理debounce和throttle前缀的方法(事件)配置
78
+ applyDebounceAndThrottle(finalOptionsForComponent.methods);
75
79
  // 初始化store数据到data并把store配置放入到data的__storeConfig__下为后续使用
76
80
  initStore(finalOptionsForComponent);
77
81
  // 处理computed和watch配置
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/DefineComponent/normalizeOptions/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/DefineComponent/normalizeOptions/index.ts"],"names":[],"mappings":"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"}
@@ -17,4 +17,5 @@ type NavigateToOption<T extends PageDoc> = {
17
17
  * navigateTo API 为 wx.navigateTo的语法糖,增加了data字段,最终的url数据拼接了通过encodeURIComponent编码(支持默认忽略的特殊符号)的data字段,在跳转页面的onload中通过decodeURIComponent解析url赋值给实例的data对象。为求使用时更加方便(无需对参数data解析再赋值)。且有ts类型提示。
18
18
  */
19
19
  export declare function navigateTo<TPageDoc extends PageDoc = never>(option: NoInfer<NavigateToOption<TPageDoc>>): Promise<WechatMiniprogram.NavigateToSuccessCallbackResult>;
20
+ export declare function redirectTo<TPageDoc extends PageDoc = never>(option: NoInfer<NavigateToOption<TPageDoc>>): Promise<WechatMiniprogram.GeneralCallbackResult>;
20
21
  export {};
@@ -24,4 +24,13 @@ export function navigateTo(option) {
24
24
  return wx.navigateTo(_encodeURIComponent(option));
25
25
  }
26
26
  }
27
- //# sourceMappingURL=navigateTo.js.map
27
+ export function redirectTo(option) {
28
+ // @ts-ignore 隐式索引
29
+ if (!option.data) {
30
+ return wx.redirectTo(option);
31
+ }
32
+ else {
33
+ return wx.redirectTo(_encodeURIComponent(option));
34
+ }
35
+ }
36
+ //# sourceMappingURL=wxSugar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wxSugar.js","sourceRoot":"","sources":["../../src/api/wxSugar.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAwBnD;;GAEG;AACH,SAAS,mBAAmB,CAC1B,MAAuE;IAEvE,MAAM,MAAM,GAAuB;QACjC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,IACnC,kBAAkB,CAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAE/B,EAAE;KACH,CAAC;IAEF,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEtC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,MAA2C;IAE3C,kBAAkB;IAClB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC,UAAU,CAClB,mBAAmB,CAAC,MAAuD,CAAC,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC;AACD,MAAM,UAAU,UAAU,CACxB,MAA2C;IAE3C,kBAAkB;IAClB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC,UAAU,CAClB,mBAAmB,CAAC,MAAuD,CAAC,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { DefineComponent } from "./api/DefineComponent";
2
2
  import { type IInjectInfo, instanceConfig } from "./api/InstanceInject/instanceConfig";
3
- import { navigateTo } from "./api/navigateTo";
4
3
  import { RootComponent } from "./api/RootComponent";
5
4
  import { SubComponent } from "./api/SubComponent";
5
+ import { navigateTo, redirectTo } from "./api/wxSugar";
6
6
  import type { CreateComponentType } from "./types/CreateComponentType";
7
7
  import type { DetailedType } from "./types/DetailedType";
8
8
  import type { ExtendComponentType } from "./types/ExtendComponentType";
@@ -11,4 +11,4 @@ export * from "./utils/_utils";
11
11
  export type { Bubbles, BubblesCapture, BubblesCaptureComposed, BubblesComposed, Capture, CaptureComposed, Composed, CustomEventsTags, } from "./api/RootComponent/CustomEvents/CustomEventsTag";
12
12
  export type { Vant, Wm } from "./thirdLib";
13
13
  export type { CurrentTargetDataset, Dataset, Detail, Mark, TargetDataset, WMBaseEvent, WMCustomEvent, } from "./types/OfficialTypeAlias";
14
- export { type CreateComponentType, DefineComponent, type DetailedType, type ExtendComponentType, type IInjectInfo, instanceConfig, navigateTo, type ParamsEqual, RootComponent, SubComponent, };
14
+ export { type CreateComponentType, DefineComponent, type DetailedType, type ExtendComponentType, type IInjectInfo, instanceConfig, navigateTo, type ParamsEqual, redirectTo, RootComponent, SubComponent, };
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { DefineComponent } from "./api/DefineComponent";
2
2
  import { instanceConfig } from "./api/InstanceInject/instanceConfig";
3
- import { navigateTo } from "./api/navigateTo";
4
3
  import { RootComponent } from "./api/RootComponent";
5
4
  import { SubComponent } from "./api/SubComponent";
5
+ import { navigateTo, redirectTo } from "./api/wxSugar";
6
6
  export * from "./utils/_utils";
7
- export { DefineComponent, instanceConfig, navigateTo, RootComponent, SubComponent, };
7
+ export { DefineComponent, instanceConfig, navigateTo, redirectTo, RootComponent, SubComponent, };
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAoB,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,cAAc,gBAAgB,CAAC;AAwB/B,OAAO,EAEL,eAAe,EAIf,cAAc,EACd,UAAU,EAEV,aAAa,EACb,YAAY,GACb,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAoB,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKvD,cAAc,gBAAgB,CAAC;AAwB/B,OAAO,EAEL,eAAe,EAIf,cAAc,EACd,UAAU,EAEV,UAAU,EACV,aAAa,EACb,YAAY,GACb,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Func } from "hry-types/src/Misc/Func";
2
+ /**
3
+ * 对象中的函数应用防抖和节流
4
+ * 规则 函数字段已下划线开始的后缀 如 xxx_debounced500 或 sub_xxx_throttled,无效后缀如 _debouncedxxx 不会被处理
5
+ * @param obj
6
+ */
7
+ export declare function applyDebounceAndThrottle(obj: Record<string, Func>): void;
@@ -0,0 +1,28 @@
1
+ import { debounce } from "./debounce";
2
+ import { throttle } from "./throttle";
3
+ /**
4
+ * 对象中的函数应用防抖和节流
5
+ * 规则 函数字段已下划线开始的后缀 如 xxx_debounced500 或 sub_xxx_throttled,无效后缀如 _debouncedxxx 不会被处理
6
+ * @param obj
7
+ */
8
+ export function applyDebounceAndThrottle(obj) {
9
+ for (const [key, value] of Object.entries(obj)) {
10
+ if (!key.includes("_"))
11
+ continue;
12
+ const suffix = key.split("_").at(-1);
13
+ const remaining = suffix.slice(9);
14
+ const delay = remaining === "" ? 300 : Number(remaining);
15
+ if (suffix.startsWith("debounced")) {
16
+ if (!isNaN(delay)) {
17
+ obj[key] = debounce(value, delay);
18
+ }
19
+ continue;
20
+ }
21
+ if (suffix.startsWith("throttled")) {
22
+ if (!isNaN(delay)) {
23
+ obj[key] = throttle(value, delay);
24
+ }
25
+ }
26
+ }
27
+ }
28
+ //# sourceMappingURL=applyDebounceAndThrottle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyDebounceAndThrottle.js","sourceRoot":"","sources":["../../src/utils/applyDebounceAndThrottle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAyB;IAChE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAW,CAAC;QAE/C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,9 +1,11 @@
1
+ type Callback = (...args: any[]) => any;
1
2
  /**
2
3
  * 防抖函数
3
4
  * 注意 需要在tsconfig.json的types中添加"node",否则NodeJS.Timeout会报错
4
- * 例如 应用在输入框输入时,只有在输入完成并delay后,才会触发搜索,
5
+ * 例如 在input框输入内容时,只有输入停止一段时间(wait)后,才会触发输入事件.
5
6
  * @param func
6
- * @param delay
7
+ * @param wait
7
8
  * @returns
8
9
  */
9
- export declare function debounce<F extends (...args: any[]) => any>(func: F, delay: number): (...args: Parameters<F>) => void;
10
+ export declare function debounce<F extends Callback>(func: F, wait?: number): (...args: Parameters<F>) => void;
11
+ export {};
@@ -1,19 +1,19 @@
1
1
  /**
2
2
  * 防抖函数
3
3
  * 注意 需要在tsconfig.json的types中添加"node",否则NodeJS.Timeout会报错
4
- * 例如 应用在输入框输入时,只有在输入完成并delay后,才会触发搜索,
4
+ * 例如 在input框输入内容时,只有输入停止一段时间(wait)后,才会触发输入事件.
5
5
  * @param func
6
- * @param delay
6
+ * @param wait
7
7
  * @returns
8
8
  */
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- export function debounce(func, delay) {
9
+ /* istanbul ignore next */
10
+ export function debounce(func, wait = 300) {
11
11
  let timeoutId = null;
12
- return (...args) => {
12
+ return function (...args) {
13
13
  if (timeoutId) {
14
14
  clearTimeout(timeoutId);
15
15
  }
16
- timeoutId = setTimeout(() => func(...args), delay);
16
+ timeoutId = setTimeout(() => func.call(this, ...args), wait);
17
17
  };
18
18
  }
19
19
  //# sourceMappingURL=debounce.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../src/utils/debounce.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,2BAA2B;AAC3B,MAAM,UAAU,QAAQ,CAAqB,IAAO,EAAE,IAAI,GAAG,GAAG;IAC9D,IAAI,SAAS,GAA0B,IAAI,CAAC;IAE5C,OAAO,UAAwB,GAAG,IAAmB;QACnD,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC"}
@@ -5,13 +5,14 @@
5
5
  * @param interval 单位毫秒
6
6
  * @returns
7
7
  */
8
+ /* istanbul ignore next */
8
9
  export function throttle(callback, interval = 200) {
9
10
  let lastCall = 0;
10
11
  return function (...args) {
11
12
  const now = Date.now();
12
13
  if (now - lastCall >= interval) {
13
14
  lastCall = now;
14
- callback(...args);
15
+ callback.call(this, ...args);
15
16
  }
16
17
  };
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../src/utils/throttle.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAqB,QAAW,EAAE,QAAQ,GAAG,GAAG;IACtE,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,OAAO,UAAS,GAAG,IAAmB;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,GAAG,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,GAAG,CAAC;YAEf,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../src/utils/throttle.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,2BAA2B;AAC3B,MAAM,UAAU,QAAQ,CAAqB,QAAW,EAAE,QAAQ,GAAG,GAAG;IACtE,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,OAAO,UAAwB,GAAG,IAAmB;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,GAAG,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,GAAG,CAAC;YAEf,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "annil",
3
- "version": "1.8.3",
3
+ "version": "1.9.0",
4
4
  "description": "微信小程序(原生开发)插件",
5
5
  "main": "dist/index.js",
6
6
  "types": "src/index.ts",
@@ -0,0 +1,9 @@
1
+ import type { Instance } from "../../../RootComponent/Instance/RootComponentInstance";
2
+
3
+ export function pagePathCheck(path?: string) {
4
+ return function(this: Instance) {
5
+ if (path && `/${this.is}` !== path) {
6
+ throw new Error(`页面路径错误,应为 /${this.is}`);
7
+ }
8
+ };
9
+ }
@@ -2,6 +2,7 @@ import type { Func } from "hry-types/src/Misc/_api";
2
2
  import { BBeforeCreate } from "../../../behaviors/BbeforeCreated";
3
3
  import { BStore } from "../../../behaviors/BStore";
4
4
  import { BthrottleDebounce } from "../../../behaviors/BthrottleDebounce";
5
+ import { applyDebounceAndThrottle } from "../../../utils/applyDebounceAndThrottle";
5
6
  import { isEmptyObject } from "../../../utils/isEmptyObject";
6
7
  import { instanceConfig } from "../../InstanceInject/instanceConfig";
7
8
  import type { ComputedConstraint } from "../../RootComponent/Computed/ComputedConstraint";
@@ -19,6 +20,7 @@ import { hijack } from "./hijackHandle";
19
20
  import { isPageCheck } from "./hijackHandle/isPageCheck";
20
21
  import { loadReceivedDataHandle } from "./hijackHandle/loadReceivedDataHandle";
21
22
  import { onLoadReceivedDataHandle } from "./hijackHandle/onLoadReceivedDataHandle";
23
+ import { pagePathCheck } from "./hijackHandle/pagePathCheck";
22
24
  import { initStore } from "./initStore";
23
25
  import { injectInfoHandler } from "./injectInfoHandler";
24
26
  import { InternalFieldProtection } from "./internalFieldProtection";
@@ -36,8 +38,6 @@ export type OptionsInnerFields = {
36
38
  __throttleDebounce__?: ThrottleDebounce;
37
39
  };
38
40
  methods: {
39
- disposer?: Record<string, Func>;
40
- // computedHandle加入
41
41
  __computedUpdater__?: Func;
42
42
  };
43
43
  };
@@ -55,7 +55,7 @@ export type FinalOptionsOfComponent = {
55
55
  data: DataConstraint & OptionsInnerFields["data"];
56
56
  observers: Record<string, Func>;
57
57
  behaviors: string[];
58
- methods: MethodsConstraint & OptionsInnerFields["methods"];
58
+ methods: MethodsConstraint;
59
59
  externalClasses: string[];
60
60
  pageLifetimes: PageLifetimesOption<false, object>["pageLifetimes"] & {};
61
61
  isPage: boolean;
@@ -66,6 +66,7 @@ export type FinalOptionsOfComponent = {
66
66
  watch: Record<string, Func>;
67
67
  lifetimes: LifetimesConstraint;
68
68
  };
69
+
69
70
  /**
70
71
  * 把DefineComponentOption转化为原生Component API支持的配置
71
72
  * @param defineComponentOption
@@ -129,7 +130,7 @@ export function normalizeOptions(
129
130
  hijack(
130
131
  finalOptionsForComponent.lifetimes,
131
132
  "attached",
132
- [isPageCheck(rootComponentOption?.isPage)],
133
+ [isPageCheck(rootComponentOption?.isPage), pagePathCheck(defineComponentOption.path)],
133
134
  );
134
135
 
135
136
  // 页面时删除预设的虚拟组件字段
@@ -137,6 +138,9 @@ export function normalizeOptions(
137
138
  Reflect.deleteProperty(finalOptionsForComponent.options, "virtualHost");
138
139
  }
139
140
 
141
+ // 处理debounce和throttle前缀的方法(事件)配置
142
+ applyDebounceAndThrottle(finalOptionsForComponent.methods);
143
+
140
144
  // 初始化store数据到data并把store配置放入到data的__storeConfig__下为后续使用
141
145
  initStore(finalOptionsForComponent);
142
146
 
@@ -65,3 +65,15 @@ export function navigateTo<TPageDoc extends PageDoc = never>(
65
65
  );
66
66
  }
67
67
  }
68
+ export function redirectTo<TPageDoc extends PageDoc = never>(
69
+ option: NoInfer<NavigateToOption<TPageDoc>>,
70
+ ) {
71
+ // @ts-ignore 隐式索引
72
+ if (!option.data) {
73
+ return wx.redirectTo(option);
74
+ } else {
75
+ return wx.redirectTo(
76
+ _encodeURIComponent(option as NavigateToOption<TPageDoc> & { data: object }),
77
+ );
78
+ }
79
+ }
package/src/index.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { DefineComponent } from "./api/DefineComponent";
2
2
  import { type IInjectInfo, instanceConfig } from "./api/InstanceInject/instanceConfig";
3
- import { navigateTo } from "./api/navigateTo";
4
3
  import { RootComponent } from "./api/RootComponent";
5
4
  import { SubComponent } from "./api/SubComponent";
5
+ import { navigateTo, redirectTo } from "./api/wxSugar";
6
6
  import type { CreateComponentType } from "./types/CreateComponentType";
7
7
  import type { DetailedType } from "./types/DetailedType";
8
8
  import type { ExtendComponentType } from "./types/ExtendComponentType";
@@ -40,6 +40,7 @@ export {
40
40
  instanceConfig,
41
41
  navigateTo,
42
42
  type ParamsEqual,
43
+ redirectTo,
43
44
  RootComponent,
44
45
  SubComponent,
45
46
  };
@@ -0,0 +1,31 @@
1
+ import type { Func } from "hry-types/src/Misc/Func";
2
+ import { debounce } from "./debounce";
3
+ import { throttle } from "./throttle";
4
+
5
+ /**
6
+ * 对象中的函数应用防抖和节流
7
+ * 规则 函数字段已下划线开始的后缀 如 xxx_debounced500 或 sub_xxx_throttled,无效后缀如 _debouncedxxx 不会被处理
8
+ * @param obj
9
+ */
10
+ export function applyDebounceAndThrottle(obj: Record<string, Func>) {
11
+ for (const [key, value] of Object.entries(obj)) {
12
+ if (!key.includes("_")) continue;
13
+ const suffix = key.split("_").at(-1) as string;
14
+
15
+ const remaining = suffix.slice(9);
16
+ const delay = remaining === "" ? 300 : Number(remaining);
17
+
18
+ if (suffix.startsWith("debounced")) {
19
+ if (!isNaN(delay)) {
20
+ obj[key] = debounce(value, delay);
21
+ }
22
+ continue;
23
+ }
24
+
25
+ if (suffix.startsWith("throttled")) {
26
+ if (!isNaN(delay)) {
27
+ obj[key] = throttle(value, delay);
28
+ }
29
+ }
30
+ }
31
+ }
@@ -1,20 +1,22 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ type Callback = (...args: any[]) => any;
1
3
  /**
2
4
  * 防抖函数
3
5
  * 注意 需要在tsconfig.json的types中添加"node",否则NodeJS.Timeout会报错
4
- * 例如 应用在输入框输入时,只有在输入完成并delay后,才会触发搜索,
6
+ * 例如 在input框输入内容时,只有输入停止一段时间(wait)后,才会触发输入事件.
5
7
  * @param func
6
- * @param delay
8
+ * @param wait
7
9
  * @returns
8
10
  */
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- export function debounce<F extends (...args: any[]) => any>(func: F, delay: number): (...args: Parameters<F>) => void {
11
+ /* istanbul ignore next */
12
+ export function debounce<F extends Callback>(func: F, wait = 300): (...args: Parameters<F>) => void {
11
13
  let timeoutId: NodeJS.Timeout | null = null;
12
14
 
13
- return (...args: Parameters<F>): void => {
15
+ return function(this: unknown, ...args: Parameters<F>): void {
14
16
  if (timeoutId) {
15
17
  clearTimeout(timeoutId);
16
18
  }
17
19
 
18
- timeoutId = setTimeout(() => func(...args), delay);
20
+ timeoutId = setTimeout(() => func.call(this, ...args), wait);
19
21
  };
20
22
  }
@@ -8,16 +8,17 @@ type Callback = (...args: any[]) => any;
8
8
  * @param interval 单位毫秒
9
9
  * @returns
10
10
  */
11
+ /* istanbul ignore next */
11
12
  export function throttle<F extends Callback>(callback: F, interval = 200): (...args: Parameters<F>) => void {
12
13
  let lastCall = 0;
13
14
 
14
- return function(...args: Parameters<F>) {
15
+ return function(this: unknown, ...args: Parameters<F>) {
15
16
  const now = Date.now();
16
17
 
17
18
  if (now - lastCall >= interval) {
18
19
  lastCall = now;
19
20
 
20
- callback(...args);
21
+ callback.call(this, ...args);
21
22
  }
22
23
  };
23
24
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigateTo.js","sourceRoot":"","sources":["../../src/api/navigateTo.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAwBnD;;GAEG;AACH,SAAS,mBAAmB,CAC1B,MAAuE;IAEvE,MAAM,MAAM,GAAuB;QACjC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,IACnC,kBAAkB,CAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAE/B,EAAE;KACH,CAAC;IAEF,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEtC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,MAA2C;IAE3C,kBAAkB;IAClB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC,UAAU,CAClB,mBAAmB,CAAC,MAAuD,CAAC,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}