@tiny-codes/react-easy 1.4.8 → 1.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/es/hooks/index.d.ts +3 -0
  3. package/es/hooks/index.js +3 -0
  4. package/es/hooks/index.js.map +1 -1
  5. package/es/hooks/useAudioPlayer.d.ts +7 -0
  6. package/es/hooks/useAudioPlayer.js +13 -0
  7. package/es/hooks/useAudioPlayer.js.map +1 -0
  8. package/es/hooks/useSSE.d.ts +26 -0
  9. package/es/hooks/useSSE.js +147 -0
  10. package/es/hooks/useSSE.js.map +1 -0
  11. package/es/hooks/useUserMedia.d.ts +11 -4
  12. package/es/hooks/useUserMedia.js +10 -8
  13. package/es/hooks/useUserMedia.js.map +1 -1
  14. package/es/utils/AudioPlayer.d.ts +166 -0
  15. package/es/utils/AudioPlayer.js +457 -0
  16. package/es/utils/AudioPlayer.js.map +1 -0
  17. package/es/utils/base64.d.ts +48 -0
  18. package/es/utils/base64.js +139 -0
  19. package/es/utils/base64.js.map +1 -0
  20. package/es/utils/crypto.d.ts +0 -30
  21. package/es/utils/crypto.js +8 -93
  22. package/es/utils/crypto.js.map +1 -1
  23. package/es/utils/index.d.ts +5 -1
  24. package/es/utils/index.js +5 -1
  25. package/es/utils/index.js.map +1 -1
  26. package/es/utils/stream.d.ts +17 -10
  27. package/es/utils/stream.js +13 -5
  28. package/es/utils/stream.js.map +1 -1
  29. package/lib/hooks/index.d.ts +3 -0
  30. package/lib/hooks/index.js +8 -0
  31. package/lib/hooks/index.js.map +2 -2
  32. package/lib/hooks/useAudioPlayer.d.ts +7 -0
  33. package/lib/hooks/useAudioPlayer.js +42 -0
  34. package/lib/hooks/useAudioPlayer.js.map +7 -0
  35. package/lib/hooks/useSSE.d.ts +26 -0
  36. package/lib/hooks/useSSE.js +128 -0
  37. package/lib/hooks/useSSE.js.map +7 -0
  38. package/lib/hooks/useUserMedia.d.ts +11 -4
  39. package/lib/hooks/useUserMedia.js +9 -7
  40. package/lib/hooks/useUserMedia.js.map +2 -2
  41. package/lib/utils/AudioPlayer.d.ts +166 -0
  42. package/lib/utils/AudioPlayer.js +305 -0
  43. package/lib/utils/AudioPlayer.js.map +7 -0
  44. package/lib/utils/base64.d.ts +48 -0
  45. package/lib/utils/base64.js +120 -0
  46. package/lib/utils/base64.js.map +7 -0
  47. package/lib/utils/crypto.d.ts +0 -30
  48. package/lib/utils/crypto.js +7 -66
  49. package/lib/utils/crypto.js.map +2 -2
  50. package/lib/utils/index.d.ts +5 -1
  51. package/lib/utils/index.js +28 -3
  52. package/lib/utils/index.js.map +2 -2
  53. package/lib/utils/stream.d.ts +17 -10
  54. package/lib/utils/stream.js +9 -4
  55. package/lib/utils/stream.js.map +2 -2
  56. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,58 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## 1.4.10
6
+
7
+ 2025-9-3
8
+
9
+ ### Features
10
+
11
+ #### `AudioPlayer`
12
+
13
+ - ✨ audio source is extended to support `ArrayBuffer`, `Uint8Array`, and `Blob` types
14
+ - ✨ add `seekForward` and `seekBackward` methods for seeking audio playback
15
+ - ✨ add `seek` method for setting the current playback time
16
+
17
+ #### `useUserMedia`
18
+
19
+ - ✨ add `streamSliceMode` and `streamSliceValue` options for controlling the slicing behavior of the media stream.
20
+
21
+ ### Notable Changes
22
+
23
+ #### `AudioPlayer`
24
+
25
+ - 👀 `getVolume` method is renamed to `volume` getter
26
+ - 👀 `getCurrentTime` method is renamed to `currentTime` getter
27
+ - 👀 `getDuration` method is renamed to `duration` getter
28
+ - 👀 `gotoTime` method is removed
29
+ - 👀 `gotoPercent` method is removed
30
+
31
+ #### `useUserMedia`
32
+
33
+ - 👀 `streamSliceMs` is removed, please use `streamSliceMode` and `streamSliceValue` instead.
34
+
35
+ ## 1.4.9
36
+
37
+ 2025-9-2
38
+
39
+ ### Features
40
+
41
+ #### hooks
42
+
43
+ - ✨ add a new hook `useSSE` which provides a simple way to connect and communicate with a Server-Sent Events (SSE) server.
44
+ - ✨ add a new hook `useAudioPlayer` used to play audio from a given source URL or streaming data.
45
+ - ✨ add a new util `utils.arrayBufferToBase64` used to convert an ArrayBuffer to a Base64 encoded string.
46
+ - ✨ add a new util `utils.base64ToArrayBuffer` used to convert a Base64 encoded string to an ArrayBuffer.
47
+
48
+ ### Notable Changes
49
+
50
+ - 🔥 `utils.toBase64` method is renamed to `utils.stringToBase64`.
51
+ - 🔥 `utils.fromBase64` method is renamed to `utils.base64ToString`.
52
+
53
+ ### Bug Fixes
54
+
55
+ - 🐞 Fix sourcemap are not referenced correctly in `assets`
56
+
5
57
  ## 1.4.8
6
58
 
7
59
  2025-9-1
@@ -1,5 +1,8 @@
1
+ export { default as useAudioPlayer } from './useAudioPlayer';
1
2
  export { default as useRefValue } from './useRefValue';
2
3
  export { default as useRefFunction } from './useRefFunction';
4
+ export * from './useSSE';
5
+ export { default as useSSE } from './useSSE';
3
6
  export * from './useStompSocket';
4
7
  export { default as useStompSocket } from './useStompSocket';
5
8
  export type { ValidatorRuleMap } from './useValidators';
package/es/hooks/index.js CHANGED
@@ -1,5 +1,8 @@
1
+ export { default as useAudioPlayer } from "./useAudioPlayer";
1
2
  export { default as useRefValue } from "./useRefValue";
2
3
  export { default as useRefFunction } from "./useRefFunction";
4
+ export * from "./useSSE";
5
+ export { default as useSSE } from "./useSSE";
3
6
  export * from "./useStompSocket";
4
7
  export { default as useStompSocket } from "./useStompSocket";
5
8
  export { default as useValidators } from "./useValidators";
@@ -1 +1 @@
1
- {"version":3,"names":["default","useRefValue","useRefFunction","useStompSocket","useValidators","useValidator","useValidatorBuilder","useUserMedia"],"sources":["../../src/hooks/index.ts"],"sourcesContent":["export { default as useRefValue } from './useRefValue';\nexport { default as useRefFunction } from './useRefFunction';\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';\nexport * from './useUserMedia';\nexport { default as useUserMedia } from './useUserMedia';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,WAAW;AAC/B,SAASD,OAAO,IAAIE,cAAc;AAClC;AACA,SAASF,OAAO,IAAIG,cAAc;AAElC,SAASH,OAAO,IAAII,aAAa;AACjC,SAASJ,OAAO,IAAIK,YAAY;AAEhC,SAASL,OAAO,IAAIM,mBAAmB;AACvC;AACA,SAASN,OAAO,IAAIO,YAAY"}
1
+ {"version":3,"names":["default","useAudioPlayer","useRefValue","useRefFunction","useSSE","useStompSocket","useValidators","useValidator","useValidatorBuilder","useUserMedia"],"sources":["../../src/hooks/index.ts"],"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';\nexport * from './useUserMedia';\nexport { default as useUserMedia } from './useUserMedia';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,cAAc;AAClC,SAASD,OAAO,IAAIE,WAAW;AAC/B,SAASF,OAAO,IAAIG,cAAc;AAClC;AACA,SAASH,OAAO,IAAII,MAAM;AAC1B;AACA,SAASJ,OAAO,IAAIK,cAAc;AAElC,SAASL,OAAO,IAAIM,aAAa;AACjC,SAASN,OAAO,IAAIO,YAAY;AAEhC,SAASP,OAAO,IAAIQ,mBAAmB;AACvC;AACA,SAASR,OAAO,IAAIS,YAAY"}
@@ -0,0 +1,7 @@
1
+ import AudioPlayer, { type AudioPlayerInit } from '../utils/AudioPlayer';
2
+ /**
3
+ * - **EN:** A hook that provides an instance of the AudioPlayer class for managing audio playback.
4
+ * - **CN:** 一个提供AudioPlayer类实例的钩子,用于管理音频播放。
5
+ */
6
+ declare const useAudioPlayer: (props?: AudioPlayerInit) => AudioPlayer;
7
+ export default useAudioPlayer;
@@ -0,0 +1,13 @@
1
+ import { useRef } from 'react';
2
+ import AudioPlayer from "../utils/AudioPlayer";
3
+
4
+ /**
5
+ * - **EN:** A hook that provides an instance of the AudioPlayer class for managing audio playback.
6
+ * - **CN:** 一个提供AudioPlayer类实例的钩子,用于管理音频播放。
7
+ */
8
+ var useAudioPlayer = function useAudioPlayer(props) {
9
+ var ref = useRef(new AudioPlayer(props));
10
+ return ref.current;
11
+ };
12
+ export default useAudioPlayer;
13
+ //# sourceMappingURL=useAudioPlayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useRef","AudioPlayer","useAudioPlayer","props","ref","current"],"sources":["../../src/hooks/useAudioPlayer.ts"],"sourcesContent":["import { useRef } from 'react';\nimport AudioPlayer, { type AudioPlayerInit } from '../utils/AudioPlayer';\n\n/**\n * - **EN:** A hook that provides an instance of the AudioPlayer class for managing audio playback.\n * - **CN:** 一个提供AudioPlayer类实例的钩子,用于管理音频播放。\n */\nconst useAudioPlayer = (props?: AudioPlayerInit): AudioPlayer => {\n const ref = useRef<AudioPlayer>(new AudioPlayer(props));\n return ref.current;\n};\n\nexport default useAudioPlayer;\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,OAAO;AAC9B,OAAOC,WAAW;;AAElB;AACA;AACA;AACA;AACA,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,KAAuB,EAAkB;EAC/D,IAAMC,GAAG,GAAGJ,MAAM,CAAc,IAAIC,WAAW,CAACE,KAAK,CAAC,CAAC;EACvD,OAAOC,GAAG,CAACC,OAAO;AACpB,CAAC;AAED,eAAeH,cAAc"}
@@ -0,0 +1,26 @@
1
+ import type { EventSourceMessage, FetchEventSourceInit } from '@microsoft/fetch-event-source';
2
+ export interface UseSSEProps<T = any> {
3
+ /** The URL to connect to */
4
+ url: RequestInfo;
5
+ /** Options for the connection. */
6
+ connectOptions?: Omit<FetchEventSourceInit, 'onmessage' | 'onerror' | 'onclose'>;
7
+ /** Automatically connect to the SSE channel. Default is `false`. */
8
+ autoConnect?: boolean;
9
+ /** Automatically close the connection when the component unmounts. Default is `true`. */
10
+ autoClose?: boolean;
11
+ /** Function to parse the incoming message. If not provided, the default JSON parser will be used. */
12
+ parseMessage?: (original: EventSourceMessage) => T;
13
+ /** Callback function to handle incoming messages. */
14
+ onMessage?: (messageData: T) => void;
15
+ /** Callback function to handle errors. */
16
+ onError?: (error: any) => void;
17
+ /** Callback function to handle connection closure. */
18
+ onClose?: () => void;
19
+ }
20
+ declare const useSSE: <T = any>(props: UseSSEProps<T>) => {
21
+ connect: (options?: FetchEventSourceInit & Partial<Pick<UseSSEProps, 'url'>>) => Promise<void>;
22
+ close: () => void;
23
+ isRequesting: boolean;
24
+ isConnected: boolean;
25
+ };
26
+ export default useSSE;
@@ -0,0 +1,147 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ var _excluded = ["url", "headers", "onopen", "onmessage", "onclose", "onerror"];
3
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
4
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
8
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
9
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
10
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
11
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
12
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
13
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
14
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
+ 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); }
16
+ 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; }
17
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
18
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
19
+ import { useEffect, useRef, useState } from 'react';
20
+ import { fetchEventSource } from '@microsoft/fetch-event-source';
21
+ import useRefFunction from "./useRefFunction";
22
+ import useRefValue from "./useRefValue";
23
+
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ var useSSE = function useSSE(props) {
28
+ var url = props.url,
29
+ autoConnect = props.autoConnect,
30
+ connectOptions = props.connectOptions,
31
+ onMessage = props.onMessage,
32
+ parseMessage = props.parseMessage,
33
+ onError = props.onError,
34
+ onClose = props.onClose;
35
+ var autoConnectRef = useRefValue(autoConnect);
36
+ var _useState = useState(false),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ isRequesting = _useState2[0],
39
+ setIsRequesting = _useState2[1];
40
+ var isRequestingRef = useRefValue(isRequesting);
41
+ var _useState3 = useState(false),
42
+ _useState4 = _slicedToArray(_useState3, 2),
43
+ isConnected = _useState4[0],
44
+ setIsConnected = _useState4[1];
45
+ var abortCtrlRef = useRef(undefined);
46
+ var connect = useRefFunction( /*#__PURE__*/function () {
47
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
48
+ var _connectOptions$optio, _connectOptions$optio2, connectUrl, _connectOptions$optio3, headers, _onopen, onmessage, onclose, onerror, restOptions;
49
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
50
+ while (1) switch (_context2.prev = _context2.next) {
51
+ case 0:
52
+ _connectOptions$optio = _objectSpread(_objectSpread({}, connectOptions), options), _connectOptions$optio2 = _connectOptions$optio.url, connectUrl = _connectOptions$optio2 === void 0 ? url : _connectOptions$optio2, _connectOptions$optio3 = _connectOptions$optio.headers, headers = _connectOptions$optio3 === void 0 ? {} : _connectOptions$optio3, _onopen = _connectOptions$optio.onopen, onmessage = _connectOptions$optio.onmessage, onclose = _connectOptions$optio.onclose, onerror = _connectOptions$optio.onerror, restOptions = _objectWithoutProperties(_connectOptions$optio, _excluded);
53
+ abortCtrlRef.current = new AbortController();
54
+ _context2.prev = 2;
55
+ setIsRequesting(true);
56
+ setIsConnected(false);
57
+ _context2.next = 7;
58
+ return fetchEventSource(connectUrl, _objectSpread({
59
+ method: 'post',
60
+ signal: abortCtrlRef.current.signal,
61
+ openWhenHidden: true,
62
+ onopen: function () {
63
+ var _onopen2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(response) {
64
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
65
+ while (1) switch (_context.prev = _context.next) {
66
+ case 0:
67
+ setIsConnected(true);
68
+ _onopen === null || _onopen === void 0 || _onopen(response);
69
+ case 2:
70
+ case "end":
71
+ return _context.stop();
72
+ }
73
+ }, _callee);
74
+ }));
75
+ function onopen(_x2) {
76
+ return _onopen2.apply(this, arguments);
77
+ }
78
+ return onopen;
79
+ }(),
80
+ onmessage: function onmessage(event) {
81
+ if (!isRequestingRef.current) {
82
+ setIsRequesting(false);
83
+ }
84
+ try {
85
+ var parsed;
86
+ if (parseMessage) {
87
+ parsed = parseMessage(event);
88
+ } else {
89
+ parsed = event.data ? JSON.parse(event.data) : undefined;
90
+ }
91
+ if (parsed != null) {
92
+ onMessage === null || onMessage === void 0 || onMessage(parsed);
93
+ }
94
+ } catch (error) {
95
+ console.error('Error parsing message data:', error);
96
+ console.log('The underlying event:', event);
97
+ }
98
+ },
99
+ onerror: function onerror(error) {
100
+ setIsRequesting(false);
101
+ onError === null || onError === void 0 || onError(error);
102
+ },
103
+ onclose: function onclose() {
104
+ setIsRequesting(false);
105
+ onClose === null || onClose === void 0 || onClose();
106
+ },
107
+ headers: _objectSpread({
108
+ 'Content-Type': 'application/json'
109
+ }, headers)
110
+ }, restOptions));
111
+ case 7:
112
+ _context2.prev = 7;
113
+ setIsRequesting(false);
114
+ return _context2.finish(7);
115
+ case 10:
116
+ case "end":
117
+ return _context2.stop();
118
+ }
119
+ }, _callee2, null, [[2,, 7, 10]]);
120
+ }));
121
+ return function (_x) {
122
+ return _ref.apply(this, arguments);
123
+ };
124
+ }());
125
+ var close = useRefFunction(function () {
126
+ setIsConnected(false);
127
+ if (isConnected && abortCtrlRef.current) {
128
+ abortCtrlRef.current.abort();
129
+ }
130
+ });
131
+ useEffect(function () {
132
+ if (autoConnectRef.current) {
133
+ connect();
134
+ }
135
+ return close;
136
+ }, []);
137
+
138
+ // 清理函数
139
+ return {
140
+ connect: connect,
141
+ close: close,
142
+ isRequesting: isRequesting,
143
+ isConnected: isConnected
144
+ };
145
+ };
146
+ export default useSSE;
147
+ //# sourceMappingURL=useSSE.js.map
@@ -0,0 +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","_callee2$","_context2","onopen","_excluded","current","AbortController","signal","openWhenHidden","_onopen2","_callee","response","_callee$","_context","_x2","event","parsed","data","JSON","parse","console","log","_x","close","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 await fetchEventSource(connectUrl, {\n method: 'post',\n signal: abortCtrlRef.current.signal,\n openWhenHidden: true,\n onopen: async (response: Response) => {\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 setIsRequesting(false);\n onError?.(error);\n },\n onclose() {\n setIsRequesting(false);\n onClose?.();\n },\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n ...restOptions,\n });\n } finally {\n setIsRequesting(false);\n }\n });\n\n const close = 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 close;\n }, []);\n\n // 清理函数\n return {\n connect,\n close,\n isRequesting,\n isConnected,\n };\n};\n\nexport default useSSE;\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type StreamTimeSlicerOptions } from '../utils/stream';
1
2
  export interface UseUserMediaProps {
2
3
  /**
3
4
  * - **EN:** The media constraints for the audio and video stream.
@@ -58,11 +59,17 @@ export interface UseUserMediaProps {
58
59
  */
59
60
  disabled?: boolean;
60
61
  /**
61
- * - **EN:** The slicing time period (milliseconds) for each fragment of the audio and video stream,
62
- * each time slice will trigger the `onStreamChunk` callback. Default is `500`.
63
- * - **CN:** 媒体流每个分片的切片时间段(毫秒),每个时间分片会触发一次 `onStreamChunk` 回调,默认值为 `500`。
62
+ * - **EN:** The slicing mode for the audio and video stream.
63
+ * - **CN:** 媒体流的切片模式。
64
64
  */
65
- streamSliceMs?: number;
65
+ streamSliceMode?: StreamTimeSlicerOptions['sliceMode'];
66
+ /**
67
+ * - **EN:** The slicing value (milliseconds or bytes) for the audio and video stream, when
68
+ * `streamSliceMode` is `time`, it represents milliseconds, and when it is `size`, it represents
69
+ * bytes.
70
+ * - **CN:** 媒体流切片的切片值(毫秒或字节),当 `streamSliceMode` 为 `time` 时表示毫秒,为 `size` 时表示字节。
71
+ */
72
+ streamSliceValue?: StreamTimeSlicerOptions['value'];
66
73
  /**
67
74
  * - **EN:** The silence detection threshold (0-1) for the audio stream, below which the audio is
68
75
  * considered silent. Default is `0`.
@@ -29,8 +29,9 @@ var useUserMedia = function useUserMedia(props) {
29
29
  var media = props.media,
30
30
  pcmAudioOptions = props.pcmAudioOptions,
31
31
  disabled = props.disabled,
32
- _props$streamSliceMs = props.streamSliceMs,
33
- streamSliceMs = _props$streamSliceMs === void 0 ? 500 : _props$streamSliceMs,
32
+ _props$streamSliceMod = props.streamSliceMode,
33
+ streamSliceMode = _props$streamSliceMod === void 0 ? 'time' : _props$streamSliceMod,
34
+ streamSliceValue = props.streamSliceValue,
34
35
  _props$soundDetection = props.soundDetectionThreshold,
35
36
  soundDetectionThreshold = _props$soundDetection === void 0 ? 0 : _props$soundDetection,
36
37
  _props$soundDetection2 = props.soundDetectionTimeout,
@@ -103,7 +104,8 @@ var useUserMedia = function useUserMedia(props) {
103
104
  var pcmSampleRateRef = useRef(0);
104
105
  var onPcmStreamChunkRef = useRefValue(onPcmStreamChunk);
105
106
  var pcmStreamSlicerRef = useRef(new StreamTimeSlicerClass({
106
- timeSlice: streamSliceMs,
107
+ sliceMode: streamSliceMode,
108
+ value: streamSliceValue || 0,
107
109
  onSlice: function onSlice(channels) {
108
110
  var _onPcmStreamChunkRef$;
109
111
  (_onPcmStreamChunkRef$ = onPcmStreamChunkRef.current) === null || _onPcmStreamChunkRef$ === void 0 || _onPcmStreamChunkRef$.call(onPcmStreamChunkRef, channels, pcmSampleRateRef.current);
@@ -184,8 +186,8 @@ var useUserMedia = function useUserMedia(props) {
184
186
  onStreamChunk === null || onStreamChunk === void 0 || onStreamChunk(event.data);
185
187
  }
186
188
  };
187
- if (streamSliceMs) {
188
- recorder.start(streamSliceMs);
189
+ if (streamSliceMode === 'time' && streamSliceValue) {
190
+ recorder.start(streamSliceValue);
189
191
  } else {
190
192
  recorder.start();
191
193
  }
@@ -541,10 +543,10 @@ var useUserMedia = function useUserMedia(props) {
541
543
 
542
544
  // Update PCM stream slicer time slice when input sample rate changes
543
545
  useEffect(function () {
544
- if (streamSliceMs && pcmStreamSlicerRef.current.timeSlice !== streamSliceMs) {
545
- pcmStreamSlicerRef.current.timeSlice = streamSliceMs;
546
+ if (streamSliceValue && pcmStreamSlicerRef.current.value !== streamSliceValue) {
547
+ pcmStreamSlicerRef.current.value = streamSliceValue;
546
548
  }
547
- }, [streamSliceMs]);
549
+ }, [streamSliceValue]);
548
550
 
549
551
  // Detect sound activity (only for audio or media with audio)
550
552
  useEffect(function () {