googlevideo 3.0.0 → 4.0.0

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 (175) hide show
  1. package/README.md +93 -45
  2. package/dist/protos/generated/misc/common.d.ts +180 -6
  3. package/dist/protos/generated/misc/common.js +282 -19
  4. package/dist/protos/generated/misc/common.js.map +1 -0
  5. package/dist/protos/generated/video_streaming/buffered_range.d.ts +10 -10
  6. package/dist/protos/generated/video_streaming/buffered_range.js +20 -19
  7. package/dist/protos/generated/video_streaming/buffered_range.js.map +1 -0
  8. package/dist/protos/generated/video_streaming/client_abr_state.d.ts +22 -11
  9. package/dist/protos/generated/video_streaming/client_abr_state.js +133 -50
  10. package/dist/protos/generated/video_streaming/client_abr_state.js.map +1 -0
  11. package/dist/protos/generated/video_streaming/crypto_params.d.ts +2 -7
  12. package/dist/protos/generated/video_streaming/crypto_params.js +1 -7
  13. package/dist/protos/generated/video_streaming/crypto_params.js.map +1 -0
  14. package/dist/protos/generated/video_streaming/format_initialization_metadata.d.ts +6 -6
  15. package/dist/protos/generated/video_streaming/format_initialization_metadata.js +32 -21
  16. package/dist/protos/generated/video_streaming/format_initialization_metadata.js.map +1 -0
  17. package/dist/protos/generated/video_streaming/format_selection_config.d.ts +12 -0
  18. package/dist/protos/generated/video_streaming/format_selection_config.js +68 -0
  19. package/dist/protos/generated/video_streaming/format_selection_config.js.map +1 -0
  20. package/dist/protos/generated/video_streaming/{encrypted_player_request.d.ts → innertube_request.d.ts} +11 -6
  21. package/dist/protos/generated/video_streaming/{encrypted_player_request.js → innertube_request.js} +64 -20
  22. package/dist/protos/generated/video_streaming/innertube_request.js.map +1 -0
  23. package/dist/protos/generated/video_streaming/live_metadata.d.ts +8 -5
  24. package/dist/protos/generated/video_streaming/live_metadata.js +57 -26
  25. package/dist/protos/generated/video_streaming/live_metadata.js.map +1 -0
  26. package/dist/protos/generated/video_streaming/media_capabilities.js +1 -0
  27. package/dist/protos/generated/video_streaming/media_capabilities.js.map +1 -0
  28. package/dist/protos/generated/video_streaming/media_header.d.ts +5 -10
  29. package/dist/protos/generated/video_streaming/media_header.js +27 -23
  30. package/dist/protos/generated/video_streaming/media_header.js.map +1 -0
  31. package/dist/protos/generated/video_streaming/next_request_policy.d.ts +3 -0
  32. package/dist/protos/generated/video_streaming/next_request_policy.js +31 -0
  33. package/dist/protos/generated/video_streaming/next_request_policy.js.map +1 -0
  34. package/dist/protos/generated/video_streaming/onesie_header.d.ts +7 -7
  35. package/dist/protos/generated/video_streaming/onesie_header.js +15 -14
  36. package/dist/protos/generated/video_streaming/onesie_header.js.map +1 -0
  37. package/dist/protos/generated/video_streaming/onesie_header_type.d.ts +9 -23
  38. package/dist/protos/generated/video_streaming/onesie_header_type.js +16 -30
  39. package/dist/protos/generated/video_streaming/onesie_header_type.js.map +1 -0
  40. package/dist/protos/generated/video_streaming/{onesie_player_request.d.ts → onesie_innertube_request.d.ts} +2 -2
  41. package/dist/protos/generated/video_streaming/{onesie_player_request.js → onesie_innertube_request.js} +5 -4
  42. package/dist/protos/generated/video_streaming/onesie_innertube_request.js.map +1 -0
  43. package/dist/protos/generated/video_streaming/onesie_innertube_response.d.ts +15 -0
  44. package/dist/protos/generated/video_streaming/{onesie_player_response.js → onesie_innertube_response.js} +5 -22
  45. package/dist/protos/generated/video_streaming/onesie_innertube_response.js.map +1 -0
  46. package/dist/protos/generated/video_streaming/onesie_proxy_status.d.ts +18 -0
  47. package/dist/protos/generated/video_streaming/onesie_proxy_status.js +25 -0
  48. package/dist/protos/generated/video_streaming/onesie_proxy_status.js.map +1 -0
  49. package/dist/protos/generated/video_streaming/onesie_request.d.ts +6 -3
  50. package/dist/protos/generated/video_streaming/onesie_request.js +17 -5
  51. package/dist/protos/generated/video_streaming/onesie_request.js.map +1 -0
  52. package/dist/protos/generated/video_streaming/playback_cookie.d.ts +2 -2
  53. package/dist/protos/generated/video_streaming/playback_cookie.js +5 -4
  54. package/dist/protos/generated/video_streaming/playback_cookie.js.map +1 -0
  55. package/dist/protos/generated/video_streaming/playback_start_policy.js +1 -0
  56. package/dist/protos/generated/video_streaming/playback_start_policy.js.map +1 -0
  57. package/dist/protos/generated/video_streaming/reload_player_response.d.ts +14 -0
  58. package/dist/protos/generated/video_streaming/reload_player_response.js +73 -0
  59. package/dist/protos/generated/video_streaming/reload_player_response.js.map +1 -0
  60. package/dist/protos/generated/video_streaming/request_cancellation_policy.js +1 -0
  61. package/dist/protos/generated/video_streaming/request_cancellation_policy.js.map +1 -0
  62. package/dist/protos/generated/video_streaming/request_identifier.d.ts +10 -0
  63. package/dist/protos/generated/video_streaming/request_identifier.js +41 -0
  64. package/dist/protos/generated/video_streaming/request_identifier.js.map +1 -0
  65. package/dist/protos/generated/video_streaming/sabr_context_sending_policy.d.ts +12 -0
  66. package/dist/protos/generated/video_streaming/sabr_context_sending_policy.js +86 -0
  67. package/dist/protos/generated/video_streaming/sabr_context_sending_policy.js.map +1 -0
  68. package/dist/protos/generated/video_streaming/sabr_context_update.d.ts +48 -0
  69. package/dist/protos/generated/video_streaming/sabr_context_update.js +242 -0
  70. package/dist/protos/generated/video_streaming/sabr_context_update.js.map +1 -0
  71. package/dist/protos/generated/video_streaming/sabr_error.js +1 -0
  72. package/dist/protos/generated/video_streaming/sabr_error.js.map +1 -0
  73. package/dist/protos/generated/video_streaming/sabr_redirect.js +1 -0
  74. package/dist/protos/generated/video_streaming/sabr_redirect.js.map +1 -0
  75. package/dist/protos/generated/video_streaming/snackbar_message.d.ts +10 -0
  76. package/dist/protos/generated/video_streaming/snackbar_message.js +41 -0
  77. package/dist/protos/generated/video_streaming/snackbar_message.js.map +1 -0
  78. package/dist/protos/generated/video_streaming/stream_protection_status.d.ts +1 -1
  79. package/dist/protos/generated/video_streaming/stream_protection_status.js +5 -4
  80. package/dist/protos/generated/video_streaming/stream_protection_status.js.map +1 -0
  81. package/dist/protos/generated/video_streaming/streamer_context.d.ts +11 -11
  82. package/dist/protos/generated/video_streaming/streamer_context.js +32 -32
  83. package/dist/protos/generated/video_streaming/streamer_context.js.map +1 -0
  84. package/dist/protos/generated/video_streaming/time_range.d.ts +2 -2
  85. package/dist/protos/generated/video_streaming/time_range.js +8 -7
  86. package/dist/protos/generated/video_streaming/time_range.js.map +1 -0
  87. package/dist/protos/generated/video_streaming/ump_part_id.d.ts +58 -0
  88. package/dist/protos/generated/video_streaming/ump_part_id.js +89 -0
  89. package/dist/protos/generated/video_streaming/ump_part_id.js.map +1 -0
  90. package/dist/protos/generated/video_streaming/video_playback_abr_request.d.ts +20 -21
  91. package/dist/protos/generated/video_streaming/video_playback_abr_request.js +48 -86
  92. package/dist/protos/generated/video_streaming/video_playback_abr_request.js.map +1 -0
  93. package/dist/src/core/{ChunkedDataBuffer.d.ts → CompositeBuffer.d.ts} +8 -8
  94. package/dist/src/core/{ChunkedDataBuffer.js → CompositeBuffer.js} +32 -27
  95. package/dist/src/core/CompositeBuffer.js.map +1 -0
  96. package/dist/src/core/SabrStream.d.ts +356 -0
  97. package/dist/src/core/SabrStream.js +958 -0
  98. package/dist/src/core/SabrStream.js.map +1 -0
  99. package/dist/src/core/SabrStreamingAdapter.d.ts +158 -0
  100. package/dist/src/core/SabrStreamingAdapter.js +496 -0
  101. package/dist/src/core/SabrStreamingAdapter.js.map +1 -0
  102. package/dist/src/core/SabrUmpProcessor.d.ts +53 -0
  103. package/dist/src/core/SabrUmpProcessor.js +234 -0
  104. package/dist/src/core/SabrUmpProcessor.js.map +1 -0
  105. package/dist/src/core/{UMP.d.ts → UmpReader.d.ts} +6 -10
  106. package/dist/src/core/{UMP.js → UmpReader.js} +33 -36
  107. package/dist/src/core/UmpReader.js.map +1 -0
  108. package/dist/src/core/UmpWriter.d.ts +16 -0
  109. package/dist/src/core/UmpWriter.js +56 -0
  110. package/dist/src/core/UmpWriter.js.map +1 -0
  111. package/dist/src/exports/protos.d.ts +1 -0
  112. package/dist/src/exports/protos.js +2 -0
  113. package/dist/src/exports/protos.js.map +1 -0
  114. package/dist/src/exports/sabr-stream.d.ts +2 -0
  115. package/dist/src/exports/sabr-stream.js +2 -0
  116. package/dist/src/exports/sabr-stream.js.map +1 -0
  117. package/dist/src/exports/sabr-streaming-adapter.d.ts +3 -0
  118. package/dist/src/exports/sabr-streaming-adapter.js +3 -0
  119. package/dist/src/exports/sabr-streaming-adapter.js.map +1 -0
  120. package/dist/src/exports/ump.d.ts +3 -0
  121. package/dist/src/exports/ump.js +4 -0
  122. package/dist/src/exports/ump.js.map +1 -0
  123. package/dist/src/exports/utils.d.ts +1 -0
  124. package/dist/src/exports/utils.js +2 -0
  125. package/dist/src/exports/utils.js.map +1 -0
  126. package/dist/src/types/sabrStreamTypes.d.ts +102 -0
  127. package/dist/src/types/sabrStreamTypes.js +2 -0
  128. package/dist/src/types/sabrStreamTypes.js.map +1 -0
  129. package/dist/src/types/sabrStreamingAdapterTypes.d.ts +93 -0
  130. package/dist/src/types/sabrStreamingAdapterTypes.js +2 -0
  131. package/dist/src/types/sabrStreamingAdapterTypes.js.map +1 -0
  132. package/dist/src/types/shared.d.ts +64 -0
  133. package/dist/src/types/shared.js +2 -0
  134. package/dist/src/types/shared.js.map +1 -0
  135. package/dist/src/utils/CacheManager.d.ts +32 -0
  136. package/dist/src/utils/CacheManager.js +131 -0
  137. package/dist/src/utils/CacheManager.js.map +1 -0
  138. package/dist/src/utils/EventEmitterLike.d.ts +5 -0
  139. package/dist/src/utils/EventEmitterLike.js +51 -10
  140. package/dist/src/utils/EventEmitterLike.js.map +1 -0
  141. package/dist/src/utils/Logger.d.ts +30 -0
  142. package/dist/src/utils/Logger.js +80 -0
  143. package/dist/src/utils/Logger.js.map +1 -0
  144. package/dist/src/utils/Protos.d.ts +20 -13
  145. package/dist/src/utils/Protos.js +21 -13
  146. package/dist/src/utils/Protos.js.map +1 -0
  147. package/dist/src/utils/RequestMetadataManager.d.ts +15 -0
  148. package/dist/src/utils/RequestMetadataManager.js +48 -0
  149. package/dist/src/utils/RequestMetadataManager.js.map +1 -0
  150. package/dist/src/utils/formatKeyUtils.d.ts +45 -0
  151. package/dist/src/utils/formatKeyUtils.js +77 -0
  152. package/dist/src/utils/formatKeyUtils.js.map +1 -0
  153. package/dist/src/utils/index.d.ts +5 -3
  154. package/dist/src/utils/index.js +6 -2
  155. package/dist/src/utils/index.js.map +1 -0
  156. package/dist/src/utils/sabrStreamUtils.d.ts +28 -0
  157. package/dist/src/utils/sabrStreamUtils.js +76 -0
  158. package/dist/src/utils/sabrStreamUtils.js.map +1 -0
  159. package/dist/src/utils/shared.d.ts +43 -0
  160. package/dist/src/utils/shared.js +108 -0
  161. package/dist/src/utils/shared.js.map +1 -0
  162. package/package.json +40 -12
  163. package/dist/protos/generated/video_streaming/onesie_player_response.d.ts +0 -31
  164. package/dist/protos/generated/video_streaming/proxy_status.d.ts +0 -14
  165. package/dist/protos/generated/video_streaming/proxy_status.js +0 -21
  166. package/dist/src/core/ServerAbrStream.d.ts +0 -39
  167. package/dist/src/core/ServerAbrStream.js +0 -259
  168. package/dist/src/core/index.d.ts +0 -3
  169. package/dist/src/core/index.js +0 -3
  170. package/dist/src/index.d.ts +0 -4
  171. package/dist/src/index.js +0 -4
  172. package/dist/src/utils/helpers.d.ts +0 -63
  173. package/dist/src/utils/helpers.js +0 -101
  174. package/dist/src/utils/types.d.ts +0 -65
  175. package/dist/src/utils/types.js +0 -1
@@ -0,0 +1,234 @@
1
+ import { concatenateChunks } from '../utils/index.js';
2
+ import { createSegmentCacheKey, fromFormat, fromMediaHeader } from '../utils/formatKeyUtils.js';
3
+ import { CompositeBuffer } from './CompositeBuffer.js';
4
+ import { UmpReader } from './UmpReader.js';
5
+ import { FormatInitializationMetadata, MediaHeader, NextRequestPolicy, ReloadPlaybackContext, SabrContextSendingPolicy, SabrContextUpdate, SabrError, SabrRedirect, SnackbarMessage, StreamProtectionStatus, UMPPartId } from '../utils/Protos.js';
6
+ /**
7
+ * This class is responsible for reading a UMP stream, handling different part types
8
+ * (like media headers, media data, and server directives), and populating a
9
+ * metadata object with the extracted information. It is supposed to be used
10
+ * in conjunction with a {@linkcode SabrPlayerAdapter} in video player
11
+ * implementations.
12
+ */
13
+ export class SabrUmpProcessor {
14
+ constructor(requestMetadata, cacheManager) {
15
+ this.requestMetadata = requestMetadata;
16
+ this.cacheManager = cacheManager;
17
+ this.formatInitMetadata = [];
18
+ this.partialSegments = new Map();
19
+ this.umpPartHandlers = new Map([
20
+ [UMPPartId.FORMAT_INITIALIZATION_METADATA, this.handleFormatInitMetadata.bind(this)],
21
+ [UMPPartId.NEXT_REQUEST_POLICY, this.handleNextRequestPolicy.bind(this)],
22
+ [UMPPartId.SABR_ERROR, this.handleSabrError.bind(this)],
23
+ [UMPPartId.SABR_REDIRECT, this.handleSabrRedirect.bind(this)],
24
+ [UMPPartId.SABR_CONTEXT_UPDATE, this.handleSabrContextUpdate.bind(this)],
25
+ [UMPPartId.SABR_CONTEXT_SENDING_POLICY, this.handleSabrContextSendingPolicy.bind(this)],
26
+ [UMPPartId.SNACKBAR_MESSAGE, this.handleSnackbarMessage.bind(this)],
27
+ [UMPPartId.STREAM_PROTECTION_STATUS, this.handleStreamProtectionStatus.bind(this)],
28
+ [UMPPartId.RELOAD_PLAYER_RESPONSE, this.handleReloadPlayerResponse.bind(this)],
29
+ [UMPPartId.MEDIA_HEADER, this.handleMediaHeader.bind(this)],
30
+ [UMPPartId.MEDIA, this.handleMedia.bind(this)],
31
+ [UMPPartId.MEDIA_END, this.handleMediaEnd.bind(this)]
32
+ ]);
33
+ }
34
+ /**
35
+ * Processes a chunk of data from a UMP stream and updates the request context.
36
+ * @returns A promise that resolves with a processing result if a terminal part is found (e.g., MediaEnd), or undefined otherwise.
37
+ * @param value
38
+ */
39
+ processChunk(value) {
40
+ return new Promise((resolve) => {
41
+ let chunk;
42
+ if (this.partialPart) {
43
+ chunk = this.partialPart.data;
44
+ chunk.append(value);
45
+ }
46
+ else {
47
+ chunk = new CompositeBuffer([value]);
48
+ }
49
+ const ump = new UmpReader(chunk);
50
+ this.partialPart = ump.read((part) => {
51
+ const handler = this.umpPartHandlers.get(part.type);
52
+ const result = handler?.(part);
53
+ if (result) {
54
+ this.partialPart = undefined;
55
+ this.desiredHeaderId = undefined;
56
+ this.partialSegments.clear();
57
+ resolve(result);
58
+ }
59
+ });
60
+ resolve(undefined);
61
+ });
62
+ }
63
+ getSegmentInfo() {
64
+ return this.partialSegments.get(this.desiredHeaderId || 0);
65
+ }
66
+ decodePart(part, decoder) {
67
+ if (!part.data.chunks.length)
68
+ return undefined;
69
+ try {
70
+ return decoder.decode(concatenateChunks(part.data.chunks));
71
+ }
72
+ catch {
73
+ return undefined;
74
+ }
75
+ }
76
+ handleFormatInitMetadata(part) {
77
+ const formatInitMetadata = this.decodePart(part, FormatInitializationMetadata);
78
+ if (formatInitMetadata) {
79
+ this.formatInitMetadata.push(formatInitMetadata);
80
+ }
81
+ return undefined;
82
+ }
83
+ handleNextRequestPolicy(part) {
84
+ const nextRequestPolicy = this.decodePart(part, NextRequestPolicy);
85
+ if (nextRequestPolicy) {
86
+ this.requestMetadata.streamInfo = {
87
+ ...this.requestMetadata.streamInfo,
88
+ nextRequestPolicy
89
+ };
90
+ }
91
+ return undefined;
92
+ }
93
+ handleMediaHeader(part) {
94
+ const mediaHeader = this.decodePart(part, MediaHeader);
95
+ if (!mediaHeader) {
96
+ return undefined;
97
+ }
98
+ const targetFormatKey = fromFormat(this.requestMetadata.format);
99
+ const segmentFormatKey = fromMediaHeader(mediaHeader);
100
+ if (!this.requestMetadata.isSABR || segmentFormatKey === targetFormatKey) {
101
+ const segmentObj = {
102
+ headerId: mediaHeader.headerId,
103
+ mediaHeader: mediaHeader,
104
+ bufferedChunks: [],
105
+ lastChunkSize: 0
106
+ };
107
+ if (this.desiredHeaderId === undefined) {
108
+ this.desiredHeaderId = mediaHeader.headerId;
109
+ }
110
+ this.partialSegments.set(mediaHeader.headerId, segmentObj);
111
+ }
112
+ return undefined;
113
+ }
114
+ handleMedia(part) {
115
+ const headerId = part.data.getUint8(0);
116
+ const buffer = part.data.split(1).remainingBuffer;
117
+ const segment = this.partialSegments.get(headerId);
118
+ if (segment) {
119
+ segment.lastChunkSize = buffer.getLength();
120
+ for (const chunk of buffer.chunks) {
121
+ segment.bufferedChunks.push(chunk);
122
+ }
123
+ }
124
+ return undefined;
125
+ }
126
+ handleMediaEnd(part) {
127
+ const headerId = part.data.getUint8(0);
128
+ const segment = this.partialSegments.get(headerId);
129
+ if (segment && segment.headerId === this.desiredHeaderId) {
130
+ const segmentData = concatenateChunks(segment.bufferedChunks);
131
+ this.requestMetadata.streamInfo = {
132
+ ...this.requestMetadata.streamInfo,
133
+ formatInitMetadata: this.formatInitMetadata,
134
+ mediaHeader: segment.mediaHeader
135
+ };
136
+ /**
137
+ * Cache initialization segments to optimize performance. SABR responses contain larger payloads,
138
+ * and caching the init segment reduces latency when switching between different quality levels
139
+ * or initializing new streams.
140
+ */
141
+ if (this.cacheManager && this.requestMetadata.isInit && this.requestMetadata.byteRange && this.requestMetadata.format) {
142
+ this.cacheManager.setInitSegment(createSegmentCacheKey(segment.mediaHeader, this.requestMetadata.format), segmentData);
143
+ return {
144
+ data: segmentData.slice(this.requestMetadata.byteRange.start, this.requestMetadata.byteRange.end + 1),
145
+ done: true
146
+ };
147
+ }
148
+ return {
149
+ data: segmentData,
150
+ done: true
151
+ };
152
+ }
153
+ }
154
+ handleSnackbarMessage(part) {
155
+ const snackbarMessage = this.decodePart(part, SnackbarMessage);
156
+ if (snackbarMessage) {
157
+ this.requestMetadata.streamInfo = {
158
+ ...this.requestMetadata.streamInfo,
159
+ snackbarMessage
160
+ };
161
+ }
162
+ return undefined;
163
+ }
164
+ handleSabrError(part) {
165
+ const sabrError = this.decodePart(part, SabrError);
166
+ this.requestMetadata.error = { sabrError };
167
+ return { done: true };
168
+ }
169
+ handleStreamProtectionStatus(part) {
170
+ const streamProtectionStatus = this.decodePart(part, StreamProtectionStatus);
171
+ if (!streamProtectionStatus) {
172
+ return undefined;
173
+ }
174
+ this.requestMetadata.streamInfo = {
175
+ ...this.requestMetadata.streamInfo,
176
+ streamProtectionStatus
177
+ };
178
+ if (streamProtectionStatus.status === 3) {
179
+ return {
180
+ done: true
181
+ };
182
+ }
183
+ return undefined;
184
+ }
185
+ handleReloadPlayerResponse(part) {
186
+ const reloadPlaybackContext = this.decodePart(part, ReloadPlaybackContext);
187
+ if (!reloadPlaybackContext) {
188
+ return undefined;
189
+ }
190
+ this.requestMetadata.streamInfo = {
191
+ ...this.requestMetadata.streamInfo,
192
+ reloadPlaybackContext
193
+ };
194
+ return {
195
+ done: true
196
+ };
197
+ }
198
+ handleSabrRedirect(part) {
199
+ const redirect = this.decodePart(part, SabrRedirect);
200
+ if (!redirect) {
201
+ return undefined;
202
+ }
203
+ this.requestMetadata.streamInfo = {
204
+ ...this.requestMetadata.streamInfo,
205
+ redirect
206
+ };
207
+ // With just UMP, redirects should be followed immediately.
208
+ if (this.requestMetadata.isUMP && !this.requestMetadata.isSABR) {
209
+ return { done: true };
210
+ }
211
+ return undefined;
212
+ }
213
+ handleSabrContextUpdate(part) {
214
+ const sabrContextUpdate = this.decodePart(part, SabrContextUpdate);
215
+ if (sabrContextUpdate) {
216
+ this.requestMetadata.streamInfo = {
217
+ ...this.requestMetadata.streamInfo,
218
+ sabrContextUpdate
219
+ };
220
+ }
221
+ return undefined;
222
+ }
223
+ handleSabrContextSendingPolicy(part) {
224
+ const sabrContextSendingPolicy = this.decodePart(part, SabrContextSendingPolicy);
225
+ if (sabrContextSendingPolicy) {
226
+ this.requestMetadata.streamInfo = {
227
+ ...this.requestMetadata.streamInfo,
228
+ sabrContextSendingPolicy
229
+ };
230
+ }
231
+ return undefined;
232
+ }
233
+ }
234
+ //# sourceMappingURL=SabrUmpProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SabrUmpProcessor.js","sourceRoot":"","sources":["../../../src/core/SabrUmpProcessor.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,14 @@
1
- import type { Part } from '../index.js';
2
- import type { ChunkedDataBuffer } from './ChunkedDataBuffer.js';
3
- export declare class UMP {
4
- private chunkedDataBuffer;
5
- /**
6
- * Creates a new UMP parser.
7
- * @param chunkedDataBuffer - Buffer containing UMP format data.
8
- */
9
- constructor(chunkedDataBuffer: ChunkedDataBuffer);
1
+ import type { CompositeBuffer } from './CompositeBuffer.js';
2
+ import type { Part } from '../types/shared.js';
3
+ export declare class UmpReader {
4
+ private compositeBuffer;
5
+ constructor(compositeBuffer: CompositeBuffer);
10
6
  /**
11
7
  * Parses parts from the buffer and calls the handler for each complete part.
12
8
  * @param handlePart - Function called with each complete part.
13
9
  * @returns Partial part if parsing is incomplete, undefined otherwise.
14
10
  */
15
- parse(handlePart: (part: Part) => void): Part | undefined;
11
+ read(handlePart: (part: Part) => void): Part | undefined;
16
12
  /**
17
13
  * Reads a variable-length integer from the buffer.
18
14
  * @param offset - Position to start reading from.
@@ -1,17 +1,13 @@
1
- export class UMP {
2
- /**
3
- * Creates a new UMP parser.
4
- * @param chunkedDataBuffer - Buffer containing UMP format data.
5
- */
6
- constructor(chunkedDataBuffer) {
7
- this.chunkedDataBuffer = chunkedDataBuffer;
1
+ export class UmpReader {
2
+ constructor(compositeBuffer) {
3
+ this.compositeBuffer = compositeBuffer;
8
4
  }
9
5
  /**
10
6
  * Parses parts from the buffer and calls the handler for each complete part.
11
7
  * @param handlePart - Function called with each complete part.
12
8
  * @returns Partial part if parsing is incomplete, undefined otherwise.
13
9
  */
14
- parse(handlePart) {
10
+ read(handlePart) {
15
11
  while (true) {
16
12
  let offset = 0;
17
13
  const [partType, newOffset] = this.readVarInt(offset);
@@ -20,23 +16,23 @@ export class UMP {
20
16
  offset = finalOffset;
21
17
  if (partType < 0 || partSize < 0)
22
18
  break;
23
- if (!this.chunkedDataBuffer.canReadBytes(offset, partSize)) {
24
- if (!this.chunkedDataBuffer.canReadBytes(offset, 1))
19
+ if (!this.compositeBuffer.canReadBytes(offset, partSize)) {
20
+ if (!this.compositeBuffer.canReadBytes(offset, 1))
25
21
  break;
26
22
  return {
27
23
  type: partType,
28
24
  size: partSize,
29
- data: this.chunkedDataBuffer
25
+ data: this.compositeBuffer
30
26
  };
31
27
  }
32
- const splitResult = this.chunkedDataBuffer.split(offset).remainingBuffer.split(partSize);
28
+ const splitResult = this.compositeBuffer.split(offset).remainingBuffer.split(partSize);
33
29
  offset = 0;
34
30
  handlePart({
35
31
  type: partType,
36
32
  size: partSize,
37
33
  data: splitResult.extractedBuffer
38
34
  });
39
- this.chunkedDataBuffer = splitResult.remainingBuffer;
35
+ this.compositeBuffer = splitResult.remainingBuffer;
40
36
  }
41
37
  }
42
38
  /**
@@ -47,54 +43,54 @@ export class UMP {
47
43
  readVarInt(offset) {
48
44
  let byteLength;
49
45
  // Determine the length of the val
50
- if (this.chunkedDataBuffer.canReadBytes(offset, 1)) {
51
- const firstByte = this.chunkedDataBuffer.getUint8(offset);
46
+ if (this.compositeBuffer.canReadBytes(offset, 1)) {
47
+ const firstByte = this.compositeBuffer.getUint8(offset);
52
48
  byteLength = firstByte < 128 ? 1 : firstByte < 192 ? 2 : firstByte < 224 ? 3 : firstByte < 240 ? 4 : 5;
53
49
  }
54
50
  else {
55
51
  byteLength = 0;
56
52
  }
57
- if (byteLength < 1 || !this.chunkedDataBuffer.canReadBytes(offset, byteLength)) {
53
+ if (byteLength < 1 || !this.compositeBuffer.canReadBytes(offset, byteLength)) {
58
54
  return [-1, offset];
59
55
  }
60
56
  let value;
61
57
  // Now read it based on the length
62
58
  switch (byteLength) {
63
59
  case 1:
64
- value = this.chunkedDataBuffer.getUint8(offset++);
60
+ value = this.compositeBuffer.getUint8(offset++);
65
61
  break;
66
62
  case 2: {
67
- const byte1 = this.chunkedDataBuffer.getUint8(offset++);
68
- const byte2 = this.chunkedDataBuffer.getUint8(offset++);
63
+ const byte1 = this.compositeBuffer.getUint8(offset++);
64
+ const byte2 = this.compositeBuffer.getUint8(offset++);
69
65
  value = (byte1 & 0x3f) + 64 * byte2;
70
66
  break;
71
67
  }
72
68
  case 3: {
73
- const byte1 = this.chunkedDataBuffer.getUint8(offset++);
74
- const byte2 = this.chunkedDataBuffer.getUint8(offset++);
75
- const byte3 = this.chunkedDataBuffer.getUint8(offset++);
69
+ const byte1 = this.compositeBuffer.getUint8(offset++);
70
+ const byte2 = this.compositeBuffer.getUint8(offset++);
71
+ const byte3 = this.compositeBuffer.getUint8(offset++);
76
72
  value = (byte1 & 0x1f) + 32 * (byte2 + 256 * byte3);
77
73
  break;
78
74
  }
79
75
  case 4: {
80
- const byte1 = this.chunkedDataBuffer.getUint8(offset++);
81
- const byte2 = this.chunkedDataBuffer.getUint8(offset++);
82
- const byte3 = this.chunkedDataBuffer.getUint8(offset++);
83
- const byte4 = this.chunkedDataBuffer.getUint8(offset++);
76
+ const byte1 = this.compositeBuffer.getUint8(offset++);
77
+ const byte2 = this.compositeBuffer.getUint8(offset++);
78
+ const byte3 = this.compositeBuffer.getUint8(offset++);
79
+ const byte4 = this.compositeBuffer.getUint8(offset++);
84
80
  value = (byte1 & 0x0f) + 16 * (byte2 + 256 * (byte3 + 256 * byte4));
85
81
  break;
86
82
  }
87
83
  default: {
88
84
  const tempOffset = offset + 1;
89
- this.chunkedDataBuffer.focus(tempOffset);
85
+ this.compositeBuffer.focus(tempOffset);
90
86
  if (this.canReadFromCurrentChunk(tempOffset, 4)) {
91
- value = this.getCurrentDataView().getUint32(tempOffset - this.chunkedDataBuffer.currentChunkOffset, true);
87
+ value = this.getCurrentDataView().getUint32(tempOffset - this.compositeBuffer.currentChunkOffset, true);
92
88
  }
93
89
  else {
94
- const byte3 = this.chunkedDataBuffer.getUint8(tempOffset + 2) + 256 * this.chunkedDataBuffer.getUint8(tempOffset + 3);
90
+ const byte3 = this.compositeBuffer.getUint8(tempOffset + 2) + 256 * this.compositeBuffer.getUint8(tempOffset + 3);
95
91
  value =
96
- this.chunkedDataBuffer.getUint8(tempOffset) +
97
- 256 * (this.chunkedDataBuffer.getUint8(tempOffset + 1) + 256 * byte3);
92
+ this.compositeBuffer.getUint8(tempOffset) +
93
+ 256 * (this.compositeBuffer.getUint8(tempOffset + 1) + 256 * byte3);
98
94
  }
99
95
  offset += 5;
100
96
  break;
@@ -109,17 +105,18 @@ export class UMP {
109
105
  * @returns True if bytes can be read from current chunk, false otherwise.
110
106
  */
111
107
  canReadFromCurrentChunk(offset, length) {
112
- return offset - this.chunkedDataBuffer.currentChunkOffset + length <= this.chunkedDataBuffer.chunks[this.chunkedDataBuffer.currentChunkIndex].length;
108
+ return offset - this.compositeBuffer.currentChunkOffset + length <= this.compositeBuffer.chunks[this.compositeBuffer.currentChunkIndex].length;
113
109
  }
114
110
  /**
115
111
  * Gets a DataView of the current chunk, creating it if necessary.
116
112
  * @returns DataView for the current chunk.
117
113
  */
118
114
  getCurrentDataView() {
119
- if (!this.chunkedDataBuffer.currentDataView) {
120
- const currentChunk = this.chunkedDataBuffer.chunks[this.chunkedDataBuffer.currentChunkIndex];
121
- this.chunkedDataBuffer.currentDataView = new DataView(currentChunk.buffer, currentChunk.byteOffset, currentChunk.length);
115
+ if (!this.compositeBuffer.currentDataView) {
116
+ const currentChunk = this.compositeBuffer.chunks[this.compositeBuffer.currentChunkIndex];
117
+ this.compositeBuffer.currentDataView = new DataView(currentChunk.buffer, currentChunk.byteOffset, currentChunk.length);
122
118
  }
123
- return this.chunkedDataBuffer.currentDataView;
119
+ return this.compositeBuffer.currentDataView;
124
120
  }
125
121
  }
122
+ //# sourceMappingURL=UmpReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UmpReader.js","sourceRoot":"","sources":["../../../src/core/UmpReader.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IACpB,YAAoB,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IAAI,CAAC;IAEzD;;;;OAIG;IACI,IAAI,CAAC,UAAgC;QAC1C,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,MAAM,CAAE,QAAQ,EAAE,SAAS,CAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,GAAG,SAAS,CAAC;YAEnB,MAAM,CAAE,QAAQ,EAAE,WAAW,CAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,GAAG,WAAW,CAAC;YAErB,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC;gBAC9B,MAAM;YAER,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC/C,MAAM;gBAER,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,IAAI,CAAC,eAAe;iBAC3B,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvF,MAAM,GAAG,CAAC,CAAC;YAEX,UAAU,CAAC;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,WAAW,CAAC,eAAe;aAClC,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,MAAc;QAC9B,IAAI,UAAkB,CAAC;QAEvB,kCAAkC;QAClC,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxD,UAAU,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAE,CAAC,CAAC,EAAE,MAAM,CAAE,CAAC;QACxB,CAAC;QAED,IAAI,KAAa,CAAC;QAElB,kCAAkC;QAClC,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,CAAC;gBACJ,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACpC,MAAM;YACR,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;gBACpD,MAAM;YACR,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpE,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;gBAC9B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAEvC,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;oBAChD,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;gBAC1G,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;oBAClH,KAAK;wBACH,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;4BACzC,GAAG,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,IAAI,CAAC,CAAC;gBACZ,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,CAAE,KAAK,EAAE,MAAM,CAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACI,uBAAuB,CAAC,MAAc,EAAE,MAAc;QAC3D,OAAO,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,GAAG,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC;IACjJ,CAAC;IAED;;;OAGG;IACI,kBAAkB;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACzF,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QACzH,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { CompositeBuffer } from './CompositeBuffer.js';
2
+ export declare class UmpWriter {
3
+ private compositeBuffer;
4
+ constructor(compositeBuffer: CompositeBuffer);
5
+ /**
6
+ * Writes a part to the buffer.
7
+ * @param partType - The type of the part.
8
+ * @param partData - The data of the part.
9
+ */
10
+ write(partType: number, partData: Uint8Array): void;
11
+ /**
12
+ * Writes a variable-length integer to the buffer.
13
+ * @param value - The integer to write.
14
+ */
15
+ private writeVarInt;
16
+ }
@@ -0,0 +1,56 @@
1
+ export class UmpWriter {
2
+ constructor(compositeBuffer) {
3
+ this.compositeBuffer = compositeBuffer;
4
+ }
5
+ /**
6
+ * Writes a part to the buffer.
7
+ * @param partType - The type of the part.
8
+ * @param partData - The data of the part.
9
+ */
10
+ write(partType, partData) {
11
+ const partSize = partData.length;
12
+ this.writeVarInt(partType);
13
+ this.writeVarInt(partSize);
14
+ this.compositeBuffer.append(partData);
15
+ }
16
+ /**
17
+ * Writes a variable-length integer to the buffer.
18
+ * @param value - The integer to write.
19
+ */
20
+ writeVarInt(value) {
21
+ if (value < 0)
22
+ throw new Error('VarInt value cannot be negative.');
23
+ if (value < 128) {
24
+ this.compositeBuffer.append(new Uint8Array([value]));
25
+ }
26
+ else if (value < 16384) {
27
+ this.compositeBuffer.append(new Uint8Array([
28
+ (value & 0x3F) | 0x80,
29
+ value >> 6
30
+ ]));
31
+ }
32
+ else if (value < 2097152) {
33
+ this.compositeBuffer.append(new Uint8Array([
34
+ (value & 0x1F) | 0xC0,
35
+ (value >> 5) & 0xFF,
36
+ value >> 13
37
+ ]));
38
+ }
39
+ else if (value < 268435456) {
40
+ this.compositeBuffer.append(new Uint8Array([
41
+ (value & 0x0F) | 0xE0,
42
+ (value >> 4) & 0xFF,
43
+ (value >> 12) & 0xFF,
44
+ value >> 20
45
+ ]));
46
+ }
47
+ else {
48
+ const data = new Uint8Array(5);
49
+ const view = new DataView(data.buffer);
50
+ data[0] = 0xF0;
51
+ view.setUint32(1, value, true);
52
+ this.compositeBuffer.append(data);
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=UmpWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UmpWriter.js","sourceRoot":"","sources":["../../../src/core/UmpWriter.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,SAAS;IACpB,YACU,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IACtC,CAAC;IAEL;;;;OAIG;IACI,KAAK,CAAC,QAAgB,EAAE,QAAoB;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,KAAa;QAC/B,IAAI,KAAK,GAAG,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAEtD,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAE,KAAK,CAAE,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;gBACzC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;gBACrB,KAAK,IAAI,CAAC;aACX,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;gBACzC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;gBACrB,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI;gBACnB,KAAK,IAAI,EAAE;aACZ,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;gBACzC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;gBACrB,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI;gBACnB,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI;gBACpB,KAAK,IAAI,EAAE;aACZ,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export * from '../utils/Protos.js';
@@ -0,0 +1,2 @@
1
+ export * from '../utils/Protos.js';
2
+ //# sourceMappingURL=protos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protos.js","sourceRoot":"","sources":["../../../src/exports/protos.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from '../core/SabrStream.js';
2
+ export type * from '../types/sabrStreamTypes.js';
@@ -0,0 +1,2 @@
1
+ export * from '../core/SabrStream.js';
2
+ //# sourceMappingURL=sabr-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sabr-stream.js","sourceRoot":"","sources":["../../../src/exports/sabr-stream.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from '../core/SabrStreamingAdapter.js';
2
+ export * from '../core/SabrUmpProcessor.js';
3
+ export type * from '../types/sabrStreamingAdapterTypes.js';
@@ -0,0 +1,3 @@
1
+ export * from '../core/SabrStreamingAdapter.js';
2
+ export * from '../core/SabrUmpProcessor.js';
3
+ //# sourceMappingURL=sabr-streaming-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sabr-streaming-adapter.js","sourceRoot":"","sources":["../../../src/exports/sabr-streaming-adapter.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from '../core/UmpReader.js';
2
+ export * from '../core/UmpWriter.js';
3
+ export * from '../core/CompositeBuffer.js';
@@ -0,0 +1,4 @@
1
+ export * from '../core/UmpReader.js';
2
+ export * from '../core/UmpWriter.js';
3
+ export * from '../core/CompositeBuffer.js';
4
+ //# sourceMappingURL=ump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ump.js","sourceRoot":"","sources":["../../../src/exports/ump.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1 @@
1
+ export * from '../utils/index.js';
@@ -0,0 +1,2 @@
1
+ export * from '../utils/index.js';
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/exports/utils.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}