speechflow 1.5.1 → 1.6.1

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 (232) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +192 -171
  3. package/etc/claude.md +83 -46
  4. package/etc/speechflow.yaml +84 -84
  5. package/package.json +3 -3
  6. package/speechflow-cli/dst/speechflow-main-api.d.ts +12 -0
  7. package/speechflow-cli/dst/speechflow-main-api.js +319 -0
  8. package/speechflow-cli/dst/speechflow-main-api.js.map +1 -0
  9. package/speechflow-cli/dst/speechflow-main-cli.d.ts +28 -0
  10. package/speechflow-cli/dst/speechflow-main-cli.js +271 -0
  11. package/speechflow-cli/dst/speechflow-main-cli.js.map +1 -0
  12. package/speechflow-cli/dst/speechflow-main-config.d.ts +9 -0
  13. package/speechflow-cli/dst/speechflow-main-config.js +27 -0
  14. package/speechflow-cli/dst/speechflow-main-config.js.map +1 -0
  15. package/speechflow-cli/dst/speechflow-main-graph.d.ts +34 -0
  16. package/speechflow-cli/dst/speechflow-main-graph.js +367 -0
  17. package/speechflow-cli/dst/speechflow-main-graph.js.map +1 -0
  18. package/speechflow-cli/dst/speechflow-main-nodes.d.ts +10 -0
  19. package/speechflow-cli/dst/speechflow-main-nodes.js +60 -0
  20. package/speechflow-cli/dst/speechflow-main-nodes.js.map +1 -0
  21. package/speechflow-cli/dst/speechflow-main-status.d.ts +11 -0
  22. package/speechflow-cli/dst/speechflow-main-status.js +60 -0
  23. package/speechflow-cli/dst/speechflow-main-status.js.map +1 -0
  24. package/speechflow-cli/dst/speechflow-main.d.ts +7 -0
  25. package/speechflow-cli/dst/speechflow-main.js +127 -0
  26. package/speechflow-cli/dst/speechflow-main.js.map +1 -0
  27. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js +4 -4
  28. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js.map +1 -1
  29. package/speechflow-cli/dst/speechflow-node-a2a-compressor.d.ts +1 -1
  30. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js +8 -9
  31. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js.map +1 -1
  32. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js +5 -5
  33. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js.map +1 -1
  34. package/speechflow-cli/dst/speechflow-node-a2a-expander.d.ts +1 -1
  35. package/speechflow-cli/dst/speechflow-node-a2a-expander.js +8 -9
  36. package/speechflow-cli/dst/speechflow-node-a2a-expander.js.map +1 -1
  37. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.d.ts +1 -1
  38. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +8 -8
  39. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
  40. package/speechflow-cli/dst/speechflow-node-a2a-filler.d.ts +1 -1
  41. package/speechflow-cli/dst/speechflow-node-a2a-filler.js +6 -6
  42. package/speechflow-cli/dst/speechflow-node-a2a-filler.js.map +1 -1
  43. package/speechflow-cli/dst/speechflow-node-a2a-gain.d.ts +1 -1
  44. package/speechflow-cli/dst/speechflow-node-a2a-gain.js +5 -5
  45. package/speechflow-cli/dst/speechflow-node-a2a-gain.js.map +1 -1
  46. package/speechflow-cli/dst/speechflow-node-a2a-gender.d.ts +1 -1
  47. package/speechflow-cli/dst/speechflow-node-a2a-gender.js +7 -7
  48. package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
  49. package/speechflow-cli/dst/speechflow-node-a2a-meter.d.ts +1 -1
  50. package/speechflow-cli/dst/speechflow-node-a2a-meter.js +5 -5
  51. package/speechflow-cli/dst/speechflow-node-a2a-meter.js.map +1 -1
  52. package/speechflow-cli/dst/speechflow-node-a2a-mute.d.ts +1 -1
  53. package/speechflow-cli/dst/speechflow-node-a2a-mute.js +3 -3
  54. package/speechflow-cli/dst/speechflow-node-a2a-mute.js.map +1 -1
  55. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.d.ts +1 -1
  56. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js +7 -7
  57. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js.map +1 -1
  58. package/speechflow-cli/dst/speechflow-node-a2a-speex.d.ts +1 -1
  59. package/speechflow-cli/dst/speechflow-node-a2a-speex.js +7 -7
  60. package/speechflow-cli/dst/speechflow-node-a2a-speex.js.map +1 -1
  61. package/speechflow-cli/dst/speechflow-node-a2a-vad.d.ts +1 -1
  62. package/speechflow-cli/dst/speechflow-node-a2a-vad.js +7 -7
  63. package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
  64. package/speechflow-cli/dst/speechflow-node-a2a-wav.d.ts +1 -1
  65. package/speechflow-cli/dst/speechflow-node-a2a-wav.js +3 -3
  66. package/speechflow-cli/dst/speechflow-node-a2a-wav.js.map +1 -1
  67. package/speechflow-cli/dst/{speechflow-node-a2t-awstranscribe.d.ts → speechflow-node-a2t-amazon.d.ts} +1 -1
  68. package/speechflow-cli/dst/{speechflow-node-a2t-awstranscribe.js → speechflow-node-a2t-amazon.js} +11 -11
  69. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js.map +1 -0
  70. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.d.ts +1 -1
  71. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +7 -7
  72. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  73. package/speechflow-cli/dst/{speechflow-node-a2t-openaitranscribe.d.ts → speechflow-node-a2t-openai.d.ts} +1 -1
  74. package/speechflow-cli/dst/{speechflow-node-a2t-openaitranscribe.js → speechflow-node-a2t-openai.js} +11 -11
  75. package/speechflow-cli/dst/speechflow-node-a2t-openai.js.map +1 -0
  76. package/speechflow-cli/dst/{speechflow-node-t2a-awspolly.d.ts → speechflow-node-t2a-amazon.d.ts} +1 -1
  77. package/speechflow-cli/dst/{speechflow-node-t2a-awspolly.js → speechflow-node-t2a-amazon.js} +9 -9
  78. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js.map +1 -0
  79. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.d.ts +1 -1
  80. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js +5 -5
  81. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
  82. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.d.ts +1 -1
  83. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +7 -7
  84. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -1
  85. package/speechflow-cli/dst/{speechflow-node-t2t-awstranslate.d.ts → speechflow-node-t2t-amazon.d.ts} +1 -1
  86. package/speechflow-cli/dst/{speechflow-node-t2t-awstranslate.js → speechflow-node-t2t-amazon.js} +7 -7
  87. package/speechflow-cli/dst/speechflow-node-t2t-amazon.js.map +1 -0
  88. package/speechflow-cli/dst/speechflow-node-t2t-deepl.d.ts +1 -1
  89. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +5 -5
  90. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js.map +1 -1
  91. package/speechflow-cli/dst/speechflow-node-t2t-format.d.ts +1 -1
  92. package/speechflow-cli/dst/speechflow-node-t2t-format.js +3 -3
  93. package/speechflow-cli/dst/speechflow-node-t2t-format.js.map +1 -1
  94. package/speechflow-cli/dst/speechflow-node-t2t-google.d.ts +1 -1
  95. package/speechflow-cli/dst/speechflow-node-t2t-google.js +8 -8
  96. package/speechflow-cli/dst/speechflow-node-t2t-google.js.map +1 -1
  97. package/speechflow-cli/dst/{speechflow-node-a2a-dynamics.d.ts → speechflow-node-t2t-modify.d.ts} +1 -5
  98. package/speechflow-cli/dst/speechflow-node-t2t-modify.js +111 -0
  99. package/speechflow-cli/dst/speechflow-node-t2t-modify.js.map +1 -0
  100. package/speechflow-cli/dst/speechflow-node-t2t-ollama.d.ts +1 -1
  101. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js +5 -5
  102. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js.map +1 -1
  103. package/speechflow-cli/dst/speechflow-node-t2t-openai.d.ts +1 -1
  104. package/speechflow-cli/dst/speechflow-node-t2t-openai.js +5 -5
  105. package/speechflow-cli/dst/speechflow-node-t2t-openai.js.map +1 -1
  106. package/speechflow-cli/dst/speechflow-node-t2t-sentence.d.ts +1 -1
  107. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +5 -5
  108. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js.map +1 -1
  109. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.d.ts +1 -1
  110. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +5 -5
  111. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -1
  112. package/speechflow-cli/dst/speechflow-node-t2t-transformers.d.ts +1 -1
  113. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js +5 -5
  114. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js.map +1 -1
  115. package/speechflow-cli/dst/speechflow-node-x2x-filter.d.ts +1 -1
  116. package/speechflow-cli/dst/speechflow-node-x2x-filter.js +5 -5
  117. package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -1
  118. package/speechflow-cli/dst/speechflow-node-x2x-trace.d.ts +1 -1
  119. package/speechflow-cli/dst/speechflow-node-x2x-trace.js +3 -3
  120. package/speechflow-cli/dst/speechflow-node-x2x-trace.js.map +1 -1
  121. package/speechflow-cli/dst/speechflow-node-xio-device.d.ts +1 -1
  122. package/speechflow-cli/dst/speechflow-node-xio-device.js +8 -8
  123. package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -1
  124. package/speechflow-cli/dst/speechflow-node-xio-file.d.ts +1 -1
  125. package/speechflow-cli/dst/speechflow-node-xio-file.js +50 -29
  126. package/speechflow-cli/dst/speechflow-node-xio-file.js.map +1 -1
  127. package/speechflow-cli/dst/speechflow-node-xio-mqtt.d.ts +1 -1
  128. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +7 -7
  129. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -1
  130. package/speechflow-cli/dst/speechflow-node-xio-websocket.d.ts +1 -1
  131. package/speechflow-cli/dst/speechflow-node-xio-websocket.js +10 -10
  132. package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -1
  133. package/speechflow-cli/dst/{speechflow-utils-audio-wt.js → speechflow-util-audio-wt.js} +1 -1
  134. package/speechflow-cli/dst/speechflow-util-audio-wt.js.map +1 -0
  135. package/speechflow-cli/dst/speechflow-util-audio.d.ts +22 -0
  136. package/speechflow-cli/dst/speechflow-util-audio.js +251 -0
  137. package/speechflow-cli/dst/speechflow-util-audio.js.map +1 -0
  138. package/speechflow-cli/dst/speechflow-util-error.d.ts +14 -0
  139. package/speechflow-cli/dst/speechflow-util-error.js +131 -0
  140. package/speechflow-cli/dst/speechflow-util-error.js.map +1 -0
  141. package/speechflow-cli/dst/speechflow-util-queue.d.ts +68 -0
  142. package/speechflow-cli/dst/speechflow-util-queue.js +338 -0
  143. package/speechflow-cli/dst/speechflow-util-queue.js.map +1 -0
  144. package/speechflow-cli/dst/speechflow-util-stream.d.ts +18 -0
  145. package/speechflow-cli/dst/speechflow-util-stream.js +219 -0
  146. package/speechflow-cli/dst/speechflow-util-stream.js.map +1 -0
  147. package/speechflow-cli/dst/speechflow-util-webaudio-wt.js +124 -0
  148. package/speechflow-cli/dst/speechflow-util-webaudio-wt.js.map +1 -0
  149. package/speechflow-cli/dst/{speechflow-utils-audio.js → speechflow-util-webaudio.js} +2 -2
  150. package/speechflow-cli/dst/speechflow-util-webaudio.js.map +1 -0
  151. package/speechflow-cli/dst/speechflow-util.d.ts +4 -0
  152. package/speechflow-cli/dst/speechflow-util.js +26 -0
  153. package/speechflow-cli/dst/speechflow-util.js.map +1 -0
  154. package/speechflow-cli/dst/speechflow.js +3 -906
  155. package/speechflow-cli/dst/speechflow.js.map +1 -1
  156. package/speechflow-cli/etc/oxlint.jsonc +4 -1
  157. package/speechflow-cli/package.json +12 -11
  158. package/speechflow-cli/src/speechflow-main-api.ts +315 -0
  159. package/speechflow-cli/src/speechflow-main-cli.ts +259 -0
  160. package/speechflow-cli/src/speechflow-main-config.ts +17 -0
  161. package/speechflow-cli/src/speechflow-main-graph.ts +372 -0
  162. package/speechflow-cli/src/speechflow-main-nodes.ts +61 -0
  163. package/speechflow-cli/src/speechflow-main-status.ts +70 -0
  164. package/speechflow-cli/src/speechflow-main.ts +106 -0
  165. package/speechflow-cli/src/speechflow-node-a2a-compressor-wt.ts +4 -4
  166. package/speechflow-cli/src/speechflow-node-a2a-compressor.ts +7 -8
  167. package/speechflow-cli/src/speechflow-node-a2a-expander-wt.ts +5 -5
  168. package/speechflow-cli/src/speechflow-node-a2a-expander.ts +7 -8
  169. package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +7 -7
  170. package/speechflow-cli/src/speechflow-node-a2a-filler.ts +6 -6
  171. package/speechflow-cli/src/speechflow-node-a2a-gain.ts +4 -4
  172. package/speechflow-cli/src/speechflow-node-a2a-gender.ts +6 -6
  173. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +4 -4
  174. package/speechflow-cli/src/speechflow-node-a2a-mute.ts +2 -2
  175. package/speechflow-cli/src/speechflow-node-a2a-rnnoise.ts +6 -6
  176. package/speechflow-cli/src/speechflow-node-a2a-speex.ts +6 -6
  177. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +6 -6
  178. package/speechflow-cli/src/speechflow-node-a2a-wav.ts +2 -2
  179. package/speechflow-cli/src/{speechflow-node-a2t-awstranscribe.ts → speechflow-node-a2t-amazon.ts} +10 -10
  180. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +7 -7
  181. package/speechflow-cli/src/{speechflow-node-a2t-openaitranscribe.ts → speechflow-node-a2t-openai.ts} +10 -10
  182. package/speechflow-cli/src/{speechflow-node-t2a-awspolly.ts → speechflow-node-t2a-amazon.ts} +7 -7
  183. package/speechflow-cli/src/speechflow-node-t2a-elevenlabs.ts +4 -4
  184. package/speechflow-cli/src/speechflow-node-t2a-kokoro.ts +6 -6
  185. package/speechflow-cli/src/{speechflow-node-t2t-awstranslate.ts → speechflow-node-t2t-amazon.ts} +5 -5
  186. package/speechflow-cli/src/speechflow-node-t2t-deepl.ts +4 -4
  187. package/speechflow-cli/src/speechflow-node-t2t-format.ts +2 -2
  188. package/speechflow-cli/src/speechflow-node-t2t-google.ts +7 -7
  189. package/speechflow-cli/src/speechflow-node-t2t-modify.ts +84 -0
  190. package/speechflow-cli/src/speechflow-node-t2t-ollama.ts +4 -4
  191. package/speechflow-cli/src/speechflow-node-t2t-openai.ts +4 -4
  192. package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +4 -4
  193. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +9 -9
  194. package/speechflow-cli/src/speechflow-node-t2t-transformers.ts +4 -4
  195. package/speechflow-cli/src/speechflow-node-x2x-filter.ts +4 -4
  196. package/speechflow-cli/src/speechflow-node-x2x-trace.ts +2 -2
  197. package/speechflow-cli/src/speechflow-node-xio-device.ts +7 -7
  198. package/speechflow-cli/src/speechflow-node-xio-file.ts +49 -28
  199. package/speechflow-cli/src/speechflow-node-xio-mqtt.ts +7 -7
  200. package/speechflow-cli/src/speechflow-node-xio-websocket.ts +9 -9
  201. package/speechflow-cli/src/{speechflow-utils-audio.ts → speechflow-util-audio.ts} +131 -1
  202. package/speechflow-cli/src/speechflow-util-error.ts +184 -0
  203. package/speechflow-cli/src/speechflow-util-queue.ts +320 -0
  204. package/speechflow-cli/src/speechflow-util-stream.ts +197 -0
  205. package/speechflow-cli/src/speechflow-util.ts +10 -0
  206. package/speechflow-cli/src/speechflow.ts +3 -947
  207. package/speechflow-ui-db/package.json +3 -3
  208. package/speechflow-ui-st/dst/app-font-fa-brands-400.woff2 +0 -0
  209. package/speechflow-ui-st/dst/app-font-fa-regular-400.woff2 +0 -0
  210. package/speechflow-ui-st/dst/app-font-fa-solid-900.woff2 +0 -0
  211. package/speechflow-ui-st/dst/app-font-fa-v4compatibility.woff2 +0 -0
  212. package/speechflow-ui-st/dst/index.css +2 -2
  213. package/speechflow-ui-st/dst/index.js +32 -33
  214. package/speechflow-ui-st/package.json +4 -4
  215. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.js +0 -208
  216. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.js.map +0 -1
  217. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.js +0 -312
  218. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.js.map +0 -1
  219. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.js.map +0 -1
  220. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.js.map +0 -1
  221. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.js.map +0 -1
  222. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.js.map +0 -1
  223. package/speechflow-cli/dst/speechflow-utils-audio-wt.js.map +0 -1
  224. package/speechflow-cli/dst/speechflow-utils-audio.js.map +0 -1
  225. package/speechflow-cli/dst/speechflow-utils.d.ts +0 -108
  226. package/speechflow-cli/dst/speechflow-utils.js +0 -740
  227. package/speechflow-cli/dst/speechflow-utils.js.map +0 -1
  228. package/speechflow-cli/src/speechflow-utils.ts +0 -804
  229. /package/speechflow-cli/dst/{speechflow-node-a2a-dynamics-wt.d.ts → speechflow-util-audio-wt.d.ts} +0 -0
  230. /package/speechflow-cli/dst/{speechflow-utils-audio-wt.d.ts → speechflow-util-webaudio-wt.d.ts} +0 -0
  231. /package/speechflow-cli/dst/{speechflow-utils-audio.d.ts → speechflow-util-webaudio.d.ts} +0 -0
  232. /package/speechflow-cli/src/{speechflow-utils-audio-wt.ts → speechflow-util-audio-wt.ts} +0 -0
@@ -0,0 +1,338 @@
1
+ "use strict";
2
+ /*
3
+ ** SpeechFlow - Speech Processing Flow Graph
4
+ ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
+ ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.CachedRegExp = exports.AsyncQueue = exports.TimeStore = exports.Queue = exports.QueuePointer = exports.DoubleQueue = exports.SingleQueue = void 0;
42
+ exports.importObject = importObject;
43
+ /* standard dependencies */
44
+ const node_events_1 = require("node:events");
45
+ const arktype_1 = require("arktype");
46
+ const IntervalTree = __importStar(require("node-interval-tree"));
47
+ /* internal dependencies */
48
+ const util = __importStar(require("./speechflow-util"));
49
+ /* import an object with parsing and strict error handling */
50
+ function importObject(name, arg, validator) {
51
+ const obj = typeof arg === "string" ?
52
+ util.run(`${name}: parsing JSON`, () => JSON.parse(arg)) :
53
+ arg;
54
+ const result = validator(obj);
55
+ if (result instanceof arktype_1.type.errors)
56
+ throw new Error(`${name}: validation: ${result.summary}`);
57
+ return result;
58
+ }
59
+ /* helper class for single item queue */
60
+ class SingleQueue extends node_events_1.EventEmitter {
61
+ queue = new Array();
62
+ write(item) {
63
+ this.queue.unshift(item);
64
+ this.emit("dequeue");
65
+ }
66
+ read() {
67
+ return new Promise((resolve, reject) => {
68
+ const consume = () => this.queue.length > 0 ? this.queue.pop() : null;
69
+ const tryToConsume = () => {
70
+ const item = consume();
71
+ if (item !== null)
72
+ resolve(item);
73
+ else
74
+ this.once("dequeue", tryToConsume);
75
+ };
76
+ tryToConsume();
77
+ });
78
+ }
79
+ }
80
+ exports.SingleQueue = SingleQueue;
81
+ /* helper class for double-item queue */
82
+ class DoubleQueue extends node_events_1.EventEmitter {
83
+ queue0 = new Array();
84
+ queue1 = new Array();
85
+ notify() {
86
+ if (this.queue0.length > 0 && this.queue1.length > 0)
87
+ this.emit("dequeue");
88
+ }
89
+ write0(item) {
90
+ this.queue0.unshift(item);
91
+ this.notify();
92
+ }
93
+ write1(item) {
94
+ this.queue1.unshift(item);
95
+ this.notify();
96
+ }
97
+ read() {
98
+ return new Promise((resolve, reject) => {
99
+ const consume = () => {
100
+ if (this.queue0.length > 0 && this.queue1.length > 0) {
101
+ const item0 = this.queue0.pop();
102
+ const item1 = this.queue1.pop();
103
+ return [item0, item1];
104
+ }
105
+ return null;
106
+ };
107
+ const tryToConsume = () => {
108
+ const items = consume();
109
+ if (items !== null)
110
+ resolve(items);
111
+ else
112
+ this.once("dequeue", tryToConsume);
113
+ };
114
+ tryToConsume();
115
+ });
116
+ }
117
+ }
118
+ exports.DoubleQueue = DoubleQueue;
119
+ /* queue pointer */
120
+ class QueuePointer extends node_events_1.EventEmitter {
121
+ name;
122
+ queue;
123
+ /* internal state */
124
+ index = 0;
125
+ /* construction */
126
+ constructor(name, queue) {
127
+ super();
128
+ this.name = name;
129
+ this.queue = queue;
130
+ this.setMaxListeners(100);
131
+ }
132
+ /* positioning operations */
133
+ maxPosition() {
134
+ return this.queue.elements.length;
135
+ }
136
+ position(index) {
137
+ if (index !== undefined) {
138
+ this.index = Math.max(0, Math.min(index, this.queue.elements.length));
139
+ this.emit("position", this.index);
140
+ }
141
+ return this.index;
142
+ }
143
+ walk(num) {
144
+ const indexOld = this.index;
145
+ if (num > 0)
146
+ this.index = Math.min(this.index + num, this.queue.elements.length);
147
+ else if (num < 0)
148
+ this.index = Math.max(this.index + num, 0);
149
+ if (this.index !== indexOld)
150
+ this.emit("position", { start: this.index });
151
+ }
152
+ walkForwardUntil(type) {
153
+ while (this.index < this.queue.elements.length
154
+ && this.queue.elements[this.index].type !== type)
155
+ this.index++;
156
+ this.emit("position", { start: this.index });
157
+ }
158
+ walkBackwardUntil(type) {
159
+ while (this.index > 0
160
+ && this.queue.elements[this.index].type !== type)
161
+ this.index--;
162
+ this.emit("position", { start: this.index });
163
+ }
164
+ /* search operations */
165
+ searchForward(type) {
166
+ let position = this.index;
167
+ while (position < this.queue.elements.length
168
+ && this.queue.elements[position].type !== type)
169
+ position++;
170
+ this.emit("search", { start: this.index, end: position });
171
+ return position;
172
+ }
173
+ searchBackward(type) {
174
+ let position = this.index;
175
+ while (position > 0
176
+ && this.queue.elements[position].type !== type)
177
+ position--;
178
+ this.emit("search", { start: position, end: this.index });
179
+ return position;
180
+ }
181
+ /* reading operations */
182
+ peek(position) {
183
+ if (position === undefined)
184
+ position = this.index;
185
+ position = Math.max(0, Math.min(position, this.queue.elements.length));
186
+ const element = this.queue.elements[position];
187
+ this.queue.emit("read", { start: position, end: position });
188
+ return element;
189
+ }
190
+ read() {
191
+ const element = this.queue.elements[this.index];
192
+ if (this.index < this.queue.elements.length)
193
+ this.index++;
194
+ this.queue.emit("read", { start: this.index - 1, end: this.index - 1 });
195
+ return element;
196
+ }
197
+ slice(size) {
198
+ let slice;
199
+ const start = this.index;
200
+ if (size !== undefined) {
201
+ size = Math.max(0, Math.min(size, this.queue.elements.length - this.index));
202
+ slice = this.queue.elements.slice(this.index, this.index + size);
203
+ this.index += size;
204
+ }
205
+ else {
206
+ slice = this.queue.elements.slice(this.index);
207
+ this.index = this.queue.elements.length;
208
+ }
209
+ this.queue.emit("read", { start, end: this.index });
210
+ return slice;
211
+ }
212
+ /* writing operations */
213
+ touch() {
214
+ if (this.index >= this.queue.elements.length)
215
+ throw new Error("cannot touch after last element");
216
+ this.queue.emit("write", { start: this.index, end: this.index + 1 });
217
+ }
218
+ append(element) {
219
+ this.queue.elements.push(element);
220
+ this.index = this.queue.elements.length;
221
+ this.queue.emit("write", { start: this.index - 1, end: this.index - 1 });
222
+ }
223
+ insert(element) {
224
+ this.queue.elements.splice(this.index, 0, element);
225
+ this.queue.emit("write", { start: this.index - 1, end: this.index });
226
+ }
227
+ delete() {
228
+ if (this.index >= this.queue.elements.length)
229
+ throw new Error("cannot delete after last element");
230
+ this.queue.elements.splice(this.index, 1);
231
+ this.queue.emit("write", { start: this.index, end: this.index });
232
+ }
233
+ }
234
+ exports.QueuePointer = QueuePointer;
235
+ /* queue */
236
+ class Queue extends node_events_1.EventEmitter {
237
+ elements = [];
238
+ pointers = new Map();
239
+ constructor() {
240
+ super();
241
+ this.setMaxListeners(100);
242
+ }
243
+ pointerUse(name) {
244
+ if (!this.pointers.has(name))
245
+ this.pointers.set(name, new QueuePointer(name, this));
246
+ return this.pointers.get(name);
247
+ }
248
+ pointerDelete(name) {
249
+ if (!this.pointers.has(name))
250
+ throw new Error("pointer not exists");
251
+ this.pointers.delete(name);
252
+ }
253
+ trim() {
254
+ /* determine minimum pointer position */
255
+ let min = this.elements.length;
256
+ for (const pointer of this.pointers.values())
257
+ if (min > pointer.position())
258
+ min = pointer.position();
259
+ /* trim the maximum amount of first elements */
260
+ if (min > 0) {
261
+ this.elements.splice(0, min);
262
+ /* shift all pointers */
263
+ for (const pointer of this.pointers.values())
264
+ pointer.position(pointer.position() - min);
265
+ }
266
+ }
267
+ }
268
+ exports.Queue = Queue;
269
+ class TimeStore extends node_events_1.EventEmitter {
270
+ tree = new IntervalTree.IntervalTree();
271
+ store(start, end, item) {
272
+ this.tree.insert({ low: start.toMillis(), high: end.toMillis(), item });
273
+ }
274
+ fetch(start, end) {
275
+ const intervals = this.tree.search(start.toMillis(), end.toMillis());
276
+ return intervals.map((interval) => interval.item);
277
+ }
278
+ prune(_before) {
279
+ const before = _before.toMillis();
280
+ const intervals = this.tree.search(0, before - 1);
281
+ for (const interval of intervals)
282
+ if (interval.low < before && interval.high < before)
283
+ this.tree.remove(interval);
284
+ }
285
+ clear() {
286
+ this.tree = new IntervalTree.IntervalTree();
287
+ }
288
+ }
289
+ exports.TimeStore = TimeStore;
290
+ /* asynchronous queue */
291
+ class AsyncQueue {
292
+ queue = [];
293
+ resolvers = [];
294
+ write(v) {
295
+ const resolve = this.resolvers.shift();
296
+ if (resolve)
297
+ resolve(v);
298
+ else
299
+ this.queue.push(v);
300
+ }
301
+ async read() {
302
+ if (this.queue.length > 0)
303
+ return this.queue.shift();
304
+ else
305
+ return new Promise((resolve) => this.resolvers.push(resolve));
306
+ }
307
+ destroy() {
308
+ for (const resolve of this.resolvers)
309
+ resolve(null);
310
+ this.resolvers = [];
311
+ this.queue = [];
312
+ }
313
+ }
314
+ exports.AsyncQueue = AsyncQueue;
315
+ /* cached regular expression class */
316
+ class CachedRegExp {
317
+ cache = new Map();
318
+ compile(pattern) {
319
+ if (this.cache.has(pattern))
320
+ return this.cache.get(pattern);
321
+ try {
322
+ const regex = new RegExp(pattern);
323
+ this.cache.set(pattern, regex);
324
+ return regex;
325
+ }
326
+ catch (_error) {
327
+ return null;
328
+ }
329
+ }
330
+ clear() {
331
+ this.cache.clear();
332
+ }
333
+ size() {
334
+ return this.cache.size;
335
+ }
336
+ }
337
+ exports.CachedRegExp = CachedRegExp;
338
+ //# sourceMappingURL=speechflow-util-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-util-queue.js","sourceRoot":"","sources":["../src/speechflow-util-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import Stream from "node:stream";
2
+ import { DateTime } from "luxon";
3
+ import { SpeechFlowChunk } from "./speechflow-node";
4
+ export declare function createTransformStreamForWritableSide(): Stream.Transform;
5
+ export declare function createTransformStreamForReadableSide(type: "text" | "audio", getTimeZero: () => DateTime): Stream.Transform;
6
+ export declare function ensureStreamChunk(type: "audio" | "text", chunk: SpeechFlowChunk | Buffer | string): string | Buffer<ArrayBufferLike> | SpeechFlowChunk;
7
+ export declare function streamChunkEncode(chunk: SpeechFlowChunk): Uint8Array<ArrayBufferLike>;
8
+ export declare function streamChunkDecode(_data: Uint8Array): SpeechFlowChunk;
9
+ export declare class StreamWrapper extends Stream.Transform {
10
+ private foreignStream;
11
+ private onData;
12
+ private onError;
13
+ private onEnd;
14
+ constructor(foreignStream: any, options?: Stream.TransformOptions);
15
+ _transform(chunk: any, encoding: BufferEncoding, callback: Stream.TransformCallback): void;
16
+ _flush(callback: Stream.TransformCallback): void;
17
+ _destroy(error: Error | null, callback: Stream.TransformCallback): void;
18
+ }
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ /*
3
+ ** SpeechFlow - Speech Processing Flow Graph
4
+ ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
+ ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.StreamWrapper = void 0;
45
+ exports.createTransformStreamForWritableSide = createTransformStreamForWritableSide;
46
+ exports.createTransformStreamForReadableSide = createTransformStreamForReadableSide;
47
+ exports.ensureStreamChunk = ensureStreamChunk;
48
+ exports.streamChunkEncode = streamChunkEncode;
49
+ exports.streamChunkDecode = streamChunkDecode;
50
+ /* standard dependencies */
51
+ const node_stream_1 = __importDefault(require("node:stream"));
52
+ /* external dependencies */
53
+ const luxon_1 = require("luxon");
54
+ const CBOR = __importStar(require("cbor2"));
55
+ /* internal dependencies */
56
+ const speechflow_node_1 = require("./speechflow-node");
57
+ const util = __importStar(require("./speechflow-util"));
58
+ /* create a Duplex/Transform stream which has
59
+ object-mode on Writable side and buffer/string-mode on Readable side */
60
+ function createTransformStreamForWritableSide() {
61
+ return new node_stream_1.default.Transform({
62
+ readableObjectMode: true,
63
+ writableObjectMode: true,
64
+ decodeStrings: false,
65
+ highWaterMark: 1,
66
+ transform(chunk, encoding, callback) {
67
+ this.push(chunk.payload);
68
+ callback();
69
+ },
70
+ final(callback) {
71
+ this.push(null);
72
+ callback();
73
+ }
74
+ });
75
+ }
76
+ /* create a Duplex/Transform stream which has
77
+ object-mode on Readable side and buffer/string-mode on Writable side */
78
+ function createTransformStreamForReadableSide(type, getTimeZero) {
79
+ return new node_stream_1.default.Transform({
80
+ readableObjectMode: true,
81
+ writableObjectMode: true,
82
+ decodeStrings: false,
83
+ highWaterMark: (type === "audio" ? 19200 : 65536), /* audio: 400ms @ 48kHz/16bit/mono, text: 64KB */
84
+ transform(chunk, encoding, callback) {
85
+ if (chunk === null) {
86
+ this.push(null);
87
+ callback();
88
+ return;
89
+ }
90
+ const timeZero = getTimeZero();
91
+ const start = luxon_1.DateTime.now().diff(timeZero);
92
+ let end = start;
93
+ if (type === "audio") {
94
+ const duration = util.audioBufferDuration(chunk);
95
+ end = start.plus(duration * 1000);
96
+ }
97
+ const payload = ensureStreamChunk(type, chunk);
98
+ const obj = new speechflow_node_1.SpeechFlowChunk(start, end, "final", type, payload);
99
+ this.push(obj);
100
+ callback();
101
+ },
102
+ final(callback) {
103
+ this.push(null);
104
+ callback();
105
+ }
106
+ });
107
+ }
108
+ /* ensure a chunk is of a certain type and format */
109
+ function ensureStreamChunk(type, chunk) {
110
+ if (chunk instanceof speechflow_node_1.SpeechFlowChunk) {
111
+ if (chunk.type !== type)
112
+ throw new Error(`invalid payload chunk (expected ${type} type, received ${chunk.type} type)`);
113
+ }
114
+ else {
115
+ if (type === "text" && Buffer.isBuffer(chunk))
116
+ chunk = chunk.toString("utf8");
117
+ else if (type === "audio" && !Buffer.isBuffer(chunk))
118
+ chunk = Buffer.from(chunk);
119
+ }
120
+ return chunk;
121
+ }
122
+ /* encode/serialize chunk of data */
123
+ function streamChunkEncode(chunk) {
124
+ let payload;
125
+ if (Buffer.isBuffer(chunk.payload))
126
+ payload = new Uint8Array(chunk.payload);
127
+ else {
128
+ const encoder = new TextEncoder();
129
+ payload = encoder.encode(chunk.payload);
130
+ }
131
+ const data = {
132
+ timestampStart: chunk.timestampStart.toMillis(),
133
+ timestampEnd: chunk.timestampEnd.toMillis(),
134
+ kind: chunk.kind,
135
+ type: chunk.type,
136
+ payload
137
+ };
138
+ const _data = CBOR.encode(data);
139
+ return _data;
140
+ }
141
+ /* decode/unserialize chunk of data */
142
+ function streamChunkDecode(_data) {
143
+ let data;
144
+ try {
145
+ data = CBOR.decode(_data);
146
+ }
147
+ catch (err) {
148
+ throw util.ensureError(err, "CBOR decoding failed");
149
+ }
150
+ let payload;
151
+ if (data.type === "audio")
152
+ payload = Buffer.from(data.payload);
153
+ else
154
+ payload = (new TextDecoder()).decode(data.payload);
155
+ const chunk = new speechflow_node_1.SpeechFlowChunk(luxon_1.Duration.fromMillis(data.timestampStart), luxon_1.Duration.fromMillis(data.timestampEnd), data.kind, data.type, payload);
156
+ return chunk;
157
+ }
158
+ /* utility class for wrapping a custom stream into a regular Transform stream */
159
+ class StreamWrapper extends node_stream_1.default.Transform {
160
+ foreignStream;
161
+ onData = (chunk) => { this.push(chunk); };
162
+ onError = (err) => { this.emit("error", err); };
163
+ onEnd = () => { this.push(null); };
164
+ constructor(foreignStream, options = {}) {
165
+ options.readableObjectMode = true;
166
+ options.writableObjectMode = true;
167
+ super(options);
168
+ this.foreignStream = foreignStream;
169
+ if (typeof this.foreignStream.on === "function") {
170
+ this.foreignStream.on("data", this.onData);
171
+ this.foreignStream.on("error", this.onError);
172
+ this.foreignStream.on("end", this.onEnd);
173
+ }
174
+ }
175
+ _transform(chunk, encoding, callback) {
176
+ if (this.destroyed) {
177
+ callback(new Error("stream already destroyed"));
178
+ return;
179
+ }
180
+ try {
181
+ if (typeof this.foreignStream.write === "function") {
182
+ const canContinue = this.foreignStream.write(chunk);
183
+ if (canContinue)
184
+ callback();
185
+ else
186
+ this.foreignStream.once("drain", callback);
187
+ }
188
+ else
189
+ throw new Error("foreign stream lacks write method");
190
+ }
191
+ catch (err) {
192
+ callback(util.ensureError(err));
193
+ }
194
+ }
195
+ _flush(callback) {
196
+ if (this.destroyed) {
197
+ callback(new Error("stream already destroyed"));
198
+ return;
199
+ }
200
+ try {
201
+ if (typeof this.foreignStream.end === "function")
202
+ this.foreignStream.end();
203
+ callback();
204
+ }
205
+ catch (err) {
206
+ callback(util.ensureError(err));
207
+ }
208
+ }
209
+ _destroy(error, callback) {
210
+ if (typeof this.foreignStream.removeListener === "function") {
211
+ this.foreignStream.removeListener("data", this.onData);
212
+ this.foreignStream.removeListener("error", this.onError);
213
+ this.foreignStream.removeListener("end", this.onEnd);
214
+ }
215
+ super._destroy(error, callback);
216
+ }
217
+ }
218
+ exports.StreamWrapper = StreamWrapper;
219
+ //# sourceMappingURL=speechflow-util-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-util-stream.js","sourceRoot":"","sources":["../src/speechflow-util-stream.ts"],"names":[],"mappings":"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"}