@adviser/cement 0.1.11 → 0.1.13

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 (167) hide show
  1. package/base_sys_abstraction-BCdXJHNa.d.ts +21 -0
  2. package/base_sys_abstraction-BYZvxqsW.d.cts +21 -0
  3. package/chunk-J2IM7FHM.js +65 -0
  4. package/chunk-J2IM7FHM.js.map +1 -0
  5. package/chunk-MWAFFTM4.js +82 -0
  6. package/chunk-MWAFFTM4.js.map +1 -0
  7. package/chunk-PZTL4UNG.js +233 -0
  8. package/chunk-PZTL4UNG.js.map +1 -0
  9. package/index.cjs +986 -0
  10. package/index.cjs.map +1 -0
  11. package/index.d.cts +196 -0
  12. package/index.d.ts +196 -11
  13. package/index.js +610 -26
  14. package/index.js.map +1 -1
  15. package/node/index.cjs +436 -0
  16. package/node/index.cjs.map +1 -0
  17. package/node/index.d.cts +47 -0
  18. package/node/index.d.ts +47 -4
  19. package/node/index.js +215 -17
  20. package/node/index.js.map +1 -1
  21. package/package.json +34 -8
  22. package/sys_abstraction-CjljYIkv.d.cts +65 -0
  23. package/sys_abstraction-CjljYIkv.d.ts +65 -0
  24. package/utils/index.cjs +270 -0
  25. package/utils/index.cjs.map +1 -0
  26. package/utils/index.d.cts +33 -0
  27. package/utils/index.d.ts +33 -6
  28. package/utils/index.js +232 -20
  29. package/utils/index.js.map +1 -1
  30. package/web/index.cjs +286 -0
  31. package/web/index.cjs.map +1 -0
  32. package/web/index.d.cts +6 -0
  33. package/web/index.d.ts +6 -2
  34. package/web/index.js +7 -16
  35. package/web/index.js.map +1 -1
  36. package/base_sys_abstraction.d.ts +0 -79
  37. package/base_sys_abstraction.d.ts.map +0 -1
  38. package/base_sys_abstraction.js +0 -186
  39. package/base_sys_abstraction.js.map +0 -1
  40. package/base_sys_abstraction.test.d.ts +0 -2
  41. package/base_sys_abstraction.test.d.ts.map +0 -1
  42. package/base_sys_abstraction.test.js +0 -77
  43. package/base_sys_abstraction.test.js.map +0 -1
  44. package/file_service.d.ts +0 -18
  45. package/file_service.d.ts.map +0 -1
  46. package/file_service.js +0 -3
  47. package/file_service.js.map +0 -1
  48. package/future.d.ts +0 -8
  49. package/future.d.ts.map +0 -1
  50. package/future.js +0 -42
  51. package/future.js.map +0 -1
  52. package/future.test.d.ts +0 -2
  53. package/future.test.d.ts.map +0 -1
  54. package/future.test.js +0 -30
  55. package/future.test.js.map +0 -1
  56. package/index.d.ts.map +0 -1
  57. package/logger.d.ts +0 -36
  58. package/logger.d.ts.map +0 -1
  59. package/logger.js +0 -11
  60. package/logger.js.map +0 -1
  61. package/logger.test.d.ts +0 -2
  62. package/logger.test.d.ts.map +0 -1
  63. package/logger.test.js +0 -372
  64. package/logger.test.js.map +0 -1
  65. package/logger_impl.d.ts +0 -64
  66. package/logger_impl.d.ts.map +0 -1
  67. package/logger_impl.js +0 -331
  68. package/logger_impl.js.map +0 -1
  69. package/node/index.d.ts.map +0 -1
  70. package/node/mock_file_service.d.ts +0 -11
  71. package/node/mock_file_service.d.ts.map +0 -1
  72. package/node/mock_file_service.js +0 -38
  73. package/node/mock_file_service.js.map +0 -1
  74. package/node/mock_file_service.test.d.ts +0 -2
  75. package/node/mock_file_service.test.d.ts.map +0 -1
  76. package/node/mock_file_service.test.js +0 -19
  77. package/node/mock_file_service.test.js.map +0 -1
  78. package/node/node_file_service.d.ts +0 -16
  79. package/node/node_file_service.d.ts.map +0 -1
  80. package/node/node_file_service.js +0 -84
  81. package/node/node_file_service.js.map +0 -1
  82. package/node/node_sys_abstraction.d.ts +0 -21
  83. package/node/node_sys_abstraction.d.ts.map +0 -1
  84. package/node/node_sys_abstraction.js +0 -101
  85. package/node/node_sys_abstraction.js.map +0 -1
  86. package/node/node_sys_abstraction.test.d.ts +0 -2
  87. package/node/node_sys_abstraction.test.d.ts.map +0 -1
  88. package/node/node_sys_abstraction.test.js +0 -57
  89. package/node/node_sys_abstraction.test.js.map +0 -1
  90. package/option.d.ts +0 -25
  91. package/option.d.ts.map +0 -1
  92. package/option.js +0 -53
  93. package/option.js.map +0 -1
  94. package/result.d.ts +0 -31
  95. package/result.d.ts.map +0 -1
  96. package/result.js +0 -69
  97. package/result.js.map +0 -1
  98. package/result.test.d.ts +0 -2
  99. package/result.test.d.ts.map +0 -1
  100. package/result.test.js +0 -39
  101. package/result.test.js.map +0 -1
  102. package/sys_abstraction.d.ts +0 -35
  103. package/sys_abstraction.d.ts.map +0 -1
  104. package/sys_abstraction.js +0 -35
  105. package/sys_abstraction.js.map +0 -1
  106. package/test/log_collector.d.ts +0 -22
  107. package/test/log_collector.d.ts.map +0 -1
  108. package/test/log_collector.js +0 -66
  109. package/test/log_collector.js.map +0 -1
  110. package/test/mock_logger.d.ts +0 -13
  111. package/test/mock_logger.d.ts.map +0 -1
  112. package/test/mock_logger.js +0 -30
  113. package/test/mock_logger.js.map +0 -1
  114. package/test/mock_logger.test.d.ts +0 -2
  115. package/test/mock_logger.test.d.ts.map +0 -1
  116. package/test/mock_logger.test.js +0 -49
  117. package/test/mock_logger.test.js.map +0 -1
  118. package/test/test-exit-handler.d.ts +0 -1
  119. package/test/test-exit-handler.d.ts.map +0 -1
  120. package/test/test-exit-handler.js +0 -76
  121. package/test/test-exit-handler.js.map +0 -1
  122. package/time.d.ts +0 -13
  123. package/time.d.ts.map +0 -1
  124. package/time.js +0 -18
  125. package/time.js.map +0 -1
  126. package/utils/index.d.ts.map +0 -1
  127. package/utils/rebuffer.d.ts +0 -3
  128. package/utils/rebuffer.d.ts.map +0 -1
  129. package/utils/rebuffer.js +0 -65
  130. package/utils/rebuffer.js.map +0 -1
  131. package/utils/rebuffer.test.d.ts +0 -2
  132. package/utils/rebuffer.test.d.ts.map +0 -1
  133. package/utils/rebuffer.test.js +0 -79
  134. package/utils/rebuffer.test.js.map +0 -1
  135. package/utils/stream2string.d.ts +0 -3
  136. package/utils/stream2string.d.ts.map +0 -1
  137. package/utils/stream2string.js +0 -53
  138. package/utils/stream2string.js.map +0 -1
  139. package/utils/stream2string.test.d.ts +0 -2
  140. package/utils/stream2string.test.d.ts.map +0 -1
  141. package/utils/stream2string.test.js +0 -31
  142. package/utils/stream2string.test.js.map +0 -1
  143. package/utils/stream_map.d.ts +0 -9
  144. package/utils/stream_map.d.ts.map +0 -1
  145. package/utils/stream_map.js +0 -67
  146. package/utils/stream_map.js.map +0 -1
  147. package/utils/stream_map.test.d.ts +0 -2
  148. package/utils/stream_map.test.d.ts.map +0 -1
  149. package/utils/stream_map.test.js +0 -89
  150. package/utils/stream_map.test.js.map +0 -1
  151. package/utils/stream_test_helper.d.ts +0 -15
  152. package/utils/stream_test_helper.d.ts.map +0 -1
  153. package/utils/stream_test_helper.js +0 -42
  154. package/utils/stream_test_helper.js.map +0 -1
  155. package/utils/string2stream.d.ts +0 -3
  156. package/utils/string2stream.d.ts.map +0 -1
  157. package/utils/string2stream.js +0 -18
  158. package/utils/string2stream.js.map +0 -1
  159. package/utils/string2stream.test.d.ts +0 -2
  160. package/utils/string2stream.test.d.ts.map +0 -1
  161. package/utils/string2stream.test.js +0 -9
  162. package/utils/string2stream.test.js.map +0 -1
  163. package/web/index.d.ts.map +0 -1
  164. package/web/web_sys_abstraction.d.ts +0 -4
  165. package/web/web_sys_abstraction.d.ts.map +0 -1
  166. package/web/web_sys_abstraction.js +0 -65
  167. package/web/web_sys_abstraction.js.map +0 -1
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/utils/index.ts
21
+ var utils_exports = {};
22
+ __export(utils_exports, {
23
+ array2stream: () => array2stream,
24
+ devnull: () => devnull,
25
+ rebuffer: () => rebuffer,
26
+ rebufferArray: () => rebufferArray,
27
+ receiveFromStream: () => receiveFromStream,
28
+ sendToStream: () => sendToStream,
29
+ stream2array: () => stream2array,
30
+ stream2string: () => stream2string,
31
+ stream2uint8array: () => stream2uint8array,
32
+ streamMap: () => streamMap,
33
+ string2stream: () => string2stream,
34
+ uint8array2stream: () => uint8array2stream
35
+ });
36
+ module.exports = __toCommonJS(utils_exports);
37
+
38
+ // src/utils/stream_map.ts
39
+ function streamMap(s, sm) {
40
+ const state = { reader: s.getReader(), streamMap: sm, idx: 0 };
41
+ return new ReadableStream({
42
+ async pull(controller) {
43
+ const { done, value } = await state.reader.read();
44
+ if (done) {
45
+ state.streamMap.Close && state.streamMap.Close();
46
+ controller.close();
47
+ return;
48
+ }
49
+ const promiseOrU = state.streamMap.Map(value, state.idx++);
50
+ let mapped;
51
+ if (promiseOrU instanceof Promise || typeof promiseOrU.then === "function") {
52
+ mapped = await promiseOrU;
53
+ } else {
54
+ mapped = promiseOrU;
55
+ }
56
+ controller.enqueue(mapped);
57
+ }
58
+ });
59
+ }
60
+ async function devnull(a) {
61
+ const reader = a.getReader();
62
+ let cnt = 0;
63
+ while (true) {
64
+ const { done } = await reader.read();
65
+ if (done) {
66
+ break;
67
+ }
68
+ cnt++;
69
+ }
70
+ return cnt;
71
+ }
72
+ function array2stream(a) {
73
+ let i = 0;
74
+ return new ReadableStream({
75
+ pull(controller) {
76
+ if (i >= a.length) {
77
+ controller.close();
78
+ return;
79
+ }
80
+ controller.enqueue(a[i]);
81
+ i++;
82
+ }
83
+ });
84
+ }
85
+ async function stream2array(a) {
86
+ const ret = [];
87
+ const reader = a.getReader();
88
+ while (true) {
89
+ const { done, value } = await reader.read();
90
+ if (done) {
91
+ break;
92
+ }
93
+ ret.push(value);
94
+ }
95
+ return ret;
96
+ }
97
+
98
+ // src/utils/rebuffer.ts
99
+ async function rebufferArray(a, chunkSize) {
100
+ return stream2array(rebuffer(array2stream(a), chunkSize));
101
+ }
102
+ function reChunk(cs, chunkSize) {
103
+ const len = cs.reduce((acc, v) => acc + v.length, 0);
104
+ const last = cs[cs.length - 1];
105
+ const lastOfs = len - last.length;
106
+ const rest = last.subarray(chunkSize - lastOfs);
107
+ cs[cs.length - 1] = last.subarray(0, chunkSize - lastOfs);
108
+ const chunk = new Uint8Array(chunkSize);
109
+ let ofs = 0;
110
+ for (const c of cs) {
111
+ chunk.set(c, ofs);
112
+ ofs += c.length;
113
+ }
114
+ return { rest, chunk };
115
+ }
116
+ function pump(ps, controller, next) {
117
+ ps.reader.read().then(({ done, value }) => {
118
+ if (done) {
119
+ if (ps.tmpLen > 0) {
120
+ controller.enqueue(reChunk(ps.tmp, ps.tmpLen).chunk);
121
+ }
122
+ controller.close();
123
+ next();
124
+ return;
125
+ }
126
+ if (ps.tmpLen + value.length > ps.chunkSize) {
127
+ ps.tmp.push(value);
128
+ const res = reChunk(ps.tmp, ps.chunkSize);
129
+ controller.enqueue(res.chunk);
130
+ ps.tmp = [res.rest];
131
+ ps.tmpLen = res.rest.length;
132
+ next();
133
+ return;
134
+ } else if (value.length) {
135
+ ps.tmp.push(value);
136
+ ps.tmpLen += value.length;
137
+ }
138
+ pump(ps, controller, next);
139
+ });
140
+ }
141
+ function rebuffer(a, chunkSize) {
142
+ const state = {
143
+ reader: a.getReader(),
144
+ tmp: [],
145
+ tmpLen: 0,
146
+ chunkSize
147
+ };
148
+ return new ReadableStream({
149
+ async pull(controller) {
150
+ return new Promise((resolve) => {
151
+ pump(state, controller, resolve);
152
+ });
153
+ }
154
+ });
155
+ }
156
+
157
+ // src/utils/stream2string.ts
158
+ async function stream2string(stream, maxSize) {
159
+ if (!stream) {
160
+ return Promise.resolve("");
161
+ }
162
+ const reader = stream.getReader();
163
+ let res = "";
164
+ const decoder = new TextDecoder();
165
+ let rSize = 0;
166
+ while (typeof maxSize === "undefined" || rSize < maxSize) {
167
+ try {
168
+ const read = await reader.read();
169
+ if (read.done) {
170
+ break;
171
+ }
172
+ if (maxSize && rSize + read.value.length > maxSize) {
173
+ read.value = read.value.slice(0, maxSize - rSize);
174
+ }
175
+ const block = decoder.decode(read.value, { stream: true });
176
+ rSize += read.value.length;
177
+ res += block;
178
+ } catch (err) {
179
+ return Promise.reject(err);
180
+ }
181
+ }
182
+ return Promise.resolve(res);
183
+ }
184
+ async function stream2uint8array(stream) {
185
+ if (!stream) {
186
+ return Promise.resolve(new Uint8Array());
187
+ }
188
+ const reader = stream.getReader();
189
+ let res = new Uint8Array();
190
+ while (1) {
191
+ try {
192
+ const { done, value } = await reader.read();
193
+ if (done) {
194
+ break;
195
+ }
196
+ res = new Uint8Array([...res, ...value]);
197
+ } catch (err) {
198
+ return Promise.reject(err);
199
+ }
200
+ }
201
+ return Promise.resolve(res);
202
+ }
203
+
204
+ // src/utils/stream_test_helper.ts
205
+ async function receiveFromStream(reb, state) {
206
+ return new Promise((resolve) => {
207
+ let reBufferCalls = 0;
208
+ const reader = reb.getReader();
209
+ function pump2() {
210
+ reader.read().then(({ done, value }) => {
211
+ state.CollectorFn({ done, value, fillCalls: state.fillCalls, reBufferCalls });
212
+ reBufferCalls++;
213
+ if (done) {
214
+ resolve();
215
+ return;
216
+ }
217
+ pump2();
218
+ });
219
+ }
220
+ pump2();
221
+ });
222
+ }
223
+ async function sendToStream(reb, state) {
224
+ return new Promise((resolve) => {
225
+ const writer = reb.getWriter();
226
+ function pump2(i) {
227
+ if (i >= state.sendChunks) {
228
+ writer.close();
229
+ resolve();
230
+ return;
231
+ }
232
+ writer.ready.then(() => {
233
+ state.fillCalls++;
234
+ writer.write(new Uint8Array(Array(state.sendChunkSize).fill(i)));
235
+ pump2(i + 1);
236
+ });
237
+ }
238
+ pump2(0);
239
+ });
240
+ }
241
+
242
+ // src/utils/string2stream.ts
243
+ function string2stream(str) {
244
+ const encoder = new TextEncoder();
245
+ return uint8array2stream(encoder.encode(str));
246
+ }
247
+ function uint8array2stream(str) {
248
+ return new ReadableStream({
249
+ start(controller) {
250
+ controller.enqueue(str);
251
+ controller.close();
252
+ }
253
+ });
254
+ }
255
+ // Annotate the CommonJS export names for ESM import in node:
256
+ 0 && (module.exports = {
257
+ array2stream,
258
+ devnull,
259
+ rebuffer,
260
+ rebufferArray,
261
+ receiveFromStream,
262
+ sendToStream,
263
+ stream2array,
264
+ stream2string,
265
+ stream2uint8array,
266
+ streamMap,
267
+ string2stream,
268
+ uint8array2stream
269
+ });
270
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/index.ts","../../../src/utils/stream_map.ts","../../../src/utils/rebuffer.ts","../../../src/utils/stream2string.ts","../../../src/utils/stream_test_helper.ts","../../../src/utils/string2stream.ts"],"sourcesContent":["export * from \"./rebuffer\";\nexport * from \"./stream_map\";\nexport * from \"./stream2string\";\nexport * from \"./stream_test_helper\";\nexport * from \"./string2stream\";\n","export interface StreamMap<T, U> {\n Map(s: T, idx: number): U | Promise<U>;\n readonly Close?: () => void;\n}\nexport function streamMap<T, U>(s: ReadableStream<T>, sm: StreamMap<T, U>): ReadableStream<U> {\n const state = { reader: s.getReader(), streamMap: sm, idx: 0 };\n return new ReadableStream<U>({\n async pull(controller) {\n const { done, value } = await state.reader.read();\n if (done) {\n state.streamMap.Close && state.streamMap.Close();\n controller.close();\n return;\n }\n const promiseOrU = state.streamMap.Map(value, state.idx++);\n let mapped: U;\n if (promiseOrU instanceof Promise || typeof (promiseOrU as { then: () => void }).then === \"function\") {\n mapped = await promiseOrU;\n } else {\n mapped = promiseOrU;\n }\n controller.enqueue(mapped);\n },\n });\n}\n\nexport async function devnull<T>(a: ReadableStream<T>): Promise<number> {\n const reader = a.getReader();\n let cnt = 0;\n while (true) {\n const { done } = await reader.read();\n if (done) {\n break;\n }\n cnt++;\n }\n return cnt;\n}\n\nexport function array2stream<T>(a: T[]): ReadableStream<T> {\n let i = 0;\n return new ReadableStream<T>({\n pull(controller) {\n if (i >= a.length) {\n controller.close();\n return;\n }\n controller.enqueue(a[i]);\n i++;\n },\n });\n}\n\nexport async function stream2array<T>(a: ReadableStream<T>): Promise<T[]> {\n const ret: T[] = [];\n const reader = a.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n ret.push(value);\n }\n return ret;\n}\n","import { array2stream, stream2array } from \"./stream_map\";\n\ninterface ReChunkResult {\n readonly rest: Uint8Array;\n readonly chunk: Uint8Array;\n}\n\nexport async function rebufferArray(a: Uint8Array[], chunkSize: number): Promise<Uint8Array[]> {\n return stream2array(rebuffer(array2stream(a), chunkSize));\n}\n\nfunction reChunk(cs: Uint8Array[], chunkSize: number): ReChunkResult {\n const len = cs.reduce((acc, v) => acc + v.length, 0);\n const last = cs[cs.length - 1];\n const lastOfs = len - last.length;\n // console.log(\"reChunk\", len, lastOfs, last.length, chunkSize, chunkSize - lastOfs)\n const rest = last.subarray(chunkSize - lastOfs);\n cs[cs.length - 1] = last.subarray(0, chunkSize - lastOfs);\n const chunk = new Uint8Array(chunkSize);\n let ofs = 0;\n for (const c of cs) {\n chunk.set(c, ofs);\n ofs += c.length;\n }\n return { rest, chunk };\n}\n\ninterface pumpState {\n readonly reader: ReadableStreamDefaultReader<Uint8Array>;\n tmp: Uint8Array[];\n tmpLen: number;\n readonly chunkSize: number;\n}\n\nfunction pump(ps: pumpState, controller: ReadableStreamDefaultController<Uint8Array>, next: () => void): void {\n ps.reader.read().then(({ done, value }) => {\n if (done) {\n if (ps.tmpLen > 0) {\n controller.enqueue(reChunk(ps.tmp, ps.tmpLen).chunk);\n }\n controller.close();\n next();\n return;\n }\n if (ps.tmpLen + value.length > ps.chunkSize) {\n ps.tmp.push(value);\n const res = reChunk(ps.tmp, ps.chunkSize);\n controller.enqueue(res.chunk);\n ps.tmp = [res.rest];\n ps.tmpLen = res.rest.length;\n next();\n return;\n } else if (value.length) {\n ps.tmp.push(value);\n ps.tmpLen += value.length;\n }\n pump(ps, controller, next);\n });\n}\n\nexport function rebuffer(a: ReadableStream<Uint8Array>, chunkSize: number): ReadableStream<Uint8Array> {\n const state: pumpState = {\n reader: a.getReader(),\n tmp: [],\n tmpLen: 0,\n chunkSize,\n };\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n return new Promise<void>((resolve) => {\n pump(state, controller, resolve);\n });\n },\n });\n}\n","export async function stream2string(stream?: ReadableStream<Uint8Array> | null, maxSize?: number): Promise<string> {\n if (!stream) {\n return Promise.resolve(\"\");\n }\n const reader = stream.getReader();\n let res = \"\";\n const decoder = new TextDecoder();\n let rSize = 0;\n while (typeof maxSize === \"undefined\" || rSize < maxSize) {\n try {\n const read = await reader.read();\n if (read.done) {\n break;\n }\n if (maxSize && rSize + read.value.length > maxSize) {\n read.value = read.value.slice(0, maxSize - rSize);\n }\n const block = decoder.decode(read.value, { stream: true });\n rSize += read.value.length;\n res += block;\n } catch (err) {\n return Promise.reject(err);\n }\n }\n return Promise.resolve(res);\n}\n\nexport async function stream2uint8array(stream?: ReadableStream<Uint8Array> | null): Promise<Uint8Array> {\n if (!stream) {\n return Promise.resolve(new Uint8Array());\n }\n const reader = stream.getReader();\n let res = new Uint8Array();\n // eslint-disable-next-line no-constant-condition\n while (1) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n res = new Uint8Array([...res, ...value]);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n return Promise.resolve(res);\n}\n","export interface streamingTestState {\n readonly sendChunks: number;\n readonly sendChunkSize: number;\n fillCalls: number;\n CollectorFn: jest.Mock<void, [{ done: boolean; value: Uint8Array | undefined; fillCalls: number; reBufferCalls: number }]>;\n}\n\nexport async function receiveFromStream(reb: ReadableStream<Uint8Array>, state: streamingTestState) {\n return new Promise<void>((resolve) => {\n let reBufferCalls = 0;\n const reader = reb.getReader();\n function pump() {\n reader.read().then(({ done, value }) => {\n state.CollectorFn({ done, value, fillCalls: state.fillCalls, reBufferCalls });\n reBufferCalls++;\n if (done) {\n resolve();\n return;\n }\n pump();\n });\n }\n pump();\n });\n}\n\nexport async function sendToStream(reb: WritableStream<Uint8Array>, state: streamingTestState) {\n return new Promise<void>((resolve) => {\n const writer = reb.getWriter();\n function pump(i: number) {\n if (i >= state.sendChunks) {\n writer.close();\n resolve();\n return;\n }\n writer.ready.then(() => {\n state.fillCalls++;\n writer.write(new Uint8Array(Array(state.sendChunkSize).fill(i)));\n pump(i + 1);\n });\n }\n pump(0);\n });\n}\n\n// it(\"does nothing\", () => {});\n","export function string2stream(str: string): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n return uint8array2stream(encoder.encode(str));\n}\n\nexport function uint8array2stream(str: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(str);\n controller.close();\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACIO,SAAS,UAAgB,GAAsB,IAAwC;AAC5F,QAAM,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,WAAW,IAAI,KAAK,EAAE;AAC7D,SAAO,IAAI,eAAkB;AAAA,IAC3B,MAAM,KAAK,YAAY;AACrB,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,OAAO,KAAK;AAChD,UAAI,MAAM;AACR,cAAM,UAAU,SAAS,MAAM,UAAU,MAAM;AAC/C,mBAAW,MAAM;AACjB;AAAA,MACF;AACA,YAAM,aAAa,MAAM,UAAU,IAAI,OAAO,MAAM,KAAK;AACzD,UAAI;AACJ,UAAI,sBAAsB,WAAW,OAAQ,WAAoC,SAAS,YAAY;AACpG,iBAAS,MAAM;AAAA,MACjB,OAAO;AACL,iBAAS;AAAA,MACX;AACA,iBAAW,QAAQ,MAAM;AAAA,IAC3B;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,QAAW,GAAuC;AACtE,QAAM,SAAS,EAAE,UAAU;AAC3B,MAAI,MAAM;AACV,SAAO,MAAM;AACX,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,KAAK;AACnC,QAAI,MAAM;AACR;AAAA,IACF;AACA;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,aAAgB,GAA2B;AACzD,MAAI,IAAI;AACR,SAAO,IAAI,eAAkB;AAAA,IAC3B,KAAK,YAAY;AACf,UAAI,KAAK,EAAE,QAAQ;AACjB,mBAAW,MAAM;AACjB;AAAA,MACF;AACA,iBAAW,QAAQ,EAAE,CAAC,CAAC;AACvB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,aAAgB,GAAoC;AACxE,QAAM,MAAW,CAAC;AAClB,QAAM,SAAS,EAAE,UAAU;AAC3B,SAAO,MAAM;AACX,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,QAAI,MAAM;AACR;AAAA,IACF;AACA,QAAI,KAAK,KAAK;AAAA,EAChB;AACA,SAAO;AACT;;;ACzDA,eAAsB,cAAc,GAAiB,WAA0C;AAC7F,SAAO,aAAa,SAAS,aAAa,CAAC,GAAG,SAAS,CAAC;AAC1D;AAEA,SAAS,QAAQ,IAAkB,WAAkC;AACnE,QAAM,MAAM,GAAG,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;AACnD,QAAM,OAAO,GAAG,GAAG,SAAS,CAAC;AAC7B,QAAM,UAAU,MAAM,KAAK;AAE3B,QAAM,OAAO,KAAK,SAAS,YAAY,OAAO;AAC9C,KAAG,GAAG,SAAS,CAAC,IAAI,KAAK,SAAS,GAAG,YAAY,OAAO;AACxD,QAAM,QAAQ,IAAI,WAAW,SAAS;AACtC,MAAI,MAAM;AACV,aAAW,KAAK,IAAI;AAClB,UAAM,IAAI,GAAG,GAAG;AAChB,WAAO,EAAE;AAAA,EACX;AACA,SAAO,EAAE,MAAM,MAAM;AACvB;AASA,SAAS,KAAK,IAAe,YAAyD,MAAwB;AAC5G,KAAG,OAAO,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,MAAM;AACzC,QAAI,MAAM;AACR,UAAI,GAAG,SAAS,GAAG;AACjB,mBAAW,QAAQ,QAAQ,GAAG,KAAK,GAAG,MAAM,EAAE,KAAK;AAAA,MACrD;AACA,iBAAW,MAAM;AACjB,WAAK;AACL;AAAA,IACF;AACA,QAAI,GAAG,SAAS,MAAM,SAAS,GAAG,WAAW;AAC3C,SAAG,IAAI,KAAK,KAAK;AACjB,YAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,SAAS;AACxC,iBAAW,QAAQ,IAAI,KAAK;AAC5B,SAAG,MAAM,CAAC,IAAI,IAAI;AAClB,SAAG,SAAS,IAAI,KAAK;AACrB,WAAK;AACL;AAAA,IACF,WAAW,MAAM,QAAQ;AACvB,SAAG,IAAI,KAAK,KAAK;AACjB,SAAG,UAAU,MAAM;AAAA,IACrB;AACA,SAAK,IAAI,YAAY,IAAI;AAAA,EAC3B,CAAC;AACH;AAEO,SAAS,SAAS,GAA+B,WAA+C;AACrG,QAAM,QAAmB;AAAA,IACvB,QAAQ,EAAE,UAAU;AAAA,IACpB,KAAK,CAAC;AAAA,IACN,QAAQ;AAAA,IACR;AAAA,EACF;AACA,SAAO,IAAI,eAA2B;AAAA,IACpC,MAAM,KAAK,YAAY;AACrB,aAAO,IAAI,QAAc,CAAC,YAAY;AACpC,aAAK,OAAO,YAAY,OAAO;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AC1EA,eAAsB,cAAc,QAA4C,SAAmC;AACjH,MAAI,CAAC,QAAQ;AACX,WAAO,QAAQ,QAAQ,EAAE;AAAA,EAC3B;AACA,QAAM,SAAS,OAAO,UAAU;AAChC,MAAI,MAAM;AACV,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,QAAQ;AACZ,SAAO,OAAO,YAAY,eAAe,QAAQ,SAAS;AACxD,QAAI;AACF,YAAM,OAAO,MAAM,OAAO,KAAK;AAC/B,UAAI,KAAK,MAAM;AACb;AAAA,MACF;AACA,UAAI,WAAW,QAAQ,KAAK,MAAM,SAAS,SAAS;AAClD,aAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,UAAU,KAAK;AAAA,MAClD;AACA,YAAM,QAAQ,QAAQ,OAAO,KAAK,OAAO,EAAE,QAAQ,KAAK,CAAC;AACzD,eAAS,KAAK,MAAM;AACpB,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,aAAO,QAAQ,OAAO,GAAG;AAAA,IAC3B;AAAA,EACF;AACA,SAAO,QAAQ,QAAQ,GAAG;AAC5B;AAEA,eAAsB,kBAAkB,QAAiE;AACvG,MAAI,CAAC,QAAQ;AACX,WAAO,QAAQ,QAAQ,IAAI,WAAW,CAAC;AAAA,EACzC;AACA,QAAM,SAAS,OAAO,UAAU;AAChC,MAAI,MAAM,IAAI,WAAW;AAEzB,SAAO,GAAG;AACR,QAAI;AACF,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,MAAM;AACR;AAAA,MACF;AACA,YAAM,IAAI,WAAW,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;AAAA,IACzC,SAAS,KAAK;AACZ,aAAO,QAAQ,OAAO,GAAG;AAAA,IAC3B;AAAA,EACF;AACA,SAAO,QAAQ,QAAQ,GAAG;AAC5B;;;ACvCA,eAAsB,kBAAkB,KAAiC,OAA2B;AAClG,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,QAAI,gBAAgB;AACpB,UAAM,SAAS,IAAI,UAAU;AAC7B,aAASA,QAAO;AACd,aAAO,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,MAAM;AACtC,cAAM,YAAY,EAAE,MAAM,OAAO,WAAW,MAAM,WAAW,cAAc,CAAC;AAC5E;AACA,YAAI,MAAM;AACR,kBAAQ;AACR;AAAA,QACF;AACA,QAAAA,MAAK;AAAA,MACP,CAAC;AAAA,IACH;AACA,IAAAA,MAAK;AAAA,EACP,CAAC;AACH;AAEA,eAAsB,aAAa,KAAiC,OAA2B;AAC7F,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,UAAM,SAAS,IAAI,UAAU;AAC7B,aAASA,MAAK,GAAW;AACvB,UAAI,KAAK,MAAM,YAAY;AACzB,eAAO,MAAM;AACb,gBAAQ;AACR;AAAA,MACF;AACA,aAAO,MAAM,KAAK,MAAM;AACtB,cAAM;AACN,eAAO,MAAM,IAAI,WAAW,MAAM,MAAM,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/D,QAAAA,MAAK,IAAI,CAAC;AAAA,MACZ,CAAC;AAAA,IACH;AACA,IAAAA,MAAK,CAAC;AAAA,EACR,CAAC;AACH;;;AC3CO,SAAS,cAAc,KAAyC;AACrE,QAAM,UAAU,IAAI,YAAY;AAChC,SAAO,kBAAkB,QAAQ,OAAO,GAAG,CAAC;AAC9C;AAEO,SAAS,kBAAkB,KAA6C;AAC7E,SAAO,IAAI,eAA2B;AAAA,IACpC,MAAM,YAAY;AAChB,iBAAW,QAAQ,GAAG;AACtB,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,CAAC;AACH;","names":["pump"]}
@@ -0,0 +1,33 @@
1
+ declare function rebufferArray(a: Uint8Array[], chunkSize: number): Promise<Uint8Array[]>;
2
+ declare function rebuffer(a: ReadableStream<Uint8Array>, chunkSize: number): ReadableStream<Uint8Array>;
3
+
4
+ interface StreamMap<T, U> {
5
+ Map(s: T, idx: number): U | Promise<U>;
6
+ readonly Close?: () => void;
7
+ }
8
+ declare function streamMap<T, U>(s: ReadableStream<T>, sm: StreamMap<T, U>): ReadableStream<U>;
9
+ declare function devnull<T>(a: ReadableStream<T>): Promise<number>;
10
+ declare function array2stream<T>(a: T[]): ReadableStream<T>;
11
+ declare function stream2array<T>(a: ReadableStream<T>): Promise<T[]>;
12
+
13
+ declare function stream2string(stream?: ReadableStream<Uint8Array> | null, maxSize?: number): Promise<string>;
14
+ declare function stream2uint8array(stream?: ReadableStream<Uint8Array> | null): Promise<Uint8Array>;
15
+
16
+ interface streamingTestState {
17
+ readonly sendChunks: number;
18
+ readonly sendChunkSize: number;
19
+ fillCalls: number;
20
+ CollectorFn: jest.Mock<void, [{
21
+ done: boolean;
22
+ value: Uint8Array | undefined;
23
+ fillCalls: number;
24
+ reBufferCalls: number;
25
+ }]>;
26
+ }
27
+ declare function receiveFromStream(reb: ReadableStream<Uint8Array>, state: streamingTestState): Promise<void>;
28
+ declare function sendToStream(reb: WritableStream<Uint8Array>, state: streamingTestState): Promise<void>;
29
+
30
+ declare function string2stream(str: string): ReadableStream<Uint8Array>;
31
+ declare function uint8array2stream(str: Uint8Array): ReadableStream<Uint8Array>;
32
+
33
+ export { type StreamMap, array2stream, devnull, rebuffer, rebufferArray, receiveFromStream, sendToStream, stream2array, stream2string, stream2uint8array, streamMap, type streamingTestState, string2stream, uint8array2stream };
package/utils/index.d.ts CHANGED
@@ -1,6 +1,33 @@
1
- export * from "./rebuffer";
2
- export * from "./stream_map";
3
- export * from "./stream2string";
4
- export * from "./stream_test_helper";
5
- export * from "./string2stream";
6
- //# sourceMappingURL=index.d.ts.map
1
+ declare function rebufferArray(a: Uint8Array[], chunkSize: number): Promise<Uint8Array[]>;
2
+ declare function rebuffer(a: ReadableStream<Uint8Array>, chunkSize: number): ReadableStream<Uint8Array>;
3
+
4
+ interface StreamMap<T, U> {
5
+ Map(s: T, idx: number): U | Promise<U>;
6
+ readonly Close?: () => void;
7
+ }
8
+ declare function streamMap<T, U>(s: ReadableStream<T>, sm: StreamMap<T, U>): ReadableStream<U>;
9
+ declare function devnull<T>(a: ReadableStream<T>): Promise<number>;
10
+ declare function array2stream<T>(a: T[]): ReadableStream<T>;
11
+ declare function stream2array<T>(a: ReadableStream<T>): Promise<T[]>;
12
+
13
+ declare function stream2string(stream?: ReadableStream<Uint8Array> | null, maxSize?: number): Promise<string>;
14
+ declare function stream2uint8array(stream?: ReadableStream<Uint8Array> | null): Promise<Uint8Array>;
15
+
16
+ interface streamingTestState {
17
+ readonly sendChunks: number;
18
+ readonly sendChunkSize: number;
19
+ fillCalls: number;
20
+ CollectorFn: jest.Mock<void, [{
21
+ done: boolean;
22
+ value: Uint8Array | undefined;
23
+ fillCalls: number;
24
+ reBufferCalls: number;
25
+ }]>;
26
+ }
27
+ declare function receiveFromStream(reb: ReadableStream<Uint8Array>, state: streamingTestState): Promise<void>;
28
+ declare function sendToStream(reb: WritableStream<Uint8Array>, state: streamingTestState): Promise<void>;
29
+
30
+ declare function string2stream(str: string): ReadableStream<Uint8Array>;
31
+ declare function uint8array2stream(str: Uint8Array): ReadableStream<Uint8Array>;
32
+
33
+ export { type StreamMap, array2stream, devnull, rebuffer, rebufferArray, receiveFromStream, sendToStream, stream2array, stream2string, stream2uint8array, streamMap, type streamingTestState, string2stream, uint8array2stream };
package/utils/index.js CHANGED
@@ -1,22 +1,234 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1
+ import "../chunk-J2IM7FHM.js";
2
+
3
+ // src/utils/stream_map.ts
4
+ function streamMap(s, sm) {
5
+ const state = { reader: s.getReader(), streamMap: sm, idx: 0 };
6
+ return new ReadableStream({
7
+ async pull(controller) {
8
+ const { done, value } = await state.reader.read();
9
+ if (done) {
10
+ state.streamMap.Close && state.streamMap.Close();
11
+ controller.close();
12
+ return;
13
+ }
14
+ const promiseOrU = state.streamMap.Map(value, state.idx++);
15
+ let mapped;
16
+ if (promiseOrU instanceof Promise || typeof promiseOrU.then === "function") {
17
+ mapped = await promiseOrU;
18
+ } else {
19
+ mapped = promiseOrU;
20
+ }
21
+ controller.enqueue(mapped);
22
+ }
23
+ });
24
+ }
25
+ async function devnull(a) {
26
+ const reader = a.getReader();
27
+ let cnt = 0;
28
+ while (true) {
29
+ const { done } = await reader.read();
30
+ if (done) {
31
+ break;
32
+ }
33
+ cnt++;
34
+ }
35
+ return cnt;
36
+ }
37
+ function array2stream(a) {
38
+ let i = 0;
39
+ return new ReadableStream({
40
+ pull(controller) {
41
+ if (i >= a.length) {
42
+ controller.close();
43
+ return;
44
+ }
45
+ controller.enqueue(a[i]);
46
+ i++;
47
+ }
48
+ });
49
+ }
50
+ async function stream2array(a) {
51
+ const ret = [];
52
+ const reader = a.getReader();
53
+ while (true) {
54
+ const { done, value } = await reader.read();
55
+ if (done) {
56
+ break;
57
+ }
58
+ ret.push(value);
59
+ }
60
+ return ret;
61
+ }
62
+
63
+ // src/utils/rebuffer.ts
64
+ async function rebufferArray(a, chunkSize) {
65
+ return stream2array(rebuffer(array2stream(a), chunkSize));
66
+ }
67
+ function reChunk(cs, chunkSize) {
68
+ const len = cs.reduce((acc, v) => acc + v.length, 0);
69
+ const last = cs[cs.length - 1];
70
+ const lastOfs = len - last.length;
71
+ const rest = last.subarray(chunkSize - lastOfs);
72
+ cs[cs.length - 1] = last.subarray(0, chunkSize - lastOfs);
73
+ const chunk = new Uint8Array(chunkSize);
74
+ let ofs = 0;
75
+ for (const c of cs) {
76
+ chunk.set(c, ofs);
77
+ ofs += c.length;
78
+ }
79
+ return { rest, chunk };
80
+ }
81
+ function pump(ps, controller, next) {
82
+ ps.reader.read().then(({ done, value }) => {
83
+ if (done) {
84
+ if (ps.tmpLen > 0) {
85
+ controller.enqueue(reChunk(ps.tmp, ps.tmpLen).chunk);
86
+ }
87
+ controller.close();
88
+ next();
89
+ return;
90
+ }
91
+ if (ps.tmpLen + value.length > ps.chunkSize) {
92
+ ps.tmp.push(value);
93
+ const res = reChunk(ps.tmp, ps.chunkSize);
94
+ controller.enqueue(res.chunk);
95
+ ps.tmp = [res.rest];
96
+ ps.tmpLen = res.rest.length;
97
+ next();
98
+ return;
99
+ } else if (value.length) {
100
+ ps.tmp.push(value);
101
+ ps.tmpLen += value.length;
102
+ }
103
+ pump(ps, controller, next);
104
+ });
105
+ }
106
+ function rebuffer(a, chunkSize) {
107
+ const state = {
108
+ reader: a.getReader(),
109
+ tmp: [],
110
+ tmpLen: 0,
111
+ chunkSize
112
+ };
113
+ return new ReadableStream({
114
+ async pull(controller) {
115
+ return new Promise((resolve) => {
116
+ pump(state, controller, resolve);
117
+ });
118
+ }
119
+ });
120
+ }
121
+
122
+ // src/utils/stream2string.ts
123
+ async function stream2string(stream, maxSize) {
124
+ if (!stream) {
125
+ return Promise.resolve("");
126
+ }
127
+ const reader = stream.getReader();
128
+ let res = "";
129
+ const decoder = new TextDecoder();
130
+ let rSize = 0;
131
+ while (typeof maxSize === "undefined" || rSize < maxSize) {
132
+ try {
133
+ const read = await reader.read();
134
+ if (read.done) {
135
+ break;
136
+ }
137
+ if (maxSize && rSize + read.value.length > maxSize) {
138
+ read.value = read.value.slice(0, maxSize - rSize);
139
+ }
140
+ const block = decoder.decode(read.value, { stream: true });
141
+ rSize += read.value.length;
142
+ res += block;
143
+ } catch (err) {
144
+ return Promise.reject(err);
145
+ }
146
+ }
147
+ return Promise.resolve(res);
148
+ }
149
+ async function stream2uint8array(stream) {
150
+ if (!stream) {
151
+ return Promise.resolve(new Uint8Array());
152
+ }
153
+ const reader = stream.getReader();
154
+ let res = new Uint8Array();
155
+ while (1) {
156
+ try {
157
+ const { done, value } = await reader.read();
158
+ if (done) {
159
+ break;
160
+ }
161
+ res = new Uint8Array([...res, ...value]);
162
+ } catch (err) {
163
+ return Promise.reject(err);
164
+ }
165
+ }
166
+ return Promise.resolve(res);
167
+ }
168
+
169
+ // src/utils/stream_test_helper.ts
170
+ async function receiveFromStream(reb, state) {
171
+ return new Promise((resolve) => {
172
+ let reBufferCalls = 0;
173
+ const reader = reb.getReader();
174
+ function pump2() {
175
+ reader.read().then(({ done, value }) => {
176
+ state.CollectorFn({ done, value, fillCalls: state.fillCalls, reBufferCalls });
177
+ reBufferCalls++;
178
+ if (done) {
179
+ resolve();
180
+ return;
181
+ }
182
+ pump2();
183
+ });
184
+ }
185
+ pump2();
186
+ });
187
+ }
188
+ async function sendToStream(reb, state) {
189
+ return new Promise((resolve) => {
190
+ const writer = reb.getWriter();
191
+ function pump2(i) {
192
+ if (i >= state.sendChunks) {
193
+ writer.close();
194
+ resolve();
195
+ return;
196
+ }
197
+ writer.ready.then(() => {
198
+ state.fillCalls++;
199
+ writer.write(new Uint8Array(Array(state.sendChunkSize).fill(i)));
200
+ pump2(i + 1);
201
+ });
202
+ }
203
+ pump2(0);
204
+ });
205
+ }
206
+
207
+ // src/utils/string2stream.ts
208
+ function string2stream(str) {
209
+ const encoder = new TextEncoder();
210
+ return uint8array2stream(encoder.encode(str));
211
+ }
212
+ function uint8array2stream(str) {
213
+ return new ReadableStream({
214
+ start(controller) {
215
+ controller.enqueue(str);
216
+ controller.close();
217
+ }
218
+ });
219
+ }
220
+ export {
221
+ array2stream,
222
+ devnull,
223
+ rebuffer,
224
+ rebufferArray,
225
+ receiveFromStream,
226
+ sendToStream,
227
+ stream2array,
228
+ stream2string,
229
+ stream2uint8array,
230
+ streamMap,
231
+ string2stream,
232
+ uint8array2stream
15
233
  };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./rebuffer"), exports);
18
- __exportStar(require("./stream_map"), exports);
19
- __exportStar(require("./stream2string"), exports);
20
- __exportStar(require("./stream_test_helper"), exports);
21
- __exportStar(require("./string2stream"), exports);
22
234
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,kDAAgC;AAChC,uDAAqC;AACrC,kDAAgC"}
1
+ {"version":3,"sources":["../../../src/utils/stream_map.ts","../../../src/utils/rebuffer.ts","../../../src/utils/stream2string.ts","../../../src/utils/stream_test_helper.ts","../../../src/utils/string2stream.ts"],"sourcesContent":["export interface StreamMap<T, U> {\n Map(s: T, idx: number): U | Promise<U>;\n readonly Close?: () => void;\n}\nexport function streamMap<T, U>(s: ReadableStream<T>, sm: StreamMap<T, U>): ReadableStream<U> {\n const state = { reader: s.getReader(), streamMap: sm, idx: 0 };\n return new ReadableStream<U>({\n async pull(controller) {\n const { done, value } = await state.reader.read();\n if (done) {\n state.streamMap.Close && state.streamMap.Close();\n controller.close();\n return;\n }\n const promiseOrU = state.streamMap.Map(value, state.idx++);\n let mapped: U;\n if (promiseOrU instanceof Promise || typeof (promiseOrU as { then: () => void }).then === \"function\") {\n mapped = await promiseOrU;\n } else {\n mapped = promiseOrU;\n }\n controller.enqueue(mapped);\n },\n });\n}\n\nexport async function devnull<T>(a: ReadableStream<T>): Promise<number> {\n const reader = a.getReader();\n let cnt = 0;\n while (true) {\n const { done } = await reader.read();\n if (done) {\n break;\n }\n cnt++;\n }\n return cnt;\n}\n\nexport function array2stream<T>(a: T[]): ReadableStream<T> {\n let i = 0;\n return new ReadableStream<T>({\n pull(controller) {\n if (i >= a.length) {\n controller.close();\n return;\n }\n controller.enqueue(a[i]);\n i++;\n },\n });\n}\n\nexport async function stream2array<T>(a: ReadableStream<T>): Promise<T[]> {\n const ret: T[] = [];\n const reader = a.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n ret.push(value);\n }\n return ret;\n}\n","import { array2stream, stream2array } from \"./stream_map\";\n\ninterface ReChunkResult {\n readonly rest: Uint8Array;\n readonly chunk: Uint8Array;\n}\n\nexport async function rebufferArray(a: Uint8Array[], chunkSize: number): Promise<Uint8Array[]> {\n return stream2array(rebuffer(array2stream(a), chunkSize));\n}\n\nfunction reChunk(cs: Uint8Array[], chunkSize: number): ReChunkResult {\n const len = cs.reduce((acc, v) => acc + v.length, 0);\n const last = cs[cs.length - 1];\n const lastOfs = len - last.length;\n // console.log(\"reChunk\", len, lastOfs, last.length, chunkSize, chunkSize - lastOfs)\n const rest = last.subarray(chunkSize - lastOfs);\n cs[cs.length - 1] = last.subarray(0, chunkSize - lastOfs);\n const chunk = new Uint8Array(chunkSize);\n let ofs = 0;\n for (const c of cs) {\n chunk.set(c, ofs);\n ofs += c.length;\n }\n return { rest, chunk };\n}\n\ninterface pumpState {\n readonly reader: ReadableStreamDefaultReader<Uint8Array>;\n tmp: Uint8Array[];\n tmpLen: number;\n readonly chunkSize: number;\n}\n\nfunction pump(ps: pumpState, controller: ReadableStreamDefaultController<Uint8Array>, next: () => void): void {\n ps.reader.read().then(({ done, value }) => {\n if (done) {\n if (ps.tmpLen > 0) {\n controller.enqueue(reChunk(ps.tmp, ps.tmpLen).chunk);\n }\n controller.close();\n next();\n return;\n }\n if (ps.tmpLen + value.length > ps.chunkSize) {\n ps.tmp.push(value);\n const res = reChunk(ps.tmp, ps.chunkSize);\n controller.enqueue(res.chunk);\n ps.tmp = [res.rest];\n ps.tmpLen = res.rest.length;\n next();\n return;\n } else if (value.length) {\n ps.tmp.push(value);\n ps.tmpLen += value.length;\n }\n pump(ps, controller, next);\n });\n}\n\nexport function rebuffer(a: ReadableStream<Uint8Array>, chunkSize: number): ReadableStream<Uint8Array> {\n const state: pumpState = {\n reader: a.getReader(),\n tmp: [],\n tmpLen: 0,\n chunkSize,\n };\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n return new Promise<void>((resolve) => {\n pump(state, controller, resolve);\n });\n },\n });\n}\n","export async function stream2string(stream?: ReadableStream<Uint8Array> | null, maxSize?: number): Promise<string> {\n if (!stream) {\n return Promise.resolve(\"\");\n }\n const reader = stream.getReader();\n let res = \"\";\n const decoder = new TextDecoder();\n let rSize = 0;\n while (typeof maxSize === \"undefined\" || rSize < maxSize) {\n try {\n const read = await reader.read();\n if (read.done) {\n break;\n }\n if (maxSize && rSize + read.value.length > maxSize) {\n read.value = read.value.slice(0, maxSize - rSize);\n }\n const block = decoder.decode(read.value, { stream: true });\n rSize += read.value.length;\n res += block;\n } catch (err) {\n return Promise.reject(err);\n }\n }\n return Promise.resolve(res);\n}\n\nexport async function stream2uint8array(stream?: ReadableStream<Uint8Array> | null): Promise<Uint8Array> {\n if (!stream) {\n return Promise.resolve(new Uint8Array());\n }\n const reader = stream.getReader();\n let res = new Uint8Array();\n // eslint-disable-next-line no-constant-condition\n while (1) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n res = new Uint8Array([...res, ...value]);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n return Promise.resolve(res);\n}\n","export interface streamingTestState {\n readonly sendChunks: number;\n readonly sendChunkSize: number;\n fillCalls: number;\n CollectorFn: jest.Mock<void, [{ done: boolean; value: Uint8Array | undefined; fillCalls: number; reBufferCalls: number }]>;\n}\n\nexport async function receiveFromStream(reb: ReadableStream<Uint8Array>, state: streamingTestState) {\n return new Promise<void>((resolve) => {\n let reBufferCalls = 0;\n const reader = reb.getReader();\n function pump() {\n reader.read().then(({ done, value }) => {\n state.CollectorFn({ done, value, fillCalls: state.fillCalls, reBufferCalls });\n reBufferCalls++;\n if (done) {\n resolve();\n return;\n }\n pump();\n });\n }\n pump();\n });\n}\n\nexport async function sendToStream(reb: WritableStream<Uint8Array>, state: streamingTestState) {\n return new Promise<void>((resolve) => {\n const writer = reb.getWriter();\n function pump(i: number) {\n if (i >= state.sendChunks) {\n writer.close();\n resolve();\n return;\n }\n writer.ready.then(() => {\n state.fillCalls++;\n writer.write(new Uint8Array(Array(state.sendChunkSize).fill(i)));\n pump(i + 1);\n });\n }\n pump(0);\n });\n}\n\n// it(\"does nothing\", () => {});\n","export function string2stream(str: string): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n return uint8array2stream(encoder.encode(str));\n}\n\nexport function uint8array2stream(str: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(str);\n controller.close();\n },\n });\n}\n"],"mappings":"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","names":["pump"]}