@cloudcome/utils-browser 1.3.0 → 1.4.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.
package/dist/index.cjs CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  /**
4
4
  * `@cloudcome/utils-browser` 版本号
5
5
  */
6
- var VERSION = "1.3.0";
6
+ var VERSION = "1.4.0";
7
7
  //#endregion
8
8
  exports.VERSION = VERSION;
9
9
 
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * `@cloudcome/utils-browser` 版本号
4
4
  */
5
- var VERSION = "1.3.0";
5
+ var VERSION = "1.4.0";
6
6
  //#endregion
7
7
  export { VERSION };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"timer.cjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {\n makeInterval,\n type TimerHandler,\n type TimerStateBase,\n type TimerState,\n type MakeIntervalOptions,\n} from '@cloudcome/utils-core/timer';\nimport type { MaybePromise } from '@cloudcome/utils-core/types';\n\n/**\n * frameInterval 配置选项\n * @template T - condition 函数返回值类型\n */\nexport type FrameIntervalOptions<T> = {\n /**\n * 条件函数,每次执行前调用,返回值存入 state.data\n * 支持同步或异步返回值\n * 抛错时跳过本次 runner 执行,继续下一次调度\n */\n condition?: (state: TimerStateBase) => MaybePromise<T>;\n /**\n * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态\n * @param next - 可选的手动触发下一次调度的函数\n */\n runner: (state: TimerState<Awaited<T>>, next?: () => void) => unknown;\n /**\n * 是否在定时器启动时立即执行一次,默认为 false\n */\n leading?: boolean;\n /**\n * 是否在定时器停止或暂停时额外执行一次(trailing edge)\n */\n trailing?: boolean;\n};\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @example\n * ```typescript\n * // 无 condition\n * frameInterval({\n * runner: (state) => console.log(state.times),\n * })\n *\n * // 有 condition,T 自动推断为 number\n * frameInterval({\n * condition: (state) => state.times,\n * runner: (state) => state.data.toFixed(2),\n * })\n * ```\n *\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler {\n const { runner, condition, leading, trailing } = options;\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({\n dispatcher: (call) => {\n rafId = requestAnimationFrame(call);\n },\n runner: runner as MakeIntervalOptions<T>['runner'],\n condition,\n leading: leading ?? false,\n trailing,\n });\n\n return {\n start() {\n if (!canStart()) return;\n start();\n },\n\n stop() {\n if (!canStop()) return;\n stop();\n cancelAnimationFrame(rafId);\n },\n\n pause() {\n if (!canPause()) return;\n pause();\n cancelAnimationFrame(rafId);\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n if (immediate || leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(() => resume());\n }\n },\n\n execute() {\n cancelAnimationFrame(rafId);\n execute();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuDA,SAAgB,cAAwB,SAAgD;CACtF,MAAM,EAAE,QAAQ,WAAW,SAAS,aAAa;CACjD,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,aAAA,GAAA,4BAAA,cAAyB;EACnG,aAAa,SAAS;GACpB,QAAQ,sBAAsB,KAAK;;EAE7B;EACR;EACA,SAAS,WAAW;EACpB;EACD,CAAC;CAEF,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;;EAGT,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,MAAM;GACN,qBAAqB,MAAM;;EAG7B,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;GACP,qBAAqB,MAAM;;EAG7B,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAClB,IAAI,aAAa,SACf,QAAQ;QAER,QAAQ,4BAA4B,QAAQ,CAAC;;EAIjD,UAAU;GACR,qBAAqB,MAAM;GAC3B,SAAS;;EAEZ"}
1
+ {"version":3,"file":"timer.cjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {\n makeInterval,\n type TimerHandler,\n type TimerStateBase,\n type TimerState,\n type MakeIntervalOptions,\n} from '@cloudcome/utils-core/timer';\n\n/**\n * frameInterval 配置选项\n * @template T - condition 函数返回值类型\n */\nexport type FrameIntervalOptions<T> = {\n /**\n * 条件函数,每次执行前调用,返回值存入 state.data\n * 支持同步或异步返回值\n * 抛错时跳过本次 runner 执行,继续下一次调度\n */\n condition?: (state: TimerStateBase) => T;\n /**\n * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态\n */\n runner: (state: TimerState<Awaited<T>>) => unknown;\n /**\n * 是否在定时器启动时立即执行一次,默认为 false\n */\n leading?: boolean;\n /**\n * 是否在定时器停止或暂停时额外执行一次(trailing edge)\n */\n trailing?: boolean;\n};\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @example\n * ```typescript\n * // 无 condition\n * frameInterval({\n * runner: (state) => console.log(state.times),\n * })\n *\n * // 有 condition,T 自动推断为 number\n * frameInterval({\n * condition: (state) => state.times,\n * runner: (state) => state.data.toFixed(2),\n * })\n * ```\n *\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler {\n const { runner, condition, leading, trailing } = options;\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({\n dispatcher: (call) => {\n rafId = requestAnimationFrame(call);\n },\n runner: runner as MakeIntervalOptions<T>['runner'],\n condition,\n leading: leading ?? false,\n trailing,\n });\n\n return {\n start() {\n if (!canStart()) return;\n start();\n },\n\n stop() {\n if (!canStop()) return;\n stop();\n cancelAnimationFrame(rafId);\n },\n\n pause() {\n if (!canPause()) return;\n pause();\n cancelAnimationFrame(rafId);\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n if (immediate || leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(() => resume());\n }\n },\n\n execute() {\n cancelAnimationFrame(rafId);\n execute();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,cAAwB,SAAgD;CACtF,MAAM,EAAE,QAAQ,WAAW,SAAS,aAAa;CACjD,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,aAAA,GAAA,4BAAA,cAAyB;EACnG,aAAa,SAAS;GACpB,QAAQ,sBAAsB,KAAK;;EAE7B;EACR;EACA,SAAS,WAAW;EACpB;EACD,CAAC;CAEF,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;;EAGT,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,MAAM;GACN,qBAAqB,MAAM;;EAG7B,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;GACP,qBAAqB,MAAM;;EAG7B,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAClB,IAAI,aAAa,SACf,QAAQ;QAER,QAAQ,4BAA4B,QAAQ,CAAC;;EAIjD,UAAU;GACR,qBAAqB,MAAM;GAC3B,SAAS;;EAEZ"}
package/dist/timer.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { TimerHandler, TimerStateBase, TimerState } from '@cloudcome/utils-core/timer';
2
- import { MaybePromise } from '@cloudcome/utils-core/types';
3
2
  /**
4
3
  * frameInterval 配置选项
5
4
  * @template T - condition 函数返回值类型
@@ -10,12 +9,11 @@ export type FrameIntervalOptions<T> = {
10
9
  * 支持同步或异步返回值
11
10
  * 抛错时跳过本次 runner 执行,继续下一次调度
12
11
  */
13
- condition?: (state: TimerStateBase) => MaybePromise<T>;
12
+ condition?: (state: TimerStateBase) => T;
14
13
  /**
15
14
  * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态
16
- * @param next - 可选的手动触发下一次调度的函数
17
15
  */
18
- runner: (state: TimerState<Awaited<T>>, next?: () => void) => unknown;
16
+ runner: (state: TimerState<Awaited<T>>) => unknown;
19
17
  /**
20
18
  * 是否在定时器启动时立即执行一次,默认为 false
21
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"timer.mjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {\n makeInterval,\n type TimerHandler,\n type TimerStateBase,\n type TimerState,\n type MakeIntervalOptions,\n} from '@cloudcome/utils-core/timer';\nimport type { MaybePromise } from '@cloudcome/utils-core/types';\n\n/**\n * frameInterval 配置选项\n * @template T - condition 函数返回值类型\n */\nexport type FrameIntervalOptions<T> = {\n /**\n * 条件函数,每次执行前调用,返回值存入 state.data\n * 支持同步或异步返回值\n * 抛错时跳过本次 runner 执行,继续下一次调度\n */\n condition?: (state: TimerStateBase) => MaybePromise<T>;\n /**\n * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态\n * @param next - 可选的手动触发下一次调度的函数\n */\n runner: (state: TimerState<Awaited<T>>, next?: () => void) => unknown;\n /**\n * 是否在定时器启动时立即执行一次,默认为 false\n */\n leading?: boolean;\n /**\n * 是否在定时器停止或暂停时额外执行一次(trailing edge)\n */\n trailing?: boolean;\n};\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @example\n * ```typescript\n * // 无 condition\n * frameInterval({\n * runner: (state) => console.log(state.times),\n * })\n *\n * // 有 condition,T 自动推断为 number\n * frameInterval({\n * condition: (state) => state.times,\n * runner: (state) => state.data.toFixed(2),\n * })\n * ```\n *\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler {\n const { runner, condition, leading, trailing } = options;\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({\n dispatcher: (call) => {\n rafId = requestAnimationFrame(call);\n },\n runner: runner as MakeIntervalOptions<T>['runner'],\n condition,\n leading: leading ?? false,\n trailing,\n });\n\n return {\n start() {\n if (!canStart()) return;\n start();\n },\n\n stop() {\n if (!canStop()) return;\n stop();\n cancelAnimationFrame(rafId);\n },\n\n pause() {\n if (!canPause()) return;\n pause();\n cancelAnimationFrame(rafId);\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n if (immediate || leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(() => resume());\n }\n },\n\n execute() {\n cancelAnimationFrame(rafId);\n execute();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuDA,SAAgB,cAAwB,SAAgD;CACtF,MAAM,EAAE,QAAQ,WAAW,SAAS,aAAa;CACjD,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,YAAY,aAAa;EACnG,aAAa,SAAS;GACpB,QAAQ,sBAAsB,KAAK;;EAE7B;EACR;EACA,SAAS,WAAW;EACpB;EACD,CAAC;CAEF,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;;EAGT,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,MAAM;GACN,qBAAqB,MAAM;;EAG7B,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;GACP,qBAAqB,MAAM;;EAG7B,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAClB,IAAI,aAAa,SACf,QAAQ;QAER,QAAQ,4BAA4B,QAAQ,CAAC;;EAIjD,UAAU;GACR,qBAAqB,MAAM;GAC3B,SAAS;;EAEZ"}
1
+ {"version":3,"file":"timer.mjs","names":[],"sources":["../src/timer.ts"],"sourcesContent":["import {\n makeInterval,\n type TimerHandler,\n type TimerStateBase,\n type TimerState,\n type MakeIntervalOptions,\n} from '@cloudcome/utils-core/timer';\n\n/**\n * frameInterval 配置选项\n * @template T - condition 函数返回值类型\n */\nexport type FrameIntervalOptions<T> = {\n /**\n * 条件函数,每次执行前调用,返回值存入 state.data\n * 支持同步或异步返回值\n * 抛错时跳过本次 runner 执行,继续下一次调度\n */\n condition?: (state: TimerStateBase) => T;\n /**\n * 执行函数,每次 requestAnimationFrame 触发时调用,接收完整的定时器状态\n */\n runner: (state: TimerState<Awaited<T>>) => unknown;\n /**\n * 是否在定时器启动时立即执行一次,默认为 false\n */\n leading?: boolean;\n /**\n * 是否在定时器停止或暂停时额外执行一次(trailing edge)\n */\n trailing?: boolean;\n};\n\n/**\n * 创建一个基于 `requestAnimationFrame` 的间隔定时器\n *\n * @example\n * ```typescript\n * // 无 condition\n * frameInterval({\n * runner: (state) => console.log(state.times),\n * })\n *\n * // 有 condition,T 自动推断为 number\n * frameInterval({\n * condition: (state) => state.times,\n * runner: (state) => state.data.toFixed(2),\n * })\n * ```\n *\n * @param options - 配置选项\n * @returns {TimerHandler} 返回包含控制方法的对象\n */\nexport function frameInterval<T = null>(options: FrameIntervalOptions<T>): TimerHandler {\n const { runner, condition, leading, trailing } = options;\n let rafId: number;\n const { canStart, start, canStop, stop, canPause, pause, canResume, resume, execute } = makeInterval({\n dispatcher: (call) => {\n rafId = requestAnimationFrame(call);\n },\n runner: runner as MakeIntervalOptions<T>['runner'],\n condition,\n leading: leading ?? false,\n trailing,\n });\n\n return {\n start() {\n if (!canStart()) return;\n start();\n },\n\n stop() {\n if (!canStop()) return;\n stop();\n cancelAnimationFrame(rafId);\n },\n\n pause() {\n if (!canPause()) return;\n pause();\n cancelAnimationFrame(rafId);\n },\n\n resume(immediate?: boolean) {\n if (!canResume()) return;\n if (immediate || leading) {\n resume();\n } else {\n rafId = requestAnimationFrame(() => resume());\n }\n },\n\n execute() {\n cancelAnimationFrame(rafId);\n execute();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,cAAwB,SAAgD;CACtF,MAAM,EAAE,QAAQ,WAAW,SAAS,aAAa;CACjD,IAAI;CACJ,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,UAAU,OAAO,WAAW,QAAQ,YAAY,aAAa;EACnG,aAAa,SAAS;GACpB,QAAQ,sBAAsB,KAAK;;EAE7B;EACR;EACA,SAAS,WAAW;EACpB;EACD,CAAC;CAEF,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;;EAGT,OAAO;GACL,IAAI,CAAC,SAAS,EAAE;GAChB,MAAM;GACN,qBAAqB,MAAM;;EAG7B,QAAQ;GACN,IAAI,CAAC,UAAU,EAAE;GACjB,OAAO;GACP,qBAAqB,MAAM;;EAG7B,OAAO,WAAqB;GAC1B,IAAI,CAAC,WAAW,EAAE;GAClB,IAAI,aAAa,SACf,QAAQ;QAER,QAAQ,4BAA4B,QAAQ,CAAC;;EAIjD,UAAU;GACR,qBAAqB,MAAM;GAC3B,SAAS;;EAEZ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudcome/utils-browser",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "cloudcome utils for browser",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -105,7 +105,7 @@
105
105
  "node": ">=22"
106
106
  },
107
107
  "dependencies": {
108
- "@cloudcome/utils-core": "~1.21.0"
108
+ "@cloudcome/utils-core": "~1.22.0"
109
109
  },
110
110
  "keywords": [
111
111
  "cloudcome",