@tiny-codes/react-easy 1.4.14 → 1.4.16
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 +20 -0
- package/es/hooks/index.d.ts +3 -2
- package/es/hooks/index.js +3 -2
- package/es/hooks/index.js.map +1 -1
- package/es/hooks/useDebounce.d.ts +37 -0
- package/es/hooks/useDebounce.js +92 -0
- package/es/hooks/useDebounce.js.map +1 -0
- package/es/hooks/useSSE.js +1 -1
- package/es/hooks/useSSE.js.map +1 -1
- package/es/utils/AudioPlayer.js +2 -2
- package/es/utils/AudioPlayer.js.map +1 -1
- package/lib/hooks/index.d.ts +3 -2
- package/lib/hooks/index.js +5 -2
- package/lib/hooks/index.js.map +2 -2
- package/lib/hooks/useDebounce.d.ts +37 -0
- package/lib/hooks/useDebounce.js +71 -0
- package/lib/hooks/useDebounce.js.map +7 -0
- package/lib/hooks/useSSE.js +1 -1
- package/lib/hooks/useSSE.js.map +2 -2
- package/lib/utils/AudioPlayer.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## 1.4.16
|
|
6
|
+
|
|
7
|
+
2025-9-18
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
#### `useDebounce`
|
|
12
|
+
|
|
13
|
+
- ✨ add `useDebounce` hook
|
|
14
|
+
|
|
15
|
+
## 1.4.15
|
|
16
|
+
|
|
17
|
+
2025-9-16
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
#### `useSSE`
|
|
22
|
+
|
|
23
|
+
- 🐞 revert the changes in `v1.4.14`
|
|
24
|
+
|
|
5
25
|
## 1.4.14
|
|
6
26
|
|
|
7
27
|
2025-9-10
|
package/es/hooks/index.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
export { default as useAudioPlayer } from './useAudioPlayer';
|
|
2
|
+
export { default as useDebounce } from './useDebounce';
|
|
2
3
|
export { default as useRefValue } from './useRefValue';
|
|
3
4
|
export { default as useRefFunction } from './useRefFunction';
|
|
4
5
|
export * from './useSSE';
|
|
5
6
|
export { default as useSSE } from './useSSE';
|
|
6
7
|
export * from './useStompSocket';
|
|
7
8
|
export { default as useStompSocket } from './useStompSocket';
|
|
9
|
+
export * from './useUserMedia';
|
|
10
|
+
export { default as useUserMedia } from './useUserMedia';
|
|
8
11
|
export type { ValidatorRuleMap } from './useValidators';
|
|
9
12
|
export { default as useValidators } from './useValidators';
|
|
10
13
|
export { default as useValidator } from './useValidator';
|
|
11
14
|
export type { Validator, RuleRegExpFlags, ValidatorRule, BuilderOptions } from './useValidatorBuilder';
|
|
12
15
|
export { default as useValidatorBuilder } from './useValidatorBuilder';
|
|
13
|
-
export * from './useUserMedia';
|
|
14
|
-
export { default as useUserMedia } from './useUserMedia';
|
package/es/hooks/index.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
export { default as useAudioPlayer } from "./useAudioPlayer";
|
|
2
|
+
export { default as useDebounce } from "./useDebounce";
|
|
2
3
|
export { default as useRefValue } from "./useRefValue";
|
|
3
4
|
export { default as useRefFunction } from "./useRefFunction";
|
|
4
5
|
export * from "./useSSE";
|
|
5
6
|
export { default as useSSE } from "./useSSE";
|
|
6
7
|
export * from "./useStompSocket";
|
|
7
8
|
export { default as useStompSocket } from "./useStompSocket";
|
|
9
|
+
export * from "./useUserMedia";
|
|
10
|
+
export { default as useUserMedia } from "./useUserMedia";
|
|
8
11
|
export { default as useValidators } from "./useValidators";
|
|
9
12
|
export { default as useValidator } from "./useValidator";
|
|
10
13
|
export { default as useValidatorBuilder } from "./useValidatorBuilder";
|
|
11
|
-
export * from "./useUserMedia";
|
|
12
|
-
export { default as useUserMedia } from "./useUserMedia";
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
package/es/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","useAudioPlayer","useRefValue","useRefFunction","useSSE","useStompSocket","useValidators","useValidator","useValidatorBuilder"
|
|
1
|
+
{"version":3,"names":["default","useAudioPlayer","useDebounce","useRefValue","useRefFunction","useSSE","useStompSocket","useUserMedia","useValidators","useValidator","useValidatorBuilder"],"sources":["../../src/hooks/index.ts"],"sourcesContent":["export { default as useAudioPlayer } from './useAudioPlayer';\nexport { default as useDebounce } from './useDebounce';\nexport { default as useRefValue } from './useRefValue';\nexport { default as useRefFunction } from './useRefFunction';\nexport * from './useSSE';\nexport { default as useSSE } from './useSSE';\nexport * from './useStompSocket';\nexport { default as useStompSocket } from './useStompSocket';\nexport * from './useUserMedia';\nexport { default as useUserMedia } from './useUserMedia';\nexport type { ValidatorRuleMap } from './useValidators';\nexport { default as useValidators } from './useValidators';\nexport { default as useValidator } from './useValidator';\nexport type { Validator, RuleRegExpFlags, ValidatorRule, BuilderOptions } from './useValidatorBuilder';\nexport { default as useValidatorBuilder } from './useValidatorBuilder';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,cAAc;AAClC,SAASD,OAAO,IAAIE,WAAW;AAC/B,SAASF,OAAO,IAAIG,WAAW;AAC/B,SAASH,OAAO,IAAII,cAAc;AAClC;AACA,SAASJ,OAAO,IAAIK,MAAM;AAC1B;AACA,SAASL,OAAO,IAAIM,cAAc;AAClC;AACA,SAASN,OAAO,IAAIO,YAAY;AAEhC,SAASP,OAAO,IAAIQ,aAAa;AACjC,SAASR,OAAO,IAAIS,YAAY;AAEhC,SAAST,OAAO,IAAIU,mBAAmB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface UseDebounceOptions {
|
|
3
|
+
/**
|
|
4
|
+
* - **EN** Whether to execute at the start of the wait period. Default is `false`.
|
|
5
|
+
* - **CN** 是否在等待周期开始时执行,默认值为 `false`
|
|
6
|
+
*/
|
|
7
|
+
leading?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* - **EN** Regular debounce interval in milliseconds. Default is `0`, meaning no debounce.
|
|
10
|
+
* - **CN** 常规防抖间隔 (ms),默认值为 `0`, 表示不进行防抖
|
|
11
|
+
*/
|
|
12
|
+
wait?: number;
|
|
13
|
+
/**
|
|
14
|
+
* - **EN** Maximum wait time in milliseconds. Default is `0`, meaning no maximum wait.
|
|
15
|
+
* - **CN** 最大等待时间 (ms),默认值为 `0`, 表示不限制最大等待时间
|
|
16
|
+
*/
|
|
17
|
+
maxWait?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* - **EN** Debounce Hook with dual trigger mechanisms:
|
|
21
|
+
*
|
|
22
|
+
* 1. Traditional debounce: Executes after a specified interval without new calls.
|
|
23
|
+
* 2. Max wait: Forces execution after exceeding a specified maximum wait time.
|
|
24
|
+
* - **CN** 防抖 Hook:具有两种触发机制:
|
|
25
|
+
*
|
|
26
|
+
* 1. 传统防抖:等待指定时间内无新调用后执行
|
|
27
|
+
* 2. 最大等待:超过指定最大等待时间后强制执行
|
|
28
|
+
*
|
|
29
|
+
* @param fn The function to debounce | 需要防抖的函数
|
|
30
|
+
* @param deps Dependency array, re-creates the debounced function when dependencies change |
|
|
31
|
+
* 依赖项数组,当依赖变化时重新创建防抖函数
|
|
32
|
+
* @param options Configuration options | 配置选项
|
|
33
|
+
*
|
|
34
|
+
* @returns The debounced function | 防抖处理后的函数
|
|
35
|
+
*/
|
|
36
|
+
declare function useDebounce<T extends (...args: any[]) => unknown>(fn: T, deps: React.DependencyList, options?: UseDebounceOptions): (...args: Parameters<T>) => void;
|
|
37
|
+
export default useDebounce;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
5
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
6
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
7
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
8
|
+
/**
|
|
9
|
+
* - **EN** Debounce Hook with dual trigger mechanisms:
|
|
10
|
+
*
|
|
11
|
+
* 1. Traditional debounce: Executes after a specified interval without new calls.
|
|
12
|
+
* 2. Max wait: Forces execution after exceeding a specified maximum wait time.
|
|
13
|
+
* - **CN** 防抖 Hook:具有两种触发机制:
|
|
14
|
+
*
|
|
15
|
+
* 1. 传统防抖:等待指定时间内无新调用后执行
|
|
16
|
+
* 2. 最大等待:超过指定最大等待时间后强制执行
|
|
17
|
+
*
|
|
18
|
+
* @param fn The function to debounce | 需要防抖的函数
|
|
19
|
+
* @param deps Dependency array, re-creates the debounced function when dependencies change |
|
|
20
|
+
* 依赖项数组,当依赖变化时重新创建防抖函数
|
|
21
|
+
* @param options Configuration options | 配置选项
|
|
22
|
+
*
|
|
23
|
+
* @returns The debounced function | 防抖处理后的函数
|
|
24
|
+
*/
|
|
25
|
+
function useDebounce(fn, deps) {
|
|
26
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
27
|
+
var _options$wait = options.wait,
|
|
28
|
+
wait = _options$wait === void 0 ? 0 : _options$wait,
|
|
29
|
+
_options$maxWait = options.maxWait,
|
|
30
|
+
maxWait = _options$maxWait === void 0 ? 0 : _options$maxWait,
|
|
31
|
+
_options$leading = options.leading,
|
|
32
|
+
leading = _options$leading === void 0 ? false : _options$leading;
|
|
33
|
+
var timeoutRef = useRef(null);
|
|
34
|
+
var fnRef = useRef(fn);
|
|
35
|
+
var lastExecutedTimeRef = useRef(0); // The last execution timestamp
|
|
36
|
+
var lastArgsRef = useRef([]); // The last call arguments
|
|
37
|
+
|
|
38
|
+
// Update the latest function reference
|
|
39
|
+
useEffect(function () {
|
|
40
|
+
fnRef.current = fn;
|
|
41
|
+
}, [fn]);
|
|
42
|
+
|
|
43
|
+
// Cleanup on unmount
|
|
44
|
+
useEffect(function () {
|
|
45
|
+
return function () {
|
|
46
|
+
if (timeoutRef.current) {
|
|
47
|
+
clearTimeout(timeoutRef.current);
|
|
48
|
+
timeoutRef.current = null;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}, []);
|
|
52
|
+
|
|
53
|
+
// The actual execution function
|
|
54
|
+
var executeFunction = useCallback(function () {
|
|
55
|
+
timeoutRef.current = null;
|
|
56
|
+
lastExecutedTimeRef.current = Date.now();
|
|
57
|
+
fnRef.current.apply(fnRef, _toConsumableArray(lastArgsRef.current));
|
|
58
|
+
}, []);
|
|
59
|
+
|
|
60
|
+
// The debounced function
|
|
61
|
+
return useCallback(function () {
|
|
62
|
+
var now = Date.now();
|
|
63
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
64
|
+
args[_key] = arguments[_key];
|
|
65
|
+
}
|
|
66
|
+
lastArgsRef.current = args;
|
|
67
|
+
|
|
68
|
+
// If leading is true and it's the first call, execute immediately
|
|
69
|
+
if (leading && timeoutRef.current === null && now - lastExecutedTimeRef.current >= wait) {
|
|
70
|
+
executeFunction();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 1. Clear the existing timer
|
|
75
|
+
if (timeoutRef.current !== null) {
|
|
76
|
+
clearTimeout(timeoutRef.current);
|
|
77
|
+
timeoutRef.current = null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// 2. Check if the maximum wait time has been exceeded, if so, execute immediately
|
|
81
|
+
if (maxWait > 0 && now - lastExecutedTimeRef.current >= maxWait) {
|
|
82
|
+
executeFunction();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 3. Set a new debounce timer
|
|
87
|
+
timeoutRef.current = setTimeout(executeFunction, wait);
|
|
88
|
+
}, // eslint-disable-next-line @tiny-codes/react-hooks/exhaustive-deps
|
|
89
|
+
[wait, maxWait, executeFunction, leading].concat(_toConsumableArray(deps)));
|
|
90
|
+
}
|
|
91
|
+
export default useDebounce;
|
|
92
|
+
//# sourceMappingURL=useDebounce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useDebounce","fn","deps","options","arguments","length","undefined","_options$wait","wait","_options$maxWait","maxWait","_options$leading","leading","timeoutRef","fnRef","lastExecutedTimeRef","lastArgsRef","current","clearTimeout","executeFunction","Date","now","apply","_toConsumableArray","_len","args","Array","_key","setTimeout","concat"],"sources":["../../src/hooks/useDebounce.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nexport interface UseDebounceOptions {\n /**\n * - **EN** Whether to execute at the start of the wait period. Default is `false`.\n * - **CN** 是否在等待周期开始时执行,默认值为 `false`\n */\n leading?: boolean;\n /**\n * - **EN** Regular debounce interval in milliseconds. Default is `0`, meaning no debounce.\n * - **CN** 常规防抖间隔 (ms),默认值为 `0`, 表示不进行防抖\n */\n wait?: number;\n /**\n * - **EN** Maximum wait time in milliseconds. Default is `0`, meaning no maximum wait.\n * - **CN** 最大等待时间 (ms),默认值为 `0`, 表示不限制最大等待时间\n */\n maxWait?: number;\n}\n/**\n * - **EN** Debounce Hook with dual trigger mechanisms:\n *\n * 1. Traditional debounce: Executes after a specified interval without new calls.\n * 2. Max wait: Forces execution after exceeding a specified maximum wait time.\n * - **CN** 防抖 Hook:具有两种触发机制:\n *\n * 1. 传统防抖:等待指定时间内无新调用后执行\n * 2. 最大等待:超过指定最大等待时间后强制执行\n *\n * @param fn The function to debounce | 需要防抖的函数\n * @param deps Dependency array, re-creates the debounced function when dependencies change |\n * 依赖项数组,当依赖变化时重新创建防抖函数\n * @param options Configuration options | 配置选项\n *\n * @returns The debounced function | 防抖处理后的函数\n */\nfunction useDebounce<T extends (...args: any[]) => unknown>(\n fn: T,\n deps: React.DependencyList,\n options: UseDebounceOptions = {}\n): (...args: Parameters<T>) => void {\n const { wait = 0, maxWait = 0, leading = false } = options;\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const fnRef = useRef<T>(fn);\n const lastExecutedTimeRef = useRef<number>(0); // The last execution timestamp\n const lastArgsRef = useRef<unknown[]>([]); // The last call arguments\n\n // Update the latest function reference\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, []);\n\n // The actual execution function\n const executeFunction = useCallback(() => {\n timeoutRef.current = null;\n lastExecutedTimeRef.current = Date.now();\n fnRef.current(...lastArgsRef.current);\n }, []);\n\n // The debounced function\n return useCallback(\n (...args: Parameters<T>) => {\n const now = Date.now();\n lastArgsRef.current = args;\n\n // If leading is true and it's the first call, execute immediately\n if (leading && timeoutRef.current === null && now - lastExecutedTimeRef.current >= wait) {\n executeFunction();\n return;\n }\n\n // 1. Clear the existing timer\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n // 2. Check if the maximum wait time has been exceeded, if so, execute immediately\n if (maxWait > 0 && now - lastExecutedTimeRef.current >= maxWait) {\n executeFunction();\n return;\n }\n\n // 3. Set a new debounce timer\n timeoutRef.current = setTimeout(executeFunction, wait);\n },\n // eslint-disable-next-line @tiny-codes/react-hooks/exhaustive-deps\n [wait, maxWait, executeFunction, leading, ...deps]\n );\n}\n\nexport default useDebounce;\n"],"mappings":"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"}
|
package/es/hooks/useSSE.js
CHANGED
package/es/hooks/useSSE.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","ownKeys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","apply","_objectSpread","arguments","_defineProperty","getOwnPropertyDescriptors","defineProperties","obj","key","_toPropertyKey","_toPrimitive","String","toPrimitive","Number","_objectWithoutProperties","source","excluded","target","_objectWithoutPropertiesLoose","sourceSymbolKeys","indexOf","propertyIsEnumerable","sourceKeys","asyncGeneratorStep","gen","reject","_next","_throw","info","error","_asyncToGenerator","fn","self","args","err","undefined","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","toString","Array","from","test","len","arr2","isArray","useEffect","useRef","useState","fetchEventSource","useRefFunction","useRefValue","useSSE","props","url","autoConnect","connectOptions","onMessage","parseMessage","onError","onClose","autoConnectRef","_useState","_useState2","isRequesting","setIsRequesting","isRequestingRef","_useState3","_useState4","isConnected","setIsConnected","abortCtrlRef","connect","_ref","_callee2","options","_connectOptions$optio","_connectOptions$optio2","connectUrl","_connectOptions$optio3","headers","_onopen","onmessage","onclose","onerror","restOptions","isError","response","_callee2$","_context2","onopen","_excluded","current","AbortController","signal","openWhenHidden","_onopen2","_callee","resp","_callee$","_context","ok","_x2","event","parsed","data","JSON","parse","console","log","t0","_x","abort"],"sources":["../../src/hooks/useSSE.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { EventSourceMessage, FetchEventSourceInit } from '@microsoft/fetch-event-source';\nimport { fetchEventSource } from '@microsoft/fetch-event-source';\nimport useRefFunction from './useRefFunction';\nimport useRefValue from './useRefValue';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface UseSSEProps<T = any> {\n /** The URL to connect to */\n url: RequestInfo;\n /** Options for the connection. */\n connectOptions?: Omit<FetchEventSourceInit, 'onmessage' | 'onerror' | 'onclose'>;\n /** Automatically connect to the SSE channel. Default is `false`. */\n autoConnect?: boolean;\n /** Automatically close the connection when the component unmounts. Default is `true`. */\n autoClose?: boolean;\n /** Function to parse the incoming message. If not provided, the default JSON parser will be used. */\n parseMessage?: (original: EventSourceMessage) => T;\n /** Callback function to handle incoming messages. */\n onMessage?: (messageData: T) => void;\n /** Callback function to handle errors. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onError?: (error: any) => void;\n /** Callback function to handle connection closure. */\n onClose?: () => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst useSSE = <T = any>(props: UseSSEProps<T>) => {\n const { url, autoConnect, connectOptions, onMessage, parseMessage, onError, onClose } = props;\n const autoConnectRef = useRefValue(autoConnect);\n const [isRequesting, setIsRequesting] = useState(false);\n const isRequestingRef = useRefValue(isRequesting);\n const [isConnected, setIsConnected] = useState<boolean>(false);\n const abortCtrlRef = useRef<AbortController | undefined>(undefined);\n\n const connect = useRefFunction(async (options?: FetchEventSourceInit & Partial<Pick<UseSSEProps, 'url'>>) => {\n const {\n url: connectUrl = url,\n headers = {},\n onopen,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onmessage,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onclose,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onerror,\n ...restOptions\n } = { ...connectOptions, ...options };\n abortCtrlRef.current = new AbortController();\n try {\n setIsRequesting(true);\n setIsConnected(false);\n let isError = false;\n let response: Response | undefined = undefined;\n await fetchEventSource(connectUrl, {\n method: 'post',\n signal: abortCtrlRef.current.signal,\n openWhenHidden: true,\n onopen: async (resp: Response) => {\n response = resp;\n if (!response.ok) {\n isError = true;\n return;\n }\n setIsConnected(true);\n onopen?.(response);\n },\n onmessage(event) {\n if (isRequestingRef.current) {\n setIsRequesting(false);\n }\n try {\n let parsed: T;\n if (parseMessage) {\n parsed = parseMessage(event);\n } else {\n parsed = event.data ? JSON.parse(event.data) : undefined;\n }\n if (parsed != null) {\n onMessage?.(parsed);\n }\n } catch (error) {\n console.error('Error parsing message data:', error);\n console.log('The underlying event:', event);\n }\n },\n onerror(error) {\n onError?.(error);\n },\n onclose() {\n if (isError) return;\n setIsRequesting(false);\n onClose?.();\n },\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n ...restOptions,\n });\n if (isError) {\n throw response;\n }\n setIsRequesting(false);\n } catch (error) {\n console.error('SSE connection error:', error);\n setIsRequesting(false);\n setIsConnected(false);\n }\n });\n\n const abort = useRefFunction(() => {\n setIsConnected(false);\n if (!isConnected && abortCtrlRef.current) {\n abortCtrlRef.current.abort();\n }\n });\n\n useEffect(() => {\n if (autoConnectRef.current) {\n connect();\n }\n return abort;\n }, []);\n\n // 清理函数\n return {\n connect,\n abort,\n isRequesting,\n isConnected,\n };\n};\n\nexport default useSSE;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","ownKeys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","apply","_objectSpread","arguments","_defineProperty","getOwnPropertyDescriptors","defineProperties","obj","key","_toPropertyKey","_toPrimitive","String","toPrimitive","Number","_objectWithoutProperties","source","excluded","target","_objectWithoutPropertiesLoose","sourceSymbolKeys","indexOf","propertyIsEnumerable","sourceKeys","asyncGeneratorStep","gen","reject","_next","_throw","info","error","_asyncToGenerator","fn","self","args","err","undefined","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","toString","Array","from","test","len","arr2","isArray","useEffect","useRef","useState","fetchEventSource","useRefFunction","useRefValue","useSSE","props","url","autoConnect","connectOptions","onMessage","parseMessage","onError","onClose","autoConnectRef","_useState","_useState2","isRequesting","setIsRequesting","isRequestingRef","_useState3","_useState4","isConnected","setIsConnected","abortCtrlRef","connect","_ref","_callee2","options","_connectOptions$optio","_connectOptions$optio2","connectUrl","_connectOptions$optio3","headers","_onopen","onmessage","onclose","onerror","restOptions","isError","response","_callee2$","_context2","onopen","_excluded","current","AbortController","signal","openWhenHidden","_onopen2","_callee","resp","_callee$","_context","ok","_x2","event","parsed","data","JSON","parse","console","log","t0","_x","abort"],"sources":["../../src/hooks/useSSE.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { EventSourceMessage, FetchEventSourceInit } from '@microsoft/fetch-event-source';\nimport { fetchEventSource } from '@microsoft/fetch-event-source';\nimport useRefFunction from './useRefFunction';\nimport useRefValue from './useRefValue';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface UseSSEProps<T = any> {\n /** The URL to connect to */\n url: RequestInfo;\n /** Options for the connection. */\n connectOptions?: Omit<FetchEventSourceInit, 'onmessage' | 'onerror' | 'onclose'>;\n /** Automatically connect to the SSE channel. Default is `false`. */\n autoConnect?: boolean;\n /** Automatically close the connection when the component unmounts. Default is `true`. */\n autoClose?: boolean;\n /** Function to parse the incoming message. If not provided, the default JSON parser will be used. */\n parseMessage?: (original: EventSourceMessage) => T;\n /** Callback function to handle incoming messages. */\n onMessage?: (messageData: T) => void;\n /** Callback function to handle errors. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onError?: (error: any) => void;\n /** Callback function to handle connection closure. */\n onClose?: () => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst useSSE = <T = any>(props: UseSSEProps<T>) => {\n const { url, autoConnect, connectOptions, onMessage, parseMessage, onError, onClose } = props;\n const autoConnectRef = useRefValue(autoConnect);\n const [isRequesting, setIsRequesting] = useState(false);\n const isRequestingRef = useRefValue(isRequesting);\n const [isConnected, setIsConnected] = useState<boolean>(false);\n const abortCtrlRef = useRef<AbortController | undefined>(undefined);\n\n const connect = useRefFunction(async (options?: FetchEventSourceInit & Partial<Pick<UseSSEProps, 'url'>>) => {\n const {\n url: connectUrl = url,\n headers = {},\n onopen,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onmessage,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onclose,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onerror,\n ...restOptions\n } = { ...connectOptions, ...options };\n abortCtrlRef.current = new AbortController();\n try {\n setIsRequesting(true);\n setIsConnected(false);\n let isError = false;\n let response: Response | undefined = undefined;\n await fetchEventSource(connectUrl, {\n method: 'post',\n signal: abortCtrlRef.current.signal,\n openWhenHidden: true,\n onopen: async (resp: Response) => {\n response = resp;\n if (!response.ok) {\n isError = true;\n return;\n }\n setIsConnected(true);\n onopen?.(response);\n },\n onmessage(event) {\n if (isRequestingRef.current) {\n setIsRequesting(false);\n }\n try {\n let parsed: T;\n if (parseMessage) {\n parsed = parseMessage(event);\n } else {\n parsed = event.data ? JSON.parse(event.data) : undefined;\n }\n if (parsed != null) {\n onMessage?.(parsed);\n }\n } catch (error) {\n console.error('Error parsing message data:', error);\n console.log('The underlying event:', event);\n }\n },\n onerror(error) {\n onError?.(error);\n },\n onclose() {\n if (isError) return;\n setIsRequesting(false);\n onClose?.();\n },\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n ...restOptions,\n });\n if (isError) {\n throw response;\n }\n setIsRequesting(false);\n } catch (error) {\n console.error('SSE connection error:', error);\n setIsRequesting(false);\n setIsConnected(false);\n }\n });\n\n const abort = useRefFunction(() => {\n setIsConnected(false);\n if (abortCtrlRef.current) {\n abortCtrlRef.current.abort();\n }\n });\n\n useEffect(() => {\n if (autoConnectRef.current) {\n connect();\n }\n return abort;\n }, []);\n\n // 清理函数\n return {\n connect,\n abort,\n isRequesting,\n isConnected,\n };\n};\n\nexport default useSSE;\n"],"mappings":"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"}
|
package/es/utils/AudioPlayer.js
CHANGED
|
@@ -260,7 +260,7 @@ var AudioPlayer = /*#__PURE__*/function () {
|
|
|
260
260
|
this.audio.src = source;
|
|
261
261
|
return _context2.abrupt("return", {
|
|
262
262
|
stopLoading: function stopLoading() {
|
|
263
|
-
//
|
|
263
|
+
// a stub function
|
|
264
264
|
}
|
|
265
265
|
});
|
|
266
266
|
case 8:
|
|
@@ -364,7 +364,7 @@ var AudioPlayer = /*#__PURE__*/function () {
|
|
|
364
364
|
case 0:
|
|
365
365
|
result = {
|
|
366
366
|
stopLoading: function stopLoading() {
|
|
367
|
-
//
|
|
367
|
+
// a stub function
|
|
368
368
|
}
|
|
369
369
|
};
|
|
370
370
|
if (source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","_defineProperty","obj","_toPrimitive","String","toPrimitive","Number","AudioPlayer","options","_this","event","listener","audio","addEventListener","removeEventListener","_ref","source","volume","Audio","_volume","Math","min","max","result","data","setAudioSource","onPlayEnd","_this$options","_this$options$onPlayE","get","paused","ended","currentTime","duration","_play","_callee","_this$audioContext","_this$options2","_this$options2$onPlay","_this$options3","_this$options3$onErro","_callee$","_context","audioContext","initAudioContext","state","resume","play","onPlay","t0","console","onError","seekForward","seconds","seekBackward","seek","time","newTime","pause","_this$options4","_this$options4$onPaus","onPause","_this$options5","_this$options5$onStop","onStop","_setAudioSource","_callee2","_callee2$","_context2","src","disposeMediaSourceInternal","stopLoading","handleStreamSource","_x","volumeUp","percent","updateVolume","volumeDown","setVolume","dispose","close","sourceNode","gainNode","mediaSource","sourceBuffer","chunkQueue","appending","streamEnded","_handleStreamSource","_callee3","_this2","url","blob","_url","_this$options6","mime","_this$options7","_this$options7$onErro","_callee3$","_context3","Blob","URL","createObjectURL","ArrayBuffer","Uint8Array","onloadeddata","revokeObjectURL","mimeType","stopLoadingSource","initMediaSourceForReader","_x2","AudioContext","createMediaElementSource","createGain","connect","destination","gain","_initMediaSourceForReader","_callee4","reader","_this3","objectURL","_callee4$","_context4","MediaSource","warn","fallbackReaderToBlob","isTypeSupported","addSourceBuffer","tryAppendNext","finalizeMediaSourceIfPossible","readLoop","_x3","_x4","_readLoop","_callee5","_yield$reader$read","_this$options8","_this$options8$onErro","_callee5$","_context5","read","byteLength","setTimeout","_x5","chunk","shift","appendBuffer","_this$options9","_this$options9$onErro","_this$sourceBuffer","receivedAnyChunk","readyState","updating","endOfStream","_fallbackReaderToBlob","_callee7","stream","response","_callee7$","_context7","ReadableStream","pull","controller","_callee6","_yield$reader$read2","_callee6$","_context6","enqueue","Response","_x6"],"sources":["../../src/utils/AudioPlayer.ts"],"sourcesContent":["export type AudioSource = string | ReadableStreamDefaultReader<Uint8Array> | ArrayBuffer | Uint8Array | Blob;\n\nexport interface AudioPlayerInit {\n /**\n * - **EN:** Audio source (URL or streaming data)\n * - **CN:** 音频源(URL或流数据)\n */\n source?: AudioSource | (() => AudioSource | Promise<AudioSource>);\n /**\n * - **EN:** MIME type of the audio (e.g., 'audio/mpeg', 'audio/wav'). Optional.\n * - **CN:** 音频的MIME类型(例如,'audio/mpeg','audio/wav')。可选。\n */\n mimeType?: string;\n /**\n * - **EN:** Initial volume level (0-1). Default is `0.5`\n * - **CN:** 初始音量级别(0-1)。默认值为`0.5`\n */\n volume?: number;\n /**\n * - **EN:** Callback when audio starts playing\n * - **CN:** 音频开始播放时的回调\n */\n onPlay?: () => void;\n /**\n * - **EN:** Callback when audio is paused\n * - **CN:** 音频暂停时的回调\n */\n onPause?: () => void;\n /**\n * - **EN:** Callback when audio is stopped\n * - **CN:** 音频停止时的回调\n */\n onStop?: () => void;\n\n /**\n * - **EN:** Callback when audio playback ends\n * - **CN:** 音频播放结束时的回调\n */\n onPlayEnd?: () => void;\n /**\n * - **EN:** Callback when an error occurs\n * - **CN:** 发生错误时的回调\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onError?: (error: any) => void;\n}\n\n/**\n * - **EN:** An audio player class that supports URL or streaming data input\n * - **CN:** 一个音频播放器类,支持URL或流数据输入\n */\nclass AudioPlayer {\n private audio: HTMLAudioElement;\n private _volume: number;\n private audioContext: AudioContext | null = null;\n private gainNode: GainNode | null = null;\n private sourceNode: MediaElementAudioSourceNode | null = null;\n private options: AudioPlayerInit | undefined;\n private mediaSource: MediaSource | null = null;\n private sourceBuffer: SourceBuffer | null = null;\n private chunkQueue: Uint8Array[] = [];\n private appending = false;\n private streamEnded = false;\n private stopLoadingSource = false;\n private onPlayEnd: () => void;\n\n /**\n * - **EN:** Creates an audio player instance\n * - **CN:** 创建音频播放器实例\n *\n * @param source - can be a URL string or ReadableStreamDefaultReader |\n * 可以是URL字符串或ReadableStreamDefaultReader\n */\n constructor(options?: AudioPlayerInit) {\n const { source, volume } = options || {};\n this.options = options;\n this.audio = new Audio();\n this._volume = volume != null ? Math.min(1.0, Math.max(0, volume)) : 0.5; // Default volume 50%\n this.audio.volume = this._volume;\n if (typeof source === 'function') {\n const result = source();\n if (typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n result.then((data) => this.setAudioSource(data));\n } else {\n this.setAudioSource(result as AudioSource);\n }\n } else {\n this.setAudioSource(source);\n }\n this.onPlayEnd = () => {\n this.options?.onPlayEnd?.();\n };\n this.addEventListener('ended', this.onPlayEnd);\n }\n\n /**\n * - **EN:** Check if audio is currently playing\n * - **CN:** 检查音频是否正在播放\n */\n public get isPlaying() {\n return !this.audio.paused && !this.audio.ended;\n }\n /**\n * - **EN:** Get current playback time (seconds)\n * - **CN:** 获取当前播放时间(秒)\n */\n get currentTime(): number {\n return this.audio.currentTime;\n }\n /**\n * - **EN:** Get total audio duration (seconds)\n * - **CN:** 获取音频总时长(秒)\n */\n get duration(): number {\n return this.audio.duration;\n }\n /**\n * - **EN:** Get current volume value (0-1)\n * - **CN:** 获取当前音量值(0-1)\n */\n get volume(): number {\n return this._volume;\n }\n\n /**\n * - **EN:** Play audio. If previously paused, will resume from the pause position\n * - **CN:** 播放音频 如果之前暂停过,将从暂停位置继续播放\n */\n async play(): Promise<void> {\n if (!this.audioContext) {\n this.initAudioContext();\n }\n\n if (this.audioContext?.state === 'suspended') {\n await this.audioContext.resume();\n }\n\n try {\n await this.audio.play();\n this.options?.onPlay?.();\n } catch (error) {\n console.error('Error playing audio:', error);\n this.options?.onError?.(error);\n }\n }\n\n /**\n * - **EN:** Seek forward by a certain number of seconds\n * - **CN:** 向前跳转一定秒数\n *\n * @param seconds - number of seconds to seek forward | 要向前跳转的秒数\n */\n seekForward(seconds: number) {\n if (seconds < 0) {\n return;\n }\n if (!isNaN(this.audio.duration)) {\n this.audio.currentTime = Math.min(this.audio.currentTime + seconds, this.audio.duration);\n } else {\n this.audio.currentTime += seconds;\n }\n }\n /**\n * - **EN:** Seek backward by a certain number of seconds\n * - **CN:** 向后跳转一定秒数\n *\n * @param seconds - number of seconds to seek backward | 要向后跳转的秒数\n */\n seekBackward(seconds: number) {\n if (seconds < 0) {\n return;\n }\n this.audio.currentTime = Math.max(this.audio.currentTime - seconds, 0);\n }\n /**\n * - **EN:** Set current playback time (in seconds)\n * - **CN:** 设置当前播放时间(以秒为单位)\n *\n * @param time - time in seconds | 时间(秒)\n */\n seek(time: number) {\n // Ensure time is not less than 0\n const newTime = Math.max(0, time);\n // Ensure time is not greater than duration (if known)\n if (!isNaN(this.audio.duration)) {\n this.audio.currentTime = Math.min(newTime, this.audio.duration);\n } else {\n this.audio.currentTime = newTime;\n }\n }\n\n /**\n * - **EN:** Pause audio playback. When played again, will continue from current position\n * - **CN:** 暂停音频播放 再次播放时将从当前位置继续\n */\n pause(): void {\n this.audio.pause();\n this.options?.onPause?.();\n }\n\n /**\n * - **EN:** Stop audio playback. Progress will reset to the beginning\n * - **CN:** 停止音频播放 进度会重置到开始位置\n */\n stop(): void {\n this.audio.pause();\n this.audio.currentTime = 0;\n this.options?.onStop?.();\n }\n\n /**\n * - **EN:** Update audio source\n * - **CN:** 更新音频源\n *\n * @param source - can be a URL `string` or `ReadableStreamDefaultReader` |\n * 可以是URL字符串或`ReadableStreamDefaultReader`\n */\n async setAudioSource(source?: AudioSource): Promise<{ stopLoading: () => void }> {\n this.audio.pause();\n this.audio.src = '';\n this.disposeMediaSourceInternal();\n\n if (typeof source === 'string') {\n this.audio.src = source;\n return {\n stopLoading: () => {\n // empty function\n },\n };\n } else {\n return await this.handleStreamSource(source);\n }\n }\n\n /**\n * - **EN:** Increase volume (by 10% each time)\n * - **CN:** 增加音量(每次增加10%)\n *\n * @param percent - increase percentage (default 10%) | 增加百分比(默认10%)\n */\n volumeUp(percent = 0.1): void {\n this._volume = Math.min(1.0, this._volume + percent);\n this.updateVolume();\n }\n\n /**\n * - **EN:** Decrease volume (by 10% each time)\n * - **CN:** 降低音量(每次降低10%)\n *\n * @param percent - decrease percentage (default 10%) | 降低百分比(默认10%)\n */\n volumeDown(percent = 0.1): void {\n this._volume = Math.max(0, this._volume - percent);\n this.updateVolume();\n }\n\n /**\n * - **EN:** Set volume to a specific value (0-1)\n * - **CN:** 将音量设置为特定值(0-1)\n *\n * @param value - new volume value (0-1) | 新的音量值(0-1)\n */\n setVolume(value: number): void {\n this._volume = Math.min(1.0, Math.max(0, value));\n this.updateVolume();\n }\n\n /**\n * - **EN:** Add audio event listener\n * - **CN:** 添加音频事件监听器\n */\n addEventListener: HTMLAudioElement['addEventListener'] = (\n event: string,\n listener: EventListenerOrEventListenerObject\n ): void => {\n this.audio.addEventListener(event, listener);\n };\n\n /**\n * - **EN:** Remove audio event listener\n * - **CN:** 移除音频事件监听器\n */\n removeEventListener: HTMLAudioElement['removeEventListener'] = (\n event: string,\n listener: EventListenerOrEventListenerObject\n ): void => {\n this.audio.removeEventListener(event, listener);\n };\n\n /**\n * - **EN:** Release resources\n * - **CN:** 释放资源\n */\n dispose(): void {\n this.audio.pause();\n this.audio.src = '';\n this.removeEventListener('ended', this.onPlayEnd);\n\n if (this.audioContext) {\n try {\n this.audioContext.close();\n } catch (error) {\n console.error('Error closing AudioContext:', error);\n }\n this.audioContext = null;\n }\n\n this.sourceNode = null;\n this.gainNode = null;\n }\n private disposeMediaSourceInternal() {\n this.mediaSource = null;\n this.sourceBuffer = null;\n this.chunkQueue = [];\n this.appending = false;\n this.streamEnded = false;\n }\n\n /** Process streaming data source /ArrayBuffer/Uint8Array/Blob */\n private async handleStreamSource(\n source: Exclude<AudioSource, string> | undefined\n ): Promise<{ stopLoading: () => void }> {\n const result = {\n stopLoading: () => {\n // empty function\n },\n };\n if (!source) return result;\n try {\n if (source instanceof Blob) {\n const url = URL.createObjectURL(source);\n this.audio.src = url;\n return result;\n } else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n const blob = source instanceof Uint8Array ? new Blob([source]) : new Blob([new Uint8Array(source)]);\n const url = URL.createObjectURL(blob);\n this.audio.src = url;\n this.audio.onloadeddata = () => URL.revokeObjectURL(url);\n return result;\n } else {\n // Create a new ReadableStream to read data from the reader\n const mime = this.options?.mimeType || 'audio/mpeg';\n result.stopLoading = () => {\n this.stopLoadingSource = true;\n };\n await this.initMediaSourceForReader(source, mime);\n return result;\n }\n } catch (error) {\n console.error('Error processing audio stream:', error);\n this.options?.onError?.(error);\n throw error;\n }\n }\n\n /** Initialize Web Audio API for better volume control */\n private initAudioContext() {\n if (this.audioContext) return;\n\n this.audioContext = new AudioContext();\n this.sourceNode = this.audioContext.createMediaElementSource(this.audio);\n this.gainNode = this.audioContext.createGain();\n\n this.sourceNode.connect(this.gainNode);\n this.gainNode.connect(this.audioContext.destination);\n\n this.gainNode.gain.value = this._volume;\n }\n\n /** Update audio playback volume */\n private updateVolume(): void {\n if (this.gainNode) {\n this.gainNode.gain.value = this._volume;\n } else {\n this.audio.volume = this._volume;\n }\n }\n\n /** Initialize MediaSource and push reader chunks into SourceBuffer */\n private async initMediaSourceForReader(reader: ReadableStreamDefaultReader<Uint8Array>, mime: string) {\n if (typeof MediaSource === 'undefined') {\n console.warn('MediaSource is not supported, falling back to one-time buffering.');\n await this.fallbackReaderToBlob(reader);\n return;\n }\n if (typeof MediaSource !== 'undefined' && !MediaSource.isTypeSupported(mime)) {\n console.warn('MIME type is not supported, falling back to one-time buffering.');\n await this.fallbackReaderToBlob(reader);\n return;\n }\n\n this.mediaSource = new MediaSource();\n const objectURL = URL.createObjectURL(this.mediaSource);\n this.audio.src = objectURL;\n this.stopLoadingSource = false;\n\n this.mediaSource.addEventListener('sourceopen', () => {\n if (!this.mediaSource) return;\n this.sourceBuffer = this.mediaSource.addSourceBuffer(mime);\n\n this.sourceBuffer.addEventListener('updateend', () => {\n this.appending = false;\n this.tryAppendNext();\n this.finalizeMediaSourceIfPossible();\n });\n\n // Start reading loop\n this.readLoop(reader);\n });\n }\n\n /** Loop to read data from the reader */\n private async readLoop(reader: ReadableStreamDefaultReader<Uint8Array>) {\n try {\n // Auto play (optional)\n if (this.audio.paused) {\n void this.play();\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done || this.stopLoadingSource) {\n this.streamEnded = true;\n break;\n }\n if (value && value.byteLength) {\n this.chunkQueue.push(value);\n this.tryAppendNext();\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n // Try to finalize after the loop exits (including 0 chunk case)\n this.finalizeMediaSourceIfPossible();\n } catch (e) {\n console.error('Error reading stream:', e);\n this.options?.onError?.(e);\n }\n }\n\n /** Try to append the next chunk from the queue to the SourceBuffer */\n private tryAppendNext() {\n if (!this.sourceBuffer || this.appending) return;\n if (!this.chunkQueue.length) return;\n\n const chunk = this.chunkQueue.shift()!;\n this.appending = true;\n try {\n this.sourceBuffer.appendBuffer(chunk);\n } catch (e) {\n console.error('Error appending buffer:', e);\n this.appending = false;\n this.options?.onError?.(e);\n this.finalizeMediaSourceIfPossible();\n }\n }\n\n /** Finalize MediaSource if possible (stream ended, no pending chunks, and not updating) */\n private finalizeMediaSourceIfPossible(receivedAnyChunk = true) {\n if (\n this.mediaSource &&\n this.mediaSource.readyState === 'open' &&\n this.streamEnded &&\n !this.sourceBuffer?.updating &&\n this.chunkQueue.length === 0\n ) {\n try {\n this.mediaSource.endOfStream();\n } catch (e) {\n console.warn('endOfStream error:', e);\n }\n }\n }\n\n /** Fallback to one-time Blob synthesis when streaming is not supported */\n private async fallbackReaderToBlob(reader: ReadableStreamDefaultReader<Uint8Array>) {\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (err) {\n controller.error(err);\n }\n },\n });\n // Convert stream to Blob and create URL\n const response = new Response(stream);\n const blob = await response.blob();\n const url = URL.createObjectURL(blob);\n this.audio.src = url;\n this.audio.onloadeddata = () => URL.revokeObjectURL(url);\n }\n}\n\nexport default AudioPlayer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","_defineProperty","obj","_toPrimitive","String","toPrimitive","Number","AudioPlayer","options","_this","event","listener","audio","addEventListener","removeEventListener","_ref","source","volume","Audio","_volume","Math","min","max","result","data","setAudioSource","onPlayEnd","_this$options","_this$options$onPlayE","get","paused","ended","currentTime","duration","_play","_callee","_this$audioContext","_this$options2","_this$options2$onPlay","_this$options3","_this$options3$onErro","_callee$","_context","audioContext","initAudioContext","state","resume","play","onPlay","t0","console","onError","seekForward","seconds","seekBackward","seek","time","newTime","pause","_this$options4","_this$options4$onPaus","onPause","_this$options5","_this$options5$onStop","onStop","_setAudioSource","_callee2","_callee2$","_context2","src","disposeMediaSourceInternal","stopLoading","handleStreamSource","_x","volumeUp","percent","updateVolume","volumeDown","setVolume","dispose","close","sourceNode","gainNode","mediaSource","sourceBuffer","chunkQueue","appending","streamEnded","_handleStreamSource","_callee3","_this2","url","blob","_url","_this$options6","mime","_this$options7","_this$options7$onErro","_callee3$","_context3","Blob","URL","createObjectURL","ArrayBuffer","Uint8Array","onloadeddata","revokeObjectURL","mimeType","stopLoadingSource","initMediaSourceForReader","_x2","AudioContext","createMediaElementSource","createGain","connect","destination","gain","_initMediaSourceForReader","_callee4","reader","_this3","objectURL","_callee4$","_context4","MediaSource","warn","fallbackReaderToBlob","isTypeSupported","addSourceBuffer","tryAppendNext","finalizeMediaSourceIfPossible","readLoop","_x3","_x4","_readLoop","_callee5","_yield$reader$read","_this$options8","_this$options8$onErro","_callee5$","_context5","read","byteLength","setTimeout","_x5","chunk","shift","appendBuffer","_this$options9","_this$options9$onErro","_this$sourceBuffer","receivedAnyChunk","readyState","updating","endOfStream","_fallbackReaderToBlob","_callee7","stream","response","_callee7$","_context7","ReadableStream","pull","controller","_callee6","_yield$reader$read2","_callee6$","_context6","enqueue","Response","_x6"],"sources":["../../src/utils/AudioPlayer.ts"],"sourcesContent":["export type AudioSource = string | ReadableStreamDefaultReader<Uint8Array> | ArrayBuffer | Uint8Array | Blob;\n\nexport interface AudioPlayerInit {\n /**\n * - **EN:** Audio source (URL or streaming data)\n * - **CN:** 音频源(URL或流数据)\n */\n source?: AudioSource | (() => AudioSource | Promise<AudioSource>);\n /**\n * - **EN:** MIME type of the audio (e.g., 'audio/mpeg', 'audio/wav'). Optional.\n * - **CN:** 音频的MIME类型(例如,'audio/mpeg','audio/wav')。可选。\n */\n mimeType?: string;\n /**\n * - **EN:** Initial volume level (0-1). Default is `0.5`\n * - **CN:** 初始音量级别(0-1)。默认值为`0.5`\n */\n volume?: number;\n /**\n * - **EN:** Callback when audio starts playing\n * - **CN:** 音频开始播放时的回调\n */\n onPlay?: () => void;\n /**\n * - **EN:** Callback when audio is paused\n * - **CN:** 音频暂停时的回调\n */\n onPause?: () => void;\n /**\n * - **EN:** Callback when audio is stopped\n * - **CN:** 音频停止时的回调\n */\n onStop?: () => void;\n\n /**\n * - **EN:** Callback when audio playback ends\n * - **CN:** 音频播放结束时的回调\n */\n onPlayEnd?: () => void;\n /**\n * - **EN:** Callback when an error occurs\n * - **CN:** 发生错误时的回调\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onError?: (error: any) => void;\n}\n\n/**\n * - **EN:** An audio player class that supports URL or streaming data input\n * - **CN:** 一个音频播放器类,支持URL或流数据输入\n */\nclass AudioPlayer {\n private audio: HTMLAudioElement;\n private _volume: number;\n private audioContext: AudioContext | null = null;\n private gainNode: GainNode | null = null;\n private sourceNode: MediaElementAudioSourceNode | null = null;\n private options: AudioPlayerInit | undefined;\n private mediaSource: MediaSource | null = null;\n private sourceBuffer: SourceBuffer | null = null;\n private chunkQueue: Uint8Array[] = [];\n private appending = false;\n private streamEnded = false;\n private stopLoadingSource = false;\n private onPlayEnd: () => void;\n\n /**\n * - **EN:** Creates an audio player instance\n * - **CN:** 创建音频播放器实例\n *\n * @param source - can be a URL string or ReadableStreamDefaultReader |\n * 可以是URL字符串或ReadableStreamDefaultReader\n */\n constructor(options?: AudioPlayerInit) {\n const { source, volume } = options || {};\n this.options = options;\n this.audio = new Audio();\n this._volume = volume != null ? Math.min(1.0, Math.max(0, volume)) : 0.5; // Default volume 50%\n this.audio.volume = this._volume;\n if (typeof source === 'function') {\n const result = source();\n if (typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n result.then((data) => this.setAudioSource(data));\n } else {\n this.setAudioSource(result as AudioSource);\n }\n } else {\n this.setAudioSource(source);\n }\n this.onPlayEnd = () => {\n this.options?.onPlayEnd?.();\n };\n this.addEventListener('ended', this.onPlayEnd);\n }\n\n /**\n * - **EN:** Check if audio is currently playing\n * - **CN:** 检查音频是否正在播放\n */\n public get isPlaying() {\n return !this.audio.paused && !this.audio.ended;\n }\n /**\n * - **EN:** Get current playback time (seconds)\n * - **CN:** 获取当前播放时间(秒)\n */\n get currentTime(): number {\n return this.audio.currentTime;\n }\n /**\n * - **EN:** Get total audio duration (seconds)\n * - **CN:** 获取音频总时长(秒)\n */\n get duration(): number {\n return this.audio.duration;\n }\n /**\n * - **EN:** Get current volume value (0-1)\n * - **CN:** 获取当前音量值(0-1)\n */\n get volume(): number {\n return this._volume;\n }\n\n /**\n * - **EN:** Play audio. If previously paused, will resume from the pause position\n * - **CN:** 播放音频 如果之前暂停过,将从暂停位置继续播放\n */\n async play(): Promise<void> {\n if (!this.audioContext) {\n this.initAudioContext();\n }\n\n if (this.audioContext?.state === 'suspended') {\n await this.audioContext.resume();\n }\n\n try {\n await this.audio.play();\n this.options?.onPlay?.();\n } catch (error) {\n console.error('Error playing audio:', error);\n this.options?.onError?.(error);\n }\n }\n\n /**\n * - **EN:** Seek forward by a certain number of seconds\n * - **CN:** 向前跳转一定秒数\n *\n * @param seconds - number of seconds to seek forward | 要向前跳转的秒数\n */\n seekForward(seconds: number) {\n if (seconds < 0) {\n return;\n }\n if (!isNaN(this.audio.duration)) {\n this.audio.currentTime = Math.min(this.audio.currentTime + seconds, this.audio.duration);\n } else {\n this.audio.currentTime += seconds;\n }\n }\n /**\n * - **EN:** Seek backward by a certain number of seconds\n * - **CN:** 向后跳转一定秒数\n *\n * @param seconds - number of seconds to seek backward | 要向后跳转的秒数\n */\n seekBackward(seconds: number) {\n if (seconds < 0) {\n return;\n }\n this.audio.currentTime = Math.max(this.audio.currentTime - seconds, 0);\n }\n /**\n * - **EN:** Set current playback time (in seconds)\n * - **CN:** 设置当前播放时间(以秒为单位)\n *\n * @param time - time in seconds | 时间(秒)\n */\n seek(time: number) {\n // Ensure time is not less than 0\n const newTime = Math.max(0, time);\n // Ensure time is not greater than duration (if known)\n if (!isNaN(this.audio.duration)) {\n this.audio.currentTime = Math.min(newTime, this.audio.duration);\n } else {\n this.audio.currentTime = newTime;\n }\n }\n\n /**\n * - **EN:** Pause audio playback. When played again, will continue from current position\n * - **CN:** 暂停音频播放 再次播放时将从当前位置继续\n */\n pause(): void {\n this.audio.pause();\n this.options?.onPause?.();\n }\n\n /**\n * - **EN:** Stop audio playback. Progress will reset to the beginning\n * - **CN:** 停止音频播放 进度会重置到开始位置\n */\n stop(): void {\n this.audio.pause();\n this.audio.currentTime = 0;\n this.options?.onStop?.();\n }\n\n /**\n * - **EN:** Update audio source\n * - **CN:** 更新音频源\n *\n * @param source - can be a URL `string` or `ReadableStreamDefaultReader` |\n * 可以是URL字符串或`ReadableStreamDefaultReader`\n */\n async setAudioSource(source?: AudioSource): Promise<{ stopLoading: () => void }> {\n this.audio.pause();\n this.audio.src = '';\n this.disposeMediaSourceInternal();\n\n if (typeof source === 'string') {\n this.audio.src = source;\n return {\n stopLoading: () => {\n // a stub function\n },\n };\n } else {\n return await this.handleStreamSource(source);\n }\n }\n\n /**\n * - **EN:** Increase volume (by 10% each time)\n * - **CN:** 增加音量(每次增加10%)\n *\n * @param percent - increase percentage (default 10%) | 增加百分比(默认10%)\n */\n volumeUp(percent = 0.1): void {\n this._volume = Math.min(1.0, this._volume + percent);\n this.updateVolume();\n }\n\n /**\n * - **EN:** Decrease volume (by 10% each time)\n * - **CN:** 降低音量(每次降低10%)\n *\n * @param percent - decrease percentage (default 10%) | 降低百分比(默认10%)\n */\n volumeDown(percent = 0.1): void {\n this._volume = Math.max(0, this._volume - percent);\n this.updateVolume();\n }\n\n /**\n * - **EN:** Set volume to a specific value (0-1)\n * - **CN:** 将音量设置为特定值(0-1)\n *\n * @param value - new volume value (0-1) | 新的音量值(0-1)\n */\n setVolume(value: number): void {\n this._volume = Math.min(1.0, Math.max(0, value));\n this.updateVolume();\n }\n\n /**\n * - **EN:** Add audio event listener\n * - **CN:** 添加音频事件监听器\n */\n addEventListener: HTMLAudioElement['addEventListener'] = (\n event: string,\n listener: EventListenerOrEventListenerObject\n ): void => {\n this.audio.addEventListener(event, listener);\n };\n\n /**\n * - **EN:** Remove audio event listener\n * - **CN:** 移除音频事件监听器\n */\n removeEventListener: HTMLAudioElement['removeEventListener'] = (\n event: string,\n listener: EventListenerOrEventListenerObject\n ): void => {\n this.audio.removeEventListener(event, listener);\n };\n\n /**\n * - **EN:** Release resources\n * - **CN:** 释放资源\n */\n dispose(): void {\n this.audio.pause();\n this.audio.src = '';\n this.removeEventListener('ended', this.onPlayEnd);\n\n if (this.audioContext) {\n try {\n this.audioContext.close();\n } catch (error) {\n console.error('Error closing AudioContext:', error);\n }\n this.audioContext = null;\n }\n\n this.sourceNode = null;\n this.gainNode = null;\n }\n private disposeMediaSourceInternal() {\n this.mediaSource = null;\n this.sourceBuffer = null;\n this.chunkQueue = [];\n this.appending = false;\n this.streamEnded = false;\n }\n\n /** Process streaming data source /ArrayBuffer/Uint8Array/Blob */\n private async handleStreamSource(\n source: Exclude<AudioSource, string> | undefined\n ): Promise<{ stopLoading: () => void }> {\n const result = {\n stopLoading: () => {\n // a stub function\n },\n };\n if (!source) return result;\n try {\n if (source instanceof Blob) {\n const url = URL.createObjectURL(source);\n this.audio.src = url;\n return result;\n } else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n const blob = source instanceof Uint8Array ? new Blob([source]) : new Blob([new Uint8Array(source)]);\n const url = URL.createObjectURL(blob);\n this.audio.src = url;\n this.audio.onloadeddata = () => URL.revokeObjectURL(url);\n return result;\n } else {\n // Create a new ReadableStream to read data from the reader\n const mime = this.options?.mimeType || 'audio/mpeg';\n result.stopLoading = () => {\n this.stopLoadingSource = true;\n };\n await this.initMediaSourceForReader(source, mime);\n return result;\n }\n } catch (error) {\n console.error('Error processing audio stream:', error);\n this.options?.onError?.(error);\n throw error;\n }\n }\n\n /** Initialize Web Audio API for better volume control */\n private initAudioContext() {\n if (this.audioContext) return;\n\n this.audioContext = new AudioContext();\n this.sourceNode = this.audioContext.createMediaElementSource(this.audio);\n this.gainNode = this.audioContext.createGain();\n\n this.sourceNode.connect(this.gainNode);\n this.gainNode.connect(this.audioContext.destination);\n\n this.gainNode.gain.value = this._volume;\n }\n\n /** Update audio playback volume */\n private updateVolume(): void {\n if (this.gainNode) {\n this.gainNode.gain.value = this._volume;\n } else {\n this.audio.volume = this._volume;\n }\n }\n\n /** Initialize MediaSource and push reader chunks into SourceBuffer */\n private async initMediaSourceForReader(reader: ReadableStreamDefaultReader<Uint8Array>, mime: string) {\n if (typeof MediaSource === 'undefined') {\n console.warn('MediaSource is not supported, falling back to one-time buffering.');\n await this.fallbackReaderToBlob(reader);\n return;\n }\n if (typeof MediaSource !== 'undefined' && !MediaSource.isTypeSupported(mime)) {\n console.warn('MIME type is not supported, falling back to one-time buffering.');\n await this.fallbackReaderToBlob(reader);\n return;\n }\n\n this.mediaSource = new MediaSource();\n const objectURL = URL.createObjectURL(this.mediaSource);\n this.audio.src = objectURL;\n this.stopLoadingSource = false;\n\n this.mediaSource.addEventListener('sourceopen', () => {\n if (!this.mediaSource) return;\n this.sourceBuffer = this.mediaSource.addSourceBuffer(mime);\n\n this.sourceBuffer.addEventListener('updateend', () => {\n this.appending = false;\n this.tryAppendNext();\n this.finalizeMediaSourceIfPossible();\n });\n\n // Start reading loop\n this.readLoop(reader);\n });\n }\n\n /** Loop to read data from the reader */\n private async readLoop(reader: ReadableStreamDefaultReader<Uint8Array>) {\n try {\n // Auto play (optional)\n if (this.audio.paused) {\n void this.play();\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done || this.stopLoadingSource) {\n this.streamEnded = true;\n break;\n }\n if (value && value.byteLength) {\n this.chunkQueue.push(value);\n this.tryAppendNext();\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n // Try to finalize after the loop exits (including 0 chunk case)\n this.finalizeMediaSourceIfPossible();\n } catch (e) {\n console.error('Error reading stream:', e);\n this.options?.onError?.(e);\n }\n }\n\n /** Try to append the next chunk from the queue to the SourceBuffer */\n private tryAppendNext() {\n if (!this.sourceBuffer || this.appending) return;\n if (!this.chunkQueue.length) return;\n\n const chunk = this.chunkQueue.shift()!;\n this.appending = true;\n try {\n this.sourceBuffer.appendBuffer(chunk);\n } catch (e) {\n console.error('Error appending buffer:', e);\n this.appending = false;\n this.options?.onError?.(e);\n this.finalizeMediaSourceIfPossible();\n }\n }\n\n /** Finalize MediaSource if possible (stream ended, no pending chunks, and not updating) */\n private finalizeMediaSourceIfPossible(receivedAnyChunk = true) {\n if (\n this.mediaSource &&\n this.mediaSource.readyState === 'open' &&\n this.streamEnded &&\n !this.sourceBuffer?.updating &&\n this.chunkQueue.length === 0\n ) {\n try {\n this.mediaSource.endOfStream();\n } catch (e) {\n console.warn('endOfStream error:', e);\n }\n }\n }\n\n /** Fallback to one-time Blob synthesis when streaming is not supported */\n private async fallbackReaderToBlob(reader: ReadableStreamDefaultReader<Uint8Array>) {\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (err) {\n controller.error(err);\n }\n },\n });\n // Convert stream to Blob and create URL\n const response = new Response(stream);\n const blob = await response.blob();\n const url = URL.createObjectURL(blob);\n this.audio.src = url;\n this.audio.onloadeddata = () => URL.revokeObjectURL(url);\n }\n}\n\nexport default AudioPlayer;\n"],"mappings":"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"}
|
package/lib/hooks/index.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
export { default as useAudioPlayer } from './useAudioPlayer';
|
|
2
|
+
export { default as useDebounce } from './useDebounce';
|
|
2
3
|
export { default as useRefValue } from './useRefValue';
|
|
3
4
|
export { default as useRefFunction } from './useRefFunction';
|
|
4
5
|
export * from './useSSE';
|
|
5
6
|
export { default as useSSE } from './useSSE';
|
|
6
7
|
export * from './useStompSocket';
|
|
7
8
|
export { default as useStompSocket } from './useStompSocket';
|
|
9
|
+
export * from './useUserMedia';
|
|
10
|
+
export { default as useUserMedia } from './useUserMedia';
|
|
8
11
|
export type { ValidatorRuleMap } from './useValidators';
|
|
9
12
|
export { default as useValidators } from './useValidators';
|
|
10
13
|
export { default as useValidator } from './useValidator';
|
|
11
14
|
export type { Validator, RuleRegExpFlags, ValidatorRule, BuilderOptions } from './useValidatorBuilder';
|
|
12
15
|
export { default as useValidatorBuilder } from './useValidatorBuilder';
|
|
13
|
-
export * from './useUserMedia';
|
|
14
|
-
export { default as useUserMedia } from './useUserMedia';
|
package/lib/hooks/index.js
CHANGED
|
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
var hooks_exports = {};
|
|
32
32
|
__export(hooks_exports, {
|
|
33
33
|
useAudioPlayer: () => import_useAudioPlayer.default,
|
|
34
|
+
useDebounce: () => import_useDebounce.default,
|
|
34
35
|
useRefFunction: () => import_useRefFunction.default,
|
|
35
36
|
useRefValue: () => import_useRefValue.default,
|
|
36
37
|
useSSE: () => import_useSSE.default,
|
|
@@ -42,20 +43,22 @@ __export(hooks_exports, {
|
|
|
42
43
|
});
|
|
43
44
|
module.exports = __toCommonJS(hooks_exports);
|
|
44
45
|
var import_useAudioPlayer = __toESM(require("./useAudioPlayer"));
|
|
46
|
+
var import_useDebounce = __toESM(require("./useDebounce"));
|
|
45
47
|
var import_useRefValue = __toESM(require("./useRefValue"));
|
|
46
48
|
var import_useRefFunction = __toESM(require("./useRefFunction"));
|
|
47
49
|
__reExport(hooks_exports, require("./useSSE"), module.exports);
|
|
48
50
|
var import_useSSE = __toESM(require("./useSSE"));
|
|
49
51
|
__reExport(hooks_exports, require("./useStompSocket"), module.exports);
|
|
50
52
|
var import_useStompSocket = __toESM(require("./useStompSocket"));
|
|
53
|
+
__reExport(hooks_exports, require("./useUserMedia"), module.exports);
|
|
54
|
+
var import_useUserMedia = __toESM(require("./useUserMedia"));
|
|
51
55
|
var import_useValidators = __toESM(require("./useValidators"));
|
|
52
56
|
var import_useValidator = __toESM(require("./useValidator"));
|
|
53
57
|
var import_useValidatorBuilder = __toESM(require("./useValidatorBuilder"));
|
|
54
|
-
__reExport(hooks_exports, require("./useUserMedia"), module.exports);
|
|
55
|
-
var import_useUserMedia = __toESM(require("./useUserMedia"));
|
|
56
58
|
// Annotate the CommonJS export names for ESM import in node:
|
|
57
59
|
0 && (module.exports = {
|
|
58
60
|
useAudioPlayer,
|
|
61
|
+
useDebounce,
|
|
59
62
|
useRefFunction,
|
|
60
63
|
useRefValue,
|
|
61
64
|
useSSE,
|
package/lib/hooks/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/hooks/index.ts"],
|
|
4
|
-
"sourcesContent": ["export { default as useAudioPlayer } from './useAudioPlayer';\nexport { default as useRefValue } from './useRefValue';\nexport { default as useRefFunction } from './useRefFunction';\nexport * from './useSSE';\nexport { default as useSSE } from './useSSE';\nexport * from './useStompSocket';\nexport { default as useStompSocket } from './useStompSocket';\nexport type { ValidatorRuleMap } from './useValidators';\nexport { default as useValidators } from './useValidators';\nexport { default as useValidator } from './useValidator';\nexport type { Validator, RuleRegExpFlags, ValidatorRule, BuilderOptions } from './useValidatorBuilder';\nexport { default as useValidatorBuilder } from './useValidatorBuilder';\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAA0C;AAC1C,yBAAuC;AACvC,4BAA0C;AAC1C,0BAAc,
|
|
4
|
+
"sourcesContent": ["export { default as useAudioPlayer } from './useAudioPlayer';\nexport { default as useDebounce } from './useDebounce';\nexport { default as useRefValue } from './useRefValue';\nexport { default as useRefFunction } from './useRefFunction';\nexport * from './useSSE';\nexport { default as useSSE } from './useSSE';\nexport * from './useStompSocket';\nexport { default as useStompSocket } from './useStompSocket';\nexport * from './useUserMedia';\nexport { default as useUserMedia } from './useUserMedia';\nexport type { ValidatorRuleMap } from './useValidators';\nexport { default as useValidators } from './useValidators';\nexport { default as useValidator } from './useValidator';\nexport type { Validator, RuleRegExpFlags, ValidatorRule, BuilderOptions } from './useValidatorBuilder';\nexport { default as useValidatorBuilder } from './useValidatorBuilder';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAA0C;AAC1C,yBAAuC;AACvC,yBAAuC;AACvC,4BAA0C;AAC1C,0BAAc,qBAJd;AAKA,oBAAkC;AAClC,0BAAc,6BANd;AAOA,4BAA0C;AAC1C,0BAAc,2BARd;AASA,0BAAwC;AAExC,2BAAyC;AACzC,0BAAwC;AAExC,iCAA+C;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface UseDebounceOptions {
|
|
3
|
+
/**
|
|
4
|
+
* - **EN** Whether to execute at the start of the wait period. Default is `false`.
|
|
5
|
+
* - **CN** 是否在等待周期开始时执行,默认值为 `false`
|
|
6
|
+
*/
|
|
7
|
+
leading?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* - **EN** Regular debounce interval in milliseconds. Default is `0`, meaning no debounce.
|
|
10
|
+
* - **CN** 常规防抖间隔 (ms),默认值为 `0`, 表示不进行防抖
|
|
11
|
+
*/
|
|
12
|
+
wait?: number;
|
|
13
|
+
/**
|
|
14
|
+
* - **EN** Maximum wait time in milliseconds. Default is `0`, meaning no maximum wait.
|
|
15
|
+
* - **CN** 最大等待时间 (ms),默认值为 `0`, 表示不限制最大等待时间
|
|
16
|
+
*/
|
|
17
|
+
maxWait?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* - **EN** Debounce Hook with dual trigger mechanisms:
|
|
21
|
+
*
|
|
22
|
+
* 1. Traditional debounce: Executes after a specified interval without new calls.
|
|
23
|
+
* 2. Max wait: Forces execution after exceeding a specified maximum wait time.
|
|
24
|
+
* - **CN** 防抖 Hook:具有两种触发机制:
|
|
25
|
+
*
|
|
26
|
+
* 1. 传统防抖:等待指定时间内无新调用后执行
|
|
27
|
+
* 2. 最大等待:超过指定最大等待时间后强制执行
|
|
28
|
+
*
|
|
29
|
+
* @param fn The function to debounce | 需要防抖的函数
|
|
30
|
+
* @param deps Dependency array, re-creates the debounced function when dependencies change |
|
|
31
|
+
* 依赖项数组,当依赖变化时重新创建防抖函数
|
|
32
|
+
* @param options Configuration options | 配置选项
|
|
33
|
+
*
|
|
34
|
+
* @returns The debounced function | 防抖处理后的函数
|
|
35
|
+
*/
|
|
36
|
+
declare function useDebounce<T extends (...args: any[]) => unknown>(fn: T, deps: React.DependencyList, options?: UseDebounceOptions): (...args: Parameters<T>) => void;
|
|
37
|
+
export default useDebounce;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/hooks/useDebounce.ts
|
|
20
|
+
var useDebounce_exports = {};
|
|
21
|
+
__export(useDebounce_exports, {
|
|
22
|
+
default: () => useDebounce_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(useDebounce_exports);
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
function useDebounce(fn, deps, options = {}) {
|
|
27
|
+
const { wait = 0, maxWait = 0, leading = false } = options;
|
|
28
|
+
const timeoutRef = (0, import_react.useRef)(null);
|
|
29
|
+
const fnRef = (0, import_react.useRef)(fn);
|
|
30
|
+
const lastExecutedTimeRef = (0, import_react.useRef)(0);
|
|
31
|
+
const lastArgsRef = (0, import_react.useRef)([]);
|
|
32
|
+
(0, import_react.useEffect)(() => {
|
|
33
|
+
fnRef.current = fn;
|
|
34
|
+
}, [fn]);
|
|
35
|
+
(0, import_react.useEffect)(() => {
|
|
36
|
+
return () => {
|
|
37
|
+
if (timeoutRef.current) {
|
|
38
|
+
clearTimeout(timeoutRef.current);
|
|
39
|
+
timeoutRef.current = null;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}, []);
|
|
43
|
+
const executeFunction = (0, import_react.useCallback)(() => {
|
|
44
|
+
timeoutRef.current = null;
|
|
45
|
+
lastExecutedTimeRef.current = Date.now();
|
|
46
|
+
fnRef.current(...lastArgsRef.current);
|
|
47
|
+
}, []);
|
|
48
|
+
return (0, import_react.useCallback)(
|
|
49
|
+
(...args) => {
|
|
50
|
+
const now = Date.now();
|
|
51
|
+
lastArgsRef.current = args;
|
|
52
|
+
if (leading && timeoutRef.current === null && now - lastExecutedTimeRef.current >= wait) {
|
|
53
|
+
executeFunction();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (timeoutRef.current !== null) {
|
|
57
|
+
clearTimeout(timeoutRef.current);
|
|
58
|
+
timeoutRef.current = null;
|
|
59
|
+
}
|
|
60
|
+
if (maxWait > 0 && now - lastExecutedTimeRef.current >= maxWait) {
|
|
61
|
+
executeFunction();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
timeoutRef.current = setTimeout(executeFunction, wait);
|
|
65
|
+
},
|
|
66
|
+
// eslint-disable-next-line @tiny-codes/react-hooks/exhaustive-deps
|
|
67
|
+
[wait, maxWait, executeFunction, leading, ...deps]
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
var useDebounce_default = useDebounce;
|
|
71
|
+
//# sourceMappingURL=useDebounce.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/hooks/useDebounce.ts"],
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useRef } from 'react';\n\nexport interface UseDebounceOptions {\n /**\n * - **EN** Whether to execute at the start of the wait period. Default is `false`.\n * - **CN** 是否在等待周期开始时执行,默认值为 `false`\n */\n leading?: boolean;\n /**\n * - **EN** Regular debounce interval in milliseconds. Default is `0`, meaning no debounce.\n * - **CN** 常规防抖间隔 (ms),默认值为 `0`, 表示不进行防抖\n */\n wait?: number;\n /**\n * - **EN** Maximum wait time in milliseconds. Default is `0`, meaning no maximum wait.\n * - **CN** 最大等待时间 (ms),默认值为 `0`, 表示不限制最大等待时间\n */\n maxWait?: number;\n}\n/**\n * - **EN** Debounce Hook with dual trigger mechanisms:\n *\n * 1. Traditional debounce: Executes after a specified interval without new calls.\n * 2. Max wait: Forces execution after exceeding a specified maximum wait time.\n * - **CN** 防抖 Hook:具有两种触发机制:\n *\n * 1. 传统防抖:等待指定时间内无新调用后执行\n * 2. 最大等待:超过指定最大等待时间后强制执行\n *\n * @param fn The function to debounce | 需要防抖的函数\n * @param deps Dependency array, re-creates the debounced function when dependencies change |\n * 依赖项数组,当依赖变化时重新创建防抖函数\n * @param options Configuration options | 配置选项\n *\n * @returns The debounced function | 防抖处理后的函数\n */\nfunction useDebounce<T extends (...args: any[]) => unknown>(\n fn: T,\n deps: React.DependencyList,\n options: UseDebounceOptions = {}\n): (...args: Parameters<T>) => void {\n const { wait = 0, maxWait = 0, leading = false } = options;\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const fnRef = useRef<T>(fn);\n const lastExecutedTimeRef = useRef<number>(0); // The last execution timestamp\n const lastArgsRef = useRef<unknown[]>([]); // The last call arguments\n\n // Update the latest function reference\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, []);\n\n // The actual execution function\n const executeFunction = useCallback(() => {\n timeoutRef.current = null;\n lastExecutedTimeRef.current = Date.now();\n fnRef.current(...lastArgsRef.current);\n }, []);\n\n // The debounced function\n return useCallback(\n (...args: Parameters<T>) => {\n const now = Date.now();\n lastArgsRef.current = args;\n\n // If leading is true and it's the first call, execute immediately\n if (leading && timeoutRef.current === null && now - lastExecutedTimeRef.current >= wait) {\n executeFunction();\n return;\n }\n\n // 1. Clear the existing timer\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n // 2. Check if the maximum wait time has been exceeded, if so, execute immediately\n if (maxWait > 0 && now - lastExecutedTimeRef.current >= maxWait) {\n executeFunction();\n return;\n }\n\n // 3. Set a new debounce timer\n timeoutRef.current = setTimeout(executeFunction, wait);\n },\n // eslint-disable-next-line @tiny-codes/react-hooks/exhaustive-deps\n [wait, maxWait, executeFunction, leading, ...deps]\n );\n}\n\nexport default useDebounce;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA+C;AAoC/C,SAAS,YACP,IACA,MACA,UAA8B,CAAC,GACG;AAClC,QAAM,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,MAAM,IAAI;AACnD,QAAM,iBAAa,qBAA6C,IAAI;AACpE,QAAM,YAAQ,qBAAU,EAAE;AAC1B,QAAM,0BAAsB,qBAAe,CAAC;AAC5C,QAAM,kBAAc,qBAAkB,CAAC,CAAC;AAGxC,8BAAU,MAAM;AACd,UAAM,UAAU;AAAA,EAClB,GAAG,CAAC,EAAE,CAAC;AAGP,8BAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAC/B,mBAAW,UAAU;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,QAAM,sBAAkB,0BAAY,MAAM;AACxC,eAAW,UAAU;AACrB,wBAAoB,UAAU,KAAK,IAAI;AACvC,UAAM,QAAQ,GAAG,YAAY,OAAO;AAAA,EACtC,GAAG,CAAC,CAAC;AAGL,aAAO;AAAA,IACL,IAAI,SAAwB;AAC1B,YAAM,MAAM,KAAK,IAAI;AACrB,kBAAY,UAAU;AAGtB,UAAI,WAAW,WAAW,YAAY,QAAQ,MAAM,oBAAoB,WAAW,MAAM;AACvF,wBAAgB;AAChB;AAAA,MACF;AAGA,UAAI,WAAW,YAAY,MAAM;AAC/B,qBAAa,WAAW,OAAO;AAC/B,mBAAW,UAAU;AAAA,MACvB;AAGA,UAAI,UAAU,KAAK,MAAM,oBAAoB,WAAW,SAAS;AAC/D,wBAAgB;AAChB;AAAA,MACF;AAGA,iBAAW,UAAU,WAAW,iBAAiB,IAAI;AAAA,IACvD;AAAA;AAAA,IAEA,CAAC,MAAM,SAAS,iBAAiB,SAAS,GAAG,IAAI;AAAA,EACnD;AACF;AAEA,IAAO,sBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/lib/hooks/useSSE.js
CHANGED
package/lib/hooks/useSSE.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/hooks/useSSE.ts"],
|
|
4
|
-
"sourcesContent": ["import { useEffect, useRef, useState } from 'react';\nimport type { EventSourceMessage, FetchEventSourceInit } from '@microsoft/fetch-event-source';\nimport { fetchEventSource } from '@microsoft/fetch-event-source';\nimport useRefFunction from './useRefFunction';\nimport useRefValue from './useRefValue';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface UseSSEProps<T = any> {\n /** The URL to connect to */\n url: RequestInfo;\n /** Options for the connection. */\n connectOptions?: Omit<FetchEventSourceInit, 'onmessage' | 'onerror' | 'onclose'>;\n /** Automatically connect to the SSE channel. Default is `false`. */\n autoConnect?: boolean;\n /** Automatically close the connection when the component unmounts. Default is `true`. */\n autoClose?: boolean;\n /** Function to parse the incoming message. If not provided, the default JSON parser will be used. */\n parseMessage?: (original: EventSourceMessage) => T;\n /** Callback function to handle incoming messages. */\n onMessage?: (messageData: T) => void;\n /** Callback function to handle errors. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onError?: (error: any) => void;\n /** Callback function to handle connection closure. */\n onClose?: () => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst useSSE = <T = any>(props: UseSSEProps<T>) => {\n const { url, autoConnect, connectOptions, onMessage, parseMessage, onError, onClose } = props;\n const autoConnectRef = useRefValue(autoConnect);\n const [isRequesting, setIsRequesting] = useState(false);\n const isRequestingRef = useRefValue(isRequesting);\n const [isConnected, setIsConnected] = useState<boolean>(false);\n const abortCtrlRef = useRef<AbortController | undefined>(undefined);\n\n const connect = useRefFunction(async (options?: FetchEventSourceInit & Partial<Pick<UseSSEProps, 'url'>>) => {\n const {\n url: connectUrl = url,\n headers = {},\n onopen,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onmessage,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onclose,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onerror,\n ...restOptions\n } = { ...connectOptions, ...options };\n abortCtrlRef.current = new AbortController();\n try {\n setIsRequesting(true);\n setIsConnected(false);\n let isError = false;\n let response: Response | undefined = undefined;\n await fetchEventSource(connectUrl, {\n method: 'post',\n signal: abortCtrlRef.current.signal,\n openWhenHidden: true,\n onopen: async (resp: Response) => {\n response = resp;\n if (!response.ok) {\n isError = true;\n return;\n }\n setIsConnected(true);\n onopen?.(response);\n },\n onmessage(event) {\n if (isRequestingRef.current) {\n setIsRequesting(false);\n }\n try {\n let parsed: T;\n if (parseMessage) {\n parsed = parseMessage(event);\n } else {\n parsed = event.data ? JSON.parse(event.data) : undefined;\n }\n if (parsed != null) {\n onMessage?.(parsed);\n }\n } catch (error) {\n console.error('Error parsing message data:', error);\n console.log('The underlying event:', event);\n }\n },\n onerror(error) {\n onError?.(error);\n },\n onclose() {\n if (isError) return;\n setIsRequesting(false);\n onClose?.();\n },\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n ...restOptions,\n });\n if (isError) {\n throw response;\n }\n setIsRequesting(false);\n } catch (error) {\n console.error('SSE connection error:', error);\n setIsRequesting(false);\n setIsConnected(false);\n }\n });\n\n const abort = useRefFunction(() => {\n setIsConnected(false);\n if (
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4C;AAE5C,gCAAiC;AACjC,4BAA2B;AAC3B,yBAAwB;AAwBxB,IAAM,SAAS,CAAU,UAA0B;AACjD,QAAM,EAAE,KAAK,aAAa,gBAAgB,WAAW,cAAc,SAAS,QAAQ,IAAI;AACxF,QAAM,qBAAiB,mBAAAA,SAAY,WAAW;AAC9C,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAS,KAAK;AACtD,QAAM,sBAAkB,mBAAAA,SAAY,YAAY;AAChD,QAAM,CAAC,aAAa,cAAc,QAAI,uBAAkB,KAAK;AAC7D,QAAM,mBAAe,qBAAoC,MAAS;AAElE,QAAM,cAAU,sBAAAC,SAAe,OAAO,YAAuE;AAC3G,UAAM;AAAA,MACJ,KAAK,aAAa;AAAA,MAClB,UAAU,CAAC;AAAA,MACX;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA,GAAG;AAAA,IACL,IAAI,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AACpC,iBAAa,UAAU,IAAI,gBAAgB;AAC3C,QAAI;AACF,sBAAgB,IAAI;AACpB,qBAAe,KAAK;AACpB,UAAI,UAAU;AACd,UAAI,WAAiC;AACrC,gBAAM,4CAAiB,YAAY;AAAA,QACjC,QAAQ;AAAA,QACR,QAAQ,aAAa,QAAQ;AAAA,QAC7B,gBAAgB;AAAA,QAChB,QAAQ,OAAO,SAAmB;AAChC,qBAAW;AACX,cAAI,CAAC,SAAS,IAAI;AAChB,sBAAU;AACV;AAAA,UACF;AACA,yBAAe,IAAI;AACnB,2CAAS;AAAA,QACX;AAAA,QACA,UAAU,OAAO;AACf,cAAI,gBAAgB,SAAS;AAC3B,4BAAgB,KAAK;AAAA,UACvB;AACA,cAAI;AACF,gBAAI;AACJ,gBAAI,cAAc;AAChB,uBAAS,aAAa,KAAK;AAAA,YAC7B,OAAO;AACL,uBAAS,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI,IAAI;AAAA,YACjD;AACA,gBAAI,UAAU,MAAM;AAClB,qDAAY;AAAA,YACd;AAAA,UACF,SAAS,OAAP;AACA,oBAAQ,MAAM,+BAA+B,KAAK;AAClD,oBAAQ,IAAI,yBAAyB,KAAK;AAAA,UAC5C;AAAA,QACF;AAAA,QACA,QAAQ,OAAO;AACb,6CAAU;AAAA,QACZ;AAAA,QACA,UAAU;AACR,cAAI;AAAS;AACb,0BAAgB,KAAK;AACrB;AAAA,QACF;AAAA,QACA,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,GAAG;AAAA,QACL;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AACD,UAAI,SAAS;AACX,cAAM;AAAA,MACR;AACA,sBAAgB,KAAK;AAAA,IACvB,SAAS,OAAP;AACA,cAAQ,MAAM,yBAAyB,KAAK;AAC5C,sBAAgB,KAAK;AACrB,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF,CAAC;AAED,QAAM,YAAQ,sBAAAA,SAAe,MAAM;AACjC,mBAAe,KAAK;AACpB,QAAI,
|
|
4
|
+
"sourcesContent": ["import { useEffect, useRef, useState } from 'react';\nimport type { EventSourceMessage, FetchEventSourceInit } from '@microsoft/fetch-event-source';\nimport { fetchEventSource } from '@microsoft/fetch-event-source';\nimport useRefFunction from './useRefFunction';\nimport useRefValue from './useRefValue';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface UseSSEProps<T = any> {\n /** The URL to connect to */\n url: RequestInfo;\n /** Options for the connection. */\n connectOptions?: Omit<FetchEventSourceInit, 'onmessage' | 'onerror' | 'onclose'>;\n /** Automatically connect to the SSE channel. Default is `false`. */\n autoConnect?: boolean;\n /** Automatically close the connection when the component unmounts. Default is `true`. */\n autoClose?: boolean;\n /** Function to parse the incoming message. If not provided, the default JSON parser will be used. */\n parseMessage?: (original: EventSourceMessage) => T;\n /** Callback function to handle incoming messages. */\n onMessage?: (messageData: T) => void;\n /** Callback function to handle errors. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onError?: (error: any) => void;\n /** Callback function to handle connection closure. */\n onClose?: () => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst useSSE = <T = any>(props: UseSSEProps<T>) => {\n const { url, autoConnect, connectOptions, onMessage, parseMessage, onError, onClose } = props;\n const autoConnectRef = useRefValue(autoConnect);\n const [isRequesting, setIsRequesting] = useState(false);\n const isRequestingRef = useRefValue(isRequesting);\n const [isConnected, setIsConnected] = useState<boolean>(false);\n const abortCtrlRef = useRef<AbortController | undefined>(undefined);\n\n const connect = useRefFunction(async (options?: FetchEventSourceInit & Partial<Pick<UseSSEProps, 'url'>>) => {\n const {\n url: connectUrl = url,\n headers = {},\n onopen,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onmessage,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onclose,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onerror,\n ...restOptions\n } = { ...connectOptions, ...options };\n abortCtrlRef.current = new AbortController();\n try {\n setIsRequesting(true);\n setIsConnected(false);\n let isError = false;\n let response: Response | undefined = undefined;\n await fetchEventSource(connectUrl, {\n method: 'post',\n signal: abortCtrlRef.current.signal,\n openWhenHidden: true,\n onopen: async (resp: Response) => {\n response = resp;\n if (!response.ok) {\n isError = true;\n return;\n }\n setIsConnected(true);\n onopen?.(response);\n },\n onmessage(event) {\n if (isRequestingRef.current) {\n setIsRequesting(false);\n }\n try {\n let parsed: T;\n if (parseMessage) {\n parsed = parseMessage(event);\n } else {\n parsed = event.data ? JSON.parse(event.data) : undefined;\n }\n if (parsed != null) {\n onMessage?.(parsed);\n }\n } catch (error) {\n console.error('Error parsing message data:', error);\n console.log('The underlying event:', event);\n }\n },\n onerror(error) {\n onError?.(error);\n },\n onclose() {\n if (isError) return;\n setIsRequesting(false);\n onClose?.();\n },\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n ...restOptions,\n });\n if (isError) {\n throw response;\n }\n setIsRequesting(false);\n } catch (error) {\n console.error('SSE connection error:', error);\n setIsRequesting(false);\n setIsConnected(false);\n }\n });\n\n const abort = useRefFunction(() => {\n setIsConnected(false);\n if (abortCtrlRef.current) {\n abortCtrlRef.current.abort();\n }\n });\n\n useEffect(() => {\n if (autoConnectRef.current) {\n connect();\n }\n return abort;\n }, []);\n\n // 清理函数\n return {\n connect,\n abort,\n isRequesting,\n isConnected,\n };\n};\n\nexport default useSSE;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4C;AAE5C,gCAAiC;AACjC,4BAA2B;AAC3B,yBAAwB;AAwBxB,IAAM,SAAS,CAAU,UAA0B;AACjD,QAAM,EAAE,KAAK,aAAa,gBAAgB,WAAW,cAAc,SAAS,QAAQ,IAAI;AACxF,QAAM,qBAAiB,mBAAAA,SAAY,WAAW;AAC9C,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAS,KAAK;AACtD,QAAM,sBAAkB,mBAAAA,SAAY,YAAY;AAChD,QAAM,CAAC,aAAa,cAAc,QAAI,uBAAkB,KAAK;AAC7D,QAAM,mBAAe,qBAAoC,MAAS;AAElE,QAAM,cAAU,sBAAAC,SAAe,OAAO,YAAuE;AAC3G,UAAM;AAAA,MACJ,KAAK,aAAa;AAAA,MAClB,UAAU,CAAC;AAAA,MACX;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA,GAAG;AAAA,IACL,IAAI,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AACpC,iBAAa,UAAU,IAAI,gBAAgB;AAC3C,QAAI;AACF,sBAAgB,IAAI;AACpB,qBAAe,KAAK;AACpB,UAAI,UAAU;AACd,UAAI,WAAiC;AACrC,gBAAM,4CAAiB,YAAY;AAAA,QACjC,QAAQ;AAAA,QACR,QAAQ,aAAa,QAAQ;AAAA,QAC7B,gBAAgB;AAAA,QAChB,QAAQ,OAAO,SAAmB;AAChC,qBAAW;AACX,cAAI,CAAC,SAAS,IAAI;AAChB,sBAAU;AACV;AAAA,UACF;AACA,yBAAe,IAAI;AACnB,2CAAS;AAAA,QACX;AAAA,QACA,UAAU,OAAO;AACf,cAAI,gBAAgB,SAAS;AAC3B,4BAAgB,KAAK;AAAA,UACvB;AACA,cAAI;AACF,gBAAI;AACJ,gBAAI,cAAc;AAChB,uBAAS,aAAa,KAAK;AAAA,YAC7B,OAAO;AACL,uBAAS,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI,IAAI;AAAA,YACjD;AACA,gBAAI,UAAU,MAAM;AAClB,qDAAY;AAAA,YACd;AAAA,UACF,SAAS,OAAP;AACA,oBAAQ,MAAM,+BAA+B,KAAK;AAClD,oBAAQ,IAAI,yBAAyB,KAAK;AAAA,UAC5C;AAAA,QACF;AAAA,QACA,QAAQ,OAAO;AACb,6CAAU;AAAA,QACZ;AAAA,QACA,UAAU;AACR,cAAI;AAAS;AACb,0BAAgB,KAAK;AACrB;AAAA,QACF;AAAA,QACA,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,GAAG;AAAA,QACL;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AACD,UAAI,SAAS;AACX,cAAM;AAAA,MACR;AACA,sBAAgB,KAAK;AAAA,IACvB,SAAS,OAAP;AACA,cAAQ,MAAM,yBAAyB,KAAK;AAC5C,sBAAgB,KAAK;AACrB,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF,CAAC;AAED,QAAM,YAAQ,sBAAAA,SAAe,MAAM;AACjC,mBAAe,KAAK;AACpB,QAAI,aAAa,SAAS;AACxB,mBAAa,QAAQ,MAAM;AAAA,IAC7B;AAAA,EACF,CAAC;AAED,8BAAU,MAAM;AACd,QAAI,eAAe,SAAS;AAC1B,cAAQ;AAAA,IACV;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAGL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": ["useRefValue", "useRefFunction"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/AudioPlayer.ts"],
|
|
4
|
-
"sourcesContent": ["export type AudioSource = string | ReadableStreamDefaultReader<Uint8Array> | ArrayBuffer | Uint8Array | Blob;\n\nexport interface AudioPlayerInit {\n /**\n * - **EN:** Audio source (URL or streaming data)\n * - **CN:** 音频源(URL或流数据)\n */\n source?: AudioSource | (() => AudioSource | Promise<AudioSource>);\n /**\n * - **EN:** MIME type of the audio (e.g., 'audio/mpeg', 'audio/wav'). Optional.\n * - **CN:** 音频的MIME类型(例如,'audio/mpeg','audio/wav')。可选。\n */\n mimeType?: string;\n /**\n * - **EN:** Initial volume level (0-1). Default is `0.5`\n * - **CN:** 初始音量级别(0-1)。默认值为`0.5`\n */\n volume?: number;\n /**\n * - **EN:** Callback when audio starts playing\n * - **CN:** 音频开始播放时的回调\n */\n onPlay?: () => void;\n /**\n * - **EN:** Callback when audio is paused\n * - **CN:** 音频暂停时的回调\n */\n onPause?: () => void;\n /**\n * - **EN:** Callback when audio is stopped\n * - **CN:** 音频停止时的回调\n */\n onStop?: () => void;\n\n /**\n * - **EN:** Callback when audio playback ends\n * - **CN:** 音频播放结束时的回调\n */\n onPlayEnd?: () => void;\n /**\n * - **EN:** Callback when an error occurs\n * - **CN:** 发生错误时的回调\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onError?: (error: any) => void;\n}\n\n/**\n * - **EN:** An audio player class that supports URL or streaming data input\n * - **CN:** 一个音频播放器类,支持URL或流数据输入\n */\nclass AudioPlayer {\n private audio: HTMLAudioElement;\n private _volume: number;\n private audioContext: AudioContext | null = null;\n private gainNode: GainNode | null = null;\n private sourceNode: MediaElementAudioSourceNode | null = null;\n private options: AudioPlayerInit | undefined;\n private mediaSource: MediaSource | null = null;\n private sourceBuffer: SourceBuffer | null = null;\n private chunkQueue: Uint8Array[] = [];\n private appending = false;\n private streamEnded = false;\n private stopLoadingSource = false;\n private onPlayEnd: () => void;\n\n /**\n * - **EN:** Creates an audio player instance\n * - **CN:** 创建音频播放器实例\n *\n * @param source - can be a URL string or ReadableStreamDefaultReader |\n * 可以是URL字符串或ReadableStreamDefaultReader\n */\n constructor(options?: AudioPlayerInit) {\n const { source, volume } = options || {};\n this.options = options;\n this.audio = new Audio();\n this._volume = volume != null ? Math.min(1.0, Math.max(0, volume)) : 0.5; // Default volume 50%\n this.audio.volume = this._volume;\n if (typeof source === 'function') {\n const result = source();\n if (typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n result.then((data) => this.setAudioSource(data));\n } else {\n this.setAudioSource(result as AudioSource);\n }\n } else {\n this.setAudioSource(source);\n }\n this.onPlayEnd = () => {\n this.options?.onPlayEnd?.();\n };\n this.addEventListener('ended', this.onPlayEnd);\n }\n\n /**\n * - **EN:** Check if audio is currently playing\n * - **CN:** 检查音频是否正在播放\n */\n public get isPlaying() {\n return !this.audio.paused && !this.audio.ended;\n }\n /**\n * - **EN:** Get current playback time (seconds)\n * - **CN:** 获取当前播放时间(秒)\n */\n get currentTime(): number {\n return this.audio.currentTime;\n }\n /**\n * - **EN:** Get total audio duration (seconds)\n * - **CN:** 获取音频总时长(秒)\n */\n get duration(): number {\n return this.audio.duration;\n }\n /**\n * - **EN:** Get current volume value (0-1)\n * - **CN:** 获取当前音量值(0-1)\n */\n get volume(): number {\n return this._volume;\n }\n\n /**\n * - **EN:** Play audio. If previously paused, will resume from the pause position\n * - **CN:** 播放音频 如果之前暂停过,将从暂停位置继续播放\n */\n async play(): Promise<void> {\n if (!this.audioContext) {\n this.initAudioContext();\n }\n\n if (this.audioContext?.state === 'suspended') {\n await this.audioContext.resume();\n }\n\n try {\n await this.audio.play();\n this.options?.onPlay?.();\n } catch (error) {\n console.error('Error playing audio:', error);\n this.options?.onError?.(error);\n }\n }\n\n /**\n * - **EN:** Seek forward by a certain number of seconds\n * - **CN:** 向前跳转一定秒数\n *\n * @param seconds - number of seconds to seek forward | 要向前跳转的秒数\n */\n seekForward(seconds: number) {\n if (seconds < 0) {\n return;\n }\n if (!isNaN(this.audio.duration)) {\n this.audio.currentTime = Math.min(this.audio.currentTime + seconds, this.audio.duration);\n } else {\n this.audio.currentTime += seconds;\n }\n }\n /**\n * - **EN:** Seek backward by a certain number of seconds\n * - **CN:** 向后跳转一定秒数\n *\n * @param seconds - number of seconds to seek backward | 要向后跳转的秒数\n */\n seekBackward(seconds: number) {\n if (seconds < 0) {\n return;\n }\n this.audio.currentTime = Math.max(this.audio.currentTime - seconds, 0);\n }\n /**\n * - **EN:** Set current playback time (in seconds)\n * - **CN:** 设置当前播放时间(以秒为单位)\n *\n * @param time - time in seconds | 时间(秒)\n */\n seek(time: number) {\n // Ensure time is not less than 0\n const newTime = Math.max(0, time);\n // Ensure time is not greater than duration (if known)\n if (!isNaN(this.audio.duration)) {\n this.audio.currentTime = Math.min(newTime, this.audio.duration);\n } else {\n this.audio.currentTime = newTime;\n }\n }\n\n /**\n * - **EN:** Pause audio playback. When played again, will continue from current position\n * - **CN:** 暂停音频播放 再次播放时将从当前位置继续\n */\n pause(): void {\n this.audio.pause();\n this.options?.onPause?.();\n }\n\n /**\n * - **EN:** Stop audio playback. Progress will reset to the beginning\n * - **CN:** 停止音频播放 进度会重置到开始位置\n */\n stop(): void {\n this.audio.pause();\n this.audio.currentTime = 0;\n this.options?.onStop?.();\n }\n\n /**\n * - **EN:** Update audio source\n * - **CN:** 更新音频源\n *\n * @param source - can be a URL `string` or `ReadableStreamDefaultReader` |\n * 可以是URL字符串或`ReadableStreamDefaultReader`\n */\n async setAudioSource(source?: AudioSource): Promise<{ stopLoading: () => void }> {\n this.audio.pause();\n this.audio.src = '';\n this.disposeMediaSourceInternal();\n\n if (typeof source === 'string') {\n this.audio.src = source;\n return {\n stopLoading: () => {\n // empty function\n },\n };\n } else {\n return await this.handleStreamSource(source);\n }\n }\n\n /**\n * - **EN:** Increase volume (by 10% each time)\n * - **CN:** 增加音量(每次增加10%)\n *\n * @param percent - increase percentage (default 10%) | 增加百分比(默认10%)\n */\n volumeUp(percent = 0.1): void {\n this._volume = Math.min(1.0, this._volume + percent);\n this.updateVolume();\n }\n\n /**\n * - **EN:** Decrease volume (by 10% each time)\n * - **CN:** 降低音量(每次降低10%)\n *\n * @param percent - decrease percentage (default 10%) | 降低百分比(默认10%)\n */\n volumeDown(percent = 0.1): void {\n this._volume = Math.max(0, this._volume - percent);\n this.updateVolume();\n }\n\n /**\n * - **EN:** Set volume to a specific value (0-1)\n * - **CN:** 将音量设置为特定值(0-1)\n *\n * @param value - new volume value (0-1) | 新的音量值(0-1)\n */\n setVolume(value: number): void {\n this._volume = Math.min(1.0, Math.max(0, value));\n this.updateVolume();\n }\n\n /**\n * - **EN:** Add audio event listener\n * - **CN:** 添加音频事件监听器\n */\n addEventListener: HTMLAudioElement['addEventListener'] = (\n event: string,\n listener: EventListenerOrEventListenerObject\n ): void => {\n this.audio.addEventListener(event, listener);\n };\n\n /**\n * - **EN:** Remove audio event listener\n * - **CN:** 移除音频事件监听器\n */\n removeEventListener: HTMLAudioElement['removeEventListener'] = (\n event: string,\n listener: EventListenerOrEventListenerObject\n ): void => {\n this.audio.removeEventListener(event, listener);\n };\n\n /**\n * - **EN:** Release resources\n * - **CN:** 释放资源\n */\n dispose(): void {\n this.audio.pause();\n this.audio.src = '';\n this.removeEventListener('ended', this.onPlayEnd);\n\n if (this.audioContext) {\n try {\n this.audioContext.close();\n } catch (error) {\n console.error('Error closing AudioContext:', error);\n }\n this.audioContext = null;\n }\n\n this.sourceNode = null;\n this.gainNode = null;\n }\n private disposeMediaSourceInternal() {\n this.mediaSource = null;\n this.sourceBuffer = null;\n this.chunkQueue = [];\n this.appending = false;\n this.streamEnded = false;\n }\n\n /** Process streaming data source /ArrayBuffer/Uint8Array/Blob */\n private async handleStreamSource(\n source: Exclude<AudioSource, string> | undefined\n ): Promise<{ stopLoading: () => void }> {\n const result = {\n stopLoading: () => {\n // empty function\n },\n };\n if (!source) return result;\n try {\n if (source instanceof Blob) {\n const url = URL.createObjectURL(source);\n this.audio.src = url;\n return result;\n } else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n const blob = source instanceof Uint8Array ? new Blob([source]) : new Blob([new Uint8Array(source)]);\n const url = URL.createObjectURL(blob);\n this.audio.src = url;\n this.audio.onloadeddata = () => URL.revokeObjectURL(url);\n return result;\n } else {\n // Create a new ReadableStream to read data from the reader\n const mime = this.options?.mimeType || 'audio/mpeg';\n result.stopLoading = () => {\n this.stopLoadingSource = true;\n };\n await this.initMediaSourceForReader(source, mime);\n return result;\n }\n } catch (error) {\n console.error('Error processing audio stream:', error);\n this.options?.onError?.(error);\n throw error;\n }\n }\n\n /** Initialize Web Audio API for better volume control */\n private initAudioContext() {\n if (this.audioContext) return;\n\n this.audioContext = new AudioContext();\n this.sourceNode = this.audioContext.createMediaElementSource(this.audio);\n this.gainNode = this.audioContext.createGain();\n\n this.sourceNode.connect(this.gainNode);\n this.gainNode.connect(this.audioContext.destination);\n\n this.gainNode.gain.value = this._volume;\n }\n\n /** Update audio playback volume */\n private updateVolume(): void {\n if (this.gainNode) {\n this.gainNode.gain.value = this._volume;\n } else {\n this.audio.volume = this._volume;\n }\n }\n\n /** Initialize MediaSource and push reader chunks into SourceBuffer */\n private async initMediaSourceForReader(reader: ReadableStreamDefaultReader<Uint8Array>, mime: string) {\n if (typeof MediaSource === 'undefined') {\n console.warn('MediaSource is not supported, falling back to one-time buffering.');\n await this.fallbackReaderToBlob(reader);\n return;\n }\n if (typeof MediaSource !== 'undefined' && !MediaSource.isTypeSupported(mime)) {\n console.warn('MIME type is not supported, falling back to one-time buffering.');\n await this.fallbackReaderToBlob(reader);\n return;\n }\n\n this.mediaSource = new MediaSource();\n const objectURL = URL.createObjectURL(this.mediaSource);\n this.audio.src = objectURL;\n this.stopLoadingSource = false;\n\n this.mediaSource.addEventListener('sourceopen', () => {\n if (!this.mediaSource) return;\n this.sourceBuffer = this.mediaSource.addSourceBuffer(mime);\n\n this.sourceBuffer.addEventListener('updateend', () => {\n this.appending = false;\n this.tryAppendNext();\n this.finalizeMediaSourceIfPossible();\n });\n\n // Start reading loop\n this.readLoop(reader);\n });\n }\n\n /** Loop to read data from the reader */\n private async readLoop(reader: ReadableStreamDefaultReader<Uint8Array>) {\n try {\n // Auto play (optional)\n if (this.audio.paused) {\n void this.play();\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done || this.stopLoadingSource) {\n this.streamEnded = true;\n break;\n }\n if (value && value.byteLength) {\n this.chunkQueue.push(value);\n this.tryAppendNext();\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n // Try to finalize after the loop exits (including 0 chunk case)\n this.finalizeMediaSourceIfPossible();\n } catch (e) {\n console.error('Error reading stream:', e);\n this.options?.onError?.(e);\n }\n }\n\n /** Try to append the next chunk from the queue to the SourceBuffer */\n private tryAppendNext() {\n if (!this.sourceBuffer || this.appending) return;\n if (!this.chunkQueue.length) return;\n\n const chunk = this.chunkQueue.shift()!;\n this.appending = true;\n try {\n this.sourceBuffer.appendBuffer(chunk);\n } catch (e) {\n console.error('Error appending buffer:', e);\n this.appending = false;\n this.options?.onError?.(e);\n this.finalizeMediaSourceIfPossible();\n }\n }\n\n /** Finalize MediaSource if possible (stream ended, no pending chunks, and not updating) */\n private finalizeMediaSourceIfPossible(receivedAnyChunk = true) {\n if (\n this.mediaSource &&\n this.mediaSource.readyState === 'open' &&\n this.streamEnded &&\n !this.sourceBuffer?.updating &&\n this.chunkQueue.length === 0\n ) {\n try {\n this.mediaSource.endOfStream();\n } catch (e) {\n console.warn('endOfStream error:', e);\n }\n }\n }\n\n /** Fallback to one-time Blob synthesis when streaming is not supported */\n private async fallbackReaderToBlob(reader: ReadableStreamDefaultReader<Uint8Array>) {\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (err) {\n controller.error(err);\n }\n },\n });\n // Convert stream to Blob and create URL\n const response = new Response(stream);\n const blob = await response.blob();\n const url = URL.createObjectURL(blob);\n this.audio.src = url;\n this.audio.onloadeddata = () => URL.revokeObjectURL(url);\n }\n}\n\nexport default AudioPlayer;\n"],
|
|
4
|
+
"sourcesContent": ["export type AudioSource = string | ReadableStreamDefaultReader<Uint8Array> | ArrayBuffer | Uint8Array | Blob;\n\nexport interface AudioPlayerInit {\n /**\n * - **EN:** Audio source (URL or streaming data)\n * - **CN:** 音频源(URL或流数据)\n */\n source?: AudioSource | (() => AudioSource | Promise<AudioSource>);\n /**\n * - **EN:** MIME type of the audio (e.g., 'audio/mpeg', 'audio/wav'). Optional.\n * - **CN:** 音频的MIME类型(例如,'audio/mpeg','audio/wav')。可选。\n */\n mimeType?: string;\n /**\n * - **EN:** Initial volume level (0-1). Default is `0.5`\n * - **CN:** 初始音量级别(0-1)。默认值为`0.5`\n */\n volume?: number;\n /**\n * - **EN:** Callback when audio starts playing\n * - **CN:** 音频开始播放时的回调\n */\n onPlay?: () => void;\n /**\n * - **EN:** Callback when audio is paused\n * - **CN:** 音频暂停时的回调\n */\n onPause?: () => void;\n /**\n * - **EN:** Callback when audio is stopped\n * - **CN:** 音频停止时的回调\n */\n onStop?: () => void;\n\n /**\n * - **EN:** Callback when audio playback ends\n * - **CN:** 音频播放结束时的回调\n */\n onPlayEnd?: () => void;\n /**\n * - **EN:** Callback when an error occurs\n * - **CN:** 发生错误时的回调\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onError?: (error: any) => void;\n}\n\n/**\n * - **EN:** An audio player class that supports URL or streaming data input\n * - **CN:** 一个音频播放器类,支持URL或流数据输入\n */\nclass AudioPlayer {\n private audio: HTMLAudioElement;\n private _volume: number;\n private audioContext: AudioContext | null = null;\n private gainNode: GainNode | null = null;\n private sourceNode: MediaElementAudioSourceNode | null = null;\n private options: AudioPlayerInit | undefined;\n private mediaSource: MediaSource | null = null;\n private sourceBuffer: SourceBuffer | null = null;\n private chunkQueue: Uint8Array[] = [];\n private appending = false;\n private streamEnded = false;\n private stopLoadingSource = false;\n private onPlayEnd: () => void;\n\n /**\n * - **EN:** Creates an audio player instance\n * - **CN:** 创建音频播放器实例\n *\n * @param source - can be a URL string or ReadableStreamDefaultReader |\n * 可以是URL字符串或ReadableStreamDefaultReader\n */\n constructor(options?: AudioPlayerInit) {\n const { source, volume } = options || {};\n this.options = options;\n this.audio = new Audio();\n this._volume = volume != null ? Math.min(1.0, Math.max(0, volume)) : 0.5; // Default volume 50%\n this.audio.volume = this._volume;\n if (typeof source === 'function') {\n const result = source();\n if (typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n result.then((data) => this.setAudioSource(data));\n } else {\n this.setAudioSource(result as AudioSource);\n }\n } else {\n this.setAudioSource(source);\n }\n this.onPlayEnd = () => {\n this.options?.onPlayEnd?.();\n };\n this.addEventListener('ended', this.onPlayEnd);\n }\n\n /**\n * - **EN:** Check if audio is currently playing\n * - **CN:** 检查音频是否正在播放\n */\n public get isPlaying() {\n return !this.audio.paused && !this.audio.ended;\n }\n /**\n * - **EN:** Get current playback time (seconds)\n * - **CN:** 获取当前播放时间(秒)\n */\n get currentTime(): number {\n return this.audio.currentTime;\n }\n /**\n * - **EN:** Get total audio duration (seconds)\n * - **CN:** 获取音频总时长(秒)\n */\n get duration(): number {\n return this.audio.duration;\n }\n /**\n * - **EN:** Get current volume value (0-1)\n * - **CN:** 获取当前音量值(0-1)\n */\n get volume(): number {\n return this._volume;\n }\n\n /**\n * - **EN:** Play audio. If previously paused, will resume from the pause position\n * - **CN:** 播放音频 如果之前暂停过,将从暂停位置继续播放\n */\n async play(): Promise<void> {\n if (!this.audioContext) {\n this.initAudioContext();\n }\n\n if (this.audioContext?.state === 'suspended') {\n await this.audioContext.resume();\n }\n\n try {\n await this.audio.play();\n this.options?.onPlay?.();\n } catch (error) {\n console.error('Error playing audio:', error);\n this.options?.onError?.(error);\n }\n }\n\n /**\n * - **EN:** Seek forward by a certain number of seconds\n * - **CN:** 向前跳转一定秒数\n *\n * @param seconds - number of seconds to seek forward | 要向前跳转的秒数\n */\n seekForward(seconds: number) {\n if (seconds < 0) {\n return;\n }\n if (!isNaN(this.audio.duration)) {\n this.audio.currentTime = Math.min(this.audio.currentTime + seconds, this.audio.duration);\n } else {\n this.audio.currentTime += seconds;\n }\n }\n /**\n * - **EN:** Seek backward by a certain number of seconds\n * - **CN:** 向后跳转一定秒数\n *\n * @param seconds - number of seconds to seek backward | 要向后跳转的秒数\n */\n seekBackward(seconds: number) {\n if (seconds < 0) {\n return;\n }\n this.audio.currentTime = Math.max(this.audio.currentTime - seconds, 0);\n }\n /**\n * - **EN:** Set current playback time (in seconds)\n * - **CN:** 设置当前播放时间(以秒为单位)\n *\n * @param time - time in seconds | 时间(秒)\n */\n seek(time: number) {\n // Ensure time is not less than 0\n const newTime = Math.max(0, time);\n // Ensure time is not greater than duration (if known)\n if (!isNaN(this.audio.duration)) {\n this.audio.currentTime = Math.min(newTime, this.audio.duration);\n } else {\n this.audio.currentTime = newTime;\n }\n }\n\n /**\n * - **EN:** Pause audio playback. When played again, will continue from current position\n * - **CN:** 暂停音频播放 再次播放时将从当前位置继续\n */\n pause(): void {\n this.audio.pause();\n this.options?.onPause?.();\n }\n\n /**\n * - **EN:** Stop audio playback. Progress will reset to the beginning\n * - **CN:** 停止音频播放 进度会重置到开始位置\n */\n stop(): void {\n this.audio.pause();\n this.audio.currentTime = 0;\n this.options?.onStop?.();\n }\n\n /**\n * - **EN:** Update audio source\n * - **CN:** 更新音频源\n *\n * @param source - can be a URL `string` or `ReadableStreamDefaultReader` |\n * 可以是URL字符串或`ReadableStreamDefaultReader`\n */\n async setAudioSource(source?: AudioSource): Promise<{ stopLoading: () => void }> {\n this.audio.pause();\n this.audio.src = '';\n this.disposeMediaSourceInternal();\n\n if (typeof source === 'string') {\n this.audio.src = source;\n return {\n stopLoading: () => {\n // a stub function\n },\n };\n } else {\n return await this.handleStreamSource(source);\n }\n }\n\n /**\n * - **EN:** Increase volume (by 10% each time)\n * - **CN:** 增加音量(每次增加10%)\n *\n * @param percent - increase percentage (default 10%) | 增加百分比(默认10%)\n */\n volumeUp(percent = 0.1): void {\n this._volume = Math.min(1.0, this._volume + percent);\n this.updateVolume();\n }\n\n /**\n * - **EN:** Decrease volume (by 10% each time)\n * - **CN:** 降低音量(每次降低10%)\n *\n * @param percent - decrease percentage (default 10%) | 降低百分比(默认10%)\n */\n volumeDown(percent = 0.1): void {\n this._volume = Math.max(0, this._volume - percent);\n this.updateVolume();\n }\n\n /**\n * - **EN:** Set volume to a specific value (0-1)\n * - **CN:** 将音量设置为特定值(0-1)\n *\n * @param value - new volume value (0-1) | 新的音量值(0-1)\n */\n setVolume(value: number): void {\n this._volume = Math.min(1.0, Math.max(0, value));\n this.updateVolume();\n }\n\n /**\n * - **EN:** Add audio event listener\n * - **CN:** 添加音频事件监听器\n */\n addEventListener: HTMLAudioElement['addEventListener'] = (\n event: string,\n listener: EventListenerOrEventListenerObject\n ): void => {\n this.audio.addEventListener(event, listener);\n };\n\n /**\n * - **EN:** Remove audio event listener\n * - **CN:** 移除音频事件监听器\n */\n removeEventListener: HTMLAudioElement['removeEventListener'] = (\n event: string,\n listener: EventListenerOrEventListenerObject\n ): void => {\n this.audio.removeEventListener(event, listener);\n };\n\n /**\n * - **EN:** Release resources\n * - **CN:** 释放资源\n */\n dispose(): void {\n this.audio.pause();\n this.audio.src = '';\n this.removeEventListener('ended', this.onPlayEnd);\n\n if (this.audioContext) {\n try {\n this.audioContext.close();\n } catch (error) {\n console.error('Error closing AudioContext:', error);\n }\n this.audioContext = null;\n }\n\n this.sourceNode = null;\n this.gainNode = null;\n }\n private disposeMediaSourceInternal() {\n this.mediaSource = null;\n this.sourceBuffer = null;\n this.chunkQueue = [];\n this.appending = false;\n this.streamEnded = false;\n }\n\n /** Process streaming data source /ArrayBuffer/Uint8Array/Blob */\n private async handleStreamSource(\n source: Exclude<AudioSource, string> | undefined\n ): Promise<{ stopLoading: () => void }> {\n const result = {\n stopLoading: () => {\n // a stub function\n },\n };\n if (!source) return result;\n try {\n if (source instanceof Blob) {\n const url = URL.createObjectURL(source);\n this.audio.src = url;\n return result;\n } else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n const blob = source instanceof Uint8Array ? new Blob([source]) : new Blob([new Uint8Array(source)]);\n const url = URL.createObjectURL(blob);\n this.audio.src = url;\n this.audio.onloadeddata = () => URL.revokeObjectURL(url);\n return result;\n } else {\n // Create a new ReadableStream to read data from the reader\n const mime = this.options?.mimeType || 'audio/mpeg';\n result.stopLoading = () => {\n this.stopLoadingSource = true;\n };\n await this.initMediaSourceForReader(source, mime);\n return result;\n }\n } catch (error) {\n console.error('Error processing audio stream:', error);\n this.options?.onError?.(error);\n throw error;\n }\n }\n\n /** Initialize Web Audio API for better volume control */\n private initAudioContext() {\n if (this.audioContext) return;\n\n this.audioContext = new AudioContext();\n this.sourceNode = this.audioContext.createMediaElementSource(this.audio);\n this.gainNode = this.audioContext.createGain();\n\n this.sourceNode.connect(this.gainNode);\n this.gainNode.connect(this.audioContext.destination);\n\n this.gainNode.gain.value = this._volume;\n }\n\n /** Update audio playback volume */\n private updateVolume(): void {\n if (this.gainNode) {\n this.gainNode.gain.value = this._volume;\n } else {\n this.audio.volume = this._volume;\n }\n }\n\n /** Initialize MediaSource and push reader chunks into SourceBuffer */\n private async initMediaSourceForReader(reader: ReadableStreamDefaultReader<Uint8Array>, mime: string) {\n if (typeof MediaSource === 'undefined') {\n console.warn('MediaSource is not supported, falling back to one-time buffering.');\n await this.fallbackReaderToBlob(reader);\n return;\n }\n if (typeof MediaSource !== 'undefined' && !MediaSource.isTypeSupported(mime)) {\n console.warn('MIME type is not supported, falling back to one-time buffering.');\n await this.fallbackReaderToBlob(reader);\n return;\n }\n\n this.mediaSource = new MediaSource();\n const objectURL = URL.createObjectURL(this.mediaSource);\n this.audio.src = objectURL;\n this.stopLoadingSource = false;\n\n this.mediaSource.addEventListener('sourceopen', () => {\n if (!this.mediaSource) return;\n this.sourceBuffer = this.mediaSource.addSourceBuffer(mime);\n\n this.sourceBuffer.addEventListener('updateend', () => {\n this.appending = false;\n this.tryAppendNext();\n this.finalizeMediaSourceIfPossible();\n });\n\n // Start reading loop\n this.readLoop(reader);\n });\n }\n\n /** Loop to read data from the reader */\n private async readLoop(reader: ReadableStreamDefaultReader<Uint8Array>) {\n try {\n // Auto play (optional)\n if (this.audio.paused) {\n void this.play();\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done || this.stopLoadingSource) {\n this.streamEnded = true;\n break;\n }\n if (value && value.byteLength) {\n this.chunkQueue.push(value);\n this.tryAppendNext();\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n // Try to finalize after the loop exits (including 0 chunk case)\n this.finalizeMediaSourceIfPossible();\n } catch (e) {\n console.error('Error reading stream:', e);\n this.options?.onError?.(e);\n }\n }\n\n /** Try to append the next chunk from the queue to the SourceBuffer */\n private tryAppendNext() {\n if (!this.sourceBuffer || this.appending) return;\n if (!this.chunkQueue.length) return;\n\n const chunk = this.chunkQueue.shift()!;\n this.appending = true;\n try {\n this.sourceBuffer.appendBuffer(chunk);\n } catch (e) {\n console.error('Error appending buffer:', e);\n this.appending = false;\n this.options?.onError?.(e);\n this.finalizeMediaSourceIfPossible();\n }\n }\n\n /** Finalize MediaSource if possible (stream ended, no pending chunks, and not updating) */\n private finalizeMediaSourceIfPossible(receivedAnyChunk = true) {\n if (\n this.mediaSource &&\n this.mediaSource.readyState === 'open' &&\n this.streamEnded &&\n !this.sourceBuffer?.updating &&\n this.chunkQueue.length === 0\n ) {\n try {\n this.mediaSource.endOfStream();\n } catch (e) {\n console.warn('endOfStream error:', e);\n }\n }\n }\n\n /** Fallback to one-time Blob synthesis when streaming is not supported */\n private async fallbackReaderToBlob(reader: ReadableStreamDefaultReader<Uint8Array>) {\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (err) {\n controller.error(err);\n }\n },\n });\n // Convert stream to Blob and create URL\n const response = new Response(stream);\n const blob = await response.blob();\n const url = URL.createObjectURL(blob);\n this.audio.src = url;\n this.audio.onloadeddata = () => URL.revokeObjectURL(url);\n }\n}\n\nexport default AudioPlayer;\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|