agdi 3.3.5 → 3.3.7

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 (36) hide show
  1. package/README.md +13 -0
  2. package/dist/APEv2Parser-EU45AV6X.js +14 -0
  3. package/dist/AiffParser-FOX7GQ42.js +189 -0
  4. package/dist/AsfParser-HD5CSGIO.js +610 -0
  5. package/dist/DsdiffParser-OJREDMBI.js +188 -0
  6. package/dist/DsfParser-2YL4ARJ7.js +110 -0
  7. package/dist/FlacParser-IVV4RYF6.js +15 -0
  8. package/dist/MP4Parser-NLX4A2YN.js +1140 -0
  9. package/dist/MatroskaParser-4OEK43GF.js +654 -0
  10. package/dist/MpegParser-PXKEUF2B.js +642 -0
  11. package/dist/MusepackParser-54QGYRLY.js +322 -0
  12. package/dist/OggParser-KRV5QCGZ.js +435 -0
  13. package/dist/WavPackParser-XPZSQFVS.js +203 -0
  14. package/dist/WaveParser-27IS2RAI.js +294 -0
  15. package/dist/chunk-2B4QMSZW.js +311 -0
  16. package/dist/chunk-3JKZUGPJ.js +70 -0
  17. package/dist/chunk-4VNS5WPM.js +42 -0
  18. package/dist/chunk-65JVFJ3X.js +729 -0
  19. package/dist/chunk-6OKLAJRQ.js +0 -0
  20. package/dist/chunk-AGSFUVRG.js +439 -0
  21. package/dist/chunk-GD35BJSH.js +177 -0
  22. package/dist/chunk-HNLU36CC.js +702 -0
  23. package/dist/{chunk-M2FF7ETI.js → chunk-J6OLLWVT.js} +1 -1
  24. package/dist/chunk-LREP5CZP.js +146 -0
  25. package/dist/chunk-M54HVABG.js +34 -0
  26. package/dist/{chunk-S45VXJEO.js → chunk-OPFFFAQC.js} +19 -1
  27. package/dist/chunk-VGOIHW7D.js +1529 -0
  28. package/dist/chunk-YIHDW7JC.js +314 -0
  29. package/dist/config-D3QBUN2Y.js +13 -0
  30. package/dist/{config-ZFU7TSU2.js → config-K2XM6D4Z.js} +3 -2
  31. package/dist/{event-bus-Q3WCETQQ.js → event-bus-MO5SFUME.js} +1 -0
  32. package/dist/index.js +3273 -1274
  33. package/dist/lib-2XISBYT3.js +144950 -0
  34. package/dist/lib-HCGLI2GJ.js +4161 -0
  35. package/dist/{telemetry-service-OHU5NKON.js → telemetry-service-76YPOPDM.js} +8 -4
  36. package/package.json +6 -3
@@ -0,0 +1,314 @@
1
+ import {
2
+ fromBuffer
3
+ } from "./chunk-HNLU36CC.js";
4
+ import {
5
+ a2hex,
6
+ findZero
7
+ } from "./chunk-GD35BJSH.js";
8
+ import {
9
+ BasicParser,
10
+ FieldDecodingError,
11
+ InternalParserError,
12
+ StringType,
13
+ UINT16_LE,
14
+ UINT32_LE,
15
+ Uint8ArrayType,
16
+ makeUnexpectedFileContentError,
17
+ require_src,
18
+ textDecode,
19
+ textEncode
20
+ } from "./chunk-VGOIHW7D.js";
21
+ import {
22
+ __toESM
23
+ } from "./chunk-4VNS5WPM.js";
24
+
25
+ // ../../node_modules/.pnpm/music-metadata@11.12.0/node_modules/music-metadata/lib/apev2/APEv2Parser.js
26
+ var import_debug = __toESM(require_src(), 1);
27
+
28
+ // ../../node_modules/.pnpm/music-metadata@11.12.0/node_modules/music-metadata/lib/common/FourCC.js
29
+ var validFourCC = /^[\x21-\x7e©][\x20-\x7e\x00()]{3}/;
30
+ var FourCcToken = {
31
+ len: 4,
32
+ get: (buf, off) => {
33
+ const id = textDecode(buf.subarray(off, off + FourCcToken.len), "latin1");
34
+ if (!id.match(validFourCC)) {
35
+ throw new FieldDecodingError(`FourCC contains invalid characters: ${a2hex(id)} "${id}"`);
36
+ }
37
+ return id;
38
+ },
39
+ put: (buffer, offset, id) => {
40
+ const str = textEncode(id, "latin1");
41
+ if (str.length !== 4)
42
+ throw new InternalParserError("Invalid length");
43
+ buffer.set(str, offset);
44
+ return offset + 4;
45
+ }
46
+ };
47
+
48
+ // ../../node_modules/.pnpm/music-metadata@11.12.0/node_modules/music-metadata/lib/apev2/APEv2Token.js
49
+ var DataType = {
50
+ text_utf8: 0,
51
+ binary: 1,
52
+ external_info: 2,
53
+ reserved: 3
54
+ };
55
+ var DescriptorParser = {
56
+ len: 52,
57
+ get: (buf, off) => {
58
+ return {
59
+ // should equal 'MAC '
60
+ ID: FourCcToken.get(buf, off),
61
+ // versionIndex number * 1000 (3.81 = 3810) (remember that 4-byte alignment causes this to take 4-bytes)
62
+ version: UINT32_LE.get(buf, off + 4) / 1e3,
63
+ // the number of descriptor bytes (allows later expansion of this header)
64
+ descriptorBytes: UINT32_LE.get(buf, off + 8),
65
+ // the number of header APE_HEADER bytes
66
+ headerBytes: UINT32_LE.get(buf, off + 12),
67
+ // the number of header APE_HEADER bytes
68
+ seekTableBytes: UINT32_LE.get(buf, off + 16),
69
+ // the number of header data bytes (from original file)
70
+ headerDataBytes: UINT32_LE.get(buf, off + 20),
71
+ // the number of bytes of APE frame data
72
+ apeFrameDataBytes: UINT32_LE.get(buf, off + 24),
73
+ // the high order number of APE frame data bytes
74
+ apeFrameDataBytesHigh: UINT32_LE.get(buf, off + 28),
75
+ // the terminating data of the file (not including tag data)
76
+ terminatingDataBytes: UINT32_LE.get(buf, off + 32),
77
+ // the MD5 hash of the file (see notes for usage... it's a little tricky)
78
+ fileMD5: new Uint8ArrayType(16).get(buf, off + 36)
79
+ };
80
+ }
81
+ };
82
+ var Header = {
83
+ len: 24,
84
+ get: (buf, off) => {
85
+ return {
86
+ // the compression level (see defines I.E. COMPRESSION_LEVEL_FAST)
87
+ compressionLevel: UINT16_LE.get(buf, off),
88
+ // any format flags (for future use)
89
+ formatFlags: UINT16_LE.get(buf, off + 2),
90
+ // the number of audio blocks in one frame
91
+ blocksPerFrame: UINT32_LE.get(buf, off + 4),
92
+ // the number of audio blocks in the final frame
93
+ finalFrameBlocks: UINT32_LE.get(buf, off + 8),
94
+ // the total number of frames
95
+ totalFrames: UINT32_LE.get(buf, off + 12),
96
+ // the bits per sample (typically 16)
97
+ bitsPerSample: UINT16_LE.get(buf, off + 16),
98
+ // the number of channels (1 or 2)
99
+ channel: UINT16_LE.get(buf, off + 18),
100
+ // the sample rate (typically 44100)
101
+ sampleRate: UINT32_LE.get(buf, off + 20)
102
+ };
103
+ }
104
+ };
105
+ var TagFooter = {
106
+ len: 32,
107
+ get: (buf, off) => {
108
+ return {
109
+ // should equal 'APETAGEX'
110
+ ID: new StringType(8, "ascii").get(buf, off),
111
+ // equals CURRENT_APE_TAG_VERSION
112
+ version: UINT32_LE.get(buf, off + 8),
113
+ // the complete size of the tag, including this footer (excludes header)
114
+ size: UINT32_LE.get(buf, off + 12),
115
+ // the number of fields in the tag
116
+ fields: UINT32_LE.get(buf, off + 16),
117
+ // reserved for later use (must be zero),
118
+ flags: parseTagFlags(UINT32_LE.get(buf, off + 20))
119
+ };
120
+ }
121
+ };
122
+ var TagItemHeader = {
123
+ len: 8,
124
+ get: (buf, off) => {
125
+ return {
126
+ // Length of assigned value in bytes
127
+ size: UINT32_LE.get(buf, off),
128
+ // reserved for later use (must be zero),
129
+ flags: parseTagFlags(UINT32_LE.get(buf, off + 4))
130
+ };
131
+ }
132
+ };
133
+ function parseTagFlags(flags) {
134
+ return {
135
+ containsHeader: isBitSet(flags, 31),
136
+ containsFooter: isBitSet(flags, 30),
137
+ isHeader: isBitSet(flags, 29),
138
+ readOnly: isBitSet(flags, 0),
139
+ dataType: (flags & 6) >> 1
140
+ };
141
+ }
142
+ function isBitSet(num, bit) {
143
+ return (num & 1 << bit) !== 0;
144
+ }
145
+
146
+ // ../../node_modules/.pnpm/music-metadata@11.12.0/node_modules/music-metadata/lib/apev2/APEv2Parser.js
147
+ var debug = (0, import_debug.default)("music-metadata:parser:APEv2");
148
+ var tagFormat = "APEv2";
149
+ var preamble = "APETAGEX";
150
+ var ApeContentError = class extends makeUnexpectedFileContentError("APEv2") {
151
+ };
152
+ function tryParseApeHeader(metadata, tokenizer, options) {
153
+ const apeParser = new APEv2Parser(metadata, tokenizer, options);
154
+ return apeParser.tryParseApeHeader();
155
+ }
156
+ var APEv2Parser = class _APEv2Parser extends BasicParser {
157
+ constructor() {
158
+ super(...arguments);
159
+ this.ape = {};
160
+ }
161
+ /**
162
+ * Calculate the media file duration
163
+ * @param ah ApeHeader
164
+ * @return {number} duration in seconds
165
+ */
166
+ static calculateDuration(ah) {
167
+ let duration = ah.totalFrames > 1 ? ah.blocksPerFrame * (ah.totalFrames - 1) : 0;
168
+ duration += ah.finalFrameBlocks;
169
+ return duration / ah.sampleRate;
170
+ }
171
+ /**
172
+ * Calculates the APEv1 / APEv2 first field offset
173
+ * @param tokenizer
174
+ * @param offset
175
+ */
176
+ static async findApeFooterOffset(tokenizer, offset) {
177
+ const apeBuf = new Uint8Array(TagFooter.len);
178
+ const position = tokenizer.position;
179
+ if (offset <= TagFooter.len) {
180
+ debug(`Offset is too small to read APE footer: offset=${offset}`);
181
+ return void 0;
182
+ }
183
+ if (offset > TagFooter.len) {
184
+ await tokenizer.readBuffer(apeBuf, { position: offset - TagFooter.len });
185
+ tokenizer.setPosition(position);
186
+ const tagFooter = TagFooter.get(apeBuf, 0);
187
+ if (tagFooter.ID === "APETAGEX") {
188
+ if (tagFooter.flags.isHeader) {
189
+ debug(`APE Header found at offset=${offset - TagFooter.len}`);
190
+ } else {
191
+ debug(`APE Footer found at offset=${offset - TagFooter.len}`);
192
+ offset -= tagFooter.size;
193
+ }
194
+ return { footer: tagFooter, offset };
195
+ }
196
+ }
197
+ }
198
+ static parseTagFooter(metadata, buffer, options) {
199
+ const footer = TagFooter.get(buffer, buffer.length - TagFooter.len);
200
+ if (footer.ID !== preamble)
201
+ throw new ApeContentError("Unexpected APEv2 Footer ID preamble value");
202
+ fromBuffer(buffer);
203
+ const apeParser = new _APEv2Parser(metadata, fromBuffer(buffer), options);
204
+ return apeParser.parseTags(footer);
205
+ }
206
+ /**
207
+ * Parse APEv1 / APEv2 header if header signature found
208
+ */
209
+ async tryParseApeHeader() {
210
+ if (this.tokenizer.fileInfo.size && this.tokenizer.fileInfo.size - this.tokenizer.position < TagFooter.len) {
211
+ debug("No APEv2 header found, end-of-file reached");
212
+ return;
213
+ }
214
+ const footer = await this.tokenizer.peekToken(TagFooter);
215
+ if (footer.ID === preamble) {
216
+ await this.tokenizer.ignore(TagFooter.len);
217
+ return this.parseTags(footer);
218
+ }
219
+ debug(`APEv2 header not found at offset=${this.tokenizer.position}`);
220
+ if (this.tokenizer.fileInfo.size) {
221
+ const remaining = this.tokenizer.fileInfo.size - this.tokenizer.position;
222
+ const buffer = new Uint8Array(remaining);
223
+ await this.tokenizer.readBuffer(buffer);
224
+ return _APEv2Parser.parseTagFooter(this.metadata, buffer, this.options);
225
+ }
226
+ }
227
+ async parse() {
228
+ const descriptor = await this.tokenizer.readToken(DescriptorParser);
229
+ if (descriptor.ID !== "MAC ")
230
+ throw new ApeContentError("Unexpected descriptor ID");
231
+ this.ape.descriptor = descriptor;
232
+ const lenExp = descriptor.descriptorBytes - DescriptorParser.len;
233
+ const header = await (lenExp > 0 ? this.parseDescriptorExpansion(lenExp) : this.parseHeader());
234
+ this.metadata.setAudioOnly();
235
+ await this.tokenizer.ignore(header.forwardBytes);
236
+ return this.tryParseApeHeader();
237
+ }
238
+ async parseTags(footer) {
239
+ const keyBuffer = new Uint8Array(256);
240
+ let bytesRemaining = footer.size - TagFooter.len;
241
+ debug(`Parse APE tags at offset=${this.tokenizer.position}, size=${bytesRemaining}`);
242
+ for (let i = 0; i < footer.fields; i++) {
243
+ if (bytesRemaining < TagItemHeader.len) {
244
+ this.metadata.addWarning(`APEv2 Tag-header: ${footer.fields - i} items remaining, but no more tag data to read.`);
245
+ break;
246
+ }
247
+ const tagItemHeader = await this.tokenizer.readToken(TagItemHeader);
248
+ bytesRemaining -= TagItemHeader.len + tagItemHeader.size;
249
+ await this.tokenizer.peekBuffer(keyBuffer, { length: Math.min(keyBuffer.length, bytesRemaining) });
250
+ let zero = findZero(keyBuffer);
251
+ const key = await this.tokenizer.readToken(new StringType(zero, "ascii"));
252
+ await this.tokenizer.ignore(1);
253
+ bytesRemaining -= key.length + 1;
254
+ switch (tagItemHeader.flags.dataType) {
255
+ case DataType.text_utf8: {
256
+ const value = await this.tokenizer.readToken(new StringType(tagItemHeader.size, "utf8"));
257
+ const values = value.split(/\x00/g);
258
+ await Promise.all(values.map((val) => this.metadata.addTag(tagFormat, key, val)));
259
+ break;
260
+ }
261
+ case DataType.binary:
262
+ if (this.options.skipCovers) {
263
+ await this.tokenizer.ignore(tagItemHeader.size);
264
+ } else {
265
+ const picData = new Uint8Array(tagItemHeader.size);
266
+ await this.tokenizer.readBuffer(picData);
267
+ zero = findZero(picData);
268
+ const description = textDecode(picData.subarray(0, zero), "utf-8");
269
+ const data = picData.subarray(zero + 1);
270
+ await this.metadata.addTag(tagFormat, key, {
271
+ description,
272
+ data
273
+ });
274
+ }
275
+ break;
276
+ case DataType.external_info:
277
+ debug(`Ignore external info ${key}`);
278
+ await this.tokenizer.ignore(tagItemHeader.size);
279
+ break;
280
+ case DataType.reserved:
281
+ debug(`Ignore external info ${key}`);
282
+ this.metadata.addWarning(`APEv2 header declares a reserved datatype for "${key}"`);
283
+ await this.tokenizer.ignore(tagItemHeader.size);
284
+ break;
285
+ }
286
+ }
287
+ }
288
+ async parseDescriptorExpansion(lenExp) {
289
+ await this.tokenizer.ignore(lenExp);
290
+ return this.parseHeader();
291
+ }
292
+ async parseHeader() {
293
+ const header = await this.tokenizer.readToken(Header);
294
+ this.metadata.setFormat("lossless", true);
295
+ this.metadata.setFormat("container", "Monkey's Audio");
296
+ this.metadata.setFormat("bitsPerSample", header.bitsPerSample);
297
+ this.metadata.setFormat("sampleRate", header.sampleRate);
298
+ this.metadata.setFormat("numberOfChannels", header.channel);
299
+ this.metadata.setFormat("duration", _APEv2Parser.calculateDuration(header));
300
+ if (!this.ape.descriptor) {
301
+ throw new ApeContentError("Missing APE descriptor");
302
+ }
303
+ return {
304
+ forwardBytes: this.ape.descriptor.seekTableBytes + this.ape.descriptor.headerDataBytes + this.ape.descriptor.apeFrameDataBytes + this.ape.descriptor.terminatingDataBytes
305
+ };
306
+ }
307
+ };
308
+
309
+ export {
310
+ FourCcToken,
311
+ ApeContentError,
312
+ tryParseApeHeader,
313
+ APEv2Parser
314
+ };
@@ -0,0 +1,13 @@
1
+ import {
2
+ getConfigDir,
3
+ loadConfig,
4
+ saveConfig,
5
+ secureDeleteConfig
6
+ } from "./chunk-OPFFFAQC.js";
7
+ import "./chunk-4VNS5WPM.js";
8
+ export {
9
+ getConfigDir,
10
+ loadConfig,
11
+ saveConfig,
12
+ secureDeleteConfig
13
+ };
@@ -5,8 +5,9 @@ import {
5
5
  isTelemetryEnabled,
6
6
  markConsentAsked,
7
7
  setTelemetryConsent
8
- } from "./chunk-M2FF7ETI.js";
9
- import "./chunk-S45VXJEO.js";
8
+ } from "./chunk-J6OLLWVT.js";
9
+ import "./chunk-OPFFFAQC.js";
10
+ import "./chunk-4VNS5WPM.js";
10
11
  export {
11
12
  getAnonymousId,
12
13
  getTelemetryConfig,
@@ -3,6 +3,7 @@ import {
3
3
  cleanupEventBus,
4
4
  emitAgentEvent
5
5
  } from "./chunk-A5UTYKKM.js";
6
+ import "./chunk-4VNS5WPM.js";
6
7
  export {
7
8
  agentEventBus,
8
9
  cleanupEventBus,