@agentdocumentformat/cli 0.7.2

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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -0
  3. package/dist/adf.mjs +162 -0
  4. package/dist/chunks/APEv2Parser-2CNNHMXV.mjs +22 -0
  5. package/dist/chunks/AiffParser-7BR4RL6G.mjs +162 -0
  6. package/dist/chunks/App-L5L37JI5.mjs +16747 -0
  7. package/dist/chunks/AsfParser-VVRSLFOM.mjs +538 -0
  8. package/dist/chunks/DsdiffParser-CMD4AX7A.mjs +156 -0
  9. package/dist/chunks/DsfParser-UOGZDS2M.mjs +94 -0
  10. package/dist/chunks/FlacParser-HB3T3CD4.mjs +23 -0
  11. package/dist/chunks/MP4Parser-66HBRUSX.mjs +973 -0
  12. package/dist/chunks/MatroskaParser-J3HUIMEW.mjs +579 -0
  13. package/dist/chunks/MpegParser-YW6LIUEW.mjs +442 -0
  14. package/dist/chunks/MusepackParser-PAUSXP7D.mjs +252 -0
  15. package/dist/chunks/OggParser-NUBV3GWC.mjs +359 -0
  16. package/dist/chunks/WavPackParser-WQAGT7TC.mjs +171 -0
  17. package/dist/chunks/WaveParser-EWLQVDX4.mjs +238 -0
  18. package/dist/chunks/adf-schema-JRU2BTOG.mjs +62 -0
  19. package/dist/chunks/build-QF5W473T.mjs +60 -0
  20. package/dist/chunks/chatgpt-subscription-BQGWYZXE.mjs +23 -0
  21. package/dist/chunks/chunk-2DIECGFL.mjs +6 -0
  22. package/dist/chunks/chunk-2NAP2ZF7.mjs +60 -0
  23. package/dist/chunks/chunk-3AT7IIP7.mjs +25696 -0
  24. package/dist/chunks/chunk-3GNIDM53.mjs +35 -0
  25. package/dist/chunks/chunk-3M4ZPOA3.mjs +1477 -0
  26. package/dist/chunks/chunk-4MQPTCXY.mjs +510 -0
  27. package/dist/chunks/chunk-5PO5PKRV.mjs +366 -0
  28. package/dist/chunks/chunk-5QU5VY7N.mjs +52 -0
  29. package/dist/chunks/chunk-5W7KES6P.mjs +436 -0
  30. package/dist/chunks/chunk-62NE4LG4.mjs +61 -0
  31. package/dist/chunks/chunk-64OKE4X3.mjs +45 -0
  32. package/dist/chunks/chunk-6GJ4QHRI.mjs +1278 -0
  33. package/dist/chunks/chunk-6VQEXLE2.mjs +144 -0
  34. package/dist/chunks/chunk-6XUV6EK6.mjs +41 -0
  35. package/dist/chunks/chunk-776TSXEP.mjs +43 -0
  36. package/dist/chunks/chunk-7CV2SA3H.mjs +285 -0
  37. package/dist/chunks/chunk-7MTRVW2U.mjs +3103 -0
  38. package/dist/chunks/chunk-7N2R2VCG.mjs +1434 -0
  39. package/dist/chunks/chunk-7T2YMTWL.mjs +374 -0
  40. package/dist/chunks/chunk-7XYNI52E.mjs +149 -0
  41. package/dist/chunks/chunk-APHX6HSV.mjs +7731 -0
  42. package/dist/chunks/chunk-APRU6PHC.mjs +40 -0
  43. package/dist/chunks/chunk-AUYKRQPJ.mjs +499 -0
  44. package/dist/chunks/chunk-DXWDD5XJ.mjs +136 -0
  45. package/dist/chunks/chunk-EWL5FG4I.mjs +39 -0
  46. package/dist/chunks/chunk-EYX2YLJW.mjs +117 -0
  47. package/dist/chunks/chunk-F5ELW46V.mjs +27 -0
  48. package/dist/chunks/chunk-G426FACA.mjs +49 -0
  49. package/dist/chunks/chunk-GEKSJHIV.mjs +2472 -0
  50. package/dist/chunks/chunk-HBUENVQL.mjs +570 -0
  51. package/dist/chunks/chunk-HPVFJYXR.mjs +112 -0
  52. package/dist/chunks/chunk-HWLWPXQ7.mjs +721 -0
  53. package/dist/chunks/chunk-I2HJYHFT.mjs +665 -0
  54. package/dist/chunks/chunk-I3UYSITV.mjs +68 -0
  55. package/dist/chunks/chunk-IC4JDZCI.mjs +3864 -0
  56. package/dist/chunks/chunk-IHDDCZBS.mjs +112 -0
  57. package/dist/chunks/chunk-IIGMZHQQ.mjs +10416 -0
  58. package/dist/chunks/chunk-KWFOS5WC.mjs +41 -0
  59. package/dist/chunks/chunk-LAZIXV2F.mjs +5290 -0
  60. package/dist/chunks/chunk-LFMB4PAA.mjs +10814 -0
  61. package/dist/chunks/chunk-M2RX3S2T.mjs +49 -0
  62. package/dist/chunks/chunk-M3WPIJYM.mjs +65 -0
  63. package/dist/chunks/chunk-NBTUWMGP.mjs +263 -0
  64. package/dist/chunks/chunk-NGK6PVSF.mjs +2676 -0
  65. package/dist/chunks/chunk-NZ7JTHEO.mjs +85 -0
  66. package/dist/chunks/chunk-OQN33RGQ.mjs +52 -0
  67. package/dist/chunks/chunk-RIX34QHC.mjs +2935 -0
  68. package/dist/chunks/chunk-SGUTYISF.mjs +16 -0
  69. package/dist/chunks/chunk-SLJ5L7PY.mjs +1473 -0
  70. package/dist/chunks/chunk-SLUKGXKH.mjs +68 -0
  71. package/dist/chunks/chunk-TMT32MXT.mjs +419 -0
  72. package/dist/chunks/chunk-UYY5M2PB.mjs +151 -0
  73. package/dist/chunks/chunk-VAUOM3IN.mjs +298 -0
  74. package/dist/chunks/chunk-VMHTYDH4.mjs +172 -0
  75. package/dist/chunks/chunk-VZS54AA5.mjs +200 -0
  76. package/dist/chunks/chunk-WFQUVXML.mjs +295 -0
  77. package/dist/chunks/chunk-X34PDRUH.mjs +809 -0
  78. package/dist/chunks/chunk-XNPZBLYL.mjs +33 -0
  79. package/dist/chunks/chunk-XX7OSWTO.mjs +157 -0
  80. package/dist/chunks/chunk-XYTWGHFS.mjs +600 -0
  81. package/dist/chunks/chunk-XYV3VCIX.mjs +336 -0
  82. package/dist/chunks/chunk-Y5ZLKFLE.mjs +1469 -0
  83. package/dist/chunks/chunk-ZJKXHM4Q.mjs +230 -0
  84. package/dist/chunks/cli-TCMBNZF6.mjs +1030 -0
  85. package/dist/chunks/commands-DTEKM4ZL.mjs +20 -0
  86. package/dist/chunks/daemon-ZC3FZ2P4.mjs +112449 -0
  87. package/dist/chunks/daemon-control-WDX7PMTC.mjs +300 -0
  88. package/dist/chunks/daemon-token-WRSULP7G.mjs +23 -0
  89. package/dist/chunks/devtools-H7CI2ZVG.mjs +85 -0
  90. package/dist/chunks/discord-IWDQJA7A.mjs +70588 -0
  91. package/dist/chunks/dist-C57KYFS2.mjs +4952 -0
  92. package/dist/chunks/dist-I3XBAGDL.mjs +11 -0
  93. package/dist/chunks/email-V4Q4VJON.mjs +58679 -0
  94. package/dist/chunks/environment-NX277MQG.mjs +15 -0
  95. package/dist/chunks/grok-subscription-4PYX7TBF.mjs +19 -0
  96. package/dist/chunks/layout-EPJQNFAI.mjs +22 -0
  97. package/dist/chunks/lib-N7FCZWKH.mjs +4038 -0
  98. package/dist/chunks/open-OTQDGDH5.mjs +36 -0
  99. package/dist/chunks/parser-JVY2PWSM.mjs +19 -0
  100. package/dist/chunks/pipeline-executor-BHBSJX2K.mjs +19 -0
  101. package/dist/chunks/react-IUIDQ5LX.mjs +11 -0
  102. package/dist/chunks/screen-54BUTYCW.mjs +27 -0
  103. package/dist/chunks/slack-3L5QTDZX.mjs +8113 -0
  104. package/dist/chunks/store-WR7TZJZS.mjs +32 -0
  105. package/dist/chunks/telegram-5ISVFBV3.mjs +14918 -0
  106. package/dist/chunks/terminal-O5WO7C5U.mjs +48 -0
  107. package/dist/chunks/theme-NORU4J74.mjs +20 -0
  108. package/dist/chunks/themes-F2FKU7CP.mjs +23 -0
  109. package/dist/chunks/token-6G3HCMNX.mjs +54 -0
  110. package/dist/chunks/token-util-UXYSDQIW.mjs +12 -0
  111. package/dist/chunks/tui-ODVYUIMT.mjs +197 -0
  112. package/dist/chunks/welcome-XHXFV7SH.mjs +32 -0
  113. package/dist/chunks/whatsapp-XSAMNGPJ.mjs +85412 -0
  114. package/dist/chunks/xterm-headless-YF53XWXE.mjs +3353 -0
  115. package/package.json +53 -0
  116. package/resources/wasm/coreutils.LICENSE +18 -0
  117. package/resources/wasm/coreutils.wasm +0 -0
@@ -0,0 +1,600 @@
1
+ import { createRequire as __adfCreateRequire } from 'node:module';
2
+ import { fileURLToPath as __adfFileURLToPath } from 'node:url';
3
+ import { dirname as __adfDirname } from 'node:path';
4
+ const require = __adfCreateRequire(import.meta.url);
5
+ const __filename = __adfFileURLToPath(import.meta.url);
6
+ const __dirname = __adfDirname(__filename);
7
+ import {
8
+ Genres
9
+ } from "./chunk-VAUOM3IN.mjs";
10
+ import {
11
+ AttachedPictureType,
12
+ ExtendedHeader,
13
+ ID3v2Header,
14
+ SyncTextHeader,
15
+ TextEncodingToken,
16
+ TextHeader,
17
+ UINT32SYNCSAFE
18
+ } from "./chunk-DXWDD5XJ.mjs";
19
+ import {
20
+ decodeString,
21
+ decodeUintBE,
22
+ findZero,
23
+ getBit
24
+ } from "./chunk-XX7OSWTO.mjs";
25
+ import {
26
+ UINT24_BE,
27
+ UINT32_BE,
28
+ UINT8,
29
+ Uint8ArrayType,
30
+ makeUnexpectedFileContentError,
31
+ textDecode
32
+ } from "./chunk-I2HJYHFT.mjs";
33
+ import {
34
+ require_src
35
+ } from "./chunk-AUYKRQPJ.mjs";
36
+ import {
37
+ __toESM
38
+ } from "./chunk-M2RX3S2T.mjs";
39
+
40
+ // node_modules/music-metadata/lib/id3v2/FrameParser.js
41
+ var import_debug = __toESM(require_src(), 1);
42
+
43
+ // node_modules/music-metadata/lib/id3v2/ID3v2ChapterToken.js
44
+ var ChapterInfo = {
45
+ len: 16,
46
+ get: (buf, off) => {
47
+ let startOffset = UINT32_BE.get(buf, off + 8), endOffset = UINT32_BE.get(buf, off + 12);
48
+ return {
49
+ startTime: UINT32_BE.get(buf, off),
50
+ endTime: UINT32_BE.get(buf, off + 4),
51
+ startOffset: startOffset === 4294967295 ? void 0 : startOffset,
52
+ endOffset: endOffset === 4294967295 ? void 0 : endOffset
53
+ };
54
+ }
55
+ };
56
+
57
+ // node_modules/music-metadata/lib/id3v2/FrameHeader.js
58
+ function getFrameHeaderLength(majorVer) {
59
+ switch (majorVer) {
60
+ case 2:
61
+ return 6;
62
+ case 3:
63
+ case 4:
64
+ return 10;
65
+ default:
66
+ throw makeUnexpectedMajorVersionError(majorVer);
67
+ }
68
+ }
69
+ function readFrameFlags(b, majorVer) {
70
+ return majorVer === 3 ? {
71
+ status: {
72
+ tag_alter_preservation: getBit(b, 0, 7),
73
+ file_alter_preservation: getBit(b, 0, 6),
74
+ read_only: getBit(b, 0, 5)
75
+ },
76
+ format: {
77
+ compression: getBit(b, 1, 7),
78
+ encryption: getBit(b, 1, 6),
79
+ grouping_identity: getBit(b, 1, 5),
80
+ // Unsynchronisation and data-length-indicator do not exist as per-frame flags in ID3v2.3.
81
+ unsynchronisation: !1,
82
+ data_length_indicator: !1
83
+ }
84
+ } : {
85
+ status: {
86
+ tag_alter_preservation: getBit(b, 0, 6),
87
+ file_alter_preservation: getBit(b, 0, 5),
88
+ read_only: getBit(b, 0, 4)
89
+ },
90
+ format: {
91
+ grouping_identity: getBit(b, 1, 6),
92
+ compression: getBit(b, 1, 3),
93
+ encryption: getBit(b, 1, 2),
94
+ unsynchronisation: getBit(b, 1, 1),
95
+ data_length_indicator: getBit(b, 1, 0)
96
+ }
97
+ };
98
+ }
99
+ function readFrameHeader(uint8Array, majorVer, warningCollector) {
100
+ switch (majorVer) {
101
+ case 2:
102
+ return parseFrameHeaderV22(uint8Array, majorVer, warningCollector);
103
+ case 3:
104
+ case 4:
105
+ return parseFrameHeaderV23V24(uint8Array, majorVer, warningCollector);
106
+ default:
107
+ throw makeUnexpectedMajorVersionError(majorVer);
108
+ }
109
+ }
110
+ function parseFrameHeaderV22(uint8Array, majorVer, warningCollector) {
111
+ let header = {
112
+ id: textDecode(uint8Array.subarray(0, 3), "ascii"),
113
+ length: UINT24_BE.get(uint8Array, 3)
114
+ };
115
+ return header.id.match(/^[A-Z0-9]{3}$/) || warningCollector.addWarning(`Invalid ID3v2.${majorVer} frame-header-ID: ${header.id}`), header;
116
+ }
117
+ function parseFrameHeaderV23V24(uint8Array, majorVer, warningCollector) {
118
+ let header = {
119
+ id: textDecode(uint8Array.subarray(0, 4), "ascii"),
120
+ length: (majorVer === 4 ? UINT32SYNCSAFE : UINT32_BE).get(uint8Array, 4),
121
+ flags: readFrameFlags(uint8Array.subarray(8, 10), majorVer)
122
+ };
123
+ return header.id.match(/^[A-Z0-9]{4}$/) || warningCollector.addWarning(`Invalid ID3v2.${majorVer} frame-header-ID: ${header.id}`), header;
124
+ }
125
+ function makeUnexpectedMajorVersionError(majorVer) {
126
+ throw new Id3v2ContentError(`Unexpected majorVer: ${majorVer}`);
127
+ }
128
+
129
+ // node_modules/music-metadata/lib/id3v2/FrameParser.js
130
+ var debug = (0, import_debug.default)("music-metadata:id3v2:frame-parser"), defaultEnc = "latin1", urlEnc = { encoding: defaultEnc, bom: !1 };
131
+ function parseGenre(origVal) {
132
+ let genres = [], code, word = "";
133
+ for (let c of origVal)
134
+ if (typeof code == "string")
135
+ if (c === "(" && code === "")
136
+ word += "(", code = void 0;
137
+ else if (c === ")") {
138
+ word !== "" && (genres.push(word), word = "");
139
+ let genre = parseGenreCode(code);
140
+ genre && genres.push(genre), code = void 0;
141
+ } else
142
+ code += c;
143
+ else c === "(" ? code = "" : word += c;
144
+ return word && (genres.length === 0 && word.match(/^\d*$/) && (word = parseGenreCode(word)), word && genres.push(word)), genres;
145
+ }
146
+ function parseGenreCode(code) {
147
+ if (code === "RX")
148
+ return "Remix";
149
+ if (code === "CR")
150
+ return "Cover";
151
+ if (code.match(/^\d*$/))
152
+ return Genres[Number.parseInt(code, 10)];
153
+ }
154
+ var FrameParser = class _FrameParser {
155
+ /**
156
+ * Create id3v2 frame parser
157
+ * @param major - Major version, e.g. (4) for id3v2.4
158
+ * @param warningCollector - Used to collect decode issue
159
+ */
160
+ constructor(major, warningCollector) {
161
+ this.major = major, this.warningCollector = warningCollector;
162
+ }
163
+ readData(uint8Array, type, includeCovers) {
164
+ if (uint8Array.length === 0) {
165
+ this.warningCollector.addWarning(`id3v2.${this.major} header has empty tag type=${type}`);
166
+ return;
167
+ }
168
+ let { encoding, bom } = TextEncodingToken.get(uint8Array, 0), length = uint8Array.length, offset = 0, output = [], nullTerminatorLength = _FrameParser.getNullTerminatorLength(encoding), fzero;
169
+ switch (debug(`Parsing tag type=${type}, encoding=${encoding}, bom=${bom}`), type !== "TXXX" && type[0] === "T" ? "T*" : type) {
170
+ case "T*":
171
+ // 4.2.1. Text information frames - details
172
+ case "GRP1":
173
+ // iTunes-specific ID3v2 grouping field
174
+ case "GP1":
175
+ // iTunes-specific ID3v2.2 grouping field
176
+ case "IPLS":
177
+ // v2.3: Involved people list
178
+ case "MVIN":
179
+ case "MVNM":
180
+ case "PCS":
181
+ case "PCST": {
182
+ let text;
183
+ try {
184
+ text = _FrameParser.trimNullPadding(decodeString(uint8Array.subarray(1), encoding));
185
+ } catch (error) {
186
+ if (error instanceof Error) {
187
+ this.warningCollector.addWarning(`id3v2.${this.major} type=${type} header has invalid string value: ${error.message}`);
188
+ break;
189
+ }
190
+ throw error;
191
+ }
192
+ switch (type) {
193
+ case "TMCL":
194
+ // Musician credits list
195
+ case "TIPL":
196
+ // Involved people list
197
+ case "IPLS":
198
+ output = _FrameParser.functionList(this.splitValue(type, text));
199
+ break;
200
+ case "TRK":
201
+ case "TRCK":
202
+ case "TPOS":
203
+ case "TIT1":
204
+ case "TIT2":
205
+ case "TIT3":
206
+ output = text;
207
+ break;
208
+ case "TCOM":
209
+ case "TEXT":
210
+ case "TOLY":
211
+ case "TOPE":
212
+ case "TPE1":
213
+ case "TSRC":
214
+ output = this.splitValue(type, text);
215
+ break;
216
+ case "TCO":
217
+ case "TCON":
218
+ output = this.splitValue(type, text).map((v) => parseGenre(v)).reduce((acc, val) => acc.concat(val), []);
219
+ break;
220
+ case "PCS":
221
+ case "PCST":
222
+ output = this.major >= 4 ? this.splitValue(type, text) : [text], output = Array.isArray(output) && output[0] === "" ? 1 : 0;
223
+ break;
224
+ default:
225
+ output = this.major >= 4 ? this.splitValue(type, text) : [text];
226
+ }
227
+ break;
228
+ }
229
+ case "TXXX": {
230
+ let idAndData = _FrameParser.readIdentifierAndData(uint8Array.subarray(1), encoding);
231
+ output = {
232
+ description: idAndData.id,
233
+ text: this.splitValue(type, decodeString(idAndData.data, encoding).replace(/\x00+$/, ""))
234
+ };
235
+ break;
236
+ }
237
+ case "PIC":
238
+ case "APIC":
239
+ if (includeCovers) {
240
+ let pic = {};
241
+ switch (uint8Array = uint8Array.subarray(1), this.major) {
242
+ case 2:
243
+ pic.format = decodeString(uint8Array.subarray(0, 3), "latin1"), uint8Array = uint8Array.subarray(3);
244
+ break;
245
+ case 3:
246
+ case 4:
247
+ fzero = findZero(uint8Array, defaultEnc), pic.format = decodeString(uint8Array.subarray(0, fzero), defaultEnc), uint8Array = uint8Array.subarray(fzero + 1);
248
+ break;
249
+ default:
250
+ throw makeUnexpectedMajorVersionError2(this.major);
251
+ }
252
+ pic.format = _FrameParser.fixPictureMimeType(pic.format), pic.type = AttachedPictureType[uint8Array[0]], uint8Array = uint8Array.subarray(1), fzero = findZero(uint8Array, encoding), pic.description = decodeString(uint8Array.subarray(0, fzero), encoding), uint8Array = uint8Array.subarray(fzero + nullTerminatorLength), pic.data = uint8Array, output = pic;
253
+ }
254
+ break;
255
+ case "CNT":
256
+ case "PCNT":
257
+ output = decodeUintBE(uint8Array);
258
+ break;
259
+ case "SYLT": {
260
+ let syltHeader = SyncTextHeader.get(uint8Array, 0);
261
+ uint8Array = uint8Array.subarray(SyncTextHeader.len);
262
+ let result = {
263
+ descriptor: "",
264
+ language: syltHeader.language,
265
+ contentType: syltHeader.contentType,
266
+ timeStampFormat: syltHeader.timeStampFormat,
267
+ syncText: []
268
+ }, readSyllables = !1;
269
+ for (; uint8Array.length > 0; ) {
270
+ let nullStr = _FrameParser.readNullTerminatedString(uint8Array, syltHeader.encoding);
271
+ if (uint8Array = uint8Array.subarray(nullStr.len), readSyllables) {
272
+ let timestamp = UINT32_BE.get(uint8Array, 0);
273
+ uint8Array = uint8Array.subarray(UINT32_BE.len), result.syncText.push({
274
+ text: nullStr.text,
275
+ timestamp
276
+ });
277
+ } else
278
+ result.descriptor = nullStr.text, readSyllables = !0;
279
+ }
280
+ output = result;
281
+ break;
282
+ }
283
+ case "ULT":
284
+ case "USLT":
285
+ case "COM":
286
+ case "COMM": {
287
+ let textHeader = TextHeader.get(uint8Array, offset);
288
+ offset += TextHeader.len;
289
+ let descriptorStr = _FrameParser.readNullTerminatedString(uint8Array.subarray(offset), textHeader.encoding);
290
+ offset += descriptorStr.len;
291
+ let textStr = _FrameParser.readNullTerminatedString(uint8Array.subarray(offset), textHeader.encoding);
292
+ output = {
293
+ language: textHeader.language,
294
+ descriptor: descriptorStr.text,
295
+ text: textStr.text
296
+ };
297
+ break;
298
+ }
299
+ case "UFID": {
300
+ let ufid = _FrameParser.readIdentifierAndData(uint8Array, defaultEnc);
301
+ output = { owner_identifier: ufid.id, identifier: ufid.data };
302
+ break;
303
+ }
304
+ case "PRIV": {
305
+ let priv = _FrameParser.readIdentifierAndData(uint8Array, defaultEnc);
306
+ output = { owner_identifier: priv.id, data: priv.data };
307
+ break;
308
+ }
309
+ case "POPM": {
310
+ uint8Array = uint8Array.subarray(offset);
311
+ let emailStr = _FrameParser.readNullTerminatedString(uint8Array, urlEnc), email = emailStr.text;
312
+ if (uint8Array = uint8Array.subarray(emailStr.len), uint8Array.length === 0) {
313
+ this.warningCollector.addWarning(`id3v2.${this.major} type=${type} POPM frame missing rating byte`), output = { email, rating: 0, counter: void 0 };
314
+ break;
315
+ }
316
+ let rating = UINT8.get(uint8Array, 0), counterBytes = uint8Array.subarray(UINT8.len);
317
+ output = {
318
+ email,
319
+ rating,
320
+ counter: counterBytes.length > 0 ? decodeUintBE(counterBytes) : void 0
321
+ };
322
+ break;
323
+ }
324
+ case "GEOB": {
325
+ let encoding2 = TextEncodingToken.get(uint8Array, 0);
326
+ uint8Array = uint8Array.subarray(1);
327
+ let mimeTypeStr = _FrameParser.readNullTerminatedString(uint8Array, urlEnc), mimeType = mimeTypeStr.text;
328
+ uint8Array = uint8Array.subarray(mimeTypeStr.len);
329
+ let filenameStr = _FrameParser.readNullTerminatedString(uint8Array, encoding2), filename = filenameStr.text;
330
+ uint8Array = uint8Array.subarray(filenameStr.len);
331
+ let descriptionStr = _FrameParser.readNullTerminatedString(uint8Array, encoding2), description = descriptionStr.text;
332
+ uint8Array = uint8Array.subarray(descriptionStr.len), output = {
333
+ type: mimeType,
334
+ filename,
335
+ description,
336
+ data: uint8Array
337
+ };
338
+ break;
339
+ }
340
+ // W-Frames:
341
+ case "WCOM":
342
+ case "WCOP":
343
+ case "WOAF":
344
+ case "WOAR":
345
+ case "WOAS":
346
+ case "WORS":
347
+ case "WPAY":
348
+ case "WPUB":
349
+ output = _FrameParser.readNullTerminatedString(uint8Array, urlEnc).text;
350
+ break;
351
+ case "WXXX": {
352
+ let encoding2 = TextEncodingToken.get(uint8Array, 0);
353
+ uint8Array = uint8Array.subarray(1);
354
+ let descriptionStr = _FrameParser.readNullTerminatedString(uint8Array, encoding2), description = descriptionStr.text;
355
+ uint8Array = uint8Array.subarray(descriptionStr.len), output = { description, url: _FrameParser.trimNullPadding(decodeString(uint8Array, defaultEnc)) };
356
+ break;
357
+ }
358
+ case "WFD":
359
+ case "WFED": {
360
+ let encoding2 = TextEncodingToken.get(uint8Array, 0);
361
+ uint8Array = uint8Array.subarray(1), output = _FrameParser.readNullTerminatedString(uint8Array, encoding2).text;
362
+ break;
363
+ }
364
+ case "MCDI": {
365
+ output = uint8Array.subarray(0, length);
366
+ break;
367
+ }
368
+ // ID3v2 Chapters 1.0
369
+ // https://mutagen-specs.readthedocs.io/en/latest/id3/id3v2-chapters-1.0.html#chapter-frame
370
+ case "CHAP": {
371
+ debug("Reading CHAP"), fzero = findZero(uint8Array, defaultEnc);
372
+ let chapter = {
373
+ label: decodeString(uint8Array.subarray(0, fzero), defaultEnc),
374
+ info: ChapterInfo.get(uint8Array, fzero + 1),
375
+ frames: /* @__PURE__ */ new Map()
376
+ };
377
+ for (offset += fzero + 1 + ChapterInfo.len; offset < length; ) {
378
+ let subFrame = readFrameHeader(uint8Array.subarray(offset), this.major, this.warningCollector), headerSize = getFrameHeaderLength(this.major);
379
+ offset += headerSize;
380
+ let subOutput = this.readData(uint8Array.subarray(offset, offset + subFrame.length), subFrame.id, includeCovers);
381
+ offset += subFrame.length, chapter.frames.set(subFrame.id, subOutput);
382
+ }
383
+ output = chapter;
384
+ break;
385
+ }
386
+ // ID3v2 Chapters 1.0
387
+ // https://mutagen-specs.readthedocs.io/en/latest/id3/id3v2-chapters-1.0.html#table-of-contents-frame
388
+ case "CTOC": {
389
+ debug("Reading CTOC");
390
+ let idEnd = findZero(uint8Array, defaultEnc), label = decodeString(uint8Array.subarray(0, idEnd), defaultEnc);
391
+ offset = idEnd + 1;
392
+ let flags = uint8Array[offset++], topLevel = (flags & 2) !== 0, ordered = (flags & 1) !== 0, entryCount = uint8Array[offset++], childElementIds = [];
393
+ for (let i = 0; i < entryCount && offset < length; i++) {
394
+ let end = findZero(uint8Array.subarray(offset), defaultEnc), childId = decodeString(uint8Array.subarray(offset, offset + end), defaultEnc);
395
+ childElementIds.push(childId), offset += end + 1;
396
+ }
397
+ let toc = {
398
+ label,
399
+ flags: { topLevel, ordered },
400
+ childElementIds,
401
+ frames: /* @__PURE__ */ new Map()
402
+ };
403
+ for (; offset < length; ) {
404
+ let subFrame = readFrameHeader(uint8Array.subarray(offset), this.major, this.warningCollector), headerSize = getFrameHeaderLength(this.major);
405
+ offset += headerSize;
406
+ let subOutput = this.readData(uint8Array.subarray(offset, offset + subFrame.length), subFrame.id, includeCovers);
407
+ offset += subFrame.length, toc.frames.set(subFrame.id, subOutput);
408
+ }
409
+ output = toc;
410
+ break;
411
+ }
412
+ default:
413
+ debug(`Warning: unsupported id3v2-tag-type: ${type}`);
414
+ break;
415
+ }
416
+ return output;
417
+ }
418
+ static readNullTerminatedString(uint8Array, encoding) {
419
+ let bomSize = encoding.bom ? 2 : 0, originalLen = uint8Array.length, valueArray = uint8Array.subarray(bomSize), zeroIndex = findZero(valueArray, encoding.encoding);
420
+ if (zeroIndex >= valueArray.length)
421
+ return {
422
+ text: decodeString(uint8Array, encoding.encoding),
423
+ len: originalLen
424
+ };
425
+ let txt = uint8Array.subarray(0, bomSize + zeroIndex);
426
+ return {
427
+ text: decodeString(txt, encoding.encoding),
428
+ len: bomSize + zeroIndex + _FrameParser.getNullTerminatorLength(encoding.encoding)
429
+ };
430
+ }
431
+ static fixPictureMimeType(pictureType) {
432
+ switch (pictureType = pictureType.toLocaleLowerCase(), pictureType) {
433
+ case "jpg":
434
+ return "image/jpeg";
435
+ case "png":
436
+ return "image/png";
437
+ }
438
+ return pictureType;
439
+ }
440
+ /**
441
+ * Converts TMCL (Musician credits list) or TIPL (Involved people list)
442
+ * @param entries
443
+ */
444
+ static functionList(entries) {
445
+ let res = {};
446
+ for (let i = 0; i + 1 < entries.length; i += 2) {
447
+ let names = entries[i + 1].split(",");
448
+ res[entries[i]] = res[entries[i]] ? res[entries[i]].concat(names) : names;
449
+ }
450
+ return res;
451
+ }
452
+ /**
453
+ * id3v2.4 defines that multiple T* values are separated by 0x00
454
+ * id3v2.3 defines that TCOM, TEXT, TOLY, TOPE & TPE1 values are separated by /
455
+ * @param tag - Tag name
456
+ * @param text - Concatenated tag value
457
+ * @returns Split tag value
458
+ */
459
+ splitValue(tag, text) {
460
+ let values;
461
+ return this.major < 4 ? (values = text.split(/\x00/g), values.length > 1 ? this.warningCollector.addWarning(`ID3v2.${this.major} ${tag} uses non standard null-separator.`) : values = text.split(/\//g)) : values = text.split(/\x00/g), _FrameParser.trimArray(values);
462
+ }
463
+ static trimArray(values) {
464
+ return values.map((value) => _FrameParser.trimNullPadding(value).trim());
465
+ }
466
+ static trimNullPadding(value) {
467
+ let end = value.length;
468
+ for (; end > 0 && value.charCodeAt(end - 1) === 0; )
469
+ end--;
470
+ return end === value.length ? value : value.slice(0, end);
471
+ }
472
+ static readIdentifierAndData(uint8Array, encoding) {
473
+ let idStr = _FrameParser.readNullTerminatedString(uint8Array, { encoding, bom: !1 });
474
+ return { id: idStr.text, data: uint8Array.subarray(idStr.len) };
475
+ }
476
+ static getNullTerminatorLength(enc) {
477
+ return enc.startsWith("utf-16") ? 2 : 1;
478
+ }
479
+ }, Id3v2ContentError = class extends makeUnexpectedFileContentError("id3v2") {
480
+ };
481
+ function makeUnexpectedMajorVersionError2(majorVer) {
482
+ throw new Id3v2ContentError(`Unexpected majorVer: ${majorVer}`);
483
+ }
484
+
485
+ // node_modules/music-metadata/lib/id3v2/ID3v2Parser.js
486
+ var ID3v2Parser = class _ID3v2Parser {
487
+ constructor() {
488
+ this.tokenizer = void 0, this.id3Header = void 0, this.metadata = void 0, this.headerType = void 0, this.options = void 0;
489
+ }
490
+ static removeUnsyncBytes(buffer) {
491
+ let readI = 0, writeI = 0;
492
+ for (; readI < buffer.length - 1; )
493
+ readI !== writeI && (buffer[writeI] = buffer[readI]), readI += buffer[readI] === 255 && buffer[readI + 1] === 0 ? 2 : 1, writeI++;
494
+ return readI < buffer.length && (buffer[writeI++] = buffer[readI]), buffer.subarray(0, writeI);
495
+ }
496
+ static readFrameData(uint8Array, frameHeader, majorVer, includeCovers, warningCollector) {
497
+ let frameParser = new FrameParser(majorVer, warningCollector);
498
+ switch (majorVer) {
499
+ case 2:
500
+ return frameParser.readData(uint8Array, frameHeader.id, includeCovers);
501
+ case 3:
502
+ case 4:
503
+ return frameHeader.flags?.format.unsynchronisation && (uint8Array = _ID3v2Parser.removeUnsyncBytes(uint8Array)), frameHeader.flags?.format.data_length_indicator && (uint8Array = uint8Array.subarray(4, uint8Array.length)), frameParser.readData(uint8Array, frameHeader.id, includeCovers);
504
+ default:
505
+ throw makeUnexpectedMajorVersionError3(majorVer);
506
+ }
507
+ }
508
+ /**
509
+ * Create a combined tag key, of tag & description
510
+ * @param tag e.g.: COM
511
+ * @param description e.g. iTunPGAP
512
+ * @returns string e.g. COM:iTunPGAP
513
+ */
514
+ static makeDescriptionTagName(tag, description) {
515
+ return tag + (description ? `:${description}` : "");
516
+ }
517
+ async parse(metadata, tokenizer, options) {
518
+ this.tokenizer = tokenizer, this.metadata = metadata, this.options = options;
519
+ let id3Header = await this.tokenizer.readToken(ID3v2Header);
520
+ if (id3Header.fileIdentifier !== "ID3")
521
+ throw new Id3v2ContentError("expected ID3-header file-identifier 'ID3' was not found");
522
+ this.id3Header = id3Header, this.headerType = `ID3v2.${id3Header.version.major}`, await (id3Header.flags.isExtendedHeader ? this.parseExtendedHeader() : this.parseId3Data(id3Header.size));
523
+ let chapters = _ID3v2Parser.mapId3v2Chapters(this.metadata.native[this.headerType]);
524
+ this.metadata.setFormat("chapters", chapters);
525
+ }
526
+ async parseExtendedHeader() {
527
+ let extendedHeader = await this.tokenizer.readToken(ExtendedHeader), dataRemaining = extendedHeader.size - ExtendedHeader.len;
528
+ return dataRemaining > 0 ? this.parseExtendedHeaderData(dataRemaining, extendedHeader.size) : this.parseId3Data(this.id3Header.size - extendedHeader.size);
529
+ }
530
+ async parseExtendedHeaderData(dataRemaining, extendedHeaderSize) {
531
+ return await this.tokenizer.ignore(dataRemaining), this.parseId3Data(this.id3Header.size - extendedHeaderSize);
532
+ }
533
+ async parseId3Data(dataLen) {
534
+ let uint8Array = await this.tokenizer.readToken(new Uint8ArrayType(dataLen));
535
+ for (let tag of this.parseMetadata(uint8Array))
536
+ tag.id === "TXXX" ? tag.value && await this.handleTag(tag, tag.value.text, () => tag.value.description) : await (Array.isArray(tag.value) ? Promise.all(tag.value.map((value) => this.addTag(tag.id, value))) : this.addTag(tag.id, tag.value));
537
+ }
538
+ async handleTag(tag, values, descriptor, resolveValue = (value) => value) {
539
+ await Promise.all(values.map((value) => this.addTag(_ID3v2Parser.makeDescriptionTagName(tag.id, descriptor(value)), resolveValue(value))));
540
+ }
541
+ async addTag(id, value) {
542
+ await this.metadata.addTag(this.headerType, id, value);
543
+ }
544
+ parseMetadata(data) {
545
+ let offset = 0, tags = [];
546
+ for (; offset !== data.length; ) {
547
+ let frameHeaderLength = getFrameHeaderLength(this.id3Header.version.major);
548
+ if (offset + frameHeaderLength > data.length) {
549
+ this.metadata.addWarning("Illegal ID3v2 tag length");
550
+ break;
551
+ }
552
+ let frameHeaderBytes = data.subarray(offset, offset + frameHeaderLength);
553
+ offset += frameHeaderLength;
554
+ let frameHeader = readFrameHeader(frameHeaderBytes, this.id3Header.version.major, this.metadata), frameDataBytes = data.subarray(offset, offset + frameHeader.length);
555
+ offset += frameHeader.length;
556
+ let values = _ID3v2Parser.readFrameData(frameDataBytes, frameHeader, this.id3Header.version.major, !this.options.skipCovers, this.metadata);
557
+ values && tags.push({ id: frameHeader.id, value: values });
558
+ }
559
+ return tags;
560
+ }
561
+ /**
562
+ * Convert parsed ID3v2 chapter frames (CHAP / CTOC) to generic `format.chapters`.
563
+ *
564
+ * This function expects the `native` tags already to contain parsed `CHAP` and `CTOC` frame values,
565
+ * as produced by `FrameParser.readData`.
566
+ */
567
+ static mapId3v2Chapters(id3Tags) {
568
+ if (!id3Tags)
569
+ return;
570
+ let chapFrames = id3Tags.filter((t) => t.id === "CHAP");
571
+ if (!chapFrames?.length)
572
+ return;
573
+ let topLevelToc = id3Tags.filter((t) => t.id === "CTOC")?.find((t) => t.value.flags?.topLevel), chapterById = /* @__PURE__ */ new Map();
574
+ for (let chap of chapFrames)
575
+ chapterById.set(chap.value.label, chap.value);
576
+ let orderedIds = topLevelToc?.value.childElementIds, chapters = [], source = orderedIds ?? [...chapterById.keys()];
577
+ for (let id of source) {
578
+ let chap = chapterById.get(id);
579
+ if (!chap)
580
+ continue;
581
+ let frames = chap.frames, title = frames.get("TIT2");
582
+ title && chapters.push({
583
+ id,
584
+ title,
585
+ url: frames.get("WXXX"),
586
+ start: chap.info.startTime / 1e3,
587
+ end: chap.info.endTime / 1e3,
588
+ image: frames.get("APIC")
589
+ });
590
+ }
591
+ return orderedIds || chapters.sort((a, b) => a.start - b.start), chapters.length ? chapters : void 0;
592
+ }
593
+ };
594
+ function makeUnexpectedMajorVersionError3(majorVer) {
595
+ throw new Id3v2ContentError(`Unexpected majorVer: ${majorVer}`);
596
+ }
597
+
598
+ export {
599
+ ID3v2Parser
600
+ };