@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
@@ -0,0 +1,457 @@
1
+ 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; }
2
+ 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); } }
3
+ 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); }); }; }
4
+ 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); }
5
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
7
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
8
+ 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; }
9
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
10
+ 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); }
11
+ /**
12
+ * - **EN:** An audio player class that supports URL or streaming data input
13
+ * - **CN:** 一个音频播放器类,支持URL或流数据输入
14
+ */
15
+ var AudioPlayer = /*#__PURE__*/function () {
16
+ /**
17
+ * - **EN:** Creates an audio player instance
18
+ * - **CN:** 创建音频播放器实例
19
+ *
20
+ * @param source - can be a URL string or ReadableStreamDefaultReader |
21
+ * 可以是URL字符串或ReadableStreamDefaultReader
22
+ */
23
+ function AudioPlayer(options) {
24
+ var _this = this;
25
+ _classCallCheck(this, AudioPlayer);
26
+ _defineProperty(this, "audio", void 0);
27
+ _defineProperty(this, "_volume", void 0);
28
+ _defineProperty(this, "audioContext", null);
29
+ _defineProperty(this, "gainNode", null);
30
+ _defineProperty(this, "sourceNode", null);
31
+ _defineProperty(this, "options", void 0);
32
+ _defineProperty(this, "onPlayEnd", void 0);
33
+ /**
34
+ * - **EN:** Add audio event listener
35
+ * - **CN:** 添加音频事件监听器
36
+ */
37
+ _defineProperty(this, "addEventListener", function (event, listener) {
38
+ _this.audio.addEventListener(event, listener);
39
+ });
40
+ /**
41
+ * - **EN:** Remove audio event listener
42
+ * - **CN:** 移除音频事件监听器
43
+ */
44
+ _defineProperty(this, "removeEventListener", function (event, listener) {
45
+ _this.audio.removeEventListener(event, listener);
46
+ });
47
+ var _ref = options || {},
48
+ source = _ref.source,
49
+ volume = _ref.volume;
50
+ this.options = options;
51
+ this.audio = new Audio();
52
+ this._volume = volume != null ? Math.min(1.0, Math.max(0, volume)) : 0.5; // Default volume 50%
53
+ this.audio.volume = this._volume;
54
+ if (typeof source === 'function') {
55
+ var result = source();
56
+ if (_typeof(result) === 'object' && 'then' in result && typeof result.then === 'function') {
57
+ result.then(function (data) {
58
+ return _this.setAudioSource(data);
59
+ });
60
+ } else {
61
+ this.setAudioSource(result);
62
+ }
63
+ } else {
64
+ this.setAudioSource(source);
65
+ }
66
+ this.onPlayEnd = function () {
67
+ var _this$options, _this$options$onPlayE;
68
+ (_this$options = _this.options) === null || _this$options === void 0 || (_this$options$onPlayE = _this$options.onPlayEnd) === null || _this$options$onPlayE === void 0 || _this$options$onPlayE.call(_this$options);
69
+ };
70
+ this.addEventListener('ended', this.onPlayEnd);
71
+ }
72
+
73
+ /**
74
+ * - **EN:** Check if audio is currently playing
75
+ * - **CN:** 检查音频是否正在播放
76
+ */
77
+ _createClass(AudioPlayer, [{
78
+ key: "isPlaying",
79
+ get: function get() {
80
+ var _this$audioContext;
81
+ return ((_this$audioContext = this.audioContext) === null || _this$audioContext === void 0 ? void 0 : _this$audioContext.state) === 'running';
82
+ }
83
+ /**
84
+ * - **EN:** Get current playback time (seconds)
85
+ * - **CN:** 获取当前播放时间(秒)
86
+ */
87
+ }, {
88
+ key: "currentTime",
89
+ get: function get() {
90
+ return this.audio.currentTime;
91
+ }
92
+ /**
93
+ * - **EN:** Get total audio duration (seconds)
94
+ * - **CN:** 获取音频总时长(秒)
95
+ */
96
+ }, {
97
+ key: "duration",
98
+ get: function get() {
99
+ return this.audio.duration;
100
+ }
101
+ /**
102
+ * - **EN:** Get current volume value (0-1)
103
+ * - **CN:** 获取当前音量值(0-1)
104
+ */
105
+ }, {
106
+ key: "volume",
107
+ get: function get() {
108
+ return this._volume;
109
+ }
110
+
111
+ /**
112
+ * - **EN:** Play audio. If previously paused, will resume from the pause position
113
+ * - **CN:** 播放音频 如果之前暂停过,将从暂停位置继续播放
114
+ */
115
+ }, {
116
+ key: "play",
117
+ value: (function () {
118
+ var _play = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
119
+ var _this$audioContext2;
120
+ var _this$options2, _this$options2$onPlay, _this$options3, _this$options3$onErro;
121
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
122
+ while (1) switch (_context.prev = _context.next) {
123
+ case 0:
124
+ if (!this.audioContext) {
125
+ this.initAudioContext();
126
+ }
127
+ if (!(((_this$audioContext2 = this.audioContext) === null || _this$audioContext2 === void 0 ? void 0 : _this$audioContext2.state) === 'suspended')) {
128
+ _context.next = 4;
129
+ break;
130
+ }
131
+ _context.next = 4;
132
+ return this.audioContext.resume();
133
+ case 4:
134
+ _context.prev = 4;
135
+ _context.next = 7;
136
+ return this.audio.play();
137
+ case 7:
138
+ (_this$options2 = this.options) === null || _this$options2 === void 0 || (_this$options2$onPlay = _this$options2.onPlay) === null || _this$options2$onPlay === void 0 || _this$options2$onPlay.call(_this$options2);
139
+ _context.next = 14;
140
+ break;
141
+ case 10:
142
+ _context.prev = 10;
143
+ _context.t0 = _context["catch"](4);
144
+ console.error('Error playing audio:', _context.t0);
145
+ (_this$options3 = this.options) === null || _this$options3 === void 0 || (_this$options3$onErro = _this$options3.onError) === null || _this$options3$onErro === void 0 || _this$options3$onErro.call(_this$options3, _context.t0);
146
+ case 14:
147
+ case "end":
148
+ return _context.stop();
149
+ }
150
+ }, _callee, this, [[4, 10]]);
151
+ }));
152
+ function play() {
153
+ return _play.apply(this, arguments);
154
+ }
155
+ return play;
156
+ }()
157
+ /**
158
+ * - **EN:** Seek forward by a certain number of seconds
159
+ * - **CN:** 向前跳转一定秒数
160
+ *
161
+ * @param seconds - number of seconds to seek forward | 要向前跳转的秒数
162
+ */
163
+ )
164
+ }, {
165
+ key: "seekForward",
166
+ value: function seekForward(seconds) {
167
+ if (seconds < 0) {
168
+ return;
169
+ }
170
+ if (!isNaN(this.audio.duration)) {
171
+ this.audio.currentTime = Math.min(this.audio.currentTime + seconds, this.audio.duration);
172
+ } else {
173
+ this.audio.currentTime += seconds;
174
+ }
175
+ }
176
+ /**
177
+ * - **EN:** Seek backward by a certain number of seconds
178
+ * - **CN:** 向后跳转一定秒数
179
+ *
180
+ * @param seconds - number of seconds to seek backward | 要向后跳转的秒数
181
+ */
182
+ }, {
183
+ key: "seekBackward",
184
+ value: function seekBackward(seconds) {
185
+ if (seconds < 0) {
186
+ return;
187
+ }
188
+ this.audio.currentTime = Math.max(this.audio.currentTime - seconds, 0);
189
+ }
190
+ /**
191
+ * - **EN:** Set current playback time (in seconds)
192
+ * - **CN:** 设置当前播放时间(以秒为单位)
193
+ *
194
+ * @param time - time in seconds | 时间(秒)
195
+ */
196
+ }, {
197
+ key: "seek",
198
+ value: function seek(time) {
199
+ // Ensure time is not less than 0
200
+ var newTime = Math.max(0, time);
201
+ // Ensure time is not greater than duration (if known)
202
+ if (!isNaN(this.audio.duration)) {
203
+ this.audio.currentTime = Math.min(newTime, this.audio.duration);
204
+ } else {
205
+ this.audio.currentTime = newTime;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * - **EN:** Pause audio playback. When played again, will continue from current position
211
+ * - **CN:** 暂停音频播放 再次播放时将从当前位置继续
212
+ */
213
+ }, {
214
+ key: "pause",
215
+ value: function pause() {
216
+ var _this$options4, _this$options4$onPaus;
217
+ this.audio.pause();
218
+ (_this$options4 = this.options) === null || _this$options4 === void 0 || (_this$options4$onPaus = _this$options4.onPause) === null || _this$options4$onPaus === void 0 || _this$options4$onPaus.call(_this$options4);
219
+ }
220
+
221
+ /**
222
+ * - **EN:** Stop audio playback. Progress will reset to the beginning
223
+ * - **CN:** 停止音频播放 进度会重置到开始位置
224
+ */
225
+ }, {
226
+ key: "stop",
227
+ value: function stop() {
228
+ var _this$options5, _this$options5$onStop;
229
+ this.audio.pause();
230
+ this.audio.currentTime = 0;
231
+ (_this$options5 = this.options) === null || _this$options5 === void 0 || (_this$options5$onStop = _this$options5.onStop) === null || _this$options5$onStop === void 0 || _this$options5$onStop.call(_this$options5);
232
+ }
233
+
234
+ /**
235
+ * - **EN:** Update audio source
236
+ * - **CN:** 更新音频源
237
+ *
238
+ * @param source - can be a URL `string` or `ReadableStreamDefaultReader` |
239
+ * 可以是URL字符串或`ReadableStreamDefaultReader`
240
+ */
241
+ }, {
242
+ key: "setAudioSource",
243
+ value: (function () {
244
+ var _setAudioSource = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(source) {
245
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
246
+ while (1) switch (_context2.prev = _context2.next) {
247
+ case 0:
248
+ this.audio.pause();
249
+ this.audio.src = '';
250
+ if (!(typeof source === 'string')) {
251
+ _context2.next = 6;
252
+ break;
253
+ }
254
+ this.audio.src = source;
255
+ _context2.next = 8;
256
+ break;
257
+ case 6:
258
+ _context2.next = 8;
259
+ return this.handleStreamSource(source);
260
+ case 8:
261
+ case "end":
262
+ return _context2.stop();
263
+ }
264
+ }, _callee2, this);
265
+ }));
266
+ function setAudioSource(_x) {
267
+ return _setAudioSource.apply(this, arguments);
268
+ }
269
+ return setAudioSource;
270
+ }()
271
+ /**
272
+ * - **EN:** Increase volume (by 10% each time)
273
+ * - **CN:** 增加音量(每次增加10%)
274
+ *
275
+ * @param percent - increase percentage (default 10%) | 增加百分比(默认10%)
276
+ */
277
+ )
278
+ }, {
279
+ key: "volumeUp",
280
+ value: function volumeUp() {
281
+ var percent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.1;
282
+ this._volume = Math.min(1.0, this._volume + percent);
283
+ this.updateVolume();
284
+ }
285
+
286
+ /**
287
+ * - **EN:** Decrease volume (by 10% each time)
288
+ * - **CN:** 降低音量(每次降低10%)
289
+ *
290
+ * @param percent - decrease percentage (default 10%) | 降低百分比(默认10%)
291
+ */
292
+ }, {
293
+ key: "volumeDown",
294
+ value: function volumeDown() {
295
+ var percent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.1;
296
+ this._volume = Math.max(0, this._volume - percent);
297
+ this.updateVolume();
298
+ }
299
+
300
+ /**
301
+ * - **EN:** Set volume to a specific value (0-1)
302
+ * - **CN:** 将音量设置为特定值(0-1)
303
+ *
304
+ * @param value - new volume value (0-1) | 新的音量值(0-1)
305
+ */
306
+ }, {
307
+ key: "setVolume",
308
+ value: function setVolume(value) {
309
+ this._volume = Math.min(1.0, Math.max(0, value));
310
+ this.updateVolume();
311
+ }
312
+ }, {
313
+ key: "dispose",
314
+ value:
315
+ /**
316
+ * - **EN:** Release resources
317
+ * - **CN:** 释放资源
318
+ */
319
+ function dispose() {
320
+ this.audio.pause();
321
+ this.audio.src = '';
322
+ this.removeEventListener('ended', this.onPlayEnd);
323
+ if (this.audioContext) {
324
+ try {
325
+ this.audioContext.close();
326
+ } catch (error) {
327
+ console.error('Error closing AudioContext:', error);
328
+ }
329
+ this.audioContext = null;
330
+ }
331
+ this.sourceNode = null;
332
+ this.gainNode = null;
333
+ }
334
+
335
+ /** Process streaming data source */
336
+ }, {
337
+ key: "handleStreamSource",
338
+ value: (function () {
339
+ var _handleStreamSource = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(source) {
340
+ var blob, stream, response, url;
341
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
342
+ while (1) switch (_context4.prev = _context4.next) {
343
+ case 0:
344
+ if (source) {
345
+ _context4.next = 2;
346
+ break;
347
+ }
348
+ return _context4.abrupt("return");
349
+ case 2:
350
+ _context4.prev = 2;
351
+ if (!(source instanceof Blob)) {
352
+ _context4.next = 7;
353
+ break;
354
+ }
355
+ blob = source;
356
+ _context4.next = 16;
357
+ break;
358
+ case 7:
359
+ if (!(source instanceof ArrayBuffer || source instanceof Uint8Array)) {
360
+ _context4.next = 11;
361
+ break;
362
+ }
363
+ blob = new Blob([source]);
364
+ _context4.next = 16;
365
+ break;
366
+ case 11:
367
+ // Create a new ReadableStream to read data from the reader
368
+ stream = new ReadableStream({
369
+ pull: function pull(controller) {
370
+ return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
371
+ var _yield$source$read, done, value;
372
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
373
+ while (1) switch (_context3.prev = _context3.next) {
374
+ case 0:
375
+ _context3.prev = 0;
376
+ _context3.next = 3;
377
+ return source.read();
378
+ case 3:
379
+ _yield$source$read = _context3.sent;
380
+ done = _yield$source$read.done;
381
+ value = _yield$source$read.value;
382
+ if (done) {
383
+ controller.close();
384
+ } else {
385
+ controller.enqueue(value);
386
+ }
387
+ _context3.next = 12;
388
+ break;
389
+ case 9:
390
+ _context3.prev = 9;
391
+ _context3.t0 = _context3["catch"](0);
392
+ controller.error(_context3.t0);
393
+ case 12:
394
+ case "end":
395
+ return _context3.stop();
396
+ }
397
+ }, _callee3, null, [[0, 9]]);
398
+ }))();
399
+ }
400
+ }); // Convert stream to Blob and create URL
401
+ response = new Response(stream);
402
+ _context4.next = 15;
403
+ return response.blob();
404
+ case 15:
405
+ blob = _context4.sent;
406
+ case 16:
407
+ url = URL.createObjectURL(blob);
408
+ this.audio.src = url;
409
+
410
+ // Release Blob URL after audio loads
411
+ this.audio.onload = function () {
412
+ URL.revokeObjectURL(url);
413
+ };
414
+ _context4.next = 24;
415
+ break;
416
+ case 21:
417
+ _context4.prev = 21;
418
+ _context4.t0 = _context4["catch"](2);
419
+ console.error('Error processing audio stream:', _context4.t0);
420
+ case 24:
421
+ case "end":
422
+ return _context4.stop();
423
+ }
424
+ }, _callee4, this, [[2, 21]]);
425
+ }));
426
+ function handleStreamSource(_x2) {
427
+ return _handleStreamSource.apply(this, arguments);
428
+ }
429
+ return handleStreamSource;
430
+ }() /** Initialize Web Audio API for better volume control */)
431
+ }, {
432
+ key: "initAudioContext",
433
+ value: function initAudioContext() {
434
+ if (this.audioContext) return;
435
+ this.audioContext = new AudioContext();
436
+ this.sourceNode = this.audioContext.createMediaElementSource(this.audio);
437
+ this.gainNode = this.audioContext.createGain();
438
+ this.sourceNode.connect(this.gainNode);
439
+ this.gainNode.connect(this.audioContext.destination);
440
+ this.gainNode.gain.value = this._volume;
441
+ }
442
+
443
+ /** Update audio playback volume */
444
+ }, {
445
+ key: "updateVolume",
446
+ value: function updateVolume() {
447
+ if (this.gainNode) {
448
+ this.gainNode.gain.value = this._volume;
449
+ } else {
450
+ this.audio.volume = this._volume;
451
+ }
452
+ }
453
+ }]);
454
+ return AudioPlayer;
455
+ }();
456
+ export default AudioPlayer;
457
+ //# sourceMappingURL=AudioPlayer.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","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","_this$audioContext","audioContext","state","currentTime","duration","_play","_callee","_this$audioContext2","_this$options2","_this$options2$onPlay","_this$options3","_this$options3$onErro","_callee$","_context","initAudioContext","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","handleStreamSource","_x","volumeUp","percent","updateVolume","volumeDown","setVolume","dispose","close","sourceNode","gainNode","_handleStreamSource","_callee4","blob","stream","response","url","_callee4$","_context4","Blob","ArrayBuffer","Uint8Array","ReadableStream","pull","controller","_callee3","_yield$source$read","_callee3$","_context3","read","enqueue","Response","URL","createObjectURL","onload","revokeObjectURL","_x2","AudioContext","createMediaElementSource","createGain","connect","destination","gain"],"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:** 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 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.audioContext?.state === 'running';\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) {\n this.audio.pause();\n this.audio.src = '';\n\n if (typeof source === 'string') {\n this.audio.src = source;\n } else {\n 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\n /** Process streaming data source */\n private async handleStreamSource(source: Exclude<AudioSource, string> | undefined) {\n if (!source) return;\n try {\n let blob: Blob;\n if (source instanceof Blob) {\n blob = source;\n } else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n blob = new Blob([source]);\n } else {\n // Create a new ReadableStream to read data from the reader\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n const { done, value } = await source.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 blob = await response.blob();\n }\n\n const url = URL.createObjectURL(blob);\n\n this.audio.src = url;\n\n // Release Blob URL after audio loads\n this.audio.onload = () => {\n URL.revokeObjectURL(url);\n };\n } catch (error) {\n console.error('Error processing audio stream:', 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\nexport default AudioPlayer;\n"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * - **EN:** Encode a UTF-8 string into Base64 (standard or URL-safe).
3
+ * - **CN:** 将 UTF-8 字符串编码为 Base64(标准或 URL 安全格式)。
4
+ *
5
+ * @param content Input text to encode | 要编码的输入文本
6
+ *
7
+ * @returns Base64 encoded string | Base64 编码后的字符串
8
+ */
9
+ export declare function stringToBase64(content: string, opts?: {
10
+ /**
11
+ * - **EN:** Use URL-safe Base64 if true (replace +/ with -_ and strip =)
12
+ * - **CN:** 为 true 时使用 URL 安全 Base64(将 +/ 替换为 -_ 并去掉 =)
13
+ */
14
+ urlSafe?: boolean;
15
+ }): string;
16
+ /**
17
+ * - EN: Decode a Base64 (standard or URL-safe) string into UTF-8 text.
18
+ * - CN: 将(标准或 URL 安全)Base64 字符串解码为 UTF-8 文本。
19
+ *
20
+ * @param content Base64 encoded string | Base64 编码字符串
21
+ *
22
+ * @returns Decoded UTF-8 string | 解码后的 UTF-8 字符串
23
+ */
24
+ export declare function base64ToString(content: string, opts?: {
25
+ /**
26
+ * - **EN:** Use URL-safe Base64 if true (replace +/ with -_ and strip =)
27
+ * - **CN:** 为 true 时使用 URL 安全 Base64(将 +/ 替换为 -_ 并去掉 =)
28
+ */
29
+ urlSafe?: boolean;
30
+ }): string;
31
+ /**
32
+ * - **EN:** Convert an ArrayBuffer to a Base64 encoded string.
33
+ * - **CN:** 将 ArrayBuffer 转换为 Base64 编码的字符串。
34
+ *
35
+ * @param buf The ArrayBuffer to convert | 要转换的 ArrayBuffer
36
+ *
37
+ * @returns The Base64 encoded string | Base64 编码的字符串
38
+ */
39
+ export declare function arrayBufferToBase64(buf: ArrayBuffer): string;
40
+ /**
41
+ * - **EN:** Decode a Base64 (standard or URL-safe) string into an ArrayBuffer.
42
+ * - **CN:** 将(标准或 URL 安全)Base64 字符串解码为 ArrayBuffer。
43
+ *
44
+ * @param base64 The Base64 encoded string | Base64 编码的字符串
45
+ *
46
+ * @returns The decoded ArrayBuffer | 解码后的 ArrayBuffer
47
+ */
48
+ export declare function base64ToArrayBuffer(base64: string): ArrayBuffer;