Content-addressed version deploy system for Diffuse elements.diffuse.sh
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: deploy 4.0.0-alpha update

+8896 -1
+4
artifacts/artifacts.json
··· 18 18 "bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da": { 19 19 "cid": "bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da", 20 20 "version": "4.0.0-alpha" 21 + }, 22 + "bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm": { 23 + "cid": "bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm", 24 + "version": "4.0.0-alpha" 21 25 } 22 26 }
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/APEv2Parser-7M4PAZ3N.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/APEv2Parser-7M4PAZ3N.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/APEv2Parser-7M4PAZ3N.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/APEv2Parser-7M4PAZ3N.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/AiffParser-EXCORBCX.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/AiffParser-EXCORBCX.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/AiffParser-EXCORBCX.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/AiffParser-EXCORBCX.js.map
+670
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/AsfParser-ADNDJMPT.js
··· 1 + import "./chunk-L3PGUTA5.js"; 2 + import { 3 + AttachedPictureType 4 + } from "./chunk-SGG7NSCF.js"; 5 + import { 6 + TrackType 7 + } from "./chunk-7OCWG5AW.js"; 8 + import { 9 + decodeString, 10 + getBit, 11 + stripNulls 12 + } from "./chunk-6AX6SYMQ.js"; 13 + import { 14 + BasicParser, 15 + StringType, 16 + UINT16_LE, 17 + UINT32_LE, 18 + UINT64_LE, 19 + makeUnexpectedFileContentError, 20 + require_src 21 + } from "./chunk-ETGVMC2T.js"; 22 + import { 23 + __name, 24 + __toESM 25 + } from "./chunk-7IARE43G.js"; 26 + 27 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfParser.js 28 + var import_debug = __toESM(require_src()); 29 + 30 + // ../node_modules/.deno/win-guid@0.1.3/node_modules/win-guid/lib/guid.js 31 + function parseWindowsGuid(guid) { 32 + let s = guid.trim(); 33 + if (s.length !== 36 || s[8] !== "-" || s[13] !== "-" || s[18] !== "-" || s[23] !== "-") { 34 + throw new Error(`Invalid GUID format: ${guid}`); 35 + } 36 + let v; 37 + const out = new Uint8Array(16); 38 + v = parseInt(s.slice(0, 8), 16); 39 + out[0] = v & 255; 40 + out[1] = v >>> 8 & 255; 41 + out[2] = v >>> 16 & 255; 42 + out[3] = v >>> 24 & 255; 43 + v = parseInt(s.slice(9, 13), 16); 44 + out[4] = v & 255; 45 + out[5] = v >>> 8 & 255; 46 + v = parseInt(s.slice(14, 18), 16); 47 + out[6] = v & 255; 48 + out[7] = v >>> 8 & 255; 49 + v = parseInt(s.slice(19, 23), 16); 50 + out[8] = v >>> 8 & 255; 51 + out[9] = v & 255; 52 + v = parseInt(s.slice(24, 32), 16); 53 + out[10] = v >>> 24 & 255; 54 + out[11] = v >>> 16 & 255; 55 + out[12] = v >>> 8 & 255; 56 + out[13] = v & 255; 57 + v = parseInt(s.slice(32, 36), 16); 58 + out[14] = v >>> 8 & 255; 59 + out[15] = v & 255; 60 + for (let i = 0; i < 16; i++) { 61 + if (!Number.isFinite(out[i])) { 62 + throw new Error(`Invalid GUID format: ${guid}`); 63 + } 64 + } 65 + if (!/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(s)) { 66 + throw new Error(`Invalid GUID format: ${guid}`); 67 + } 68 + return out; 69 + } 70 + __name(parseWindowsGuid, "parseWindowsGuid"); 71 + var Guid = class _Guid { 72 + static { 73 + __name(this, "Guid"); 74 + } 75 + constructor(bytes) { 76 + if (bytes.length !== 16) 77 + throw new Error("GUID must be exactly 16 bytes"); 78 + this.bytes = bytes; 79 + } 80 + static fromString(guid) { 81 + return new _Guid(parseWindowsGuid(guid)); 82 + } 83 + /** 84 + * Convert Windows / CFBF byte order into canonical GUID string: 85 + * xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 86 + */ 87 + toString() { 88 + const b = this.bytes; 89 + const hx = /* @__PURE__ */ __name((n) => n.toString(16).padStart(2, "0"), "hx"); 90 + const g1 = hx(b[3]) + hx(b[2]) + hx(b[1]) + hx(b[0]); 91 + const g2 = hx(b[5]) + hx(b[4]); 92 + const g3 = hx(b[7]) + hx(b[6]); 93 + const g4 = hx(b[8]) + hx(b[9]); 94 + const g5 = hx(b[10]) + hx(b[11]) + hx(b[12]) + hx(b[13]) + hx(b[14]) + hx(b[15]); 95 + return `${g1}-${g2}-${g3}-${g4}-${g5}`.toUpperCase(); 96 + } 97 + /** 98 + * Compare against a Uint8Array containing GUID bytes 99 + * in Windows / CFBF layout. 100 + */ 101 + equals(buf, offset = 0) { 102 + if (offset < 0 || buf.length - offset < 16) 103 + return false; 104 + const a = this.bytes; 105 + for (let i = 0; i < 16; i++) { 106 + if (buf[offset + i] !== a[i]) 107 + return false; 108 + } 109 + return true; 110 + } 111 + }; 112 + 113 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfGuid.js 114 + var AsfGuid = class _AsfGuid { 115 + static { 116 + __name(this, "AsfGuid"); 117 + } 118 + static fromBin(bin, offset = 0) { 119 + return new _AsfGuid(_AsfGuid.decode(bin, offset)); 120 + } 121 + /** 122 + * Decode GUID in format like "B503BF5F-2EA9-CF11-8EE3-00C00C205365" 123 + * @param objectId Binary GUID 124 + * @param offset Read offset in bytes, default 0 125 + * @returns GUID as dashed hexadecimal representation 126 + */ 127 + static decode(objectId, offset = 0) { 128 + return new Guid(objectId.subarray(offset, offset + 16)).toString(); 129 + } 130 + /** 131 + * Decode stream type 132 + * @param mediaType Media type GUID 133 + * @returns Media type 134 + */ 135 + static decodeMediaType(mediaType) { 136 + switch (mediaType.str) { 137 + case _AsfGuid.AudioMedia.str: 138 + return "audio"; 139 + case _AsfGuid.VideoMedia.str: 140 + return "video"; 141 + case _AsfGuid.CommandMedia.str: 142 + return "command"; 143 + case _AsfGuid.Degradable_JPEG_Media.str: 144 + return "degradable-jpeg"; 145 + case _AsfGuid.FileTransferMedia.str: 146 + return "file-transfer"; 147 + case _AsfGuid.BinaryMedia.str: 148 + return "binary"; 149 + } 150 + } 151 + /** 152 + * Encode GUID 153 + * @param guid GUID like: "B503BF5F-2EA9-CF11-8EE3-00C00C205365" 154 + * @returns Encoded Binary GUID 155 + */ 156 + static encode(guid) { 157 + return parseWindowsGuid(guid); 158 + } 159 + constructor(str) { 160 + this.str = str; 161 + } 162 + equals(guid) { 163 + return this.str === guid.str; 164 + } 165 + toBin() { 166 + return _AsfGuid.encode(this.str); 167 + } 168 + }; 169 + AsfGuid.HeaderObject = new AsfGuid("75B22630-668E-11CF-A6D9-00AA0062CE6C"); 170 + AsfGuid.DataObject = new AsfGuid("75B22636-668E-11CF-A6D9-00AA0062CE6C"); 171 + AsfGuid.SimpleIndexObject = new AsfGuid("33000890-E5B1-11CF-89F4-00A0C90349CB"); 172 + AsfGuid.IndexObject = new AsfGuid("D6E229D3-35DA-11D1-9034-00A0C90349BE"); 173 + AsfGuid.MediaObjectIndexObject = new AsfGuid("FEB103F8-12AD-4C64-840F-2A1D2F7AD48C"); 174 + AsfGuid.TimecodeIndexObject = new AsfGuid("3CB73FD0-0C4A-4803-953D-EDF7B6228F0C"); 175 + AsfGuid.FilePropertiesObject = new AsfGuid("8CABDCA1-A947-11CF-8EE4-00C00C205365"); 176 + AsfGuid.StreamPropertiesObject = new AsfGuid("B7DC0791-A9B7-11CF-8EE6-00C00C205365"); 177 + AsfGuid.HeaderExtensionObject = new AsfGuid("5FBF03B5-A92E-11CF-8EE3-00C00C205365"); 178 + AsfGuid.CodecListObject = new AsfGuid("86D15240-311D-11D0-A3A4-00A0C90348F6"); 179 + AsfGuid.ScriptCommandObject = new AsfGuid("1EFB1A30-0B62-11D0-A39B-00A0C90348F6"); 180 + AsfGuid.MarkerObject = new AsfGuid("F487CD01-A951-11CF-8EE6-00C00C205365"); 181 + AsfGuid.BitrateMutualExclusionObject = new AsfGuid("D6E229DC-35DA-11D1-9034-00A0C90349BE"); 182 + AsfGuid.ErrorCorrectionObject = new AsfGuid("75B22635-668E-11CF-A6D9-00AA0062CE6C"); 183 + AsfGuid.ContentDescriptionObject = new AsfGuid("75B22633-668E-11CF-A6D9-00AA0062CE6C"); 184 + AsfGuid.ExtendedContentDescriptionObject = new AsfGuid("D2D0A440-E307-11D2-97F0-00A0C95EA850"); 185 + AsfGuid.ContentBrandingObject = new AsfGuid("2211B3FA-BD23-11D2-B4B7-00A0C955FC6E"); 186 + AsfGuid.StreamBitratePropertiesObject = new AsfGuid("7BF875CE-468D-11D1-8D82-006097C9A2B2"); 187 + AsfGuid.ContentEncryptionObject = new AsfGuid("2211B3FB-BD23-11D2-B4B7-00A0C955FC6E"); 188 + AsfGuid.ExtendedContentEncryptionObject = new AsfGuid("298AE614-2622-4C17-B935-DAE07EE9289C"); 189 + AsfGuid.DigitalSignatureObject = new AsfGuid("2211B3FC-BD23-11D2-B4B7-00A0C955FC6E"); 190 + AsfGuid.PaddingObject = new AsfGuid("1806D474-CADF-4509-A4BA-9AABCB96AAE8"); 191 + AsfGuid.ExtendedStreamPropertiesObject = new AsfGuid("14E6A5CB-C672-4332-8399-A96952065B5A"); 192 + AsfGuid.AdvancedMutualExclusionObject = new AsfGuid("A08649CF-4775-4670-8A16-6E35357566CD"); 193 + AsfGuid.GroupMutualExclusionObject = new AsfGuid("D1465A40-5A79-4338-B71B-E36B8FD6C249"); 194 + AsfGuid.StreamPrioritizationObject = new AsfGuid("D4FED15B-88D3-454F-81F0-ED5C45999E24"); 195 + AsfGuid.BandwidthSharingObject = new AsfGuid("A69609E6-517B-11D2-B6AF-00C04FD908E9"); 196 + AsfGuid.LanguageListObject = new AsfGuid("7C4346A9-EFE0-4BFC-B229-393EDE415C85"); 197 + AsfGuid.MetadataObject = new AsfGuid("C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA"); 198 + AsfGuid.MetadataLibraryObject = new AsfGuid("44231C94-9498-49D1-A141-1D134E457054"); 199 + AsfGuid.IndexParametersObject = new AsfGuid("D6E229DF-35DA-11D1-9034-00A0C90349BE"); 200 + AsfGuid.MediaObjectIndexParametersObject = new AsfGuid("6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7"); 201 + AsfGuid.TimecodeIndexParametersObject = new AsfGuid("F55E496D-9797-4B5D-8C8B-604DFE9BFB24"); 202 + AsfGuid.CompatibilityObject = new AsfGuid("26F18B5D-4584-47EC-9F5F-0E651F0452C9"); 203 + AsfGuid.AdvancedContentEncryptionObject = new AsfGuid("43058533-6981-49E6-9B74-AD12CB86D58C"); 204 + AsfGuid.AudioMedia = new AsfGuid("F8699E40-5B4D-11CF-A8FD-00805F5C442B"); 205 + AsfGuid.VideoMedia = new AsfGuid("BC19EFC0-5B4D-11CF-A8FD-00805F5C442B"); 206 + AsfGuid.CommandMedia = new AsfGuid("59DACFC0-59E6-11D0-A3AC-00A0C90348F6"); 207 + AsfGuid.JFIF_Media = new AsfGuid("B61BE100-5B4E-11CF-A8FD-00805F5C442B"); 208 + AsfGuid.Degradable_JPEG_Media = new AsfGuid("35907DE0-E415-11CF-A917-00805F5C442B"); 209 + AsfGuid.FileTransferMedia = new AsfGuid("91BD222C-F21C-497A-8B6D-5AA86BFC0185"); 210 + AsfGuid.BinaryMedia = new AsfGuid("3AFB65E2-47EF-40F2-AC2C-70A90D71D343"); 211 + AsfGuid.ASF_Index_Placeholder_Object = new AsfGuid("D9AADE20-7C17-4F9C-BC28-8555DD98E2A2"); 212 + var AsfGuid_default = AsfGuid; 213 + 214 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfUtil.js 215 + function getParserForAttr(i) { 216 + return attributeParsers[i]; 217 + } 218 + __name(getParserForAttr, "getParserForAttr"); 219 + function parseUnicodeAttr(uint8Array) { 220 + return stripNulls(decodeString(uint8Array, "utf-16le")); 221 + } 222 + __name(parseUnicodeAttr, "parseUnicodeAttr"); 223 + var attributeParsers = [ 224 + parseUnicodeAttr, 225 + parseByteArrayAttr, 226 + parseBoolAttr, 227 + parseDWordAttr, 228 + parseQWordAttr, 229 + parseWordAttr, 230 + parseByteArrayAttr 231 + ]; 232 + function parseByteArrayAttr(buf) { 233 + return new Uint8Array(buf); 234 + } 235 + __name(parseByteArrayAttr, "parseByteArrayAttr"); 236 + function parseBoolAttr(buf, offset = 0) { 237 + return parseWordAttr(buf, offset) === 1; 238 + } 239 + __name(parseBoolAttr, "parseBoolAttr"); 240 + function parseDWordAttr(buf, offset = 0) { 241 + return UINT32_LE.get(buf, offset); 242 + } 243 + __name(parseDWordAttr, "parseDWordAttr"); 244 + function parseQWordAttr(buf, offset = 0) { 245 + return UINT64_LE.get(buf, offset); 246 + } 247 + __name(parseQWordAttr, "parseQWordAttr"); 248 + function parseWordAttr(buf, offset = 0) { 249 + return UINT16_LE.get(buf, offset); 250 + } 251 + __name(parseWordAttr, "parseWordAttr"); 252 + 253 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfObject.js 254 + var AsfContentParseError = class extends makeUnexpectedFileContentError("ASF") { 255 + static { 256 + __name(this, "AsfContentParseError"); 257 + } 258 + }; 259 + var TopLevelHeaderObjectToken = { 260 + len: 30, 261 + get: /* @__PURE__ */ __name((buf, off) => { 262 + return { 263 + objectId: AsfGuid_default.fromBin(buf, off), 264 + objectSize: Number(UINT64_LE.get(buf, off + 16)), 265 + numberOfHeaderObjects: UINT32_LE.get(buf, off + 24) 266 + // Reserved: 2 bytes 267 + }; 268 + }, "get") 269 + }; 270 + var HeaderObjectToken = { 271 + len: 24, 272 + get: /* @__PURE__ */ __name((buf, off) => { 273 + return { 274 + objectId: AsfGuid_default.fromBin(buf, off), 275 + objectSize: Number(UINT64_LE.get(buf, off + 16)) 276 + }; 277 + }, "get") 278 + }; 279 + var State = class { 280 + static { 281 + __name(this, "State"); 282 + } 283 + constructor(header) { 284 + this.len = Number(header.objectSize) - HeaderObjectToken.len; 285 + } 286 + postProcessTag(tags, name, valueType, data) { 287 + if (name === "WM/Picture") { 288 + tags.push({ id: name, value: WmPictureToken.fromBuffer(data) }); 289 + } else { 290 + const parseAttr = getParserForAttr(valueType); 291 + if (!parseAttr) { 292 + throw new AsfContentParseError(`unexpected value headerType: ${valueType}`); 293 + } 294 + tags.push({ id: name, value: parseAttr(data) }); 295 + } 296 + } 297 + }; 298 + var IgnoreObjectState = class extends State { 299 + static { 300 + __name(this, "IgnoreObjectState"); 301 + } 302 + get(_buf, _off) { 303 + return null; 304 + } 305 + }; 306 + var FilePropertiesObject = class extends State { 307 + static { 308 + __name(this, "FilePropertiesObject"); 309 + } 310 + get(buf, off) { 311 + return { 312 + fileId: AsfGuid_default.fromBin(buf, off), 313 + fileSize: UINT64_LE.get(buf, off + 16), 314 + creationDate: UINT64_LE.get(buf, off + 24), 315 + dataPacketsCount: UINT64_LE.get(buf, off + 32), 316 + playDuration: UINT64_LE.get(buf, off + 40), 317 + sendDuration: UINT64_LE.get(buf, off + 48), 318 + preroll: UINT64_LE.get(buf, off + 56), 319 + flags: { 320 + broadcast: getBit(buf, off + 64, 24), 321 + seekable: getBit(buf, off + 64, 25) 322 + }, 323 + // flagsNumeric: Token.UINT32_LE.get(buf, off + 64), 324 + minimumDataPacketSize: UINT32_LE.get(buf, off + 68), 325 + maximumDataPacketSize: UINT32_LE.get(buf, off + 72), 326 + maximumBitrate: UINT32_LE.get(buf, off + 76) 327 + }; 328 + } 329 + }; 330 + FilePropertiesObject.guid = AsfGuid_default.FilePropertiesObject; 331 + var StreamPropertiesObject = class extends State { 332 + static { 333 + __name(this, "StreamPropertiesObject"); 334 + } 335 + get(buf, off) { 336 + return { 337 + streamType: AsfGuid_default.decodeMediaType(AsfGuid_default.fromBin(buf, off)), 338 + errorCorrectionType: AsfGuid_default.fromBin(buf, off + 8) 339 + // ToDo 340 + }; 341 + } 342 + }; 343 + StreamPropertiesObject.guid = AsfGuid_default.StreamPropertiesObject; 344 + var HeaderExtensionObject = class { 345 + static { 346 + __name(this, "HeaderExtensionObject"); 347 + } 348 + constructor() { 349 + this.len = 22; 350 + } 351 + get(buf, off) { 352 + const view = new DataView(buf.buffer, off); 353 + return { 354 + reserved1: AsfGuid_default.fromBin(buf, off), 355 + reserved2: view.getUint16(16, true), 356 + extensionDataSize: view.getUint16(18, true) 357 + }; 358 + } 359 + }; 360 + HeaderExtensionObject.guid = AsfGuid_default.HeaderExtensionObject; 361 + var CodecListObjectHeader = { 362 + len: 20, 363 + get: /* @__PURE__ */ __name((buf, off) => { 364 + const view = new DataView(buf.buffer, off); 365 + return { 366 + entryCount: view.getUint16(16, true) 367 + }; 368 + }, "get") 369 + }; 370 + async function readString(tokenizer) { 371 + const length = await tokenizer.readNumber(UINT16_LE); 372 + return (await tokenizer.readToken(new StringType(length * 2, "utf-16le"))).replace("\0", ""); 373 + } 374 + __name(readString, "readString"); 375 + async function readCodecEntries(tokenizer) { 376 + const codecHeader = await tokenizer.readToken(CodecListObjectHeader); 377 + const entries = []; 378 + for (let i = 0; i < codecHeader.entryCount; ++i) { 379 + entries.push(await readCodecEntry(tokenizer)); 380 + } 381 + return entries; 382 + } 383 + __name(readCodecEntries, "readCodecEntries"); 384 + async function readInformation(tokenizer) { 385 + const length = await tokenizer.readNumber(UINT16_LE); 386 + const buf = new Uint8Array(length); 387 + await tokenizer.readBuffer(buf); 388 + return buf; 389 + } 390 + __name(readInformation, "readInformation"); 391 + async function readCodecEntry(tokenizer) { 392 + const type = await tokenizer.readNumber(UINT16_LE); 393 + return { 394 + type: { 395 + videoCodec: (type & 1) === 1, 396 + audioCodec: (type & 2) === 2 397 + }, 398 + codecName: await readString(tokenizer), 399 + description: await readString(tokenizer), 400 + information: await readInformation(tokenizer) 401 + }; 402 + } 403 + __name(readCodecEntry, "readCodecEntry"); 404 + var ContentDescriptionObjectState = class _ContentDescriptionObjectState extends State { 405 + static { 406 + __name(this, "ContentDescriptionObjectState"); 407 + } 408 + get(buf, off) { 409 + const tags = []; 410 + const view = new DataView(buf.buffer, off); 411 + let pos = 10; 412 + for (let i = 0; i < _ContentDescriptionObjectState.contentDescTags.length; ++i) { 413 + const length = view.getUint16(i * 2, true); 414 + if (length > 0) { 415 + const tagName = _ContentDescriptionObjectState.contentDescTags[i]; 416 + const end = pos + length; 417 + tags.push({ id: tagName, value: parseUnicodeAttr(buf.subarray(off + pos, off + end)) }); 418 + pos = end; 419 + } 420 + } 421 + return tags; 422 + } 423 + }; 424 + ContentDescriptionObjectState.guid = AsfGuid_default.ContentDescriptionObject; 425 + ContentDescriptionObjectState.contentDescTags = ["Title", "Author", "Copyright", "Description", "Rating"]; 426 + var ExtendedContentDescriptionObjectState = class extends State { 427 + static { 428 + __name(this, "ExtendedContentDescriptionObjectState"); 429 + } 430 + get(buf, off) { 431 + const tags = []; 432 + const view = new DataView(buf.buffer, off); 433 + const attrCount = view.getUint16(0, true); 434 + let pos = 2; 435 + for (let i = 0; i < attrCount; i += 1) { 436 + const nameLen = view.getUint16(pos, true); 437 + pos += 2; 438 + const name = parseUnicodeAttr(buf.subarray(off + pos, off + pos + nameLen)); 439 + pos += nameLen; 440 + const valueType = view.getUint16(pos, true); 441 + pos += 2; 442 + const valueLen = view.getUint16(pos, true); 443 + pos += 2; 444 + const value = buf.subarray(off + pos, off + pos + valueLen); 445 + pos += valueLen; 446 + this.postProcessTag(tags, name, valueType, value); 447 + } 448 + return tags; 449 + } 450 + }; 451 + ExtendedContentDescriptionObjectState.guid = AsfGuid_default.ExtendedContentDescriptionObject; 452 + var ExtendedStreamPropertiesObjectState = class extends State { 453 + static { 454 + __name(this, "ExtendedStreamPropertiesObjectState"); 455 + } 456 + get(buf, off) { 457 + const view = new DataView(buf.buffer, off); 458 + return { 459 + startTime: UINT64_LE.get(buf, off), 460 + endTime: UINT64_LE.get(buf, off + 8), 461 + dataBitrate: view.getInt32(12, true), 462 + bufferSize: view.getInt32(16, true), 463 + initialBufferFullness: view.getInt32(20, true), 464 + alternateDataBitrate: view.getInt32(24, true), 465 + alternateBufferSize: view.getInt32(28, true), 466 + alternateInitialBufferFullness: view.getInt32(32, true), 467 + maximumObjectSize: view.getInt32(36, true), 468 + flags: { 469 + reliableFlag: getBit(buf, off + 40, 0), 470 + seekableFlag: getBit(buf, off + 40, 1), 471 + resendLiveCleanpointsFlag: getBit(buf, off + 40, 2) 472 + }, 473 + // flagsNumeric: Token.UINT32_LE.get(buf, off + 64), 474 + streamNumber: view.getInt16(42, true), 475 + streamLanguageId: view.getInt16(44, true), 476 + averageTimePerFrame: view.getInt32(52, true), 477 + streamNameCount: view.getInt32(54, true), 478 + payloadExtensionSystems: view.getInt32(56, true), 479 + streamNames: [], 480 + // ToDo 481 + streamPropertiesObject: null 482 + }; 483 + } 484 + }; 485 + ExtendedStreamPropertiesObjectState.guid = AsfGuid_default.ExtendedStreamPropertiesObject; 486 + var MetadataObjectState = class extends State { 487 + static { 488 + __name(this, "MetadataObjectState"); 489 + } 490 + get(uint8Array, off) { 491 + const tags = []; 492 + const view = new DataView(uint8Array.buffer, off); 493 + const descriptionRecordsCount = view.getUint16(0, true); 494 + let pos = 2; 495 + for (let i = 0; i < descriptionRecordsCount; i += 1) { 496 + pos += 4; 497 + const nameLen = view.getUint16(pos, true); 498 + pos += 2; 499 + const dataType = view.getUint16(pos, true); 500 + pos += 2; 501 + const dataLen = view.getUint32(pos, true); 502 + pos += 4; 503 + const name = parseUnicodeAttr(uint8Array.subarray(off + pos, off + pos + nameLen)); 504 + pos += nameLen; 505 + const data = uint8Array.subarray(off + pos, off + pos + dataLen); 506 + pos += dataLen; 507 + this.postProcessTag(tags, name, dataType, data); 508 + } 509 + return tags; 510 + } 511 + }; 512 + MetadataObjectState.guid = AsfGuid_default.MetadataObject; 513 + var MetadataLibraryObjectState = class extends MetadataObjectState { 514 + static { 515 + __name(this, "MetadataLibraryObjectState"); 516 + } 517 + }; 518 + MetadataLibraryObjectState.guid = AsfGuid_default.MetadataLibraryObject; 519 + var WmPictureToken = class _WmPictureToken { 520 + static { 521 + __name(this, "WmPictureToken"); 522 + } 523 + static fromBuffer(buffer) { 524 + const pic = new _WmPictureToken(buffer.length); 525 + return pic.get(buffer, 0); 526 + } 527 + constructor(len) { 528 + this.len = len; 529 + } 530 + get(buffer, offset) { 531 + const view = new DataView(buffer.buffer, offset); 532 + const typeId = view.getUint8(0); 533 + const size = view.getInt32(1, true); 534 + let index = 5; 535 + while (view.getUint16(index) !== 0) { 536 + index += 2; 537 + } 538 + const format = new StringType(index - 5, "utf-16le").get(buffer, 5); 539 + while (view.getUint16(index) !== 0) { 540 + index += 2; 541 + } 542 + const description = new StringType(index - 5, "utf-16le").get(buffer, 5); 543 + return { 544 + type: AttachedPictureType[typeId], 545 + format, 546 + description, 547 + size, 548 + data: buffer.slice(index + 4) 549 + }; 550 + } 551 + }; 552 + 553 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfParser.js 554 + var debug = (0, import_debug.default)("music-metadata:parser:ASF"); 555 + var headerType = "asf"; 556 + var AsfParser = class extends BasicParser { 557 + static { 558 + __name(this, "AsfParser"); 559 + } 560 + async parse() { 561 + const header = await this.tokenizer.readToken(TopLevelHeaderObjectToken); 562 + if (!header.objectId.equals(AsfGuid_default.HeaderObject)) { 563 + throw new AsfContentParseError(`expected asf header; but was not found; got: ${header.objectId.str}`); 564 + } 565 + try { 566 + await this.parseObjectHeader(header.numberOfHeaderObjects); 567 + } catch (err) { 568 + debug("Error while parsing ASF: %s", err); 569 + } 570 + } 571 + async parseObjectHeader(numberOfObjectHeaders) { 572 + let tags; 573 + do { 574 + const header = await this.tokenizer.readToken(HeaderObjectToken); 575 + debug("header GUID=%s", header.objectId.str); 576 + switch (header.objectId.str) { 577 + case FilePropertiesObject.guid.str: { 578 + const fpo = await this.tokenizer.readToken(new FilePropertiesObject(header)); 579 + this.metadata.setFormat("duration", Number(fpo.playDuration / BigInt(1e3)) / 1e4 - Number(fpo.preroll) / 1e3); 580 + this.metadata.setFormat("bitrate", fpo.maximumBitrate); 581 + break; 582 + } 583 + case StreamPropertiesObject.guid.str: { 584 + const spo = await this.tokenizer.readToken(new StreamPropertiesObject(header)); 585 + this.metadata.setFormat("container", `ASF/${spo.streamType}`); 586 + break; 587 + } 588 + case HeaderExtensionObject.guid.str: { 589 + const extHeader = await this.tokenizer.readToken(new HeaderExtensionObject()); 590 + await this.parseExtensionObject(extHeader.extensionDataSize); 591 + break; 592 + } 593 + case ContentDescriptionObjectState.guid.str: 594 + tags = await this.tokenizer.readToken(new ContentDescriptionObjectState(header)); 595 + await this.addTags(tags); 596 + break; 597 + case ExtendedContentDescriptionObjectState.guid.str: 598 + tags = await this.tokenizer.readToken(new ExtendedContentDescriptionObjectState(header)); 599 + await this.addTags(tags); 600 + break; 601 + case AsfGuid_default.CodecListObject.str: { 602 + const codecs = await readCodecEntries(this.tokenizer); 603 + codecs.forEach((codec) => { 604 + this.metadata.addStreamInfo({ 605 + type: codec.type.videoCodec ? TrackType.video : TrackType.audio, 606 + codecName: codec.codecName 607 + }); 608 + }); 609 + const audioCodecs = codecs.filter((codec) => codec.type.audioCodec).map((codec) => codec.codecName).join("/"); 610 + this.metadata.setFormat("codec", audioCodecs); 611 + break; 612 + } 613 + case AsfGuid_default.StreamBitratePropertiesObject.str: 614 + await this.tokenizer.ignore(header.objectSize - HeaderObjectToken.len); 615 + break; 616 + case AsfGuid_default.PaddingObject.str: 617 + debug("Padding: %s bytes", header.objectSize - HeaderObjectToken.len); 618 + await this.tokenizer.ignore(header.objectSize - HeaderObjectToken.len); 619 + break; 620 + default: 621 + this.metadata.addWarning(`Ignore ASF-Object-GUID: ${header.objectId.str}`); 622 + debug("Ignore ASF-Object-GUID: %s", header.objectId.str); 623 + await this.tokenizer.readToken(new IgnoreObjectState(header)); 624 + } 625 + } while (--numberOfObjectHeaders); 626 + } 627 + async addTags(tags) { 628 + await Promise.all(tags.map(({ id, value }) => this.metadata.addTag(headerType, id, value))); 629 + } 630 + async parseExtensionObject(extensionSize) { 631 + do { 632 + const header = await this.tokenizer.readToken(HeaderObjectToken); 633 + const remaining = header.objectSize - HeaderObjectToken.len; 634 + switch (header.objectId.str) { 635 + case ExtendedStreamPropertiesObjectState.guid.str: 636 + await this.tokenizer.readToken(new ExtendedStreamPropertiesObjectState(header)); 637 + break; 638 + case MetadataObjectState.guid.str: { 639 + const moTags = await this.tokenizer.readToken(new MetadataObjectState(header)); 640 + await this.addTags(moTags); 641 + break; 642 + } 643 + case MetadataLibraryObjectState.guid.str: { 644 + const mlTags = await this.tokenizer.readToken(new MetadataLibraryObjectState(header)); 645 + await this.addTags(mlTags); 646 + break; 647 + } 648 + case AsfGuid_default.PaddingObject.str: 649 + await this.tokenizer.ignore(remaining); 650 + break; 651 + case AsfGuid_default.CompatibilityObject.str: 652 + await this.tokenizer.ignore(remaining); 653 + break; 654 + case AsfGuid_default.ASF_Index_Placeholder_Object.str: 655 + await this.tokenizer.ignore(remaining); 656 + break; 657 + default: 658 + this.metadata.addWarning(`Ignore ASF-Object-GUID: ${header.objectId.str}`); 659 + await this.tokenizer.readToken(new IgnoreObjectState(header)); 660 + break; 661 + } 662 + extensionSize -= header.objectSize; 663 + } while (extensionSize > 0); 664 + } 665 + }; 666 + export { 667 + AsfParser 668 + }; 669 + 670 + //# sourceMappingURL=./AsfParser-ADNDJMPT.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/AsfParser-ADNDJMPT.js.map
··· 1 + {"version":3,"sources":["/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfParser.js","/node_modules/.deno/win-guid@0.1.3/node_modules/win-guid/lib/guid.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfGuid.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfUtil.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfObject.js"],"sourcesContent":["import initDebug from 'debug';\nimport { TrackType } from '../type.js';\nimport AsfGuid from './AsfGuid.js';\nimport * as AsfObject from './AsfObject.js';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { AsfContentParseError } from './AsfObject.js';\nconst debug = initDebug('music-metadata:parser:ASF');\nconst headerType = 'asf';\n/**\n * Windows Media Metadata Usage Guidelines\n * - Ref: https://msdn.microsoft.com/en-us/library/ms867702.aspx\n *\n * Ref:\n * - https://tools.ietf.org/html/draft-fleischman-asf-01\n * - https://hwiegman.home.xs4all.nl/fileformats/asf/ASF_Specification.pdf\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html\n * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx\n */\nexport class AsfParser extends BasicParser {\n async parse() {\n const header = await this.tokenizer.readToken(AsfObject.TopLevelHeaderObjectToken);\n if (!header.objectId.equals(AsfGuid.HeaderObject)) {\n throw new AsfContentParseError(`expected asf header; but was not found; got: ${header.objectId.str}`);\n }\n try {\n await this.parseObjectHeader(header.numberOfHeaderObjects);\n }\n catch (err) {\n debug('Error while parsing ASF: %s', err);\n }\n }\n async parseObjectHeader(numberOfObjectHeaders) {\n let tags;\n do {\n // Parse common header of the ASF Object (3.1)\n const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);\n // Parse data part of the ASF Object\n debug('header GUID=%s', header.objectId.str);\n switch (header.objectId.str) {\n case AsfObject.FilePropertiesObject.guid.str: { // 3.2\n const fpo = await this.tokenizer.readToken(new AsfObject.FilePropertiesObject(header));\n this.metadata.setFormat('duration', Number(fpo.playDuration / BigInt(1000)) / 10000 - Number(fpo.preroll) / 1000);\n this.metadata.setFormat('bitrate', fpo.maximumBitrate);\n break;\n }\n case AsfObject.StreamPropertiesObject.guid.str: { // 3.3\n const spo = await this.tokenizer.readToken(new AsfObject.StreamPropertiesObject(header));\n this.metadata.setFormat('container', `ASF/${spo.streamType}`);\n break;\n }\n case AsfObject.HeaderExtensionObject.guid.str: { // 3.4\n const extHeader = await this.tokenizer.readToken(new AsfObject.HeaderExtensionObject());\n await this.parseExtensionObject(extHeader.extensionDataSize);\n break;\n }\n case AsfObject.ContentDescriptionObjectState.guid.str: // 3.10\n tags = await this.tokenizer.readToken(new AsfObject.ContentDescriptionObjectState(header));\n await this.addTags(tags);\n break;\n case AsfObject.ExtendedContentDescriptionObjectState.guid.str: // 3.11\n tags = await this.tokenizer.readToken(new AsfObject.ExtendedContentDescriptionObjectState(header));\n await this.addTags(tags);\n break;\n case AsfGuid.CodecListObject.str: {\n const codecs = await AsfObject.readCodecEntries(this.tokenizer);\n codecs.forEach(codec => {\n this.metadata.addStreamInfo({\n type: codec.type.videoCodec ? TrackType.video : TrackType.audio,\n codecName: codec.codecName\n });\n });\n const audioCodecs = codecs.filter(codec => codec.type.audioCodec).map(codec => codec.codecName).join('/');\n this.metadata.setFormat('codec', audioCodecs);\n break;\n }\n case AsfGuid.StreamBitratePropertiesObject.str:\n // ToDo?\n await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n break;\n case AsfGuid.PaddingObject.str:\n // ToDo: register bytes pad\n debug('Padding: %s bytes', header.objectSize - AsfObject.HeaderObjectToken.len);\n await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n break;\n default:\n this.metadata.addWarning(`Ignore ASF-Object-GUID: ${header.objectId.str}`);\n debug('Ignore ASF-Object-GUID: %s', header.objectId.str);\n await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));\n }\n } while (--numberOfObjectHeaders);\n // done\n }\n async addTags(tags) {\n await Promise.all(tags.map(({ id, value }) => this.metadata.addTag(headerType, id, value)));\n }\n async parseExtensionObject(extensionSize) {\n do {\n // Parse common header of the ASF Object (3.1)\n const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);\n const remaining = header.objectSize - AsfObject.HeaderObjectToken.len;\n // Parse data part of the ASF Object\n switch (header.objectId.str) {\n case AsfObject.ExtendedStreamPropertiesObjectState.guid.str: // 4.1\n // ToDo: extended stream header properties are ignored\n await this.tokenizer.readToken(new AsfObject.ExtendedStreamPropertiesObjectState(header));\n break;\n case AsfObject.MetadataObjectState.guid.str: { // 4.7\n const moTags = await this.tokenizer.readToken(new AsfObject.MetadataObjectState(header));\n await this.addTags(moTags);\n break;\n }\n case AsfObject.MetadataLibraryObjectState.guid.str: { // 4.8\n const mlTags = await this.tokenizer.readToken(new AsfObject.MetadataLibraryObjectState(header));\n await this.addTags(mlTags);\n break;\n }\n case AsfGuid.PaddingObject.str:\n // ToDo: register bytes pad\n await this.tokenizer.ignore(remaining);\n break;\n case AsfGuid.CompatibilityObject.str:\n await this.tokenizer.ignore(remaining);\n break;\n case AsfGuid.ASF_Index_Placeholder_Object.str:\n await this.tokenizer.ignore(remaining);\n break;\n default:\n this.metadata.addWarning(`Ignore ASF-Object-GUID: ${header.objectId.str}`);\n // console.log(\"Ignore ASF-Object-GUID: %s\", header.objectId.str);\n await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));\n break;\n }\n extensionSize -= header.objectSize;\n } while (extensionSize > 0);\n }\n}\n","/**\n * Parse canonical GUID string (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)\n * into Windows / CFBF byte order.\n */\nexport function parseWindowsGuid(guid) {\n let s = guid.trim();\n // Keep validation readable and strict, avoid lowercasing allocations\n if (s.length !== 36 ||\n s[8] !== \"-\" ||\n s[13] !== \"-\" ||\n s[18] !== \"-\" ||\n s[23] !== \"-\") {\n throw new Error(`Invalid GUID format: ${guid}`);\n }\n let v;\n const out = new Uint8Array(16);\n // Data1: 8 hex, uint32 little-endian\n v = parseInt(s.slice(0, 8), 16);\n out[0] = v & 0xff;\n out[1] = (v >>> 8) & 0xff;\n out[2] = (v >>> 16) & 0xff;\n out[3] = (v >>> 24) & 0xff;\n // Data2: 4 hex, uint16 little-endian\n v = parseInt(s.slice(9, 13), 16);\n out[4] = v & 0xff;\n out[5] = (v >>> 8) & 0xff;\n // Data3: 4 hex, uint16 little-endian\n v = parseInt(s.slice(14, 18), 16);\n out[6] = v & 0xff;\n out[7] = (v >>> 8) & 0xff;\n // Data4: 4 hex, as-is (string order)\n v = parseInt(s.slice(19, 23), 16);\n out[8] = (v >>> 8) & 0xff;\n out[9] = v & 0xff;\n // Data5: 12 hex, 6 bytes, as-is (string order)\n // Parse as two chunks to avoid any precision worries, keep it simple.\n v = parseInt(s.slice(24, 32), 16); // 8 hex -> 4 bytes\n out[10] = (v >>> 24) & 0xff;\n out[11] = (v >>> 16) & 0xff;\n out[12] = (v >>> 8) & 0xff;\n out[13] = v & 0xff;\n v = parseInt(s.slice(32, 36), 16); // 4 hex -> 2 bytes\n out[14] = (v >>> 8) & 0xff;\n out[15] = v & 0xff;\n // Ensure all parsed parts were valid hex (parseInt can yield NaN)\n for (let i = 0; i < 16; i++) {\n if (!Number.isFinite(out[i])) {\n throw new Error(`Invalid GUID format: ${guid}`);\n }\n }\n // Also catch NaN early (more useful error locality)\n // If any parseInt produced NaN, assignments above would have become 0,\n // so instead validate hex characters directly with a lightweight check.\n // (Keeps code small while staying strict.)\n if (!/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(s)) {\n throw new Error(`Invalid GUID format: ${guid}`);\n }\n return out;\n}\nexport class Guid {\n constructor(bytes) {\n if (bytes.length !== 16)\n throw new Error(\"GUID must be exactly 16 bytes\");\n this.bytes = bytes;\n }\n static fromString(guid) {\n return new Guid(parseWindowsGuid(guid));\n }\n /**\n * Convert Windows / CFBF byte order into canonical GUID string:\n * xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n */\n toString() {\n const b = this.bytes;\n const hx = (n) => n.toString(16).padStart(2, \"0\");\n // Data1 (uint32 LE) -> big-endian text\n const g1 = hx(b[3]) + hx(b[2]) + hx(b[1]) + hx(b[0]);\n // Data2 (uint16 LE)\n const g2 = hx(b[5]) + hx(b[4]);\n // Data3 (uint16 LE)\n const g3 = hx(b[7]) + hx(b[6]);\n // Data4 (as-is)\n const g4 = hx(b[8]) + hx(b[9]);\n // Data5 (as-is)\n const g5 = hx(b[10]) +\n hx(b[11]) +\n hx(b[12]) +\n hx(b[13]) +\n hx(b[14]) +\n hx(b[15]);\n return `${g1}-${g2}-${g3}-${g4}-${g5}`.toUpperCase();\n }\n /**\n * Compare against a Uint8Array containing GUID bytes\n * in Windows / CFBF layout.\n */\n equals(buf, offset = 0) {\n if (offset < 0 || buf.length - offset < 16)\n return false;\n const a = this.bytes;\n for (let i = 0; i < 16; i++) {\n if (buf[offset + i] !== a[i])\n return false;\n }\n return true;\n }\n}\n","import { parseWindowsGuid, Guid } from 'win-guid';\n/**\n * Ref:\n * - https://tools.ietf.org/html/draft-fleischman-asf-01, Appendix A: ASF GUIDs\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n *\n * ASF File Structure:\n * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx\n *\n * ASF GUIDs:\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n * - https://github.com/dji-sdk/FFmpeg/blob/master/libavformat/asf.c\n */\nclass AsfGuid {\n static fromBin(bin, offset = 0) {\n return new AsfGuid(AsfGuid.decode(bin, offset));\n }\n /**\n * Decode GUID in format like \"B503BF5F-2EA9-CF11-8EE3-00C00C205365\"\n * @param objectId Binary GUID\n * @param offset Read offset in bytes, default 0\n * @returns GUID as dashed hexadecimal representation\n */\n static decode(objectId, offset = 0) {\n return new Guid(objectId.subarray(offset, offset + 16)).toString();\n }\n /**\n * Decode stream type\n * @param mediaType Media type GUID\n * @returns Media type\n */\n static decodeMediaType(mediaType) {\n switch (mediaType.str) {\n case AsfGuid.AudioMedia.str: return 'audio';\n case AsfGuid.VideoMedia.str: return 'video';\n case AsfGuid.CommandMedia.str: return 'command';\n case AsfGuid.Degradable_JPEG_Media.str: return 'degradable-jpeg';\n case AsfGuid.FileTransferMedia.str: return 'file-transfer';\n case AsfGuid.BinaryMedia.str: return 'binary';\n }\n }\n /**\n * Encode GUID\n * @param guid GUID like: \"B503BF5F-2EA9-CF11-8EE3-00C00C205365\"\n * @returns Encoded Binary GUID\n */\n static encode(guid) {\n return parseWindowsGuid(guid);\n }\n constructor(str) {\n this.str = str;\n }\n equals(guid) {\n return this.str === guid.str;\n }\n toBin() {\n return AsfGuid.encode(this.str);\n }\n}\n// 10.1 Top-level ASF object GUIDs\nAsfGuid.HeaderObject = new AsfGuid(\"75B22630-668E-11CF-A6D9-00AA0062CE6C\");\nAsfGuid.DataObject = new AsfGuid(\"75B22636-668E-11CF-A6D9-00AA0062CE6C\");\nAsfGuid.SimpleIndexObject = new AsfGuid(\"33000890-E5B1-11CF-89F4-00A0C90349CB\");\nAsfGuid.IndexObject = new AsfGuid(\"D6E229D3-35DA-11D1-9034-00A0C90349BE\");\nAsfGuid.MediaObjectIndexObject = new AsfGuid(\"FEB103F8-12AD-4C64-840F-2A1D2F7AD48C\");\nAsfGuid.TimecodeIndexObject = new AsfGuid(\"3CB73FD0-0C4A-4803-953D-EDF7B6228F0C\");\n// 10.2 Header Object GUIDs\nAsfGuid.FilePropertiesObject = new AsfGuid(\"8CABDCA1-A947-11CF-8EE4-00C00C205365\");\nAsfGuid.StreamPropertiesObject = new AsfGuid(\"B7DC0791-A9B7-11CF-8EE6-00C00C205365\");\nAsfGuid.HeaderExtensionObject = new AsfGuid(\"5FBF03B5-A92E-11CF-8EE3-00C00C205365\");\nAsfGuid.CodecListObject = new AsfGuid(\"86D15240-311D-11D0-A3A4-00A0C90348F6\");\nAsfGuid.ScriptCommandObject = new AsfGuid(\"1EFB1A30-0B62-11D0-A39B-00A0C90348F6\");\nAsfGuid.MarkerObject = new AsfGuid(\"F487CD01-A951-11CF-8EE6-00C00C205365\");\nAsfGuid.BitrateMutualExclusionObject = new AsfGuid(\"D6E229DC-35DA-11D1-9034-00A0C90349BE\");\nAsfGuid.ErrorCorrectionObject = new AsfGuid(\"75B22635-668E-11CF-A6D9-00AA0062CE6C\");\nAsfGuid.ContentDescriptionObject = new AsfGuid(\"75B22633-668E-11CF-A6D9-00AA0062CE6C\");\nAsfGuid.ExtendedContentDescriptionObject = new AsfGuid(\"D2D0A440-E307-11D2-97F0-00A0C95EA850\");\nAsfGuid.ContentBrandingObject = new AsfGuid(\"2211B3FA-BD23-11D2-B4B7-00A0C955FC6E\");\nAsfGuid.StreamBitratePropertiesObject = new AsfGuid(\"7BF875CE-468D-11D1-8D82-006097C9A2B2\");\nAsfGuid.ContentEncryptionObject = new AsfGuid(\"2211B3FB-BD23-11D2-B4B7-00A0C955FC6E\");\nAsfGuid.ExtendedContentEncryptionObject = new AsfGuid(\"298AE614-2622-4C17-B935-DAE07EE9289C\");\nAsfGuid.DigitalSignatureObject = new AsfGuid(\"2211B3FC-BD23-11D2-B4B7-00A0C955FC6E\");\nAsfGuid.PaddingObject = new AsfGuid(\"1806D474-CADF-4509-A4BA-9AABCB96AAE8\");\n// 10.3 Header Extension Object GUIDs\nAsfGuid.ExtendedStreamPropertiesObject = new AsfGuid(\"14E6A5CB-C672-4332-8399-A96952065B5A\");\nAsfGuid.AdvancedMutualExclusionObject = new AsfGuid(\"A08649CF-4775-4670-8A16-6E35357566CD\");\nAsfGuid.GroupMutualExclusionObject = new AsfGuid(\"D1465A40-5A79-4338-B71B-E36B8FD6C249\");\nAsfGuid.StreamPrioritizationObject = new AsfGuid(\"D4FED15B-88D3-454F-81F0-ED5C45999E24\");\nAsfGuid.BandwidthSharingObject = new AsfGuid(\"A69609E6-517B-11D2-B6AF-00C04FD908E9\");\nAsfGuid.LanguageListObject = new AsfGuid(\"7C4346A9-EFE0-4BFC-B229-393EDE415C85\");\nAsfGuid.MetadataObject = new AsfGuid(\"C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA\");\nAsfGuid.MetadataLibraryObject = new AsfGuid(\"44231C94-9498-49D1-A141-1D134E457054\");\nAsfGuid.IndexParametersObject = new AsfGuid(\"D6E229DF-35DA-11D1-9034-00A0C90349BE\");\nAsfGuid.MediaObjectIndexParametersObject = new AsfGuid(\"6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7\");\nAsfGuid.TimecodeIndexParametersObject = new AsfGuid(\"F55E496D-9797-4B5D-8C8B-604DFE9BFB24\");\nAsfGuid.CompatibilityObject = new AsfGuid(\"26F18B5D-4584-47EC-9F5F-0E651F0452C9\");\nAsfGuid.AdvancedContentEncryptionObject = new AsfGuid(\"43058533-6981-49E6-9B74-AD12CB86D58C\");\n// 10.4 Stream Properties Object Stream Type GUIDs\nAsfGuid.AudioMedia = new AsfGuid(\"F8699E40-5B4D-11CF-A8FD-00805F5C442B\");\nAsfGuid.VideoMedia = new AsfGuid(\"BC19EFC0-5B4D-11CF-A8FD-00805F5C442B\");\nAsfGuid.CommandMedia = new AsfGuid(\"59DACFC0-59E6-11D0-A3AC-00A0C90348F6\");\nAsfGuid.JFIF_Media = new AsfGuid(\"B61BE100-5B4E-11CF-A8FD-00805F5C442B\");\nAsfGuid.Degradable_JPEG_Media = new AsfGuid(\"35907DE0-E415-11CF-A917-00805F5C442B\");\nAsfGuid.FileTransferMedia = new AsfGuid(\"91BD222C-F21C-497A-8B6D-5AA86BFC0185\");\nAsfGuid.BinaryMedia = new AsfGuid(\"3AFB65E2-47EF-40F2-AC2C-70A90D71D343\");\nAsfGuid.ASF_Index_Placeholder_Object = new AsfGuid(\"D9AADE20-7C17-4F9C-BC28-8555DD98E2A2\");\nexport default AsfGuid;\n","import * as Token from 'token-types';\nimport * as util from '../common/Util.js';\nexport function getParserForAttr(i) {\n return attributeParsers[i];\n}\nexport function parseUnicodeAttr(uint8Array) {\n return util.stripNulls(util.decodeString(uint8Array, 'utf-16le'));\n}\nconst attributeParsers = [\n parseUnicodeAttr,\n parseByteArrayAttr,\n parseBoolAttr,\n parseDWordAttr,\n parseQWordAttr,\n parseWordAttr,\n parseByteArrayAttr\n];\nfunction parseByteArrayAttr(buf) {\n return new Uint8Array(buf);\n}\nfunction parseBoolAttr(buf, offset = 0) {\n return parseWordAttr(buf, offset) === 1;\n}\nfunction parseDWordAttr(buf, offset = 0) {\n return Token.UINT32_LE.get(buf, offset);\n}\nfunction parseQWordAttr(buf, offset = 0) {\n return Token.UINT64_LE.get(buf, offset);\n}\nfunction parseWordAttr(buf, offset = 0) {\n return Token.UINT16_LE.get(buf, offset);\n}\n","// ASF Objects\nimport * as Token from 'token-types';\nimport * as util from '../common/Util.js';\nimport AsfGuid from './AsfGuid.js';\nimport { getParserForAttr, parseUnicodeAttr } from './AsfUtil.js';\nimport { AttachedPictureType } from '../id3v2/ID3v2Token.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nexport class AsfContentParseError extends makeUnexpectedFileContentError('ASF') {\n}\n/**\n * Data Type: Specifies the type of information being stored. The following values are recognized.\n */\nexport const DataType = {\n /**\n * Unicode string. The data consists of a sequence of Unicode characters.\n */\n UnicodeString: 0,\n /**\n * BYTE array. The type of data is implementation-specific.\n */\n ByteArray: 1,\n /**\n * BOOL. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer. Only 0x0000 or 0x0001 are permitted values.\n */\n Bool: 2,\n /**\n * DWORD. The data is 4 bytes long and should be interpreted as a 32-bit unsigned integer.\n */\n DWord: 3,\n /**\n * QWORD. The data is 8 bytes long and should be interpreted as a 64-bit unsigned integer.\n */\n QWord: 4,\n /**\n * WORD. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer.\n */\n Word: 5\n};\n/**\n * Token for: 3. ASF top-level Header Object\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3\n */\nexport const TopLevelHeaderObjectToken = {\n len: 30,\n get: (buf, off) => {\n return {\n objectId: AsfGuid.fromBin(buf, off),\n objectSize: Number(Token.UINT64_LE.get(buf, off + 16)),\n numberOfHeaderObjects: Token.UINT32_LE.get(buf, off + 24)\n // Reserved: 2 bytes\n };\n }\n};\n/**\n * Token for: 3.1 Header Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_1\n */\nexport const HeaderObjectToken = {\n len: 24,\n get: (buf, off) => {\n return {\n objectId: AsfGuid.fromBin(buf, off),\n objectSize: Number(Token.UINT64_LE.get(buf, off + 16))\n };\n }\n};\nexport class State {\n constructor(header) {\n this.len = Number(header.objectSize) - HeaderObjectToken.len;\n }\n postProcessTag(tags, name, valueType, data) {\n if (name === 'WM/Picture') {\n tags.push({ id: name, value: WmPictureToken.fromBuffer(data) });\n }\n else {\n const parseAttr = getParserForAttr(valueType);\n if (!parseAttr) {\n throw new AsfContentParseError(`unexpected value headerType: ${valueType}`);\n }\n tags.push({ id: name, value: parseAttr(data) });\n }\n }\n}\n// ToDo: use ignore type\nexport class IgnoreObjectState extends State {\n get(_buf, _off) {\n return null;\n }\n}\n/**\n * Token for: 3.2: File Properties Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_2\n */\nexport class FilePropertiesObject extends State {\n get(buf, off) {\n return {\n fileId: AsfGuid.fromBin(buf, off),\n fileSize: Token.UINT64_LE.get(buf, off + 16),\n creationDate: Token.UINT64_LE.get(buf, off + 24),\n dataPacketsCount: Token.UINT64_LE.get(buf, off + 32),\n playDuration: Token.UINT64_LE.get(buf, off + 40),\n sendDuration: Token.UINT64_LE.get(buf, off + 48),\n preroll: Token.UINT64_LE.get(buf, off + 56),\n flags: {\n broadcast: util.getBit(buf, off + 64, 24),\n seekable: util.getBit(buf, off + 64, 25)\n },\n // flagsNumeric: Token.UINT32_LE.get(buf, off + 64),\n minimumDataPacketSize: Token.UINT32_LE.get(buf, off + 68),\n maximumDataPacketSize: Token.UINT32_LE.get(buf, off + 72),\n maximumBitrate: Token.UINT32_LE.get(buf, off + 76)\n };\n }\n}\nFilePropertiesObject.guid = AsfGuid.FilePropertiesObject;\n/**\n * Token for: 3.3 Stream Properties Object (mandatory, one per stream)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_3\n */\nexport class StreamPropertiesObject extends State {\n get(buf, off) {\n return {\n streamType: AsfGuid.decodeMediaType(AsfGuid.fromBin(buf, off)),\n errorCorrectionType: AsfGuid.fromBin(buf, off + 8)\n // ToDo\n };\n }\n}\nStreamPropertiesObject.guid = AsfGuid.StreamPropertiesObject;\n/**\n * 3.4: Header Extension Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_4\n */\nexport class HeaderExtensionObject {\n constructor() {\n this.len = 22;\n }\n get(buf, off) {\n const view = new DataView(buf.buffer, off);\n return {\n reserved1: AsfGuid.fromBin(buf, off),\n reserved2: view.getUint16(16, true),\n extensionDataSize: view.getUint16(18, true)\n };\n }\n}\nHeaderExtensionObject.guid = AsfGuid.HeaderExtensionObject;\n/**\n * 3.5: The Codec List Object provides user-friendly information about the codecs and formats used to encode the content found in the ASF file.\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_5\n */\nconst CodecListObjectHeader = {\n len: 20,\n get: (buf, off) => {\n const view = new DataView(buf.buffer, off);\n return {\n entryCount: view.getUint16(16, true)\n };\n }\n};\nasync function readString(tokenizer) {\n const length = await tokenizer.readNumber(Token.UINT16_LE);\n return (await tokenizer.readToken(new Token.StringType(length * 2, 'utf-16le'))).replace('\\0', '');\n}\n/**\n * 3.5: Read the Codec-List-Object, which provides user-friendly information about the codecs and formats used to encode the content found in the ASF file.\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_5\n */\nexport async function readCodecEntries(tokenizer) {\n const codecHeader = await tokenizer.readToken(CodecListObjectHeader);\n const entries = [];\n for (let i = 0; i < codecHeader.entryCount; ++i) {\n entries.push(await readCodecEntry(tokenizer));\n }\n return entries;\n}\nasync function readInformation(tokenizer) {\n const length = await tokenizer.readNumber(Token.UINT16_LE);\n const buf = new Uint8Array(length);\n await tokenizer.readBuffer(buf);\n return buf;\n}\n/**\n * Read Codec-Entries\n * @param tokenizer\n */\nasync function readCodecEntry(tokenizer) {\n const type = await tokenizer.readNumber(Token.UINT16_LE);\n return {\n type: {\n videoCodec: (type & 0x0001) === 0x0001,\n audioCodec: (type & 0x0002) === 0x0002\n },\n codecName: await readString(tokenizer),\n description: await readString(tokenizer),\n information: await readInformation(tokenizer)\n };\n}\n/**\n * 3.10 Content Description Object (optional, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_10\n */\nexport class ContentDescriptionObjectState extends State {\n get(buf, off) {\n const tags = [];\n const view = new DataView(buf.buffer, off);\n let pos = 10;\n for (let i = 0; i < ContentDescriptionObjectState.contentDescTags.length; ++i) {\n const length = view.getUint16(i * 2, true);\n if (length > 0) {\n const tagName = ContentDescriptionObjectState.contentDescTags[i];\n const end = pos + length;\n tags.push({ id: tagName, value: parseUnicodeAttr(buf.subarray(off + pos, off + end)) });\n pos = end;\n }\n }\n return tags;\n }\n}\nContentDescriptionObjectState.guid = AsfGuid.ContentDescriptionObject;\nContentDescriptionObjectState.contentDescTags = ['Title', 'Author', 'Copyright', 'Description', 'Rating'];\n/**\n * 3.11 Extended Content Description Object (optional, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_11\n */\nexport class ExtendedContentDescriptionObjectState extends State {\n get(buf, off) {\n const tags = [];\n const view = new DataView(buf.buffer, off);\n const attrCount = view.getUint16(0, true);\n let pos = 2;\n for (let i = 0; i < attrCount; i += 1) {\n const nameLen = view.getUint16(pos, true);\n pos += 2;\n const name = parseUnicodeAttr(buf.subarray(off + pos, off + pos + nameLen));\n pos += nameLen;\n const valueType = view.getUint16(pos, true);\n pos += 2;\n const valueLen = view.getUint16(pos, true);\n pos += 2;\n const value = buf.subarray(off + pos, off + pos + valueLen);\n pos += valueLen;\n this.postProcessTag(tags, name, valueType, value);\n }\n return tags;\n }\n}\nExtendedContentDescriptionObjectState.guid = AsfGuid.ExtendedContentDescriptionObject;\n/**\n * 4.1 Extended Stream Properties Object (optional, 1 per media stream)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_1\n */\nexport class ExtendedStreamPropertiesObjectState extends State {\n get(buf, off) {\n const view = new DataView(buf.buffer, off);\n return {\n startTime: Token.UINT64_LE.get(buf, off),\n endTime: Token.UINT64_LE.get(buf, off + 8),\n dataBitrate: view.getInt32(12, true),\n bufferSize: view.getInt32(16, true),\n initialBufferFullness: view.getInt32(20, true),\n alternateDataBitrate: view.getInt32(24, true),\n alternateBufferSize: view.getInt32(28, true),\n alternateInitialBufferFullness: view.getInt32(32, true),\n maximumObjectSize: view.getInt32(36, true),\n flags: {\n reliableFlag: util.getBit(buf, off + 40, 0),\n seekableFlag: util.getBit(buf, off + 40, 1),\n resendLiveCleanpointsFlag: util.getBit(buf, off + 40, 2)\n },\n // flagsNumeric: Token.UINT32_LE.get(buf, off + 64),\n streamNumber: view.getInt16(42, true),\n streamLanguageId: view.getInt16(44, true),\n averageTimePerFrame: view.getInt32(52, true),\n streamNameCount: view.getInt32(54, true),\n payloadExtensionSystems: view.getInt32(56, true),\n streamNames: [], // ToDo\n streamPropertiesObject: null\n };\n }\n}\nExtendedStreamPropertiesObjectState.guid = AsfGuid.ExtendedStreamPropertiesObject;\n/**\n * 4.7 Metadata Object (optional, 0 or 1)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_7\n */\nexport class MetadataObjectState extends State {\n get(uint8Array, off) {\n const tags = [];\n const view = new DataView(uint8Array.buffer, off);\n const descriptionRecordsCount = view.getUint16(0, true);\n let pos = 2;\n for (let i = 0; i < descriptionRecordsCount; i += 1) {\n pos += 4;\n const nameLen = view.getUint16(pos, true);\n pos += 2;\n const dataType = view.getUint16(pos, true);\n pos += 2;\n const dataLen = view.getUint32(pos, true);\n pos += 4;\n const name = parseUnicodeAttr(uint8Array.subarray(off + pos, off + pos + nameLen));\n pos += nameLen;\n const data = uint8Array.subarray(off + pos, off + pos + dataLen);\n pos += dataLen;\n this.postProcessTag(tags, name, dataType, data);\n }\n return tags;\n }\n}\nMetadataObjectState.guid = AsfGuid.MetadataObject;\n// 4.8\tMetadata Library Object (optional, 0 or 1)\nexport class MetadataLibraryObjectState extends MetadataObjectState {\n}\nMetadataLibraryObjectState.guid = AsfGuid.MetadataLibraryObject;\n/**\n * Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd757977(v=vs.85).aspx\n */\nexport class WmPictureToken {\n static fromBuffer(buffer) {\n const pic = new WmPictureToken(buffer.length);\n return pic.get(buffer, 0);\n }\n constructor(len) {\n this.len = len;\n }\n get(buffer, offset) {\n const view = new DataView(buffer.buffer, offset);\n const typeId = view.getUint8(0);\n const size = view.getInt32(1, true);\n let index = 5;\n while (view.getUint16(index) !== 0) {\n index += 2;\n }\n const format = new Token.StringType(index - 5, 'utf-16le').get(buffer, 5);\n while (view.getUint16(index) !== 0) {\n index += 2;\n }\n const description = new Token.StringType(index - 5, 'utf-16le').get(buffer, 5);\n return {\n type: AttachedPictureType[typeId],\n format,\n description,\n size,\n data: buffer.slice(index + 4)\n };\n }\n}\n"],"mappings":"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","names":["initDebug"],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/AsfParser-ADNDJMPT.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/DsdiffParser-DF4OM5HV.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/DsdiffParser-DF4OM5HV.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/DsdiffParser-DF4OM5HV.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/DsdiffParser-DF4OM5HV.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/DsfParser-WJENCYIA.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/DsfParser-WJENCYIA.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/DsfParser-WJENCYIA.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/DsfParser-WJENCYIA.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/FlacParser-UYVOMKF2.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/FlacParser-UYVOMKF2.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/FlacParser-UYVOMKF2.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/FlacParser-UYVOMKF2.js.map
+1208
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/MP4Parser-N3XX43E2.js
··· 1 + import "./chunk-L3PGUTA5.js"; 2 + import { 3 + Genres 4 + } from "./chunk-Z6RWJW2M.js"; 5 + import "./chunk-SGG7NSCF.js"; 6 + import { 7 + TrackType 8 + } from "./chunk-7OCWG5AW.js"; 9 + import { 10 + FourCcToken 11 + } from "./chunk-CSVVW572.js"; 12 + import { 13 + getBit, 14 + uint8ArrayToHex 15 + } from "./chunk-6AX6SYMQ.js"; 16 + import "./chunk-FGRUWWG5.js"; 17 + import { 18 + BasicParser, 19 + INT16_BE, 20 + INT24_BE, 21 + INT32_BE, 22 + INT8, 23 + StringType, 24 + UINT16_BE, 25 + UINT24_BE, 26 + UINT32_BE, 27 + UINT64_BE, 28 + UINT8, 29 + Uint8ArrayType, 30 + lib_exports, 31 + makeUnexpectedFileContentError, 32 + require_src, 33 + textDecode 34 + } from "./chunk-ETGVMC2T.js"; 35 + import { 36 + __name, 37 + __toESM 38 + } from "./chunk-7IARE43G.js"; 39 + 40 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/MP4Parser.js 41 + var import_debug3 = __toESM(require_src()); 42 + 43 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/Atom.js 44 + var import_debug2 = __toESM(require_src()); 45 + 46 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/AtomToken.js 47 + var import_debug = __toESM(require_src()); 48 + var debug = (0, import_debug.default)("music-metadata:parser:MP4:atom"); 49 + var Mp4ContentError = class extends makeUnexpectedFileContentError("MP4") { 50 + static { 51 + __name(this, "Mp4ContentError"); 52 + } 53 + }; 54 + var Header = { 55 + len: 8, 56 + get: /* @__PURE__ */ __name((buf, off) => { 57 + const length = UINT32_BE.get(buf, off); 58 + if (length < 0) 59 + throw new Mp4ContentError("Invalid atom header length"); 60 + return { 61 + length: BigInt(length), 62 + name: new StringType(4, "latin1").get(buf, off + 4) 63 + }; 64 + }, "get"), 65 + put: /* @__PURE__ */ __name((buf, off, hdr) => { 66 + UINT32_BE.put(buf, off, Number(hdr.length)); 67 + return FourCcToken.put(buf, off + 4, hdr.name); 68 + }, "put") 69 + }; 70 + var ExtendedSize = UINT64_BE; 71 + var ftyp = { 72 + len: 4, 73 + get: /* @__PURE__ */ __name((buf, off) => { 74 + return { 75 + type: new StringType(4, "ascii").get(buf, off) 76 + }; 77 + }, "get") 78 + }; 79 + var FixedLengthAtom = class { 80 + static { 81 + __name(this, "FixedLengthAtom"); 82 + } 83 + /** 84 + * 85 + * @param {number} len Length as specified in the size field 86 + * @param {number} expLen Total length of sum of specified fields in the standard 87 + * @param atomId Atom ID 88 + */ 89 + constructor(len, expLen, atomId) { 90 + if (len < expLen) { 91 + throw new Mp4ContentError(`Atom ${atomId} expected to be ${expLen}, but specifies ${len} bytes long.`); 92 + } 93 + if (len > expLen) { 94 + debug(`Warning: atom ${atomId} expected to be ${expLen}, but was actually ${len} bytes long.`); 95 + } 96 + this.len = len; 97 + } 98 + }; 99 + var SecondsSinceMacEpoch = { 100 + len: 4, 101 + get: /* @__PURE__ */ __name((buf, off) => { 102 + const secondsSinceUnixEpoch = UINT32_BE.get(buf, off) - 2082844800; 103 + return new Date(secondsSinceUnixEpoch * 1e3); 104 + }, "get") 105 + }; 106 + var MdhdAtom = class extends FixedLengthAtom { 107 + static { 108 + __name(this, "MdhdAtom"); 109 + } 110 + constructor(len) { 111 + super(len, 24, "mdhd"); 112 + } 113 + get(buf, off) { 114 + return { 115 + version: UINT8.get(buf, off + 0), 116 + flags: UINT24_BE.get(buf, off + 1), 117 + creationTime: SecondsSinceMacEpoch.get(buf, off + 4), 118 + modificationTime: SecondsSinceMacEpoch.get(buf, off + 8), 119 + timeScale: UINT32_BE.get(buf, off + 12), 120 + duration: UINT32_BE.get(buf, off + 16), 121 + language: UINT16_BE.get(buf, off + 20), 122 + quality: UINT16_BE.get(buf, off + 22) 123 + }; 124 + } 125 + }; 126 + var MvhdAtom = class extends FixedLengthAtom { 127 + static { 128 + __name(this, "MvhdAtom"); 129 + } 130 + constructor(len) { 131 + super(len, 100, "mvhd"); 132 + } 133 + get(buf, off) { 134 + return { 135 + version: UINT8.get(buf, off), 136 + flags: UINT24_BE.get(buf, off + 1), 137 + creationTime: SecondsSinceMacEpoch.get(buf, off + 4), 138 + modificationTime: SecondsSinceMacEpoch.get(buf, off + 8), 139 + timeScale: UINT32_BE.get(buf, off + 12), 140 + duration: UINT32_BE.get(buf, off + 16), 141 + preferredRate: UINT32_BE.get(buf, off + 20), 142 + preferredVolume: UINT16_BE.get(buf, off + 24), 143 + // ignore reserver: 10 bytes 144 + // ignore matrix structure: 36 bytes 145 + previewTime: UINT32_BE.get(buf, off + 72), 146 + previewDuration: UINT32_BE.get(buf, off + 76), 147 + posterTime: UINT32_BE.get(buf, off + 80), 148 + selectionTime: UINT32_BE.get(buf, off + 84), 149 + selectionDuration: UINT32_BE.get(buf, off + 88), 150 + currentTime: UINT32_BE.get(buf, off + 92), 151 + nextTrackID: UINT32_BE.get(buf, off + 96) 152 + }; 153 + } 154 + }; 155 + var DataAtom = class { 156 + static { 157 + __name(this, "DataAtom"); 158 + } 159 + constructor(len) { 160 + this.len = len; 161 + } 162 + get(buf, off) { 163 + return { 164 + type: { 165 + set: UINT8.get(buf, off + 0), 166 + type: UINT24_BE.get(buf, off + 1) 167 + }, 168 + locale: UINT24_BE.get(buf, off + 4), 169 + value: new Uint8ArrayType(this.len - 8).get(buf, off + 8) 170 + }; 171 + } 172 + }; 173 + var NameAtom = class { 174 + static { 175 + __name(this, "NameAtom"); 176 + } 177 + constructor(len) { 178 + this.len = len; 179 + } 180 + get(buf, off) { 181 + return { 182 + version: UINT8.get(buf, off), 183 + flags: UINT24_BE.get(buf, off + 1), 184 + name: new StringType(this.len - 4, "utf-8").get(buf, off + 4) 185 + }; 186 + } 187 + }; 188 + var TrackHeaderAtom = class { 189 + static { 190 + __name(this, "TrackHeaderAtom"); 191 + } 192 + constructor(len) { 193 + this.len = len; 194 + } 195 + get(buf, off) { 196 + return { 197 + version: UINT8.get(buf, off), 198 + flags: UINT24_BE.get(buf, off + 1), 199 + creationTime: SecondsSinceMacEpoch.get(buf, off + 4), 200 + modificationTime: SecondsSinceMacEpoch.get(buf, off + 8), 201 + trackId: UINT32_BE.get(buf, off + 12), 202 + // reserved 4 bytes 203 + duration: UINT32_BE.get(buf, off + 20), 204 + layer: UINT16_BE.get(buf, off + 24), 205 + alternateGroup: UINT16_BE.get(buf, off + 26), 206 + volume: UINT16_BE.get(buf, off + 28) 207 + // ToDo: fixed point 208 + // ToDo: add remaining fields 209 + }; 210 + } 211 + }; 212 + var stsdHeader = { 213 + len: 8, 214 + get: /* @__PURE__ */ __name((buf, off) => { 215 + return { 216 + version: UINT8.get(buf, off), 217 + flags: UINT24_BE.get(buf, off + 1), 218 + numberOfEntries: UINT32_BE.get(buf, off + 4) 219 + }; 220 + }, "get") 221 + }; 222 + var SampleDescriptionTable = class { 223 + static { 224 + __name(this, "SampleDescriptionTable"); 225 + } 226 + constructor(len) { 227 + this.len = len; 228 + } 229 + get(buf, off) { 230 + const descrLen = this.len - 12; 231 + return { 232 + dataFormat: FourCcToken.get(buf, off), 233 + dataReferenceIndex: UINT16_BE.get(buf, off + 10), 234 + description: descrLen > 0 ? new Uint8ArrayType(descrLen).get(buf, off + 12) : void 0 235 + }; 236 + } 237 + }; 238 + var StsdAtom = class { 239 + static { 240 + __name(this, "StsdAtom"); 241 + } 242 + constructor(len) { 243 + this.len = len; 244 + } 245 + get(buf, off) { 246 + const header = stsdHeader.get(buf, off); 247 + off += stsdHeader.len; 248 + const table = []; 249 + for (let n = 0; n < header.numberOfEntries; ++n) { 250 + const size = UINT32_BE.get(buf, off); 251 + off += UINT32_BE.len; 252 + table.push(new SampleDescriptionTable(size - UINT32_BE.len).get(buf, off)); 253 + off += size; 254 + } 255 + return { 256 + header, 257 + table 258 + }; 259 + } 260 + }; 261 + var SoundSampleDescriptionVersion = { 262 + len: 8, 263 + get(buf, off) { 264 + return { 265 + version: INT16_BE.get(buf, off), 266 + revision: INT16_BE.get(buf, off + 2), 267 + vendor: INT32_BE.get(buf, off + 4) 268 + }; 269 + } 270 + }; 271 + var SoundSampleDescriptionV0 = { 272 + len: 12, 273 + get(buf, off) { 274 + return { 275 + numAudioChannels: INT16_BE.get(buf, off + 0), 276 + sampleSize: INT16_BE.get(buf, off + 2), 277 + compressionId: INT16_BE.get(buf, off + 4), 278 + packetSize: INT16_BE.get(buf, off + 6), 279 + sampleRate: UINT16_BE.get(buf, off + 8) + UINT16_BE.get(buf, off + 10) / 1e4 280 + }; 281 + } 282 + }; 283 + var SimpleTableAtom = class { 284 + static { 285 + __name(this, "SimpleTableAtom"); 286 + } 287 + constructor(len, token) { 288 + this.len = len; 289 + this.token = token; 290 + } 291 + get(buf, off) { 292 + const nrOfEntries = INT32_BE.get(buf, off + 4); 293 + return { 294 + version: INT8.get(buf, off + 0), 295 + flags: INT24_BE.get(buf, off + 1), 296 + numberOfEntries: nrOfEntries, 297 + entries: readTokenTable(buf, this.token, off + 8, this.len - 8, nrOfEntries) 298 + }; 299 + } 300 + }; 301 + var TimeToSampleToken = { 302 + len: 8, 303 + get(buf, off) { 304 + return { 305 + count: INT32_BE.get(buf, off + 0), 306 + duration: INT32_BE.get(buf, off + 4) 307 + }; 308 + } 309 + }; 310 + var SttsAtom = class extends SimpleTableAtom { 311 + static { 312 + __name(this, "SttsAtom"); 313 + } 314 + constructor(len) { 315 + super(len, TimeToSampleToken); 316 + } 317 + }; 318 + var SampleToChunkToken = { 319 + len: 12, 320 + get(buf, off) { 321 + return { 322 + firstChunk: INT32_BE.get(buf, off), 323 + samplesPerChunk: INT32_BE.get(buf, off + 4), 324 + sampleDescriptionId: INT32_BE.get(buf, off + 8) 325 + }; 326 + } 327 + }; 328 + var StscAtom = class extends SimpleTableAtom { 329 + static { 330 + __name(this, "StscAtom"); 331 + } 332 + constructor(len) { 333 + super(len, SampleToChunkToken); 334 + } 335 + }; 336 + var StszAtom = class { 337 + static { 338 + __name(this, "StszAtom"); 339 + } 340 + constructor(len) { 341 + this.len = len; 342 + } 343 + get(buf, off) { 344 + const nrOfEntries = INT32_BE.get(buf, off + 8); 345 + return { 346 + version: INT8.get(buf, off), 347 + flags: INT24_BE.get(buf, off + 1), 348 + sampleSize: INT32_BE.get(buf, off + 4), 349 + numberOfEntries: nrOfEntries, 350 + entries: readTokenTable(buf, INT32_BE, off + 12, this.len - 12, nrOfEntries) 351 + }; 352 + } 353 + }; 354 + var StcoAtom = class extends SimpleTableAtom { 355 + static { 356 + __name(this, "StcoAtom"); 357 + } 358 + constructor(len) { 359 + super(len, INT32_BE); 360 + this.len = len; 361 + } 362 + }; 363 + var ChapterText = class { 364 + static { 365 + __name(this, "ChapterText"); 366 + } 367 + constructor(len) { 368 + this.len = len; 369 + } 370 + get(buf, off) { 371 + const titleLen = INT16_BE.get(buf, off + 0); 372 + const str = new StringType(titleLen, "utf-8"); 373 + return str.get(buf, off + 2); 374 + } 375 + }; 376 + function readTokenTable(buf, token, off, remainingLen, numberOfEntries) { 377 + debug(`remainingLen=${remainingLen}, numberOfEntries=${numberOfEntries} * token-len=${token.len}`); 378 + if (remainingLen === 0) 379 + return []; 380 + if (remainingLen !== numberOfEntries * token.len) 381 + throw new Mp4ContentError("mismatch number-of-entries with remaining atom-length"); 382 + const entries = []; 383 + for (let n = 0; n < numberOfEntries; ++n) { 384 + entries.push(token.get(buf, off)); 385 + off += token.len; 386 + } 387 + return entries; 388 + } 389 + __name(readTokenTable, "readTokenTable"); 390 + var TrackFragmentHeaderBox = class { 391 + static { 392 + __name(this, "TrackFragmentHeaderBox"); 393 + } 394 + constructor(len) { 395 + this.len = len; 396 + } 397 + get(buf, off) { 398 + const flagOffset = off + 1; 399 + const header = { 400 + version: INT8.get(buf, off), 401 + flags: { 402 + baseDataOffsetPresent: getBit(buf, flagOffset + 2, 0), 403 + sampleDescriptionIndexPresent: getBit(buf, flagOffset + 2, 1), 404 + defaultSampleDurationPresent: getBit(buf, flagOffset + 2, 3), 405 + defaultSampleSizePresent: getBit(buf, flagOffset + 2, 4), 406 + defaultSampleFlagsPresent: getBit(buf, flagOffset + 2, 5), 407 + defaultDurationIsEmpty: getBit(buf, flagOffset, 0), 408 + defaultBaseIsMoof: getBit(buf, flagOffset, 1) 409 + }, 410 + trackId: UINT32_BE.get(buf, 4) 411 + }; 412 + let dynOffset = 8; 413 + if (header.flags.baseDataOffsetPresent) { 414 + header.baseDataOffset = UINT64_BE.get(buf, dynOffset); 415 + dynOffset += 8; 416 + } 417 + if (header.flags.sampleDescriptionIndexPresent) { 418 + header.sampleDescriptionIndex = UINT32_BE.get(buf, dynOffset); 419 + dynOffset += 4; 420 + } 421 + if (header.flags.defaultSampleDurationPresent) { 422 + header.defaultSampleDuration = UINT32_BE.get(buf, dynOffset); 423 + dynOffset += 4; 424 + } 425 + if (header.flags.defaultSampleSizePresent) { 426 + header.defaultSampleSize = UINT32_BE.get(buf, dynOffset); 427 + dynOffset += 4; 428 + } 429 + if (header.flags.defaultSampleFlagsPresent) { 430 + header.defaultSampleFlags = UINT32_BE.get(buf, dynOffset); 431 + } 432 + return header; 433 + } 434 + }; 435 + var TrackRunBox = class { 436 + static { 437 + __name(this, "TrackRunBox"); 438 + } 439 + constructor(len) { 440 + this.len = len; 441 + } 442 + get(buf, off) { 443 + const flagOffset = off + 1; 444 + const trun = { 445 + version: INT8.get(buf, off), 446 + flags: { 447 + dataOffsetPresent: getBit(buf, flagOffset + 2, 0), 448 + firstSampleFlagsPresent: getBit(buf, flagOffset + 2, 2), 449 + sampleDurationPresent: getBit(buf, flagOffset + 1, 0), 450 + sampleSizePresent: getBit(buf, flagOffset + 1, 1), 451 + sampleFlagsPresent: getBit(buf, flagOffset + 1, 2), 452 + sampleCompositionTimeOffsetsPresent: getBit(buf, flagOffset + 1, 3) 453 + }, 454 + sampleCount: UINT32_BE.get(buf, off + 4), 455 + samples: [] 456 + }; 457 + let dynOffset = off + 8; 458 + if (trun.flags.dataOffsetPresent) { 459 + trun.dataOffset = UINT32_BE.get(buf, dynOffset); 460 + dynOffset += 4; 461 + } 462 + if (trun.flags.firstSampleFlagsPresent) { 463 + trun.firstSampleFlags = UINT32_BE.get(buf, dynOffset); 464 + dynOffset += 4; 465 + } 466 + for (let n = 0; n < trun.sampleCount; ++n) { 467 + if (dynOffset >= this.len) { 468 + debug("TrackRunBox size mismatch"); 469 + break; 470 + } 471 + const sample = {}; 472 + if (trun.flags.sampleDurationPresent) { 473 + sample.sampleDuration = UINT32_BE.get(buf, dynOffset); 474 + dynOffset += 4; 475 + } 476 + if (trun.flags.sampleSizePresent) { 477 + sample.sampleSize = UINT32_BE.get(buf, dynOffset); 478 + dynOffset += 4; 479 + } 480 + if (trun.flags.sampleFlagsPresent) { 481 + sample.sampleFlags = UINT32_BE.get(buf, dynOffset); 482 + dynOffset += 4; 483 + } 484 + if (trun.flags.sampleCompositionTimeOffsetsPresent) { 485 + sample.sampleCompositionTimeOffset = UINT32_BE.get(buf, dynOffset); 486 + dynOffset += 4; 487 + } 488 + trun.samples.push(sample); 489 + } 490 + return trun; 491 + } 492 + }; 493 + var HandlerBox = class { 494 + static { 495 + __name(this, "HandlerBox"); 496 + } 497 + constructor(len) { 498 + this.len = len; 499 + } 500 + get(buf, off) { 501 + const _flagOffset = off + 1; 502 + const charTypeToken = new StringType(4, "utf-8"); 503 + return { 504 + version: INT8.get(buf, off), 505 + flags: UINT24_BE.get(buf, off + 1), 506 + componentType: charTypeToken.get(buf, off + 4), 507 + handlerType: charTypeToken.get(buf, off + 8), 508 + componentName: new StringType(this.len - 28, "utf-8").get(buf, off + 28) 509 + }; 510 + } 511 + }; 512 + var ChapterTrackReferenceBox = class { 513 + static { 514 + __name(this, "ChapterTrackReferenceBox"); 515 + } 516 + constructor(len) { 517 + this.len = len; 518 + } 519 + get(buf, off) { 520 + let dynOffset = 0; 521 + const trackIds = []; 522 + while (dynOffset < this.len) { 523 + trackIds.push(UINT32_BE.get(buf, off + dynOffset)); 524 + dynOffset += 4; 525 + } 526 + return trackIds; 527 + } 528 + }; 529 + 530 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/Atom.js 531 + var debug2 = (0, import_debug2.default)("music-metadata:parser:MP4:Atom"); 532 + var Atom = class _Atom { 533 + static { 534 + __name(this, "Atom"); 535 + } 536 + static async readAtom(tokenizer, dataHandler, parent, remaining) { 537 + const offset = tokenizer.position; 538 + debug2(`Reading next token on offset=${offset}...`); 539 + const header = await tokenizer.readToken(Header); 540 + const extended = header.length === 1n; 541 + if (extended) { 542 + header.length = await tokenizer.readToken(ExtendedSize); 543 + } 544 + const atomBean = new _Atom(header, extended, parent); 545 + const payloadLength = atomBean.getPayloadLength(remaining); 546 + debug2(`parse atom name=${atomBean.atomPath}, extended=${atomBean.extended}, offset=${offset}, len=${atomBean.header.length}`); 547 + await atomBean.readData(tokenizer, dataHandler, payloadLength); 548 + return atomBean; 549 + } 550 + constructor(header, extended, parent) { 551 + this.header = header; 552 + this.extended = extended; 553 + this.parent = parent; 554 + this.children = []; 555 + this.atomPath = (this.parent ? `${this.parent.atomPath}.` : "") + this.header.name; 556 + } 557 + getHeaderLength() { 558 + return this.extended ? 16 : 8; 559 + } 560 + getPayloadLength(remaining) { 561 + return (this.header.length === 0n ? remaining : Number(this.header.length)) - this.getHeaderLength(); 562 + } 563 + async readAtoms(tokenizer, dataHandler, size) { 564 + while (size > 0) { 565 + const atomBean = await _Atom.readAtom(tokenizer, dataHandler, this, size); 566 + this.children.push(atomBean); 567 + size -= atomBean.header.length === 0n ? size : Number(atomBean.header.length); 568 + } 569 + } 570 + async readData(tokenizer, dataHandler, remaining) { 571 + switch (this.header.name) { 572 + // "Container" atoms, contains nested atoms 573 + case "moov": 574 + // The Movie Atom: contains other atoms 575 + case "udta": 576 + // User defined atom 577 + case "mdia": 578 + // Media atom 579 + case "minf": 580 + // Media Information Atom 581 + case "stbl": 582 + // The Sample Table Atom 583 + case "<id>": 584 + case "ilst": 585 + case "tref": 586 + case "moof": 587 + return this.readAtoms(tokenizer, dataHandler, this.getPayloadLength(remaining)); 588 + case "meta": { 589 + const peekHeader = await tokenizer.peekToken(Header); 590 + const paddingLength = peekHeader.name === "hdlr" ? 0 : 4; 591 + await tokenizer.ignore(paddingLength); 592 + return this.readAtoms(tokenizer, dataHandler, this.getPayloadLength(remaining) - paddingLength); 593 + } 594 + default: 595 + return dataHandler(this, remaining); 596 + } 597 + } 598 + }; 599 + 600 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/MP4Parser.js 601 + var debug3 = (0, import_debug3.default)("music-metadata:parser:MP4"); 602 + var tagFormat = "iTunes"; 603 + var encoderDict = { 604 + raw: { 605 + lossy: false, 606 + format: "raw" 607 + }, 608 + MAC3: { 609 + lossy: true, 610 + format: "MACE 3:1" 611 + }, 612 + MAC6: { 613 + lossy: true, 614 + format: "MACE 6:1" 615 + }, 616 + ima4: { 617 + lossy: true, 618 + format: "IMA 4:1" 619 + }, 620 + ulaw: { 621 + lossy: true, 622 + format: "uLaw 2:1" 623 + }, 624 + alaw: { 625 + lossy: true, 626 + format: "uLaw 2:1" 627 + }, 628 + Qclp: { 629 + lossy: true, 630 + format: "QUALCOMM PureVoice" 631 + }, 632 + ".mp3": { 633 + lossy: true, 634 + format: "MPEG-1 layer 3" 635 + }, 636 + alac: { 637 + lossy: false, 638 + format: "ALAC" 639 + }, 640 + "ac-3": { 641 + lossy: true, 642 + format: "AC-3" 643 + }, 644 + mp4a: { 645 + lossy: true, 646 + format: "MPEG-4/AAC" 647 + }, 648 + mp4s: { 649 + lossy: true, 650 + format: "MP4S" 651 + }, 652 + // Closed Captioning Media, https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW87 653 + c608: { 654 + lossy: true, 655 + format: "CEA-608" 656 + }, 657 + c708: { 658 + lossy: true, 659 + format: "CEA-708" 660 + } 661 + }; 662 + function distinct(value, index, self) { 663 + return self.indexOf(value) === index; 664 + } 665 + __name(distinct, "distinct"); 666 + var MP4Parser = class _MP4Parser extends BasicParser { 667 + static { 668 + __name(this, "MP4Parser"); 669 + } 670 + constructor() { 671 + super(...arguments); 672 + this.tracks = /* @__PURE__ */ new Map(); 673 + this.hasVideoTrack = false; 674 + this.hasAudioTrack = true; 675 + this.atomParsers = { 676 + /** 677 + * Parse movie header (mvhd) atom 678 + * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-56313 679 + */ 680 + mvhd: /* @__PURE__ */ __name(async (len) => { 681 + const mvhd = await this.tokenizer.readToken(new MvhdAtom(len)); 682 + this.metadata.setFormat("creationTime", mvhd.creationTime); 683 + this.metadata.setFormat("modificationTime", mvhd.modificationTime); 684 + }, "mvhd"), 685 + chap: /* @__PURE__ */ __name(async (len) => { 686 + const td = this.getTrackDescription(); 687 + const trackIds = []; 688 + while (len >= UINT32_BE.len) { 689 + trackIds.push(await this.tokenizer.readNumber(UINT32_BE)); 690 + len -= UINT32_BE.len; 691 + } 692 + td.chapterList = trackIds; 693 + }, "chap"), 694 + /** 695 + * Parse mdat atom. 696 + * Will scan for chapters 697 + */ 698 + mdat: /* @__PURE__ */ __name(async (len) => { 699 + if (this.options.includeChapters) { 700 + const trackWithChapters = [...this.tracks.values()].filter((track) => track.chapterList); 701 + if (trackWithChapters.length === 1) { 702 + const chapterTrackIds = trackWithChapters[0].chapterList; 703 + const chapterTracks = [...this.tracks.values()].filter((track) => chapterTrackIds.indexOf(track.header.trackId) !== -1); 704 + if (chapterTracks.length === 1) { 705 + return this.parseChapterTrack(chapterTracks[0], trackWithChapters[0], len); 706 + } 707 + } 708 + } 709 + await this.tokenizer.ignore(len); 710 + }, "mdat"), 711 + ftyp: /* @__PURE__ */ __name(async (len) => { 712 + const types = []; 713 + while (len > 0) { 714 + const ftype = await this.tokenizer.readToken(ftyp); 715 + len -= ftyp.len; 716 + const value = ftype.type.replace(/\W/g, ""); 717 + if (value.length > 0) { 718 + types.push(value); 719 + } 720 + } 721 + debug3(`ftyp: ${types.join("/")}`); 722 + const x = types.filter(distinct).join("/"); 723 + this.metadata.setFormat("container", x); 724 + }, "ftyp"), 725 + /** 726 + * Parse sample description atom 727 + */ 728 + stsd: /* @__PURE__ */ __name(async (len) => { 729 + const stsd = await this.tokenizer.readToken(new StsdAtom(len)); 730 + const trackDescription = this.getTrackDescription(); 731 + trackDescription.soundSampleDescription = stsd.table.map((dfEntry) => this.parseSoundSampleDescription(dfEntry)); 732 + }, "stsd"), 733 + /** 734 + * Parse sample-sizes atom ('stsz') 735 + */ 736 + stsz: /* @__PURE__ */ __name(async (len) => { 737 + const stsz = await this.tokenizer.readToken(new StszAtom(len)); 738 + const td = this.getTrackDescription(); 739 + td.sampleSize = stsz.sampleSize; 740 + td.sampleSizeTable = stsz.entries; 741 + }, "stsz"), 742 + date: /* @__PURE__ */ __name(async (len) => { 743 + const date = await this.tokenizer.readToken(new StringType(len, "utf-8")); 744 + await this.addTag("date", date); 745 + }, "date") 746 + }; 747 + } 748 + static read_BE_Integer(array, signed) { 749 + const integerType = (signed ? "INT" : "UINT") + array.length * 8 + (array.length > 1 ? "_BE" : ""); 750 + const token = lib_exports[integerType]; 751 + if (!token) { 752 + throw new Mp4ContentError(`Token for integer type not found: "${integerType}"`); 753 + } 754 + return Number(token.get(array, 0)); 755 + } 756 + async parse() { 757 + this.hasVideoTrack = false; 758 + this.hasAudioTrack = true; 759 + this.tracks.clear(); 760 + let remainingFileSize = this.tokenizer.fileInfo.size || 0; 761 + while (!this.tokenizer.fileInfo.size || remainingFileSize > 0) { 762 + try { 763 + const token = await this.tokenizer.peekToken(Header); 764 + if (token.name === "\0\0\0\0") { 765 + const errMsg = `Error at offset=${this.tokenizer.position}: box.id=0`; 766 + debug3(errMsg); 767 + this.addWarning(errMsg); 768 + break; 769 + } 770 + } catch (error) { 771 + if (error instanceof Error) { 772 + const errMsg = `Error at offset=${this.tokenizer.position}: ${error.message}`; 773 + debug3(errMsg); 774 + this.addWarning(errMsg); 775 + } else 776 + throw error; 777 + break; 778 + } 779 + const rootAtom = await Atom.readAtom(this.tokenizer, (atom, remaining) => this.handleAtom(atom, remaining), null, remainingFileSize); 780 + remainingFileSize -= rootAtom.header.length === BigInt(0) ? remainingFileSize : Number(rootAtom.header.length); 781 + } 782 + const formatList = []; 783 + this.tracks.forEach((track) => { 784 + const trackFormats = []; 785 + track.soundSampleDescription.forEach((ssd) => { 786 + const streamInfo = {}; 787 + const encoderInfo = encoderDict[ssd.dataFormat]; 788 + if (encoderInfo) { 789 + trackFormats.push(encoderInfo.format); 790 + streamInfo.codecName = encoderInfo.format; 791 + } else { 792 + streamInfo.codecName = `<${ssd.dataFormat}>`; 793 + } 794 + if (ssd.description) { 795 + const { description } = ssd; 796 + if (description.sampleRate > 0) { 797 + streamInfo.type = TrackType.audio; 798 + streamInfo.audio = { 799 + samplingFrequency: description.sampleRate, 800 + bitDepth: description.sampleSize, 801 + channels: description.numAudioChannels 802 + }; 803 + } 804 + } 805 + this.metadata.addStreamInfo(streamInfo); 806 + }); 807 + if (trackFormats.length >= 1) { 808 + formatList.push(trackFormats.join("/")); 809 + } 810 + }); 811 + if (formatList.length > 0) { 812 + this.metadata.setFormat("codec", formatList.filter(distinct).join("+")); 813 + } 814 + const audioTracks = [...this.tracks.values()].filter((track) => { 815 + return track.soundSampleDescription.length >= 1 && track.soundSampleDescription[0].description && track.soundSampleDescription[0].description.numAudioChannels > 0; 816 + }); 817 + for (const audioTrack of audioTracks) { 818 + if (audioTrack.media.header && audioTrack.media.header.timeScale > 0) { 819 + audioTrack.sampleRate = audioTrack.media.header.timeScale; 820 + if (audioTrack.media.header.duration > 0) { 821 + debug3("Using duration defined on audio track"); 822 + audioTrack.samples = audioTrack.media.header.duration; 823 + audioTrack.duration = audioTrack.samples / audioTrack.sampleRate; 824 + } 825 + if (audioTrack.fragments.length > 0) { 826 + debug3("Calculate duration defined in track fragments"); 827 + let totalTimeUnits = 0; 828 + audioTrack.sizeInBytes = 0; 829 + for (const fragment of audioTrack.fragments) { 830 + for (const sample of fragment.trackRun.samples) { 831 + const dur = sample.sampleDuration ?? fragment.header.defaultSampleDuration ?? 0; 832 + const size = sample.sampleSize ?? fragment.header.defaultSampleSize ?? 0; 833 + if (dur === 0) { 834 + throw new Error("Missing sampleDuration and no defaultSampleDuration in track fragment header"); 835 + } 836 + if (size === 0) { 837 + throw new Error("Missing sampleSize and no defaultSampleSize in track fragment header"); 838 + } 839 + totalTimeUnits += dur; 840 + audioTrack.sizeInBytes += size; 841 + } 842 + } 843 + if (!audioTrack.samples) { 844 + audioTrack.samples = totalTimeUnits; 845 + } 846 + if (!audioTrack.duration) { 847 + audioTrack.duration = totalTimeUnits / audioTrack.sampleRate; 848 + } 849 + } else if (audioTrack.sampleSizeTable.length > 0) { 850 + audioTrack.sizeInBytes = audioTrack.sampleSizeTable.reduce((sum, n) => sum + n, 0); 851 + } 852 + } 853 + const ssd = audioTrack.soundSampleDescription[0]; 854 + if (ssd.description && audioTrack.media.header) { 855 + this.metadata.setFormat("sampleRate", ssd.description.sampleRate); 856 + this.metadata.setFormat("bitsPerSample", ssd.description.sampleSize); 857 + this.metadata.setFormat("numberOfChannels", ssd.description.numAudioChannels); 858 + if (audioTrack.media.header.timeScale === 0 && audioTrack.timeToSampleTable.length > 0) { 859 + const totalSampleSize = audioTrack.timeToSampleTable.map((ttstEntry) => ttstEntry.count * ttstEntry.duration).reduce((total, sampleSize) => total + sampleSize); 860 + audioTrack.duration = totalSampleSize / ssd.description.sampleRate; 861 + } 862 + } 863 + const encoderInfo = encoderDict[ssd.dataFormat]; 864 + if (encoderInfo) { 865 + this.metadata.setFormat("lossless", !encoderInfo.lossy); 866 + } 867 + } 868 + if (audioTracks.length >= 1) { 869 + const firstAudioTrack = audioTracks[0]; 870 + if (firstAudioTrack.duration) { 871 + this.metadata.setFormat("duration", firstAudioTrack.duration); 872 + if (firstAudioTrack.sizeInBytes) { 873 + this.metadata.setFormat("bitrate", 8 * firstAudioTrack.sizeInBytes / firstAudioTrack.duration); 874 + } 875 + } 876 + } 877 + this.metadata.setFormat("hasAudio", this.hasAudioTrack); 878 + this.metadata.setFormat("hasVideo", this.hasVideoTrack); 879 + } 880 + async handleAtom(atom, remaining) { 881 + if (atom.parent) { 882 + switch (atom.parent.header.name) { 883 + case "ilst": 884 + case "<id>": 885 + return this.parseMetadataItemData(atom); 886 + case "moov": 887 + switch (atom.header.name) { 888 + case "trak": 889 + return this.parseTrackBox(atom); 890 + case "udta": 891 + return this.parseTrackBox(atom); 892 + } 893 + break; 894 + case "moof": 895 + switch (atom.header.name) { 896 + case "traf": 897 + return this.parseTrackFragmentBox(atom); 898 + } 899 + } 900 + } 901 + if (this.atomParsers[atom.header.name]) { 902 + return this.atomParsers[atom.header.name](remaining); 903 + } 904 + debug3(`No parser for atom path=${atom.atomPath}, payload-len=${remaining}, ignoring atom`); 905 + await this.tokenizer.ignore(remaining); 906 + } 907 + getTrackDescription() { 908 + const tracks = [...this.tracks.values()]; 909 + return tracks[tracks.length - 1]; 910 + } 911 + async addTag(id, value) { 912 + await this.metadata.addTag(tagFormat, id, value); 913 + } 914 + addWarning(message) { 915 + debug3(`Warning: ${message}`); 916 + this.metadata.addWarning(message); 917 + } 918 + /** 919 + * Parse data of Meta-item-list-atom (item of 'ilst' atom) 920 + * @param metaAtom 921 + * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8 922 + */ 923 + parseMetadataItemData(metaAtom) { 924 + let tagKey = metaAtom.header.name; 925 + return metaAtom.readAtoms(this.tokenizer, async (child, remaining) => { 926 + const payLoadLength = child.getPayloadLength(remaining); 927 + switch (child.header.name) { 928 + case "data": 929 + return this.parseValueAtom(tagKey, child); 930 + case "name": 931 + // name atom (optional) 932 + case "mean": 933 + case "rate": { 934 + const name = await this.tokenizer.readToken(new NameAtom(payLoadLength)); 935 + tagKey += `:${name.name}`; 936 + break; 937 + } 938 + default: { 939 + const uint8Array = await this.tokenizer.readToken(new Uint8ArrayType(payLoadLength)); 940 + this.addWarning(`Unsupported meta-item: ${tagKey}[${child.header.name}] => value=${uint8ArrayToHex(uint8Array)} ascii=${textDecode(uint8Array, "ascii")}`); 941 + } 942 + } 943 + }, metaAtom.getPayloadLength(0)); 944 + } 945 + async parseValueAtom(tagKey, metaAtom) { 946 + const dataAtom = await this.tokenizer.readToken(new DataAtom(Number(metaAtom.header.length) - Header.len)); 947 + if (dataAtom.type.set !== 0) { 948 + throw new Mp4ContentError(`Unsupported type-set != 0: ${dataAtom.type.set}`); 949 + } 950 + switch (dataAtom.type.type) { 951 + case 0: 952 + switch (tagKey) { 953 + case "trkn": 954 + case "disk": { 955 + const num = UINT8.get(dataAtom.value, 3); 956 + const of = UINT8.get(dataAtom.value, 5); 957 + await this.addTag(tagKey, `${num}/${of}`); 958 + break; 959 + } 960 + case "gnre": { 961 + const genreInt = UINT8.get(dataAtom.value, 1); 962 + const genreStr = Genres[genreInt - 1]; 963 + await this.addTag(tagKey, genreStr); 964 + break; 965 + } 966 + case "rate": { 967 + const rate = textDecode(dataAtom.value, "ascii"); 968 + await this.addTag(tagKey, rate); 969 + break; 970 + } 971 + default: 972 + debug3(`unknown proprietary value type for: ${metaAtom.atomPath}`); 973 + } 974 + break; 975 + case 1: 976 + // UTF-8: Without any count or NULL terminator 977 + case 18: 978 + await this.addTag(tagKey, textDecode(dataAtom.value)); 979 + break; 980 + case 13: 981 + if (this.options.skipCovers) 982 + break; 983 + await this.addTag(tagKey, { 984 + format: "image/jpeg", 985 + data: Uint8Array.from(dataAtom.value) 986 + }); 987 + break; 988 + case 14: 989 + if (this.options.skipCovers) 990 + break; 991 + await this.addTag(tagKey, { 992 + format: "image/png", 993 + data: Uint8Array.from(dataAtom.value) 994 + }); 995 + break; 996 + case 21: 997 + await this.addTag(tagKey, _MP4Parser.read_BE_Integer(dataAtom.value, true)); 998 + break; 999 + case 22: 1000 + await this.addTag(tagKey, _MP4Parser.read_BE_Integer(dataAtom.value, false)); 1001 + break; 1002 + case 65: 1003 + await this.addTag(tagKey, UINT8.get(dataAtom.value, 0)); 1004 + break; 1005 + case 66: 1006 + await this.addTag(tagKey, UINT16_BE.get(dataAtom.value, 0)); 1007 + break; 1008 + case 67: 1009 + await this.addTag(tagKey, UINT32_BE.get(dataAtom.value, 0)); 1010 + break; 1011 + default: 1012 + this.addWarning(`atom key=${tagKey}, has unknown well-known-type (data-type): ${dataAtom.type.type}`); 1013 + } 1014 + } 1015 + async parseTrackBox(trakBox) { 1016 + const track = { 1017 + media: {}, 1018 + fragments: [] 1019 + }; 1020 + await trakBox.readAtoms(this.tokenizer, async (child, remaining) => { 1021 + const payLoadLength = child.getPayloadLength(remaining); 1022 + switch (child.header.name) { 1023 + case "chap": { 1024 + const chap = await this.tokenizer.readToken(new ChapterTrackReferenceBox(remaining)); 1025 + track.chapterList = chap; 1026 + break; 1027 + } 1028 + case "tkhd": 1029 + track.header = await this.tokenizer.readToken(new TrackHeaderAtom(payLoadLength)); 1030 + break; 1031 + case "hdlr": 1032 + track.handler = await this.tokenizer.readToken(new HandlerBox(payLoadLength)); 1033 + track.isAudio = () => track.handler.handlerType === "audi" || track.handler.handlerType === "soun"; 1034 + track.isVideo = () => track.handler.handlerType === "vide"; 1035 + if (track.isAudio()) { 1036 + this.hasAudioTrack = true; 1037 + } else if (track.isVideo()) { 1038 + this.hasVideoTrack = true; 1039 + } 1040 + break; 1041 + case "mdhd": { 1042 + const mdhd_data = await this.tokenizer.readToken(new MdhdAtom(payLoadLength)); 1043 + track.media.header = mdhd_data; 1044 + break; 1045 + } 1046 + case "stco": { 1047 + const stco = await this.tokenizer.readToken(new StcoAtom(payLoadLength)); 1048 + track.chunkOffsetTable = stco.entries; 1049 + break; 1050 + } 1051 + case "stsc": { 1052 + const stsc = await this.tokenizer.readToken(new StscAtom(payLoadLength)); 1053 + track.sampleToChunkTable = stsc.entries; 1054 + break; 1055 + } 1056 + case "stsd": { 1057 + const stsd = await this.tokenizer.readToken(new StsdAtom(payLoadLength)); 1058 + track.soundSampleDescription = stsd.table.map((dfEntry) => this.parseSoundSampleDescription(dfEntry)); 1059 + break; 1060 + } 1061 + case "stts": { 1062 + const stts = await this.tokenizer.readToken(new SttsAtom(payLoadLength)); 1063 + track.timeToSampleTable = stts.entries; 1064 + break; 1065 + } 1066 + case "stsz": { 1067 + const stsz = await this.tokenizer.readToken(new StszAtom(payLoadLength)); 1068 + track.sampleSize = stsz.sampleSize; 1069 + track.sampleSizeTable = stsz.entries; 1070 + break; 1071 + } 1072 + case "dinf": 1073 + case "vmhd": 1074 + case "smhd": 1075 + debug3(`Ignoring: ${child.header.name}`); 1076 + await this.tokenizer.ignore(payLoadLength); 1077 + break; 1078 + default: { 1079 + debug3(`Unexpected track box: ${child.header.name}`); 1080 + await this.tokenizer.ignore(payLoadLength); 1081 + } 1082 + } 1083 + }, trakBox.getPayloadLength(0)); 1084 + this.tracks.set(track.header.trackId, track); 1085 + } 1086 + parseTrackFragmentBox(trafBox) { 1087 + let tfhd; 1088 + return trafBox.readAtoms(this.tokenizer, async (child, remaining) => { 1089 + const payLoadLength = child.getPayloadLength(remaining); 1090 + switch (child.header.name) { 1091 + case "tfhd": { 1092 + const fragmentHeaderBox = new TrackFragmentHeaderBox(child.getPayloadLength(remaining)); 1093 + tfhd = await this.tokenizer.readToken(fragmentHeaderBox); 1094 + break; 1095 + } 1096 + case "tfdt": 1097 + await this.tokenizer.ignore(payLoadLength); 1098 + break; 1099 + case "trun": { 1100 + const trackRunBox = new TrackRunBox(payLoadLength); 1101 + const trun = await this.tokenizer.readToken(trackRunBox); 1102 + if (tfhd) { 1103 + const track = this.tracks.get(tfhd.trackId); 1104 + track?.fragments.push({ header: tfhd, trackRun: trun }); 1105 + } 1106 + break; 1107 + } 1108 + default: { 1109 + debug3(`Unexpected box: ${child.header.name}`); 1110 + await this.tokenizer.ignore(payLoadLength); 1111 + } 1112 + } 1113 + }, trafBox.getPayloadLength(0)); 1114 + } 1115 + /** 1116 + * @param sampleDescription 1117 + * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-128916 1118 + */ 1119 + parseSoundSampleDescription(sampleDescription) { 1120 + const ssd = { 1121 + dataFormat: sampleDescription.dataFormat, 1122 + dataReferenceIndex: sampleDescription.dataReferenceIndex 1123 + }; 1124 + let offset = 0; 1125 + if (sampleDescription.description) { 1126 + const version = SoundSampleDescriptionVersion.get(sampleDescription.description, offset); 1127 + offset += SoundSampleDescriptionVersion.len; 1128 + if (version.version === 0 || version.version === 1) { 1129 + ssd.description = SoundSampleDescriptionV0.get(sampleDescription.description, offset); 1130 + } else { 1131 + debug3(`Warning: sound-sample-description ${version} not implemented`); 1132 + } 1133 + } 1134 + return ssd; 1135 + } 1136 + async parseChapterTrack(chapterTrack, track, len) { 1137 + if (!chapterTrack.sampleSize) { 1138 + if (chapterTrack.chunkOffsetTable.length !== chapterTrack.sampleSizeTable.length) 1139 + throw new Error("Expected equal chunk-offset-table & sample-size-table length."); 1140 + } 1141 + const chapters = []; 1142 + for (let i = 0; i < chapterTrack.chunkOffsetTable.length && len > 0; ++i) { 1143 + const start = chapterTrack.timeToSampleTable.slice(0, i).reduce((acc, cur) => acc + cur.duration, 0); 1144 + const chunkOffset = chapterTrack.chunkOffsetTable[i]; 1145 + const nextChunkLen = chunkOffset - this.tokenizer.position; 1146 + const sampleSize = chapterTrack.sampleSize > 0 ? chapterTrack.sampleSize : chapterTrack.sampleSizeTable[i]; 1147 + len -= nextChunkLen + sampleSize; 1148 + if (len < 0) 1149 + throw new Mp4ContentError("Chapter chunk exceeding token length"); 1150 + await this.tokenizer.ignore(nextChunkLen); 1151 + const title = await this.tokenizer.readToken(new ChapterText(sampleSize)); 1152 + debug3(`Chapter ${i + 1}: ${title}`); 1153 + const chapter = { 1154 + title, 1155 + timeScale: chapterTrack.media.header ? chapterTrack.media.header.timeScale : 0, 1156 + start, 1157 + sampleOffset: this.findSampleOffset(track, this.tokenizer.position) 1158 + }; 1159 + debug3(`Chapter title=${chapter.title}, offset=${chapter.sampleOffset}/${track.header.duration}`); 1160 + chapters.push(chapter); 1161 + } 1162 + this.metadata.setFormat("chapters", chapters); 1163 + await this.tokenizer.ignore(len); 1164 + } 1165 + findSampleOffset(track, chapterOffset) { 1166 + let chunkIndex = 0; 1167 + while (chunkIndex < track.chunkOffsetTable.length && track.chunkOffsetTable[chunkIndex] < chapterOffset) { 1168 + ++chunkIndex; 1169 + } 1170 + return this.getChunkDuration(chunkIndex + 1, track); 1171 + } 1172 + getChunkDuration(chunkId, track) { 1173 + let ttsi = 0; 1174 + let ttsc = track.timeToSampleTable[ttsi].count; 1175 + let ttsd = track.timeToSampleTable[ttsi].duration; 1176 + let curChunkId = 1; 1177 + let samplesPerChunk = this.getSamplesPerChunk(curChunkId, track.sampleToChunkTable); 1178 + let totalDuration = 0; 1179 + while (curChunkId < chunkId) { 1180 + const nrOfSamples = Math.min(ttsc, samplesPerChunk); 1181 + totalDuration += nrOfSamples * ttsd; 1182 + ttsc -= nrOfSamples; 1183 + samplesPerChunk -= nrOfSamples; 1184 + if (samplesPerChunk === 0) { 1185 + ++curChunkId; 1186 + samplesPerChunk = this.getSamplesPerChunk(curChunkId, track.sampleToChunkTable); 1187 + } else { 1188 + ++ttsi; 1189 + ttsc = track.timeToSampleTable[ttsi].count; 1190 + ttsd = track.timeToSampleTable[ttsi].duration; 1191 + } 1192 + } 1193 + return totalDuration; 1194 + } 1195 + getSamplesPerChunk(chunkId, stcTable) { 1196 + for (let i = 0; i < stcTable.length - 1; ++i) { 1197 + if (chunkId >= stcTable[i].firstChunk && chunkId < stcTable[i + 1].firstChunk) { 1198 + return stcTable[i].samplesPerChunk; 1199 + } 1200 + } 1201 + return stcTable[stcTable.length - 1].samplesPerChunk; 1202 + } 1203 + }; 1204 + export { 1205 + MP4Parser 1206 + }; 1207 + 1208 + //# sourceMappingURL=./MP4Parser-N3XX43E2.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/MP4Parser-N3XX43E2.js.map
··· 1 + {"version":3,"sources":["/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/MP4Parser.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/Atom.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/AtomToken.js"],"sourcesContent":["import initDebug from 'debug';\nimport * as Token from 'token-types';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { Genres } from '../id3v1/ID3v1Parser.js';\nimport { Atom } from './Atom.js';\nimport * as AtomToken from './AtomToken.js';\nimport { ChapterTrackReferenceBox, Mp4ContentError } from './AtomToken.js';\nimport { TrackType } from '../type.js';\nimport { uint8ArrayToHex } from 'uint8array-extras';\nimport { textDecode } from '@borewit/text-codec';\nconst debug = initDebug('music-metadata:parser:MP4');\nconst tagFormat = 'iTunes';\nconst encoderDict = {\n raw: {\n lossy: false,\n format: 'raw'\n },\n MAC3: {\n lossy: true,\n format: 'MACE 3:1'\n },\n MAC6: {\n lossy: true,\n format: 'MACE 6:1'\n },\n ima4: {\n lossy: true,\n format: 'IMA 4:1'\n },\n ulaw: {\n lossy: true,\n format: 'uLaw 2:1'\n },\n alaw: {\n lossy: true,\n format: 'uLaw 2:1'\n },\n Qclp: {\n lossy: true,\n format: 'QUALCOMM PureVoice'\n },\n '.mp3': {\n lossy: true,\n format: 'MPEG-1 layer 3'\n },\n alac: {\n lossy: false,\n format: 'ALAC'\n },\n 'ac-3': {\n lossy: true,\n format: 'AC-3'\n },\n mp4a: {\n lossy: true,\n format: 'MPEG-4/AAC'\n },\n mp4s: {\n lossy: true,\n format: 'MP4S'\n },\n // Closed Captioning Media, https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW87\n c608: {\n lossy: true,\n format: 'CEA-608'\n },\n c708: {\n lossy: true,\n format: 'CEA-708'\n }\n};\nfunction distinct(value, index, self) {\n return self.indexOf(value) === index;\n}\n/*\n * Parser for the MP4 (MPEG-4 Part 14) container format\n * Standard: ISO/IEC 14496-14\n * supporting:\n * - QuickTime container\n * - MP4 File Format\n * - 3GPP file format\n * - 3GPP2 file format\n *\n * MPEG-4 Audio / Part 3 (.m4a)& MPEG 4 Video (m4v, mp4) extension.\n * Support for Apple iTunes tags as found in a M4A/M4V files.\n * Ref:\n * https://en.wikipedia.org/wiki/ISO_base_media_file_format\n * https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/Metadata/Metadata.html\n * http://atomicparsley.sourceforge.net/mpeg-4files.html\n * https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata\n * https://wiki.multimedia.cx/index.php/QuickTime_container\n */\nexport class MP4Parser extends BasicParser {\n constructor() {\n super(...arguments);\n this.tracks = new Map();\n this.hasVideoTrack = false;\n this.hasAudioTrack = true;\n this.atomParsers = {\n /**\n * Parse movie header (mvhd) atom\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-56313\n */\n mvhd: async (len) => {\n const mvhd = await this.tokenizer.readToken(new AtomToken.MvhdAtom(len));\n this.metadata.setFormat('creationTime', mvhd.creationTime);\n this.metadata.setFormat('modificationTime', mvhd.modificationTime);\n },\n chap: async (len) => {\n const td = this.getTrackDescription();\n const trackIds = [];\n while (len >= Token.UINT32_BE.len) {\n trackIds.push(await this.tokenizer.readNumber(Token.UINT32_BE));\n len -= Token.UINT32_BE.len;\n }\n td.chapterList = trackIds;\n },\n /**\n * Parse mdat atom.\n * Will scan for chapters\n */\n mdat: async (len) => {\n if (this.options.includeChapters) {\n const trackWithChapters = [...this.tracks.values()].filter(track => track.chapterList);\n if (trackWithChapters.length === 1) {\n const chapterTrackIds = trackWithChapters[0].chapterList;\n const chapterTracks = [...this.tracks.values()].filter(track => chapterTrackIds.indexOf(track.header.trackId) !== -1);\n if (chapterTracks.length === 1) {\n return this.parseChapterTrack(chapterTracks[0], trackWithChapters[0], len);\n }\n }\n }\n await this.tokenizer.ignore(len);\n },\n ftyp: async (len) => {\n const types = [];\n while (len > 0) {\n const ftype = await this.tokenizer.readToken(AtomToken.ftyp);\n len -= AtomToken.ftyp.len;\n const value = ftype.type.replace(/\\W/g, '');\n if (value.length > 0) {\n types.push(value); // unshift for backward compatibility\n }\n }\n debug(`ftyp: ${types.join('/')}`);\n const x = types.filter(distinct).join('/');\n this.metadata.setFormat('container', x);\n },\n /**\n * Parse sample description atom\n */\n stsd: async (len) => {\n const stsd = await this.tokenizer.readToken(new AtomToken.StsdAtom(len));\n const trackDescription = this.getTrackDescription();\n trackDescription.soundSampleDescription = stsd.table.map(dfEntry => this.parseSoundSampleDescription(dfEntry));\n },\n /**\n * Parse sample-sizes atom ('stsz')\n */\n stsz: async (len) => {\n const stsz = await this.tokenizer.readToken(new AtomToken.StszAtom(len));\n const td = this.getTrackDescription();\n td.sampleSize = stsz.sampleSize;\n td.sampleSizeTable = stsz.entries;\n },\n date: async (len) => {\n const date = await this.tokenizer.readToken(new Token.StringType(len, 'utf-8'));\n await this.addTag('date', date);\n }\n };\n }\n static read_BE_Integer(array, signed) {\n const integerType = (signed ? 'INT' : 'UINT') + array.length * 8 + (array.length > 1 ? '_BE' : '');\n const token = Token[integerType];\n if (!token) {\n throw new Mp4ContentError(`Token for integer type not found: \"${integerType}\"`);\n }\n return Number(token.get(array, 0));\n }\n async parse() {\n this.hasVideoTrack = false;\n this.hasAudioTrack = true;\n this.tracks.clear();\n let remainingFileSize = this.tokenizer.fileInfo.size || 0;\n while (!this.tokenizer.fileInfo.size || remainingFileSize > 0) {\n try {\n const token = await this.tokenizer.peekToken(AtomToken.Header);\n if (token.name === '\\0\\0\\0\\0') {\n const errMsg = `Error at offset=${this.tokenizer.position}: box.id=0`;\n debug(errMsg);\n this.addWarning(errMsg);\n break;\n }\n }\n catch (error) {\n if (error instanceof Error) {\n const errMsg = `Error at offset=${this.tokenizer.position}: ${error.message}`;\n debug(errMsg);\n this.addWarning(errMsg);\n }\n else\n throw error;\n break;\n }\n const rootAtom = await Atom.readAtom(this.tokenizer, (atom, remaining) => this.handleAtom(atom, remaining), null, remainingFileSize);\n remainingFileSize -= rootAtom.header.length === BigInt(0) ? remainingFileSize : Number(rootAtom.header.length);\n }\n // Post process metadata\n const formatList = [];\n this.tracks.forEach(track => {\n const trackFormats = [];\n track.soundSampleDescription.forEach(ssd => {\n const streamInfo = {};\n const encoderInfo = encoderDict[ssd.dataFormat];\n if (encoderInfo) {\n trackFormats.push(encoderInfo.format);\n streamInfo.codecName = encoderInfo.format;\n }\n else {\n streamInfo.codecName = `<${ssd.dataFormat}>`;\n }\n if (ssd.description) {\n const { description } = ssd;\n if (description.sampleRate > 0) {\n streamInfo.type = TrackType.audio;\n streamInfo.audio = {\n samplingFrequency: description.sampleRate,\n bitDepth: description.sampleSize,\n channels: description.numAudioChannels\n };\n }\n }\n this.metadata.addStreamInfo(streamInfo);\n });\n if (trackFormats.length >= 1) {\n formatList.push(trackFormats.join('/'));\n }\n });\n if (formatList.length > 0) {\n this.metadata.setFormat('codec', formatList.filter(distinct).join('+'));\n }\n const audioTracks = [...this.tracks.values()].filter(track => {\n return track.soundSampleDescription.length >= 1 && track.soundSampleDescription[0].description && track.soundSampleDescription[0].description.numAudioChannels > 0;\n });\n // Calculate duration and bitrate of audio tracks\n for (const audioTrack of audioTracks) {\n if (audioTrack.media.header && audioTrack.media.header.timeScale > 0) {\n audioTrack.sampleRate = audioTrack.media.header.timeScale;\n if (audioTrack.media.header.duration > 0) {\n debug('Using duration defined on audio track');\n audioTrack.samples = audioTrack.media.header.duration;\n audioTrack.duration = audioTrack.samples / audioTrack.sampleRate;\n }\n if (audioTrack.fragments.length > 0) {\n debug('Calculate duration defined in track fragments');\n let totalTimeUnits = 0;\n audioTrack.sizeInBytes = 0;\n for (const fragment of audioTrack.fragments) {\n for (const sample of fragment.trackRun.samples) {\n const dur = sample.sampleDuration ?? fragment.header.defaultSampleDuration ?? 0;\n const size = sample.sampleSize ?? fragment.header.defaultSampleSize ?? 0;\n if (dur === 0) {\n throw new Error(\"Missing sampleDuration and no defaultSampleDuration in track fragment header\");\n }\n if (size === 0) {\n throw new Error(\"Missing sampleSize and no defaultSampleSize in track fragment header\");\n }\n totalTimeUnits += dur;\n audioTrack.sizeInBytes += size;\n }\n }\n if (!audioTrack.samples) {\n audioTrack.samples = totalTimeUnits;\n }\n if (!audioTrack.duration) {\n audioTrack.duration = totalTimeUnits / audioTrack.sampleRate;\n }\n }\n else if (audioTrack.sampleSizeTable.length > 0) {\n audioTrack.sizeInBytes = audioTrack.sampleSizeTable.reduce((sum, n) => sum + n, 0);\n }\n }\n const ssd = audioTrack.soundSampleDescription[0];\n if (ssd.description && audioTrack.media.header) {\n this.metadata.setFormat('sampleRate', ssd.description.sampleRate);\n this.metadata.setFormat('bitsPerSample', ssd.description.sampleSize);\n this.metadata.setFormat('numberOfChannels', ssd.description.numAudioChannels);\n if (audioTrack.media.header.timeScale === 0 && audioTrack.timeToSampleTable.length > 0) {\n const totalSampleSize = audioTrack.timeToSampleTable\n .map(ttstEntry => ttstEntry.count * ttstEntry.duration)\n .reduce((total, sampleSize) => total + sampleSize);\n audioTrack.duration = totalSampleSize / ssd.description.sampleRate;\n }\n }\n const encoderInfo = encoderDict[ssd.dataFormat];\n if (encoderInfo) {\n this.metadata.setFormat('lossless', !encoderInfo.lossy);\n }\n }\n if (audioTracks.length >= 1) {\n const firstAudioTrack = audioTracks[0];\n if (firstAudioTrack.duration) {\n this.metadata.setFormat('duration', firstAudioTrack.duration);\n if (firstAudioTrack.sizeInBytes) {\n this.metadata.setFormat('bitrate', 8 * firstAudioTrack.sizeInBytes / firstAudioTrack.duration);\n }\n }\n }\n this.metadata.setFormat('hasAudio', this.hasAudioTrack);\n this.metadata.setFormat('hasVideo', this.hasVideoTrack);\n }\n async handleAtom(atom, remaining) {\n if (atom.parent) {\n switch (atom.parent.header.name) {\n case 'ilst':\n case '<id>':\n return this.parseMetadataItemData(atom);\n case 'moov':\n switch (atom.header.name) {\n case 'trak':\n return this.parseTrackBox(atom);\n case 'udta':\n return this.parseTrackBox(atom);\n }\n break;\n case 'moof':\n switch (atom.header.name) {\n case 'traf':\n return this.parseTrackFragmentBox(atom);\n }\n }\n }\n // const payloadLength = atom.getPayloadLength(remaining);\n if (this.atomParsers[atom.header.name]) {\n return this.atomParsers[atom.header.name](remaining);\n }\n debug(`No parser for atom path=${atom.atomPath}, payload-len=${remaining}, ignoring atom`);\n await this.tokenizer.ignore(remaining);\n }\n getTrackDescription() {\n // ToDo: pick the right track, not the last track!!!!\n const tracks = [...this.tracks.values()];\n return tracks[tracks.length - 1];\n }\n async addTag(id, value) {\n await this.metadata.addTag(tagFormat, id, value);\n }\n addWarning(message) {\n debug(`Warning: ${message}`);\n this.metadata.addWarning(message);\n }\n /**\n * Parse data of Meta-item-list-atom (item of 'ilst' atom)\n * @param metaAtom\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8\n */\n parseMetadataItemData(metaAtom) {\n let tagKey = metaAtom.header.name;\n return metaAtom.readAtoms(this.tokenizer, async (child, remaining) => {\n const payLoadLength = child.getPayloadLength(remaining);\n switch (child.header.name) {\n case 'data': // value atom\n return this.parseValueAtom(tagKey, child);\n case 'name': // name atom (optional)\n case 'mean':\n case 'rate': {\n const name = await this.tokenizer.readToken(new AtomToken.NameAtom(payLoadLength));\n tagKey += `:${name.name}`;\n break;\n }\n default: {\n const uint8Array = await this.tokenizer.readToken(new Token.Uint8ArrayType(payLoadLength));\n this.addWarning(`Unsupported meta-item: ${tagKey}[${child.header.name}] => value=${uint8ArrayToHex(uint8Array)} ascii=${textDecode(uint8Array, 'ascii')}`);\n }\n }\n }, metaAtom.getPayloadLength(0));\n }\n async parseValueAtom(tagKey, metaAtom) {\n const dataAtom = await this.tokenizer.readToken(new AtomToken.DataAtom(Number(metaAtom.header.length) - AtomToken.Header.len));\n if (dataAtom.type.set !== 0) {\n throw new Mp4ContentError(`Unsupported type-set != 0: ${dataAtom.type.set}`);\n }\n // Use well-known-type table\n // Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW35\n switch (dataAtom.type.type) {\n case 0: // reserved: Reserved for use where no type needs to be indicated\n switch (tagKey) {\n case 'trkn':\n case 'disk': {\n const num = Token.UINT8.get(dataAtom.value, 3);\n const of = Token.UINT8.get(dataAtom.value, 5);\n // console.log(\" %s[data] = %s/%s\", tagKey, num, of);\n await this.addTag(tagKey, `${num}/${of}`);\n break;\n }\n case 'gnre': {\n const genreInt = Token.UINT8.get(dataAtom.value, 1);\n const genreStr = Genres[genreInt - 1];\n // console.log(\" %s[data] = %s\", tagKey, genreStr);\n await this.addTag(tagKey, genreStr);\n break;\n }\n case 'rate': {\n const rate = textDecode(dataAtom.value, 'ascii');\n await this.addTag(tagKey, rate);\n break;\n }\n default:\n debug(`unknown proprietary value type for: ${metaAtom.atomPath}`);\n }\n break;\n case 1: // UTF-8: Without any count or NULL terminator\n case 18: // Unknown: Found in m4b in combination with a '©gen' tag\n await this.addTag(tagKey, textDecode(dataAtom.value));\n break;\n case 13: // JPEG\n if (this.options.skipCovers)\n break;\n await this.addTag(tagKey, {\n format: 'image/jpeg',\n data: Uint8Array.from(dataAtom.value)\n });\n break;\n case 14: // PNG\n if (this.options.skipCovers)\n break;\n await this.addTag(tagKey, {\n format: 'image/png',\n data: Uint8Array.from(dataAtom.value)\n });\n break;\n case 21: // BE Signed Integer\n await this.addTag(tagKey, MP4Parser.read_BE_Integer(dataAtom.value, true));\n break;\n case 22: // BE Unsigned Integer\n await this.addTag(tagKey, MP4Parser.read_BE_Integer(dataAtom.value, false));\n break;\n case 65: // An 8-bit signed integer\n await this.addTag(tagKey, Token.UINT8.get(dataAtom.value, 0));\n break;\n case 66: // A big-endian 16-bit signed integer\n await this.addTag(tagKey, Token.UINT16_BE.get(dataAtom.value, 0));\n break;\n case 67: // A big-endian 32-bit signed integer\n await this.addTag(tagKey, Token.UINT32_BE.get(dataAtom.value, 0));\n break;\n default:\n this.addWarning(`atom key=${tagKey}, has unknown well-known-type (data-type): ${dataAtom.type.type}`);\n }\n }\n async parseTrackBox(trakBox) {\n // @ts-expect-error\n const track = {\n media: {},\n fragments: []\n };\n await trakBox.readAtoms(this.tokenizer, async (child, remaining) => {\n const payLoadLength = child.getPayloadLength(remaining);\n switch (child.header.name) {\n case 'chap': {\n const chap = await this.tokenizer.readToken(new ChapterTrackReferenceBox(remaining));\n track.chapterList = chap;\n break;\n }\n case 'tkhd': // TrackHeaderBox\n track.header = await this.tokenizer.readToken(new AtomToken.TrackHeaderAtom(payLoadLength));\n break;\n case 'hdlr': // TrackHeaderBox\n track.handler = await this.tokenizer.readToken(new AtomToken.HandlerBox(payLoadLength));\n track.isAudio = () => track.handler.handlerType === 'audi' || track.handler.handlerType === 'soun';\n track.isVideo = () => track.handler.handlerType === 'vide';\n if (track.isAudio()) {\n this.hasAudioTrack = true;\n }\n else if (track.isVideo()) {\n this.hasVideoTrack = true;\n }\n break;\n case 'mdhd': { // Parse media header (mdhd) box\n const mdhd_data = await this.tokenizer.readToken(new AtomToken.MdhdAtom(payLoadLength));\n track.media.header = mdhd_data;\n break;\n }\n case 'stco': {\n const stco = await this.tokenizer.readToken(new AtomToken.StcoAtom(payLoadLength));\n track.chunkOffsetTable = stco.entries; // remember chunk offsets\n break;\n }\n case 'stsc': { // sample-to-Chunk box\n const stsc = await this.tokenizer.readToken(new AtomToken.StscAtom(payLoadLength));\n track.sampleToChunkTable = stsc.entries;\n break;\n }\n case 'stsd': { // sample description box\n const stsd = await this.tokenizer.readToken(new AtomToken.StsdAtom(payLoadLength));\n track.soundSampleDescription = stsd.table.map(dfEntry => this.parseSoundSampleDescription(dfEntry));\n break;\n }\n case 'stts': { // time-to-sample table\n const stts = await this.tokenizer.readToken(new AtomToken.SttsAtom(payLoadLength));\n track.timeToSampleTable = stts.entries;\n break;\n }\n case 'stsz': {\n const stsz = await this.tokenizer.readToken(new AtomToken.StszAtom(payLoadLength));\n track.sampleSize = stsz.sampleSize;\n track.sampleSizeTable = stsz.entries;\n break;\n }\n case 'dinf':\n case 'vmhd':\n case 'smhd':\n debug(`Ignoring: ${child.header.name}`);\n await this.tokenizer.ignore(payLoadLength);\n break;\n default: {\n debug(`Unexpected track box: ${child.header.name}`);\n await this.tokenizer.ignore(payLoadLength);\n }\n }\n }, trakBox.getPayloadLength(0));\n // Register track\n this.tracks.set(track.header.trackId, track);\n }\n parseTrackFragmentBox(trafBox) {\n let tfhd;\n return trafBox.readAtoms(this.tokenizer, async (child, remaining) => {\n const payLoadLength = child.getPayloadLength(remaining);\n switch (child.header.name) {\n case 'tfhd': { // TrackFragmentHeaderBox\n const fragmentHeaderBox = new AtomToken.TrackFragmentHeaderBox(child.getPayloadLength(remaining));\n tfhd = await this.tokenizer.readToken(fragmentHeaderBox);\n break;\n }\n case 'tfdt': // TrackFragmentBaseMediaDecodeTimeBo\n await this.tokenizer.ignore(payLoadLength);\n break;\n case 'trun': { // TrackRunBox\n const trackRunBox = new AtomToken.TrackRunBox(payLoadLength);\n const trun = await this.tokenizer.readToken(trackRunBox);\n if (tfhd) {\n const track = this.tracks.get(tfhd.trackId);\n track?.fragments.push({ header: tfhd, trackRun: trun });\n }\n break;\n }\n default: {\n debug(`Unexpected box: ${child.header.name}`);\n await this.tokenizer.ignore(payLoadLength);\n }\n }\n }, trafBox.getPayloadLength(0));\n }\n /**\n * @param sampleDescription\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-128916\n */\n parseSoundSampleDescription(sampleDescription) {\n const ssd = {\n dataFormat: sampleDescription.dataFormat,\n dataReferenceIndex: sampleDescription.dataReferenceIndex\n };\n let offset = 0;\n if (sampleDescription.description) {\n const version = AtomToken.SoundSampleDescriptionVersion.get(sampleDescription.description, offset);\n offset += AtomToken.SoundSampleDescriptionVersion.len;\n if (version.version === 0 || version.version === 1) {\n // Sound Sample Description (Version 0)\n ssd.description = AtomToken.SoundSampleDescriptionV0.get(sampleDescription.description, offset);\n }\n else {\n debug(`Warning: sound-sample-description ${version} not implemented`);\n }\n }\n return ssd;\n }\n async parseChapterTrack(chapterTrack, track, len) {\n if (!chapterTrack.sampleSize) {\n if (chapterTrack.chunkOffsetTable.length !== chapterTrack.sampleSizeTable.length)\n throw new Error('Expected equal chunk-offset-table & sample-size-table length.');\n }\n const chapters = [];\n for (let i = 0; i < chapterTrack.chunkOffsetTable.length && len > 0; ++i) {\n const start = chapterTrack.timeToSampleTable\n .slice(0, i)\n .reduce((acc, cur) => acc + cur.duration, 0);\n const chunkOffset = chapterTrack.chunkOffsetTable[i];\n const nextChunkLen = chunkOffset - this.tokenizer.position;\n const sampleSize = chapterTrack.sampleSize > 0 ? chapterTrack.sampleSize : chapterTrack.sampleSizeTable[i];\n len -= nextChunkLen + sampleSize;\n if (len < 0)\n throw new Mp4ContentError('Chapter chunk exceeding token length');\n await this.tokenizer.ignore(nextChunkLen);\n const title = await this.tokenizer.readToken(new AtomToken.ChapterText(sampleSize));\n debug(`Chapter ${i + 1}: ${title}`);\n const chapter = {\n title,\n timeScale: chapterTrack.media.header ? chapterTrack.media.header.timeScale : 0,\n start,\n sampleOffset: this.findSampleOffset(track, this.tokenizer.position)\n };\n debug(`Chapter title=${chapter.title}, offset=${chapter.sampleOffset}/${track.header.duration}`); // ToDo, use media duration if required!!!\n chapters.push(chapter);\n }\n this.metadata.setFormat('chapters', chapters);\n await this.tokenizer.ignore(len);\n }\n findSampleOffset(track, chapterOffset) {\n let chunkIndex = 0;\n while (chunkIndex < track.chunkOffsetTable.length && track.chunkOffsetTable[chunkIndex] < chapterOffset) {\n ++chunkIndex;\n }\n return this.getChunkDuration(chunkIndex + 1, track);\n }\n getChunkDuration(chunkId, track) {\n let ttsi = 0;\n let ttsc = track.timeToSampleTable[ttsi].count;\n let ttsd = track.timeToSampleTable[ttsi].duration;\n let curChunkId = 1;\n let samplesPerChunk = this.getSamplesPerChunk(curChunkId, track.sampleToChunkTable);\n let totalDuration = 0;\n while (curChunkId < chunkId) {\n const nrOfSamples = Math.min(ttsc, samplesPerChunk);\n totalDuration += nrOfSamples * ttsd;\n ttsc -= nrOfSamples;\n samplesPerChunk -= nrOfSamples;\n if (samplesPerChunk === 0) {\n ++curChunkId;\n samplesPerChunk = this.getSamplesPerChunk(curChunkId, track.sampleToChunkTable);\n }\n else {\n ++ttsi;\n ttsc = track.timeToSampleTable[ttsi].count;\n ttsd = track.timeToSampleTable[ttsi].duration;\n }\n }\n return totalDuration;\n }\n getSamplesPerChunk(chunkId, stcTable) {\n for (let i = 0; i < stcTable.length - 1; ++i) {\n if (chunkId >= stcTable[i].firstChunk && chunkId < stcTable[i + 1].firstChunk) {\n return stcTable[i].samplesPerChunk;\n }\n }\n return stcTable[stcTable.length - 1].samplesPerChunk;\n }\n}\n","import initDebug from 'debug';\nimport * as AtomToken from './AtomToken.js';\nimport { Header } from './AtomToken.js';\nconst debug = initDebug('music-metadata:parser:MP4:Atom');\nexport class Atom {\n static async readAtom(tokenizer, dataHandler, parent, remaining) {\n // Parse atom header\n const offset = tokenizer.position;\n debug(`Reading next token on offset=${offset}...`); // buf.toString('ascii')\n const header = await tokenizer.readToken(AtomToken.Header);\n const extended = header.length === 1n;\n if (extended) {\n header.length = await tokenizer.readToken(AtomToken.ExtendedSize);\n }\n const atomBean = new Atom(header, extended, parent);\n const payloadLength = atomBean.getPayloadLength(remaining);\n debug(`parse atom name=${atomBean.atomPath}, extended=${atomBean.extended}, offset=${offset}, len=${atomBean.header.length}`); // buf.toString('ascii')\n await atomBean.readData(tokenizer, dataHandler, payloadLength);\n return atomBean;\n }\n constructor(header, extended, parent) {\n this.header = header;\n this.extended = extended;\n this.parent = parent;\n this.children = [];\n this.atomPath = (this.parent ? `${this.parent.atomPath}.` : '') + this.header.name;\n }\n getHeaderLength() {\n return this.extended ? 16 : 8;\n }\n getPayloadLength(remaining) {\n return (this.header.length === 0n ? remaining : Number(this.header.length)) - this.getHeaderLength();\n }\n async readAtoms(tokenizer, dataHandler, size) {\n while (size > 0) {\n const atomBean = await Atom.readAtom(tokenizer, dataHandler, this, size);\n this.children.push(atomBean);\n size -= atomBean.header.length === 0n ? size : Number(atomBean.header.length);\n }\n }\n async readData(tokenizer, dataHandler, remaining) {\n switch (this.header.name) {\n // \"Container\" atoms, contains nested atoms\n case 'moov': // The Movie Atom: contains other atoms\n case 'udta': // User defined atom\n case 'mdia': // Media atom\n case 'minf': // Media Information Atom\n case 'stbl': // The Sample Table Atom\n case '<id>':\n case 'ilst':\n case 'tref':\n case 'moof':\n return this.readAtoms(tokenizer, dataHandler, this.getPayloadLength(remaining));\n case 'meta': { // Metadata Atom, ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8\n // meta has 4 bytes of padding, ignore\n const peekHeader = await tokenizer.peekToken(Header);\n const paddingLength = peekHeader.name === 'hdlr' ? 0 : 4;\n await tokenizer.ignore(paddingLength);\n return this.readAtoms(tokenizer, dataHandler, this.getPayloadLength(remaining) - paddingLength);\n }\n default:\n return dataHandler(this, remaining);\n }\n }\n}\n","import * as Token from 'token-types';\nimport initDebug from 'debug';\nimport { FourCcToken } from '../common/FourCC.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nimport * as util from '../common/Util.js';\nconst debug = initDebug('music-metadata:parser:MP4:atom');\nexport class Mp4ContentError extends makeUnexpectedFileContentError('MP4') {\n}\nexport const Header = {\n len: 8,\n get: (buf, off) => {\n const length = Token.UINT32_BE.get(buf, off);\n if (length < 0)\n throw new Mp4ContentError('Invalid atom header length');\n return {\n length: BigInt(length),\n name: new Token.StringType(4, 'latin1').get(buf, off + 4)\n };\n },\n put: (buf, off, hdr) => {\n Token.UINT32_BE.put(buf, off, Number(hdr.length));\n return FourCcToken.put(buf, off + 4, hdr.name);\n }\n};\n/**\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html#//apple_ref/doc/uid/TP40000939-CH203-38190\n */\nexport const ExtendedSize = Token.UINT64_BE;\nexport const ftyp = {\n len: 4,\n get: (buf, off) => {\n return {\n type: new Token.StringType(4, 'ascii').get(buf, off)\n };\n }\n};\n/**\n * Token: Movie Header Atom\n */\nexport const mhdr = {\n len: 8,\n get: (buf, off) => {\n return {\n version: Token.UINT8.get(buf, off),\n flags: Token.UINT24_BE.get(buf, off + 1),\n nextItemID: Token.UINT32_BE.get(buf, off + 4)\n };\n }\n};\n/**\n * Base class for 'fixed' length atoms.\n * In some cases these atoms are longer then the sum of the described fields.\n * Issue: https://github.com/Borewit/music-metadata/issues/120\n */\nexport class FixedLengthAtom {\n /**\n *\n * @param {number} len Length as specified in the size field\n * @param {number} expLen Total length of sum of specified fields in the standard\n * @param atomId Atom ID\n */\n constructor(len, expLen, atomId) {\n if (len < expLen) {\n throw new Mp4ContentError(`Atom ${atomId} expected to be ${expLen}, but specifies ${len} bytes long.`);\n }\n if (len > expLen) {\n debug(`Warning: atom ${atomId} expected to be ${expLen}, but was actually ${len} bytes long.`);\n }\n this.len = len;\n }\n}\n/**\n * Timestamp stored in seconds since Mac Epoch (1 January 1904)\n */\nconst SecondsSinceMacEpoch = {\n len: 4,\n get: (buf, off) => {\n const secondsSinceUnixEpoch = Token.UINT32_BE.get(buf, off) - 2082844800;\n return new Date(secondsSinceUnixEpoch * 1000);\n }\n};\n/**\n * Token: Media Header Atom\n * Ref:\n * - https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-SW34\n * - https://wiki.multimedia.cx/index.php/QuickTime_container#mdhd\n */\nexport class MdhdAtom extends FixedLengthAtom {\n constructor(len) {\n super(len, 24, 'mdhd');\n }\n get(buf, off) {\n return {\n version: Token.UINT8.get(buf, off + 0),\n flags: Token.UINT24_BE.get(buf, off + 1),\n creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\n modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\n timeScale: Token.UINT32_BE.get(buf, off + 12),\n duration: Token.UINT32_BE.get(buf, off + 16),\n language: Token.UINT16_BE.get(buf, off + 20),\n quality: Token.UINT16_BE.get(buf, off + 22)\n };\n }\n}\n/**\n * Token: Movie Header Atom\n */\nexport class MvhdAtom extends FixedLengthAtom {\n constructor(len) {\n super(len, 100, 'mvhd');\n }\n get(buf, off) {\n return {\n version: Token.UINT8.get(buf, off),\n flags: Token.UINT24_BE.get(buf, off + 1),\n creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\n modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\n timeScale: Token.UINT32_BE.get(buf, off + 12),\n duration: Token.UINT32_BE.get(buf, off + 16),\n preferredRate: Token.UINT32_BE.get(buf, off + 20),\n preferredVolume: Token.UINT16_BE.get(buf, off + 24),\n // ignore reserver: 10 bytes\n // ignore matrix structure: 36 bytes\n previewTime: Token.UINT32_BE.get(buf, off + 72),\n previewDuration: Token.UINT32_BE.get(buf, off + 76),\n posterTime: Token.UINT32_BE.get(buf, off + 80),\n selectionTime: Token.UINT32_BE.get(buf, off + 84),\n selectionDuration: Token.UINT32_BE.get(buf, off + 88),\n currentTime: Token.UINT32_BE.get(buf, off + 92),\n nextTrackID: Token.UINT32_BE.get(buf, off + 96)\n };\n }\n}\n/**\n * Data Atom Structure\n */\nexport class DataAtom {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n return {\n type: {\n set: Token.UINT8.get(buf, off + 0),\n type: Token.UINT24_BE.get(buf, off + 1)\n },\n locale: Token.UINT24_BE.get(buf, off + 4),\n value: new Token.Uint8ArrayType(this.len - 8).get(buf, off + 8)\n };\n }\n}\n/**\n * Data Atom Structure\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW31\n */\nexport class NameAtom {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n return {\n version: Token.UINT8.get(buf, off),\n flags: Token.UINT24_BE.get(buf, off + 1),\n name: new Token.StringType(this.len - 4, 'utf-8').get(buf, off + 4)\n };\n }\n}\n/**\n * Track Header Atoms structure (`tkhd`)\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25550\n */\nexport class TrackHeaderAtom {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n return {\n version: Token.UINT8.get(buf, off),\n flags: Token.UINT24_BE.get(buf, off + 1),\n creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\n modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\n trackId: Token.UINT32_BE.get(buf, off + 12),\n // reserved 4 bytes\n duration: Token.UINT32_BE.get(buf, off + 20),\n layer: Token.UINT16_BE.get(buf, off + 24),\n alternateGroup: Token.UINT16_BE.get(buf, off + 26),\n volume: Token.UINT16_BE.get(buf, off + 28) // ToDo: fixed point\n // ToDo: add remaining fields\n };\n }\n}\n/**\n * Atom: Sample Description Atom ('stsd')\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\n */\nconst stsdHeader = {\n len: 8,\n get: (buf, off) => {\n return {\n version: Token.UINT8.get(buf, off),\n flags: Token.UINT24_BE.get(buf, off + 1),\n numberOfEntries: Token.UINT32_BE.get(buf, off + 4)\n };\n }\n};\n/**\n * Atom: Sample Description Atom ('stsd')\n * Ref: https://developer.apple.com/documentation/quicktime-file-format/sample_description_atom\n */\nclass SampleDescriptionTable {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n const descrLen = this.len - 12;\n return {\n dataFormat: FourCcToken.get(buf, off),\n dataReferenceIndex: Token.UINT16_BE.get(buf, off + 10),\n description: descrLen > 0 ? new Token.Uint8ArrayType(descrLen).get(buf, off + 12) : undefined\n };\n }\n}\n/**\n * Atom: Sample-description Atom ('stsd')\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\n */\nexport class StsdAtom {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n const header = stsdHeader.get(buf, off);\n off += stsdHeader.len;\n const table = [];\n for (let n = 0; n < header.numberOfEntries; ++n) {\n const size = Token.UINT32_BE.get(buf, off); // Sample description size\n off += Token.UINT32_BE.len;\n table.push(new SampleDescriptionTable(size - Token.UINT32_BE.len).get(buf, off));\n off += size;\n }\n return {\n header,\n table\n };\n }\n}\n/**\n * Common Sound Sample Description (version & revision)\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-57317\n */\nexport const SoundSampleDescriptionVersion = {\n len: 8,\n get(buf, off) {\n return {\n version: Token.INT16_BE.get(buf, off),\n revision: Token.INT16_BE.get(buf, off + 2),\n vendor: Token.INT32_BE.get(buf, off + 4)\n };\n }\n};\n/**\n * Sound Sample Description (Version 0)\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-130736\n */\nexport const SoundSampleDescriptionV0 = {\n len: 12,\n get(buf, off) {\n return {\n numAudioChannels: Token.INT16_BE.get(buf, off + 0),\n sampleSize: Token.INT16_BE.get(buf, off + 2),\n compressionId: Token.INT16_BE.get(buf, off + 4),\n packetSize: Token.INT16_BE.get(buf, off + 6),\n sampleRate: Token.UINT16_BE.get(buf, off + 8) + Token.UINT16_BE.get(buf, off + 10) / 10000\n };\n }\n};\nclass SimpleTableAtom {\n constructor(len, token) {\n this.len = len;\n this.token = token;\n }\n get(buf, off) {\n const nrOfEntries = Token.INT32_BE.get(buf, off + 4);\n return {\n version: Token.INT8.get(buf, off + 0),\n flags: Token.INT24_BE.get(buf, off + 1),\n numberOfEntries: nrOfEntries,\n entries: readTokenTable(buf, this.token, off + 8, this.len - 8, nrOfEntries)\n };\n }\n}\nexport const TimeToSampleToken = {\n len: 8,\n get(buf, off) {\n return {\n count: Token.INT32_BE.get(buf, off + 0),\n duration: Token.INT32_BE.get(buf, off + 4)\n };\n }\n};\n/**\n * Time-to-sample('stts') atom.\n * Store duration information for a media’s samples.\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25696\n */\nexport class SttsAtom extends SimpleTableAtom {\n constructor(len) {\n super(len, TimeToSampleToken);\n }\n}\nexport const SampleToChunkToken = {\n len: 12,\n get(buf, off) {\n return {\n firstChunk: Token.INT32_BE.get(buf, off),\n samplesPerChunk: Token.INT32_BE.get(buf, off + 4),\n sampleDescriptionId: Token.INT32_BE.get(buf, off + 8)\n };\n }\n};\n/**\n * Sample-to-Chunk ('stsc') atom interface\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25706\n */\nexport class StscAtom extends SimpleTableAtom {\n constructor(len) {\n super(len, SampleToChunkToken);\n }\n}\n/**\n * Sample-size ('stsz') atom\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25710\n */\nexport class StszAtom {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n const nrOfEntries = Token.INT32_BE.get(buf, off + 8);\n return {\n version: Token.INT8.get(buf, off),\n flags: Token.INT24_BE.get(buf, off + 1),\n sampleSize: Token.INT32_BE.get(buf, off + 4),\n numberOfEntries: nrOfEntries,\n entries: readTokenTable(buf, Token.INT32_BE, off + 12, this.len - 12, nrOfEntries)\n };\n }\n}\n/**\n * Chunk offset atom, 'stco'\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25715\n */\nexport class StcoAtom extends SimpleTableAtom {\n constructor(len) {\n super(len, Token.INT32_BE);\n this.len = len;\n }\n}\n/**\n * Token used to decode text-track from 'mdat' atom (raw data stream)\n */\nexport class ChapterText {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n const titleLen = Token.INT16_BE.get(buf, off + 0);\n const str = new Token.StringType(titleLen, 'utf-8');\n return str.get(buf, off + 2);\n }\n}\nfunction readTokenTable(buf, token, off, remainingLen, numberOfEntries) {\n debug(`remainingLen=${remainingLen}, numberOfEntries=${numberOfEntries} * token-len=${token.len}`);\n if (remainingLen === 0)\n return [];\n if (remainingLen !== numberOfEntries * token.len)\n throw new Mp4ContentError('mismatch number-of-entries with remaining atom-length');\n const entries = [];\n // parse offset-table\n for (let n = 0; n < numberOfEntries; ++n) {\n entries.push(token.get(buf, off));\n off += token.len;\n }\n return entries;\n}\n/**\n * Sample-size ('tfhd') TrackFragmentHeaderBox\n */\nexport class TrackFragmentHeaderBox {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n const flagOffset = off + 1;\n const header = {\n version: Token.INT8.get(buf, off),\n flags: {\n baseDataOffsetPresent: util.getBit(buf, flagOffset + 2, 0),\n sampleDescriptionIndexPresent: util.getBit(buf, flagOffset + 2, 1),\n defaultSampleDurationPresent: util.getBit(buf, flagOffset + 2, 3),\n defaultSampleSizePresent: util.getBit(buf, flagOffset + 2, 4),\n defaultSampleFlagsPresent: util.getBit(buf, flagOffset + 2, 5),\n defaultDurationIsEmpty: util.getBit(buf, flagOffset, 0),\n defaultBaseIsMoof: util.getBit(buf, flagOffset, 1)\n },\n trackId: Token.UINT32_BE.get(buf, 4)\n };\n let dynOffset = 8;\n if (header.flags.baseDataOffsetPresent) {\n header.baseDataOffset = Token.UINT64_BE.get(buf, dynOffset);\n dynOffset += 8;\n }\n if (header.flags.sampleDescriptionIndexPresent) {\n header.sampleDescriptionIndex = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n if (header.flags.defaultSampleDurationPresent) {\n header.defaultSampleDuration = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n if (header.flags.defaultSampleSizePresent) {\n header.defaultSampleSize = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n if (header.flags.defaultSampleFlagsPresent) {\n header.defaultSampleFlags = Token.UINT32_BE.get(buf, dynOffset);\n }\n return header;\n }\n}\n/**\n * Sample-size ('trun') TrackRunBox\n */\nexport class TrackRunBox {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n const flagOffset = off + 1;\n const trun = {\n version: Token.INT8.get(buf, off),\n flags: {\n dataOffsetPresent: util.getBit(buf, flagOffset + 2, 0),\n firstSampleFlagsPresent: util.getBit(buf, flagOffset + 2, 2),\n sampleDurationPresent: util.getBit(buf, flagOffset + 1, 0),\n sampleSizePresent: util.getBit(buf, flagOffset + 1, 1),\n sampleFlagsPresent: util.getBit(buf, flagOffset + 1, 2),\n sampleCompositionTimeOffsetsPresent: util.getBit(buf, flagOffset + 1, 3)\n },\n sampleCount: Token.UINT32_BE.get(buf, off + 4),\n samples: []\n };\n let dynOffset = off + 8;\n if (trun.flags.dataOffsetPresent) {\n trun.dataOffset = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n if (trun.flags.firstSampleFlagsPresent) {\n trun.firstSampleFlags = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n for (let n = 0; n < trun.sampleCount; ++n) {\n if (dynOffset >= this.len) {\n debug(\"TrackRunBox size mismatch\");\n break;\n }\n const sample = {};\n if (trun.flags.sampleDurationPresent) {\n sample.sampleDuration = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n if (trun.flags.sampleSizePresent) {\n sample.sampleSize = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n if (trun.flags.sampleFlagsPresent) {\n sample.sampleFlags = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n if (trun.flags.sampleCompositionTimeOffsetsPresent) {\n sample.sampleCompositionTimeOffset = Token.UINT32_BE.get(buf, dynOffset);\n dynOffset += 4;\n }\n trun.samples.push(sample);\n }\n return trun;\n }\n}\n/**\n * HandlerBox (`hdlr`)\n */\nexport class HandlerBox {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n const _flagOffset = off + 1;\n const charTypeToken = new Token.StringType(4, 'utf-8');\n return {\n version: Token.INT8.get(buf, off),\n flags: Token.UINT24_BE.get(buf, off + 1),\n componentType: charTypeToken.get(buf, off + 4),\n handlerType: charTypeToken.get(buf, off + 8),\n componentName: new Token.StringType(this.len - 28, 'utf-8').get(buf, off + 28),\n };\n }\n}\n/**\n * Chapter Track Reference Box (`chap`)\n */\nexport class ChapterTrackReferenceBox {\n constructor(len) {\n this.len = len;\n }\n get(buf, off) {\n let dynOffset = 0;\n const trackIds = [];\n while (dynOffset < this.len) {\n trackIds.push(Token.UINT32_BE.get(buf, off + dynOffset));\n dynOffset += 4;\n }\n return trackIds;\n }\n}\n"],"mappings":"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","names":["import_debug","import_debug","initDebug","debug","initDebug","debug","initDebug"],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/MP4Parser-N3XX43E2.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/MatroskaParser-K556QMVK.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/MatroskaParser-K556QMVK.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/MatroskaParser-K556QMVK.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/MatroskaParser-K556QMVK.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/MpegParser-6I4WPE7H.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/MpegParser-6I4WPE7H.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/MpegParser-6I4WPE7H.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/MpegParser-6I4WPE7H.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/MusepackParser-PVJGCXWZ.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/MusepackParser-PVJGCXWZ.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/MusepackParser-PVJGCXWZ.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/MusepackParser-PVJGCXWZ.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/OggParser-HOABAP6I.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/OggParser-HOABAP6I.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/OggParser-HOABAP6I.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/OggParser-HOABAP6I.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/WavPackParser-BDZJQRUN.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/WavPackParser-BDZJQRUN.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/WavPackParser-BDZJQRUN.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/WavPackParser-BDZJQRUN.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/WaveParser-CTTJTFLC.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/WaveParser-CTTJTFLC.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/WaveParser-CTTJTFLC.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/WaveParser-CTTJTFLC.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/android-chrome-192x192.png
··· 1 + ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/android-chrome-192x192.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/android-chrome-512x512.png
··· 1 + ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/android-chrome-512x512.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/apple-touch-icon.png
··· 1 + ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/apple-touch-icon.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/browserconfig.xml
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/browserconfig.xml
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-2DEWUZFM.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-2DEWUZFM.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-2DEWUZFM.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-2DEWUZFM.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-2X53XAU6.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-2X53XAU6.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-2X53XAU6.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-2X53XAU6.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-3SOBXJU4.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-3SOBXJU4.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-3SOBXJU4.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-3SOBXJU4.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-47SOYRCA.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-47SOYRCA.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-47SOYRCA.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-47SOYRCA.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-5PUD235R.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-5PUD235R.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-5PUD235R.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-5PUD235R.js.map
+54
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-5RXABJDJ.js
··· 1 + import { 2 + OutputTransformer 3 + } from "./chunk-7PYRBX3C.js"; 4 + import { 5 + computed 6 + } from "./chunk-SRUOXJB6.js"; 7 + import { 8 + __name 9 + } from "./chunk-7IARE43G.js"; 10 + 11 + // components/transformer/output/string/json/element.js 12 + var JsonStringOutputTransformer = class extends OutputTransformer { 13 + static { 14 + __name(this, "JsonStringOutputTransformer"); 15 + } 16 + constructor() { 17 + super(); 18 + const base = this.base(); 19 + const manager = { 20 + tracks: { 21 + ...base.tracks, 22 + collection: computed(() => { 23 + let json = base.tracks.collection(); 24 + if (typeof json !== "string") json = "[]"; 25 + try { 26 + return JSON.parse(json); 27 + } catch (err) { 28 + console.error( 29 + "components/transformer/output/string/json: Failed to parse JSON" 30 + ); 31 + return []; 32 + } 33 + }), 34 + save: /* @__PURE__ */ __name(async (newTracks) => { 35 + const json = JSON.stringify(newTracks); 36 + await base.tracks.save(json); 37 + }, "save") 38 + } 39 + }; 40 + this.tracks = manager.tracks; 41 + } 42 + }; 43 + var element_default = JsonStringOutputTransformer; 44 + var CLASS = JsonStringOutputTransformer; 45 + var NAME = "dtos-json"; 46 + customElements.define(NAME, CLASS); 47 + 48 + export { 49 + element_default, 50 + CLASS, 51 + NAME 52 + }; 53 + 54 + //# sourceMappingURL=./chunk-5RXABJDJ.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-5RXABJDJ.js.map
··· 1 + {"version":3,"sources":["/components/transformer/output/string/json/element.js"],"sourcesContent":["import { computed } from \"@common/signal.js\";\nimport { OutputTransformer } from \"../../base.js\";\n\n/**\n * @import { OutputManagerDeputy } from \"@components/output/types.d.ts\"\n * @import { Track } from \"@definitions/types.d.ts\"\n */\n\n/**\n * @extends {OutputTransformer<string>}\n */\nclass JsonStringOutputTransformer extends OutputTransformer {\n constructor() {\n super();\n\n const base = this.base();\n\n /** @type {OutputManagerDeputy<Track[]>} */\n const manager = {\n tracks: {\n ...base.tracks,\n collection: computed(() => {\n let json = base.tracks.collection();\n if (typeof json !== \"string\") json = \"[]\";\n\n // Try parsing JSON\n try {\n return JSON.parse(json);\n } catch (err) {\n console.error(\n \"components/transformer/output/string/json: Failed to parse JSON\",\n );\n return [];\n }\n }),\n save: async (newTracks) => {\n const json = JSON.stringify(newTracks);\n await base.tracks.save(json);\n },\n },\n };\n\n // Assign manager properties to class\n this.tracks = manager.tracks;\n }\n}\n\nexport default JsonStringOutputTransformer;\n\n////////////////////////////////////////////\n// REGISTER\n////////////////////////////////////////////\n\nexport const CLASS = JsonStringOutputTransformer;\nexport const NAME = \"dtos-json\";\n\ncustomElements.define(NAME, CLASS);\n"],"mappings":";;;;;;;;;;;AAWA,IAAM,8BAAN,cAA0C,kBAAkB;AAAA,EAX5D,OAW4D;AAAA;AAAA;AAAA,EAC1D,cAAc;AACZ,UAAM;AAEN,UAAM,OAAO,KAAK,KAAK;AAGvB,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,GAAG,KAAK;AAAA,QACR,YAAY,SAAS,MAAM;AACzB,cAAI,OAAO,KAAK,OAAO,WAAW;AAClC,cAAI,OAAO,SAAS,SAAU,QAAO;AAGrC,cAAI;AACF,mBAAO,KAAK,MAAM,IAAI;AAAA,UACxB,SAAS,KAAK;AACZ,oBAAQ;AAAA,cACN;AAAA,YACF;AACA,mBAAO,CAAC;AAAA,UACV;AAAA,QACF,CAAC;AAAA,QACD,MAAM,8BAAO,cAAc;AACzB,gBAAM,OAAO,KAAK,UAAU,SAAS;AACrC,gBAAM,KAAK,OAAO,KAAK,IAAI;AAAA,QAC7B,GAHM;AAAA,MAIR;AAAA,IACF;AAGA,SAAK,SAAS,QAAQ;AAAA,EACxB;AACF;AAEA,IAAO,kBAAQ;AAMR,IAAM,QAAQ;AACd,IAAM,OAAO;AAEpB,eAAe,OAAO,MAAM,KAAK;","names":[],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-5RXABJDJ.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-5U6EFMUU.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-5U6EFMUU.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-5U6EFMUU.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-5U6EFMUU.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-6AX6SYMQ.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-6AX6SYMQ.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-6AX6SYMQ.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-6AX6SYMQ.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-7IARE43G.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-7IARE43G.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-7IARE43G.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-7IARE43G.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-7J35BYGY.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-7J35BYGY.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-7J35BYGY.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-7J35BYGY.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-7OCWG5AW.js
··· 1 + ../bafybeih2s36bol7uisrik77ciyli5rhge2bikg7ezv7g43reykdd4jkaiq/chunk-7OCWG5AW.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-7OCWG5AW.js.map
··· 1 + ../bafybeih2s36bol7uisrik77ciyli5rhge2bikg7ezv7g43reykdd4jkaiq/chunk-7OCWG5AW.js.map
+68
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-7PYRBX3C.js
··· 1 + import { 2 + DiffuseElement, 3 + query 4 + } from "./chunk-AFAFCDHW.js"; 5 + import { 6 + computed, 7 + signal 8 + } from "./chunk-SRUOXJB6.js"; 9 + import { 10 + __name 11 + } from "./chunk-7IARE43G.js"; 12 + 13 + // components/transformer/output/base.js 14 + var OutputTransformer = class extends DiffuseElement { 15 + static { 16 + __name(this, "OutputTransformer"); 17 + } 18 + // SIGNALS 19 + #output = signal( 20 + /** @type {OutputElement<T> | undefined} */ 21 + void 0 22 + ); 23 + #outputWhenDefined = Promise.withResolvers(); 24 + output = { 25 + whenDefined: this.#outputWhenDefined.promise, 26 + signal: this.#output.get 27 + }; 28 + // LIFECYCLE 29 + /** 30 + * @override 31 + */ 32 + connectedCallback() { 33 + super.connectedCallback(); 34 + const output = query(this, "output-selector"); 35 + customElements.whenDefined(output.localName).then(() => { 36 + this.#output.value = output; 37 + this.#outputWhenDefined.resolve(null); 38 + }); 39 + } 40 + // MANAGER 41 + base() { 42 + const m = { 43 + tracks: { 44 + collection: computed(() => { 45 + return this.output.signal()?.tracks?.collection(); 46 + }), 47 + reload: /* @__PURE__ */ __name(() => { 48 + return this.output.signal()?.tracks?.reload() ?? Promise.resolve(); 49 + }, "reload"), 50 + save: /* @__PURE__ */ __name(async (newTracks) => { 51 + if (newTracks === void 0) return; 52 + await this.output.whenDefined; 53 + await this.output.signal()?.tracks.save(newTracks); 54 + }, "save"), 55 + state: computed(() => { 56 + return this.output.signal()?.tracks.state() ?? "sleeping"; 57 + }) 58 + } 59 + }; 60 + return m; 61 + } 62 + }; 63 + 64 + export { 65 + OutputTransformer 66 + }; 67 + 68 + //# sourceMappingURL=./chunk-7PYRBX3C.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-7PYRBX3C.js.map
··· 1 + {"version":3,"sources":["/components/transformer/output/base.js"],"sourcesContent":["import { DiffuseElement, query } from \"@common/element.js\";\nimport { computed, signal } from \"@common/signal.js\";\n\n/**\n * @import { OutputElement, OutputManagerDeputy } from \"../../output/types.d.ts\"\n */\n\n/**\n * @template T\n */\nexport class OutputTransformer extends DiffuseElement {\n // SIGNALS\n\n #output = signal(/** @type {OutputElement<T> | undefined} */ (undefined));\n #outputWhenDefined = Promise.withResolvers();\n\n output = {\n whenDefined: this.#outputWhenDefined.promise,\n signal: this.#output.get,\n };\n\n // LIFECYCLE\n\n /**\n * @override\n */\n connectedCallback() {\n super.connectedCallback();\n\n /** @type {OutputElement<T>} */\n const output = query(this, \"output-selector\");\n\n // When defined\n customElements.whenDefined(output.localName).then(() => {\n this.#output.value = output;\n this.#outputWhenDefined.resolve(null);\n });\n }\n\n // MANAGER\n\n base() {\n /** @type {OutputManagerDeputy<T | undefined>} */\n const m = {\n tracks: {\n collection: computed(() => {\n return this.output.signal()?.tracks?.collection();\n }),\n reload: () => {\n return this.output.signal()?.tracks?.reload() ?? Promise.resolve();\n },\n save: async (newTracks) => {\n if (newTracks === undefined) return;\n await this.output.whenDefined;\n await this.output.signal()?.tracks.save(newTracks);\n },\n state: computed(() => {\n return this.output.signal()?.tracks.state() ?? \"sleeping\";\n }),\n },\n };\n\n return m;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAUO,IAAM,oBAAN,cAAgC,eAAe;AAAA,EAVtD,OAUsD;AAAA;AAAA;AAAA;AAAA,EAGpD,UAAU;AAAA;AAAA,IAAoD;AAAA,EAAU;AAAA,EACxE,qBAAqB,QAAQ,cAAc;AAAA,EAE3C,SAAS;AAAA,IACP,aAAa,KAAK,mBAAmB;AAAA,IACrC,QAAQ,KAAK,QAAQ;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB;AAClB,UAAM,kBAAkB;AAGxB,UAAM,SAAS,MAAM,MAAM,iBAAiB;AAG5C,mBAAe,YAAY,OAAO,SAAS,EAAE,KAAK,MAAM;AACtD,WAAK,QAAQ,QAAQ;AACrB,WAAK,mBAAmB,QAAQ,IAAI;AAAA,IACtC,CAAC;AAAA,EACH;AAAA;AAAA,EAIA,OAAO;AAEL,UAAM,IAAI;AAAA,MACR,QAAQ;AAAA,QACN,YAAY,SAAS,MAAM;AACzB,iBAAO,KAAK,OAAO,OAAO,GAAG,QAAQ,WAAW;AAAA,QAClD,CAAC;AAAA,QACD,QAAQ,6BAAM;AACZ,iBAAO,KAAK,OAAO,OAAO,GAAG,QAAQ,OAAO,KAAK,QAAQ,QAAQ;AAAA,QACnE,GAFQ;AAAA,QAGR,MAAM,8BAAO,cAAc;AACzB,cAAI,cAAc,OAAW;AAC7B,gBAAM,KAAK,OAAO;AAClB,gBAAM,KAAK,OAAO,OAAO,GAAG,OAAO,KAAK,SAAS;AAAA,QACnD,GAJM;AAAA,QAKN,OAAO,SAAS,MAAM;AACpB,iBAAO,KAAK,OAAO,OAAO,GAAG,OAAO,MAAM,KAAK;AAAA,QACjD,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;","names":[],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-7PYRBX3C.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-A4RQ3WIY.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-A4RQ3WIY.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-A4RQ3WIY.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-A4RQ3WIY.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-AFAFCDHW.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-AFAFCDHW.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-AFAFCDHW.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-AFAFCDHW.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-AN7CZG6F.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-AN7CZG6F.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-AN7CZG6F.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-AN7CZG6F.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-BGA2NGTF.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-BGA2NGTF.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-BGA2NGTF.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-BGA2NGTF.js.map
+170
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-CHZKHFKZ.js
··· 1 + import { 2 + DiffuseElement 3 + } from "./chunk-AFAFCDHW.js"; 4 + import { 5 + batch, 6 + computed, 7 + signal 8 + } from "./chunk-SRUOXJB6.js"; 9 + import { 10 + __name 11 + } from "./chunk-7IARE43G.js"; 12 + 13 + // components/configurator/output/element.js 14 + var STORAGE_PREFIX = "diffuse/configurator/output"; 15 + var OutputConfigurator = class extends DiffuseElement { 16 + static { 17 + __name(this, "OutputConfigurator"); 18 + } 19 + static NAME = "diffuse/configurator/output"; 20 + constructor() { 21 + super(); 22 + const manager = { 23 + tracks: { 24 + collection: computed(() => { 25 + const out = this.#selectedOutput.value; 26 + if (out) return out.tracks.collection(); 27 + const def = this.#defaultOutput.value; 28 + if (def) return def.tracks.collection(); 29 + return this.#memory.tracks.value; 30 + }), 31 + reload: /* @__PURE__ */ __name(() => { 32 + const def = this.#defaultOutput.value; 33 + if (def) def.tracks.reload(); 34 + const out = this.#selectedOutput.value; 35 + if (out) return out.tracks.reload(); 36 + return Promise.resolve(); 37 + }, "reload"), 38 + save: /* @__PURE__ */ __name(async (newTracks) => { 39 + const def = this.#defaultOutput.value; 40 + if (def) await def.tracks.save(newTracks); 41 + const out = this.#selectedOutput.value; 42 + if (out) return await out.tracks.save(newTracks); 43 + this.#memory.tracks.value = newTracks; 44 + }, "save"), 45 + state: computed(() => { 46 + const out = this.#selectedOutput.value; 47 + if (out) return out.tracks.state(); 48 + const def = this.#defaultOutput.value; 49 + if (def) return def.tracks.state(); 50 + return this.#setupFinished.value ? "loaded" : "sleeping"; 51 + }) 52 + } 53 + }; 54 + this.tracks = manager.tracks; 55 + } 56 + // SIGNALS 57 + #defaultOutput = signal( 58 + /** @type {Output | null | undefined} */ 59 + void 0 60 + ); 61 + #memory = { 62 + tracks: signal( 63 + /** @type {Track[]} */ 64 + [] 65 + ) 66 + }; 67 + #selectedOutput = signal( 68 + /** @type {Output | null | undefined} */ 69 + void 0 70 + ); 71 + #setupFinished = signal(false); 72 + // LIFECYCLE 73 + /** 74 + * @override 75 + */ 76 + async connectedCallback() { 77 + super.connectedCallback(); 78 + let defaultOutput = void 0; 79 + const def_ault = this.getAttribute("default"); 80 + if (def_ault) { 81 + defaultOutput = await this.#findOutput(def_ault); 82 + } 83 + const selectedOutput = await this.#findSelectedOutput(); 84 + batch(() => { 85 + this.#defaultOutput.value = defaultOutput; 86 + this.#selectedOutput.value = selectedOutput; 87 + this.#setupFinished.value = true; 88 + }); 89 + } 90 + // MISC 91 + /** 92 + * @param {string} id 93 + */ 94 + async #findOutput(id) { 95 + const el = id ? this.root().querySelector(`#${id}`) : null; 96 + if (!el) return null; 97 + await customElements.whenDefined(el.localName); 98 + if ("nameWithGroup" in el === false || "tracks" in el === false) { 99 + return null; 100 + } 101 + return ( 102 + /** @type {Output} */ 103 + /** @type {unknown} */ 104 + el 105 + ); 106 + } 107 + async #findSelectedOutput() { 108 + const id = localStorage.getItem(`${STORAGE_PREFIX}/selected/id`); 109 + if (id) return this.#findOutput(id); 110 + return void 0; 111 + } 112 + /** 113 + * @override 114 + */ 115 + dependencies() { 116 + return Object.fromEntries( 117 + Array.from(this.children).flatMap((element) => { 118 + if (element.hasAttribute("id") === false) { 119 + console.warn( 120 + "Missing `id` for output configurator child element with `localName` '" + element.localName + "'" 121 + ); 122 + return []; 123 + } 124 + const d = ( 125 + /** @type {DiffuseElement} */ 126 + element 127 + ); 128 + return [[d.id, d]]; 129 + }) 130 + ); 131 + } 132 + // ADDITIONAL ACTIONS 133 + async deselect() { 134 + localStorage.removeItem(`${STORAGE_PREFIX}/selected/id`); 135 + this.#selectedOutput.value = await this.#findSelectedOutput(); 136 + } 137 + async options() { 138 + const deps = this.dependencies(); 139 + const entries = Object.entries(deps); 140 + await Promise.all( 141 + entries.map(([_k, v]) => customElements.whenDefined(v.localName)) 142 + ); 143 + return entries.map(([k, v]) => { 144 + return { 145 + id: k, 146 + label: v.label, 147 + element: v 148 + }; 149 + }); 150 + } 151 + /** 152 + * @param {string} id 153 + */ 154 + async select(id) { 155 + localStorage.setItem(`${STORAGE_PREFIX}/selected/id`, id); 156 + this.#selectedOutput.value = await this.#findSelectedOutput(); 157 + } 158 + }; 159 + var element_default = OutputConfigurator; 160 + var CLASS = OutputConfigurator; 161 + var NAME = "dc-output"; 162 + customElements.define(NAME, CLASS); 163 + 164 + export { 165 + element_default, 166 + CLASS, 167 + NAME 168 + }; 169 + 170 + //# sourceMappingURL=./chunk-CHZKHFKZ.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-CHZKHFKZ.js.map
··· 1 + {"version":3,"sources":["/components/configurator/output/element.js"],"sourcesContent":["import { DiffuseElement } from \"@common/element.js\";\nimport { batch, computed, signal } from \"@common/signal.js\";\n\n/**\n * @import {Track} from \"@definitions/types.d.ts\"\n * @import {OutputManagerDeputy, OutputElement} from \"@components/output/types.d.ts\"\n */\n\n/**\n * @typedef {OutputElement<Track[]>} Output\n */\n\nconst STORAGE_PREFIX = \"diffuse/configurator/output\";\n\n////////////////////////////////////////////\n// ELEMENT\n////////////////////////////////////////////\n\n/**\n * @implements {OutputElement<Track[]>}\n */\nclass OutputConfigurator extends DiffuseElement {\n static NAME = \"diffuse/configurator/output\";\n\n constructor() {\n super();\n\n /** @type {OutputManagerDeputy<Track[]>} */\n const manager = {\n tracks: {\n collection: computed(() => {\n const out = this.#selectedOutput.value;\n if (out) return out.tracks.collection();\n\n const def = this.#defaultOutput.value;\n if (def) return def.tracks.collection();\n\n return this.#memory.tracks.value;\n }),\n reload: () => {\n const def = this.#defaultOutput.value;\n if (def) def.tracks.reload();\n\n const out = this.#selectedOutput.value;\n if (out) return out.tracks.reload();\n\n return Promise.resolve();\n },\n save: async (newTracks) => {\n const def = this.#defaultOutput.value;\n if (def) await def.tracks.save(newTracks);\n\n const out = this.#selectedOutput.value;\n if (out) return await out.tracks.save(newTracks);\n\n this.#memory.tracks.value = newTracks;\n },\n state: computed(() => {\n const out = this.#selectedOutput.value;\n if (out) return out.tracks.state();\n\n const def = this.#defaultOutput.value;\n if (def) return def.tracks.state();\n\n return this.#setupFinished.value ? \"loaded\" : \"sleeping\";\n }),\n },\n };\n\n // Assign manager properties to class\n this.tracks = manager.tracks;\n }\n\n // SIGNALS\n\n #defaultOutput = signal(\n /** @type {Output | null | undefined} */ (undefined),\n );\n\n #memory = {\n tracks: signal(/** @type {Track[]} */ ([])),\n };\n\n #selectedOutput = signal(\n /** @type {Output | null | undefined} */ (undefined),\n );\n\n #setupFinished = signal(false);\n\n // LIFECYCLE\n\n /**\n * @override\n */\n async connectedCallback() {\n super.connectedCallback();\n\n /** @type {Output | null | undefined} */\n let defaultOutput = undefined;\n\n const def_ault = this.getAttribute(\"default\");\n if (def_ault) {\n defaultOutput = await this.#findOutput(def_ault);\n }\n\n const selectedOutput = await this.#findSelectedOutput();\n\n batch(() => {\n this.#defaultOutput.value = defaultOutput;\n this.#selectedOutput.value = selectedOutput;\n this.#setupFinished.value = true;\n });\n }\n\n // MISC\n\n /**\n * @param {string} id\n */\n async #findOutput(id) {\n const el = id ? this.root().querySelector(`#${id}`) : null;\n if (!el) return null;\n\n await customElements.whenDefined(el.localName);\n\n if (\n \"nameWithGroup\" in el === false ||\n \"tracks\" in el === false\n ) {\n return null;\n }\n\n return /** @type {Output} */ (/** @type {unknown} */ (el));\n }\n\n async #findSelectedOutput() {\n const id = localStorage.getItem(`${STORAGE_PREFIX}/selected/id`);\n if (id) return this.#findOutput(id);\n return undefined;\n }\n\n /**\n * @override\n */\n dependencies() {\n return Object.fromEntries(\n Array.from(this.children).flatMap((element) => {\n if (element.hasAttribute(\"id\") === false) {\n console.warn(\n \"Missing `id` for output configurator child element with `localName` '\" +\n element.localName + \"'\",\n );\n return [];\n }\n\n const d = /** @type {DiffuseElement} */ (element);\n return [[d.id, d]];\n }),\n );\n }\n\n // ADDITIONAL ACTIONS\n\n async deselect() {\n localStorage.removeItem(`${STORAGE_PREFIX}/selected/id`);\n this.#selectedOutput.value = await this.#findSelectedOutput();\n }\n\n async options() {\n const deps = this.dependencies();\n const entries = Object.entries(deps);\n\n await Promise.all(\n entries.map(([_k, v]) => customElements.whenDefined(v.localName)),\n );\n\n return entries.map(([k, v]) => {\n return {\n id: k,\n label: v.label,\n element: v,\n };\n });\n }\n\n /**\n * @param {string} id\n */\n async select(id) {\n localStorage.setItem(`${STORAGE_PREFIX}/selected/id`, id);\n this.#selectedOutput.value = await this.#findSelectedOutput();\n }\n}\n\nexport default OutputConfigurator;\n\n////////////////////////////////////////////\n// REGISTER\n////////////////////////////////////////////\n\nexport const CLASS = OutputConfigurator;\nexport const NAME = \"dc-output\";\n\ncustomElements.define(NAME, CLASS);\n"],"mappings":"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","names":[],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-CHZKHFKZ.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-CSVVW572.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-CSVVW572.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-CSVVW572.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-CSVVW572.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-DNOJCDYS.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-DNOJCDYS.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-DNOJCDYS.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-DNOJCDYS.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-DR6IVCFO.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-DR6IVCFO.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-DR6IVCFO.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-DR6IVCFO.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ETGVMC2T.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-ETGVMC2T.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ETGVMC2T.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-ETGVMC2T.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-FGRUWWG5.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-FGRUWWG5.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-FGRUWWG5.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-FGRUWWG5.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-FIMGEMH3.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-FIMGEMH3.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-FIMGEMH3.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-FIMGEMH3.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-FJZTCILJ.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-FJZTCILJ.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-FJZTCILJ.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-FJZTCILJ.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-FQF7EPH6.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-FQF7EPH6.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-FQF7EPH6.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-FQF7EPH6.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-G2LBW36E.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-G2LBW36E.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-G2LBW36E.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-G2LBW36E.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-GWH5LC2W.js
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-GWH5LC2W.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-GWH5LC2W.js.map
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-GWH5LC2W.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-I4QT5UNG.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-I4QT5UNG.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-I4QT5UNG.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-I4QT5UNG.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-IMYGW2WM.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-IMYGW2WM.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-IMYGW2WM.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-IMYGW2WM.js.map
+45
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-IUOHNZAT.js
··· 1 + import { 2 + OutputTransformer 3 + } from "./chunk-7PYRBX3C.js"; 4 + import { 5 + computed 6 + } from "./chunk-SRUOXJB6.js"; 7 + import { 8 + __name 9 + } from "./chunk-7IARE43G.js"; 10 + 11 + // components/transformer/output/refiner/default/element.js 12 + var DefaultOutputRefinerTransformer = class extends OutputTransformer { 13 + static { 14 + __name(this, "DefaultOutputRefinerTransformer"); 15 + } 16 + constructor() { 17 + super(); 18 + const base = this.base(); 19 + const manager = { 20 + tracks: { 21 + ...base.tracks, 22 + collection: computed(() => { 23 + return base.tracks.collection() ?? []; 24 + }), 25 + save: /* @__PURE__ */ __name(async (newTracks) => { 26 + const filtered = newTracks.filter((t) => !t.ephemeral); 27 + await base.tracks.save(filtered); 28 + }, "save") 29 + } 30 + }; 31 + this.tracks = manager.tracks; 32 + } 33 + }; 34 + var element_default = DefaultOutputRefinerTransformer; 35 + var CLASS = DefaultOutputRefinerTransformer; 36 + var NAME = "dtor-default"; 37 + customElements.define(NAME, CLASS); 38 + 39 + export { 40 + element_default, 41 + CLASS, 42 + NAME 43 + }; 44 + 45 + //# sourceMappingURL=./chunk-IUOHNZAT.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-IUOHNZAT.js.map
··· 1 + {"version":3,"sources":["/components/transformer/output/refiner/default/element.js"],"sourcesContent":["import { computed } from \"@common/signal.js\";\nimport { OutputTransformer } from \"../../base.js\";\n\n/**\n * @import { OutputManagerDeputy } from \"../../../../output/types.d.ts\"\n * @import { Track } from \"@definitions/types.d.ts\"\n */\n\n/**\n * @extends {OutputTransformer<Track[]>}\n */\nclass DefaultOutputRefinerTransformer extends OutputTransformer {\n constructor() {\n super();\n\n const base = this.base();\n\n /** @type {OutputManagerDeputy<Track[]>} */\n const manager = {\n tracks: {\n ...base.tracks,\n collection: computed(() => {\n return base.tracks.collection() ?? [];\n }),\n save: async (newTracks) => {\n const filtered = newTracks.filter((t) => !t.ephemeral);\n await base.tracks.save(filtered);\n },\n },\n };\n\n // Assign manager properties to class\n this.tracks = manager.tracks;\n }\n}\n\nexport default DefaultOutputRefinerTransformer;\n\n////////////////////////////////////////////\n// REGISTER\n////////////////////////////////////////////\n\nexport const CLASS = DefaultOutputRefinerTransformer;\nexport const NAME = \"dtor-default\";\n\ncustomElements.define(NAME, CLASS);\n"],"mappings":";;;;;;;;;;;AAWA,IAAM,kCAAN,cAA8C,kBAAkB;AAAA,EAXhE,OAWgE;AAAA;AAAA;AAAA,EAC9D,cAAc;AACZ,UAAM;AAEN,UAAM,OAAO,KAAK,KAAK;AAGvB,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,GAAG,KAAK;AAAA,QACR,YAAY,SAAS,MAAM;AACzB,iBAAO,KAAK,OAAO,WAAW,KAAK,CAAC;AAAA,QACtC,CAAC;AAAA,QACD,MAAM,8BAAO,cAAc;AACzB,gBAAM,WAAW,UAAU,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS;AACrD,gBAAM,KAAK,OAAO,KAAK,QAAQ;AAAA,QACjC,GAHM;AAAA,MAIR;AAAA,IACF;AAGA,SAAK,SAAS,QAAQ;AAAA,EACxB;AACF;AAEA,IAAO,kBAAQ;AAMR,IAAM,QAAQ;AACd,IAAM,OAAO;AAEpB,eAAe,OAAO,MAAM,KAAK;","names":[],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-IUOHNZAT.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-J7D6CDIP.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-J7D6CDIP.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-J7D6CDIP.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-J7D6CDIP.js.map
+91
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-JEZ5YVU7.js
··· 1 + import { 2 + outputManager 3 + } from "./chunk-MZBNHTGF.js"; 4 + import { 5 + BroadcastableDiffuseElement 6 + } from "./chunk-AFAFCDHW.js"; 7 + import { 8 + __name 9 + } from "./chunk-7IARE43G.js"; 10 + 11 + // components/output/polymorphic/indexed-db/element.js 12 + var IndexedDBOutput = class extends BroadcastableDiffuseElement { 13 + static { 14 + __name(this, "IndexedDBOutput"); 15 + } 16 + static NAME = "diffuse/output/polymorphic/indexed-db"; 17 + static WORKER_URL = "components/output/polymorphic/indexed-db/worker.js"; 18 + #manager; 19 + constructor() { 20 + super(); 21 + this.proxy = this.workerProxy(); 22 + this.#manager = outputManager({ 23 + init: /* @__PURE__ */ __name(() => this.whenConnected(), "init"), 24 + tracks: { 25 + empty: /* @__PURE__ */ __name(() => void 0, "empty"), 26 + get: /* @__PURE__ */ __name(() => this.#get("tracks"), "get"), 27 + put: /* @__PURE__ */ __name((data) => this.#put("tracks", data), "put") 28 + } 29 + }); 30 + this.tracks = this.#manager.tracks; 31 + } 32 + // LIFECYCLE 33 + /** 34 + * @override 35 + */ 36 + connectedCallback() { 37 + if (this.hasAttribute("group")) { 38 + const actions = this.broadcast(this.nameWithGroup, { 39 + put: { strategy: "replicate", fn: this.#putIncoming } 40 + }); 41 + if (actions) { 42 + this.#put = this.#putOutgoing(actions.put); 43 + } 44 + } 45 + super.connectedCallback(); 46 + } 47 + // GET & PUT 48 + /** @param {string} name */ 49 + #getProxy = /* @__PURE__ */ __name((name) => this.proxy.get({ name: this.#cat(name) }), "#getProxy"); 50 + #get = this.#getProxy; 51 + /** @param {string} name; @param {any} data */ 52 + #putProxy = /* @__PURE__ */ __name((name, data) => this.proxy.put({ name: this.#cat(name), data }), "#putProxy"); 53 + #put = this.#putProxy; 54 + /** 55 + * @param {(uuidSender: ReturnType<typeof crypto.randomUUID>, name: string, data: any) => Promise<void>} action 56 + * @returns {(name: string, data: any) => Promise<void>} 57 + */ 58 + #putOutgoing = /* @__PURE__ */ __name((action) => async (name, data) => { 59 + return await action(this.uuid, name, data); 60 + }, "#putOutgoing"); 61 + /** 62 + * @param {ReturnType<typeof crypto.randomUUID>} uuidSender 63 + * @param {string} name 64 + * @param {any} data 65 + */ 66 + #putIncoming(uuidSender, name, data) { 67 + if (uuidSender === this.uuid) { 68 + this.#putProxy(name, data); 69 + } else { 70 + if (name === "tracks") this.#manager.signals.tracks.value = data; 71 + } 72 + } 73 + // 🛠️ 74 + /** @param {string} name */ 75 + #cat(name) { 76 + const namespace = this.hasAttribute("namespace") ? this.getAttribute("namespace") + "/" : ""; 77 + return `${namespace}${name}`; 78 + } 79 + }; 80 + var element_default = IndexedDBOutput; 81 + var CLASS = IndexedDBOutput; 82 + var NAME = "dop-indexed-db"; 83 + customElements.define(NAME, IndexedDBOutput); 84 + 85 + export { 86 + element_default, 87 + CLASS, 88 + NAME 89 + }; 90 + 91 + //# sourceMappingURL=./chunk-JEZ5YVU7.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-JEZ5YVU7.js.map
··· 1 + {"version":3,"sources":["/components/output/polymorphic/indexed-db/element.js"],"sourcesContent":["import { BroadcastableDiffuseElement } from \"@common/element.js\";\nimport { outputManager } from \"../../common.js\";\n\n/**\n * @import {ProxiedActions} from \"@common/worker.d.ts\"\n * @import {OutputElement, OutputManager, OutputWorkerActions} from \"../../types.d.ts\"\n * @import {SupportedDataTypes} from \"./types.d.ts\"\n */\n\n////////////////////////////////////////////\n// ELEMENT\n////////////////////////////////////////////\n\n/**\n * @implements {OutputElement<any>}\n */\nclass IndexedDBOutput extends BroadcastableDiffuseElement {\n static NAME = \"diffuse/output/polymorphic/indexed-db\";\n static WORKER_URL = \"components/output/polymorphic/indexed-db/worker.js\";\n\n #manager;\n\n constructor() {\n super();\n\n /** @type {ProxiedActions<OutputWorkerActions<SupportedDataTypes>>} */\n this.proxy = this.workerProxy();\n\n /** @type {OutputManager<SupportedDataTypes>} */\n this.#manager = outputManager({\n init: () => this.whenConnected(),\n tracks: {\n empty: () => undefined,\n get: () => this.#get(\"tracks\"),\n put: (data) => this.#put(\"tracks\", data),\n },\n });\n\n this.tracks = this.#manager.tracks;\n }\n\n // LIFECYCLE\n\n /**\n * @override\n */\n connectedCallback() {\n // Broadcast if needed\n if (this.hasAttribute(\"group\")) {\n const actions = this.broadcast(this.nameWithGroup, {\n put: { strategy: \"replicate\", fn: this.#putIncoming },\n });\n\n if (actions) {\n this.#put = this.#putOutgoing(actions.put);\n }\n }\n\n // Super\n super.connectedCallback();\n }\n\n // GET & PUT\n\n /** @param {string} name */\n #getProxy = (name) => this.proxy.get({ name: this.#cat(name) });\n #get = this.#getProxy;\n\n /** @param {string} name; @param {any} data */\n #putProxy = (name, data) => this.proxy.put({ name: this.#cat(name), data });\n #put = this.#putProxy;\n\n /**\n * @param {(uuidSender: ReturnType<typeof crypto.randomUUID>, name: string, data: any) => Promise<void>} action\n * @returns {(name: string, data: any) => Promise<void>}\n */\n #putOutgoing = (action) => async (name, data) => {\n return await action(this.uuid, name, data);\n };\n\n /**\n * @param {ReturnType<typeof crypto.randomUUID>} uuidSender\n * @param {string} name\n * @param {any} data\n */\n #putIncoming(uuidSender, name, data) {\n if (uuidSender === this.uuid) {\n // Initiator\n this.#putProxy(name, data);\n } else {\n // Listener\n if (name === \"tracks\") this.#manager.signals.tracks.value = data;\n }\n }\n\n // 🛠️\n\n /** @param {string} name */\n #cat(name) {\n const namespace = this.hasAttribute(\"namespace\")\n ? this.getAttribute(\"namespace\") + \"/\"\n : \"\";\n return `${namespace}${name}`;\n }\n}\n\nexport default IndexedDBOutput;\n\n////////////////////////////////////////////\n// REGISTER\n////////////////////////////////////////////\n\nexport const CLASS = IndexedDBOutput;\nexport const NAME = \"dop-indexed-db\";\n\ncustomElements.define(NAME, IndexedDBOutput);\n"],"mappings":";;;;;;;;;;;AAgBA,IAAM,kBAAN,cAA8B,4BAA4B;AAAA,EAhB1D,OAgB0D;AAAA;AAAA;AAAA,EACxD,OAAO,OAAO;AAAA,EACd,OAAO,aAAa;AAAA,EAEpB;AAAA,EAEA,cAAc;AACZ,UAAM;AAGN,SAAK,QAAQ,KAAK,YAAY;AAG9B,SAAK,WAAW,cAAc;AAAA,MAC5B,MAAM,6BAAM,KAAK,cAAc,GAAzB;AAAA,MACN,QAAQ;AAAA,QACN,OAAO,6BAAM,QAAN;AAAA,QACP,KAAK,6BAAM,KAAK,KAAK,QAAQ,GAAxB;AAAA,QACL,KAAK,wBAAC,SAAS,KAAK,KAAK,UAAU,IAAI,GAAlC;AAAA,MACP;AAAA,IACF,CAAC;AAED,SAAK,SAAS,KAAK,SAAS;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB;AAElB,QAAI,KAAK,aAAa,OAAO,GAAG;AAC9B,YAAM,UAAU,KAAK,UAAU,KAAK,eAAe;AAAA,QACjD,KAAK,EAAE,UAAU,aAAa,IAAI,KAAK,aAAa;AAAA,MACtD,CAAC;AAED,UAAI,SAAS;AACX,aAAK,OAAO,KAAK,aAAa,QAAQ,GAAG;AAAA,MAC3C;AAAA,IACF;AAGA,UAAM,kBAAkB;AAAA,EAC1B;AAAA;AAAA;AAAA,EAKA,YAAY,wBAAC,SAAS,KAAK,MAAM,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,EAAE,CAAC,GAAlD;AAAA,EACZ,OAAO,KAAK;AAAA;AAAA,EAGZ,YAAY,wBAAC,MAAM,SAAS,KAAK,MAAM,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,GAA9D;AAAA,EACZ,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,eAAe,wBAAC,WAAW,OAAO,MAAM,SAAS;AAC/C,WAAO,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAAA,EAC3C,GAFe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASf,aAAa,YAAY,MAAM,MAAM;AACnC,QAAI,eAAe,KAAK,MAAM;AAE5B,WAAK,UAAU,MAAM,IAAI;AAAA,IAC3B,OAAO;AAEL,UAAI,SAAS,SAAU,MAAK,SAAS,QAAQ,OAAO,QAAQ;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,KAAK,MAAM;AACT,UAAM,YAAY,KAAK,aAAa,WAAW,IAC3C,KAAK,aAAa,WAAW,IAAI,MACjC;AACJ,WAAO,GAAG,SAAS,GAAG,IAAI;AAAA,EAC5B;AACF;AAEA,IAAO,kBAAQ;AAMR,IAAM,QAAQ;AACd,IAAM,OAAO;AAEpB,eAAe,OAAO,MAAM,eAAe;","names":[],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-JEZ5YVU7.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-JIV2BMIF.js
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-JIV2BMIF.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-JIV2BMIF.js.map
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-JIV2BMIF.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-KM7A6C4E.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-KM7A6C4E.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-KM7A6C4E.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-KM7A6C4E.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-L3PGUTA5.js
··· 1 + ../bafybeih2s36bol7uisrik77ciyli5rhge2bikg7ezv7g43reykdd4jkaiq/chunk-L3PGUTA5.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-L3PGUTA5.js.map
··· 1 + ../bafybeih2s36bol7uisrik77ciyli5rhge2bikg7ezv7g43reykdd4jkaiq/chunk-L3PGUTA5.js.map
+52
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-MZBNHTGF.js
··· 1 + import { 2 + computed, 3 + signal, 4 + untracked 5 + } from "./chunk-SRUOXJB6.js"; 6 + import { 7 + __name 8 + } from "./chunk-7IARE43G.js"; 9 + 10 + // components/output/common.js 11 + function outputManager({ init, tracks }) { 12 + const t = signal( 13 + /** @type {Tracks} */ 14 + tracks.empty() 15 + ); 16 + const ts = signal( 17 + /** @type {"loading" | "loaded" | "sleeping"} */ 18 + "sleeping" 19 + ); 20 + async function loadTracks() { 21 + if (init && await init() === false) return; 22 + ts.value = "loading"; 23 + t.value = await tracks.get(); 24 + ts.value = "loaded"; 25 + } 26 + __name(loadTracks, "loadTracks"); 27 + return { 28 + tracks: { 29 + collection: computed(() => { 30 + if (untracked(() => ts.value === "sleeping")) loadTracks(); 31 + return t.value; 32 + }), 33 + reload: loadTracks, 34 + save: /* @__PURE__ */ __name(async (newTracks) => { 35 + if (untracked(() => ts.value === "sleeping")) loadTracks(); 36 + t.value = newTracks; 37 + await tracks.put(newTracks); 38 + }, "save"), 39 + state: ts.get 40 + }, 41 + signals: { 42 + tracks: t 43 + } 44 + }; 45 + } 46 + __name(outputManager, "outputManager"); 47 + 48 + export { 49 + outputManager 50 + }; 51 + 52 + //# sourceMappingURL=./chunk-MZBNHTGF.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-MZBNHTGF.js.map
··· 1 + {"version":3,"sources":["/components/output/common.js"],"sourcesContent":["import { computed, effect, signal, untracked } from \"@common/signal.js\";\n\n/**\n * @import {OutputManager, OutputManagerProperties} from \"./types.d.ts\"\n */\n\n/**\n * @template Tracks\n * @param {OutputManagerProperties<Tracks>} _\n * @returns {OutputManager<Tracks>}\n */\nexport function outputManager({ init, tracks }) {\n const t = signal(/** @type {Tracks} */ (tracks.empty()));\n const ts = signal(\n /** @type {\"loading\" | \"loaded\" | \"sleeping\"} */ (\"sleeping\"),\n );\n\n async function loadTracks() {\n if (init && (await init()) === false) return;\n ts.value = \"loading\";\n t.value = await tracks.get();\n ts.value = \"loaded\";\n }\n\n return {\n tracks: {\n collection: computed(() => {\n if (untracked(() => ts.value === \"sleeping\")) loadTracks();\n return t.value;\n }),\n reload: loadTracks,\n save: async (newTracks) => {\n if (untracked(() => ts.value === \"sleeping\")) loadTracks();\n t.value = newTracks;\n await tracks.put(newTracks);\n },\n state: ts.get,\n },\n signals: {\n tracks: t,\n },\n };\n}\n"],"mappings":";;;;;;;;;;AAWO,SAAS,cAAc,EAAE,MAAM,OAAO,GAAG;AAC9C,QAAM,IAAI;AAAA;AAAA,IAA8B,OAAO,MAAM;AAAA,EAAE;AACvD,QAAM,KAAK;AAAA;AAAA,IACyC;AAAA,EACpD;AAEA,iBAAe,aAAa;AAC1B,QAAI,QAAS,MAAM,KAAK,MAAO,MAAO;AACtC,OAAG,QAAQ;AACX,MAAE,QAAQ,MAAM,OAAO,IAAI;AAC3B,OAAG,QAAQ;AAAA,EACb;AALe;AAOf,SAAO;AAAA,IACL,QAAQ;AAAA,MACN,YAAY,SAAS,MAAM;AACzB,YAAI,UAAU,MAAM,GAAG,UAAU,UAAU,EAAG,YAAW;AACzD,eAAO,EAAE;AAAA,MACX,CAAC;AAAA,MACD,QAAQ;AAAA,MACR,MAAM,8BAAO,cAAc;AACzB,YAAI,UAAU,MAAM,GAAG,UAAU,UAAU,EAAG,YAAW;AACzD,UAAE,QAAQ;AACV,cAAM,OAAO,IAAI,SAAS;AAAA,MAC5B,GAJM;AAAA,MAKN,OAAO,GAAG;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AA/BgB;","names":[],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-MZBNHTGF.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-N5CHD32K.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-N5CHD32K.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-N5CHD32K.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-N5CHD32K.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-N6PLTDUY.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-N6PLTDUY.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-N6PLTDUY.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-N6PLTDUY.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-NEVFYBXS.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-NEVFYBXS.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-NEVFYBXS.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-NEVFYBXS.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-NUCRFIN6.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-NUCRFIN6.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-NUCRFIN6.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-NUCRFIN6.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-OS4QRJDG.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-OS4QRJDG.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-OS4QRJDG.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-OS4QRJDG.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-OSIZG2BO.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-OSIZG2BO.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-OSIZG2BO.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-OSIZG2BO.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-QOFAJIKO.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-QOFAJIKO.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-QOFAJIKO.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-QOFAJIKO.js.map
+4891
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-R3OSCHAC.js
··· 1 + import { 2 + hasID3v1Header 3 + } from "./chunk-Z6RWJW2M.js"; 4 + import { 5 + LyricsContentType, 6 + TimestampFormat 7 + } from "./chunk-SGG7NSCF.js"; 8 + import { 9 + TrackType, 10 + TrackTypeValueToKeyMap 11 + } from "./chunk-7OCWG5AW.js"; 12 + import { 13 + APEv2Parser 14 + } from "./chunk-CSVVW572.js"; 15 + import { 16 + decodeString, 17 + getUintBE, 18 + toRatio 19 + } from "./chunk-6AX6SYMQ.js"; 20 + import { 21 + AbstractTokenizer, 22 + EndOfStreamError, 23 + fromBlob, 24 + fromBuffer, 25 + fromWebStream, 26 + open2 27 + } from "./chunk-FGRUWWG5.js"; 28 + import { 29 + CouldNotDetermineFileTypeError, 30 + INT32_BE, 31 + InternalParserError, 32 + StringType, 33 + UINT16_BE, 34 + UINT16_LE, 35 + UINT32_BE, 36 + UINT32_LE, 37 + UINT64_LE, 38 + UINT8, 39 + UnsupportedFileTypeError, 40 + require_src, 41 + textDecode 42 + } from "./chunk-ETGVMC2T.js"; 43 + import { 44 + require_uri_all 45 + } from "./chunk-BGA2NGTF.js"; 46 + import { 47 + removeUndefinedValuesFromRecord 48 + } from "./chunk-AN7CZG6F.js"; 49 + import { 50 + __commonJS, 51 + __name, 52 + __toESM 53 + } from "./chunk-7IARE43G.js"; 54 + 55 + // ../node_modules/.deno/content-type@1.0.5/node_modules/content-type/index.js 56 + var require_content_type = __commonJS({ 57 + "../node_modules/.deno/content-type@1.0.5/node_modules/content-type/index.js"(exports) { 58 + "use strict"; 59 + var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g; 60 + var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/; 61 + var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; 62 + var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g; 63 + var QUOTE_REGEXP = /([\\"])/g; 64 + var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; 65 + exports.format = format; 66 + exports.parse = parse2; 67 + function format(obj) { 68 + if (!obj || typeof obj !== "object") { 69 + throw new TypeError("argument obj is required"); 70 + } 71 + var parameters = obj.parameters; 72 + var type = obj.type; 73 + if (!type || !TYPE_REGEXP.test(type)) { 74 + throw new TypeError("invalid type"); 75 + } 76 + var string = type; 77 + if (parameters && typeof parameters === "object") { 78 + var param; 79 + var params = Object.keys(parameters).sort(); 80 + for (var i = 0; i < params.length; i++) { 81 + param = params[i]; 82 + if (!TOKEN_REGEXP.test(param)) { 83 + throw new TypeError("invalid parameter name"); 84 + } 85 + string += "; " + param + "=" + qstring(parameters[param]); 86 + } 87 + } 88 + return string; 89 + } 90 + __name(format, "format"); 91 + function parse2(string) { 92 + if (!string) { 93 + throw new TypeError("argument string is required"); 94 + } 95 + var header = typeof string === "object" ? getcontenttype(string) : string; 96 + if (typeof header !== "string") { 97 + throw new TypeError("argument string is required to be a string"); 98 + } 99 + var index = header.indexOf(";"); 100 + var type = index !== -1 ? header.slice(0, index).trim() : header.trim(); 101 + if (!TYPE_REGEXP.test(type)) { 102 + throw new TypeError("invalid media type"); 103 + } 104 + var obj = new ContentType2(type.toLowerCase()); 105 + if (index !== -1) { 106 + var key; 107 + var match; 108 + var value; 109 + PARAM_REGEXP.lastIndex = index; 110 + while (match = PARAM_REGEXP.exec(header)) { 111 + if (match.index !== index) { 112 + throw new TypeError("invalid parameter format"); 113 + } 114 + index += match[0].length; 115 + key = match[1].toLowerCase(); 116 + value = match[2]; 117 + if (value.charCodeAt(0) === 34) { 118 + value = value.slice(1, -1); 119 + if (value.indexOf("\\") !== -1) { 120 + value = value.replace(QESC_REGEXP, "$1"); 121 + } 122 + } 123 + obj.parameters[key] = value; 124 + } 125 + if (index !== header.length) { 126 + throw new TypeError("invalid parameter format"); 127 + } 128 + } 129 + return obj; 130 + } 131 + __name(parse2, "parse"); 132 + function getcontenttype(obj) { 133 + var header; 134 + if (typeof obj.getHeader === "function") { 135 + header = obj.getHeader("content-type"); 136 + } else if (typeof obj.headers === "object") { 137 + header = obj.headers && obj.headers["content-type"]; 138 + } 139 + if (typeof header !== "string") { 140 + throw new TypeError("content-type header is missing from object"); 141 + } 142 + return header; 143 + } 144 + __name(getcontenttype, "getcontenttype"); 145 + function qstring(val) { 146 + var str = String(val); 147 + if (TOKEN_REGEXP.test(str)) { 148 + return str; 149 + } 150 + if (str.length > 0 && !TEXT_REGEXP.test(str)) { 151 + throw new TypeError("invalid parameter value"); 152 + } 153 + return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"'; 154 + } 155 + __name(qstring, "qstring"); 156 + function ContentType2(type) { 157 + this.parameters = /* @__PURE__ */ Object.create(null); 158 + this.type = type; 159 + } 160 + __name(ContentType2, "ContentType"); 161 + } 162 + }); 163 + 164 + // ../node_modules/.deno/media-typer@1.1.0/node_modules/media-typer/index.js 165 + var require_media_typer = __commonJS({ 166 + "../node_modules/.deno/media-typer@1.1.0/node_modules/media-typer/index.js"(exports) { 167 + "use strict"; 168 + var SUBTYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/; 169 + var TYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/; 170 + var TYPE_REGEXP = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/; 171 + exports.format = format; 172 + exports.parse = parse2; 173 + exports.test = test; 174 + function format(obj) { 175 + if (!obj || typeof obj !== "object") { 176 + throw new TypeError("argument obj is required"); 177 + } 178 + var subtype = obj.subtype; 179 + var suffix = obj.suffix; 180 + var type = obj.type; 181 + if (!type || !TYPE_NAME_REGEXP.test(type)) { 182 + throw new TypeError("invalid type"); 183 + } 184 + if (!subtype || !SUBTYPE_NAME_REGEXP.test(subtype)) { 185 + throw new TypeError("invalid subtype"); 186 + } 187 + var string = type + "/" + subtype; 188 + if (suffix) { 189 + if (!TYPE_NAME_REGEXP.test(suffix)) { 190 + throw new TypeError("invalid suffix"); 191 + } 192 + string += "+" + suffix; 193 + } 194 + return string; 195 + } 196 + __name(format, "format"); 197 + function test(string) { 198 + if (!string) { 199 + throw new TypeError("argument string is required"); 200 + } 201 + if (typeof string !== "string") { 202 + throw new TypeError("argument string is required to be a string"); 203 + } 204 + return TYPE_REGEXP.test(string.toLowerCase()); 205 + } 206 + __name(test, "test"); 207 + function parse2(string) { 208 + if (!string) { 209 + throw new TypeError("argument string is required"); 210 + } 211 + if (typeof string !== "string") { 212 + throw new TypeError("argument string is required to be a string"); 213 + } 214 + var match = TYPE_REGEXP.exec(string.toLowerCase()); 215 + if (!match) { 216 + throw new TypeError("invalid media type"); 217 + } 218 + var type = match[1]; 219 + var subtype = match[2]; 220 + var suffix; 221 + var index = subtype.lastIndexOf("+"); 222 + if (index !== -1) { 223 + suffix = subtype.substr(index + 1); 224 + subtype = subtype.substr(0, index); 225 + } 226 + return new MediaType(type, subtype, suffix); 227 + } 228 + __name(parse2, "parse"); 229 + function MediaType(type, subtype, suffix) { 230 + this.type = type; 231 + this.subtype = subtype; 232 + this.suffix = suffix; 233 + } 234 + __name(MediaType, "MediaType"); 235 + } 236 + }); 237 + 238 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/index.js 239 + var import_debug4 = __toESM(require_src()); 240 + 241 + // ../node_modules/.deno/@tokenizer+inflate@0.4.1/node_modules/@tokenizer/inflate/lib/ZipHandler.js 242 + var import_debug = __toESM(require_src()); 243 + 244 + // ../node_modules/.deno/@tokenizer+inflate@0.4.1/node_modules/@tokenizer/inflate/lib/ZipToken.js 245 + var Signature = { 246 + LocalFileHeader: 67324752, 247 + DataDescriptor: 134695760, 248 + CentralFileHeader: 33639248, 249 + EndOfCentralDirectory: 101010256 250 + }; 251 + var DataDescriptor = { 252 + get(array) { 253 + return { 254 + signature: UINT32_LE.get(array, 0), 255 + compressedSize: UINT32_LE.get(array, 8), 256 + uncompressedSize: UINT32_LE.get(array, 12) 257 + }; 258 + }, 259 + len: 16 260 + }; 261 + var LocalFileHeaderToken = { 262 + get(array) { 263 + const flags = UINT16_LE.get(array, 6); 264 + return { 265 + signature: UINT32_LE.get(array, 0), 266 + minVersion: UINT16_LE.get(array, 4), 267 + dataDescriptor: !!(flags & 8), 268 + compressedMethod: UINT16_LE.get(array, 8), 269 + compressedSize: UINT32_LE.get(array, 18), 270 + uncompressedSize: UINT32_LE.get(array, 22), 271 + filenameLength: UINT16_LE.get(array, 26), 272 + extraFieldLength: UINT16_LE.get(array, 28), 273 + filename: null 274 + }; 275 + }, 276 + len: 30 277 + }; 278 + var EndOfCentralDirectoryRecordToken = { 279 + get(array) { 280 + return { 281 + signature: UINT32_LE.get(array, 0), 282 + nrOfThisDisk: UINT16_LE.get(array, 4), 283 + nrOfThisDiskWithTheStart: UINT16_LE.get(array, 6), 284 + nrOfEntriesOnThisDisk: UINT16_LE.get(array, 8), 285 + nrOfEntriesOfSize: UINT16_LE.get(array, 10), 286 + sizeOfCd: UINT32_LE.get(array, 12), 287 + offsetOfStartOfCd: UINT32_LE.get(array, 16), 288 + zipFileCommentLength: UINT16_LE.get(array, 20) 289 + }; 290 + }, 291 + len: 22 292 + }; 293 + var FileHeader = { 294 + get(array) { 295 + const flags = UINT16_LE.get(array, 8); 296 + return { 297 + signature: UINT32_LE.get(array, 0), 298 + minVersion: UINT16_LE.get(array, 6), 299 + dataDescriptor: !!(flags & 8), 300 + compressedMethod: UINT16_LE.get(array, 10), 301 + compressedSize: UINT32_LE.get(array, 20), 302 + uncompressedSize: UINT32_LE.get(array, 24), 303 + filenameLength: UINT16_LE.get(array, 28), 304 + extraFieldLength: UINT16_LE.get(array, 30), 305 + fileCommentLength: UINT16_LE.get(array, 32), 306 + relativeOffsetOfLocalHeader: UINT32_LE.get(array, 42), 307 + filename: null 308 + }; 309 + }, 310 + len: 46 311 + }; 312 + 313 + // ../node_modules/.deno/@tokenizer+inflate@0.4.1/node_modules/@tokenizer/inflate/lib/ZipHandler.js 314 + function signatureToArray(signature) { 315 + const signatureBytes = new Uint8Array(UINT32_LE.len); 316 + UINT32_LE.put(signatureBytes, 0, signature); 317 + return signatureBytes; 318 + } 319 + __name(signatureToArray, "signatureToArray"); 320 + var debug = (0, import_debug.default)("tokenizer:inflate"); 321 + var syncBufferSize = 256 * 1024; 322 + var ddSignatureArray = signatureToArray(Signature.DataDescriptor); 323 + var eocdSignatureBytes = signatureToArray(Signature.EndOfCentralDirectory); 324 + var ZipHandler = class _ZipHandler { 325 + static { 326 + __name(this, "ZipHandler"); 327 + } 328 + constructor(tokenizer3) { 329 + this.tokenizer = tokenizer3; 330 + this.syncBuffer = new Uint8Array(syncBufferSize); 331 + } 332 + async isZip() { 333 + return await this.peekSignature() === Signature.LocalFileHeader; 334 + } 335 + peekSignature() { 336 + return this.tokenizer.peekToken(UINT32_LE); 337 + } 338 + async findEndOfCentralDirectoryLocator() { 339 + const randomReadTokenizer = this.tokenizer; 340 + const chunkLength = Math.min(16 * 1024, randomReadTokenizer.fileInfo.size); 341 + const buffer = this.syncBuffer.subarray(0, chunkLength); 342 + await this.tokenizer.readBuffer(buffer, { position: randomReadTokenizer.fileInfo.size - chunkLength }); 343 + for (let i = buffer.length - 4; i >= 0; i--) { 344 + if (buffer[i] === eocdSignatureBytes[0] && buffer[i + 1] === eocdSignatureBytes[1] && buffer[i + 2] === eocdSignatureBytes[2] && buffer[i + 3] === eocdSignatureBytes[3]) { 345 + return randomReadTokenizer.fileInfo.size - chunkLength + i; 346 + } 347 + } 348 + return -1; 349 + } 350 + async readCentralDirectory() { 351 + if (!this.tokenizer.supportsRandomAccess()) { 352 + debug("Cannot reading central-directory without random-read support"); 353 + return; 354 + } 355 + debug("Reading central-directory..."); 356 + const pos = this.tokenizer.position; 357 + const offset = await this.findEndOfCentralDirectoryLocator(); 358 + if (offset > 0) { 359 + debug("Central-directory 32-bit signature found"); 360 + const eocdHeader = await this.tokenizer.readToken(EndOfCentralDirectoryRecordToken, offset); 361 + const files = []; 362 + this.tokenizer.setPosition(eocdHeader.offsetOfStartOfCd); 363 + for (let n = 0; n < eocdHeader.nrOfEntriesOfSize; ++n) { 364 + const entry = await this.tokenizer.readToken(FileHeader); 365 + if (entry.signature !== Signature.CentralFileHeader) { 366 + throw new Error("Expected Central-File-Header signature"); 367 + } 368 + entry.filename = await this.tokenizer.readToken(new StringType(entry.filenameLength, "utf-8")); 369 + await this.tokenizer.ignore(entry.extraFieldLength); 370 + await this.tokenizer.ignore(entry.fileCommentLength); 371 + files.push(entry); 372 + debug(`Add central-directory file-entry: n=${n + 1}/${files.length}: filename=${files[n].filename}`); 373 + } 374 + this.tokenizer.setPosition(pos); 375 + return files; 376 + } 377 + this.tokenizer.setPosition(pos); 378 + } 379 + async unzip(fileCb) { 380 + const entries = await this.readCentralDirectory(); 381 + if (entries) { 382 + return this.iterateOverCentralDirectory(entries, fileCb); 383 + } 384 + let stop = false; 385 + do { 386 + const zipHeader = await this.readLocalFileHeader(); 387 + if (!zipHeader) 388 + break; 389 + const next = fileCb(zipHeader); 390 + stop = !!next.stop; 391 + let fileData; 392 + await this.tokenizer.ignore(zipHeader.extraFieldLength); 393 + if (zipHeader.dataDescriptor && zipHeader.compressedSize === 0) { 394 + const chunks = []; 395 + let len = syncBufferSize; 396 + debug("Compressed-file-size unknown, scanning for next data-descriptor-signature...."); 397 + let nextHeaderIndex = -1; 398 + while (nextHeaderIndex < 0 && len === syncBufferSize) { 399 + len = await this.tokenizer.peekBuffer(this.syncBuffer, { mayBeLess: true }); 400 + nextHeaderIndex = indexOf(this.syncBuffer.subarray(0, len), ddSignatureArray); 401 + const size = nextHeaderIndex >= 0 ? nextHeaderIndex : len; 402 + if (next.handler) { 403 + const data = new Uint8Array(size); 404 + await this.tokenizer.readBuffer(data); 405 + chunks.push(data); 406 + } else { 407 + await this.tokenizer.ignore(size); 408 + } 409 + } 410 + debug(`Found data-descriptor-signature at pos=${this.tokenizer.position}`); 411 + if (next.handler) { 412 + await this.inflate(zipHeader, mergeArrays(chunks), next.handler); 413 + } 414 + } else { 415 + if (next.handler) { 416 + debug(`Reading compressed-file-data: ${zipHeader.compressedSize} bytes`); 417 + fileData = new Uint8Array(zipHeader.compressedSize); 418 + await this.tokenizer.readBuffer(fileData); 419 + await this.inflate(zipHeader, fileData, next.handler); 420 + } else { 421 + debug(`Ignoring compressed-file-data: ${zipHeader.compressedSize} bytes`); 422 + await this.tokenizer.ignore(zipHeader.compressedSize); 423 + } 424 + } 425 + debug(`Reading data-descriptor at pos=${this.tokenizer.position}`); 426 + if (zipHeader.dataDescriptor) { 427 + const dataDescriptor = await this.tokenizer.readToken(DataDescriptor); 428 + if (dataDescriptor.signature !== 134695760) { 429 + throw new Error(`Expected data-descriptor-signature at position ${this.tokenizer.position - DataDescriptor.len}`); 430 + } 431 + } 432 + } while (!stop); 433 + } 434 + async iterateOverCentralDirectory(entries, fileCb) { 435 + for (const fileHeader of entries) { 436 + const next = fileCb(fileHeader); 437 + if (next.handler) { 438 + this.tokenizer.setPosition(fileHeader.relativeOffsetOfLocalHeader); 439 + const zipHeader = await this.readLocalFileHeader(); 440 + if (zipHeader) { 441 + await this.tokenizer.ignore(zipHeader.extraFieldLength); 442 + const fileData = new Uint8Array(fileHeader.compressedSize); 443 + await this.tokenizer.readBuffer(fileData); 444 + await this.inflate(zipHeader, fileData, next.handler); 445 + } 446 + } 447 + if (next.stop) 448 + break; 449 + } 450 + } 451 + async inflate(zipHeader, fileData, cb) { 452 + if (zipHeader.compressedMethod === 0) { 453 + return cb(fileData); 454 + } 455 + if (zipHeader.compressedMethod !== 8) { 456 + throw new Error(`Unsupported ZIP compression method: ${zipHeader.compressedMethod}`); 457 + } 458 + debug(`Decompress filename=${zipHeader.filename}, compressed-size=${fileData.length}`); 459 + const uncompressedData = await _ZipHandler.decompressDeflateRaw(fileData); 460 + return cb(uncompressedData); 461 + } 462 + static async decompressDeflateRaw(data) { 463 + const input = new ReadableStream({ 464 + start(controller) { 465 + controller.enqueue(data); 466 + controller.close(); 467 + } 468 + }); 469 + const ds = new DecompressionStream("deflate-raw"); 470 + const output = input.pipeThrough(ds); 471 + try { 472 + const response = new Response(output); 473 + const buffer = await response.arrayBuffer(); 474 + return new Uint8Array(buffer); 475 + } catch (err) { 476 + const message = err instanceof Error ? `Failed to deflate ZIP entry: ${err.message}` : "Unknown decompression error in ZIP entry"; 477 + throw new TypeError(message); 478 + } 479 + } 480 + async readLocalFileHeader() { 481 + const signature = await this.tokenizer.peekToken(UINT32_LE); 482 + if (signature === Signature.LocalFileHeader) { 483 + const header = await this.tokenizer.readToken(LocalFileHeaderToken); 484 + header.filename = await this.tokenizer.readToken(new StringType(header.filenameLength, "utf-8")); 485 + return header; 486 + } 487 + if (signature === Signature.CentralFileHeader) { 488 + return false; 489 + } 490 + if (signature === 3759263696) { 491 + throw new Error("Encrypted ZIP"); 492 + } 493 + throw new Error("Unexpected signature"); 494 + } 495 + }; 496 + function indexOf(buffer, portion) { 497 + const bufferLength = buffer.length; 498 + const portionLength = portion.length; 499 + if (portionLength > bufferLength) 500 + return -1; 501 + for (let i = 0; i <= bufferLength - portionLength; i++) { 502 + let found = true; 503 + for (let j = 0; j < portionLength; j++) { 504 + if (buffer[i + j] !== portion[j]) { 505 + found = false; 506 + break; 507 + } 508 + } 509 + if (found) { 510 + return i; 511 + } 512 + } 513 + return -1; 514 + } 515 + __name(indexOf, "indexOf"); 516 + function mergeArrays(chunks) { 517 + const totalLength = chunks.reduce((acc, curr) => acc + curr.length, 0); 518 + const mergedArray = new Uint8Array(totalLength); 519 + let offset = 0; 520 + for (const chunk of chunks) { 521 + mergedArray.set(chunk, offset); 522 + offset += chunk.length; 523 + } 524 + return mergedArray; 525 + } 526 + __name(mergeArrays, "mergeArrays"); 527 + 528 + // ../node_modules/.deno/@tokenizer+inflate@0.4.1/node_modules/@tokenizer/inflate/lib/GzipHandler.js 529 + var GzipHandler = class { 530 + static { 531 + __name(this, "GzipHandler"); 532 + } 533 + constructor(tokenizer3) { 534 + this.tokenizer = tokenizer3; 535 + } 536 + inflate() { 537 + const tokenizer3 = this.tokenizer; 538 + return new ReadableStream({ 539 + async pull(controller) { 540 + const buffer = new Uint8Array(1024); 541 + const size = await tokenizer3.readBuffer(buffer, { mayBeLess: true }); 542 + if (size === 0) { 543 + controller.close(); 544 + return; 545 + } 546 + controller.enqueue(buffer.subarray(0, size)); 547 + } 548 + }).pipeThrough(new DecompressionStream("gzip")); 549 + } 550 + }; 551 + 552 + // ../node_modules/.deno/file-type@21.3.0/node_modules/file-type/util.js 553 + function stringToBytes(string, encoding) { 554 + if (encoding === "utf-16le") { 555 + const bytes = []; 556 + for (let index = 0; index < string.length; index++) { 557 + const code = string.charCodeAt(index); 558 + bytes.push(code & 255, code >> 8 & 255); 559 + } 560 + return bytes; 561 + } 562 + if (encoding === "utf-16be") { 563 + const bytes = []; 564 + for (let index = 0; index < string.length; index++) { 565 + const code = string.charCodeAt(index); 566 + bytes.push(code >> 8 & 255, code & 255); 567 + } 568 + return bytes; 569 + } 570 + return [...string].map((character) => character.charCodeAt(0)); 571 + } 572 + __name(stringToBytes, "stringToBytes"); 573 + function tarHeaderChecksumMatches(arrayBuffer, offset = 0) { 574 + const readSum = Number.parseInt(new StringType(6).get(arrayBuffer, 148).replace(/\0.*$/, "").trim(), 8); 575 + if (Number.isNaN(readSum)) { 576 + return false; 577 + } 578 + let sum = 8 * 32; 579 + for (let index = offset; index < offset + 148; index++) { 580 + sum += arrayBuffer[index]; 581 + } 582 + for (let index = offset + 156; index < offset + 512; index++) { 583 + sum += arrayBuffer[index]; 584 + } 585 + return readSum === sum; 586 + } 587 + __name(tarHeaderChecksumMatches, "tarHeaderChecksumMatches"); 588 + var uint32SyncSafeToken = { 589 + get: /* @__PURE__ */ __name((buffer, offset) => buffer[offset + 3] & 127 | buffer[offset + 2] << 7 | buffer[offset + 1] << 14 | buffer[offset] << 21, "get"), 590 + len: 4 591 + }; 592 + 593 + // ../node_modules/.deno/file-type@21.3.0/node_modules/file-type/supported.js 594 + var extensions = [ 595 + "jpg", 596 + "png", 597 + "apng", 598 + "gif", 599 + "webp", 600 + "flif", 601 + "xcf", 602 + "cr2", 603 + "cr3", 604 + "orf", 605 + "arw", 606 + "dng", 607 + "nef", 608 + "rw2", 609 + "raf", 610 + "tif", 611 + "bmp", 612 + "icns", 613 + "jxr", 614 + "psd", 615 + "indd", 616 + "zip", 617 + "tar", 618 + "rar", 619 + "gz", 620 + "bz2", 621 + "7z", 622 + "dmg", 623 + "mp4", 624 + "mid", 625 + "mkv", 626 + "webm", 627 + "mov", 628 + "avi", 629 + "mpg", 630 + "mp2", 631 + "mp3", 632 + "m4a", 633 + "oga", 634 + "ogg", 635 + "ogv", 636 + "opus", 637 + "flac", 638 + "wav", 639 + "spx", 640 + "amr", 641 + "pdf", 642 + "epub", 643 + "elf", 644 + "macho", 645 + "exe", 646 + "swf", 647 + "rtf", 648 + "wasm", 649 + "woff", 650 + "woff2", 651 + "eot", 652 + "ttf", 653 + "otf", 654 + "ttc", 655 + "ico", 656 + "flv", 657 + "ps", 658 + "xz", 659 + "sqlite", 660 + "nes", 661 + "crx", 662 + "xpi", 663 + "cab", 664 + "deb", 665 + "ar", 666 + "rpm", 667 + "Z", 668 + "lz", 669 + "cfb", 670 + "mxf", 671 + "mts", 672 + "blend", 673 + "bpg", 674 + "docx", 675 + "pptx", 676 + "xlsx", 677 + "3gp", 678 + "3g2", 679 + "j2c", 680 + "jp2", 681 + "jpm", 682 + "jpx", 683 + "mj2", 684 + "aif", 685 + "qcp", 686 + "odt", 687 + "ods", 688 + "odp", 689 + "xml", 690 + "mobi", 691 + "heic", 692 + "cur", 693 + "ktx", 694 + "ape", 695 + "wv", 696 + "dcm", 697 + "ics", 698 + "glb", 699 + "pcap", 700 + "dsf", 701 + "lnk", 702 + "alias", 703 + "voc", 704 + "ac3", 705 + "m4v", 706 + "m4p", 707 + "m4b", 708 + "f4v", 709 + "f4p", 710 + "f4b", 711 + "f4a", 712 + "mie", 713 + "asf", 714 + "ogm", 715 + "ogx", 716 + "mpc", 717 + "arrow", 718 + "shp", 719 + "aac", 720 + "mp1", 721 + "it", 722 + "s3m", 723 + "xm", 724 + "skp", 725 + "avif", 726 + "eps", 727 + "lzh", 728 + "pgp", 729 + "asar", 730 + "stl", 731 + "chm", 732 + "3mf", 733 + "zst", 734 + "jxl", 735 + "vcf", 736 + "jls", 737 + "pst", 738 + "dwg", 739 + "parquet", 740 + "class", 741 + "arj", 742 + "cpio", 743 + "ace", 744 + "avro", 745 + "icc", 746 + "fbx", 747 + "vsdx", 748 + "vtt", 749 + "apk", 750 + "drc", 751 + "lz4", 752 + "potx", 753 + "xltx", 754 + "dotx", 755 + "xltm", 756 + "ott", 757 + "ots", 758 + "otp", 759 + "odg", 760 + "otg", 761 + "xlsm", 762 + "docm", 763 + "dotm", 764 + "potm", 765 + "pptm", 766 + "jar", 767 + "jmp", 768 + "rm", 769 + "sav", 770 + "ppsm", 771 + "ppsx", 772 + "tar.gz", 773 + "reg", 774 + "dat" 775 + ]; 776 + var mimeTypes = [ 777 + "image/jpeg", 778 + "image/png", 779 + "image/gif", 780 + "image/webp", 781 + "image/flif", 782 + "image/x-xcf", 783 + "image/x-canon-cr2", 784 + "image/x-canon-cr3", 785 + "image/tiff", 786 + "image/bmp", 787 + "image/vnd.ms-photo", 788 + "image/vnd.adobe.photoshop", 789 + "application/x-indesign", 790 + "application/epub+zip", 791 + "application/x-xpinstall", 792 + "application/vnd.ms-powerpoint.slideshow.macroenabled.12", 793 + "application/vnd.oasis.opendocument.text", 794 + "application/vnd.oasis.opendocument.spreadsheet", 795 + "application/vnd.oasis.opendocument.presentation", 796 + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 797 + "application/vnd.openxmlformats-officedocument.presentationml.presentation", 798 + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 799 + "application/vnd.openxmlformats-officedocument.presentationml.slideshow", 800 + "application/zip", 801 + "application/x-tar", 802 + "application/x-rar-compressed", 803 + "application/gzip", 804 + "application/x-bzip2", 805 + "application/x-7z-compressed", 806 + "application/x-apple-diskimage", 807 + "application/vnd.apache.arrow.file", 808 + "video/mp4", 809 + "audio/midi", 810 + "video/matroska", 811 + "video/webm", 812 + "video/quicktime", 813 + "video/vnd.avi", 814 + "audio/wav", 815 + "audio/qcelp", 816 + "audio/x-ms-asf", 817 + "video/x-ms-asf", 818 + "application/vnd.ms-asf", 819 + "video/mpeg", 820 + "video/3gpp", 821 + "audio/mpeg", 822 + "audio/mp4", 823 + // RFC 4337 824 + "video/ogg", 825 + "audio/ogg", 826 + "audio/ogg; codecs=opus", 827 + "application/ogg", 828 + "audio/flac", 829 + "audio/ape", 830 + "audio/wavpack", 831 + "audio/amr", 832 + "application/pdf", 833 + "application/x-elf", 834 + "application/x-mach-binary", 835 + "application/x-msdownload", 836 + "application/x-shockwave-flash", 837 + "application/rtf", 838 + "application/wasm", 839 + "font/woff", 840 + "font/woff2", 841 + "application/vnd.ms-fontobject", 842 + "font/ttf", 843 + "font/otf", 844 + "font/collection", 845 + "image/x-icon", 846 + "video/x-flv", 847 + "application/postscript", 848 + "application/eps", 849 + "application/x-xz", 850 + "application/x-sqlite3", 851 + "application/x-nintendo-nes-rom", 852 + "application/x-google-chrome-extension", 853 + "application/vnd.ms-cab-compressed", 854 + "application/x-deb", 855 + "application/x-unix-archive", 856 + "application/x-rpm", 857 + "application/x-compress", 858 + "application/x-lzip", 859 + "application/x-cfb", 860 + "application/x-mie", 861 + "application/mxf", 862 + "video/mp2t", 863 + "application/x-blender", 864 + "image/bpg", 865 + "image/j2c", 866 + "image/jp2", 867 + "image/jpx", 868 + "image/jpm", 869 + "image/mj2", 870 + "audio/aiff", 871 + "application/xml", 872 + "application/x-mobipocket-ebook", 873 + "image/heif", 874 + "image/heif-sequence", 875 + "image/heic", 876 + "image/heic-sequence", 877 + "image/icns", 878 + "image/ktx", 879 + "application/dicom", 880 + "audio/x-musepack", 881 + "text/calendar", 882 + "text/vcard", 883 + "text/vtt", 884 + "model/gltf-binary", 885 + "application/vnd.tcpdump.pcap", 886 + "audio/x-dsf", 887 + // Non-standard 888 + "application/x.ms.shortcut", 889 + // Invented by us 890 + "application/x.apple.alias", 891 + // Invented by us 892 + "audio/x-voc", 893 + "audio/vnd.dolby.dd-raw", 894 + "audio/x-m4a", 895 + "image/apng", 896 + "image/x-olympus-orf", 897 + "image/x-sony-arw", 898 + "image/x-adobe-dng", 899 + "image/x-nikon-nef", 900 + "image/x-panasonic-rw2", 901 + "image/x-fujifilm-raf", 902 + "video/x-m4v", 903 + "video/3gpp2", 904 + "application/x-esri-shape", 905 + "audio/aac", 906 + "audio/x-it", 907 + "audio/x-s3m", 908 + "audio/x-xm", 909 + "video/MP1S", 910 + "video/MP2P", 911 + "application/vnd.sketchup.skp", 912 + "image/avif", 913 + "application/x-lzh-compressed", 914 + "application/pgp-encrypted", 915 + "application/x-asar", 916 + "model/stl", 917 + "application/vnd.ms-htmlhelp", 918 + "model/3mf", 919 + "image/jxl", 920 + "application/zstd", 921 + "image/jls", 922 + "application/vnd.ms-outlook", 923 + "image/vnd.dwg", 924 + "application/vnd.apache.parquet", 925 + "application/java-vm", 926 + "application/x-arj", 927 + "application/x-cpio", 928 + "application/x-ace-compressed", 929 + "application/avro", 930 + "application/vnd.iccprofile", 931 + "application/x.autodesk.fbx", 932 + // Invented by us 933 + "application/vnd.visio", 934 + "application/vnd.android.package-archive", 935 + "application/vnd.google.draco", 936 + // Invented by us 937 + "application/x-lz4", 938 + // Invented by us 939 + "application/vnd.openxmlformats-officedocument.presentationml.template", 940 + "application/vnd.openxmlformats-officedocument.spreadsheetml.template", 941 + "application/vnd.openxmlformats-officedocument.wordprocessingml.template", 942 + "application/vnd.ms-excel.template.macroenabled.12", 943 + "application/vnd.oasis.opendocument.text-template", 944 + "application/vnd.oasis.opendocument.spreadsheet-template", 945 + "application/vnd.oasis.opendocument.presentation-template", 946 + "application/vnd.oasis.opendocument.graphics", 947 + "application/vnd.oasis.opendocument.graphics-template", 948 + "application/vnd.ms-excel.sheet.macroenabled.12", 949 + "application/vnd.ms-word.document.macroenabled.12", 950 + "application/vnd.ms-word.template.macroenabled.12", 951 + "application/vnd.ms-powerpoint.template.macroenabled.12", 952 + "application/vnd.ms-powerpoint.presentation.macroenabled.12", 953 + "application/java-archive", 954 + "application/vnd.rn-realmedia", 955 + "application/x-spss-sav", 956 + "application/x-ms-regedit", 957 + "application/x-ft-windows-registry-hive", 958 + "application/x-jmp-data" 959 + ]; 960 + 961 + // ../node_modules/.deno/file-type@21.3.0/node_modules/file-type/core.js 962 + var reasonableDetectionSizeInBytes = 4100; 963 + async function fileTypeFromBuffer(input, options) { 964 + return new FileTypeParser(options).fromBuffer(input); 965 + } 966 + __name(fileTypeFromBuffer, "fileTypeFromBuffer"); 967 + function getFileTypeFromMimeType(mimeType) { 968 + mimeType = mimeType.toLowerCase(); 969 + switch (mimeType) { 970 + case "application/epub+zip": 971 + return { 972 + ext: "epub", 973 + mime: mimeType 974 + }; 975 + case "application/vnd.oasis.opendocument.text": 976 + return { 977 + ext: "odt", 978 + mime: mimeType 979 + }; 980 + case "application/vnd.oasis.opendocument.text-template": 981 + return { 982 + ext: "ott", 983 + mime: mimeType 984 + }; 985 + case "application/vnd.oasis.opendocument.spreadsheet": 986 + return { 987 + ext: "ods", 988 + mime: mimeType 989 + }; 990 + case "application/vnd.oasis.opendocument.spreadsheet-template": 991 + return { 992 + ext: "ots", 993 + mime: mimeType 994 + }; 995 + case "application/vnd.oasis.opendocument.presentation": 996 + return { 997 + ext: "odp", 998 + mime: mimeType 999 + }; 1000 + case "application/vnd.oasis.opendocument.presentation-template": 1001 + return { 1002 + ext: "otp", 1003 + mime: mimeType 1004 + }; 1005 + case "application/vnd.oasis.opendocument.graphics": 1006 + return { 1007 + ext: "odg", 1008 + mime: mimeType 1009 + }; 1010 + case "application/vnd.oasis.opendocument.graphics-template": 1011 + return { 1012 + ext: "otg", 1013 + mime: mimeType 1014 + }; 1015 + case "application/vnd.openxmlformats-officedocument.presentationml.slideshow": 1016 + return { 1017 + ext: "ppsx", 1018 + mime: mimeType 1019 + }; 1020 + case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": 1021 + return { 1022 + ext: "xlsx", 1023 + mime: mimeType 1024 + }; 1025 + case "application/vnd.ms-excel.sheet.macroenabled": 1026 + return { 1027 + ext: "xlsm", 1028 + mime: "application/vnd.ms-excel.sheet.macroenabled.12" 1029 + }; 1030 + case "application/vnd.openxmlformats-officedocument.spreadsheetml.template": 1031 + return { 1032 + ext: "xltx", 1033 + mime: mimeType 1034 + }; 1035 + case "application/vnd.ms-excel.template.macroenabled": 1036 + return { 1037 + ext: "xltm", 1038 + mime: "application/vnd.ms-excel.template.macroenabled.12" 1039 + }; 1040 + case "application/vnd.ms-powerpoint.slideshow.macroenabled": 1041 + return { 1042 + ext: "ppsm", 1043 + mime: "application/vnd.ms-powerpoint.slideshow.macroenabled.12" 1044 + }; 1045 + case "application/vnd.openxmlformats-officedocument.wordprocessingml.document": 1046 + return { 1047 + ext: "docx", 1048 + mime: mimeType 1049 + }; 1050 + case "application/vnd.ms-word.document.macroenabled": 1051 + return { 1052 + ext: "docm", 1053 + mime: "application/vnd.ms-word.document.macroenabled.12" 1054 + }; 1055 + case "application/vnd.openxmlformats-officedocument.wordprocessingml.template": 1056 + return { 1057 + ext: "dotx", 1058 + mime: mimeType 1059 + }; 1060 + case "application/vnd.ms-word.template.macroenabledtemplate": 1061 + return { 1062 + ext: "dotm", 1063 + mime: "application/vnd.ms-word.template.macroenabled.12" 1064 + }; 1065 + case "application/vnd.openxmlformats-officedocument.presentationml.template": 1066 + return { 1067 + ext: "potx", 1068 + mime: mimeType 1069 + }; 1070 + case "application/vnd.ms-powerpoint.template.macroenabled": 1071 + return { 1072 + ext: "potm", 1073 + mime: "application/vnd.ms-powerpoint.template.macroenabled.12" 1074 + }; 1075 + case "application/vnd.openxmlformats-officedocument.presentationml.presentation": 1076 + return { 1077 + ext: "pptx", 1078 + mime: mimeType 1079 + }; 1080 + case "application/vnd.ms-powerpoint.presentation.macroenabled": 1081 + return { 1082 + ext: "pptm", 1083 + mime: "application/vnd.ms-powerpoint.presentation.macroenabled.12" 1084 + }; 1085 + case "application/vnd.ms-visio.drawing": 1086 + return { 1087 + ext: "vsdx", 1088 + mime: "application/vnd.visio" 1089 + }; 1090 + case "application/vnd.ms-package.3dmanufacturing-3dmodel+xml": 1091 + return { 1092 + ext: "3mf", 1093 + mime: "model/3mf" 1094 + }; 1095 + default: 1096 + } 1097 + } 1098 + __name(getFileTypeFromMimeType, "getFileTypeFromMimeType"); 1099 + function _check(buffer, headers, options) { 1100 + options = { 1101 + offset: 0, 1102 + ...options 1103 + }; 1104 + for (const [index, header] of headers.entries()) { 1105 + if (options.mask) { 1106 + if (header !== (options.mask[index] & buffer[index + options.offset])) { 1107 + return false; 1108 + } 1109 + } else if (header !== buffer[index + options.offset]) { 1110 + return false; 1111 + } 1112 + } 1113 + return true; 1114 + } 1115 + __name(_check, "_check"); 1116 + var FileTypeParser = class { 1117 + static { 1118 + __name(this, "FileTypeParser"); 1119 + } 1120 + constructor(options) { 1121 + this.options = { 1122 + mpegOffsetTolerance: 0, 1123 + ...options 1124 + }; 1125 + this.detectors = [ 1126 + ...options?.customDetectors ?? [], 1127 + { id: "core", detect: this.detectConfident }, 1128 + { id: "core.imprecise", detect: this.detectImprecise } 1129 + ]; 1130 + this.tokenizerOptions = { 1131 + abortSignal: options?.signal 1132 + }; 1133 + } 1134 + async fromTokenizer(tokenizer3) { 1135 + const initialPosition = tokenizer3.position; 1136 + for (const detector of this.detectors) { 1137 + const fileType = await detector.detect(tokenizer3); 1138 + if (fileType) { 1139 + return fileType; 1140 + } 1141 + if (initialPosition !== tokenizer3.position) { 1142 + return void 0; 1143 + } 1144 + } 1145 + } 1146 + async fromBuffer(input) { 1147 + if (!(input instanceof Uint8Array || input instanceof ArrayBuffer)) { 1148 + throw new TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`ArrayBuffer\`, got \`${typeof input}\``); 1149 + } 1150 + const buffer = input instanceof Uint8Array ? input : new Uint8Array(input); 1151 + if (!(buffer?.length > 1)) { 1152 + return; 1153 + } 1154 + return this.fromTokenizer(fromBuffer(buffer, this.tokenizerOptions)); 1155 + } 1156 + async fromBlob(blob) { 1157 + const tokenizer3 = fromBlob(blob, this.tokenizerOptions); 1158 + try { 1159 + return await this.fromTokenizer(tokenizer3); 1160 + } finally { 1161 + await tokenizer3.close(); 1162 + } 1163 + } 1164 + async fromStream(stream) { 1165 + const tokenizer3 = fromWebStream(stream, this.tokenizerOptions); 1166 + try { 1167 + return await this.fromTokenizer(tokenizer3); 1168 + } finally { 1169 + await tokenizer3.close(); 1170 + } 1171 + } 1172 + async toDetectionStream(stream, options) { 1173 + const { sampleSize = reasonableDetectionSizeInBytes } = options; 1174 + let detectedFileType; 1175 + let firstChunk; 1176 + const reader = stream.getReader({ mode: "byob" }); 1177 + try { 1178 + const { value: chunk, done } = await reader.read(new Uint8Array(sampleSize)); 1179 + firstChunk = chunk; 1180 + if (!done && chunk) { 1181 + try { 1182 + detectedFileType = await this.fromBuffer(chunk.subarray(0, sampleSize)); 1183 + } catch (error) { 1184 + if (!(error instanceof EndOfStreamError)) { 1185 + throw error; 1186 + } 1187 + detectedFileType = void 0; 1188 + } 1189 + } 1190 + firstChunk = chunk; 1191 + } finally { 1192 + reader.releaseLock(); 1193 + } 1194 + const transformStream = new TransformStream({ 1195 + async start(controller) { 1196 + controller.enqueue(firstChunk); 1197 + }, 1198 + transform(chunk, controller) { 1199 + controller.enqueue(chunk); 1200 + } 1201 + }); 1202 + const newStream = stream.pipeThrough(transformStream); 1203 + newStream.fileType = detectedFileType; 1204 + return newStream; 1205 + } 1206 + check(header, options) { 1207 + return _check(this.buffer, header, options); 1208 + } 1209 + checkString(header, options) { 1210 + return this.check(stringToBytes(header, options?.encoding), options); 1211 + } 1212 + // Detections with a high degree of certainty in identifying the correct file type 1213 + detectConfident = /* @__PURE__ */ __name(async (tokenizer3) => { 1214 + this.buffer = new Uint8Array(reasonableDetectionSizeInBytes); 1215 + if (tokenizer3.fileInfo.size === void 0) { 1216 + tokenizer3.fileInfo.size = Number.MAX_SAFE_INTEGER; 1217 + } 1218 + this.tokenizer = tokenizer3; 1219 + await tokenizer3.peekBuffer(this.buffer, { length: 32, mayBeLess: true }); 1220 + if (this.check([66, 77])) { 1221 + return { 1222 + ext: "bmp", 1223 + mime: "image/bmp" 1224 + }; 1225 + } 1226 + if (this.check([11, 119])) { 1227 + return { 1228 + ext: "ac3", 1229 + mime: "audio/vnd.dolby.dd-raw" 1230 + }; 1231 + } 1232 + if (this.check([120, 1])) { 1233 + return { 1234 + ext: "dmg", 1235 + mime: "application/x-apple-diskimage" 1236 + }; 1237 + } 1238 + if (this.check([77, 90])) { 1239 + return { 1240 + ext: "exe", 1241 + mime: "application/x-msdownload" 1242 + }; 1243 + } 1244 + if (this.check([37, 33])) { 1245 + await tokenizer3.peekBuffer(this.buffer, { length: 24, mayBeLess: true }); 1246 + if (this.checkString("PS-Adobe-", { offset: 2 }) && this.checkString(" EPSF-", { offset: 14 })) { 1247 + return { 1248 + ext: "eps", 1249 + mime: "application/eps" 1250 + }; 1251 + } 1252 + return { 1253 + ext: "ps", 1254 + mime: "application/postscript" 1255 + }; 1256 + } 1257 + if (this.check([31, 160]) || this.check([31, 157])) { 1258 + return { 1259 + ext: "Z", 1260 + mime: "application/x-compress" 1261 + }; 1262 + } 1263 + if (this.check([199, 113])) { 1264 + return { 1265 + ext: "cpio", 1266 + mime: "application/x-cpio" 1267 + }; 1268 + } 1269 + if (this.check([96, 234])) { 1270 + return { 1271 + ext: "arj", 1272 + mime: "application/x-arj" 1273 + }; 1274 + } 1275 + if (this.check([239, 187, 191])) { 1276 + this.tokenizer.ignore(3); 1277 + return this.detectConfident(tokenizer3); 1278 + } 1279 + if (this.check([71, 73, 70])) { 1280 + return { 1281 + ext: "gif", 1282 + mime: "image/gif" 1283 + }; 1284 + } 1285 + if (this.check([73, 73, 188])) { 1286 + return { 1287 + ext: "jxr", 1288 + mime: "image/vnd.ms-photo" 1289 + }; 1290 + } 1291 + if (this.check([31, 139, 8])) { 1292 + const gzipHandler = new GzipHandler(tokenizer3); 1293 + const stream = gzipHandler.inflate(); 1294 + let shouldCancelStream = true; 1295 + try { 1296 + let compressedFileType; 1297 + try { 1298 + compressedFileType = await this.fromStream(stream); 1299 + } catch { 1300 + shouldCancelStream = false; 1301 + } 1302 + if (compressedFileType && compressedFileType.ext === "tar") { 1303 + return { 1304 + ext: "tar.gz", 1305 + mime: "application/gzip" 1306 + }; 1307 + } 1308 + } finally { 1309 + if (shouldCancelStream) { 1310 + await stream.cancel(); 1311 + } 1312 + } 1313 + return { 1314 + ext: "gz", 1315 + mime: "application/gzip" 1316 + }; 1317 + } 1318 + if (this.check([66, 90, 104])) { 1319 + return { 1320 + ext: "bz2", 1321 + mime: "application/x-bzip2" 1322 + }; 1323 + } 1324 + if (this.checkString("ID3")) { 1325 + await tokenizer3.ignore(6); 1326 + const id3HeaderLength = await tokenizer3.readToken(uint32SyncSafeToken); 1327 + if (tokenizer3.position + id3HeaderLength > tokenizer3.fileInfo.size) { 1328 + return { 1329 + ext: "mp3", 1330 + mime: "audio/mpeg" 1331 + }; 1332 + } 1333 + await tokenizer3.ignore(id3HeaderLength); 1334 + return this.fromTokenizer(tokenizer3); 1335 + } 1336 + if (this.checkString("MP+")) { 1337 + return { 1338 + ext: "mpc", 1339 + mime: "audio/x-musepack" 1340 + }; 1341 + } 1342 + if ((this.buffer[0] === 67 || this.buffer[0] === 70) && this.check([87, 83], { offset: 1 })) { 1343 + return { 1344 + ext: "swf", 1345 + mime: "application/x-shockwave-flash" 1346 + }; 1347 + } 1348 + if (this.check([255, 216, 255])) { 1349 + if (this.check([247], { offset: 3 })) { 1350 + return { 1351 + ext: "jls", 1352 + mime: "image/jls" 1353 + }; 1354 + } 1355 + return { 1356 + ext: "jpg", 1357 + mime: "image/jpeg" 1358 + }; 1359 + } 1360 + if (this.check([79, 98, 106, 1])) { 1361 + return { 1362 + ext: "avro", 1363 + mime: "application/avro" 1364 + }; 1365 + } 1366 + if (this.checkString("FLIF")) { 1367 + return { 1368 + ext: "flif", 1369 + mime: "image/flif" 1370 + }; 1371 + } 1372 + if (this.checkString("8BPS")) { 1373 + return { 1374 + ext: "psd", 1375 + mime: "image/vnd.adobe.photoshop" 1376 + }; 1377 + } 1378 + if (this.checkString("MPCK")) { 1379 + return { 1380 + ext: "mpc", 1381 + mime: "audio/x-musepack" 1382 + }; 1383 + } 1384 + if (this.checkString("FORM")) { 1385 + return { 1386 + ext: "aif", 1387 + mime: "audio/aiff" 1388 + }; 1389 + } 1390 + if (this.checkString("icns", { offset: 0 })) { 1391 + return { 1392 + ext: "icns", 1393 + mime: "image/icns" 1394 + }; 1395 + } 1396 + if (this.check([80, 75, 3, 4])) { 1397 + let fileType; 1398 + await new ZipHandler(tokenizer3).unzip((zipHeader) => { 1399 + switch (zipHeader.filename) { 1400 + case "META-INF/mozilla.rsa": 1401 + fileType = { 1402 + ext: "xpi", 1403 + mime: "application/x-xpinstall" 1404 + }; 1405 + return { 1406 + stop: true 1407 + }; 1408 + case "META-INF/MANIFEST.MF": 1409 + fileType = { 1410 + ext: "jar", 1411 + mime: "application/java-archive" 1412 + }; 1413 + return { 1414 + stop: true 1415 + }; 1416 + case "mimetype": 1417 + return { 1418 + async handler(fileData) { 1419 + const mimeType = new TextDecoder("utf-8").decode(fileData).trim(); 1420 + fileType = getFileTypeFromMimeType(mimeType); 1421 + }, 1422 + stop: true 1423 + }; 1424 + case "[Content_Types].xml": 1425 + return { 1426 + async handler(fileData) { 1427 + let xmlContent = new TextDecoder("utf-8").decode(fileData); 1428 + const endPos = xmlContent.indexOf('.main+xml"'); 1429 + if (endPos === -1) { 1430 + const mimeType = "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"; 1431 + if (xmlContent.includes(`ContentType="${mimeType}"`)) { 1432 + fileType = getFileTypeFromMimeType(mimeType); 1433 + } 1434 + } else { 1435 + xmlContent = xmlContent.slice(0, Math.max(0, endPos)); 1436 + const firstPos = xmlContent.lastIndexOf('"'); 1437 + const mimeType = xmlContent.slice(Math.max(0, firstPos + 1)); 1438 + fileType = getFileTypeFromMimeType(mimeType); 1439 + } 1440 + }, 1441 + stop: true 1442 + }; 1443 + default: 1444 + if (/classes\d*\.dex/.test(zipHeader.filename)) { 1445 + fileType = { 1446 + ext: "apk", 1447 + mime: "application/vnd.android.package-archive" 1448 + }; 1449 + return { stop: true }; 1450 + } 1451 + return {}; 1452 + } 1453 + }).catch((error) => { 1454 + if (!(error instanceof EndOfStreamError)) { 1455 + throw error; 1456 + } 1457 + }); 1458 + return fileType ?? { 1459 + ext: "zip", 1460 + mime: "application/zip" 1461 + }; 1462 + } 1463 + if (this.checkString("OggS")) { 1464 + await tokenizer3.ignore(28); 1465 + const type = new Uint8Array(8); 1466 + await tokenizer3.readBuffer(type); 1467 + if (_check(type, [79, 112, 117, 115, 72, 101, 97, 100])) { 1468 + return { 1469 + ext: "opus", 1470 + mime: "audio/ogg; codecs=opus" 1471 + }; 1472 + } 1473 + if (_check(type, [128, 116, 104, 101, 111, 114, 97])) { 1474 + return { 1475 + ext: "ogv", 1476 + mime: "video/ogg" 1477 + }; 1478 + } 1479 + if (_check(type, [1, 118, 105, 100, 101, 111, 0])) { 1480 + return { 1481 + ext: "ogm", 1482 + mime: "video/ogg" 1483 + }; 1484 + } 1485 + if (_check(type, [127, 70, 76, 65, 67])) { 1486 + return { 1487 + ext: "oga", 1488 + mime: "audio/ogg" 1489 + }; 1490 + } 1491 + if (_check(type, [83, 112, 101, 101, 120, 32, 32])) { 1492 + return { 1493 + ext: "spx", 1494 + mime: "audio/ogg" 1495 + }; 1496 + } 1497 + if (_check(type, [1, 118, 111, 114, 98, 105, 115])) { 1498 + return { 1499 + ext: "ogg", 1500 + mime: "audio/ogg" 1501 + }; 1502 + } 1503 + return { 1504 + ext: "ogx", 1505 + mime: "application/ogg" 1506 + }; 1507 + } 1508 + if (this.check([80, 75]) && (this.buffer[2] === 3 || this.buffer[2] === 5 || this.buffer[2] === 7) && (this.buffer[3] === 4 || this.buffer[3] === 6 || this.buffer[3] === 8)) { 1509 + return { 1510 + ext: "zip", 1511 + mime: "application/zip" 1512 + }; 1513 + } 1514 + if (this.checkString("MThd")) { 1515 + return { 1516 + ext: "mid", 1517 + mime: "audio/midi" 1518 + }; 1519 + } 1520 + if (this.checkString("wOFF") && (this.check([0, 1, 0, 0], { offset: 4 }) || this.checkString("OTTO", { offset: 4 }))) { 1521 + return { 1522 + ext: "woff", 1523 + mime: "font/woff" 1524 + }; 1525 + } 1526 + if (this.checkString("wOF2") && (this.check([0, 1, 0, 0], { offset: 4 }) || this.checkString("OTTO", { offset: 4 }))) { 1527 + return { 1528 + ext: "woff2", 1529 + mime: "font/woff2" 1530 + }; 1531 + } 1532 + if (this.check([212, 195, 178, 161]) || this.check([161, 178, 195, 212])) { 1533 + return { 1534 + ext: "pcap", 1535 + mime: "application/vnd.tcpdump.pcap" 1536 + }; 1537 + } 1538 + if (this.checkString("DSD ")) { 1539 + return { 1540 + ext: "dsf", 1541 + mime: "audio/x-dsf" 1542 + // Non-standard 1543 + }; 1544 + } 1545 + if (this.checkString("LZIP")) { 1546 + return { 1547 + ext: "lz", 1548 + mime: "application/x-lzip" 1549 + }; 1550 + } 1551 + if (this.checkString("fLaC")) { 1552 + return { 1553 + ext: "flac", 1554 + mime: "audio/flac" 1555 + }; 1556 + } 1557 + if (this.check([66, 80, 71, 251])) { 1558 + return { 1559 + ext: "bpg", 1560 + mime: "image/bpg" 1561 + }; 1562 + } 1563 + if (this.checkString("wvpk")) { 1564 + return { 1565 + ext: "wv", 1566 + mime: "audio/wavpack" 1567 + }; 1568 + } 1569 + if (this.checkString("%PDF")) { 1570 + return { 1571 + ext: "pdf", 1572 + mime: "application/pdf" 1573 + }; 1574 + } 1575 + if (this.check([0, 97, 115, 109])) { 1576 + return { 1577 + ext: "wasm", 1578 + mime: "application/wasm" 1579 + }; 1580 + } 1581 + if (this.check([73, 73])) { 1582 + const fileType = await this.readTiffHeader(false); 1583 + if (fileType) { 1584 + return fileType; 1585 + } 1586 + } 1587 + if (this.check([77, 77])) { 1588 + const fileType = await this.readTiffHeader(true); 1589 + if (fileType) { 1590 + return fileType; 1591 + } 1592 + } 1593 + if (this.checkString("MAC ")) { 1594 + return { 1595 + ext: "ape", 1596 + mime: "audio/ape" 1597 + }; 1598 + } 1599 + if (this.check([26, 69, 223, 163])) { 1600 + async function readField() { 1601 + const msb = await tokenizer3.peekNumber(UINT8); 1602 + let mask = 128; 1603 + let ic = 0; 1604 + while ((msb & mask) === 0 && mask !== 0) { 1605 + ++ic; 1606 + mask >>= 1; 1607 + } 1608 + const id = new Uint8Array(ic + 1); 1609 + await tokenizer3.readBuffer(id); 1610 + return id; 1611 + } 1612 + __name(readField, "readField"); 1613 + async function readElement() { 1614 + const idField = await readField(); 1615 + const lengthField = await readField(); 1616 + lengthField[0] ^= 128 >> lengthField.length - 1; 1617 + const nrLength = Math.min(6, lengthField.length); 1618 + const idView = new DataView(idField.buffer); 1619 + const lengthView = new DataView(lengthField.buffer, lengthField.length - nrLength, nrLength); 1620 + return { 1621 + id: getUintBE(idView), 1622 + len: getUintBE(lengthView) 1623 + }; 1624 + } 1625 + __name(readElement, "readElement"); 1626 + async function readChildren(children) { 1627 + while (children > 0) { 1628 + const element = await readElement(); 1629 + if (element.id === 17026) { 1630 + const rawValue = await tokenizer3.readToken(new StringType(element.len)); 1631 + return rawValue.replaceAll(/\00.*$/g, ""); 1632 + } 1633 + await tokenizer3.ignore(element.len); 1634 + --children; 1635 + } 1636 + } 1637 + __name(readChildren, "readChildren"); 1638 + const re = await readElement(); 1639 + const documentType = await readChildren(re.len); 1640 + switch (documentType) { 1641 + case "webm": 1642 + return { 1643 + ext: "webm", 1644 + mime: "video/webm" 1645 + }; 1646 + case "matroska": 1647 + return { 1648 + ext: "mkv", 1649 + mime: "video/matroska" 1650 + }; 1651 + default: 1652 + return; 1653 + } 1654 + } 1655 + if (this.checkString("SQLi")) { 1656 + return { 1657 + ext: "sqlite", 1658 + mime: "application/x-sqlite3" 1659 + }; 1660 + } 1661 + if (this.check([78, 69, 83, 26])) { 1662 + return { 1663 + ext: "nes", 1664 + mime: "application/x-nintendo-nes-rom" 1665 + }; 1666 + } 1667 + if (this.checkString("Cr24")) { 1668 + return { 1669 + ext: "crx", 1670 + mime: "application/x-google-chrome-extension" 1671 + }; 1672 + } 1673 + if (this.checkString("MSCF") || this.checkString("ISc(")) { 1674 + return { 1675 + ext: "cab", 1676 + mime: "application/vnd.ms-cab-compressed" 1677 + }; 1678 + } 1679 + if (this.check([237, 171, 238, 219])) { 1680 + return { 1681 + ext: "rpm", 1682 + mime: "application/x-rpm" 1683 + }; 1684 + } 1685 + if (this.check([197, 208, 211, 198])) { 1686 + return { 1687 + ext: "eps", 1688 + mime: "application/eps" 1689 + }; 1690 + } 1691 + if (this.check([40, 181, 47, 253])) { 1692 + return { 1693 + ext: "zst", 1694 + mime: "application/zstd" 1695 + }; 1696 + } 1697 + if (this.check([127, 69, 76, 70])) { 1698 + return { 1699 + ext: "elf", 1700 + mime: "application/x-elf" 1701 + }; 1702 + } 1703 + if (this.check([33, 66, 68, 78])) { 1704 + return { 1705 + ext: "pst", 1706 + mime: "application/vnd.ms-outlook" 1707 + }; 1708 + } 1709 + if (this.checkString("PAR1") || this.checkString("PARE")) { 1710 + return { 1711 + ext: "parquet", 1712 + mime: "application/vnd.apache.parquet" 1713 + }; 1714 + } 1715 + if (this.checkString("ttcf")) { 1716 + return { 1717 + ext: "ttc", 1718 + mime: "font/collection" 1719 + }; 1720 + } 1721 + if (this.check([254, 237, 250, 206]) || this.check([254, 237, 250, 207]) || this.check([206, 250, 237, 254]) || this.check([207, 250, 237, 254])) { 1722 + return { 1723 + ext: "macho", 1724 + mime: "application/x-mach-binary" 1725 + }; 1726 + } 1727 + if (this.check([4, 34, 77, 24])) { 1728 + return { 1729 + ext: "lz4", 1730 + mime: "application/x-lz4" 1731 + // Invented by us 1732 + }; 1733 + } 1734 + if (this.checkString("regf")) { 1735 + return { 1736 + ext: "dat", 1737 + mime: "application/x-ft-windows-registry-hive" 1738 + }; 1739 + } 1740 + if (this.checkString("$FL2") || this.checkString("$FL3")) { 1741 + return { 1742 + ext: "sav", 1743 + mime: "application/x-spss-sav" 1744 + }; 1745 + } 1746 + if (this.check([79, 84, 84, 79, 0])) { 1747 + return { 1748 + ext: "otf", 1749 + mime: "font/otf" 1750 + }; 1751 + } 1752 + if (this.checkString("#!AMR")) { 1753 + return { 1754 + ext: "amr", 1755 + mime: "audio/amr" 1756 + }; 1757 + } 1758 + if (this.checkString("{\\rtf")) { 1759 + return { 1760 + ext: "rtf", 1761 + mime: "application/rtf" 1762 + }; 1763 + } 1764 + if (this.check([70, 76, 86, 1])) { 1765 + return { 1766 + ext: "flv", 1767 + mime: "video/x-flv" 1768 + }; 1769 + } 1770 + if (this.checkString("IMPM")) { 1771 + return { 1772 + ext: "it", 1773 + mime: "audio/x-it" 1774 + }; 1775 + } 1776 + if (this.checkString("-lh0-", { offset: 2 }) || this.checkString("-lh1-", { offset: 2 }) || this.checkString("-lh2-", { offset: 2 }) || this.checkString("-lh3-", { offset: 2 }) || this.checkString("-lh4-", { offset: 2 }) || this.checkString("-lh5-", { offset: 2 }) || this.checkString("-lh6-", { offset: 2 }) || this.checkString("-lh7-", { offset: 2 }) || this.checkString("-lzs-", { offset: 2 }) || this.checkString("-lz4-", { offset: 2 }) || this.checkString("-lz5-", { offset: 2 }) || this.checkString("-lhd-", { offset: 2 })) { 1777 + return { 1778 + ext: "lzh", 1779 + mime: "application/x-lzh-compressed" 1780 + }; 1781 + } 1782 + if (this.check([0, 0, 1, 186])) { 1783 + if (this.check([33], { offset: 4, mask: [241] })) { 1784 + return { 1785 + ext: "mpg", 1786 + // May also be .ps, .mpeg 1787 + mime: "video/MP1S" 1788 + }; 1789 + } 1790 + if (this.check([68], { offset: 4, mask: [196] })) { 1791 + return { 1792 + ext: "mpg", 1793 + // May also be .mpg, .m2p, .vob or .sub 1794 + mime: "video/MP2P" 1795 + }; 1796 + } 1797 + } 1798 + if (this.checkString("ITSF")) { 1799 + return { 1800 + ext: "chm", 1801 + mime: "application/vnd.ms-htmlhelp" 1802 + }; 1803 + } 1804 + if (this.check([202, 254, 186, 190])) { 1805 + const machOArchitectureCount = UINT32_BE.get(this.buffer, 4); 1806 + const javaClassFileMajorVersion = UINT16_BE.get(this.buffer, 6); 1807 + if (machOArchitectureCount > 0 && machOArchitectureCount <= 30) { 1808 + return { 1809 + ext: "macho", 1810 + mime: "application/x-mach-binary" 1811 + }; 1812 + } 1813 + if (javaClassFileMajorVersion > 30) { 1814 + return { 1815 + ext: "class", 1816 + mime: "application/java-vm" 1817 + }; 1818 + } 1819 + } 1820 + if (this.checkString(".RMF")) { 1821 + return { 1822 + ext: "rm", 1823 + mime: "application/vnd.rn-realmedia" 1824 + }; 1825 + } 1826 + if (this.checkString("DRACO")) { 1827 + return { 1828 + ext: "drc", 1829 + mime: "application/vnd.google.draco" 1830 + // Invented by us 1831 + }; 1832 + } 1833 + if (this.check([253, 55, 122, 88, 90, 0])) { 1834 + return { 1835 + ext: "xz", 1836 + mime: "application/x-xz" 1837 + }; 1838 + } 1839 + if (this.checkString("<?xml ")) { 1840 + return { 1841 + ext: "xml", 1842 + mime: "application/xml" 1843 + }; 1844 + } 1845 + if (this.check([55, 122, 188, 175, 39, 28])) { 1846 + return { 1847 + ext: "7z", 1848 + mime: "application/x-7z-compressed" 1849 + }; 1850 + } 1851 + if (this.check([82, 97, 114, 33, 26, 7]) && (this.buffer[6] === 0 || this.buffer[6] === 1)) { 1852 + return { 1853 + ext: "rar", 1854 + mime: "application/x-rar-compressed" 1855 + }; 1856 + } 1857 + if (this.checkString("solid ")) { 1858 + return { 1859 + ext: "stl", 1860 + mime: "model/stl" 1861 + }; 1862 + } 1863 + if (this.checkString("AC")) { 1864 + const version = new StringType(4, "latin1").get(this.buffer, 2); 1865 + if (version.match("^d*") && version >= 1e3 && version <= 1050) { 1866 + return { 1867 + ext: "dwg", 1868 + mime: "image/vnd.dwg" 1869 + }; 1870 + } 1871 + } 1872 + if (this.checkString("070707")) { 1873 + return { 1874 + ext: "cpio", 1875 + mime: "application/x-cpio" 1876 + }; 1877 + } 1878 + if (this.checkString("BLENDER")) { 1879 + return { 1880 + ext: "blend", 1881 + mime: "application/x-blender" 1882 + }; 1883 + } 1884 + if (this.checkString("!<arch>")) { 1885 + await tokenizer3.ignore(8); 1886 + const string = await tokenizer3.readToken(new StringType(13, "ascii")); 1887 + if (string === "debian-binary") { 1888 + return { 1889 + ext: "deb", 1890 + mime: "application/x-deb" 1891 + }; 1892 + } 1893 + return { 1894 + ext: "ar", 1895 + mime: "application/x-unix-archive" 1896 + }; 1897 + } 1898 + if (this.checkString("WEBVTT") && // One of LF, CR, tab, space, or end of file must follow "WEBVTT" per the spec (see `fixture/fixture-vtt-*.vtt` for examples). Note that `\0` is technically the null character (there is no such thing as an EOF character). However, checking for `\0` gives us the same result as checking for the end of the stream. 1899 + ["\n", "\r", " ", " ", "\0"].some((char7) => this.checkString(char7, { offset: 6 }))) { 1900 + return { 1901 + ext: "vtt", 1902 + mime: "text/vtt" 1903 + }; 1904 + } 1905 + if (this.check([137, 80, 78, 71, 13, 10, 26, 10])) { 1906 + await tokenizer3.ignore(8); 1907 + async function readChunkHeader() { 1908 + return { 1909 + length: await tokenizer3.readToken(INT32_BE), 1910 + type: await tokenizer3.readToken(new StringType(4, "latin1")) 1911 + }; 1912 + } 1913 + __name(readChunkHeader, "readChunkHeader"); 1914 + do { 1915 + const chunk = await readChunkHeader(); 1916 + if (chunk.length < 0) { 1917 + return; 1918 + } 1919 + switch (chunk.type) { 1920 + case "IDAT": 1921 + return { 1922 + ext: "png", 1923 + mime: "image/png" 1924 + }; 1925 + case "acTL": 1926 + return { 1927 + ext: "apng", 1928 + mime: "image/apng" 1929 + }; 1930 + default: 1931 + await tokenizer3.ignore(chunk.length + 4); 1932 + } 1933 + } while (tokenizer3.position + 8 < tokenizer3.fileInfo.size); 1934 + return { 1935 + ext: "png", 1936 + mime: "image/png" 1937 + }; 1938 + } 1939 + if (this.check([65, 82, 82, 79, 87, 49, 0, 0])) { 1940 + return { 1941 + ext: "arrow", 1942 + mime: "application/vnd.apache.arrow.file" 1943 + }; 1944 + } 1945 + if (this.check([103, 108, 84, 70, 2, 0, 0, 0])) { 1946 + return { 1947 + ext: "glb", 1948 + mime: "model/gltf-binary" 1949 + }; 1950 + } 1951 + if (this.check([102, 114, 101, 101], { offset: 4 }) || this.check([109, 100, 97, 116], { offset: 4 }) || this.check([109, 111, 111, 118], { offset: 4 }) || this.check([119, 105, 100, 101], { offset: 4 })) { 1952 + return { 1953 + ext: "mov", 1954 + mime: "video/quicktime" 1955 + }; 1956 + } 1957 + if (this.check([73, 73, 82, 79, 8, 0, 0, 0, 24])) { 1958 + return { 1959 + ext: "orf", 1960 + mime: "image/x-olympus-orf" 1961 + }; 1962 + } 1963 + if (this.checkString("gimp xcf ")) { 1964 + return { 1965 + ext: "xcf", 1966 + mime: "image/x-xcf" 1967 + }; 1968 + } 1969 + if (this.checkString("ftyp", { offset: 4 }) && (this.buffer[8] & 96) !== 0) { 1970 + const brandMajor = new StringType(4, "latin1").get(this.buffer, 8).replace("\0", " ").trim(); 1971 + switch (brandMajor) { 1972 + case "avif": 1973 + case "avis": 1974 + return { ext: "avif", mime: "image/avif" }; 1975 + case "mif1": 1976 + return { ext: "heic", mime: "image/heif" }; 1977 + case "msf1": 1978 + return { ext: "heic", mime: "image/heif-sequence" }; 1979 + case "heic": 1980 + case "heix": 1981 + return { ext: "heic", mime: "image/heic" }; 1982 + case "hevc": 1983 + case "hevx": 1984 + return { ext: "heic", mime: "image/heic-sequence" }; 1985 + case "qt": 1986 + return { ext: "mov", mime: "video/quicktime" }; 1987 + case "M4V": 1988 + case "M4VH": 1989 + case "M4VP": 1990 + return { ext: "m4v", mime: "video/x-m4v" }; 1991 + case "M4P": 1992 + return { ext: "m4p", mime: "video/mp4" }; 1993 + case "M4B": 1994 + return { ext: "m4b", mime: "audio/mp4" }; 1995 + case "M4A": 1996 + return { ext: "m4a", mime: "audio/x-m4a" }; 1997 + case "F4V": 1998 + return { ext: "f4v", mime: "video/mp4" }; 1999 + case "F4P": 2000 + return { ext: "f4p", mime: "video/mp4" }; 2001 + case "F4A": 2002 + return { ext: "f4a", mime: "audio/mp4" }; 2003 + case "F4B": 2004 + return { ext: "f4b", mime: "audio/mp4" }; 2005 + case "crx": 2006 + return { ext: "cr3", mime: "image/x-canon-cr3" }; 2007 + default: 2008 + if (brandMajor.startsWith("3g")) { 2009 + if (brandMajor.startsWith("3g2")) { 2010 + return { ext: "3g2", mime: "video/3gpp2" }; 2011 + } 2012 + return { ext: "3gp", mime: "video/3gpp" }; 2013 + } 2014 + return { ext: "mp4", mime: "video/mp4" }; 2015 + } 2016 + } 2017 + if (this.checkString("REGEDIT4\r\n")) { 2018 + return { 2019 + ext: "reg", 2020 + mime: "application/x-ms-regedit" 2021 + }; 2022 + } 2023 + if (this.check([82, 73, 70, 70])) { 2024 + if (this.checkString("WEBP", { offset: 8 })) { 2025 + return { 2026 + ext: "webp", 2027 + mime: "image/webp" 2028 + }; 2029 + } 2030 + if (this.check([65, 86, 73], { offset: 8 })) { 2031 + return { 2032 + ext: "avi", 2033 + mime: "video/vnd.avi" 2034 + }; 2035 + } 2036 + if (this.check([87, 65, 86, 69], { offset: 8 })) { 2037 + return { 2038 + ext: "wav", 2039 + mime: "audio/wav" 2040 + }; 2041 + } 2042 + if (this.check([81, 76, 67, 77], { offset: 8 })) { 2043 + return { 2044 + ext: "qcp", 2045 + mime: "audio/qcelp" 2046 + }; 2047 + } 2048 + } 2049 + if (this.check([73, 73, 85, 0, 24, 0, 0, 0, 136, 231, 116, 216])) { 2050 + return { 2051 + ext: "rw2", 2052 + mime: "image/x-panasonic-rw2" 2053 + }; 2054 + } 2055 + if (this.check([48, 38, 178, 117, 142, 102, 207, 17, 166, 217])) { 2056 + async function readHeader() { 2057 + const guid = new Uint8Array(16); 2058 + await tokenizer3.readBuffer(guid); 2059 + return { 2060 + id: guid, 2061 + size: Number(await tokenizer3.readToken(UINT64_LE)) 2062 + }; 2063 + } 2064 + __name(readHeader, "readHeader"); 2065 + await tokenizer3.ignore(30); 2066 + while (tokenizer3.position + 24 < tokenizer3.fileInfo.size) { 2067 + const header = await readHeader(); 2068 + let payload = header.size - 24; 2069 + if (_check(header.id, [145, 7, 220, 183, 183, 169, 207, 17, 142, 230, 0, 192, 12, 32, 83, 101])) { 2070 + const typeId = new Uint8Array(16); 2071 + payload -= await tokenizer3.readBuffer(typeId); 2072 + if (_check(typeId, [64, 158, 105, 248, 77, 91, 207, 17, 168, 253, 0, 128, 95, 92, 68, 43])) { 2073 + return { 2074 + ext: "asf", 2075 + mime: "audio/x-ms-asf" 2076 + }; 2077 + } 2078 + if (_check(typeId, [192, 239, 25, 188, 77, 91, 207, 17, 168, 253, 0, 128, 95, 92, 68, 43])) { 2079 + return { 2080 + ext: "asf", 2081 + mime: "video/x-ms-asf" 2082 + }; 2083 + } 2084 + break; 2085 + } 2086 + await tokenizer3.ignore(payload); 2087 + } 2088 + return { 2089 + ext: "asf", 2090 + mime: "application/vnd.ms-asf" 2091 + }; 2092 + } 2093 + if (this.check([171, 75, 84, 88, 32, 49, 49, 187, 13, 10, 26, 10])) { 2094 + return { 2095 + ext: "ktx", 2096 + mime: "image/ktx" 2097 + }; 2098 + } 2099 + if ((this.check([126, 16, 4]) || this.check([126, 24, 4])) && this.check([48, 77, 73, 69], { offset: 4 })) { 2100 + return { 2101 + ext: "mie", 2102 + mime: "application/x-mie" 2103 + }; 2104 + } 2105 + if (this.check([39, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], { offset: 2 })) { 2106 + return { 2107 + ext: "shp", 2108 + mime: "application/x-esri-shape" 2109 + }; 2110 + } 2111 + if (this.check([255, 79, 255, 81])) { 2112 + return { 2113 + ext: "j2c", 2114 + mime: "image/j2c" 2115 + }; 2116 + } 2117 + if (this.check([0, 0, 0, 12, 106, 80, 32, 32, 13, 10, 135, 10])) { 2118 + await tokenizer3.ignore(20); 2119 + const type = await tokenizer3.readToken(new StringType(4, "ascii")); 2120 + switch (type) { 2121 + case "jp2 ": 2122 + return { 2123 + ext: "jp2", 2124 + mime: "image/jp2" 2125 + }; 2126 + case "jpx ": 2127 + return { 2128 + ext: "jpx", 2129 + mime: "image/jpx" 2130 + }; 2131 + case "jpm ": 2132 + return { 2133 + ext: "jpm", 2134 + mime: "image/jpm" 2135 + }; 2136 + case "mjp2": 2137 + return { 2138 + ext: "mj2", 2139 + mime: "image/mj2" 2140 + }; 2141 + default: 2142 + return; 2143 + } 2144 + } 2145 + if (this.check([255, 10]) || this.check([0, 0, 0, 12, 74, 88, 76, 32, 13, 10, 135, 10])) { 2146 + return { 2147 + ext: "jxl", 2148 + mime: "image/jxl" 2149 + }; 2150 + } 2151 + if (this.check([254, 255])) { 2152 + if (this.checkString("<?xml ", { offset: 2, encoding: "utf-16be" })) { 2153 + return { 2154 + ext: "xml", 2155 + mime: "application/xml" 2156 + }; 2157 + } 2158 + return void 0; 2159 + } 2160 + if (this.check([208, 207, 17, 224, 161, 177, 26, 225])) { 2161 + return { 2162 + ext: "cfb", 2163 + mime: "application/x-cfb" 2164 + }; 2165 + } 2166 + await tokenizer3.peekBuffer(this.buffer, { length: Math.min(256, tokenizer3.fileInfo.size), mayBeLess: true }); 2167 + if (this.check([97, 99, 115, 112], { offset: 36 })) { 2168 + return { 2169 + ext: "icc", 2170 + mime: "application/vnd.iccprofile" 2171 + }; 2172 + } 2173 + if (this.checkString("**ACE", { offset: 7 }) && this.checkString("**", { offset: 12 })) { 2174 + return { 2175 + ext: "ace", 2176 + mime: "application/x-ace-compressed" 2177 + }; 2178 + } 2179 + if (this.checkString("BEGIN:")) { 2180 + if (this.checkString("VCARD", { offset: 6 })) { 2181 + return { 2182 + ext: "vcf", 2183 + mime: "text/vcard" 2184 + }; 2185 + } 2186 + if (this.checkString("VCALENDAR", { offset: 6 })) { 2187 + return { 2188 + ext: "ics", 2189 + mime: "text/calendar" 2190 + }; 2191 + } 2192 + } 2193 + if (this.checkString("FUJIFILMCCD-RAW")) { 2194 + return { 2195 + ext: "raf", 2196 + mime: "image/x-fujifilm-raf" 2197 + }; 2198 + } 2199 + if (this.checkString("Extended Module:")) { 2200 + return { 2201 + ext: "xm", 2202 + mime: "audio/x-xm" 2203 + }; 2204 + } 2205 + if (this.checkString("Creative Voice File")) { 2206 + return { 2207 + ext: "voc", 2208 + mime: "audio/x-voc" 2209 + }; 2210 + } 2211 + if (this.check([4, 0, 0, 0]) && this.buffer.length >= 16) { 2212 + const jsonSize = new DataView(this.buffer.buffer).getUint32(12, true); 2213 + if (jsonSize > 12 && this.buffer.length >= jsonSize + 16) { 2214 + try { 2215 + const header = new TextDecoder().decode(this.buffer.subarray(16, jsonSize + 16)); 2216 + const json = JSON.parse(header); 2217 + if (json.files) { 2218 + return { 2219 + ext: "asar", 2220 + mime: "application/x-asar" 2221 + }; 2222 + } 2223 + } catch { 2224 + } 2225 + } 2226 + } 2227 + if (this.check([6, 14, 43, 52, 2, 5, 1, 1, 13, 1, 2, 1, 1, 2])) { 2228 + return { 2229 + ext: "mxf", 2230 + mime: "application/mxf" 2231 + }; 2232 + } 2233 + if (this.checkString("SCRM", { offset: 44 })) { 2234 + return { 2235 + ext: "s3m", 2236 + mime: "audio/x-s3m" 2237 + }; 2238 + } 2239 + if (this.check([71]) && this.check([71], { offset: 188 })) { 2240 + return { 2241 + ext: "mts", 2242 + mime: "video/mp2t" 2243 + }; 2244 + } 2245 + if (this.check([71], { offset: 4 }) && this.check([71], { offset: 196 })) { 2246 + return { 2247 + ext: "mts", 2248 + mime: "video/mp2t" 2249 + }; 2250 + } 2251 + if (this.check([66, 79, 79, 75, 77, 79, 66, 73], { offset: 60 })) { 2252 + return { 2253 + ext: "mobi", 2254 + mime: "application/x-mobipocket-ebook" 2255 + }; 2256 + } 2257 + if (this.check([68, 73, 67, 77], { offset: 128 })) { 2258 + return { 2259 + ext: "dcm", 2260 + mime: "application/dicom" 2261 + }; 2262 + } 2263 + if (this.check([76, 0, 0, 0, 1, 20, 2, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 70])) { 2264 + return { 2265 + ext: "lnk", 2266 + mime: "application/x.ms.shortcut" 2267 + // Invented by us 2268 + }; 2269 + } 2270 + if (this.check([98, 111, 111, 107, 0, 0, 0, 0, 109, 97, 114, 107, 0, 0, 0, 0])) { 2271 + return { 2272 + ext: "alias", 2273 + mime: "application/x.apple.alias" 2274 + // Invented by us 2275 + }; 2276 + } 2277 + if (this.checkString("Kaydara FBX Binary \0")) { 2278 + return { 2279 + ext: "fbx", 2280 + mime: "application/x.autodesk.fbx" 2281 + // Invented by us 2282 + }; 2283 + } 2284 + if (this.check([76, 80], { offset: 34 }) && (this.check([0, 0, 1], { offset: 8 }) || this.check([1, 0, 2], { offset: 8 }) || this.check([2, 0, 2], { offset: 8 }))) { 2285 + return { 2286 + ext: "eot", 2287 + mime: "application/vnd.ms-fontobject" 2288 + }; 2289 + } 2290 + if (this.check([6, 6, 237, 245, 216, 29, 70, 229, 189, 49, 239, 231, 254, 116, 183, 29])) { 2291 + return { 2292 + ext: "indd", 2293 + mime: "application/x-indesign" 2294 + }; 2295 + } 2296 + if (this.check([255, 255, 0, 0, 7, 0, 0, 0, 4, 0, 0, 0, 1, 0, 1, 0]) || this.check([0, 0, 255, 255, 0, 0, 0, 7, 0, 0, 0, 4, 0, 1, 0, 1])) { 2297 + return { 2298 + ext: "jmp", 2299 + mime: "application/x-jmp-data" 2300 + }; 2301 + } 2302 + await tokenizer3.peekBuffer(this.buffer, { length: Math.min(512, tokenizer3.fileInfo.size), mayBeLess: true }); 2303 + if (this.checkString("ustar", { offset: 257 }) && (this.checkString("\0", { offset: 262 }) || this.checkString(" ", { offset: 262 })) || this.check([0, 0, 0, 0, 0, 0], { offset: 257 }) && tarHeaderChecksumMatches(this.buffer)) { 2304 + return { 2305 + ext: "tar", 2306 + mime: "application/x-tar" 2307 + }; 2308 + } 2309 + if (this.check([255, 254])) { 2310 + const encoding = "utf-16le"; 2311 + if (this.checkString("<?xml ", { offset: 2, encoding })) { 2312 + return { 2313 + ext: "xml", 2314 + mime: "application/xml" 2315 + }; 2316 + } 2317 + if (this.check([255, 14], { offset: 2 }) && this.checkString("SketchUp Model", { offset: 4, encoding })) { 2318 + return { 2319 + ext: "skp", 2320 + mime: "application/vnd.sketchup.skp" 2321 + }; 2322 + } 2323 + if (this.checkString("Windows Registry Editor Version 5.00\r\n", { offset: 2, encoding })) { 2324 + return { 2325 + ext: "reg", 2326 + mime: "application/x-ms-regedit" 2327 + }; 2328 + } 2329 + return void 0; 2330 + } 2331 + if (this.checkString("-----BEGIN PGP MESSAGE-----")) { 2332 + return { 2333 + ext: "pgp", 2334 + mime: "application/pgp-encrypted" 2335 + }; 2336 + } 2337 + }, "detectConfident"); 2338 + // Detections with limited supporting data, resulting in a higher likelihood of false positives 2339 + detectImprecise = /* @__PURE__ */ __name(async (tokenizer3) => { 2340 + this.buffer = new Uint8Array(reasonableDetectionSizeInBytes); 2341 + await tokenizer3.peekBuffer(this.buffer, { length: Math.min(8, tokenizer3.fileInfo.size), mayBeLess: true }); 2342 + if (this.check([0, 0, 1, 186]) || this.check([0, 0, 1, 179])) { 2343 + return { 2344 + ext: "mpg", 2345 + mime: "video/mpeg" 2346 + }; 2347 + } 2348 + if (this.check([0, 1, 0, 0, 0])) { 2349 + return { 2350 + ext: "ttf", 2351 + mime: "font/ttf" 2352 + }; 2353 + } 2354 + if (this.check([0, 0, 1, 0])) { 2355 + return { 2356 + ext: "ico", 2357 + mime: "image/x-icon" 2358 + }; 2359 + } 2360 + if (this.check([0, 0, 2, 0])) { 2361 + return { 2362 + ext: "cur", 2363 + mime: "image/x-icon" 2364 + }; 2365 + } 2366 + await tokenizer3.peekBuffer(this.buffer, { length: Math.min(2 + this.options.mpegOffsetTolerance, tokenizer3.fileInfo.size), mayBeLess: true }); 2367 + if (this.buffer.length >= 2 + this.options.mpegOffsetTolerance) { 2368 + for (let depth = 0; depth <= this.options.mpegOffsetTolerance; ++depth) { 2369 + const type = this.scanMpeg(depth); 2370 + if (type) { 2371 + return type; 2372 + } 2373 + } 2374 + } 2375 + }, "detectImprecise"); 2376 + async readTiffTag(bigEndian) { 2377 + const tagId = await this.tokenizer.readToken(bigEndian ? UINT16_BE : UINT16_LE); 2378 + this.tokenizer.ignore(10); 2379 + switch (tagId) { 2380 + case 50341: 2381 + return { 2382 + ext: "arw", 2383 + mime: "image/x-sony-arw" 2384 + }; 2385 + case 50706: 2386 + return { 2387 + ext: "dng", 2388 + mime: "image/x-adobe-dng" 2389 + }; 2390 + default: 2391 + } 2392 + } 2393 + async readTiffIFD(bigEndian) { 2394 + const numberOfTags = await this.tokenizer.readToken(bigEndian ? UINT16_BE : UINT16_LE); 2395 + for (let n = 0; n < numberOfTags; ++n) { 2396 + const fileType = await this.readTiffTag(bigEndian); 2397 + if (fileType) { 2398 + return fileType; 2399 + } 2400 + } 2401 + } 2402 + async readTiffHeader(bigEndian) { 2403 + const version = (bigEndian ? UINT16_BE : UINT16_LE).get(this.buffer, 2); 2404 + const ifdOffset = (bigEndian ? UINT32_BE : UINT32_LE).get(this.buffer, 4); 2405 + if (version === 42) { 2406 + if (ifdOffset >= 6) { 2407 + if (this.checkString("CR", { offset: 8 })) { 2408 + return { 2409 + ext: "cr2", 2410 + mime: "image/x-canon-cr2" 2411 + }; 2412 + } 2413 + if (ifdOffset >= 8) { 2414 + const someId1 = (bigEndian ? UINT16_BE : UINT16_LE).get(this.buffer, 8); 2415 + const someId2 = (bigEndian ? UINT16_BE : UINT16_LE).get(this.buffer, 10); 2416 + if (someId1 === 28 && someId2 === 254 || someId1 === 31 && someId2 === 11) { 2417 + return { 2418 + ext: "nef", 2419 + mime: "image/x-nikon-nef" 2420 + }; 2421 + } 2422 + } 2423 + } 2424 + await this.tokenizer.ignore(ifdOffset); 2425 + const fileType = await this.readTiffIFD(bigEndian); 2426 + return fileType ?? { 2427 + ext: "tif", 2428 + mime: "image/tiff" 2429 + }; 2430 + } 2431 + if (version === 43) { 2432 + return { 2433 + ext: "tif", 2434 + mime: "image/tiff" 2435 + }; 2436 + } 2437 + } 2438 + /** 2439 + Scan check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE). 2440 + 2441 + @param offset - Offset to scan for sync-preamble. 2442 + @returns {{ext: string, mime: string}} 2443 + */ 2444 + scanMpeg(offset) { 2445 + if (this.check([255, 224], { offset, mask: [255, 224] })) { 2446 + if (this.check([16], { offset: offset + 1, mask: [22] })) { 2447 + if (this.check([8], { offset: offset + 1, mask: [8] })) { 2448 + return { 2449 + ext: "aac", 2450 + mime: "audio/aac" 2451 + }; 2452 + } 2453 + return { 2454 + ext: "aac", 2455 + mime: "audio/aac" 2456 + }; 2457 + } 2458 + if (this.check([2], { offset: offset + 1, mask: [6] })) { 2459 + return { 2460 + ext: "mp3", 2461 + mime: "audio/mpeg" 2462 + }; 2463 + } 2464 + if (this.check([4], { offset: offset + 1, mask: [6] })) { 2465 + return { 2466 + ext: "mp2", 2467 + mime: "audio/mpeg" 2468 + }; 2469 + } 2470 + if (this.check([6], { offset: offset + 1, mask: [6] })) { 2471 + return { 2472 + ext: "mp1", 2473 + mime: "audio/mpeg" 2474 + }; 2475 + } 2476 + } 2477 + } 2478 + }; 2479 + var supportedExtensions = new Set(extensions); 2480 + var supportedMimeTypes = new Set(mimeTypes); 2481 + 2482 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/ParserFactory.js 2483 + var import_content_type = __toESM(require_content_type()); 2484 + var import_media_typer = __toESM(require_media_typer()); 2485 + var import_debug3 = __toESM(require_src()); 2486 + 2487 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/MetadataCollector.js 2488 + var import_debug2 = __toESM(require_src()); 2489 + 2490 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/GenericTagTypes.js 2491 + var defaultTagInfo = { 2492 + multiple: false 2493 + }; 2494 + var commonTags = { 2495 + year: defaultTagInfo, 2496 + track: defaultTagInfo, 2497 + disk: defaultTagInfo, 2498 + title: defaultTagInfo, 2499 + artist: defaultTagInfo, 2500 + artists: { multiple: true, unique: true }, 2501 + albumartist: defaultTagInfo, 2502 + album: defaultTagInfo, 2503 + date: defaultTagInfo, 2504 + originaldate: defaultTagInfo, 2505 + originalyear: defaultTagInfo, 2506 + releasedate: defaultTagInfo, 2507 + comment: { multiple: true, unique: false }, 2508 + genre: { multiple: true, unique: true }, 2509 + picture: { multiple: true, unique: true }, 2510 + composer: { multiple: true, unique: true }, 2511 + lyrics: { multiple: true, unique: false }, 2512 + albumsort: { multiple: false, unique: true }, 2513 + titlesort: { multiple: false, unique: true }, 2514 + work: { multiple: false, unique: true }, 2515 + artistsort: { multiple: false, unique: true }, 2516 + albumartistsort: { multiple: false, unique: true }, 2517 + composersort: { multiple: false, unique: true }, 2518 + lyricist: { multiple: true, unique: true }, 2519 + writer: { multiple: true, unique: true }, 2520 + conductor: { multiple: true, unique: true }, 2521 + remixer: { multiple: true, unique: true }, 2522 + arranger: { multiple: true, unique: true }, 2523 + engineer: { multiple: true, unique: true }, 2524 + producer: { multiple: true, unique: true }, 2525 + technician: { multiple: true, unique: true }, 2526 + djmixer: { multiple: true, unique: true }, 2527 + mixer: { multiple: true, unique: true }, 2528 + label: { multiple: true, unique: true }, 2529 + grouping: defaultTagInfo, 2530 + subtitle: { multiple: true }, 2531 + discsubtitle: defaultTagInfo, 2532 + totaltracks: defaultTagInfo, 2533 + totaldiscs: defaultTagInfo, 2534 + compilation: defaultTagInfo, 2535 + rating: { multiple: true }, 2536 + bpm: defaultTagInfo, 2537 + mood: defaultTagInfo, 2538 + media: defaultTagInfo, 2539 + catalognumber: { multiple: true, unique: true }, 2540 + tvShow: defaultTagInfo, 2541 + tvShowSort: defaultTagInfo, 2542 + tvSeason: defaultTagInfo, 2543 + tvEpisode: defaultTagInfo, 2544 + tvEpisodeId: defaultTagInfo, 2545 + tvNetwork: defaultTagInfo, 2546 + podcast: defaultTagInfo, 2547 + podcasturl: defaultTagInfo, 2548 + releasestatus: defaultTagInfo, 2549 + releasetype: { multiple: true }, 2550 + releasecountry: defaultTagInfo, 2551 + script: defaultTagInfo, 2552 + language: defaultTagInfo, 2553 + copyright: defaultTagInfo, 2554 + license: defaultTagInfo, 2555 + encodedby: defaultTagInfo, 2556 + encodersettings: defaultTagInfo, 2557 + gapless: defaultTagInfo, 2558 + barcode: defaultTagInfo, 2559 + isrc: { multiple: true }, 2560 + asin: defaultTagInfo, 2561 + musicbrainz_recordingid: defaultTagInfo, 2562 + musicbrainz_trackid: defaultTagInfo, 2563 + musicbrainz_albumid: defaultTagInfo, 2564 + musicbrainz_artistid: { multiple: true }, 2565 + musicbrainz_albumartistid: { multiple: true }, 2566 + musicbrainz_releasegroupid: defaultTagInfo, 2567 + musicbrainz_workid: defaultTagInfo, 2568 + musicbrainz_trmid: defaultTagInfo, 2569 + musicbrainz_discid: defaultTagInfo, 2570 + acoustid_id: defaultTagInfo, 2571 + acoustid_fingerprint: defaultTagInfo, 2572 + musicip_puid: defaultTagInfo, 2573 + musicip_fingerprint: defaultTagInfo, 2574 + website: defaultTagInfo, 2575 + "performer:instrument": { multiple: true, unique: true }, 2576 + averageLevel: defaultTagInfo, 2577 + peakLevel: defaultTagInfo, 2578 + notes: { multiple: true, unique: false }, 2579 + key: defaultTagInfo, 2580 + originalalbum: defaultTagInfo, 2581 + originalartist: defaultTagInfo, 2582 + discogs_artist_id: { multiple: true, unique: true }, 2583 + discogs_release_id: defaultTagInfo, 2584 + discogs_label_id: defaultTagInfo, 2585 + discogs_master_release_id: defaultTagInfo, 2586 + discogs_votes: defaultTagInfo, 2587 + discogs_rating: defaultTagInfo, 2588 + replaygain_track_peak: defaultTagInfo, 2589 + replaygain_track_gain: defaultTagInfo, 2590 + replaygain_album_peak: defaultTagInfo, 2591 + replaygain_album_gain: defaultTagInfo, 2592 + replaygain_track_minmax: defaultTagInfo, 2593 + replaygain_album_minmax: defaultTagInfo, 2594 + replaygain_undo: defaultTagInfo, 2595 + description: { multiple: true }, 2596 + longDescription: defaultTagInfo, 2597 + category: { multiple: true }, 2598 + hdVideo: defaultTagInfo, 2599 + keywords: { multiple: true }, 2600 + movement: defaultTagInfo, 2601 + movementIndex: defaultTagInfo, 2602 + movementTotal: defaultTagInfo, 2603 + podcastId: defaultTagInfo, 2604 + showMovement: defaultTagInfo, 2605 + stik: defaultTagInfo, 2606 + playCounter: defaultTagInfo 2607 + }; 2608 + function isSingleton(alias) { 2609 + return commonTags[alias] && !commonTags[alias].multiple; 2610 + } 2611 + __name(isSingleton, "isSingleton"); 2612 + function isUnique(alias) { 2613 + return !commonTags[alias].multiple || commonTags[alias].unique || false; 2614 + } 2615 + __name(isUnique, "isUnique"); 2616 + 2617 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/GenericTagMapper.js 2618 + var CommonTagMapper = class { 2619 + static { 2620 + __name(this, "CommonTagMapper"); 2621 + } 2622 + static toIntOrNull(str) { 2623 + const cleaned = Number.parseInt(str, 10); 2624 + return Number.isNaN(cleaned) ? null : cleaned; 2625 + } 2626 + // TODO: a string of 1of1 would fail to be converted 2627 + // converts 1/10 to no : 1, of : 10 2628 + // or 1 to no : 1, of : 0 2629 + static normalizeTrack(origVal) { 2630 + const split = origVal.toString().split("/"); 2631 + return { 2632 + no: Number.parseInt(split[0], 10) || null, 2633 + of: Number.parseInt(split[1], 10) || null 2634 + }; 2635 + } 2636 + constructor(tagTypes, tagMap2) { 2637 + this.tagTypes = tagTypes; 2638 + this.tagMap = tagMap2; 2639 + } 2640 + /** 2641 + * Process and set common tags 2642 + * write common tags to 2643 + * @param tag Native tag 2644 + * @param warnings Register warnings 2645 + * @return common name 2646 + */ 2647 + mapGenericTag(tag, warnings) { 2648 + tag = { id: tag.id, value: tag.value }; 2649 + this.postMap(tag, warnings); 2650 + const id = this.getCommonName(tag.id); 2651 + return id ? { id, value: tag.value } : null; 2652 + } 2653 + /** 2654 + * Convert native tag key to common tag key 2655 + * @param tag Native header tag 2656 + * @return common tag name (alias) 2657 + */ 2658 + getCommonName(tag) { 2659 + return this.tagMap[tag]; 2660 + } 2661 + /** 2662 + * Handle post mapping exceptions / correction 2663 + * @param tag Tag e.g. {"©alb", "Buena Vista Social Club") 2664 + * @param warnings Used to register warnings 2665 + */ 2666 + postMap(_tag, _warnings) { 2667 + return; 2668 + } 2669 + }; 2670 + CommonTagMapper.maxRatingScore = 1; 2671 + 2672 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/id3v1/ID3v1TagMap.js 2673 + var id3v1TagMap = { 2674 + title: "title", 2675 + artist: "artist", 2676 + album: "album", 2677 + year: "year", 2678 + comment: "comment", 2679 + track: "track", 2680 + genre: "genre" 2681 + }; 2682 + var ID3v1TagMapper = class extends CommonTagMapper { 2683 + static { 2684 + __name(this, "ID3v1TagMapper"); 2685 + } 2686 + constructor() { 2687 + super(["ID3v1"], id3v1TagMap); 2688 + } 2689 + }; 2690 + 2691 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/CaseInsensitiveTagMap.js 2692 + var CaseInsensitiveTagMap = class extends CommonTagMapper { 2693 + static { 2694 + __name(this, "CaseInsensitiveTagMap"); 2695 + } 2696 + constructor(tagTypes, tagMap2) { 2697 + const upperCaseMap = {}; 2698 + for (const tag of Object.keys(tagMap2)) { 2699 + upperCaseMap[tag.toUpperCase()] = tagMap2[tag]; 2700 + } 2701 + super(tagTypes, upperCaseMap); 2702 + } 2703 + /** 2704 + * @tag Native header tag 2705 + * @return common tag name (alias) 2706 + */ 2707 + getCommonName(tag) { 2708 + return this.tagMap[tag.toUpperCase()]; 2709 + } 2710 + }; 2711 + 2712 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/id3v2/ID3v24TagMapper.js 2713 + var id3v24TagMap = { 2714 + // id3v2.3 2715 + TIT2: "title", 2716 + TPE1: "artist", 2717 + "TXXX:Artists": "artists", 2718 + TPE2: "albumartist", 2719 + TALB: "album", 2720 + TDRV: "date", 2721 + // [ 'date', 'year' ] ToDo: improve 'year' mapping 2722 + /** 2723 + * Original release year 2724 + */ 2725 + TORY: "originalyear", 2726 + TPOS: "disk", 2727 + TCON: "genre", 2728 + APIC: "picture", 2729 + TCOM: "composer", 2730 + USLT: "lyrics", 2731 + TSOA: "albumsort", 2732 + TSOT: "titlesort", 2733 + TOAL: "originalalbum", 2734 + TSOP: "artistsort", 2735 + TSO2: "albumartistsort", 2736 + TSOC: "composersort", 2737 + TEXT: "lyricist", 2738 + "TXXX:Writer": "writer", 2739 + TPE3: "conductor", 2740 + // 'IPLS:instrument': 'performer:instrument', // ToDo 2741 + TPE4: "remixer", 2742 + "IPLS:arranger": "arranger", 2743 + "IPLS:engineer": "engineer", 2744 + "IPLS:producer": "producer", 2745 + "IPLS:DJ-mix": "djmixer", 2746 + "IPLS:mix": "mixer", 2747 + TPUB: "label", 2748 + TIT1: "grouping", 2749 + TIT3: "subtitle", 2750 + TRCK: "track", 2751 + TCMP: "compilation", 2752 + POPM: "rating", 2753 + TBPM: "bpm", 2754 + TMED: "media", 2755 + "TXXX:CATALOGNUMBER": "catalognumber", 2756 + "TXXX:MusicBrainz Album Status": "releasestatus", 2757 + "TXXX:MusicBrainz Album Type": "releasetype", 2758 + /** 2759 + * Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0 2760 + */ 2761 + "TXXX:MusicBrainz Album Release Country": "releasecountry", 2762 + /** 2763 + * Release country as implemented // ToDo: report 2764 + */ 2765 + "TXXX:RELEASECOUNTRY": "releasecountry", 2766 + "TXXX:SCRIPT": "script", 2767 + TLAN: "language", 2768 + TCOP: "copyright", 2769 + WCOP: "license", 2770 + TENC: "encodedby", 2771 + TSSE: "encodersettings", 2772 + "TXXX:BARCODE": "barcode", 2773 + "TXXX:ISRC": "isrc", 2774 + TSRC: "isrc", 2775 + "TXXX:ASIN": "asin", 2776 + "TXXX:originalyear": "originalyear", 2777 + "UFID:http://musicbrainz.org": "musicbrainz_recordingid", 2778 + "TXXX:MusicBrainz Release Track Id": "musicbrainz_trackid", 2779 + "TXXX:MusicBrainz Album Id": "musicbrainz_albumid", 2780 + "TXXX:MusicBrainz Artist Id": "musicbrainz_artistid", 2781 + "TXXX:MusicBrainz Album Artist Id": "musicbrainz_albumartistid", 2782 + "TXXX:MusicBrainz Release Group Id": "musicbrainz_releasegroupid", 2783 + "TXXX:MusicBrainz Work Id": "musicbrainz_workid", 2784 + "TXXX:MusicBrainz TRM Id": "musicbrainz_trmid", 2785 + "TXXX:MusicBrainz Disc Id": "musicbrainz_discid", 2786 + "TXXX:ACOUSTID_ID": "acoustid_id", 2787 + "TXXX:Acoustid Id": "acoustid_id", 2788 + "TXXX:Acoustid Fingerprint": "acoustid_fingerprint", 2789 + "TXXX:MusicIP PUID": "musicip_puid", 2790 + "TXXX:MusicMagic Fingerprint": "musicip_fingerprint", 2791 + WOAR: "website", 2792 + // id3v2.4 2793 + // ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames 2794 + TDRC: "date", 2795 + // date YYYY-MM-DD 2796 + TYER: "year", 2797 + TDOR: "originaldate", 2798 + // 'TMCL:instrument': 'performer:instrument', 2799 + "TIPL:arranger": "arranger", 2800 + "TIPL:engineer": "engineer", 2801 + "TIPL:producer": "producer", 2802 + "TIPL:DJ-mix": "djmixer", 2803 + "TIPL:mix": "mixer", 2804 + TMOO: "mood", 2805 + // additional mappings: 2806 + SYLT: "lyrics", 2807 + TSST: "discsubtitle", 2808 + TKEY: "key", 2809 + COMM: "comment", 2810 + TOPE: "originalartist", 2811 + // Windows Media Player 2812 + "PRIV:AverageLevel": "averageLevel", 2813 + "PRIV:PeakLevel": "peakLevel", 2814 + // Discogs 2815 + "TXXX:DISCOGS_ARTIST_ID": "discogs_artist_id", 2816 + "TXXX:DISCOGS_ARTISTS": "artists", 2817 + "TXXX:DISCOGS_ARTIST_NAME": "artists", 2818 + "TXXX:DISCOGS_ALBUM_ARTISTS": "albumartist", 2819 + "TXXX:DISCOGS_CATALOG": "catalognumber", 2820 + "TXXX:DISCOGS_COUNTRY": "releasecountry", 2821 + "TXXX:DISCOGS_DATE": "originaldate", 2822 + "TXXX:DISCOGS_LABEL": "label", 2823 + "TXXX:DISCOGS_LABEL_ID": "discogs_label_id", 2824 + "TXXX:DISCOGS_MASTER_RELEASE_ID": "discogs_master_release_id", 2825 + "TXXX:DISCOGS_RATING": "discogs_rating", 2826 + "TXXX:DISCOGS_RELEASED": "date", 2827 + "TXXX:DISCOGS_RELEASE_ID": "discogs_release_id", 2828 + "TXXX:DISCOGS_VOTES": "discogs_votes", 2829 + "TXXX:CATALOGID": "catalognumber", 2830 + "TXXX:STYLE": "genre", 2831 + "TXXX:REPLAYGAIN_TRACK_PEAK": "replaygain_track_peak", 2832 + "TXXX:REPLAYGAIN_TRACK_GAIN": "replaygain_track_gain", 2833 + "TXXX:REPLAYGAIN_ALBUM_PEAK": "replaygain_album_peak", 2834 + "TXXX:REPLAYGAIN_ALBUM_GAIN": "replaygain_album_gain", 2835 + "TXXX:MP3GAIN_MINMAX": "replaygain_track_minmax", 2836 + "TXXX:MP3GAIN_ALBUM_MINMAX": "replaygain_album_minmax", 2837 + "TXXX:MP3GAIN_UNDO": "replaygain_undo", 2838 + MVNM: "movement", 2839 + MVIN: "movementIndex", 2840 + PCST: "podcast", 2841 + TCAT: "category", 2842 + TDES: "description", 2843 + TDRL: "releasedate", 2844 + TGID: "podcastId", 2845 + TKWD: "keywords", 2846 + WFED: "podcasturl", 2847 + GRP1: "grouping", 2848 + PCNT: "playCounter" 2849 + }; 2850 + var ID3v24TagMapper = class _ID3v24TagMapper extends CaseInsensitiveTagMap { 2851 + static { 2852 + __name(this, "ID3v24TagMapper"); 2853 + } 2854 + static toRating(popm) { 2855 + return { 2856 + source: popm.email, 2857 + rating: popm.rating > 0 ? (popm.rating - 1) / 254 * CommonTagMapper.maxRatingScore : void 0 2858 + }; 2859 + } 2860 + constructor() { 2861 + super(["ID3v2.3", "ID3v2.4"], id3v24TagMap); 2862 + } 2863 + /** 2864 + * Handle post mapping exceptions / correction 2865 + * @param tag to post map 2866 + * @param warnings Wil be used to register (collect) warnings 2867 + */ 2868 + postMap(tag, warnings) { 2869 + switch (tag.id) { 2870 + case "UFID": 2871 + { 2872 + const idTag = tag.value; 2873 + if (idTag.owner_identifier === "http://musicbrainz.org") { 2874 + tag.id += `:${idTag.owner_identifier}`; 2875 + tag.value = decodeString(idTag.identifier, "latin1"); 2876 + } 2877 + } 2878 + break; 2879 + case "PRIV": 2880 + { 2881 + const customTag = tag.value; 2882 + switch (customTag.owner_identifier) { 2883 + // decode Windows Media Player 2884 + case "AverageLevel": 2885 + case "PeakValue": 2886 + tag.id += `:${customTag.owner_identifier}`; 2887 + tag.value = customTag.data.length === 4 ? UINT32_LE.get(customTag.data, 0) : null; 2888 + if (tag.value === null) { 2889 + warnings.addWarning("Failed to parse PRIV:PeakValue"); 2890 + } 2891 + break; 2892 + default: 2893 + warnings.addWarning(`Unknown PRIV owner-identifier: ${customTag.data}`); 2894 + } 2895 + } 2896 + break; 2897 + case "POPM": 2898 + tag.value = _ID3v24TagMapper.toRating(tag.value); 2899 + break; 2900 + default: 2901 + break; 2902 + } 2903 + } 2904 + }; 2905 + 2906 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfTagMapper.js 2907 + var asfTagMap = { 2908 + Title: "title", 2909 + Author: "artist", 2910 + "WM/AlbumArtist": "albumartist", 2911 + "WM/AlbumTitle": "album", 2912 + "WM/Year": "date", 2913 + // changed to 'year' to 'date' based on Picard mappings; ToDo: check me 2914 + "WM/OriginalReleaseTime": "originaldate", 2915 + "WM/OriginalReleaseYear": "originalyear", 2916 + Description: "comment", 2917 + "WM/TrackNumber": "track", 2918 + "WM/PartOfSet": "disk", 2919 + "WM/Genre": "genre", 2920 + "WM/Composer": "composer", 2921 + "WM/Lyrics": "lyrics", 2922 + "WM/AlbumSortOrder": "albumsort", 2923 + "WM/TitleSortOrder": "titlesort", 2924 + "WM/ArtistSortOrder": "artistsort", 2925 + "WM/AlbumArtistSortOrder": "albumartistsort", 2926 + "WM/ComposerSortOrder": "composersort", 2927 + "WM/Writer": "lyricist", 2928 + "WM/Conductor": "conductor", 2929 + "WM/ModifiedBy": "remixer", 2930 + "WM/Engineer": "engineer", 2931 + "WM/Producer": "producer", 2932 + "WM/DJMixer": "djmixer", 2933 + "WM/Mixer": "mixer", 2934 + "WM/Publisher": "label", 2935 + "WM/ContentGroupDescription": "grouping", 2936 + "WM/SubTitle": "subtitle", 2937 + "WM/SetSubTitle": "discsubtitle", 2938 + // 'WM/PartOfSet': 'totaldiscs', 2939 + "WM/IsCompilation": "compilation", 2940 + "WM/SharedUserRating": "rating", 2941 + "WM/BeatsPerMinute": "bpm", 2942 + "WM/Mood": "mood", 2943 + "WM/Media": "media", 2944 + "WM/CatalogNo": "catalognumber", 2945 + "MusicBrainz/Album Status": "releasestatus", 2946 + "MusicBrainz/Album Type": "releasetype", 2947 + "MusicBrainz/Album Release Country": "releasecountry", 2948 + "WM/Script": "script", 2949 + "WM/Language": "language", 2950 + Copyright: "copyright", 2951 + LICENSE: "license", 2952 + "WM/EncodedBy": "encodedby", 2953 + "WM/EncodingSettings": "encodersettings", 2954 + "WM/Barcode": "barcode", 2955 + "WM/ISRC": "isrc", 2956 + "MusicBrainz/Track Id": "musicbrainz_recordingid", 2957 + "MusicBrainz/Release Track Id": "musicbrainz_trackid", 2958 + "MusicBrainz/Album Id": "musicbrainz_albumid", 2959 + "MusicBrainz/Artist Id": "musicbrainz_artistid", 2960 + "MusicBrainz/Album Artist Id": "musicbrainz_albumartistid", 2961 + "MusicBrainz/Release Group Id": "musicbrainz_releasegroupid", 2962 + "MusicBrainz/Work Id": "musicbrainz_workid", 2963 + "MusicBrainz/TRM Id": "musicbrainz_trmid", 2964 + "MusicBrainz/Disc Id": "musicbrainz_discid", 2965 + "Acoustid/Id": "acoustid_id", 2966 + "Acoustid/Fingerprint": "acoustid_fingerprint", 2967 + "MusicIP/PUID": "musicip_puid", 2968 + "WM/ARTISTS": "artists", 2969 + "WM/InitialKey": "key", 2970 + ASIN: "asin", 2971 + "WM/Work": "work", 2972 + "WM/AuthorURL": "website", 2973 + "WM/Picture": "picture" 2974 + }; 2975 + var AsfTagMapper = class _AsfTagMapper extends CommonTagMapper { 2976 + static { 2977 + __name(this, "AsfTagMapper"); 2978 + } 2979 + static toRating(rating) { 2980 + return { 2981 + rating: Number.parseFloat(rating + 1) / 5 2982 + }; 2983 + } 2984 + constructor() { 2985 + super(["asf"], asfTagMap); 2986 + } 2987 + postMap(tag) { 2988 + switch (tag.id) { 2989 + case "WM/SharedUserRating": { 2990 + const keys = tag.id.split(":"); 2991 + tag.value = _AsfTagMapper.toRating(tag.value); 2992 + tag.id = keys[0]; 2993 + break; 2994 + } 2995 + } 2996 + } 2997 + }; 2998 + 2999 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/id3v2/ID3v22TagMapper.js 3000 + var id3v22TagMap = { 3001 + TT2: "title", 3002 + TP1: "artist", 3003 + TP2: "albumartist", 3004 + TAL: "album", 3005 + TYE: "year", 3006 + COM: "comment", 3007 + TRK: "track", 3008 + TPA: "disk", 3009 + TCO: "genre", 3010 + PIC: "picture", 3011 + TCM: "composer", 3012 + TOR: "originaldate", 3013 + TOT: "originalalbum", 3014 + TXT: "lyricist", 3015 + TP3: "conductor", 3016 + TPB: "label", 3017 + TT1: "grouping", 3018 + TT3: "subtitle", 3019 + TLA: "language", 3020 + TCR: "copyright", 3021 + WCP: "license", 3022 + TEN: "encodedby", 3023 + TSS: "encodersettings", 3024 + WAR: "website", 3025 + PCS: "podcast", 3026 + TCP: "compilation", 3027 + TDR: "date", 3028 + TS2: "albumartistsort", 3029 + TSA: "albumsort", 3030 + TSC: "composersort", 3031 + TSP: "artistsort", 3032 + TST: "titlesort", 3033 + WFD: "podcasturl", 3034 + TBP: "bpm" 3035 + }; 3036 + var ID3v22TagMapper = class extends CaseInsensitiveTagMap { 3037 + static { 3038 + __name(this, "ID3v22TagMapper"); 3039 + } 3040 + constructor() { 3041 + super(["ID3v2.2"], id3v22TagMap); 3042 + } 3043 + }; 3044 + 3045 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/apev2/APEv2TagMapper.js 3046 + var apev2TagMap = { 3047 + Title: "title", 3048 + Artist: "artist", 3049 + Artists: "artists", 3050 + "Album Artist": "albumartist", 3051 + Album: "album", 3052 + Year: "date", 3053 + Originalyear: "originalyear", 3054 + Originaldate: "originaldate", 3055 + Releasedate: "releasedate", 3056 + Comment: "comment", 3057 + Track: "track", 3058 + Disc: "disk", 3059 + DISCNUMBER: "disk", 3060 + // ToDo: backwards compatibility', valid tag? 3061 + Genre: "genre", 3062 + "Cover Art (Front)": "picture", 3063 + "Cover Art (Back)": "picture", 3064 + Composer: "composer", 3065 + Lyrics: "lyrics", 3066 + ALBUMSORT: "albumsort", 3067 + TITLESORT: "titlesort", 3068 + WORK: "work", 3069 + ARTISTSORT: "artistsort", 3070 + ALBUMARTISTSORT: "albumartistsort", 3071 + COMPOSERSORT: "composersort", 3072 + Lyricist: "lyricist", 3073 + Writer: "writer", 3074 + Conductor: "conductor", 3075 + // 'Performer=artist (instrument)': 'performer:instrument', 3076 + MixArtist: "remixer", 3077 + Arranger: "arranger", 3078 + Engineer: "engineer", 3079 + Producer: "producer", 3080 + DJMixer: "djmixer", 3081 + Mixer: "mixer", 3082 + Label: "label", 3083 + Grouping: "grouping", 3084 + Subtitle: "subtitle", 3085 + DiscSubtitle: "discsubtitle", 3086 + Compilation: "compilation", 3087 + BPM: "bpm", 3088 + Mood: "mood", 3089 + Media: "media", 3090 + CatalogNumber: "catalognumber", 3091 + MUSICBRAINZ_ALBUMSTATUS: "releasestatus", 3092 + MUSICBRAINZ_ALBUMTYPE: "releasetype", 3093 + RELEASECOUNTRY: "releasecountry", 3094 + Script: "script", 3095 + Language: "language", 3096 + Copyright: "copyright", 3097 + LICENSE: "license", 3098 + EncodedBy: "encodedby", 3099 + EncoderSettings: "encodersettings", 3100 + Barcode: "barcode", 3101 + ISRC: "isrc", 3102 + ASIN: "asin", 3103 + musicbrainz_trackid: "musicbrainz_recordingid", 3104 + musicbrainz_releasetrackid: "musicbrainz_trackid", 3105 + MUSICBRAINZ_ALBUMID: "musicbrainz_albumid", 3106 + MUSICBRAINZ_ARTISTID: "musicbrainz_artistid", 3107 + MUSICBRAINZ_ALBUMARTISTID: "musicbrainz_albumartistid", 3108 + MUSICBRAINZ_RELEASEGROUPID: "musicbrainz_releasegroupid", 3109 + MUSICBRAINZ_WORKID: "musicbrainz_workid", 3110 + MUSICBRAINZ_TRMID: "musicbrainz_trmid", 3111 + MUSICBRAINZ_DISCID: "musicbrainz_discid", 3112 + Acoustid_Id: "acoustid_id", 3113 + ACOUSTID_FINGERPRINT: "acoustid_fingerprint", 3114 + MUSICIP_PUID: "musicip_puid", 3115 + Weblink: "website", 3116 + REPLAYGAIN_TRACK_GAIN: "replaygain_track_gain", 3117 + REPLAYGAIN_TRACK_PEAK: "replaygain_track_peak", 3118 + MP3GAIN_MINMAX: "replaygain_track_minmax", 3119 + MP3GAIN_UNDO: "replaygain_undo" 3120 + }; 3121 + var APEv2TagMapper = class extends CaseInsensitiveTagMap { 3122 + static { 3123 + __name(this, "APEv2TagMapper"); 3124 + } 3125 + constructor() { 3126 + super(["APEv2"], apev2TagMap); 3127 + } 3128 + }; 3129 + 3130 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/MP4TagMapper.js 3131 + var mp4TagMap = { 3132 + "\xA9nam": "title", 3133 + "\xA9ART": "artist", 3134 + aART: "albumartist", 3135 + /** 3136 + * ToDo: Album artist seems to be stored here while Picard documentation says: aART 3137 + */ 3138 + "----:com.apple.iTunes:Band": "albumartist", 3139 + "\xA9alb": "album", 3140 + "\xA9day": "date", 3141 + "\xA9cmt": "comment", 3142 + "\xA9com": "comment", 3143 + trkn: "track", 3144 + disk: "disk", 3145 + "\xA9gen": "genre", 3146 + covr: "picture", 3147 + "\xA9wrt": "composer", 3148 + "\xA9lyr": "lyrics", 3149 + soal: "albumsort", 3150 + sonm: "titlesort", 3151 + soar: "artistsort", 3152 + soaa: "albumartistsort", 3153 + soco: "composersort", 3154 + "----:com.apple.iTunes:LYRICIST": "lyricist", 3155 + "----:com.apple.iTunes:CONDUCTOR": "conductor", 3156 + "----:com.apple.iTunes:REMIXER": "remixer", 3157 + "----:com.apple.iTunes:ENGINEER": "engineer", 3158 + "----:com.apple.iTunes:PRODUCER": "producer", 3159 + "----:com.apple.iTunes:DJMIXER": "djmixer", 3160 + "----:com.apple.iTunes:MIXER": "mixer", 3161 + "----:com.apple.iTunes:LABEL": "label", 3162 + "\xA9grp": "grouping", 3163 + "----:com.apple.iTunes:SUBTITLE": "subtitle", 3164 + "----:com.apple.iTunes:DISCSUBTITLE": "discsubtitle", 3165 + cpil: "compilation", 3166 + tmpo: "bpm", 3167 + "----:com.apple.iTunes:MOOD": "mood", 3168 + "----:com.apple.iTunes:MEDIA": "media", 3169 + "----:com.apple.iTunes:CATALOGNUMBER": "catalognumber", 3170 + tvsh: "tvShow", 3171 + tvsn: "tvSeason", 3172 + tves: "tvEpisode", 3173 + sosn: "tvShowSort", 3174 + tven: "tvEpisodeId", 3175 + tvnn: "tvNetwork", 3176 + pcst: "podcast", 3177 + purl: "podcasturl", 3178 + "----:com.apple.iTunes:MusicBrainz Album Status": "releasestatus", 3179 + "----:com.apple.iTunes:MusicBrainz Album Type": "releasetype", 3180 + "----:com.apple.iTunes:MusicBrainz Album Release Country": "releasecountry", 3181 + "----:com.apple.iTunes:SCRIPT": "script", 3182 + "----:com.apple.iTunes:LANGUAGE": "language", 3183 + cprt: "copyright", 3184 + "\xA9cpy": "copyright", 3185 + "----:com.apple.iTunes:LICENSE": "license", 3186 + "\xA9too": "encodedby", 3187 + pgap: "gapless", 3188 + "----:com.apple.iTunes:BARCODE": "barcode", 3189 + "----:com.apple.iTunes:ISRC": "isrc", 3190 + "----:com.apple.iTunes:ASIN": "asin", 3191 + "----:com.apple.iTunes:NOTES": "comment", 3192 + "----:com.apple.iTunes:MusicBrainz Track Id": "musicbrainz_recordingid", 3193 + "----:com.apple.iTunes:MusicBrainz Release Track Id": "musicbrainz_trackid", 3194 + "----:com.apple.iTunes:MusicBrainz Album Id": "musicbrainz_albumid", 3195 + "----:com.apple.iTunes:MusicBrainz Artist Id": "musicbrainz_artistid", 3196 + "----:com.apple.iTunes:MusicBrainz Album Artist Id": "musicbrainz_albumartistid", 3197 + "----:com.apple.iTunes:MusicBrainz Release Group Id": "musicbrainz_releasegroupid", 3198 + "----:com.apple.iTunes:MusicBrainz Work Id": "musicbrainz_workid", 3199 + "----:com.apple.iTunes:MusicBrainz TRM Id": "musicbrainz_trmid", 3200 + "----:com.apple.iTunes:MusicBrainz Disc Id": "musicbrainz_discid", 3201 + "----:com.apple.iTunes:Acoustid Id": "acoustid_id", 3202 + "----:com.apple.iTunes:Acoustid Fingerprint": "acoustid_fingerprint", 3203 + "----:com.apple.iTunes:MusicIP PUID": "musicip_puid", 3204 + "----:com.apple.iTunes:fingerprint": "musicip_fingerprint", 3205 + "----:com.apple.iTunes:replaygain_track_gain": "replaygain_track_gain", 3206 + "----:com.apple.iTunes:replaygain_track_peak": "replaygain_track_peak", 3207 + "----:com.apple.iTunes:replaygain_album_gain": "replaygain_album_gain", 3208 + "----:com.apple.iTunes:replaygain_album_peak": "replaygain_album_peak", 3209 + "----:com.apple.iTunes:replaygain_track_minmax": "replaygain_track_minmax", 3210 + "----:com.apple.iTunes:replaygain_album_minmax": "replaygain_album_minmax", 3211 + "----:com.apple.iTunes:replaygain_undo": "replaygain_undo", 3212 + // Additional mappings: 3213 + gnre: "genre", 3214 + // ToDo: check mapping 3215 + "----:com.apple.iTunes:ALBUMARTISTSORT": "albumartistsort", 3216 + "----:com.apple.iTunes:ARTISTS": "artists", 3217 + "----:com.apple.iTunes:ORIGINALDATE": "originaldate", 3218 + "----:com.apple.iTunes:ORIGINALYEAR": "originalyear", 3219 + "----:com.apple.iTunes:RELEASEDATE": "releasedate", 3220 + // '----:com.apple.iTunes:PERFORMER': 'performer' 3221 + desc: "description", 3222 + ldes: "longDescription", 3223 + "\xA9mvn": "movement", 3224 + "\xA9mvi": "movementIndex", 3225 + "\xA9mvc": "movementTotal", 3226 + "\xA9wrk": "work", 3227 + catg: "category", 3228 + egid: "podcastId", 3229 + hdvd: "hdVideo", 3230 + keyw: "keywords", 3231 + shwm: "showMovement", 3232 + stik: "stik", 3233 + rate: "rating" 3234 + }; 3235 + var tagType = "iTunes"; 3236 + var MP4TagMapper = class extends CaseInsensitiveTagMap { 3237 + static { 3238 + __name(this, "MP4TagMapper"); 3239 + } 3240 + constructor() { 3241 + super([tagType], mp4TagMap); 3242 + } 3243 + postMap(tag, _warnings) { 3244 + switch (tag.id) { 3245 + case "rate": 3246 + tag.value = { 3247 + source: void 0, 3248 + rating: Number.parseFloat(tag.value) / 100 3249 + }; 3250 + break; 3251 + } 3252 + } 3253 + }; 3254 + 3255 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/ogg/vorbis/VorbisTagMapper.js 3256 + var vorbisTagMap = { 3257 + TITLE: "title", 3258 + ARTIST: "artist", 3259 + ARTISTS: "artists", 3260 + ALBUMARTIST: "albumartist", 3261 + "ALBUM ARTIST": "albumartist", 3262 + ALBUM: "album", 3263 + DATE: "date", 3264 + ORIGINALDATE: "originaldate", 3265 + ORIGINALYEAR: "originalyear", 3266 + RELEASEDATE: "releasedate", 3267 + COMMENT: "comment", 3268 + TRACKNUMBER: "track", 3269 + DISCNUMBER: "disk", 3270 + GENRE: "genre", 3271 + METADATA_BLOCK_PICTURE: "picture", 3272 + COMPOSER: "composer", 3273 + LYRICS: "lyrics", 3274 + ALBUMSORT: "albumsort", 3275 + TITLESORT: "titlesort", 3276 + WORK: "work", 3277 + ARTISTSORT: "artistsort", 3278 + ALBUMARTISTSORT: "albumartistsort", 3279 + COMPOSERSORT: "composersort", 3280 + LYRICIST: "lyricist", 3281 + WRITER: "writer", 3282 + CONDUCTOR: "conductor", 3283 + // 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo 3284 + REMIXER: "remixer", 3285 + ARRANGER: "arranger", 3286 + ENGINEER: "engineer", 3287 + PRODUCER: "producer", 3288 + DJMIXER: "djmixer", 3289 + MIXER: "mixer", 3290 + LABEL: "label", 3291 + GROUPING: "grouping", 3292 + SUBTITLE: "subtitle", 3293 + DISCSUBTITLE: "discsubtitle", 3294 + TRACKTOTAL: "totaltracks", 3295 + DISCTOTAL: "totaldiscs", 3296 + COMPILATION: "compilation", 3297 + RATING: "rating", 3298 + BPM: "bpm", 3299 + KEY: "key", 3300 + MOOD: "mood", 3301 + MEDIA: "media", 3302 + CATALOGNUMBER: "catalognumber", 3303 + RELEASESTATUS: "releasestatus", 3304 + RELEASETYPE: "releasetype", 3305 + RELEASECOUNTRY: "releasecountry", 3306 + SCRIPT: "script", 3307 + LANGUAGE: "language", 3308 + COPYRIGHT: "copyright", 3309 + LICENSE: "license", 3310 + ENCODEDBY: "encodedby", 3311 + ENCODERSETTINGS: "encodersettings", 3312 + BARCODE: "barcode", 3313 + ISRC: "isrc", 3314 + ASIN: "asin", 3315 + MUSICBRAINZ_TRACKID: "musicbrainz_recordingid", 3316 + MUSICBRAINZ_RELEASETRACKID: "musicbrainz_trackid", 3317 + MUSICBRAINZ_ALBUMID: "musicbrainz_albumid", 3318 + MUSICBRAINZ_ARTISTID: "musicbrainz_artistid", 3319 + MUSICBRAINZ_ALBUMARTISTID: "musicbrainz_albumartistid", 3320 + MUSICBRAINZ_RELEASEGROUPID: "musicbrainz_releasegroupid", 3321 + MUSICBRAINZ_WORKID: "musicbrainz_workid", 3322 + MUSICBRAINZ_TRMID: "musicbrainz_trmid", 3323 + MUSICBRAINZ_DISCID: "musicbrainz_discid", 3324 + ACOUSTID_ID: "acoustid_id", 3325 + ACOUSTID_ID_FINGERPRINT: "acoustid_fingerprint", 3326 + MUSICIP_PUID: "musicip_puid", 3327 + // 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo 3328 + WEBSITE: "website", 3329 + NOTES: "notes", 3330 + TOTALTRACKS: "totaltracks", 3331 + TOTALDISCS: "totaldiscs", 3332 + // Discogs 3333 + DISCOGS_ARTIST_ID: "discogs_artist_id", 3334 + DISCOGS_ARTISTS: "artists", 3335 + DISCOGS_ARTIST_NAME: "artists", 3336 + DISCOGS_ALBUM_ARTISTS: "albumartist", 3337 + DISCOGS_CATALOG: "catalognumber", 3338 + DISCOGS_COUNTRY: "releasecountry", 3339 + DISCOGS_DATE: "originaldate", 3340 + DISCOGS_LABEL: "label", 3341 + DISCOGS_LABEL_ID: "discogs_label_id", 3342 + DISCOGS_MASTER_RELEASE_ID: "discogs_master_release_id", 3343 + DISCOGS_RATING: "discogs_rating", 3344 + DISCOGS_RELEASED: "date", 3345 + DISCOGS_RELEASE_ID: "discogs_release_id", 3346 + DISCOGS_VOTES: "discogs_votes", 3347 + CATALOGID: "catalognumber", 3348 + STYLE: "genre", 3349 + // 3350 + REPLAYGAIN_TRACK_GAIN: "replaygain_track_gain", 3351 + REPLAYGAIN_TRACK_PEAK: "replaygain_track_peak", 3352 + REPLAYGAIN_ALBUM_GAIN: "replaygain_album_gain", 3353 + REPLAYGAIN_ALBUM_PEAK: "replaygain_album_peak", 3354 + // To Sure if these (REPLAYGAIN_MINMAX, REPLAYGAIN_ALBUM_MINMAX & REPLAYGAIN_UNDO) are used for Vorbis: 3355 + REPLAYGAIN_MINMAX: "replaygain_track_minmax", 3356 + REPLAYGAIN_ALBUM_MINMAX: "replaygain_album_minmax", 3357 + REPLAYGAIN_UNDO: "replaygain_undo" 3358 + }; 3359 + var VorbisTagMapper = class _VorbisTagMapper extends CommonTagMapper { 3360 + static { 3361 + __name(this, "VorbisTagMapper"); 3362 + } 3363 + static toRating(email, rating, maxScore) { 3364 + return { 3365 + source: email ? email.toLowerCase() : void 0, 3366 + rating: Number.parseFloat(rating) / maxScore * CommonTagMapper.maxRatingScore 3367 + }; 3368 + } 3369 + constructor() { 3370 + super(["vorbis"], vorbisTagMap); 3371 + } 3372 + postMap(tag) { 3373 + if (tag.id === "RATING") { 3374 + tag.value = _VorbisTagMapper.toRating(void 0, tag.value, 100); 3375 + } else if (tag.id.indexOf("RATING:") === 0) { 3376 + const keys = tag.id.split(":"); 3377 + tag.value = _VorbisTagMapper.toRating(keys[1], tag.value, 1); 3378 + tag.id = keys[0]; 3379 + } 3380 + } 3381 + }; 3382 + 3383 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/riff/RiffInfoTagMap.js 3384 + var riffInfoTagMap = { 3385 + IART: "artist", 3386 + // Artist 3387 + ICRD: "date", 3388 + // DateCreated 3389 + INAM: "title", 3390 + // Title 3391 + TITL: "title", 3392 + IPRD: "album", 3393 + // Product 3394 + ITRK: "track", 3395 + IPRT: "track", 3396 + // Additional tag for track index 3397 + COMM: "comment", 3398 + // Comments 3399 + ICMT: "comment", 3400 + // Country 3401 + ICNT: "releasecountry", 3402 + GNRE: "genre", 3403 + // Genre 3404 + IWRI: "writer", 3405 + // WrittenBy 3406 + RATE: "rating", 3407 + YEAR: "year", 3408 + ISFT: "encodedby", 3409 + // Software 3410 + CODE: "encodedby", 3411 + // EncodedBy 3412 + TURL: "website", 3413 + // URL, 3414 + IGNR: "genre", 3415 + // Genre 3416 + IENG: "engineer", 3417 + // Engineer 3418 + ITCH: "technician", 3419 + // Technician 3420 + IMED: "media", 3421 + // Original Media 3422 + IRPD: "album" 3423 + // Product, where the file was intended for 3424 + }; 3425 + var RiffInfoTagMapper = class extends CommonTagMapper { 3426 + static { 3427 + __name(this, "RiffInfoTagMapper"); 3428 + } 3429 + constructor() { 3430 + super(["exif"], riffInfoTagMap); 3431 + } 3432 + }; 3433 + 3434 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/matroska/MatroskaTagMapper.js 3435 + var ebmlTagMap = { 3436 + "segment:title": "title", 3437 + "album:ARTIST": "albumartist", 3438 + "album:ARTISTSORT": "albumartistsort", 3439 + "album:TITLE": "album", 3440 + "album:DATE_RECORDED": "originaldate", 3441 + "album:DATE_RELEASED": "releasedate", 3442 + "album:PART_NUMBER": "disk", 3443 + "album:TOTAL_PARTS": "totaltracks", 3444 + "track:ARTIST": "artist", 3445 + "track:ARTISTSORT": "artistsort", 3446 + "track:TITLE": "title", 3447 + "track:PART_NUMBER": "track", 3448 + "track:MUSICBRAINZ_TRACKID": "musicbrainz_recordingid", 3449 + "track:MUSICBRAINZ_ALBUMID": "musicbrainz_albumid", 3450 + "track:MUSICBRAINZ_ARTISTID": "musicbrainz_artistid", 3451 + "track:PUBLISHER": "label", 3452 + "track:GENRE": "genre", 3453 + "track:ENCODER": "encodedby", 3454 + "track:ENCODER_OPTIONS": "encodersettings", 3455 + "edition:TOTAL_PARTS": "totaldiscs", 3456 + picture: "picture" 3457 + }; 3458 + var MatroskaTagMapper = class extends CaseInsensitiveTagMap { 3459 + static { 3460 + __name(this, "MatroskaTagMapper"); 3461 + } 3462 + constructor() { 3463 + super(["matroska"], ebmlTagMap); 3464 + } 3465 + }; 3466 + 3467 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/aiff/AiffTagMap.js 3468 + var tagMap = { 3469 + NAME: "title", 3470 + AUTH: "artist", 3471 + "(c) ": "copyright", 3472 + ANNO: "comment" 3473 + }; 3474 + var AiffTagMapper = class extends CommonTagMapper { 3475 + static { 3476 + __name(this, "AiffTagMapper"); 3477 + } 3478 + constructor() { 3479 + super(["AIFF"], tagMap); 3480 + } 3481 + }; 3482 + 3483 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/CombinedTagMapper.js 3484 + var CombinedTagMapper = class { 3485 + static { 3486 + __name(this, "CombinedTagMapper"); 3487 + } 3488 + constructor() { 3489 + this.tagMappers = {}; 3490 + [ 3491 + new ID3v1TagMapper(), 3492 + new ID3v22TagMapper(), 3493 + new ID3v24TagMapper(), 3494 + new MP4TagMapper(), 3495 + new MP4TagMapper(), 3496 + new VorbisTagMapper(), 3497 + new APEv2TagMapper(), 3498 + new AsfTagMapper(), 3499 + new RiffInfoTagMapper(), 3500 + new MatroskaTagMapper(), 3501 + new AiffTagMapper() 3502 + ].forEach((mapper) => { 3503 + this.registerTagMapper(mapper); 3504 + }); 3505 + } 3506 + /** 3507 + * Convert native to generic (common) tags 3508 + * @param tagType Originating tag format 3509 + * @param tag Native tag to map to a generic tag id 3510 + * @param warnings 3511 + * @return Generic tag result (output of this function) 3512 + */ 3513 + mapTag(tagType2, tag, warnings) { 3514 + const tagMapper = this.tagMappers[tagType2]; 3515 + if (tagMapper) { 3516 + return this.tagMappers[tagType2].mapGenericTag(tag, warnings); 3517 + } 3518 + throw new InternalParserError(`No generic tag mapper defined for tag-format: ${tagType2}`); 3519 + } 3520 + registerTagMapper(genericTagMapper) { 3521 + for (const tagType2 of genericTagMapper.tagTypes) { 3522 + this.tagMappers[tagType2] = genericTagMapper; 3523 + } 3524 + } 3525 + }; 3526 + 3527 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/lrc/LyricsParser.js 3528 + var TIMESTAMP_REGEX = /\[(\d{2}):(\d{2})\.(\d{2,3})]/; 3529 + function parseLyrics(input) { 3530 + if (TIMESTAMP_REGEX.test(input)) { 3531 + return parseLrc(input); 3532 + } 3533 + return toUnsyncedLyrics(input); 3534 + } 3535 + __name(parseLyrics, "parseLyrics"); 3536 + function toUnsyncedLyrics(lyrics) { 3537 + return { 3538 + contentType: LyricsContentType.lyrics, 3539 + timeStampFormat: TimestampFormat.notSynchronized, 3540 + text: lyrics.trim(), 3541 + syncText: [] 3542 + }; 3543 + } 3544 + __name(toUnsyncedLyrics, "toUnsyncedLyrics"); 3545 + function parseLrc(lrcString) { 3546 + const lines = lrcString.split("\n"); 3547 + const syncText = []; 3548 + for (const line of lines) { 3549 + const match = line.match(TIMESTAMP_REGEX); 3550 + if (match) { 3551 + const minutes = Number.parseInt(match[1], 10); 3552 + const seconds = Number.parseInt(match[2], 10); 3553 + const ms = match[3].length === 3 ? Number.parseInt(match[3], 10) : Number.parseInt(match[3], 10) * 10; 3554 + const timestamp = (minutes * 60 + seconds) * 1e3 + ms; 3555 + const text = line.replace(TIMESTAMP_REGEX, "").trim(); 3556 + syncText.push({ timestamp, text }); 3557 + } 3558 + } 3559 + return { 3560 + contentType: LyricsContentType.lyrics, 3561 + timeStampFormat: TimestampFormat.milliseconds, 3562 + text: syncText.map((line) => line.text).join("\n"), 3563 + syncText 3564 + }; 3565 + } 3566 + __name(parseLrc, "parseLrc"); 3567 + 3568 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/MetadataCollector.js 3569 + var debug2 = (0, import_debug2.default)("music-metadata:collector"); 3570 + var TagPriority = ["matroska", "APEv2", "vorbis", "ID3v2.4", "ID3v2.3", "ID3v2.2", "exif", "asf", "iTunes", "AIFF", "ID3v1"]; 3571 + var MetadataCollector = class { 3572 + static { 3573 + __name(this, "MetadataCollector"); 3574 + } 3575 + constructor(opts) { 3576 + this.format = { 3577 + tagTypes: [], 3578 + trackInfo: [] 3579 + }; 3580 + this.native = {}; 3581 + this.common = { 3582 + track: { no: null, of: null }, 3583 + disk: { no: null, of: null }, 3584 + movementIndex: { no: null, of: null } 3585 + }; 3586 + this.quality = { 3587 + warnings: [] 3588 + }; 3589 + this.commonOrigin = {}; 3590 + this.originPriority = {}; 3591 + this.tagMapper = new CombinedTagMapper(); 3592 + this.opts = opts; 3593 + let priority = 1; 3594 + for (const tagType2 of TagPriority) { 3595 + this.originPriority[tagType2] = priority++; 3596 + } 3597 + this.originPriority.artificial = 500; 3598 + this.originPriority.id3v1 = 600; 3599 + } 3600 + /** 3601 + * @returns {boolean} true if one or more tags have been found 3602 + */ 3603 + hasAny() { 3604 + return Object.keys(this.native).length > 0; 3605 + } 3606 + addStreamInfo(streamInfo) { 3607 + debug2(`streamInfo: type=${streamInfo.type ? TrackTypeValueToKeyMap[streamInfo.type] : "?"}, codec=${streamInfo.codecName}`); 3608 + this.format.trackInfo.push(streamInfo); 3609 + } 3610 + setFormat(key, value) { 3611 + debug2(`format: ${key} = ${value}`); 3612 + this.format[key] = value; 3613 + if (this.opts?.observer) { 3614 + this.opts.observer({ metadata: this, tag: { type: "format", id: key, value } }); 3615 + } 3616 + } 3617 + setAudioOnly() { 3618 + this.setFormat("hasAudio", true); 3619 + this.setFormat("hasVideo", false); 3620 + } 3621 + async addTag(tagType2, tagId, value) { 3622 + debug2(`tag ${tagType2}.${tagId} = ${value}`); 3623 + if (!this.native[tagType2]) { 3624 + this.format.tagTypes.push(tagType2); 3625 + this.native[tagType2] = []; 3626 + } 3627 + this.native[tagType2].push({ id: tagId, value }); 3628 + await this.toCommon(tagType2, tagId, value); 3629 + } 3630 + addWarning(warning) { 3631 + this.quality.warnings.push({ message: warning }); 3632 + } 3633 + async postMap(tagType2, tag) { 3634 + switch (tag.id) { 3635 + case "artist": 3636 + if (this.commonOrigin.artist === this.originPriority[tagType2]) { 3637 + return this.postMap("artificial", { id: "artists", value: tag.value }); 3638 + } 3639 + if (!this.common.artists) { 3640 + this.setGenericTag("artificial", { id: "artists", value: tag.value }); 3641 + } 3642 + break; 3643 + case "artists": 3644 + if (!this.common.artist || this.commonOrigin.artist === this.originPriority.artificial) { 3645 + if (!this.common.artists || this.common.artists.indexOf(tag.value) === -1) { 3646 + const artists = (this.common.artists || []).concat([tag.value]); 3647 + const value = joinArtists(artists); 3648 + const artistTag = { id: "artist", value }; 3649 + this.setGenericTag("artificial", artistTag); 3650 + } 3651 + } 3652 + break; 3653 + case "picture": 3654 + return this.postFixPicture(tag.value).then((picture) => { 3655 + if (picture !== null) { 3656 + tag.value = picture; 3657 + this.setGenericTag(tagType2, tag); 3658 + } 3659 + }); 3660 + case "totaltracks": 3661 + this.common.track.of = CommonTagMapper.toIntOrNull(tag.value); 3662 + return; 3663 + case "totaldiscs": 3664 + this.common.disk.of = CommonTagMapper.toIntOrNull(tag.value); 3665 + return; 3666 + case "movementTotal": 3667 + this.common.movementIndex.of = CommonTagMapper.toIntOrNull(tag.value); 3668 + return; 3669 + case "track": 3670 + case "disk": 3671 + case "movementIndex": { 3672 + const of = this.common[tag.id].of; 3673 + this.common[tag.id] = CommonTagMapper.normalizeTrack(tag.value); 3674 + this.common[tag.id].of = of != null ? of : this.common[tag.id].of; 3675 + return; 3676 + } 3677 + case "bpm": 3678 + case "year": 3679 + case "originalyear": 3680 + tag.value = Number.parseInt(tag.value, 10); 3681 + break; 3682 + case "date": { 3683 + const year = Number.parseInt(tag.value.substr(0, 4), 10); 3684 + if (!Number.isNaN(year)) { 3685 + this.common.year = year; 3686 + } 3687 + break; 3688 + } 3689 + case "discogs_label_id": 3690 + case "discogs_release_id": 3691 + case "discogs_master_release_id": 3692 + case "discogs_artist_id": 3693 + case "discogs_votes": 3694 + tag.value = typeof tag.value === "string" ? Number.parseInt(tag.value, 10) : tag.value; 3695 + break; 3696 + case "replaygain_track_gain": 3697 + case "replaygain_track_peak": 3698 + case "replaygain_album_gain": 3699 + case "replaygain_album_peak": 3700 + tag.value = toRatio(tag.value); 3701 + break; 3702 + case "replaygain_track_minmax": 3703 + tag.value = tag.value.split(",").map((v) => Number.parseInt(v, 10)); 3704 + break; 3705 + case "replaygain_undo": { 3706 + const minMix = tag.value.split(",").map((v) => Number.parseInt(v, 10)); 3707 + tag.value = { 3708 + leftChannel: minMix[0], 3709 + rightChannel: minMix[1] 3710 + }; 3711 + break; 3712 + } 3713 + case "gapless": 3714 + // iTunes gap-less flag 3715 + case "compilation": 3716 + case "podcast": 3717 + case "showMovement": 3718 + tag.value = tag.value === "1" || tag.value === 1; 3719 + break; 3720 + case "isrc": { 3721 + const commonTag = this.common[tag.id]; 3722 + if (commonTag && commonTag.indexOf(tag.value) !== -1) 3723 + return; 3724 + break; 3725 + } 3726 + case "comment": 3727 + if (typeof tag.value === "string") { 3728 + tag.value = { text: tag.value }; 3729 + } 3730 + if (tag.value.descriptor === "iTunPGAP") { 3731 + this.setGenericTag(tagType2, { id: "gapless", value: tag.value.text === "1" }); 3732 + } 3733 + break; 3734 + case "lyrics": 3735 + if (typeof tag.value === "string") { 3736 + tag.value = parseLyrics(tag.value); 3737 + } 3738 + break; 3739 + default: 3740 + } 3741 + if (tag.value !== null) { 3742 + this.setGenericTag(tagType2, tag); 3743 + } 3744 + } 3745 + /** 3746 + * Convert native tags to common tags 3747 + * @returns {IAudioMetadata} Native + common tags 3748 + */ 3749 + toCommonMetadata() { 3750 + return { 3751 + format: this.format, 3752 + native: this.native, 3753 + quality: this.quality, 3754 + common: this.common 3755 + }; 3756 + } 3757 + /** 3758 + * Fix some common issues with picture object 3759 + * @param picture Picture 3760 + */ 3761 + async postFixPicture(picture) { 3762 + if (picture.data && picture.data.length > 0) { 3763 + if (!picture.format) { 3764 + const fileType = await fileTypeFromBuffer(Uint8Array.from(picture.data)); 3765 + if (fileType) { 3766 + picture.format = fileType.mime; 3767 + } else { 3768 + return null; 3769 + } 3770 + } 3771 + picture.format = picture.format.toLocaleLowerCase(); 3772 + switch (picture.format) { 3773 + case "image/jpg": 3774 + picture.format = "image/jpeg"; 3775 + } 3776 + return picture; 3777 + } 3778 + this.addWarning("Empty picture tag found"); 3779 + return null; 3780 + } 3781 + /** 3782 + * Convert native tag to common tags 3783 + */ 3784 + async toCommon(tagType2, tagId, value) { 3785 + const tag = { id: tagId, value }; 3786 + const genericTag = this.tagMapper.mapTag(tagType2, tag, this); 3787 + if (genericTag) { 3788 + await this.postMap(tagType2, genericTag); 3789 + } 3790 + } 3791 + /** 3792 + * Set generic tag 3793 + */ 3794 + setGenericTag(tagType2, tag) { 3795 + debug2(`common.${tag.id} = ${tag.value}`); 3796 + const prio0 = this.commonOrigin[tag.id] || 1e3; 3797 + const prio1 = this.originPriority[tagType2]; 3798 + if (isSingleton(tag.id)) { 3799 + if (prio1 <= prio0) { 3800 + this.common[tag.id] = tag.value; 3801 + this.commonOrigin[tag.id] = prio1; 3802 + } else { 3803 + return debug2(`Ignore native tag (singleton): ${tagType2}.${tag.id} = ${tag.value}`); 3804 + } 3805 + } else { 3806 + if (prio1 === prio0) { 3807 + if (!isUnique(tag.id) || this.common[tag.id].indexOf(tag.value) === -1) { 3808 + this.common[tag.id].push(tag.value); 3809 + } else { 3810 + debug2(`Ignore duplicate value: ${tagType2}.${tag.id} = ${tag.value}`); 3811 + } 3812 + } else if (prio1 < prio0) { 3813 + this.common[tag.id] = [tag.value]; 3814 + this.commonOrigin[tag.id] = prio1; 3815 + } else { 3816 + return debug2(`Ignore native tag (list): ${tagType2}.${tag.id} = ${tag.value}`); 3817 + } 3818 + } 3819 + if (this.opts?.observer) { 3820 + this.opts.observer({ metadata: this, tag: { type: "common", id: tag.id, value: tag.value } }); 3821 + } 3822 + } 3823 + }; 3824 + function joinArtists(artists) { 3825 + if (artists.length > 2) { 3826 + return `${artists.slice(0, artists.length - 1).join(", ")} & ${artists[artists.length - 1]}`; 3827 + } 3828 + return artists.join(" & "); 3829 + } 3830 + __name(joinArtists, "joinArtists"); 3831 + 3832 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mpeg/MpegLoader.js 3833 + var mpegParserLoader = { 3834 + parserType: "mpeg", 3835 + extensions: [".mp2", ".mp3", ".m2a", ".aac", "aacp"], 3836 + mimeTypes: ["audio/mpeg", "audio/mp3", "audio/aacs", "audio/aacp"], 3837 + async load() { 3838 + return (await import("./MpegParser-6I4WPE7H.js")).MpegParser; 3839 + } 3840 + }; 3841 + 3842 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/apev2/Apev2Loader.js 3843 + var apeParserLoader = { 3844 + parserType: "apev2", 3845 + extensions: [".ape"], 3846 + mimeTypes: ["audio/ape", "audio/monkeys-audio"], 3847 + async load() { 3848 + return (await import("./APEv2Parser-7M4PAZ3N.js")).APEv2Parser; 3849 + } 3850 + }; 3851 + 3852 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfLoader.js 3853 + var asfParserLoader = { 3854 + parserType: "asf", 3855 + extensions: [".asf"], 3856 + mimeTypes: ["audio/ms-wma", "video/ms-wmv", "audio/ms-asf", "video/ms-asf", "application/vnd.ms-asf"], 3857 + async load() { 3858 + return (await import("./AsfParser-ADNDJMPT.js")).AsfParser; 3859 + } 3860 + }; 3861 + 3862 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/dsdiff/DsdiffLoader.js 3863 + var dsdiffParserLoader = { 3864 + parserType: "dsdiff", 3865 + extensions: [".dff"], 3866 + mimeTypes: ["audio/dsf", "audio/dsd"], 3867 + async load() { 3868 + return (await import("./DsdiffParser-DF4OM5HV.js")).DsdiffParser; 3869 + } 3870 + }; 3871 + 3872 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/aiff/AiffLoader.js 3873 + var aiffParserLoader = { 3874 + parserType: "aiff", 3875 + extensions: [".aif", "aiff", "aifc"], 3876 + mimeTypes: ["audio/aiff", "audio/aif", "audio/aifc", "application/aiff"], 3877 + async load() { 3878 + return (await import("./AiffParser-EXCORBCX.js")).AIFFParser; 3879 + } 3880 + }; 3881 + 3882 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/dsf/DsfLoader.js 3883 + var dsfParserLoader = { 3884 + parserType: "dsf", 3885 + extensions: [".dsf"], 3886 + mimeTypes: ["audio/dsf"], 3887 + async load() { 3888 + return (await import("./DsfParser-WJENCYIA.js")).DsfParser; 3889 + } 3890 + }; 3891 + 3892 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/flac/FlacLoader.js 3893 + var flacParserLoader = { 3894 + parserType: "flac", 3895 + extensions: [".flac"], 3896 + mimeTypes: ["audio/flac"], 3897 + async load() { 3898 + return (await import("./FlacParser-UYVOMKF2.js")).FlacParser; 3899 + } 3900 + }; 3901 + 3902 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/matroska/MatroskaLoader.js 3903 + var matroskaParserLoader = { 3904 + parserType: "matroska", 3905 + extensions: [".mka", ".mkv", ".mk3d", ".mks", "webm"], 3906 + mimeTypes: ["audio/matroska", "video/matroska", "audio/webm", "video/webm"], 3907 + async load() { 3908 + return (await import("./MatroskaParser-K556QMVK.js")).MatroskaParser; 3909 + } 3910 + }; 3911 + 3912 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/Mp4Loader.js 3913 + var mp4ParserLoader = { 3914 + parserType: "mp4", 3915 + extensions: [".mp4", ".m4a", ".m4b", ".m4pa", "m4v", "m4r", "3gp", ".mov", ".movie", ".qt"], 3916 + mimeTypes: ["audio/mp4", "audio/m4a", "video/m4v", "video/mp4", "video/quicktime"], 3917 + async load() { 3918 + return (await import("./MP4Parser-N3XX43E2.js")).MP4Parser; 3919 + } 3920 + }; 3921 + 3922 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/musepack/MusepackLoader.js 3923 + var musepackParserLoader = { 3924 + parserType: "musepack", 3925 + extensions: [".mpc"], 3926 + mimeTypes: ["audio/musepack"], 3927 + async load() { 3928 + return (await import("./MusepackParser-PVJGCXWZ.js")).MusepackParser; 3929 + } 3930 + }; 3931 + 3932 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/ogg/OggLoader.js 3933 + var oggParserLoader = { 3934 + parserType: "ogg", 3935 + extensions: [".ogg", ".ogv", ".oga", ".ogm", ".ogx", ".opus", ".spx"], 3936 + mimeTypes: ["audio/ogg", "audio/opus", "audio/speex", "video/ogg"], 3937 + // RFC 7845, RFC 6716, RFC 5574 3938 + async load() { 3939 + return (await import("./OggParser-HOABAP6I.js")).OggParser; 3940 + } 3941 + }; 3942 + 3943 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/wavpack/WavPackLoader.js 3944 + var wavpackParserLoader = { 3945 + parserType: "wavpack", 3946 + extensions: [".wv", ".wvp"], 3947 + mimeTypes: ["audio/wavpack"], 3948 + async load() { 3949 + return (await import("./WavPackParser-BDZJQRUN.js")).WavPackParser; 3950 + } 3951 + }; 3952 + 3953 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/wav/WaveLoader.js 3954 + var riffParserLoader = { 3955 + parserType: "riff", 3956 + extensions: [".wav", "wave", ".bwf"], 3957 + mimeTypes: ["audio/vnd.wave", "audio/wav", "audio/wave"], 3958 + async load() { 3959 + return (await import("./WaveParser-CTTJTFLC.js")).WaveParser; 3960 + } 3961 + }; 3962 + 3963 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/ParserFactory.js 3964 + var debug3 = (0, import_debug3.default)("music-metadata:parser:factory"); 3965 + function parseHttpContentType(contentType) { 3966 + const type = import_content_type.default.parse(contentType); 3967 + const mime = (0, import_media_typer.parse)(type.type); 3968 + return { 3969 + type: mime.type, 3970 + subtype: mime.subtype, 3971 + suffix: mime.suffix, 3972 + parameters: type.parameters 3973 + }; 3974 + } 3975 + __name(parseHttpContentType, "parseHttpContentType"); 3976 + var ParserFactory = class { 3977 + static { 3978 + __name(this, "ParserFactory"); 3979 + } 3980 + constructor() { 3981 + this.parsers = []; 3982 + [ 3983 + flacParserLoader, 3984 + mpegParserLoader, 3985 + apeParserLoader, 3986 + mp4ParserLoader, 3987 + matroskaParserLoader, 3988 + riffParserLoader, 3989 + oggParserLoader, 3990 + asfParserLoader, 3991 + aiffParserLoader, 3992 + wavpackParserLoader, 3993 + musepackParserLoader, 3994 + dsfParserLoader, 3995 + dsdiffParserLoader 3996 + ].forEach((parser) => { 3997 + this.registerParser(parser); 3998 + }); 3999 + } 4000 + registerParser(parser) { 4001 + this.parsers.push(parser); 4002 + } 4003 + async parse(tokenizer3, parserLoader, opts) { 4004 + if (tokenizer3.supportsRandomAccess()) { 4005 + debug3("tokenizer supports random-access, scanning for appending headers"); 4006 + await scanAppendingHeaders(tokenizer3, opts); 4007 + } else { 4008 + debug3("tokenizer does not support random-access, cannot scan for appending headers"); 4009 + } 4010 + if (!parserLoader) { 4011 + const buf = new Uint8Array(4100); 4012 + if (tokenizer3.fileInfo.mimeType) { 4013 + parserLoader = this.findLoaderForContentType(tokenizer3.fileInfo.mimeType); 4014 + } 4015 + if (!parserLoader && tokenizer3.fileInfo.path) { 4016 + parserLoader = this.findLoaderForExtension(tokenizer3.fileInfo.path); 4017 + } 4018 + if (!parserLoader) { 4019 + debug3("Guess parser on content..."); 4020 + await tokenizer3.peekBuffer(buf, { mayBeLess: true }); 4021 + const guessedType = await fileTypeFromBuffer(buf, { mpegOffsetTolerance: 10 }); 4022 + if (!guessedType || !guessedType.mime) { 4023 + throw new CouldNotDetermineFileTypeError("Failed to determine audio format"); 4024 + } 4025 + debug3(`Guessed file type is mime=${guessedType.mime}, extension=${guessedType.ext}`); 4026 + parserLoader = this.findLoaderForContentType(guessedType.mime); 4027 + if (!parserLoader) { 4028 + throw new UnsupportedFileTypeError(`Guessed MIME-type not supported: ${guessedType.mime}`); 4029 + } 4030 + } 4031 + } 4032 + debug3(`Loading ${parserLoader.parserType} parser...`); 4033 + const metadata = new MetadataCollector(opts); 4034 + const ParserImpl = await parserLoader.load(); 4035 + const parser = new ParserImpl(metadata, tokenizer3, opts ?? {}); 4036 + debug3(`Parser ${parserLoader.parserType} loaded`); 4037 + await parser.parse(); 4038 + if (metadata.format.trackInfo) { 4039 + if (metadata.format.hasAudio === void 0) { 4040 + metadata.setFormat("hasAudio", !!metadata.format.trackInfo.find((track) => track.type === TrackType.audio)); 4041 + } 4042 + if (metadata.format.hasVideo === void 0) { 4043 + metadata.setFormat("hasVideo", !!metadata.format.trackInfo.find((track) => track.type === TrackType.video)); 4044 + } 4045 + } 4046 + return metadata.toCommonMetadata(); 4047 + } 4048 + /** 4049 + * @param filePath - Path, filename or extension to audio file 4050 + * @return Parser submodule name 4051 + */ 4052 + findLoaderForExtension(filePath) { 4053 + if (!filePath) 4054 + return; 4055 + const extension = getExtension(filePath).toLocaleLowerCase() || filePath; 4056 + return this.parsers.find((parser) => parser.extensions.indexOf(extension) !== -1); 4057 + } 4058 + findLoaderForContentType(httpContentType) { 4059 + let mime; 4060 + if (!httpContentType) 4061 + return; 4062 + try { 4063 + mime = parseHttpContentType(httpContentType); 4064 + } catch (_err) { 4065 + debug3(`Invalid HTTP Content-Type header value: ${httpContentType}`); 4066 + return; 4067 + } 4068 + const subType = mime.subtype.indexOf("x-") === 0 ? mime.subtype.substring(2) : mime.subtype; 4069 + return this.parsers.find((parser) => parser.mimeTypes.find((loader) => loader.indexOf(`${mime.type}/${subType}`) !== -1)); 4070 + } 4071 + getSupportedMimeTypes() { 4072 + const mimeTypeSet = /* @__PURE__ */ new Set(); 4073 + this.parsers.forEach((loader) => { 4074 + loader.mimeTypes.forEach((mimeType) => { 4075 + mimeTypeSet.add(mimeType); 4076 + mimeTypeSet.add(mimeType.replace("/", "/x-")); 4077 + }); 4078 + }); 4079 + return Array.from(mimeTypeSet); 4080 + } 4081 + }; 4082 + function getExtension(fname) { 4083 + const i = fname.lastIndexOf("."); 4084 + return i === -1 ? "" : fname.substring(i); 4085 + } 4086 + __name(getExtension, "getExtension"); 4087 + 4088 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/lyrics3/Lyrics3.js 4089 + var endTag2 = "LYRICS200"; 4090 + async function getLyricsHeaderLength(tokenizer3) { 4091 + const fileSize = tokenizer3.fileInfo.size; 4092 + if (fileSize >= 143) { 4093 + const buf = new Uint8Array(15); 4094 + const position = tokenizer3.position; 4095 + await tokenizer3.readBuffer(buf, { position: fileSize - 143 }); 4096 + tokenizer3.setPosition(position); 4097 + const txt = textDecode(buf, "latin1"); 4098 + const tag = txt.substring(6); 4099 + if (tag === endTag2) { 4100 + return Number.parseInt(txt.substring(0, 6), 10) + 15; 4101 + } 4102 + } 4103 + return 0; 4104 + } 4105 + __name(getLyricsHeaderLength, "getLyricsHeaderLength"); 4106 + 4107 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/core.js 4108 + async function parseBlob(blob, options = {}) { 4109 + const tokenizer3 = fromBlob(blob); 4110 + try { 4111 + return await parseFromTokenizer(tokenizer3, options); 4112 + } finally { 4113 + await tokenizer3.close(); 4114 + } 4115 + } 4116 + __name(parseBlob, "parseBlob"); 4117 + async function parseWebStream(webStream, fileInfo, options = {}) { 4118 + const tokenizer3 = fromWebStream(webStream, { fileInfo: typeof fileInfo === "string" ? { mimeType: fileInfo } : fileInfo }); 4119 + try { 4120 + return await parseFromTokenizer(tokenizer3, options); 4121 + } finally { 4122 + await tokenizer3.close(); 4123 + } 4124 + } 4125 + __name(parseWebStream, "parseWebStream"); 4126 + function parseFromTokenizer(tokenizer3, options) { 4127 + const parserFactory = new ParserFactory(); 4128 + return parserFactory.parse(tokenizer3, void 0, options); 4129 + } 4130 + __name(parseFromTokenizer, "parseFromTokenizer"); 4131 + async function scanAppendingHeaders(tokenizer3, options = {}) { 4132 + let apeOffset = tokenizer3.fileInfo.size; 4133 + if (await hasID3v1Header(tokenizer3)) { 4134 + apeOffset -= 128; 4135 + const lyricsLen = await getLyricsHeaderLength(tokenizer3); 4136 + apeOffset -= lyricsLen; 4137 + } 4138 + options.apeHeader = await APEv2Parser.findApeFooterOffset(tokenizer3, apeOffset); 4139 + } 4140 + __name(scanAppendingHeaders, "scanAppendingHeaders"); 4141 + 4142 + // ../node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/index.js 4143 + var debug4 = (0, import_debug4.default)("music-metadata:parser"); 4144 + 4145 + // components/processor/metadata/common.js 4146 + var URI = __toESM(require_uri_all()); 4147 + 4148 + // ../node_modules/.deno/@tokenizer+http@0.9.2/node_modules/@tokenizer/http/lib/http-client.js 4149 + var import_debug7 = __toESM(require_src()); 4150 + 4151 + // ../node_modules/.deno/peek-readable@5.4.2/node_modules/peek-readable/lib/EndOfStreamError.js 4152 + var defaultMessages = "End-Of-Stream"; 4153 + var EndOfStreamError2 = class extends Error { 4154 + static { 4155 + __name(this, "EndOfStreamError"); 4156 + } 4157 + constructor() { 4158 + super(defaultMessages); 4159 + } 4160 + }; 4161 + 4162 + // ../node_modules/.deno/strtok3@9.1.1/node_modules/strtok3/lib/AbstractTokenizer.js 4163 + var AbstractTokenizer2 = class { 4164 + static { 4165 + __name(this, "AbstractTokenizer"); 4166 + } 4167 + /** 4168 + * Constructor 4169 + * @param options Tokenizer options 4170 + * @protected 4171 + */ 4172 + constructor(options) { 4173 + this.numBuffer = new Uint8Array(8); 4174 + this.position = 0; 4175 + this.onClose = options?.onClose; 4176 + if (options?.abortSignal) { 4177 + options.abortSignal.addEventListener("abort", () => { 4178 + this.abort(); 4179 + }); 4180 + } 4181 + } 4182 + /** 4183 + * Read a token from the tokenizer-stream 4184 + * @param token - The token to read 4185 + * @param position - If provided, the desired position in the tokenizer-stream 4186 + * @returns Promise with token data 4187 + */ 4188 + async readToken(token, position = this.position) { 4189 + const uint8Array = new Uint8Array(token.len); 4190 + const len = await this.readBuffer(uint8Array, { position }); 4191 + if (len < token.len) 4192 + throw new EndOfStreamError2(); 4193 + return token.get(uint8Array, 0); 4194 + } 4195 + /** 4196 + * Peek a token from the tokenizer-stream. 4197 + * @param token - Token to peek from the tokenizer-stream. 4198 + * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position. 4199 + * @returns Promise with token data 4200 + */ 4201 + async peekToken(token, position = this.position) { 4202 + const uint8Array = new Uint8Array(token.len); 4203 + const len = await this.peekBuffer(uint8Array, { position }); 4204 + if (len < token.len) 4205 + throw new EndOfStreamError2(); 4206 + return token.get(uint8Array, 0); 4207 + } 4208 + /** 4209 + * Read a numeric token from the stream 4210 + * @param token - Numeric token 4211 + * @returns Promise with number 4212 + */ 4213 + async readNumber(token) { 4214 + const len = await this.readBuffer(this.numBuffer, { length: token.len }); 4215 + if (len < token.len) 4216 + throw new EndOfStreamError2(); 4217 + return token.get(this.numBuffer, 0); 4218 + } 4219 + /** 4220 + * Read a numeric token from the stream 4221 + * @param token - Numeric token 4222 + * @returns Promise with number 4223 + */ 4224 + async peekNumber(token) { 4225 + const len = await this.peekBuffer(this.numBuffer, { length: token.len }); 4226 + if (len < token.len) 4227 + throw new EndOfStreamError2(); 4228 + return token.get(this.numBuffer, 0); 4229 + } 4230 + /** 4231 + * Ignore number of bytes, advances the pointer in under tokenizer-stream. 4232 + * @param length - Number of bytes to ignore 4233 + * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available 4234 + */ 4235 + async ignore(length) { 4236 + if (this.fileInfo.size !== void 0) { 4237 + const bytesLeft = this.fileInfo.size - this.position; 4238 + if (length > bytesLeft) { 4239 + this.position += bytesLeft; 4240 + return bytesLeft; 4241 + } 4242 + } 4243 + this.position += length; 4244 + return length; 4245 + } 4246 + async close() { 4247 + await this.abort(); 4248 + await this.onClose?.(); 4249 + } 4250 + normalizeOptions(uint8Array, options) { 4251 + if (options && options.position !== void 0 && options.position < this.position) { 4252 + throw new Error("`options.position` must be equal or greater than `tokenizer.position`"); 4253 + } 4254 + if (options) { 4255 + return { 4256 + mayBeLess: options.mayBeLess === true, 4257 + offset: options.offset ? options.offset : 0, 4258 + length: options.length ? options.length : uint8Array.length - (options.offset ? options.offset : 0), 4259 + position: options.position ? options.position : this.position 4260 + }; 4261 + } 4262 + return { 4263 + mayBeLess: false, 4264 + offset: 0, 4265 + length: uint8Array.length, 4266 + position: this.position 4267 + }; 4268 + } 4269 + abort() { 4270 + return Promise.resolve(); 4271 + } 4272 + }; 4273 + 4274 + // ../node_modules/.deno/strtok3@9.1.1/node_modules/strtok3/lib/FileTokenizer.js 4275 + var FileTokenizer = class _FileTokenizer extends AbstractTokenizer2 { 4276 + static { 4277 + __name(this, "FileTokenizer"); 4278 + } 4279 + /** 4280 + * Create tokenizer from provided file path 4281 + * @param sourceFilePath File path 4282 + */ 4283 + static async fromFile(sourceFilePath) { 4284 + const fileHandle = await open2(sourceFilePath, "r"); 4285 + const stat = await fileHandle.stat(); 4286 + return new _FileTokenizer(fileHandle, { fileInfo: { path: sourceFilePath, size: stat.size } }); 4287 + } 4288 + constructor(fileHandle, options) { 4289 + super(options); 4290 + this.fileHandle = fileHandle; 4291 + this.fileInfo = options.fileInfo; 4292 + } 4293 + /** 4294 + * Read buffer from file 4295 + * @param uint8Array - Uint8Array to write result to 4296 + * @param options - Read behaviour options 4297 + * @returns Promise number of bytes read 4298 + */ 4299 + async readBuffer(uint8Array, options) { 4300 + const normOptions = this.normalizeOptions(uint8Array, options); 4301 + this.position = normOptions.position; 4302 + if (normOptions.length === 0) 4303 + return 0; 4304 + const res = await this.fileHandle.read(uint8Array, normOptions.offset, normOptions.length, normOptions.position); 4305 + this.position += res.bytesRead; 4306 + if (res.bytesRead < normOptions.length && (!options || !options.mayBeLess)) { 4307 + throw new EndOfStreamError2(); 4308 + } 4309 + return res.bytesRead; 4310 + } 4311 + /** 4312 + * Peek buffer from file 4313 + * @param uint8Array - Uint8Array (or Buffer) to write data to 4314 + * @param options - Read behaviour options 4315 + * @returns Promise number of bytes read 4316 + */ 4317 + async peekBuffer(uint8Array, options) { 4318 + const normOptions = this.normalizeOptions(uint8Array, options); 4319 + const res = await this.fileHandle.read(uint8Array, normOptions.offset, normOptions.length, normOptions.position); 4320 + if (!normOptions.mayBeLess && res.bytesRead < normOptions.length) { 4321 + throw new EndOfStreamError2(); 4322 + } 4323 + return res.bytesRead; 4324 + } 4325 + async close() { 4326 + await this.fileHandle.close(); 4327 + return super.close(); 4328 + } 4329 + setPosition(position) { 4330 + this.position = position; 4331 + } 4332 + supportsRandomAccess() { 4333 + return true; 4334 + } 4335 + }; 4336 + 4337 + // ../node_modules/.deno/strtok3@9.1.1/node_modules/strtok3/lib/index.js 4338 + var fromFile2 = FileTokenizer.fromFile; 4339 + 4340 + // ../node_modules/.deno/@tokenizer+range@0.12.0/node_modules/@tokenizer/range/lib/range-request-tokenizer.js 4341 + var import_debug5 = __toESM(require_src()); 4342 + var debug5 = (0, import_debug5.default)("range-request-reader"); 4343 + function parseContentRange(contentRange) { 4344 + if (!contentRange) { 4345 + throw new Error("Content range must be provided"); 4346 + } 4347 + debug5(`parseContentRange response: contentRange=${contentRange}`); 4348 + const parsedContentRange = contentRange.match(/bytes (\d+)-(\d+)\/(?:(\d+)|\*)/i); 4349 + if (!parsedContentRange) { 4350 + throw new Error(`FIXME: Unknown Content-Range syntax: ${contentRange}`); 4351 + } 4352 + return { 4353 + firstBytePosition: Number.parseInt(parsedContentRange[1], 10), 4354 + lastBytePosition: Number.parseInt(parsedContentRange[2], 10), 4355 + instanceLength: parsedContentRange[3] ? Number.parseInt(parsedContentRange[3], 10) : void 0 4356 + }; 4357 + } 4358 + __name(parseContentRange, "parseContentRange"); 4359 + 4360 + // ../node_modules/.deno/@tokenizer+range@0.12.0/node_modules/@tokenizer/range/lib/range-request-factory.js 4361 + var import_debug6 = __toESM(require_src()); 4362 + var debug6 = (0, import_debug6.default)("range-request-reader"); 4363 + 4364 + // ../node_modules/.deno/@tokenizer+http@0.9.2/node_modules/@tokenizer/http/lib/response-info.js 4365 + var ResponseInfo = class { 4366 + static { 4367 + __name(this, "ResponseInfo"); 4368 + } 4369 + constructor(response) { 4370 + this.response = response; 4371 + } 4372 + getContentLength() { 4373 + const contentLength = this.response.headers.get("Content-Length"); 4374 + return contentLength ? Number.parseInt(contentLength, 10) : void 0; 4375 + } 4376 + getAcceptRangesHeaderValue() { 4377 + return this.response.headers.get("Accept-Ranges"); 4378 + } 4379 + getContentType() { 4380 + return this.response.headers.get("Content-Type"); 4381 + } 4382 + acceptRanges() { 4383 + const value = this.getAcceptRangesHeaderValue(); 4384 + return value !== null && value.trim().toLowerCase() === "bytes"; 4385 + } 4386 + getContentRange() { 4387 + const contentRange = this.response.headers.get("Content-Range"); 4388 + if (!contentRange) { 4389 + return; 4390 + } 4391 + return parseContentRange(contentRange); 4392 + } 4393 + toRangeRequestResponse() { 4394 + const contentRange = this.getContentRange(); 4395 + const size = contentRange ? contentRange.instanceLength : this.getContentLength(); 4396 + if (typeof size !== "number") { 4397 + throw new Error("Could not determine file-size from HTTP response"); 4398 + } 4399 + return { 4400 + url: this.response.url, 4401 + size, 4402 + mimeType: this.getContentType() ?? void 0, 4403 + acceptPartialRequests: this.acceptRanges(), 4404 + contentRange, 4405 + arrayBuffer: /* @__PURE__ */ __name(() => this.response.arrayBuffer().then((res) => new Uint8Array(res)), "arrayBuffer") 4406 + }; 4407 + } 4408 + }; 4409 + 4410 + // ../node_modules/.deno/@tokenizer+http@0.9.2/node_modules/@tokenizer/http/lib/http-client.js 4411 + var debug7 = (0, import_debug7.default)("streaming-http-token-reader:http-client"); 4412 + var DEFAULT_CONFIG = { 4413 + resolveUrl: false 4414 + }; 4415 + var HttpClient = class { 4416 + static { 4417 + __name(this, "HttpClient"); 4418 + } 4419 + constructor(url, config) { 4420 + this.url = url; 4421 + this.abortController = new AbortController(); 4422 + this.config = DEFAULT_CONFIG; 4423 + Object.assign(this.config, config); 4424 + } 4425 + async getHeadInfo() { 4426 + const response = new ResponseInfo(await fetch(this.url, { method: "HEAD", signal: this.abortController.signal })); 4427 + if (this.config.resolveUrl) 4428 + this.resolvedUrl = response.response.url; 4429 + return response.toRangeRequestResponse(); 4430 + } 4431 + async getResponse(method, range) { 4432 + const headers = new Headers(); 4433 + if (range) { 4434 + debug7(`_getResponse ${method} ${range[0]}..${range[1]}`); 4435 + headers.set("Range", `bytes=${range[0]}-${range[1]}`); 4436 + } else { 4437 + debug7(`_getResponse ${method} (range not provided)`); 4438 + } 4439 + const response = new ResponseInfo(await fetch(this.resolvedUrl || this.url, { method, headers, signal: this.abortController.signal })); 4440 + if (response.response.ok) { 4441 + if (this.config.resolveUrl) 4442 + this.resolvedUrl = response.response.url; 4443 + return response.toRangeRequestResponse(); 4444 + } 4445 + throw new Error(`Unexpected HTTP response status=${response.response.status}`); 4446 + } 4447 + abort() { 4448 + debug7("abort"); 4449 + this.abortController.abort(); 4450 + } 4451 + }; 4452 + 4453 + // ../node_modules/.deno/@tokenizer+range@0.13.0/node_modules/@tokenizer/range/lib/chunked-file-data.js 4454 + var NOT_FOUND = -1; 4455 + var ChunkedFileData2 = class { 4456 + static { 4457 + __name(this, "ChunkedFileData"); 4458 + } 4459 + constructor() { 4460 + this._fileData = []; 4461 + } 4462 + /** 4463 + * Adds data to the file storage at a specific offset. 4464 + */ 4465 + addData(offset, data) { 4466 + const offsetEnd = offset + data.byteLength - 1; 4467 + const chunkRange = this._getChunkRange(offset, offsetEnd); 4468 + if (chunkRange.startIx === NOT_FOUND) { 4469 + this._fileData.splice(chunkRange.insertIx || 0, 0, { 4470 + offset, 4471 + data 4472 + }); 4473 + } else { 4474 + const firstChunk = this._fileData[chunkRange.startIx]; 4475 + const lastChunk = this._fileData[chunkRange.endIx]; 4476 + const needsPrepend = offset > firstChunk.offset; 4477 + const needsAppend = offsetEnd < lastChunk.offset + lastChunk.data.byteLength - 1; 4478 + const chunk = { 4479 + offset: Math.min(offset, firstChunk.offset), 4480 + data 4481 + }; 4482 + if (needsPrepend) { 4483 + const slicedData = firstChunk.data.slice(0, offset - firstChunk.offset); 4484 + chunk.data = this._concatData(slicedData, data); 4485 + } 4486 + if (needsAppend) { 4487 + const slicedData = chunk.data.slice(0, lastChunk.offset - chunk.offset); 4488 + chunk.data = this._concatData(slicedData, lastChunk.data); 4489 + } 4490 + this._fileData.splice(chunkRange.startIx, chunkRange.endIx - chunkRange.startIx + 1, chunk); 4491 + } 4492 + } 4493 + hasDataRange(offsetStart, offsetEnd) { 4494 + for (let i = 0; i < this._fileData.length; i++) { 4495 + const chunk = this._fileData[i]; 4496 + if (offsetEnd < chunk.offset) { 4497 + return false; 4498 + } 4499 + if (offsetStart >= chunk.offset && offsetEnd < chunk.offset + chunk.data.byteLength) { 4500 + return true; 4501 + } 4502 + } 4503 + return false; 4504 + } 4505 + readToBuffer(buffer, offset, position, length) { 4506 + const _pos_offset = position; 4507 + let dataChunk; 4508 + for (let i = 0; i < this._fileData.length; i++) { 4509 + const dataChunkStart = this._fileData[i].offset; 4510 + const dataChunkEnd = dataChunkStart + this._fileData[i].data.byteLength; 4511 + if (_pos_offset >= dataChunkStart && _pos_offset < dataChunkEnd) { 4512 + dataChunk = this._fileData[i]; 4513 + const chunkOffset = _pos_offset - dataChunkStart; 4514 + let chunkLength = Math.min(length, dataChunk.data.byteLength - chunkOffset); 4515 + buffer.set(dataChunk.data.subarray(chunkOffset, chunkOffset + chunkLength), offset); 4516 + if (chunkLength < length) { 4517 + chunkLength += this.readToBuffer(buffer, offset + chunkLength, position + chunkLength, length - chunkLength); 4518 + } 4519 + return chunkLength; 4520 + } 4521 + } 4522 + return 0; 4523 + } 4524 + _concatData(buffer1, buffer2) { 4525 + const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength); 4526 + tmp.set(new Uint8Array(buffer1), 0); 4527 + tmp.set(new Uint8Array(buffer2), buffer1.byteLength); 4528 + return tmp; 4529 + } 4530 + /** 4531 + * Finds the chunk range that overlaps the [offsetStart-1,offsetEnd+1] range. 4532 + * When a chunk is adjacent to the offset we still consider it part of the 4533 + * range (this is the situation of offsetStart-1 or offsetEnd+1). 4534 + * When no chunks are found `insertIx` denotes the index where the data 4535 + * should be inserted in the data list (startIx == NOT_FOUND and endIX == 4536 + * NOT_FOUND). 4537 + */ 4538 + _getChunkRange(offsetStart, offsetEnd) { 4539 + let startChunkIx = NOT_FOUND; 4540 + let endChunkIx = NOT_FOUND; 4541 + let insertIx = 0; 4542 + for (let i = 0; i < this._fileData.length; i++, insertIx = i) { 4543 + const chunkOffsetStart = this._fileData[i].offset; 4544 + const chunkOffsetEnd = chunkOffsetStart + this._fileData[i].data.byteLength; 4545 + if (offsetEnd < chunkOffsetStart - 1) { 4546 + break; 4547 + } 4548 + if (offsetStart <= chunkOffsetEnd + 1 && offsetEnd >= chunkOffsetStart - 1) { 4549 + startChunkIx = i; 4550 + break; 4551 + } 4552 + } 4553 + if (startChunkIx === NOT_FOUND) { 4554 + return { 4555 + startIx: NOT_FOUND, 4556 + endIx: NOT_FOUND, 4557 + insertIx 4558 + }; 4559 + } 4560 + for (let i = startChunkIx; i < this._fileData.length; i++) { 4561 + const chunkOffsetStart = this._fileData[i].offset; 4562 + const chunkOffsetEnd = chunkOffsetStart + this._fileData[i].data.byteLength; 4563 + if (offsetEnd >= chunkOffsetStart - 1) { 4564 + endChunkIx = i; 4565 + } 4566 + if (offsetEnd <= chunkOffsetEnd + 1) { 4567 + break; 4568 + } 4569 + } 4570 + if (endChunkIx === NOT_FOUND) { 4571 + endChunkIx = startChunkIx; 4572 + } 4573 + return { 4574 + startIx: startChunkIx, 4575 + endIx: endChunkIx 4576 + }; 4577 + } 4578 + }; 4579 + 4580 + // ../node_modules/.deno/@tokenizer+range@0.13.0/node_modules/@tokenizer/range/lib/range-request-tokenizer.js 4581 + var import_debug8 = __toESM(require_src()); 4582 + var debug8 = (0, import_debug8.default)("range-request-reader"); 4583 + var RangeRequestTokenizer2 = class extends AbstractTokenizer { 4584 + static { 4585 + __name(this, "RangeRequestTokenizer"); 4586 + } 4587 + constructor(rangeRequestClient, options) { 4588 + super({ fileInfo: options.fileInfo }); 4589 + this.rangeRequestClient = rangeRequestClient; 4590 + this.options = options; 4591 + this.fileInfo = options.fileInfo; 4592 + if (Number.isNaN(options.minimumChunkSize)) { 4593 + throw new Error("minimumChunkSize must be a number"); 4594 + } 4595 + this._fileData = new ChunkedFileData2(); 4596 + this.options.abortSignal?.addEventListener("abort", () => { 4597 + this.abort(); 4598 + }); 4599 + } 4600 + setPosition(position) { 4601 + this.position = position; 4602 + } 4603 + /** 4604 + * Read portion from stream 4605 + * @param uint8array - Target `Uint8Array` 4606 + * @param options - Additional read options 4607 + * @returns Promise with number of bytes read 4608 + */ 4609 + async readBuffer(uint8array, options) { 4610 + if (options?.position) { 4611 + this.position = options.position; 4612 + } 4613 + const length = await this.peekBuffer(uint8array, options); 4614 + this.position += length; 4615 + return length; 4616 + } 4617 + /** 4618 + * Peek (read ahead) buffer from tokenizer 4619 + * @param uint8array - Target `Uint8Array` to fill with data peek from the tokenizer-stream 4620 + * @param options - Additional read options 4621 + * @returns Promise with number of bytes read 4622 + */ 4623 + async peekBuffer(uint8array, options) { 4624 + let length = uint8array.length; 4625 + const offset = 0; 4626 + let position = this.position; 4627 + if (options) { 4628 + if (options.position) { 4629 + position = options.position; 4630 + } 4631 + if (options.length) { 4632 + length = options.length; 4633 + } else { 4634 + length -= offset; 4635 + } 4636 + } 4637 + if (length === 0) { 4638 + return 0; 4639 + } 4640 + debug8(`peekBuffer position=${position} length=${length}`); 4641 + if (!this.fileInfo) 4642 + throw new Error("File-info missing"); 4643 + const lastPos = Math.min(this.fileInfo.size - 1, position + length - 1); 4644 + await this.loadRange([position, lastPos]); 4645 + this._fileData.readToBuffer(uint8array, offset, position, Math.min(this.fileInfo.size, length)); 4646 + return length; 4647 + } 4648 + /** 4649 + * Ignore number of bytes, advances the pointer in under tokenizer-stream. 4650 + * @param length - Number of bytes to skip (ignore) 4651 + * @return actual number of bytes ignored 4652 + */ 4653 + async ignore(length) { 4654 + const bytesLeft = this.fileInfo.size - this.position; 4655 + if (length <= bytesLeft) { 4656 + this.position += length; 4657 + return length; 4658 + } 4659 + this.position += bytesLeft; 4660 + return bytesLeft; 4661 + } 4662 + async abort() { 4663 + this.rangeRequestClient.abort(); 4664 + } 4665 + supportsRandomAccess() { 4666 + return true; 4667 + } 4668 + async loadRange(range) { 4669 + if (range[0] > this.fileInfo.size - 1) { 4670 + throw new Error("End-Of-File"); 4671 + } 4672 + debug8(`request range ${range[0]}..${range[1]}`); 4673 + debug8(`adjusted range ${range[0]}..${range[1]}`); 4674 + if (this._fileData.hasDataRange(range[0], range[1])) { 4675 + debug8("Read from cache"); 4676 + return; 4677 + } 4678 + range = roundRange2(range, this.options.minimumChunkSize); 4679 + range[1] = Math.min(this.fileInfo.size - 1, range[1]); 4680 + debug8(`blocked range: ${range[0]}..${range[1]}`); 4681 + return this.rangeRequestClient.getResponse("GET", range).then((response) => { 4682 + return response.arrayBuffer().then((data) => { 4683 + this._fileData.addData(range[0], data); 4684 + }); 4685 + }); 4686 + } 4687 + }; 4688 + function roundRange2(range, minimumChunkSize) { 4689 + const length = range[1] - range[0] + 1; 4690 + const newLength = Math.max(minimumChunkSize, length); 4691 + return [range[0], range[0] + newLength - 1]; 4692 + } 4693 + __name(roundRange2, "roundRange"); 4694 + 4695 + // ../node_modules/.deno/@tokenizer+range@0.13.0/node_modules/@tokenizer/range/lib/range-request-factory.js 4696 + var import_debug9 = __toESM(require_src()); 4697 + var debug9 = (0, import_debug9.default)("range-request-reader"); 4698 + var RangeRequestFactory2 = class { 4699 + static { 4700 + __name(this, "RangeRequestFactory"); 4701 + } 4702 + constructor(rangeRequestClient) { 4703 + this.rangeRequestClient = rangeRequestClient; 4704 + this.config = { 4705 + avoidHeadRequests: false, 4706 + initialChunkSize: 4 * 1024, 4707 + minimumChunkSize: 1024 4708 + }; 4709 + } 4710 + async initTokenizer(config) { 4711 + if (config) { 4712 + this.config = { ...this.config, ...config }; 4713 + } 4714 + const headRequestInfo = await this.getHeadRequestInfo(); 4715 + if (!headRequestInfo.acceptPartialRequests) { 4716 + throw new Error("Server does not accept partial requests"); 4717 + } 4718 + return new RangeRequestTokenizer2(this.rangeRequestClient, { 4719 + fileInfo: headRequestInfo, 4720 + minimumChunkSize: this.config.minimumChunkSize, 4721 + abortSignal: config?.abortSignal 4722 + }); 4723 + } 4724 + /** 4725 + * Get file information, an HTTP-client may implement this doing a HEAD request 4726 + * @return Promise with head-request-info, extending tokenizer file-info. 4727 + */ 4728 + getHeadRequestInfo() { 4729 + return this.config.avoidHeadRequests ? this.fetchFileInfoWithGetRequest() : this.fetchFileInfoWithHeadRequest(); 4730 + } 4731 + async fetchFileInfoWithHeadRequest() { 4732 + debug9("_fetchSizeWithHeadRequest()"); 4733 + if (this.rangeRequestClient.getHeadInfo) { 4734 + const info = await this.rangeRequestClient.getHeadInfo(); 4735 + if (info.size) { 4736 + debug9(`MIME-type=${info.mimeType}, content-length=${info.size}, accept-partial-requests=${info.acceptPartialRequests}`); 4737 + return info; 4738 + } 4739 + } 4740 + debug9("Content-Length not provided by the server, fallback to GET requests"); 4741 + return this.fetchFileInfoWithGetRequest(); 4742 + } 4743 + async fetchFileInfoWithGetRequest() { 4744 + const range = roundRange2([0, this.config.initialChunkSize], this.config.minimumChunkSize); 4745 + const response = await this.rangeRequestClient.getResponse("GET", range); 4746 + debug9(`_fetchSizeWithGetRequest response: contentRange=[${response.contentRange?.firstBytePosition}-${response.contentRange?.lastBytePosition}/${response.contentRange?.instanceLength}]`); 4747 + if (!response.contentRange) { 4748 + throw new Error("Failed to resolve content range (file size)"); 4749 + } 4750 + return response; 4751 + } 4752 + }; 4753 + 4754 + // ../node_modules/.deno/@tokenizer+range@0.13.0/node_modules/@tokenizer/range/lib/index.js 4755 + function tokenizer2(rangeRequestClient, config) { 4756 + const factory = new RangeRequestFactory2(rangeRequestClient); 4757 + return factory.initTokenizer(config); 4758 + } 4759 + __name(tokenizer2, "tokenizer"); 4760 + 4761 + // components/processor/metadata/common.js 4762 + async function musicMetadataTags({ 4763 + includeArtwork, 4764 + mimeType, 4765 + stream, 4766 + urls 4767 + }) { 4768 + const uri = urls ? URI.parse(urls.get) : void 0; 4769 + const pathParts = uri?.path?.split("/"); 4770 + const filename = pathParts?.[pathParts.length - 1]; 4771 + let meta; 4772 + if (urls?.get.startsWith("blob:")) { 4773 + const blob = await fetch(urls.get).then((r) => r.blob()); 4774 + meta = await parseBlob(blob, { skipCovers: !includeArtwork }); 4775 + } else if (urls) { 4776 + const httpClient = new HttpClient(urls.head, { 4777 + resolveUrl: false 4778 + }); 4779 + httpClient.resolvedUrl = urls.get; 4780 + const getHeadInfo = httpClient.getHeadInfo; 4781 + httpClient.getHeadInfo = async () => { 4782 + const info = await getHeadInfo.call(httpClient); 4783 + return { ...info, acceptPartialRequests: true }; 4784 + }; 4785 + const tokenizer3 = await tokenizer2(httpClient); 4786 + meta = await parseFromTokenizer(tokenizer3, { skipCovers: !includeArtwork }); 4787 + } else if (stream) { 4788 + meta = await parseWebStream(stream, { mimeType }, { 4789 + skipCovers: !includeArtwork 4790 + }); 4791 + } else { 4792 + throw new Error("Missing args, need either some urls or a stream."); 4793 + } 4794 + const statsFull = { 4795 + albumGain: meta.format.albumGain, 4796 + bitrate: meta.format.bitrate, 4797 + bitsPerSample: meta.format.bitsPerSample, 4798 + codec: meta.format.codec, 4799 + container: meta.format.container, 4800 + duration: meta.format.duration, 4801 + lossless: meta.format.lossless, 4802 + numberOfChannels: meta.format.numberOfChannels, 4803 + sampleRate: meta.format.sampleRate, 4804 + trackGain: meta.format.trackGain 4805 + }; 4806 + const tagsFull = { 4807 + album: meta.common.album, 4808 + albumartist: meta.common.albumartist, 4809 + albumartists: Array.isArray(meta.common.albumartist) ? meta.common.albumartist : meta.common.albumartist ? [meta.common.albumartist] : void 0, 4810 + albumartistsort: meta.common.albumartistsort, 4811 + albumsort: meta.common.albumsort, 4812 + arranger: meta.common.arranger, 4813 + artist: meta.common.artist, 4814 + artists: meta.common.artists ?? (meta.common.artist ? [meta.common.artist] : []), 4815 + artistsort: meta.common.artistsort, 4816 + asin: meta.common.asin, 4817 + averageLevel: meta.common.averageLevel, 4818 + barcode: meta.common.barcode, 4819 + bpm: meta.common.bpm, 4820 + catalognumbers: meta.common.catalognumber, 4821 + compilation: meta.common.compilation, 4822 + composers: meta.common.composer, 4823 + composersort: meta.common.composersort, 4824 + conductors: meta.common.conductor, 4825 + date: meta.common.date, 4826 + disc: { 4827 + no: meta.common.disk.no || 1, 4828 + ...meta.common.disk.of && { of: meta.common.disk.of } 4829 + }, 4830 + djmixers: meta.common.djmixer, 4831 + engineers: meta.common.engineer, 4832 + gapless: meta.common.gapless, 4833 + genres: Array.isArray(meta.common.genre) ? meta.common.genre : meta.common.genre ? [meta.common.genre] : void 0, 4834 + isrc: meta.common.isrc, 4835 + labels: meta.common.label, 4836 + lyricists: meta.common.lyricist, 4837 + media: meta.common.media, 4838 + mixers: meta.common.mixer, 4839 + moods: Array.isArray(meta.common.mood) ? meta.common.mood : meta.common.mood ? [meta.common.mood] : void 0, 4840 + originaldate: meta.common.originaldate, 4841 + originalyear: meta.common.originalyear, 4842 + peakLevel: meta.common.peakLevel, 4843 + producers: meta.common.producer, 4844 + publishers: meta.common.publisher, 4845 + releasecountry: meta.common.releasecountry, 4846 + releasedate: meta.common.releasedate, 4847 + releasestatus: meta.common.releasestatus, 4848 + releasetypes: meta.common.releasetype, 4849 + remixers: meta.common.remixer, 4850 + technicians: meta.common.technician, 4851 + title: meta.common.title || filename || urls?.head || "Unknown", 4852 + titlesort: meta.common.titlesort, 4853 + track: { 4854 + no: meta.common.track.no || 1, 4855 + ...meta.common.track.of && { of: meta.common.track.of } 4856 + }, 4857 + work: meta.common.work, 4858 + writers: meta.common.writer, 4859 + year: meta.common.year 4860 + }; 4861 + const stats = removeUndefinedValuesFromRecord(statsFull); 4862 + const tags = removeUndefinedValuesFromRecord(tagsFull); 4863 + return { 4864 + artwork: includeArtwork ? meta.common.picture : void 0, 4865 + stats, 4866 + tags 4867 + }; 4868 + } 4869 + __name(musicMetadataTags, "musicMetadataTags"); 4870 + 4871 + export { 4872 + musicMetadataTags 4873 + }; 4874 + /*! Bundled license information: 4875 + 4876 + content-type/index.js: 4877 + (*! 4878 + * content-type 4879 + * Copyright(c) 2015 Douglas Christopher Wilson 4880 + * MIT Licensed 4881 + *) 4882 + 4883 + media-typer/index.js: 4884 + (*! 4885 + * media-typer 4886 + * Copyright(c) 2014-2017 Douglas Christopher Wilson 4887 + * MIT Licensed 4888 + *) 4889 + */ 4890 + 4891 + //# sourceMappingURL=./chunk-R3OSCHAC.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-R3OSCHAC.js.map
··· 1 + {"version":3,"sources":["/node_modules/.deno/content-type@1.0.5/node_modules/content-type/index.js","/node_modules/.deno/media-typer@1.1.0/node_modules/media-typer/index.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/index.js","/node_modules/.deno/@tokenizer+inflate@0.4.1/node_modules/@tokenizer/inflate/lib/ZipHandler.js","/node_modules/.deno/@tokenizer+inflate@0.4.1/node_modules/@tokenizer/inflate/lib/ZipToken.js","/node_modules/.deno/@tokenizer+inflate@0.4.1/node_modules/@tokenizer/inflate/lib/GzipHandler.js","/node_modules/.deno/file-type@21.3.0/node_modules/file-type/util.js","/node_modules/.deno/file-type@21.3.0/node_modules/file-type/supported.js","/node_modules/.deno/file-type@21.3.0/node_modules/file-type/core.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/ParserFactory.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/MetadataCollector.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/GenericTagTypes.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/GenericTagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/id3v1/ID3v1TagMap.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/CaseInsensitiveTagMap.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/id3v2/ID3v24TagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfTagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/id3v2/ID3v22TagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/apev2/APEv2TagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/MP4TagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/ogg/vorbis/VorbisTagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/riff/RiffInfoTagMap.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/matroska/MatroskaTagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/aiff/AiffTagMap.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/common/CombinedTagMapper.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/lrc/LyricsParser.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mpeg/MpegLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/apev2/Apev2Loader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/asf/AsfLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/dsdiff/DsdiffLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/aiff/AiffLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/dsf/DsfLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/flac/FlacLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/matroska/MatroskaLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/mp4/Mp4Loader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/musepack/MusepackLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/ogg/OggLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/wavpack/WavPackLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/wav/WaveLoader.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/lyrics3/Lyrics3.js","/node_modules/.deno/music-metadata@11.10.6/node_modules/music-metadata/lib/core.js","/components/processor/metadata/common.js","/node_modules/.deno/@tokenizer+http@0.9.2/node_modules/@tokenizer/http/lib/http-client.js","/node_modules/.deno/peek-readable@5.4.2/node_modules/peek-readable/lib/EndOfStreamError.js","/node_modules/.deno/strtok3@9.1.1/node_modules/strtok3/lib/AbstractTokenizer.js","/node_modules/.deno/strtok3@9.1.1/node_modules/strtok3/lib/FileTokenizer.js","/node_modules/.deno/strtok3@9.1.1/node_modules/strtok3/lib/index.js","/node_modules/.deno/@tokenizer+range@0.12.0/node_modules/@tokenizer/range/lib/range-request-tokenizer.js","/node_modules/.deno/@tokenizer+range@0.12.0/node_modules/@tokenizer/range/lib/range-request-factory.js","/node_modules/.deno/@tokenizer+http@0.9.2/node_modules/@tokenizer/http/lib/response-info.js","/node_modules/.deno/@tokenizer+range@0.13.0/node_modules/@tokenizer/range/lib/chunked-file-data.js","/node_modules/.deno/@tokenizer+range@0.13.0/node_modules/@tokenizer/range/lib/range-request-tokenizer.js","/node_modules/.deno/@tokenizer+range@0.13.0/node_modules/@tokenizer/range/lib/range-request-factory.js","/node_modules/.deno/@tokenizer+range@0.13.0/node_modules/@tokenizer/range/lib/index.js"],"sourcesContent":["/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter = token \"=\" ( token / quoted-string )\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text = %x80-FF\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type = token\n * subtype = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || !TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n var string = type\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n if (!TOKEN_REGEXP.test(param)) {\n throw new TypeError('invalid parameter name')\n }\n\n string += '; ' + param + '=' + qstring(parameters[param])\n }\n }\n\n return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n // support req/res-like objects as argument\n var header = typeof string === 'object'\n ? getcontenttype(string)\n : string\n\n if (typeof header !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var index = header.indexOf(';')\n var type = index !== -1\n ? header.slice(0, index).trim()\n : header.trim()\n\n if (!TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid media type')\n }\n\n var obj = new ContentType(type.toLowerCase())\n\n // parse parameters\n if (index !== -1) {\n var key\n var match\n var value\n\n PARAM_REGEXP.lastIndex = index\n\n while ((match = PARAM_REGEXP.exec(header))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value.charCodeAt(0) === 0x22 /* \" */) {\n // remove quotes\n value = value.slice(1, -1)\n\n // remove escapes\n if (value.indexOf('\\\\') !== -1) {\n value = value.replace(QESC_REGEXP, '$1')\n }\n }\n\n obj.parameters[key] = value\n }\n\n if (index !== header.length) {\n throw new TypeError('invalid parameter format')\n }\n }\n\n return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n var header\n\n if (typeof obj.getHeader === 'function') {\n // res-like\n header = obj.getHeader('content-type')\n } else if (typeof obj.headers === 'object') {\n // req-like\n header = obj.headers && obj.headers['content-type']\n }\n\n if (typeof header !== 'string') {\n throw new TypeError('content-type header is missing from object')\n }\n\n return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n // no need to quote tokens\n if (TOKEN_REGEXP.test(str)) {\n return str\n }\n\n if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n throw new TypeError('invalid parameter value')\n }\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n this.parameters = Object.create(null)\n this.type = type\n}\n","/*!\n * media-typer\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first = ALPHA / DIGIT\n * restricted-name-chars = ALPHA / DIGIT / \"!\" / \"#\" /\n * \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n * ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n * ; specify a structured syntax suffix\n * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z\n * DIGIT = %x30-39 ; 0-9\n */\nvar SUBTYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar TYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar TYPE_REGEXP = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\nexports.test = test\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var subtype = obj.subtype\n var suffix = obj.suffix\n var type = obj.type\n\n if (!type || !TYPE_NAME_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n if (!subtype || !SUBTYPE_NAME_REGEXP.test(subtype)) {\n throw new TypeError('invalid subtype')\n }\n\n // format as type/subtype\n var string = type + '/' + subtype\n\n // append +suffix\n if (suffix) {\n if (!TYPE_NAME_REGEXP.test(suffix)) {\n throw new TypeError('invalid suffix')\n }\n\n string += '+' + suffix\n }\n\n return string\n}\n\n/**\n * Test media type.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction test (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n if (typeof string !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n return TYPE_REGEXP.test(string.toLowerCase())\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n if (typeof string !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var match = TYPE_REGEXP.exec(string.toLowerCase())\n\n if (!match) {\n throw new TypeError('invalid media type')\n }\n\n var type = match[1]\n var subtype = match[2]\n var suffix\n\n // suffix after last +\n var index = subtype.lastIndexOf('+')\n if (index !== -1) {\n suffix = subtype.substr(index + 1)\n subtype = subtype.substr(0, index)\n }\n\n return new MediaType(type, subtype, suffix)\n}\n\n/**\n * Class for MediaType object.\n * @public\n */\n\nfunction MediaType (type, subtype, suffix) {\n this.type = type\n this.subtype = subtype\n this.suffix = suffix\n}\n","/**\n * Node.js specific entry point.\n */\nimport { fromFile, fromStream } from 'strtok3';\nimport initDebug from 'debug';\nimport { CouldNotDetermineFileTypeError, parseFromTokenizer, UnsupportedFileTypeError } from './core.js';\nimport { ParserFactory } from './ParserFactory.js';\nexport * from './core.js';\nconst debug = initDebug('music-metadata:parser');\n/**\n * Parse audio from Node Stream.Readable\n * @param stream - Stream to read the audio track from\n * @param fileInfo - File information object or MIME-type, e.g.: 'audio/mpeg'\n * @param options - Parsing options\n * @returns Metadata\n */\nexport async function parseStream(stream, fileInfo, options = {}) {\n const tokenizer = await fromStream(stream, { fileInfo: typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo });\n try {\n return await parseFromTokenizer(tokenizer, options);\n }\n finally {\n await tokenizer.close();\n }\n}\n/**\n * Parse audio from Node file\n * @param filePath - Media file to read meta-data from\n * @param options - Parsing options\n * @returns Metadata\n */\nexport async function parseFile(filePath, options = {}) {\n debug(`parseFile: ${filePath}`);\n const fileTokenizer = await fromFile(filePath);\n const parserFactory = new ParserFactory();\n try {\n const parserLoader = parserFactory.findLoaderForExtension(filePath);\n if (!parserLoader)\n debug('Parser could not be determined by file extension');\n try {\n return await parserFactory.parse(fileTokenizer, parserLoader, options);\n }\n catch (error) {\n if (error instanceof CouldNotDetermineFileTypeError || error instanceof UnsupportedFileTypeError) {\n error.message += `: ${filePath}`;\n }\n throw error;\n }\n }\n finally {\n await fileTokenizer.close();\n }\n}\n","import { StringType, UINT32_LE } from 'token-types';\nimport initDebug from 'debug';\nimport { DataDescriptor, EndOfCentralDirectoryRecordToken, FileHeader, LocalFileHeaderToken, Signature } from \"./ZipToken.js\";\nfunction signatureToArray(signature) {\n const signatureBytes = new Uint8Array(UINT32_LE.len);\n UINT32_LE.put(signatureBytes, 0, signature);\n return signatureBytes;\n}\nconst debug = initDebug('tokenizer:inflate');\nconst syncBufferSize = 256 * 1024;\nconst ddSignatureArray = signatureToArray(Signature.DataDescriptor);\nconst eocdSignatureBytes = signatureToArray(Signature.EndOfCentralDirectory);\nexport class ZipHandler {\n constructor(tokenizer) {\n this.tokenizer = tokenizer;\n this.syncBuffer = new Uint8Array(syncBufferSize);\n }\n async isZip() {\n return await this.peekSignature() === Signature.LocalFileHeader;\n }\n peekSignature() {\n return this.tokenizer.peekToken(UINT32_LE);\n }\n async findEndOfCentralDirectoryLocator() {\n const randomReadTokenizer = this.tokenizer;\n const chunkLength = Math.min(16 * 1024, randomReadTokenizer.fileInfo.size);\n const buffer = this.syncBuffer.subarray(0, chunkLength);\n await this.tokenizer.readBuffer(buffer, { position: randomReadTokenizer.fileInfo.size - chunkLength });\n // Search the buffer from end to beginning for EOCD signature\n // const signature = 0x06054b50;\n for (let i = buffer.length - 4; i >= 0; i--) {\n // Compare 4 bytes directly without calling readUInt32LE\n if (buffer[i] === eocdSignatureBytes[0] &&\n buffer[i + 1] === eocdSignatureBytes[1] &&\n buffer[i + 2] === eocdSignatureBytes[2] &&\n buffer[i + 3] === eocdSignatureBytes[3]) {\n return randomReadTokenizer.fileInfo.size - chunkLength + i;\n }\n }\n return -1;\n }\n async readCentralDirectory() {\n if (!this.tokenizer.supportsRandomAccess()) {\n debug('Cannot reading central-directory without random-read support');\n return;\n }\n debug('Reading central-directory...');\n const pos = this.tokenizer.position;\n const offset = await this.findEndOfCentralDirectoryLocator();\n if (offset > 0) {\n debug('Central-directory 32-bit signature found');\n const eocdHeader = await this.tokenizer.readToken(EndOfCentralDirectoryRecordToken, offset);\n const files = [];\n this.tokenizer.setPosition(eocdHeader.offsetOfStartOfCd);\n for (let n = 0; n < eocdHeader.nrOfEntriesOfSize; ++n) {\n const entry = await this.tokenizer.readToken(FileHeader);\n if (entry.signature !== Signature.CentralFileHeader) {\n throw new Error('Expected Central-File-Header signature');\n }\n entry.filename = await this.tokenizer.readToken(new StringType(entry.filenameLength, 'utf-8'));\n await this.tokenizer.ignore(entry.extraFieldLength);\n await this.tokenizer.ignore(entry.fileCommentLength);\n files.push(entry);\n debug(`Add central-directory file-entry: n=${n + 1}/${files.length}: filename=${files[n].filename}`);\n }\n this.tokenizer.setPosition(pos);\n return files;\n }\n this.tokenizer.setPosition(pos);\n }\n async unzip(fileCb) {\n const entries = await this.readCentralDirectory();\n if (entries) {\n // Use Central Directory to iterate over files\n return this.iterateOverCentralDirectory(entries, fileCb);\n }\n // Scan Zip files for local-file-header\n let stop = false;\n do {\n const zipHeader = await this.readLocalFileHeader();\n if (!zipHeader)\n break;\n const next = fileCb(zipHeader);\n stop = !!next.stop;\n let fileData;\n await this.tokenizer.ignore(zipHeader.extraFieldLength);\n if (zipHeader.dataDescriptor && zipHeader.compressedSize === 0) {\n const chunks = [];\n let len = syncBufferSize;\n debug('Compressed-file-size unknown, scanning for next data-descriptor-signature....');\n let nextHeaderIndex = -1;\n while (nextHeaderIndex < 0 && len === syncBufferSize) {\n len = await this.tokenizer.peekBuffer(this.syncBuffer, { mayBeLess: true });\n nextHeaderIndex = indexOf(this.syncBuffer.subarray(0, len), ddSignatureArray);\n const size = nextHeaderIndex >= 0 ? nextHeaderIndex : len;\n if (next.handler) {\n const data = new Uint8Array(size);\n await this.tokenizer.readBuffer(data);\n chunks.push(data);\n }\n else {\n // Move position to the next header if found, skip the whole buffer otherwise\n await this.tokenizer.ignore(size);\n }\n }\n debug(`Found data-descriptor-signature at pos=${this.tokenizer.position}`);\n if (next.handler) {\n await this.inflate(zipHeader, mergeArrays(chunks), next.handler);\n }\n }\n else {\n if (next.handler) {\n debug(`Reading compressed-file-data: ${zipHeader.compressedSize} bytes`);\n fileData = new Uint8Array(zipHeader.compressedSize);\n await this.tokenizer.readBuffer(fileData);\n await this.inflate(zipHeader, fileData, next.handler);\n }\n else {\n debug(`Ignoring compressed-file-data: ${zipHeader.compressedSize} bytes`);\n await this.tokenizer.ignore(zipHeader.compressedSize);\n }\n }\n debug(`Reading data-descriptor at pos=${this.tokenizer.position}`);\n if (zipHeader.dataDescriptor) {\n // await this.tokenizer.ignore(DataDescriptor.len);\n const dataDescriptor = await this.tokenizer.readToken(DataDescriptor);\n if (dataDescriptor.signature !== 0x08074b50) {\n throw new Error(`Expected data-descriptor-signature at position ${this.tokenizer.position - DataDescriptor.len}`);\n }\n }\n } while (!stop);\n }\n async iterateOverCentralDirectory(entries, fileCb) {\n for (const fileHeader of entries) {\n const next = fileCb(fileHeader);\n if (next.handler) {\n this.tokenizer.setPosition(fileHeader.relativeOffsetOfLocalHeader);\n const zipHeader = await this.readLocalFileHeader();\n if (zipHeader) {\n await this.tokenizer.ignore(zipHeader.extraFieldLength);\n const fileData = new Uint8Array(fileHeader.compressedSize);\n await this.tokenizer.readBuffer(fileData);\n await this.inflate(zipHeader, fileData, next.handler);\n }\n }\n if (next.stop)\n break;\n }\n }\n async inflate(zipHeader, fileData, cb) {\n if (zipHeader.compressedMethod === 0) {\n // Stored (uncompressed)\n return cb(fileData);\n }\n if (zipHeader.compressedMethod !== 8) {\n throw new Error(`Unsupported ZIP compression method: ${zipHeader.compressedMethod}`);\n }\n debug(`Decompress filename=${zipHeader.filename}, compressed-size=${fileData.length}`);\n const uncompressedData = await ZipHandler.decompressDeflateRaw(fileData);\n return cb(uncompressedData);\n }\n static async decompressDeflateRaw(data) {\n // Wrap Uint8Array in a ReadableStream without copying\n const input = new ReadableStream({\n start(controller) {\n controller.enqueue(data);\n controller.close();\n }\n });\n const ds = new DecompressionStream(\"deflate-raw\");\n const output = input.pipeThrough(ds);\n try {\n // Collect decompressed bytes from the output stream\n const response = new Response(output);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n catch (err) {\n // Provide ZIP-specific error context\n const message = err instanceof Error\n ? `Failed to deflate ZIP entry: ${err.message}`\n : \"Unknown decompression error in ZIP entry\";\n throw new TypeError(message);\n }\n }\n async readLocalFileHeader() {\n const signature = await this.tokenizer.peekToken(UINT32_LE);\n if (signature === Signature.LocalFileHeader) {\n const header = await this.tokenizer.readToken(LocalFileHeaderToken);\n header.filename = await this.tokenizer.readToken(new StringType(header.filenameLength, 'utf-8'));\n return header;\n }\n if (signature === Signature.CentralFileHeader) {\n return false;\n }\n if (signature === 0xE011CFD0) {\n throw new Error('Encrypted ZIP');\n }\n throw new Error('Unexpected signature');\n }\n}\nfunction indexOf(buffer, portion) {\n const bufferLength = buffer.length;\n const portionLength = portion.length;\n // Return -1 if the portion is longer than the buffer\n if (portionLength > bufferLength)\n return -1;\n // Search for the portion in the buffer\n for (let i = 0; i <= bufferLength - portionLength; i++) {\n let found = true;\n for (let j = 0; j < portionLength; j++) {\n if (buffer[i + j] !== portion[j]) {\n found = false;\n break;\n }\n }\n if (found) {\n return i; // Return the starting offset\n }\n }\n return -1; // Not found\n}\nfunction mergeArrays(chunks) {\n // Concatenate chunks into a single Uint8Array\n const totalLength = chunks.reduce((acc, curr) => acc + curr.length, 0);\n const mergedArray = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n mergedArray.set(chunk, offset);\n offset += chunk.length;\n }\n return mergedArray;\n}\n","/**\n * Ref https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT\n */\nimport { UINT16_LE, UINT32_LE } from \"token-types\";\nexport const Signature = {\n LocalFileHeader: 0x04034b50,\n DataDescriptor: 0x08074b50,\n CentralFileHeader: 0x02014b50,\n EndOfCentralDirectory: 0x06054b50\n};\nexport const DataDescriptor = {\n get(array) {\n return {\n signature: UINT32_LE.get(array, 0),\n compressedSize: UINT32_LE.get(array, 8),\n uncompressedSize: UINT32_LE.get(array, 12),\n };\n }, len: 16\n};\n/**\n * First part of the ZIP Local File Header\n * Offset | Bytes| Description\n * -------|------+-------------------------------------------------------------------\n * 0 | 4 | Signature (0x04034b50)\n * 4 | 2 | Minimum version needed to extract\n * 6 | 2 | Bit flag\n * 8 | 2 | Compression method\n * 10 | 2 | File last modification time (MS-DOS format)\n * 12 | 2 | File last modification date (MS-DOS format)\n * 14 | 4 | CRC-32 of uncompressed data\n * 18 | 4 | Compressed size\n * 22 | 4 | Uncompressed size\n * 26 | 2 | File name length (n)\n * 28 | 2 | Extra field length (m)\n * 30 | n | File name\n * 30 + n | m | Extra field\n */\nexport const LocalFileHeaderToken = {\n get(array) {\n const flags = UINT16_LE.get(array, 6);\n return {\n signature: UINT32_LE.get(array, 0),\n minVersion: UINT16_LE.get(array, 4),\n dataDescriptor: !!(flags & 0x0008),\n compressedMethod: UINT16_LE.get(array, 8),\n compressedSize: UINT32_LE.get(array, 18),\n uncompressedSize: UINT32_LE.get(array, 22),\n filenameLength: UINT16_LE.get(array, 26),\n extraFieldLength: UINT16_LE.get(array, 28),\n filename: null\n };\n }, len: 30\n};\n/**\n * 4.3.16 End of central directory record:\n * end of central dir signature (0x06064b50) 4 bytes\n * number of this disk 2 bytes\n * number of the disk with the start of the central directory 2 bytes\n * total number of entries in the central directory on this disk 2 bytes\n * total number of entries in the size of the central directory 2 bytes\n * sizeOfTheCentralDirectory 4 bytes\n * offset of start of central directory with respect to the starting disk number 4 bytes\n * .ZIP file comment length 2 bytes\n * .ZIP file comment (variable size)\n */\nexport const EndOfCentralDirectoryRecordToken = {\n get(array) {\n return {\n signature: UINT32_LE.get(array, 0),\n nrOfThisDisk: UINT16_LE.get(array, 4),\n nrOfThisDiskWithTheStart: UINT16_LE.get(array, 6),\n nrOfEntriesOnThisDisk: UINT16_LE.get(array, 8),\n nrOfEntriesOfSize: UINT16_LE.get(array, 10),\n sizeOfCd: UINT32_LE.get(array, 12),\n offsetOfStartOfCd: UINT32_LE.get(array, 16),\n zipFileCommentLength: UINT16_LE.get(array, 20),\n };\n }, len: 22\n};\n/**\n * File header:\n * central file header signature 4 bytes 0 (0x02014b50)\n * version made by 2 bytes 4\n * version needed to extract 2 bytes 6\n * general purpose bit flag 2 bytes 8\n * compression method 2 bytes 10\n * last mod file time 2 bytes 12\n * last mod file date 2 bytes 14\n * crc-32 4 bytes 16\n * compressed size 4 bytes 20\n * uncompressed size 4 bytes 24\n * file name length 2 bytes 28\n * extra field length 2 bytes 30\n * file comment length 2 bytes 32\n * disk number start 2 bytes 34\n * internal file attributes 2 bytes 36\n * external file attributes 4 bytes 38\n * relative offset of local header 4 bytes 42\n */\nexport const FileHeader = {\n get(array) {\n const flags = UINT16_LE.get(array, 8);\n return {\n signature: UINT32_LE.get(array, 0),\n minVersion: UINT16_LE.get(array, 6),\n dataDescriptor: !!(flags & 0x0008),\n compressedMethod: UINT16_LE.get(array, 10),\n compressedSize: UINT32_LE.get(array, 20),\n uncompressedSize: UINT32_LE.get(array, 24),\n filenameLength: UINT16_LE.get(array, 28),\n extraFieldLength: UINT16_LE.get(array, 30),\n fileCommentLength: UINT16_LE.get(array, 32),\n relativeOffsetOfLocalHeader: UINT32_LE.get(array, 42),\n filename: null\n };\n }, len: 46\n};\n","export class GzipHandler {\n constructor(tokenizer) {\n this.tokenizer = tokenizer;\n }\n inflate() {\n const tokenizer = this.tokenizer;\n return new ReadableStream({\n async pull(controller) {\n const buffer = new Uint8Array(1024);\n const size = await tokenizer.readBuffer(buffer, { mayBeLess: true });\n if (size === 0) {\n controller.close();\n return;\n }\n controller.enqueue(buffer.subarray(0, size));\n }\n }).pipeThrough(new DecompressionStream(\"gzip\"));\n }\n}\n","import {StringType} from 'token-types';\n\nexport function stringToBytes(string, encoding) {\n\tif (encoding === 'utf-16le') {\n\t\tconst bytes = [];\n\t\tfor (let index = 0; index < string.length; index++) {\n\t\t\tconst code = string.charCodeAt(index); // eslint-disable-line unicorn/prefer-code-point\n\t\t\tbytes.push(code & 0xFF, (code >> 8) & 0xFF); // High byte\n\t\t}\n\n\t\treturn bytes;\n\t}\n\n\tif (encoding === 'utf-16be') {\n\t\tconst bytes = [];\n\t\tfor (let index = 0; index < string.length; index++) {\n\t\t\tconst code = string.charCodeAt(index); // eslint-disable-line unicorn/prefer-code-point\n\t\t\tbytes.push((code >> 8) & 0xFF, code & 0xFF); // Low byte\n\t\t}\n\n\t\treturn bytes;\n\t}\n\n\treturn [...string].map(character => character.charCodeAt(0)); // eslint-disable-line unicorn/prefer-code-point\n}\n\n/**\nChecks whether the TAR checksum is valid.\n\n@param {Uint8Array} arrayBuffer - The TAR header `[offset ... offset + 512]`.\n@param {number} offset - TAR header offset.\n@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.\n*/\nexport function tarHeaderChecksumMatches(arrayBuffer, offset = 0) {\n\tconst readSum = Number.parseInt(new StringType(6).get(arrayBuffer, 148).replace(/\\0.*$/, '').trim(), 8); // Read sum in header\n\tif (Number.isNaN(readSum)) {\n\t\treturn false;\n\t}\n\n\tlet sum = 8 * 0x20; // Initialize signed bit sum\n\n\tfor (let index = offset; index < offset + 148; index++) {\n\t\tsum += arrayBuffer[index];\n\t}\n\n\tfor (let index = offset + 156; index < offset + 512; index++) {\n\t\tsum += arrayBuffer[index];\n\t}\n\n\treturn readSum === sum;\n}\n\n/**\nID3 UINT32 sync-safe tokenizer token.\n28 bits (representing up to 256MB) integer, the msb is 0 to avoid \"false syncsignals\".\n*/\nexport const uint32SyncSafeToken = {\n\tget: (buffer, offset) => (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21),\n\tlen: 4,\n};\n","export const extensions = [\n\t'jpg',\n\t'png',\n\t'apng',\n\t'gif',\n\t'webp',\n\t'flif',\n\t'xcf',\n\t'cr2',\n\t'cr3',\n\t'orf',\n\t'arw',\n\t'dng',\n\t'nef',\n\t'rw2',\n\t'raf',\n\t'tif',\n\t'bmp',\n\t'icns',\n\t'jxr',\n\t'psd',\n\t'indd',\n\t'zip',\n\t'tar',\n\t'rar',\n\t'gz',\n\t'bz2',\n\t'7z',\n\t'dmg',\n\t'mp4',\n\t'mid',\n\t'mkv',\n\t'webm',\n\t'mov',\n\t'avi',\n\t'mpg',\n\t'mp2',\n\t'mp3',\n\t'm4a',\n\t'oga',\n\t'ogg',\n\t'ogv',\n\t'opus',\n\t'flac',\n\t'wav',\n\t'spx',\n\t'amr',\n\t'pdf',\n\t'epub',\n\t'elf',\n\t'macho',\n\t'exe',\n\t'swf',\n\t'rtf',\n\t'wasm',\n\t'woff',\n\t'woff2',\n\t'eot',\n\t'ttf',\n\t'otf',\n\t'ttc',\n\t'ico',\n\t'flv',\n\t'ps',\n\t'xz',\n\t'sqlite',\n\t'nes',\n\t'crx',\n\t'xpi',\n\t'cab',\n\t'deb',\n\t'ar',\n\t'rpm',\n\t'Z',\n\t'lz',\n\t'cfb',\n\t'mxf',\n\t'mts',\n\t'blend',\n\t'bpg',\n\t'docx',\n\t'pptx',\n\t'xlsx',\n\t'3gp',\n\t'3g2',\n\t'j2c',\n\t'jp2',\n\t'jpm',\n\t'jpx',\n\t'mj2',\n\t'aif',\n\t'qcp',\n\t'odt',\n\t'ods',\n\t'odp',\n\t'xml',\n\t'mobi',\n\t'heic',\n\t'cur',\n\t'ktx',\n\t'ape',\n\t'wv',\n\t'dcm',\n\t'ics',\n\t'glb',\n\t'pcap',\n\t'dsf',\n\t'lnk',\n\t'alias',\n\t'voc',\n\t'ac3',\n\t'm4v',\n\t'm4p',\n\t'm4b',\n\t'f4v',\n\t'f4p',\n\t'f4b',\n\t'f4a',\n\t'mie',\n\t'asf',\n\t'ogm',\n\t'ogx',\n\t'mpc',\n\t'arrow',\n\t'shp',\n\t'aac',\n\t'mp1',\n\t'it',\n\t's3m',\n\t'xm',\n\t'skp',\n\t'avif',\n\t'eps',\n\t'lzh',\n\t'pgp',\n\t'asar',\n\t'stl',\n\t'chm',\n\t'3mf',\n\t'zst',\n\t'jxl',\n\t'vcf',\n\t'jls',\n\t'pst',\n\t'dwg',\n\t'parquet',\n\t'class',\n\t'arj',\n\t'cpio',\n\t'ace',\n\t'avro',\n\t'icc',\n\t'fbx',\n\t'vsdx',\n\t'vtt',\n\t'apk',\n\t'drc',\n\t'lz4',\n\t'potx',\n\t'xltx',\n\t'dotx',\n\t'xltm',\n\t'ott',\n\t'ots',\n\t'otp',\n\t'odg',\n\t'otg',\n\t'xlsm',\n\t'docm',\n\t'dotm',\n\t'potm',\n\t'pptm',\n\t'jar',\n\t'jmp',\n\t'rm',\n\t'sav',\n\t'ppsm',\n\t'ppsx',\n\t'tar.gz',\n\t'reg',\n\t'dat',\n];\n\nexport const mimeTypes = [\n\t'image/jpeg',\n\t'image/png',\n\t'image/gif',\n\t'image/webp',\n\t'image/flif',\n\t'image/x-xcf',\n\t'image/x-canon-cr2',\n\t'image/x-canon-cr3',\n\t'image/tiff',\n\t'image/bmp',\n\t'image/vnd.ms-photo',\n\t'image/vnd.adobe.photoshop',\n\t'application/x-indesign',\n\t'application/epub+zip',\n\t'application/x-xpinstall',\n\t'application/vnd.ms-powerpoint.slideshow.macroenabled.12',\n\t'application/vnd.oasis.opendocument.text',\n\t'application/vnd.oasis.opendocument.spreadsheet',\n\t'application/vnd.oasis.opendocument.presentation',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n\t'application/zip',\n\t'application/x-tar',\n\t'application/x-rar-compressed',\n\t'application/gzip',\n\t'application/x-bzip2',\n\t'application/x-7z-compressed',\n\t'application/x-apple-diskimage',\n\t'application/vnd.apache.arrow.file',\n\t'video/mp4',\n\t'audio/midi',\n\t'video/matroska',\n\t'video/webm',\n\t'video/quicktime',\n\t'video/vnd.avi',\n\t'audio/wav',\n\t'audio/qcelp',\n\t'audio/x-ms-asf',\n\t'video/x-ms-asf',\n\t'application/vnd.ms-asf',\n\t'video/mpeg',\n\t'video/3gpp',\n\t'audio/mpeg',\n\t'audio/mp4', // RFC 4337\n\t'video/ogg',\n\t'audio/ogg',\n\t'audio/ogg; codecs=opus',\n\t'application/ogg',\n\t'audio/flac',\n\t'audio/ape',\n\t'audio/wavpack',\n\t'audio/amr',\n\t'application/pdf',\n\t'application/x-elf',\n\t'application/x-mach-binary',\n\t'application/x-msdownload',\n\t'application/x-shockwave-flash',\n\t'application/rtf',\n\t'application/wasm',\n\t'font/woff',\n\t'font/woff2',\n\t'application/vnd.ms-fontobject',\n\t'font/ttf',\n\t'font/otf',\n\t'font/collection',\n\t'image/x-icon',\n\t'video/x-flv',\n\t'application/postscript',\n\t'application/eps',\n\t'application/x-xz',\n\t'application/x-sqlite3',\n\t'application/x-nintendo-nes-rom',\n\t'application/x-google-chrome-extension',\n\t'application/vnd.ms-cab-compressed',\n\t'application/x-deb',\n\t'application/x-unix-archive',\n\t'application/x-rpm',\n\t'application/x-compress',\n\t'application/x-lzip',\n\t'application/x-cfb',\n\t'application/x-mie',\n\t'application/mxf',\n\t'video/mp2t',\n\t'application/x-blender',\n\t'image/bpg',\n\t'image/j2c',\n\t'image/jp2',\n\t'image/jpx',\n\t'image/jpm',\n\t'image/mj2',\n\t'audio/aiff',\n\t'application/xml',\n\t'application/x-mobipocket-ebook',\n\t'image/heif',\n\t'image/heif-sequence',\n\t'image/heic',\n\t'image/heic-sequence',\n\t'image/icns',\n\t'image/ktx',\n\t'application/dicom',\n\t'audio/x-musepack',\n\t'text/calendar',\n\t'text/vcard',\n\t'text/vtt',\n\t'model/gltf-binary',\n\t'application/vnd.tcpdump.pcap',\n\t'audio/x-dsf', // Non-standard\n\t'application/x.ms.shortcut', // Invented by us\n\t'application/x.apple.alias', // Invented by us\n\t'audio/x-voc',\n\t'audio/vnd.dolby.dd-raw',\n\t'audio/x-m4a',\n\t'image/apng',\n\t'image/x-olympus-orf',\n\t'image/x-sony-arw',\n\t'image/x-adobe-dng',\n\t'image/x-nikon-nef',\n\t'image/x-panasonic-rw2',\n\t'image/x-fujifilm-raf',\n\t'video/x-m4v',\n\t'video/3gpp2',\n\t'application/x-esri-shape',\n\t'audio/aac',\n\t'audio/x-it',\n\t'audio/x-s3m',\n\t'audio/x-xm',\n\t'video/MP1S',\n\t'video/MP2P',\n\t'application/vnd.sketchup.skp',\n\t'image/avif',\n\t'application/x-lzh-compressed',\n\t'application/pgp-encrypted',\n\t'application/x-asar',\n\t'model/stl',\n\t'application/vnd.ms-htmlhelp',\n\t'model/3mf',\n\t'image/jxl',\n\t'application/zstd',\n\t'image/jls',\n\t'application/vnd.ms-outlook',\n\t'image/vnd.dwg',\n\t'application/vnd.apache.parquet',\n\t'application/java-vm',\n\t'application/x-arj',\n\t'application/x-cpio',\n\t'application/x-ace-compressed',\n\t'application/avro',\n\t'application/vnd.iccprofile',\n\t'application/x.autodesk.fbx', // Invented by us\n\t'application/vnd.visio',\n\t'application/vnd.android.package-archive',\n\t'application/vnd.google.draco', // Invented by us\n\t'application/x-lz4', // Invented by us\n\t'application/vnd.openxmlformats-officedocument.presentationml.template',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n\t'application/vnd.ms-excel.template.macroenabled.12',\n\t'application/vnd.oasis.opendocument.text-template',\n\t'application/vnd.oasis.opendocument.spreadsheet-template',\n\t'application/vnd.oasis.opendocument.presentation-template',\n\t'application/vnd.oasis.opendocument.graphics',\n\t'application/vnd.oasis.opendocument.graphics-template',\n\t'application/vnd.ms-excel.sheet.macroenabled.12',\n\t'application/vnd.ms-word.document.macroenabled.12',\n\t'application/vnd.ms-word.template.macroenabled.12',\n\t'application/vnd.ms-powerpoint.template.macroenabled.12',\n\t'application/vnd.ms-powerpoint.presentation.macroenabled.12',\n\t'application/java-archive',\n\t'application/vnd.rn-realmedia',\n\t'application/x-spss-sav',\n\t'application/x-ms-regedit',\n\t'application/x-ft-windows-registry-hive',\n\t'application/x-jmp-data',\n];\n","/**\nPrimary entry point, Node.js specific entry point is index.js\n*/\n\nimport * as Token from 'token-types';\nimport * as strtok3 from 'strtok3/core';\nimport {ZipHandler, GzipHandler} from '@tokenizer/inflate';\nimport {getUintBE} from 'uint8array-extras';\nimport {\n\tstringToBytes,\n\ttarHeaderChecksumMatches,\n\tuint32SyncSafeToken,\n} from './util.js';\nimport {extensions, mimeTypes} from './supported.js';\n\nexport const reasonableDetectionSizeInBytes = 4100; // A fair amount of file-types are detectable within this range.\n\nexport async function fileTypeFromStream(stream, options) {\n\treturn new FileTypeParser(options).fromStream(stream);\n}\n\nexport async function fileTypeFromBuffer(input, options) {\n\treturn new FileTypeParser(options).fromBuffer(input);\n}\n\nexport async function fileTypeFromBlob(blob, options) {\n\treturn new FileTypeParser(options).fromBlob(blob);\n}\n\nfunction getFileTypeFromMimeType(mimeType) {\n\tmimeType = mimeType.toLowerCase();\n\tswitch (mimeType) {\n\t\tcase 'application/epub+zip':\n\t\t\treturn {\n\t\t\t\text: 'epub',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.text':\n\t\t\treturn {\n\t\t\t\text: 'odt',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.text-template':\n\t\t\treturn {\n\t\t\t\text: 'ott',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.spreadsheet':\n\t\t\treturn {\n\t\t\t\text: 'ods',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.spreadsheet-template':\n\t\t\treturn {\n\t\t\t\text: 'ots',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.presentation':\n\t\t\treturn {\n\t\t\t\text: 'odp',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.presentation-template':\n\t\t\treturn {\n\t\t\t\text: 'otp',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.graphics':\n\t\t\treturn {\n\t\t\t\text: 'odg',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.graphics-template':\n\t\t\treturn {\n\t\t\t\text: 'otg',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.slideshow':\n\t\t\treturn {\n\t\t\t\text: 'ppsx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n\t\t\treturn {\n\t\t\t\text: 'xlsx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-excel.sheet.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'xlsm',\n\t\t\t\tmime: 'application/vnd.ms-excel.sheet.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.spreadsheetml.template':\n\t\t\treturn {\n\t\t\t\text: 'xltx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-excel.template.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'xltm',\n\t\t\t\tmime: 'application/vnd.ms-excel.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.slideshow.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'ppsm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n\t\t\treturn {\n\t\t\t\text: 'docx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-word.document.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'docm',\n\t\t\t\tmime: 'application/vnd.ms-word.document.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.template':\n\t\t\treturn {\n\t\t\t\text: 'dotx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-word.template.macroenabledtemplate':\n\t\t\treturn {\n\t\t\t\text: 'dotm',\n\t\t\t\tmime: 'application/vnd.ms-word.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.template':\n\t\t\treturn {\n\t\t\t\text: 'potx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.template.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'potm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.presentation':\n\t\t\treturn {\n\t\t\t\text: 'pptx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.presentation.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'pptm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.presentation.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.ms-visio.drawing':\n\t\t\treturn {\n\t\t\t\text: 'vsdx',\n\t\t\t\tmime: 'application/vnd.visio',\n\t\t\t};\n\t\tcase 'application/vnd.ms-package.3dmanufacturing-3dmodel+xml':\n\t\t\treturn {\n\t\t\t\text: '3mf',\n\t\t\t\tmime: 'model/3mf',\n\t\t\t};\n\t\tdefault:\n\t}\n}\n\nfunction _check(buffer, headers, options) {\n\toptions = {\n\t\toffset: 0,\n\t\t...options,\n\t};\n\n\tfor (const [index, header] of headers.entries()) {\n\t\t// If a bitmask is set\n\t\tif (options.mask) {\n\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\tif (header !== (options.mask[index] & buffer[index + options.offset])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (header !== buffer[index + options.offset]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport async function fileTypeFromTokenizer(tokenizer, options) {\n\treturn new FileTypeParser(options).fromTokenizer(tokenizer);\n}\n\nexport async function fileTypeStream(webStream, options) {\n\treturn new FileTypeParser(options).toDetectionStream(webStream, options);\n}\n\nexport class FileTypeParser {\n\tconstructor(options) {\n\t\tthis.options = {\n\t\t\tmpegOffsetTolerance: 0,\n\t\t\t...options,\n\t\t};\n\n\t\tthis.detectors = [...(options?.customDetectors ?? []),\n\t\t\t{id: 'core', detect: this.detectConfident},\n\t\t\t{id: 'core.imprecise', detect: this.detectImprecise}];\n\t\tthis.tokenizerOptions = {\n\t\t\tabortSignal: options?.signal,\n\t\t};\n\t}\n\n\tasync fromTokenizer(tokenizer) {\n\t\tconst initialPosition = tokenizer.position;\n\n\t\t// Iterate through all file-type detectors\n\t\tfor (const detector of this.detectors) {\n\t\t\tconst fileType = await detector.detect(tokenizer);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\n\t\t\tif (initialPosition !== tokenizer.position) {\n\t\t\t\treturn undefined; // Cannot proceed scanning of the tokenizer is at an arbitrary position\n\t\t\t}\n\t\t}\n\t}\n\n\tasync fromBuffer(input) {\n\t\tif (!(input instanceof Uint8Array || input instanceof ArrayBuffer)) {\n\t\t\tthrow new TypeError(`Expected the \\`input\\` argument to be of type \\`Uint8Array\\` or \\`ArrayBuffer\\`, got \\`${typeof input}\\``);\n\t\t}\n\n\t\tconst buffer = input instanceof Uint8Array ? input : new Uint8Array(input);\n\n\t\tif (!(buffer?.length > 1)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.fromTokenizer(strtok3.fromBuffer(buffer, this.tokenizerOptions));\n\t}\n\n\tasync fromBlob(blob) {\n\t\tconst tokenizer = strtok3.fromBlob(blob, this.tokenizerOptions);\n\t\ttry {\n\t\t\treturn await this.fromTokenizer(tokenizer);\n\t\t} finally {\n\t\t\tawait tokenizer.close();\n\t\t}\n\t}\n\n\tasync fromStream(stream) {\n\t\tconst tokenizer = strtok3.fromWebStream(stream, this.tokenizerOptions);\n\t\ttry {\n\t\t\treturn await this.fromTokenizer(tokenizer);\n\t\t} finally {\n\t\t\tawait tokenizer.close();\n\t\t}\n\t}\n\n\tasync toDetectionStream(stream, options) {\n\t\tconst {sampleSize = reasonableDetectionSizeInBytes} = options;\n\t\tlet detectedFileType;\n\t\tlet firstChunk;\n\n\t\tconst reader = stream.getReader({mode: 'byob'});\n\t\ttry {\n\t\t\t// Read the first chunk from the stream\n\t\t\tconst {value: chunk, done} = await reader.read(new Uint8Array(sampleSize));\n\t\t\tfirstChunk = chunk;\n\t\t\tif (!done && chunk) {\n\t\t\t\ttry {\n\t\t\t\t\t// Attempt to detect the file type from the chunk\n\t\t\t\t\tdetectedFileType = await this.fromBuffer(chunk.subarray(0, sampleSize));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\t\t\t\tthrow error; // Re-throw non-EndOfStreamError\n\t\t\t\t\t}\n\n\t\t\t\t\tdetectedFileType = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirstChunk = chunk;\n\t\t} finally {\n\t\t\treader.releaseLock(); // Ensure the reader is released\n\t\t}\n\n\t\t// Create a new ReadableStream to manage locking issues\n\t\tconst transformStream = new TransformStream({\n\t\t\tasync start(controller) {\n\t\t\t\tcontroller.enqueue(firstChunk); // Enqueue the initial chunk\n\t\t\t},\n\t\t\ttransform(chunk, controller) {\n\t\t\t\t// Pass through the chunks without modification\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t},\n\t\t});\n\n\t\tconst newStream = stream.pipeThrough(transformStream);\n\t\tnewStream.fileType = detectedFileType;\n\n\t\treturn newStream;\n\t}\n\n\tcheck(header, options) {\n\t\treturn _check(this.buffer, header, options);\n\t}\n\n\tcheckString(header, options) {\n\t\treturn this.check(stringToBytes(header, options?.encoding), options);\n\t}\n\n\t// Detections with a high degree of certainty in identifying the correct file type\n\tdetectConfident = async tokenizer => {\n\t\tthis.buffer = new Uint8Array(reasonableDetectionSizeInBytes);\n\n\t\t// Keep reading until EOF if the file size is unknown.\n\t\tif (tokenizer.fileInfo.size === undefined) {\n\t\t\ttokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;\n\t\t}\n\n\t\tthis.tokenizer = tokenizer;\n\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: 32, mayBeLess: true});\n\n\t\t// -- 2-byte signatures --\n\n\t\tif (this.check([0x42, 0x4D])) {\n\t\t\treturn {\n\t\t\t\text: 'bmp',\n\t\t\t\tmime: 'image/bmp',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x0B, 0x77])) {\n\t\t\treturn {\n\t\t\t\text: 'ac3',\n\t\t\t\tmime: 'audio/vnd.dolby.dd-raw',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x78, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'dmg',\n\t\t\t\tmime: 'application/x-apple-diskimage',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4D, 0x5A])) {\n\t\t\treturn {\n\t\t\t\text: 'exe',\n\t\t\t\tmime: 'application/x-msdownload',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x25, 0x21])) {\n\t\t\tawait tokenizer.peekBuffer(this.buffer, {length: 24, mayBeLess: true});\n\n\t\t\tif (\n\t\t\t\tthis.checkString('PS-Adobe-', {offset: 2})\n\t\t\t\t&& this.checkString(' EPSF-', {offset: 14})\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'eps',\n\t\t\t\t\tmime: 'application/eps',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'ps',\n\t\t\t\tmime: 'application/postscript',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x1F, 0xA0])\n\t\t\t|| this.check([0x1F, 0x9D])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'Z',\n\t\t\t\tmime: 'application/x-compress',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xC7, 0x71])) {\n\t\t\treturn {\n\t\t\t\text: 'cpio',\n\t\t\t\tmime: 'application/x-cpio',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x60, 0xEA])) {\n\t\t\treturn {\n\t\t\t\text: 'arj',\n\t\t\t\tmime: 'application/x-arj',\n\t\t\t};\n\t\t}\n\n\t\t// -- 3-byte signatures --\n\n\t\tif (this.check([0xEF, 0xBB, 0xBF])) { // UTF-8-BOM\n\t\t\t// Strip off UTF-8-BOM\n\t\t\tthis.tokenizer.ignore(3);\n\t\t\treturn this.detectConfident(tokenizer);\n\t\t}\n\n\t\tif (this.check([0x47, 0x49, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'gif',\n\t\t\t\tmime: 'image/gif',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x49, 0x49, 0xBC])) {\n\t\t\treturn {\n\t\t\t\text: 'jxr',\n\t\t\t\tmime: 'image/vnd.ms-photo',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x1F, 0x8B, 0x8])) {\n\t\t\tconst gzipHandler = new GzipHandler(tokenizer);\n\n\t\t\tconst stream = gzipHandler.inflate();\n\t\t\tlet shouldCancelStream = true;\n\t\t\ttry {\n\t\t\t\tlet compressedFileType;\n\t\t\t\ttry {\n\t\t\t\t\tcompressedFileType = await this.fromStream(stream);\n\t\t\t\t} catch {\n\t\t\t\t\tshouldCancelStream = false;\n\t\t\t\t}\n\n\t\t\t\tif (compressedFileType && compressedFileType.ext === 'tar') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'tar.gz',\n\t\t\t\t\t\tmime: 'application/gzip',\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (shouldCancelStream) {\n\t\t\t\t\tawait stream.cancel();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'gz',\n\t\t\t\tmime: 'application/gzip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x5A, 0x68])) {\n\t\t\treturn {\n\t\t\t\text: 'bz2',\n\t\t\t\tmime: 'application/x-bzip2',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('ID3')) {\n\t\t\tawait tokenizer.ignore(6); // Skip ID3 header until the header size\n\t\t\tconst id3HeaderLength = await tokenizer.readToken(uint32SyncSafeToken);\n\t\t\tif (tokenizer.position + id3HeaderLength > tokenizer.fileInfo.size) {\n\t\t\t\t// Guess file type based on ID3 header for backward compatibility\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp3',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(id3HeaderLength);\n\t\t\treturn this.fromTokenizer(tokenizer); // Skip ID3 header, recursion\n\t\t}\n\n\t\t// Musepack, SV7\n\t\tif (this.checkString('MP+')) {\n\t\t\treturn {\n\t\t\t\text: 'mpc',\n\t\t\t\tmime: 'audio/x-musepack',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\t(this.buffer[0] === 0x43 || this.buffer[0] === 0x46)\n\t\t\t&& this.check([0x57, 0x53], {offset: 1})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'swf',\n\t\t\t\tmime: 'application/x-shockwave-flash',\n\t\t\t};\n\t\t}\n\n\t\t// -- 4-byte signatures --\n\n\t\t// Requires a sample size of 4 bytes\n\t\tif (this.check([0xFF, 0xD8, 0xFF])) {\n\t\t\tif (this.check([0xF7], {offset: 3})) { // JPG7/SOF55, indicating a ISO/IEC 14495 / JPEG-LS file\n\t\t\t\treturn {\n\t\t\t\t\text: 'jls',\n\t\t\t\t\tmime: 'image/jls',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'jpg',\n\t\t\t\tmime: 'image/jpeg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4F, 0x62, 0x6A, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'avro',\n\t\t\t\tmime: 'application/avro',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('FLIF')) {\n\t\t\treturn {\n\t\t\t\text: 'flif',\n\t\t\t\tmime: 'image/flif',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('8BPS')) {\n\t\t\treturn {\n\t\t\t\text: 'psd',\n\t\t\t\tmime: 'image/vnd.adobe.photoshop',\n\t\t\t};\n\t\t}\n\n\t\t// Musepack, SV8\n\t\tif (this.checkString('MPCK')) {\n\t\t\treturn {\n\t\t\t\text: 'mpc',\n\t\t\t\tmime: 'audio/x-musepack',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('FORM')) {\n\t\t\treturn {\n\t\t\t\text: 'aif',\n\t\t\t\tmime: 'audio/aiff',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('icns', {offset: 0})) {\n\t\t\treturn {\n\t\t\t\text: 'icns',\n\t\t\t\tmime: 'image/icns',\n\t\t\t};\n\t\t}\n\n\t\t// Zip-based file formats\n\t\t// Need to be before the `zip` check\n\t\tif (this.check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature\n\t\t\tlet fileType;\n\t\t\tawait new ZipHandler(tokenizer).unzip(zipHeader => {\n\t\t\t\tswitch (zipHeader.filename) {\n\t\t\t\t\tcase 'META-INF/mozilla.rsa':\n\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\text: 'xpi',\n\t\t\t\t\t\t\tmime: 'application/x-xpinstall',\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\t\t\t\t\tcase 'META-INF/MANIFEST.MF':\n\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\text: 'jar',\n\t\t\t\t\t\t\tmime: 'application/java-archive',\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\t\t\t\t\tcase 'mimetype':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync handler(fileData) {\n\t\t\t\t\t\t\t\t// Use TextDecoder to decode the UTF-8 encoded data\n\t\t\t\t\t\t\t\tconst mimeType = new TextDecoder('utf-8').decode(fileData).trim();\n\t\t\t\t\t\t\t\tfileType = getFileTypeFromMimeType(mimeType);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\n\t\t\t\t\tcase '[Content_Types].xml':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync handler(fileData) {\n\t\t\t\t\t\t\t\t// Use TextDecoder to decode the UTF-8 encoded data\n\t\t\t\t\t\t\t\tlet xmlContent = new TextDecoder('utf-8').decode(fileData);\n\t\t\t\t\t\t\t\tconst endPos = xmlContent.indexOf('.main+xml\"');\n\t\t\t\t\t\t\t\tif (endPos === -1) {\n\t\t\t\t\t\t\t\t\tconst mimeType = 'application/vnd.ms-package.3dmanufacturing-3dmodel+xml';\n\t\t\t\t\t\t\t\t\tif (xmlContent.includes(`ContentType=\"${mimeType}\"`)) {\n\t\t\t\t\t\t\t\t\t\tfileType = getFileTypeFromMimeType(mimeType);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\txmlContent = xmlContent.slice(0, Math.max(0, endPos));\n\t\t\t\t\t\t\t\t\tconst firstPos = xmlContent.lastIndexOf('\"');\n\t\t\t\t\t\t\t\t\tconst mimeType = xmlContent.slice(Math.max(0, firstPos + 1));\n\t\t\t\t\t\t\t\t\tfileType = getFileTypeFromMimeType(mimeType);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (/classes\\d*\\.dex/.test(zipHeader.filename)) {\n\t\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\t\text: 'apk',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.android.package-archive',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn {stop: true};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {};\n\t\t\t\t}\n\t\t\t}).catch(error => {\n\t\t\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\t\t\tthrow error; // Re-throw non-EndOfStreamError\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn fileType ?? {\n\t\t\t\text: 'zip',\n\t\t\t\tmime: 'application/zip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('OggS')) {\n\t\t\t// This is an OGG container\n\t\t\tawait tokenizer.ignore(28);\n\t\t\tconst type = new Uint8Array(8);\n\t\t\tawait tokenizer.readBuffer(type);\n\n\t\t\t// Needs to be before `ogg` check\n\t\t\tif (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'opus',\n\t\t\t\t\tmime: 'audio/ogg; codecs=opus',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If ' theora' in header.\n\t\t\tif (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogv',\n\t\t\t\t\tmime: 'video/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If '\\x01video' in header.\n\t\t\tif (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogm',\n\t\t\t\t\tmime: 'video/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If ' FLAC' in header https://xiph.org/flac/faq.html\n\t\t\tif (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'oga',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// 'Speex ' in header https://en.wikipedia.org/wiki/Speex\n\t\t\tif (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'spx',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If '\\x01vorbis' in header\n\t\t\tif (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogg',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\t\treturn {\n\t\t\t\text: 'ogx',\n\t\t\t\tmime: 'application/ogg',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x50, 0x4B])\n\t\t\t&& (this.buffer[2] === 0x3 || this.buffer[2] === 0x5 || this.buffer[2] === 0x7)\n\t\t\t&& (this.buffer[3] === 0x4 || this.buffer[3] === 0x6 || this.buffer[3] === 0x8)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'zip',\n\t\t\t\tmime: 'application/zip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('MThd')) {\n\t\t\treturn {\n\t\t\t\text: 'mid',\n\t\t\t\tmime: 'audio/midi',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('wOFF')\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x01, 0x00, 0x00], {offset: 4})\n\t\t\t\t|| this.checkString('OTTO', {offset: 4})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'woff',\n\t\t\t\tmime: 'font/woff',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('wOF2')\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x01, 0x00, 0x00], {offset: 4})\n\t\t\t\t|| this.checkString('OTTO', {offset: 4})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'woff2',\n\t\t\t\tmime: 'font/woff2',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xD4, 0xC3, 0xB2, 0xA1]) || this.check([0xA1, 0xB2, 0xC3, 0xD4])) {\n\t\t\treturn {\n\t\t\t\text: 'pcap',\n\t\t\t\tmime: 'application/vnd.tcpdump.pcap',\n\t\t\t};\n\t\t}\n\n\t\t// Sony DSD Stream File (DSF)\n\t\tif (this.checkString('DSD ')) {\n\t\t\treturn {\n\t\t\t\text: 'dsf',\n\t\t\t\tmime: 'audio/x-dsf', // Non-standard\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('LZIP')) {\n\t\t\treturn {\n\t\t\t\text: 'lz',\n\t\t\t\tmime: 'application/x-lzip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('fLaC')) {\n\t\t\treturn {\n\t\t\t\text: 'flac',\n\t\t\t\tmime: 'audio/flac',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x50, 0x47, 0xFB])) {\n\t\t\treturn {\n\t\t\t\text: 'bpg',\n\t\t\t\tmime: 'image/bpg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('wvpk')) {\n\t\t\treturn {\n\t\t\t\text: 'wv',\n\t\t\t\tmime: 'audio/wavpack',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('%PDF')) {\n\t\t\t// Assume this is just a normal PDF\n\t\t\treturn {\n\t\t\t\text: 'pdf',\n\t\t\t\tmime: 'application/pdf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x61, 0x73, 0x6D])) {\n\t\t\treturn {\n\t\t\t\text: 'wasm',\n\t\t\t\tmime: 'application/wasm',\n\t\t\t};\n\t\t}\n\n\t\t// TIFF, little-endian type\n\t\tif (this.check([0x49, 0x49])) {\n\t\t\tconst fileType = await this.readTiffHeader(false);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\n\t\t// TIFF, big-endian type\n\t\tif (this.check([0x4D, 0x4D])) {\n\t\t\tconst fileType = await this.readTiffHeader(true);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('MAC ')) {\n\t\t\treturn {\n\t\t\t\text: 'ape',\n\t\t\t\tmime: 'audio/ape',\n\t\t\t};\n\t\t}\n\n\t\t// https://github.com/file/file/blob/master/magic/Magdir/matroska\n\t\tif (this.check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML\n\t\t\tasync function readField() {\n\t\t\t\tconst msb = await tokenizer.peekNumber(Token.UINT8);\n\t\t\t\tlet mask = 0x80;\n\t\t\t\tlet ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D\n\n\t\t\t\twhile ((msb & mask) === 0 && mask !== 0) {\n\t\t\t\t\t++ic;\n\t\t\t\t\tmask >>= 1;\n\t\t\t\t}\n\n\t\t\t\tconst id = new Uint8Array(ic + 1);\n\t\t\t\tawait tokenizer.readBuffer(id);\n\t\t\t\treturn id;\n\t\t\t}\n\n\t\t\tasync function readElement() {\n\t\t\t\tconst idField = await readField();\n\t\t\t\tconst lengthField = await readField();\n\n\t\t\t\tlengthField[0] ^= 0x80 >> (lengthField.length - 1);\n\t\t\t\tconst nrLength = Math.min(6, lengthField.length); // JavaScript can max read 6 bytes integer\n\n\t\t\t\tconst idView = new DataView(idField.buffer);\n\t\t\t\tconst lengthView = new DataView(lengthField.buffer, lengthField.length - nrLength, nrLength);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: getUintBE(idView),\n\t\t\t\t\tlen: getUintBE(lengthView),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tasync function readChildren(children) {\n\t\t\t\twhile (children > 0) {\n\t\t\t\t\tconst element = await readElement();\n\t\t\t\t\tif (element.id === 0x42_82) {\n\t\t\t\t\t\tconst rawValue = await tokenizer.readToken(new Token.StringType(element.len));\n\t\t\t\t\t\treturn rawValue.replaceAll(/\\00.*$/g, ''); // Return DocType\n\t\t\t\t\t}\n\n\t\t\t\t\tawait tokenizer.ignore(element.len); // ignore payload\n\t\t\t\t\t--children;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst re = await readElement();\n\t\t\tconst documentType = await readChildren(re.len);\n\n\t\t\tswitch (documentType) {\n\t\t\t\tcase 'webm':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'webm',\n\t\t\t\t\t\tmime: 'video/webm',\n\t\t\t\t\t};\n\n\t\t\t\tcase 'matroska':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'mkv',\n\t\t\t\t\t\tmime: 'video/matroska',\n\t\t\t\t\t};\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('SQLi')) {\n\t\t\treturn {\n\t\t\t\text: 'sqlite',\n\t\t\t\tmime: 'application/x-sqlite3',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\t\treturn {\n\t\t\t\text: 'nes',\n\t\t\t\tmime: 'application/x-nintendo-nes-rom',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Cr24')) {\n\t\t\treturn {\n\t\t\t\text: 'crx',\n\t\t\t\tmime: 'application/x-google-chrome-extension',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('MSCF')\n\t\t\t|| this.checkString('ISc(')\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'cab',\n\t\t\t\tmime: 'application/vnd.ms-cab-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\t\treturn {\n\t\t\t\text: 'rpm',\n\t\t\t\tmime: 'application/x-rpm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xC5, 0xD0, 0xD3, 0xC6])) {\n\t\t\treturn {\n\t\t\t\text: 'eps',\n\t\t\t\tmime: 'application/eps',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x28, 0xB5, 0x2F, 0xFD])) {\n\t\t\treturn {\n\t\t\t\text: 'zst',\n\t\t\t\tmime: 'application/zstd',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x7F, 0x45, 0x4C, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'elf',\n\t\t\t\tmime: 'application/x-elf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x21, 0x42, 0x44, 0x4E])) {\n\t\t\treturn {\n\t\t\t\text: 'pst',\n\t\t\t\tmime: 'application/vnd.ms-outlook',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('PAR1') || this.checkString('PARE')) {\n\t\t\treturn {\n\t\t\t\text: 'parquet',\n\t\t\t\tmime: 'application/vnd.apache.parquet',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('ttcf')) {\n\t\t\treturn {\n\t\t\t\text: 'ttc',\n\t\t\t\tmime: 'font/collection',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0xFE, 0xED, 0xFA, 0xCE]) // 32-bit, big-endian\n\t\t\t|| this.check([0xFE, 0xED, 0xFA, 0xCF]) // 64-bit, big-endian\n\t\t\t|| this.check([0xCE, 0xFA, 0xED, 0xFE]) // 32-bit, little-endian\n\t\t\t|| this.check([0xCF, 0xFA, 0xED, 0xFE]) // 64-bit, little-endian\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'macho',\n\t\t\t\tmime: 'application/x-mach-binary',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x04, 0x22, 0x4D, 0x18])) {\n\t\t\treturn {\n\t\t\t\text: 'lz4',\n\t\t\t\tmime: 'application/x-lz4', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('regf')) {\n\t\t\treturn {\n\t\t\t\text: 'dat',\n\t\t\t\tmime: 'application/x-ft-windows-registry-hive',\n\t\t\t};\n\t\t}\n\n\t\t// SPSS Statistical Data File\n\t\tif (this.checkString('$FL2') || this.checkString('$FL3')) {\n\t\t\treturn {\n\t\t\t\text: 'sav',\n\t\t\t\tmime: 'application/x-spss-sav',\n\t\t\t};\n\t\t}\n\n\t\t// -- 5-byte signatures --\n\n\t\tif (this.check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'otf',\n\t\t\t\tmime: 'font/otf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('#!AMR')) {\n\t\t\treturn {\n\t\t\t\text: 'amr',\n\t\t\t\tmime: 'audio/amr',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('{\\\\rtf')) {\n\t\t\treturn {\n\t\t\t\text: 'rtf',\n\t\t\t\tmime: 'application/rtf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x46, 0x4C, 0x56, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'flv',\n\t\t\t\tmime: 'video/x-flv',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('IMPM')) {\n\t\t\treturn {\n\t\t\t\text: 'it',\n\t\t\t\tmime: 'audio/x-it',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('-lh0-', {offset: 2})\n\t\t\t|| this.checkString('-lh1-', {offset: 2})\n\t\t\t|| this.checkString('-lh2-', {offset: 2})\n\t\t\t|| this.checkString('-lh3-', {offset: 2})\n\t\t\t|| this.checkString('-lh4-', {offset: 2})\n\t\t\t|| this.checkString('-lh5-', {offset: 2})\n\t\t\t|| this.checkString('-lh6-', {offset: 2})\n\t\t\t|| this.checkString('-lh7-', {offset: 2})\n\t\t\t|| this.checkString('-lzs-', {offset: 2})\n\t\t\t|| this.checkString('-lz4-', {offset: 2})\n\t\t\t|| this.checkString('-lz5-', {offset: 2})\n\t\t\t|| this.checkString('-lhd-', {offset: 2})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'lzh',\n\t\t\t\tmime: 'application/x-lzh-compressed',\n\t\t\t};\n\t\t}\n\n\t\t// MPEG program stream (PS or MPEG-PS)\n\t\tif (this.check([0x00, 0x00, 0x01, 0xBA])) {\n\t\t\t// MPEG-PS, MPEG-1 Part 1\n\t\t\tif (this.check([0x21], {offset: 4, mask: [0xF1]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mpg', // May also be .ps, .mpeg\n\t\t\t\t\tmime: 'video/MP1S',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// MPEG-PS, MPEG-2 Part 1\n\t\t\tif (this.check([0x44], {offset: 4, mask: [0xC4]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mpg', // May also be .mpg, .m2p, .vob or .sub\n\t\t\t\t\tmime: 'video/MP2P',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('ITSF')) {\n\t\t\treturn {\n\t\t\t\text: 'chm',\n\t\t\t\tmime: 'application/vnd.ms-htmlhelp',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xCA, 0xFE, 0xBA, 0xBE])) {\n\t\t\t// Java bytecode and Mach-O universal binaries have the same magic number.\n\t\t\t// We disambiguate based on the next 4 bytes, as done by `file`.\n\t\t\t// See https://github.com/file/file/blob/master/magic/Magdir/cafebabe\n\t\t\tconst machOArchitectureCount = Token.UINT32_BE.get(this.buffer, 4);\n\t\t\tconst javaClassFileMajorVersion = Token.UINT16_BE.get(this.buffer, 6);\n\n\t\t\tif (machOArchitectureCount > 0 && machOArchitectureCount <= 30) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'macho',\n\t\t\t\t\tmime: 'application/x-mach-binary',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (javaClassFileMajorVersion > 30) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'class',\n\t\t\t\t\tmime: 'application/java-vm',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('.RMF')) {\n\t\t\treturn {\n\t\t\t\text: 'rm',\n\t\t\t\tmime: 'application/vnd.rn-realmedia',\n\t\t\t};\n\t\t}\n\n\t\t// -- 5-byte signatures --\n\n\t\tif (this.checkString('DRACO')) {\n\t\t\treturn {\n\t\t\t\text: 'drc',\n\t\t\t\tmime: 'application/vnd.google.draco', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\t// -- 6-byte signatures --\n\n\t\tif (this.check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'xz',\n\t\t\t\tmime: 'application/x-xz',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('<?xml ')) {\n\t\t\treturn {\n\t\t\t\text: 'xml',\n\t\t\t\tmime: 'application/xml',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\t\treturn {\n\t\t\t\text: '7z',\n\t\t\t\tmime: 'application/x-7z-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7])\n\t\t\t&& (this.buffer[6] === 0x0 || this.buffer[6] === 0x1)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'rar',\n\t\t\t\tmime: 'application/x-rar-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('solid ')) {\n\t\t\treturn {\n\t\t\t\text: 'stl',\n\t\t\t\tmime: 'model/stl',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('AC')) {\n\t\t\tconst version = new Token.StringType(4, 'latin1').get(this.buffer, 2);\n\t\t\tif (version.match('^d*') && version >= 1000 && version <= 1050) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'dwg',\n\t\t\t\t\tmime: 'image/vnd.dwg',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('070707')) {\n\t\t\treturn {\n\t\t\t\text: 'cpio',\n\t\t\t\tmime: 'application/x-cpio',\n\t\t\t};\n\t\t}\n\n\t\t// -- 7-byte signatures --\n\n\t\tif (this.checkString('BLENDER')) {\n\t\t\treturn {\n\t\t\t\text: 'blend',\n\t\t\t\tmime: 'application/x-blender',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('!<arch>')) {\n\t\t\tawait tokenizer.ignore(8);\n\t\t\tconst string = await tokenizer.readToken(new Token.StringType(13, 'ascii'));\n\t\t\tif (string === 'debian-binary') {\n\t\t\t\treturn {\n\t\t\t\t\text: 'deb',\n\t\t\t\t\tmime: 'application/x-deb',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'ar',\n\t\t\t\tmime: 'application/x-unix-archive',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('WEBVTT')\n\t\t\t&&\t(\n\t\t\t\t// One of LF, CR, tab, space, or end of file must follow \"WEBVTT\" per the spec (see `fixture/fixture-vtt-*.vtt` for examples). Note that `\\0` is technically the null character (there is no such thing as an EOF character). However, checking for `\\0` gives us the same result as checking for the end of the stream.\n\t\t\t\t(['\\n', '\\r', '\\t', ' ', '\\0'].some(char7 => this.checkString(char7, {offset: 6}))))\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'vtt',\n\t\t\t\tmime: 'text/vtt',\n\t\t\t};\n\t\t}\n\n\t\t// -- 8-byte signatures --\n\n\t\tif (this.check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t\t// APNG format (https://wiki.mozilla.org/APNG_Specification)\n\t\t\t// 1. Find the first IDAT (image data) chunk (49 44 41 54)\n\t\t\t// 2. Check if there is an \"acTL\" chunk before the IDAT one (61 63 54 4C)\n\n\t\t\t// Offset calculated as follows:\n\t\t\t// - 8 bytes: PNG signature\n\t\t\t// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk\n\n\t\t\tawait tokenizer.ignore(8); // ignore PNG signature\n\n\t\t\tasync function readChunkHeader() {\n\t\t\t\treturn {\n\t\t\t\t\tlength: await tokenizer.readToken(Token.INT32_BE),\n\t\t\t\t\ttype: await tokenizer.readToken(new Token.StringType(4, 'latin1')),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tconst chunk = await readChunkHeader();\n\t\t\t\tif (chunk.length < 0) {\n\t\t\t\t\treturn; // Invalid chunk length\n\t\t\t\t}\n\n\t\t\t\tswitch (chunk.type) {\n\t\t\t\t\tcase 'IDAT':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'png',\n\t\t\t\t\t\t\tmime: 'image/png',\n\t\t\t\t\t\t};\n\t\t\t\t\tcase 'acTL':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'apng',\n\t\t\t\t\t\t\tmime: 'image/apng',\n\t\t\t\t\t\t};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tawait tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC\n\t\t\t\t}\n\t\t\t} while (tokenizer.position + 8 < tokenizer.fileInfo.size);\n\n\t\t\treturn {\n\t\t\t\text: 'png',\n\t\t\t\tmime: 'image/png',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'arrow',\n\t\t\t\tmime: 'application/vnd.apache.arrow.file',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'glb',\n\t\t\t\tmime: 'model/gltf-binary',\n\t\t\t};\n\t\t}\n\n\t\t// `mov` format variants\n\t\tif (\n\t\t\tthis.check([0x66, 0x72, 0x65, 0x65], {offset: 4}) // `free`\n\t\t\t|| this.check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) // `mdat` MJPEG\n\t\t\t|| this.check([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) // `moov`\n\t\t\t|| this.check([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mov',\n\t\t\t\tmime: 'video/quicktime',\n\t\t\t};\n\t\t}\n\n\t\t// -- 9-byte signatures --\n\n\t\tif (this.check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {\n\t\t\treturn {\n\t\t\t\text: 'orf',\n\t\t\t\tmime: 'image/x-olympus-orf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('gimp xcf ')) {\n\t\t\treturn {\n\t\t\t\text: 'xcf',\n\t\t\t\tmime: 'image/x-xcf',\n\t\t\t};\n\t\t}\n\n\t\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\t\t// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.\n\t\t// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n\t\t// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n\t\tif (\n\t\t\tthis.checkString('ftyp', {offset: 4})\n\t\t\t&& (this.buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?\n\t\t) {\n\t\t\t// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.\n\t\t\t// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.\n\t\t\tconst brandMajor = new Token.StringType(4, 'latin1').get(this.buffer, 8).replace('\\0', ' ').trim();\n\t\t\tswitch (brandMajor) {\n\t\t\t\tcase 'avif':\n\t\t\t\tcase 'avis':\n\t\t\t\t\treturn {ext: 'avif', mime: 'image/avif'};\n\t\t\t\tcase 'mif1':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heif'};\n\t\t\t\tcase 'msf1':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heif-sequence'};\n\t\t\t\tcase 'heic':\n\t\t\t\tcase 'heix':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heic'};\n\t\t\t\tcase 'hevc':\n\t\t\t\tcase 'hevx':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heic-sequence'};\n\t\t\t\tcase 'qt':\n\t\t\t\t\treturn {ext: 'mov', mime: 'video/quicktime'};\n\t\t\t\tcase 'M4V':\n\t\t\t\tcase 'M4VH':\n\t\t\t\tcase 'M4VP':\n\t\t\t\t\treturn {ext: 'm4v', mime: 'video/x-m4v'};\n\t\t\t\tcase 'M4P':\n\t\t\t\t\treturn {ext: 'm4p', mime: 'video/mp4'};\n\t\t\t\tcase 'M4B':\n\t\t\t\t\treturn {ext: 'm4b', mime: 'audio/mp4'};\n\t\t\t\tcase 'M4A':\n\t\t\t\t\treturn {ext: 'm4a', mime: 'audio/x-m4a'};\n\t\t\t\tcase 'F4V':\n\t\t\t\t\treturn {ext: 'f4v', mime: 'video/mp4'};\n\t\t\t\tcase 'F4P':\n\t\t\t\t\treturn {ext: 'f4p', mime: 'video/mp4'};\n\t\t\t\tcase 'F4A':\n\t\t\t\t\treturn {ext: 'f4a', mime: 'audio/mp4'};\n\t\t\t\tcase 'F4B':\n\t\t\t\t\treturn {ext: 'f4b', mime: 'audio/mp4'};\n\t\t\t\tcase 'crx':\n\t\t\t\t\treturn {ext: 'cr3', mime: 'image/x-canon-cr3'};\n\t\t\t\tdefault:\n\t\t\t\t\tif (brandMajor.startsWith('3g')) {\n\t\t\t\t\t\tif (brandMajor.startsWith('3g2')) {\n\t\t\t\t\t\t\treturn {ext: '3g2', mime: 'video/3gpp2'};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {ext: '3gp', mime: 'video/3gpp'};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {ext: 'mp4', mime: 'video/mp4'};\n\t\t\t}\n\t\t}\n\n\t\t// -- 10-byte signatures --\n\n\t\tif (this.checkString('REGEDIT4\\r\\n')) {\n\t\t\treturn {\n\t\t\t\text: 'reg',\n\t\t\t\tmime: 'application/x-ms-regedit',\n\t\t\t};\n\t\t}\n\n\t\t// -- 12-byte signatures --\n\n\t\t// RIFF file format which might be AVI, WAV, QCP, etc\n\t\tif (this.check([0x52, 0x49, 0x46, 0x46])) {\n\t\t\tif (this.checkString('WEBP', {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'webp',\n\t\t\t\t\tmime: 'image/webp',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'avi',\n\t\t\t\t\tmime: 'video/vnd.avi',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'wav',\n\t\t\t\t\tmime: 'audio/wav',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// QLCM, QCP file\n\t\t\tif (this.check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'qcp',\n\t\t\t\t\tmime: 'audio/qcelp',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {\n\t\t\treturn {\n\t\t\t\text: 'rw2',\n\t\t\t\tmime: 'image/x-panasonic-rw2',\n\t\t\t};\n\t\t}\n\n\t\t// ASF_Header_Object first 80 bytes\n\t\tif (this.check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\t\tasync function readHeader() {\n\t\t\t\tconst guid = new Uint8Array(16);\n\t\t\t\tawait tokenizer.readBuffer(guid);\n\t\t\t\treturn {\n\t\t\t\t\tid: guid,\n\t\t\t\t\tsize: Number(await tokenizer.readToken(Token.UINT64_LE)),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(30);\n\t\t\t// Search for header should be in first 1KB of file.\n\t\t\twhile (tokenizer.position + 24 < tokenizer.fileInfo.size) {\n\t\t\t\tconst header = await readHeader();\n\t\t\t\tlet payload = header.size - 24;\n\t\t\t\tif (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {\n\t\t\t\t\t// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)\n\t\t\t\t\tconst typeId = new Uint8Array(16);\n\t\t\t\t\tpayload -= await tokenizer.readBuffer(typeId);\n\n\t\t\t\t\tif (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t\t// Found audio:\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\t\tmime: 'audio/x-ms-asf',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t\t// Found video:\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\t\tmime: 'video/x-ms-asf',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tawait tokenizer.ignore(payload);\n\t\t\t}\n\n\t\t\t// Default to ASF generic extension\n\t\t\treturn {\n\t\t\t\text: 'asf',\n\t\t\t\tmime: 'application/vnd.ms-asf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t\treturn {\n\t\t\t\text: 'ktx',\n\t\t\t\tmime: 'image/ktx',\n\t\t\t};\n\t\t}\n\n\t\tif ((this.check([0x7E, 0x10, 0x04]) || this.check([0x7E, 0x18, 0x04])) && this.check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {\n\t\t\treturn {\n\t\t\t\text: 'mie',\n\t\t\t\tmime: 'application/x-mie',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {\n\t\t\treturn {\n\t\t\t\text: 'shp',\n\t\t\t\tmime: 'application/x-esri-shape',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFF, 0x4F, 0xFF, 0x51])) {\n\t\t\treturn {\n\t\t\t\text: 'j2c',\n\t\t\t\tmime: 'image/j2c',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t\t// JPEG-2000 family\n\n\t\t\tawait tokenizer.ignore(20);\n\t\t\tconst type = await tokenizer.readToken(new Token.StringType(4, 'ascii'));\n\t\t\tswitch (type) {\n\t\t\t\tcase 'jp2 ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jp2',\n\t\t\t\t\t\tmime: 'image/jp2',\n\t\t\t\t\t};\n\t\t\t\tcase 'jpx ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jpx',\n\t\t\t\t\t\tmime: 'image/jpx',\n\t\t\t\t\t};\n\t\t\t\tcase 'jpm ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jpm',\n\t\t\t\t\t\tmime: 'image/jpm',\n\t\t\t\t\t};\n\t\t\t\tcase 'mjp2':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'mj2',\n\t\t\t\t\t\tmime: 'image/mj2',\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0xFF, 0x0A])\n\t\t\t|| this.check([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'jxl',\n\t\t\t\tmime: 'image/jxl',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFE, 0xFF])) { // UTF-16-BOM-BE\n\t\t\tif (this.checkString('<?xml ', {offset: 2, encoding: 'utf-16be'})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'xml',\n\t\t\t\t\tmime: 'application/xml',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn undefined; // Some unknown text based format\n\t\t}\n\n\t\tif (this.check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\t\t// Detected Microsoft Compound File Binary File (MS-CFB) Format.\n\t\t\treturn {\n\t\t\t\text: 'cfb',\n\t\t\t\tmime: 'application/x-cfb',\n\t\t\t};\n\t\t}\n\n\t\t// Increase sample size from 32 to 256.\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\tif (this.check([0x61, 0x63, 0x73, 0x70], {offset: 36})) {\n\t\t\treturn {\n\t\t\t\text: 'icc',\n\t\t\t\tmime: 'application/vnd.iccprofile',\n\t\t\t};\n\t\t}\n\n\t\t// ACE: requires 14 bytes in the buffer\n\t\tif (this.checkString('**ACE', {offset: 7}) && this.checkString('**', {offset: 12})) {\n\t\t\treturn {\n\t\t\t\text: 'ace',\n\t\t\t\tmime: 'application/x-ace-compressed',\n\t\t\t};\n\t\t}\n\n\t\t// -- 15-byte signatures --\n\n\t\tif (this.checkString('BEGIN:')) {\n\t\t\tif (this.checkString('VCARD', {offset: 6})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'vcf',\n\t\t\t\t\tmime: 'text/vcard',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.checkString('VCALENDAR', {offset: 6})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ics',\n\t\t\t\t\tmime: 'text/calendar',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// `raf` is here just to keep all the raw image detectors together.\n\t\tif (this.checkString('FUJIFILMCCD-RAW')) {\n\t\t\treturn {\n\t\t\t\text: 'raf',\n\t\t\t\tmime: 'image/x-fujifilm-raf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Extended Module:')) {\n\t\t\treturn {\n\t\t\t\text: 'xm',\n\t\t\t\tmime: 'audio/x-xm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Creative Voice File')) {\n\t\t\treturn {\n\t\t\t\text: 'voc',\n\t\t\t\tmime: 'audio/x-voc',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x04, 0x00, 0x00, 0x00]) && this.buffer.length >= 16) { // Rough & quick check Pickle/ASAR\n\t\t\tconst jsonSize = new DataView(this.buffer.buffer).getUint32(12, true);\n\n\t\t\tif (jsonSize > 12 && this.buffer.length >= jsonSize + 16) {\n\t\t\t\ttry {\n\t\t\t\t\tconst header = new TextDecoder().decode(this.buffer.subarray(16, jsonSize + 16));\n\t\t\t\t\tconst json = JSON.parse(header);\n\t\t\t\t\t// Check if Pickle is ASAR\n\t\t\t\t\tif (json.files) { // Final check, assuring Pickle/ASAR format\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asar',\n\t\t\t\t\t\t\tmime: 'application/x-asar',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\n\t\tif (this.check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\t\treturn {\n\t\t\t\text: 'mxf',\n\t\t\t\tmime: 'application/mxf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('SCRM', {offset: 44})) {\n\t\t\treturn {\n\t\t\t\text: 's3m',\n\t\t\t\tmime: 'audio/x-s3m',\n\t\t\t};\n\t\t}\n\n\t\t// Raw MPEG-2 transport stream (188-byte packets)\n\t\tif (this.check([0x47]) && this.check([0x47], {offset: 188})) {\n\t\t\treturn {\n\t\t\t\text: 'mts',\n\t\t\t\tmime: 'video/mp2t',\n\t\t\t};\n\t\t}\n\n\t\t// Blu-ray Disc Audio-Video (BDAV) MPEG-2 transport stream has 4-byte TP_extra_header before each 188-byte packet\n\t\tif (this.check([0x47], {offset: 4}) && this.check([0x47], {offset: 196})) {\n\t\t\treturn {\n\t\t\t\text: 'mts',\n\t\t\t\tmime: 'video/mp2t',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\t\treturn {\n\t\t\t\text: 'mobi',\n\t\t\t\tmime: 'application/x-mobipocket-ebook',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {\n\t\t\treturn {\n\t\t\t\text: 'dcm',\n\t\t\t\tmime: 'application/dicom',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'lnk',\n\t\t\t\tmime: 'application/x.ms.shortcut', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'alias',\n\t\t\t\tmime: 'application/x.apple.alias', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Kaydara FBX Binary \\u0000')) {\n\t\t\treturn {\n\t\t\t\text: 'fbx',\n\t\t\t\tmime: 'application/x.autodesk.fbx', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x4C, 0x50], {offset: 34})\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x00, 0x01], {offset: 8})\n\t\t\t\t|| this.check([0x01, 0x00, 0x02], {offset: 8})\n\t\t\t\t|| this.check([0x02, 0x00, 0x02], {offset: 8})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'eot',\n\t\t\t\tmime: 'application/vnd.ms-fontobject',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {\n\t\t\treturn {\n\t\t\t\text: 'indd',\n\t\t\t\tmime: 'application/x-indesign',\n\t\t\t};\n\t\t}\n\n\t\t// -- 16-byte signatures --\n\n\t\t// JMP files - check for both Little Endian and Big Endian signatures\n\t\tif (this.check([0xFF, 0xFF, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00])\n\t\t\t|| this.check([0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'jmp',\n\t\t\t\tmime: 'application/x-jmp-data',\n\t\t\t};\n\t\t}\n\n\t\t// Increase sample size from 256 to 512\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\t// Requires a buffer size of 512 bytes\n\t\tif ((this.checkString('ustar', {offset: 257}) && (this.checkString('\\0', {offset: 262}) || this.checkString(' ', {offset: 262})))\n\t\t\t|| (this.check([0, 0, 0, 0, 0, 0], {offset: 257}) && tarHeaderChecksumMatches(this.buffer))) {\n\t\t\treturn {\n\t\t\t\text: 'tar',\n\t\t\t\tmime: 'application/x-tar',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFF, 0xFE])) { // UTF-16-BOM-LE\n\t\t\tconst encoding = 'utf-16le';\n\t\t\tif (this.checkString('<?xml ', {offset: 2, encoding})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'xml',\n\t\t\t\t\tmime: 'application/xml',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0xFF, 0x0E], {offset: 2}) && this.checkString('SketchUp Model', {offset: 4, encoding})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'skp',\n\t\t\t\t\tmime: 'application/vnd.sketchup.skp',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.checkString('Windows Registry Editor Version 5.00\\r\\n', {offset: 2, encoding})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'reg',\n\t\t\t\t\tmime: 'application/x-ms-regedit',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn undefined; // Some text based format\n\t\t}\n\n\t\tif (this.checkString('-----BEGIN PGP MESSAGE-----')) {\n\t\t\treturn {\n\t\t\t\text: 'pgp',\n\t\t\t\tmime: 'application/pgp-encrypted',\n\t\t\t};\n\t\t}\n\t};\n\t// Detections with limited supporting data, resulting in a higher likelihood of false positives\n\tdetectImprecise = async tokenizer => {\n\t\tthis.buffer = new Uint8Array(reasonableDetectionSizeInBytes);\n\n\t\t// Read initial sample size of 8 bytes\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(8, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\tif (\n\t\t\tthis.check([0x0, 0x0, 0x1, 0xBA])\n\t\t\t|| this.check([0x0, 0x0, 0x1, 0xB3])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mpg',\n\t\t\t\tmime: 'video/mpeg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ttf',\n\t\t\t\tmime: 'font/ttf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x01, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ico',\n\t\t\t\tmime: 'image/x-icon',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x02, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'cur',\n\t\t\t\tmime: 'image/x-icon',\n\t\t\t};\n\t\t}\n\n\t\t// Adjust buffer to `mpegOffsetTolerance`\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(2 + this.options.mpegOffsetTolerance, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\t// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)\n\t\tif (this.buffer.length >= (2 + this.options.mpegOffsetTolerance)) {\n\t\t\tfor (let depth = 0; depth <= this.options.mpegOffsetTolerance; ++depth) {\n\t\t\t\tconst type = this.scanMpeg(depth);\n\t\t\t\tif (type) {\n\t\t\t\t\treturn type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tasync readTiffTag(bigEndian) {\n\t\tconst tagId = await this.tokenizer.readToken(bigEndian ? Token.UINT16_BE : Token.UINT16_LE);\n\t\tthis.tokenizer.ignore(10);\n\t\tswitch (tagId) {\n\t\t\tcase 50_341:\n\t\t\t\treturn {\n\t\t\t\t\text: 'arw',\n\t\t\t\t\tmime: 'image/x-sony-arw',\n\t\t\t\t};\n\t\t\tcase 50_706:\n\t\t\t\treturn {\n\t\t\t\t\text: 'dng',\n\t\t\t\t\tmime: 'image/x-adobe-dng',\n\t\t\t\t};\n\t\t\tdefault:\n\t\t}\n\t}\n\n\tasync readTiffIFD(bigEndian) {\n\t\tconst numberOfTags = await this.tokenizer.readToken(bigEndian ? Token.UINT16_BE : Token.UINT16_LE);\n\t\tfor (let n = 0; n < numberOfTags; ++n) {\n\t\t\tconst fileType = await this.readTiffTag(bigEndian);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync readTiffHeader(bigEndian) {\n\t\tconst version = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 2);\n\t\tconst ifdOffset = (bigEndian ? Token.UINT32_BE : Token.UINT32_LE).get(this.buffer, 4);\n\n\t\tif (version === 42) {\n\t\t\t// TIFF file header\n\t\t\tif (ifdOffset >= 6) {\n\t\t\t\tif (this.checkString('CR', {offset: 8})) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'cr2',\n\t\t\t\t\t\tmime: 'image/x-canon-cr2',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (ifdOffset >= 8) {\n\t\t\t\t\tconst someId1 = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 8);\n\t\t\t\t\tconst someId2 = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 10);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(someId1 === 0x1C && someId2 === 0xFE)\n\t\t\t\t\t\t|| (someId1 === 0x1F && someId2 === 0x0B)) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'nef',\n\t\t\t\t\t\t\tmime: 'image/x-nikon-nef',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.tokenizer.ignore(ifdOffset);\n\t\t\tconst fileType = await this.readTiffIFD(bigEndian);\n\t\t\treturn fileType ?? {\n\t\t\t\text: 'tif',\n\t\t\t\tmime: 'image/tiff',\n\t\t\t};\n\t\t}\n\n\t\tif (version === 43) {\t// Big TIFF file header\n\t\t\treturn {\n\t\t\t\text: 'tif',\n\t\t\t\tmime: 'image/tiff',\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\tScan check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE).\n\n\t@param offset - Offset to scan for sync-preamble.\n\t@returns {{ext: string, mime: string}}\n\t*/\n\tscanMpeg(offset) {\n\t\tif (this.check([0xFF, 0xE0], {offset, mask: [0xFF, 0xE0]})) {\n\t\t\tif (this.check([0x10], {offset: offset + 1, mask: [0x16]})) {\n\t\t\t\t// Check for (ADTS) MPEG-2\n\t\t\t\tif (this.check([0x08], {offset: offset + 1, mask: [0x08]})) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'aac',\n\t\t\t\t\t\tmime: 'audio/aac',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Must be (ADTS) MPEG-4\n\t\t\t\treturn {\n\t\t\t\t\text: 'aac',\n\t\t\t\t\tmime: 'audio/aac',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// MPEG 1 or 2 Layer 3 header\n\t\t\t// Check for MPEG layer 3\n\t\t\tif (this.check([0x02], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp3',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Check for MPEG layer 2\n\t\t\tif (this.check([0x04], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp2',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Check for MPEG layer 1\n\t\t\tif (this.check([0x06], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp1',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const supportedExtensions = new Set(extensions);\nexport const supportedMimeTypes = new Set(mimeTypes);\n","import { fileTypeFromBuffer } from 'file-type';\nimport ContentType from 'content-type';\nimport { parse as mimeTypeParse } from 'media-typer';\nimport initDebug from 'debug';\nimport { MetadataCollector } from './common/MetadataCollector.js';\nimport { TrackType } from './type.js';\nimport { mpegParserLoader } from './mpeg/MpegLoader.js';\nimport { CouldNotDetermineFileTypeError, UnsupportedFileTypeError } from './ParseError.js';\nimport { apeParserLoader } from './apev2/Apev2Loader.js';\nimport { asfParserLoader } from './asf/AsfLoader.js';\nimport { dsdiffParserLoader } from './dsdiff/DsdiffLoader.js';\nimport { aiffParserLoader } from './aiff/AiffLoader.js';\nimport { dsfParserLoader } from './dsf/DsfLoader.js';\nimport { flacParserLoader } from './flac/FlacLoader.js';\nimport { matroskaParserLoader } from './matroska/MatroskaLoader.js';\nimport { mp4ParserLoader } from './mp4/Mp4Loader.js';\nimport { musepackParserLoader } from './musepack/MusepackLoader.js';\nimport { oggParserLoader } from './ogg/OggLoader.js';\nimport { wavpackParserLoader } from './wavpack/WavPackLoader.js';\nimport { riffParserLoader } from './wav/WaveLoader.js';\nimport { scanAppendingHeaders } from './core.js';\nconst debug = initDebug('music-metadata:parser:factory');\nexport function parseHttpContentType(contentType) {\n const type = ContentType.parse(contentType);\n const mime = mimeTypeParse(type.type);\n return {\n type: mime.type,\n subtype: mime.subtype,\n suffix: mime.suffix,\n parameters: type.parameters\n };\n}\nexport class ParserFactory {\n constructor() {\n this.parsers = [];\n [\n flacParserLoader,\n mpegParserLoader,\n apeParserLoader,\n mp4ParserLoader,\n matroskaParserLoader,\n riffParserLoader,\n oggParserLoader,\n asfParserLoader,\n aiffParserLoader,\n wavpackParserLoader,\n musepackParserLoader,\n dsfParserLoader,\n dsdiffParserLoader\n ].forEach(parser => { this.registerParser(parser); });\n }\n registerParser(parser) {\n this.parsers.push(parser);\n }\n async parse(tokenizer, parserLoader, opts) {\n if (tokenizer.supportsRandomAccess()) {\n debug('tokenizer supports random-access, scanning for appending headers');\n await scanAppendingHeaders(tokenizer, opts);\n }\n else {\n debug('tokenizer does not support random-access, cannot scan for appending headers');\n }\n if (!parserLoader) {\n const buf = new Uint8Array(4100);\n if (tokenizer.fileInfo.mimeType) {\n parserLoader = this.findLoaderForContentType(tokenizer.fileInfo.mimeType);\n }\n if (!parserLoader && tokenizer.fileInfo.path) {\n parserLoader = this.findLoaderForExtension(tokenizer.fileInfo.path);\n }\n if (!parserLoader) {\n // Parser could not be determined on MIME-type or extension\n debug('Guess parser on content...');\n await tokenizer.peekBuffer(buf, { mayBeLess: true });\n const guessedType = await fileTypeFromBuffer(buf, { mpegOffsetTolerance: 10 });\n if (!guessedType || !guessedType.mime) {\n throw new CouldNotDetermineFileTypeError('Failed to determine audio format');\n }\n debug(`Guessed file type is mime=${guessedType.mime}, extension=${guessedType.ext}`);\n parserLoader = this.findLoaderForContentType(guessedType.mime);\n if (!parserLoader) {\n throw new UnsupportedFileTypeError(`Guessed MIME-type not supported: ${guessedType.mime}`);\n }\n }\n }\n // Parser found, execute parser\n debug(`Loading ${parserLoader.parserType} parser...`);\n const metadata = new MetadataCollector(opts);\n const ParserImpl = await parserLoader.load();\n const parser = new ParserImpl(metadata, tokenizer, opts ?? {});\n debug(`Parser ${parserLoader.parserType} loaded`);\n await parser.parse();\n if (metadata.format.trackInfo) {\n if (metadata.format.hasAudio === undefined) {\n metadata.setFormat('hasAudio', !!metadata.format.trackInfo.find(track => track.type === TrackType.audio));\n }\n if (metadata.format.hasVideo === undefined) {\n metadata.setFormat('hasVideo', !!metadata.format.trackInfo.find(track => track.type === TrackType.video));\n }\n }\n return metadata.toCommonMetadata();\n }\n /**\n * @param filePath - Path, filename or extension to audio file\n * @return Parser submodule name\n */\n findLoaderForExtension(filePath) {\n if (!filePath)\n return;\n const extension = getExtension(filePath).toLocaleLowerCase() || filePath;\n return this.parsers.find(parser => parser.extensions.indexOf(extension) !== -1);\n }\n findLoaderForContentType(httpContentType) {\n let mime;\n if (!httpContentType)\n return;\n try {\n mime = parseHttpContentType(httpContentType);\n }\n catch (_err) {\n debug(`Invalid HTTP Content-Type header value: ${httpContentType}`);\n return;\n }\n const subType = mime.subtype.indexOf('x-') === 0 ? mime.subtype.substring(2) : mime.subtype;\n return this.parsers.find(parser => parser.mimeTypes.find(loader => loader.indexOf(`${mime.type}/${subType}`) !== -1));\n }\n getSupportedMimeTypes() {\n const mimeTypeSet = new Set();\n this.parsers.forEach(loader => {\n loader.mimeTypes.forEach(mimeType => {\n mimeTypeSet.add(mimeType);\n mimeTypeSet.add(mimeType.replace('/', '/x-'));\n });\n });\n return Array.from(mimeTypeSet);\n }\n}\nfunction getExtension(fname) {\n const i = fname.lastIndexOf('.');\n return i === -1 ? '' : fname.substring(i);\n}\n","import { TrackTypeValueToKeyMap, } from '../type.js';\nimport initDebug from 'debug';\nimport { isSingleton, isUnique } from './GenericTagTypes.js';\nimport { CombinedTagMapper } from './CombinedTagMapper.js';\nimport { CommonTagMapper } from './GenericTagMapper.js';\nimport { toRatio } from './Util.js';\nimport { fileTypeFromBuffer } from 'file-type';\nimport { parseLyrics } from '../lrc/LyricsParser.js';\nconst debug = initDebug('music-metadata:collector');\nconst TagPriority = ['matroska', 'APEv2', 'vorbis', 'ID3v2.4', 'ID3v2.3', 'ID3v2.2', 'exif', 'asf', 'iTunes', 'AIFF', 'ID3v1'];\n/**\n * Provided to the parser to uodate the metadata result.\n * Responsible for triggering async updates\n */\nexport class MetadataCollector {\n constructor(opts) {\n this.format = {\n tagTypes: [],\n trackInfo: []\n };\n this.native = {};\n this.common = {\n track: { no: null, of: null },\n disk: { no: null, of: null },\n movementIndex: { no: null, of: null }\n };\n this.quality = {\n warnings: []\n };\n /**\n * Keeps track of origin priority for each mapped id\n */\n this.commonOrigin = {};\n /**\n * Maps a tag type to a priority\n */\n this.originPriority = {};\n this.tagMapper = new CombinedTagMapper();\n this.opts = opts;\n let priority = 1;\n for (const tagType of TagPriority) {\n this.originPriority[tagType] = priority++;\n }\n this.originPriority.artificial = 500; // Filled using alternative tags\n this.originPriority.id3v1 = 600; // Consider as the worst because of the field length limit\n }\n /**\n * @returns {boolean} true if one or more tags have been found\n */\n hasAny() {\n return Object.keys(this.native).length > 0;\n }\n addStreamInfo(streamInfo) {\n debug(`streamInfo: type=${streamInfo.type ? TrackTypeValueToKeyMap[streamInfo.type] : '?'}, codec=${streamInfo.codecName}`);\n this.format.trackInfo.push(streamInfo);\n }\n setFormat(key, value) {\n debug(`format: ${key} = ${value}`);\n this.format[key] = value; // as any to override readonly\n if (this.opts?.observer) {\n this.opts.observer({ metadata: this, tag: { type: 'format', id: key, value } });\n }\n }\n setAudioOnly() {\n this.setFormat('hasAudio', true);\n this.setFormat('hasVideo', false);\n }\n async addTag(tagType, tagId, value) {\n debug(`tag ${tagType}.${tagId} = ${value}`);\n if (!this.native[tagType]) {\n this.format.tagTypes.push(tagType);\n this.native[tagType] = [];\n }\n this.native[tagType].push({ id: tagId, value });\n await this.toCommon(tagType, tagId, value);\n }\n addWarning(warning) {\n this.quality.warnings.push({ message: warning });\n }\n async postMap(tagType, tag) {\n // Common tag (alias) found\n // check if we need to do something special with common tag\n // if the event has been aliased then we need to clean it before\n // it is emitted to the user. e.g. genre (20) -> Electronic\n switch (tag.id) {\n case 'artist':\n if (this.commonOrigin.artist === this.originPriority[tagType]) {\n // Assume the artist field is used as artists\n return this.postMap('artificial', { id: 'artists', value: tag.value });\n }\n if (!this.common.artists) {\n // Fill artists using artist source\n this.setGenericTag('artificial', { id: 'artists', value: tag.value });\n }\n break;\n case 'artists':\n if (!this.common.artist || this.commonOrigin.artist === this.originPriority.artificial) {\n if (!this.common.artists || this.common.artists.indexOf(tag.value) === -1) {\n // Fill artist using artists source\n const artists = (this.common.artists || []).concat([tag.value]);\n const value = joinArtists(artists);\n const artistTag = { id: 'artist', value };\n this.setGenericTag('artificial', artistTag);\n }\n }\n break;\n case 'picture':\n return this.postFixPicture(tag.value).then(picture => {\n if (picture !== null) {\n tag.value = picture;\n this.setGenericTag(tagType, tag);\n }\n });\n case 'totaltracks':\n this.common.track.of = CommonTagMapper.toIntOrNull(tag.value);\n return;\n case 'totaldiscs':\n this.common.disk.of = CommonTagMapper.toIntOrNull(tag.value);\n return;\n case 'movementTotal':\n this.common.movementIndex.of = CommonTagMapper.toIntOrNull(tag.value);\n return;\n case 'track':\n case 'disk':\n case 'movementIndex': {\n const of = this.common[tag.id].of; // store of value, maybe maybe overwritten\n this.common[tag.id] = CommonTagMapper.normalizeTrack(tag.value);\n this.common[tag.id].of = of != null ? of : this.common[tag.id].of;\n return;\n }\n case 'bpm':\n case 'year':\n case 'originalyear':\n tag.value = Number.parseInt(tag.value, 10);\n break;\n case 'date': {\n // ToDo: be more strict on 'YYYY...'\n const year = Number.parseInt(tag.value.substr(0, 4), 10);\n if (!Number.isNaN(year)) {\n this.common.year = year;\n }\n break;\n }\n case 'discogs_label_id':\n case 'discogs_release_id':\n case 'discogs_master_release_id':\n case 'discogs_artist_id':\n case 'discogs_votes':\n tag.value = typeof tag.value === 'string' ? Number.parseInt(tag.value, 10) : tag.value;\n break;\n case 'replaygain_track_gain':\n case 'replaygain_track_peak':\n case 'replaygain_album_gain':\n case 'replaygain_album_peak':\n tag.value = toRatio(tag.value);\n break;\n case 'replaygain_track_minmax':\n tag.value = tag.value.split(',').map(v => Number.parseInt(v, 10));\n break;\n case 'replaygain_undo': {\n const minMix = tag.value.split(',').map(v => Number.parseInt(v, 10));\n tag.value = {\n leftChannel: minMix[0],\n rightChannel: minMix[1]\n };\n break;\n }\n case 'gapless': // iTunes gap-less flag\n case 'compilation':\n case 'podcast':\n case 'showMovement':\n tag.value = tag.value === '1' || tag.value === 1; // boolean\n break;\n case 'isrc': { // Only keep unique values\n const commonTag = this.common[tag.id];\n if (commonTag && commonTag.indexOf(tag.value) !== -1)\n return;\n break;\n }\n case 'comment':\n if (typeof tag.value === 'string') {\n tag.value = { text: tag.value };\n }\n if (tag.value.descriptor === 'iTunPGAP') {\n this.setGenericTag(tagType, { id: 'gapless', value: tag.value.text === '1' });\n }\n break;\n case 'lyrics':\n if (typeof tag.value === 'string') {\n tag.value = parseLyrics(tag.value);\n }\n break;\n default:\n // nothing to do\n }\n if (tag.value !== null) {\n this.setGenericTag(tagType, tag);\n }\n }\n /**\n * Convert native tags to common tags\n * @returns {IAudioMetadata} Native + common tags\n */\n toCommonMetadata() {\n return {\n format: this.format,\n native: this.native,\n quality: this.quality,\n common: this.common\n };\n }\n /**\n * Fix some common issues with picture object\n * @param picture Picture\n */\n async postFixPicture(picture) {\n if (picture.data && picture.data.length > 0) {\n if (!picture.format) {\n const fileType = await fileTypeFromBuffer(Uint8Array.from(picture.data)); // ToDO: remove Buffer\n if (fileType) {\n picture.format = fileType.mime;\n }\n else {\n return null;\n }\n }\n picture.format = picture.format.toLocaleLowerCase();\n switch (picture.format) {\n case 'image/jpg':\n picture.format = 'image/jpeg'; // ToDo: register warning\n }\n return picture;\n }\n this.addWarning(\"Empty picture tag found\");\n return null;\n }\n /**\n * Convert native tag to common tags\n */\n async toCommon(tagType, tagId, value) {\n const tag = { id: tagId, value };\n const genericTag = this.tagMapper.mapTag(tagType, tag, this);\n if (genericTag) {\n await this.postMap(tagType, genericTag);\n }\n }\n /**\n * Set generic tag\n */\n setGenericTag(tagType, tag) {\n debug(`common.${tag.id} = ${tag.value}`);\n const prio0 = this.commonOrigin[tag.id] || 1000;\n const prio1 = this.originPriority[tagType];\n if (isSingleton(tag.id)) {\n if (prio1 <= prio0) {\n this.common[tag.id] = tag.value;\n this.commonOrigin[tag.id] = prio1;\n }\n else {\n return debug(`Ignore native tag (singleton): ${tagType}.${tag.id} = ${tag.value}`);\n }\n }\n else {\n if (prio1 === prio0) {\n if (!isUnique(tag.id) || this.common[tag.id].indexOf(tag.value) === -1) {\n this.common[tag.id].push(tag.value);\n }\n else {\n debug(`Ignore duplicate value: ${tagType}.${tag.id} = ${tag.value}`);\n }\n // no effect? this.commonOrigin[tag.id] = prio1;\n }\n else if (prio1 < prio0) {\n this.common[tag.id] = [tag.value];\n this.commonOrigin[tag.id] = prio1;\n }\n else {\n return debug(`Ignore native tag (list): ${tagType}.${tag.id} = ${tag.value}`);\n }\n }\n if (this.opts?.observer) {\n this.opts.observer({ metadata: this, tag: { type: 'common', id: tag.id, value: tag.value } });\n }\n // ToDo: trigger metadata event\n }\n}\nexport function joinArtists(artists) {\n if (artists.length > 2) {\n return `${artists.slice(0, artists.length - 1).join(', ')} & ${artists[artists.length - 1]}`;\n }\n return artists.join(' & ');\n}\n","const defaultTagInfo = {\n multiple: false,\n};\nconst commonTags = {\n year: defaultTagInfo,\n track: defaultTagInfo,\n disk: defaultTagInfo,\n title: defaultTagInfo,\n artist: defaultTagInfo,\n artists: { multiple: true, unique: true },\n albumartist: defaultTagInfo,\n album: defaultTagInfo,\n date: defaultTagInfo,\n originaldate: defaultTagInfo,\n originalyear: defaultTagInfo,\n releasedate: defaultTagInfo,\n comment: { multiple: true, unique: false },\n genre: { multiple: true, unique: true },\n picture: { multiple: true, unique: true },\n composer: { multiple: true, unique: true },\n lyrics: { multiple: true, unique: false },\n albumsort: { multiple: false, unique: true },\n titlesort: { multiple: false, unique: true },\n work: { multiple: false, unique: true },\n artistsort: { multiple: false, unique: true },\n albumartistsort: { multiple: false, unique: true },\n composersort: { multiple: false, unique: true },\n lyricist: { multiple: true, unique: true },\n writer: { multiple: true, unique: true },\n conductor: { multiple: true, unique: true },\n remixer: { multiple: true, unique: true },\n arranger: { multiple: true, unique: true },\n engineer: { multiple: true, unique: true },\n producer: { multiple: true, unique: true },\n technician: { multiple: true, unique: true },\n djmixer: { multiple: true, unique: true },\n mixer: { multiple: true, unique: true },\n label: { multiple: true, unique: true },\n grouping: defaultTagInfo,\n subtitle: { multiple: true },\n discsubtitle: defaultTagInfo,\n totaltracks: defaultTagInfo,\n totaldiscs: defaultTagInfo,\n compilation: defaultTagInfo,\n rating: { multiple: true },\n bpm: defaultTagInfo,\n mood: defaultTagInfo,\n media: defaultTagInfo,\n catalognumber: { multiple: true, unique: true },\n tvShow: defaultTagInfo,\n tvShowSort: defaultTagInfo,\n tvSeason: defaultTagInfo,\n tvEpisode: defaultTagInfo,\n tvEpisodeId: defaultTagInfo,\n tvNetwork: defaultTagInfo,\n podcast: defaultTagInfo,\n podcasturl: defaultTagInfo,\n releasestatus: defaultTagInfo,\n releasetype: { multiple: true },\n releasecountry: defaultTagInfo,\n script: defaultTagInfo,\n language: defaultTagInfo,\n copyright: defaultTagInfo,\n license: defaultTagInfo,\n encodedby: defaultTagInfo,\n encodersettings: defaultTagInfo,\n gapless: defaultTagInfo,\n barcode: defaultTagInfo,\n isrc: { multiple: true },\n asin: defaultTagInfo,\n musicbrainz_recordingid: defaultTagInfo,\n musicbrainz_trackid: defaultTagInfo,\n musicbrainz_albumid: defaultTagInfo,\n musicbrainz_artistid: { multiple: true },\n musicbrainz_albumartistid: { multiple: true },\n musicbrainz_releasegroupid: defaultTagInfo,\n musicbrainz_workid: defaultTagInfo,\n musicbrainz_trmid: defaultTagInfo,\n musicbrainz_discid: defaultTagInfo,\n acoustid_id: defaultTagInfo,\n acoustid_fingerprint: defaultTagInfo,\n musicip_puid: defaultTagInfo,\n musicip_fingerprint: defaultTagInfo,\n website: defaultTagInfo,\n 'performer:instrument': { multiple: true, unique: true },\n averageLevel: defaultTagInfo,\n peakLevel: defaultTagInfo,\n notes: { multiple: true, unique: false },\n key: defaultTagInfo,\n originalalbum: defaultTagInfo,\n originalartist: defaultTagInfo,\n discogs_artist_id: { multiple: true, unique: true },\n discogs_release_id: defaultTagInfo,\n discogs_label_id: defaultTagInfo,\n discogs_master_release_id: defaultTagInfo,\n discogs_votes: defaultTagInfo,\n discogs_rating: defaultTagInfo,\n replaygain_track_peak: defaultTagInfo,\n replaygain_track_gain: defaultTagInfo,\n replaygain_album_peak: defaultTagInfo,\n replaygain_album_gain: defaultTagInfo,\n replaygain_track_minmax: defaultTagInfo,\n replaygain_album_minmax: defaultTagInfo,\n replaygain_undo: defaultTagInfo,\n description: { multiple: true },\n longDescription: defaultTagInfo,\n category: { multiple: true },\n hdVideo: defaultTagInfo,\n keywords: { multiple: true },\n movement: defaultTagInfo,\n movementIndex: defaultTagInfo,\n movementTotal: defaultTagInfo,\n podcastId: defaultTagInfo,\n showMovement: defaultTagInfo,\n stik: defaultTagInfo,\n playCounter: defaultTagInfo\n};\nexport const commonTagsKeys = /* @__PURE__ */ Object.keys(commonTags);\n/**\n * @param alias Name of common tag\n * @returns {boolean|*} true if given alias is mapped as a singleton', otherwise false\n */\nexport function isSingleton(alias) {\n return commonTags[alias] && !commonTags[alias].multiple;\n}\n/**\n * @param alias Common (generic) tag\n * @returns {boolean|*} true if given alias is a singleton or explicitly marked as unique\n */\nexport function isUnique(alias) {\n return !commonTags[alias].multiple || commonTags[alias].unique || false;\n}\n","export class CommonTagMapper {\n static toIntOrNull(str) {\n const cleaned = Number.parseInt(str, 10);\n return Number.isNaN(cleaned) ? null : cleaned;\n }\n // TODO: a string of 1of1 would fail to be converted\n // converts 1/10 to no : 1, of : 10\n // or 1 to no : 1, of : 0\n static normalizeTrack(origVal) {\n const split = origVal.toString().split('/');\n return {\n no: Number.parseInt(split[0], 10) || null,\n of: Number.parseInt(split[1], 10) || null\n };\n }\n constructor(tagTypes, tagMap) {\n this.tagTypes = tagTypes;\n this.tagMap = tagMap;\n }\n /**\n * Process and set common tags\n * write common tags to\n * @param tag Native tag\n * @param warnings Register warnings\n * @return common name\n */\n mapGenericTag(tag, warnings) {\n tag = { id: tag.id, value: tag.value }; // clone object\n this.postMap(tag, warnings);\n // Convert native tag event to generic 'alias' tag\n const id = this.getCommonName(tag.id);\n return id ? { id, value: tag.value } : null;\n }\n /**\n * Convert native tag key to common tag key\n * @param tag Native header tag\n * @return common tag name (alias)\n */\n getCommonName(tag) {\n return this.tagMap[tag];\n }\n /**\n * Handle post mapping exceptions / correction\n * @param tag Tag e.g. {\"©alb\", \"Buena Vista Social Club\")\n * @param warnings Used to register warnings\n */\n postMap(_tag, _warnings) {\n return;\n }\n}\nCommonTagMapper.maxRatingScore = 1;\n","import { CommonTagMapper } from '../common/GenericTagMapper.js';\n/**\n * ID3v1 tag mappings\n */\nconst id3v1TagMap = {\n title: 'title',\n artist: 'artist',\n album: 'album',\n year: 'year',\n comment: 'comment',\n track: 'track',\n genre: 'genre'\n};\nexport class ID3v1TagMapper extends CommonTagMapper {\n constructor() {\n super(['ID3v1'], id3v1TagMap);\n }\n}\n","import { CommonTagMapper } from './GenericTagMapper.js';\nexport class CaseInsensitiveTagMap extends CommonTagMapper {\n constructor(tagTypes, tagMap) {\n const upperCaseMap = {};\n for (const tag of Object.keys(tagMap)) {\n upperCaseMap[tag.toUpperCase()] = tagMap[tag];\n }\n super(tagTypes, upperCaseMap);\n }\n /**\n * @tag Native header tag\n * @return common tag name (alias)\n */\n getCommonName(tag) {\n return this.tagMap[tag.toUpperCase()];\n }\n}\n","import { UINT32_LE } from 'token-types';\nimport { CommonTagMapper } from '../common/GenericTagMapper.js';\nimport { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\nimport { decodeString } from '../common/Util.js';\n/**\n * ID3v2.3/ID3v2.4 tag mappings\n */\nconst id3v24TagMap = {\n // id3v2.3\n TIT2: 'title',\n TPE1: 'artist',\n 'TXXX:Artists': 'artists',\n TPE2: 'albumartist',\n TALB: 'album',\n TDRV: 'date', // [ 'date', 'year' ] ToDo: improve 'year' mapping\n /**\n * Original release year\n */\n TORY: 'originalyear',\n TPOS: 'disk',\n TCON: 'genre',\n APIC: 'picture',\n TCOM: 'composer',\n USLT: 'lyrics',\n TSOA: 'albumsort',\n TSOT: 'titlesort',\n TOAL: 'originalalbum',\n TSOP: 'artistsort',\n TSO2: 'albumartistsort',\n TSOC: 'composersort',\n TEXT: 'lyricist',\n 'TXXX:Writer': 'writer',\n TPE3: 'conductor',\n // 'IPLS:instrument': 'performer:instrument', // ToDo\n TPE4: 'remixer',\n 'IPLS:arranger': 'arranger',\n 'IPLS:engineer': 'engineer',\n 'IPLS:producer': 'producer',\n 'IPLS:DJ-mix': 'djmixer',\n 'IPLS:mix': 'mixer',\n TPUB: 'label',\n TIT1: 'grouping',\n TIT3: 'subtitle',\n TRCK: 'track',\n TCMP: 'compilation',\n POPM: 'rating',\n TBPM: 'bpm',\n TMED: 'media',\n 'TXXX:CATALOGNUMBER': 'catalognumber',\n 'TXXX:MusicBrainz Album Status': 'releasestatus',\n 'TXXX:MusicBrainz Album Type': 'releasetype',\n /**\n * Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0\n */\n 'TXXX:MusicBrainz Album Release Country': 'releasecountry',\n /**\n * Release country as implemented // ToDo: report\n */\n 'TXXX:RELEASECOUNTRY': 'releasecountry',\n 'TXXX:SCRIPT': 'script',\n TLAN: 'language',\n TCOP: 'copyright',\n WCOP: 'license',\n TENC: 'encodedby',\n TSSE: 'encodersettings',\n 'TXXX:BARCODE': 'barcode',\n 'TXXX:ISRC': 'isrc',\n TSRC: 'isrc',\n 'TXXX:ASIN': 'asin',\n 'TXXX:originalyear': 'originalyear',\n 'UFID:http://musicbrainz.org': 'musicbrainz_recordingid',\n 'TXXX:MusicBrainz Release Track Id': 'musicbrainz_trackid',\n 'TXXX:MusicBrainz Album Id': 'musicbrainz_albumid',\n 'TXXX:MusicBrainz Artist Id': 'musicbrainz_artistid',\n 'TXXX:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',\n 'TXXX:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',\n 'TXXX:MusicBrainz Work Id': 'musicbrainz_workid',\n 'TXXX:MusicBrainz TRM Id': 'musicbrainz_trmid',\n 'TXXX:MusicBrainz Disc Id': 'musicbrainz_discid',\n 'TXXX:ACOUSTID_ID': 'acoustid_id',\n 'TXXX:Acoustid Id': 'acoustid_id',\n 'TXXX:Acoustid Fingerprint': 'acoustid_fingerprint',\n 'TXXX:MusicIP PUID': 'musicip_puid',\n 'TXXX:MusicMagic Fingerprint': 'musicip_fingerprint',\n WOAR: 'website',\n // id3v2.4\n // ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames\n TDRC: 'date', // date YYYY-MM-DD\n TYER: 'year',\n TDOR: 'originaldate',\n // 'TMCL:instrument': 'performer:instrument',\n 'TIPL:arranger': 'arranger',\n 'TIPL:engineer': 'engineer',\n 'TIPL:producer': 'producer',\n 'TIPL:DJ-mix': 'djmixer',\n 'TIPL:mix': 'mixer',\n TMOO: 'mood',\n // additional mappings:\n SYLT: 'lyrics',\n TSST: 'discsubtitle',\n TKEY: 'key',\n COMM: 'comment',\n TOPE: 'originalartist',\n // Windows Media Player\n 'PRIV:AverageLevel': 'averageLevel',\n 'PRIV:PeakLevel': 'peakLevel',\n // Discogs\n 'TXXX:DISCOGS_ARTIST_ID': 'discogs_artist_id',\n 'TXXX:DISCOGS_ARTISTS': 'artists',\n 'TXXX:DISCOGS_ARTIST_NAME': 'artists',\n 'TXXX:DISCOGS_ALBUM_ARTISTS': 'albumartist',\n 'TXXX:DISCOGS_CATALOG': 'catalognumber',\n 'TXXX:DISCOGS_COUNTRY': 'releasecountry',\n 'TXXX:DISCOGS_DATE': 'originaldate',\n 'TXXX:DISCOGS_LABEL': 'label',\n 'TXXX:DISCOGS_LABEL_ID': 'discogs_label_id',\n 'TXXX:DISCOGS_MASTER_RELEASE_ID': 'discogs_master_release_id',\n 'TXXX:DISCOGS_RATING': 'discogs_rating',\n 'TXXX:DISCOGS_RELEASED': 'date',\n 'TXXX:DISCOGS_RELEASE_ID': 'discogs_release_id',\n 'TXXX:DISCOGS_VOTES': 'discogs_votes',\n 'TXXX:CATALOGID': 'catalognumber',\n 'TXXX:STYLE': 'genre',\n 'TXXX:REPLAYGAIN_TRACK_PEAK': 'replaygain_track_peak',\n 'TXXX:REPLAYGAIN_TRACK_GAIN': 'replaygain_track_gain',\n 'TXXX:REPLAYGAIN_ALBUM_PEAK': 'replaygain_album_peak',\n 'TXXX:REPLAYGAIN_ALBUM_GAIN': 'replaygain_album_gain',\n 'TXXX:MP3GAIN_MINMAX': 'replaygain_track_minmax',\n 'TXXX:MP3GAIN_ALBUM_MINMAX': 'replaygain_album_minmax',\n 'TXXX:MP3GAIN_UNDO': 'replaygain_undo',\n MVNM: 'movement',\n MVIN: 'movementIndex',\n PCST: 'podcast',\n TCAT: 'category',\n TDES: 'description',\n TDRL: 'releasedate',\n TGID: 'podcastId',\n TKWD: 'keywords',\n WFED: 'podcasturl',\n GRP1: 'grouping',\n PCNT: 'playCounter',\n};\nexport class ID3v24TagMapper extends CaseInsensitiveTagMap {\n static toRating(popm) {\n return {\n source: popm.email,\n rating: popm.rating > 0 ? (popm.rating - 1) / 254 * CommonTagMapper.maxRatingScore : undefined\n };\n }\n constructor() {\n super(['ID3v2.3', 'ID3v2.4'], id3v24TagMap);\n }\n /**\n * Handle post mapping exceptions / correction\n * @param tag to post map\n * @param warnings Wil be used to register (collect) warnings\n */\n postMap(tag, warnings) {\n switch (tag.id) {\n case 'UFID':\n {\n // decode MusicBrainz Recording Id\n const idTag = tag.value;\n if (idTag.owner_identifier === 'http://musicbrainz.org') {\n tag.id += `:${idTag.owner_identifier}`;\n tag.value = decodeString(idTag.identifier, 'latin1'); // latin1 == iso-8859-1\n }\n }\n break;\n case 'PRIV':\n {\n const customTag = tag.value;\n switch (customTag.owner_identifier) {\n // decode Windows Media Player\n case 'AverageLevel':\n case 'PeakValue':\n tag.id += `:${customTag.owner_identifier}`;\n tag.value = customTag.data.length === 4 ? UINT32_LE.get(customTag.data, 0) : null;\n if (tag.value === null) {\n warnings.addWarning('Failed to parse PRIV:PeakValue');\n }\n break;\n default:\n warnings.addWarning(`Unknown PRIV owner-identifier: ${customTag.data}`);\n }\n }\n break;\n case 'POPM':\n tag.value = ID3v24TagMapper.toRating(tag.value);\n break;\n default:\n break;\n }\n }\n}\n","import { CommonTagMapper } from '../common/GenericTagMapper.js';\n/**\n * ASF Metadata tag mappings.\n * See http://msdn.microsoft.com/en-us/library/ms867702.aspx\n */\nconst asfTagMap = {\n Title: 'title',\n Author: 'artist',\n 'WM/AlbumArtist': 'albumartist',\n 'WM/AlbumTitle': 'album',\n 'WM/Year': 'date', // changed to 'year' to 'date' based on Picard mappings; ToDo: check me\n 'WM/OriginalReleaseTime': 'originaldate',\n 'WM/OriginalReleaseYear': 'originalyear',\n Description: 'comment',\n 'WM/TrackNumber': 'track',\n 'WM/PartOfSet': 'disk',\n 'WM/Genre': 'genre',\n 'WM/Composer': 'composer',\n 'WM/Lyrics': 'lyrics',\n 'WM/AlbumSortOrder': 'albumsort',\n 'WM/TitleSortOrder': 'titlesort',\n 'WM/ArtistSortOrder': 'artistsort',\n 'WM/AlbumArtistSortOrder': 'albumartistsort',\n 'WM/ComposerSortOrder': 'composersort',\n 'WM/Writer': 'lyricist',\n 'WM/Conductor': 'conductor',\n 'WM/ModifiedBy': 'remixer',\n 'WM/Engineer': 'engineer',\n 'WM/Producer': 'producer',\n 'WM/DJMixer': 'djmixer',\n 'WM/Mixer': 'mixer',\n 'WM/Publisher': 'label',\n 'WM/ContentGroupDescription': 'grouping',\n 'WM/SubTitle': 'subtitle',\n 'WM/SetSubTitle': 'discsubtitle',\n // 'WM/PartOfSet': 'totaldiscs',\n 'WM/IsCompilation': 'compilation',\n 'WM/SharedUserRating': 'rating',\n 'WM/BeatsPerMinute': 'bpm',\n 'WM/Mood': 'mood',\n 'WM/Media': 'media',\n 'WM/CatalogNo': 'catalognumber',\n 'MusicBrainz/Album Status': 'releasestatus',\n 'MusicBrainz/Album Type': 'releasetype',\n 'MusicBrainz/Album Release Country': 'releasecountry',\n 'WM/Script': 'script',\n 'WM/Language': 'language',\n Copyright: 'copyright',\n LICENSE: 'license',\n 'WM/EncodedBy': 'encodedby',\n 'WM/EncodingSettings': 'encodersettings',\n 'WM/Barcode': 'barcode',\n 'WM/ISRC': 'isrc',\n 'MusicBrainz/Track Id': 'musicbrainz_recordingid',\n 'MusicBrainz/Release Track Id': 'musicbrainz_trackid',\n 'MusicBrainz/Album Id': 'musicbrainz_albumid',\n 'MusicBrainz/Artist Id': 'musicbrainz_artistid',\n 'MusicBrainz/Album Artist Id': 'musicbrainz_albumartistid',\n 'MusicBrainz/Release Group Id': 'musicbrainz_releasegroupid',\n 'MusicBrainz/Work Id': 'musicbrainz_workid',\n 'MusicBrainz/TRM Id': 'musicbrainz_trmid',\n 'MusicBrainz/Disc Id': 'musicbrainz_discid',\n 'Acoustid/Id': 'acoustid_id',\n 'Acoustid/Fingerprint': 'acoustid_fingerprint',\n 'MusicIP/PUID': 'musicip_puid',\n 'WM/ARTISTS': 'artists',\n 'WM/InitialKey': 'key',\n ASIN: 'asin',\n 'WM/Work': 'work',\n 'WM/AuthorURL': 'website',\n 'WM/Picture': 'picture'\n};\nexport class AsfTagMapper extends CommonTagMapper {\n static toRating(rating) {\n return {\n rating: Number.parseFloat(rating + 1) / 5\n };\n }\n constructor() {\n super(['asf'], asfTagMap);\n }\n postMap(tag) {\n switch (tag.id) {\n case 'WM/SharedUserRating': {\n const keys = tag.id.split(':');\n tag.value = AsfTagMapper.toRating(tag.value);\n tag.id = keys[0];\n break;\n }\n }\n }\n}\n","import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\n/**\n * ID3v2.2 tag mappings\n */\nexport const id3v22TagMap = {\n TT2: 'title',\n TP1: 'artist',\n TP2: 'albumartist',\n TAL: 'album',\n TYE: 'year',\n COM: 'comment',\n TRK: 'track',\n TPA: 'disk',\n TCO: 'genre',\n PIC: 'picture',\n TCM: 'composer',\n TOR: 'originaldate',\n TOT: 'originalalbum',\n TXT: 'lyricist',\n TP3: 'conductor',\n TPB: 'label',\n TT1: 'grouping',\n TT3: 'subtitle',\n TLA: 'language',\n TCR: 'copyright',\n WCP: 'license',\n TEN: 'encodedby',\n TSS: 'encodersettings',\n WAR: 'website',\n PCS: 'podcast',\n TCP: \"compilation\",\n TDR: 'date',\n TS2: 'albumartistsort',\n TSA: 'albumsort',\n TSC: 'composersort',\n TSP: 'artistsort',\n TST: 'titlesort',\n WFD: 'podcasturl',\n TBP: 'bpm'\n};\nexport class ID3v22TagMapper extends CaseInsensitiveTagMap {\n constructor() {\n super(['ID3v2.2'], id3v22TagMap);\n }\n}\n","import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\n/**\n * ID3v2.2 tag mappings\n */\nconst apev2TagMap = {\n Title: 'title',\n Artist: 'artist',\n Artists: 'artists',\n 'Album Artist': 'albumartist',\n Album: 'album',\n Year: 'date',\n Originalyear: 'originalyear',\n Originaldate: 'originaldate',\n Releasedate: 'releasedate',\n Comment: 'comment',\n Track: 'track',\n Disc: 'disk',\n DISCNUMBER: 'disk', // ToDo: backwards compatibility', valid tag?\n Genre: 'genre',\n 'Cover Art (Front)': 'picture',\n 'Cover Art (Back)': 'picture',\n Composer: 'composer',\n Lyrics: 'lyrics',\n ALBUMSORT: 'albumsort',\n TITLESORT: 'titlesort',\n WORK: 'work',\n ARTISTSORT: 'artistsort',\n ALBUMARTISTSORT: 'albumartistsort',\n COMPOSERSORT: 'composersort',\n Lyricist: 'lyricist',\n Writer: 'writer',\n Conductor: 'conductor',\n // 'Performer=artist (instrument)': 'performer:instrument',\n MixArtist: 'remixer',\n Arranger: 'arranger',\n Engineer: 'engineer',\n Producer: 'producer',\n DJMixer: 'djmixer',\n Mixer: 'mixer',\n Label: 'label',\n Grouping: 'grouping',\n Subtitle: 'subtitle',\n DiscSubtitle: 'discsubtitle',\n Compilation: 'compilation',\n BPM: 'bpm',\n Mood: 'mood',\n Media: 'media',\n CatalogNumber: 'catalognumber',\n MUSICBRAINZ_ALBUMSTATUS: 'releasestatus',\n MUSICBRAINZ_ALBUMTYPE: 'releasetype',\n RELEASECOUNTRY: 'releasecountry',\n Script: 'script',\n Language: 'language',\n Copyright: 'copyright',\n LICENSE: 'license',\n EncodedBy: 'encodedby',\n EncoderSettings: 'encodersettings',\n Barcode: 'barcode',\n ISRC: 'isrc',\n ASIN: 'asin',\n musicbrainz_trackid: 'musicbrainz_recordingid',\n musicbrainz_releasetrackid: 'musicbrainz_trackid',\n MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',\n MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',\n MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',\n MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',\n MUSICBRAINZ_WORKID: 'musicbrainz_workid',\n MUSICBRAINZ_TRMID: 'musicbrainz_trmid',\n MUSICBRAINZ_DISCID: 'musicbrainz_discid',\n Acoustid_Id: 'acoustid_id',\n ACOUSTID_FINGERPRINT: 'acoustid_fingerprint',\n MUSICIP_PUID: 'musicip_puid',\n Weblink: 'website',\n REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',\n REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',\n MP3GAIN_MINMAX: 'replaygain_track_minmax',\n MP3GAIN_UNDO: 'replaygain_undo'\n};\nexport class APEv2TagMapper extends CaseInsensitiveTagMap {\n constructor() {\n super(['APEv2'], apev2TagMap);\n }\n}\n","import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\n/**\n * Ref: https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata\n */\nconst mp4TagMap = {\n '©nam': 'title',\n '©ART': 'artist',\n aART: 'albumartist',\n /**\n * ToDo: Album artist seems to be stored here while Picard documentation says: aART\n */\n '----:com.apple.iTunes:Band': 'albumartist',\n '©alb': 'album',\n '©day': 'date',\n '©cmt': 'comment',\n '©com': 'comment',\n trkn: 'track',\n disk: 'disk',\n '©gen': 'genre',\n covr: 'picture',\n '©wrt': 'composer',\n '©lyr': 'lyrics',\n soal: 'albumsort',\n sonm: 'titlesort',\n soar: 'artistsort',\n soaa: 'albumartistsort',\n soco: 'composersort',\n '----:com.apple.iTunes:LYRICIST': 'lyricist',\n '----:com.apple.iTunes:CONDUCTOR': 'conductor',\n '----:com.apple.iTunes:REMIXER': 'remixer',\n '----:com.apple.iTunes:ENGINEER': 'engineer',\n '----:com.apple.iTunes:PRODUCER': 'producer',\n '----:com.apple.iTunes:DJMIXER': 'djmixer',\n '----:com.apple.iTunes:MIXER': 'mixer',\n '----:com.apple.iTunes:LABEL': 'label',\n '©grp': 'grouping',\n '----:com.apple.iTunes:SUBTITLE': 'subtitle',\n '----:com.apple.iTunes:DISCSUBTITLE': 'discsubtitle',\n cpil: 'compilation',\n tmpo: 'bpm',\n '----:com.apple.iTunes:MOOD': 'mood',\n '----:com.apple.iTunes:MEDIA': 'media',\n '----:com.apple.iTunes:CATALOGNUMBER': 'catalognumber',\n tvsh: 'tvShow',\n tvsn: 'tvSeason',\n tves: 'tvEpisode',\n sosn: 'tvShowSort',\n tven: 'tvEpisodeId',\n tvnn: 'tvNetwork',\n pcst: 'podcast',\n purl: 'podcasturl',\n '----:com.apple.iTunes:MusicBrainz Album Status': 'releasestatus',\n '----:com.apple.iTunes:MusicBrainz Album Type': 'releasetype',\n '----:com.apple.iTunes:MusicBrainz Album Release Country': 'releasecountry',\n '----:com.apple.iTunes:SCRIPT': 'script',\n '----:com.apple.iTunes:LANGUAGE': 'language',\n cprt: 'copyright',\n '©cpy': 'copyright',\n '----:com.apple.iTunes:LICENSE': 'license',\n '©too': 'encodedby',\n pgap: 'gapless',\n '----:com.apple.iTunes:BARCODE': 'barcode',\n '----:com.apple.iTunes:ISRC': 'isrc',\n '----:com.apple.iTunes:ASIN': 'asin',\n '----:com.apple.iTunes:NOTES': 'comment',\n '----:com.apple.iTunes:MusicBrainz Track Id': 'musicbrainz_recordingid',\n '----:com.apple.iTunes:MusicBrainz Release Track Id': 'musicbrainz_trackid',\n '----:com.apple.iTunes:MusicBrainz Album Id': 'musicbrainz_albumid',\n '----:com.apple.iTunes:MusicBrainz Artist Id': 'musicbrainz_artistid',\n '----:com.apple.iTunes:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',\n '----:com.apple.iTunes:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',\n '----:com.apple.iTunes:MusicBrainz Work Id': 'musicbrainz_workid',\n '----:com.apple.iTunes:MusicBrainz TRM Id': 'musicbrainz_trmid',\n '----:com.apple.iTunes:MusicBrainz Disc Id': 'musicbrainz_discid',\n '----:com.apple.iTunes:Acoustid Id': 'acoustid_id',\n '----:com.apple.iTunes:Acoustid Fingerprint': 'acoustid_fingerprint',\n '----:com.apple.iTunes:MusicIP PUID': 'musicip_puid',\n '----:com.apple.iTunes:fingerprint': 'musicip_fingerprint',\n '----:com.apple.iTunes:replaygain_track_gain': 'replaygain_track_gain',\n '----:com.apple.iTunes:replaygain_track_peak': 'replaygain_track_peak',\n '----:com.apple.iTunes:replaygain_album_gain': 'replaygain_album_gain',\n '----:com.apple.iTunes:replaygain_album_peak': 'replaygain_album_peak',\n '----:com.apple.iTunes:replaygain_track_minmax': 'replaygain_track_minmax',\n '----:com.apple.iTunes:replaygain_album_minmax': 'replaygain_album_minmax',\n '----:com.apple.iTunes:replaygain_undo': 'replaygain_undo',\n // Additional mappings:\n gnre: 'genre', // ToDo: check mapping\n '----:com.apple.iTunes:ALBUMARTISTSORT': 'albumartistsort',\n '----:com.apple.iTunes:ARTISTS': 'artists',\n '----:com.apple.iTunes:ORIGINALDATE': 'originaldate',\n '----:com.apple.iTunes:ORIGINALYEAR': 'originalyear',\n '----:com.apple.iTunes:RELEASEDATE': 'releasedate',\n // '----:com.apple.iTunes:PERFORMER': 'performer'\n desc: 'description',\n ldes: 'longDescription',\n '©mvn': 'movement',\n '©mvi': 'movementIndex',\n '©mvc': 'movementTotal',\n '©wrk': 'work',\n catg: 'category',\n egid: 'podcastId',\n hdvd: 'hdVideo',\n keyw: 'keywords',\n shwm: 'showMovement',\n stik: 'stik',\n rate: 'rating'\n};\nexport const tagType = 'iTunes';\nexport class MP4TagMapper extends CaseInsensitiveTagMap {\n constructor() {\n super([tagType], mp4TagMap);\n }\n postMap(tag, _warnings) {\n switch (tag.id) {\n case 'rate':\n tag.value = {\n source: undefined,\n rating: Number.parseFloat(tag.value) / 100\n };\n break;\n }\n }\n}\n","import { CommonTagMapper } from '../../common/GenericTagMapper.js';\n/**\n * Vorbis tag mappings\n *\n * Mapping from native header format to one or possibly more 'common' entries\n * The common entries aim to read the same information from different media files\n * independent of the underlying format\n */\nconst vorbisTagMap = {\n TITLE: 'title',\n ARTIST: 'artist',\n ARTISTS: 'artists',\n ALBUMARTIST: 'albumartist',\n 'ALBUM ARTIST': 'albumartist',\n ALBUM: 'album',\n DATE: 'date',\n ORIGINALDATE: 'originaldate',\n ORIGINALYEAR: 'originalyear',\n RELEASEDATE: 'releasedate',\n COMMENT: 'comment',\n TRACKNUMBER: 'track',\n DISCNUMBER: 'disk',\n GENRE: 'genre',\n METADATA_BLOCK_PICTURE: 'picture',\n COMPOSER: 'composer',\n LYRICS: 'lyrics',\n ALBUMSORT: 'albumsort',\n TITLESORT: 'titlesort',\n WORK: 'work',\n ARTISTSORT: 'artistsort',\n ALBUMARTISTSORT: 'albumartistsort',\n COMPOSERSORT: 'composersort',\n LYRICIST: 'lyricist',\n WRITER: 'writer',\n CONDUCTOR: 'conductor',\n // 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo\n REMIXER: 'remixer',\n ARRANGER: 'arranger',\n ENGINEER: 'engineer',\n PRODUCER: 'producer',\n DJMIXER: 'djmixer',\n MIXER: 'mixer',\n LABEL: 'label',\n GROUPING: 'grouping',\n SUBTITLE: 'subtitle',\n DISCSUBTITLE: 'discsubtitle',\n TRACKTOTAL: 'totaltracks',\n DISCTOTAL: 'totaldiscs',\n COMPILATION: 'compilation',\n RATING: 'rating',\n BPM: 'bpm',\n KEY: 'key',\n MOOD: 'mood',\n MEDIA: 'media',\n CATALOGNUMBER: 'catalognumber',\n RELEASESTATUS: 'releasestatus',\n RELEASETYPE: 'releasetype',\n RELEASECOUNTRY: 'releasecountry',\n SCRIPT: 'script',\n LANGUAGE: 'language',\n COPYRIGHT: 'copyright',\n LICENSE: 'license',\n ENCODEDBY: 'encodedby',\n ENCODERSETTINGS: 'encodersettings',\n BARCODE: 'barcode',\n ISRC: 'isrc',\n ASIN: 'asin',\n MUSICBRAINZ_TRACKID: 'musicbrainz_recordingid',\n MUSICBRAINZ_RELEASETRACKID: 'musicbrainz_trackid',\n MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',\n MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',\n MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',\n MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',\n MUSICBRAINZ_WORKID: 'musicbrainz_workid',\n MUSICBRAINZ_TRMID: 'musicbrainz_trmid',\n MUSICBRAINZ_DISCID: 'musicbrainz_discid',\n ACOUSTID_ID: 'acoustid_id',\n ACOUSTID_ID_FINGERPRINT: 'acoustid_fingerprint',\n MUSICIP_PUID: 'musicip_puid',\n // 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo\n WEBSITE: 'website',\n NOTES: 'notes',\n TOTALTRACKS: 'totaltracks',\n TOTALDISCS: 'totaldiscs',\n // Discogs\n DISCOGS_ARTIST_ID: 'discogs_artist_id',\n DISCOGS_ARTISTS: 'artists',\n DISCOGS_ARTIST_NAME: 'artists',\n DISCOGS_ALBUM_ARTISTS: 'albumartist',\n DISCOGS_CATALOG: 'catalognumber',\n DISCOGS_COUNTRY: 'releasecountry',\n DISCOGS_DATE: 'originaldate',\n DISCOGS_LABEL: 'label',\n DISCOGS_LABEL_ID: 'discogs_label_id',\n DISCOGS_MASTER_RELEASE_ID: 'discogs_master_release_id',\n DISCOGS_RATING: 'discogs_rating',\n DISCOGS_RELEASED: 'date',\n DISCOGS_RELEASE_ID: 'discogs_release_id',\n DISCOGS_VOTES: 'discogs_votes',\n CATALOGID: 'catalognumber',\n STYLE: 'genre',\n //\n REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',\n REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',\n REPLAYGAIN_ALBUM_GAIN: 'replaygain_album_gain',\n REPLAYGAIN_ALBUM_PEAK: 'replaygain_album_peak',\n // To Sure if these (REPLAYGAIN_MINMAX, REPLAYGAIN_ALBUM_MINMAX & REPLAYGAIN_UNDO) are used for Vorbis:\n REPLAYGAIN_MINMAX: 'replaygain_track_minmax',\n REPLAYGAIN_ALBUM_MINMAX: 'replaygain_album_minmax',\n REPLAYGAIN_UNDO: 'replaygain_undo'\n};\nexport class VorbisTagMapper extends CommonTagMapper {\n static toRating(email, rating, maxScore) {\n return {\n source: email ? email.toLowerCase() : undefined,\n rating: (Number.parseFloat(rating) / maxScore) * CommonTagMapper.maxRatingScore\n };\n }\n constructor() {\n super(['vorbis'], vorbisTagMap);\n }\n postMap(tag) {\n if (tag.id === 'RATING') {\n // The way Winamp 5.666 assigns rating\n tag.value = VorbisTagMapper.toRating(undefined, tag.value, 100);\n }\n else if (tag.id.indexOf('RATING:') === 0) {\n const keys = tag.id.split(':');\n tag.value = VorbisTagMapper.toRating(keys[1], tag.value, 1);\n tag.id = keys[0];\n }\n }\n}\n","import { CommonTagMapper } from '../common/GenericTagMapper.js';\n/**\n * RIFF Info Tags; part of the EXIF 2.3\n * Ref: http://owl.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info\n */\nexport const riffInfoTagMap = {\n IART: 'artist', // Artist\n ICRD: 'date', // DateCreated\n INAM: 'title', // Title\n TITL: 'title',\n IPRD: 'album', // Product\n ITRK: 'track',\n IPRT: 'track', // Additional tag for track index\n COMM: 'comment', // Comments\n ICMT: 'comment', // Country\n ICNT: 'releasecountry',\n GNRE: 'genre', // Genre\n IWRI: 'writer', // WrittenBy\n RATE: 'rating',\n YEAR: 'year',\n ISFT: 'encodedby', // Software\n CODE: 'encodedby', // EncodedBy\n TURL: 'website', // URL,\n IGNR: 'genre', // Genre\n IENG: 'engineer', // Engineer\n ITCH: 'technician', // Technician\n IMED: 'media', // Original Media\n IRPD: 'album' // Product, where the file was intended for\n};\nexport class RiffInfoTagMapper extends CommonTagMapper {\n constructor() {\n super(['exif'], riffInfoTagMap);\n }\n}\n","import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\n/**\n * EBML Tag map\n */\nconst ebmlTagMap = {\n 'segment:title': 'title',\n 'album:ARTIST': 'albumartist',\n 'album:ARTISTSORT': 'albumartistsort',\n 'album:TITLE': 'album',\n 'album:DATE_RECORDED': 'originaldate',\n 'album:DATE_RELEASED': 'releasedate',\n 'album:PART_NUMBER': 'disk',\n 'album:TOTAL_PARTS': 'totaltracks',\n 'track:ARTIST': 'artist',\n 'track:ARTISTSORT': 'artistsort',\n 'track:TITLE': 'title',\n 'track:PART_NUMBER': 'track',\n 'track:MUSICBRAINZ_TRACKID': 'musicbrainz_recordingid',\n 'track:MUSICBRAINZ_ALBUMID': 'musicbrainz_albumid',\n 'track:MUSICBRAINZ_ARTISTID': 'musicbrainz_artistid',\n 'track:PUBLISHER': 'label',\n 'track:GENRE': 'genre',\n 'track:ENCODER': 'encodedby',\n 'track:ENCODER_OPTIONS': 'encodersettings',\n 'edition:TOTAL_PARTS': 'totaldiscs',\n picture: 'picture'\n};\nexport class MatroskaTagMapper extends CaseInsensitiveTagMap {\n constructor() {\n super(['matroska'], ebmlTagMap);\n }\n}\n","import { CommonTagMapper } from '../common/GenericTagMapper.js';\n/**\n * ID3v1 tag mappings\n */\nconst tagMap = {\n NAME: 'title',\n AUTH: 'artist',\n '(c) ': 'copyright',\n ANNO: 'comment'\n};\nexport class AiffTagMapper extends CommonTagMapper {\n constructor() {\n super(['AIFF'], tagMap);\n }\n}\n","import { ID3v1TagMapper } from '../id3v1/ID3v1TagMap.js';\nimport { ID3v24TagMapper } from '../id3v2/ID3v24TagMapper.js';\nimport { AsfTagMapper } from '../asf/AsfTagMapper.js';\nimport { ID3v22TagMapper } from '../id3v2/ID3v22TagMapper.js';\nimport { APEv2TagMapper } from '../apev2/APEv2TagMapper.js';\nimport { MP4TagMapper } from '../mp4/MP4TagMapper.js';\nimport { VorbisTagMapper } from '../ogg/vorbis/VorbisTagMapper.js';\nimport { RiffInfoTagMapper } from '../riff/RiffInfoTagMap.js';\nimport { MatroskaTagMapper } from '../matroska/MatroskaTagMapper.js';\nimport { AiffTagMapper } from '../aiff/AiffTagMap.js';\nimport { InternalParserError } from '../ParseError.js';\nexport class CombinedTagMapper {\n constructor() {\n this.tagMappers = {};\n [\n new ID3v1TagMapper(),\n new ID3v22TagMapper(),\n new ID3v24TagMapper(),\n new MP4TagMapper(),\n new MP4TagMapper(),\n new VorbisTagMapper(),\n new APEv2TagMapper(),\n new AsfTagMapper(),\n new RiffInfoTagMapper(),\n new MatroskaTagMapper(),\n new AiffTagMapper()\n ].forEach(mapper => {\n this.registerTagMapper(mapper);\n });\n }\n /**\n * Convert native to generic (common) tags\n * @param tagType Originating tag format\n * @param tag Native tag to map to a generic tag id\n * @param warnings\n * @return Generic tag result (output of this function)\n */\n mapTag(tagType, tag, warnings) {\n const tagMapper = this.tagMappers[tagType];\n if (tagMapper) {\n return this.tagMappers[tagType].mapGenericTag(tag, warnings);\n }\n throw new InternalParserError(`No generic tag mapper defined for tag-format: ${tagType}`);\n }\n registerTagMapper(genericTagMapper) {\n for (const tagType of genericTagMapper.tagTypes) {\n this.tagMappers[tagType] = genericTagMapper;\n }\n }\n}\n","import { LyricsContentType, TimestampFormat } from '../type.js';\n// Shared timestamp regex for LRC format\nconst TIMESTAMP_REGEX = /\\[(\\d{2}):(\\d{2})\\.(\\d{2,3})]/;\nexport function parseLyrics(input) {\n if (TIMESTAMP_REGEX.test(input)) {\n return parseLrc(input);\n }\n return toUnsyncedLyrics(input);\n}\nexport function toUnsyncedLyrics(lyrics) {\n return {\n contentType: LyricsContentType.lyrics,\n timeStampFormat: TimestampFormat.notSynchronized,\n text: lyrics.trim(),\n syncText: [],\n };\n}\n/**\n * Parse LRC (Lyrics) formatted text\n * Ref: https://en.wikipedia.org/wiki/LRC_(file_format)\n * @param lrcString\n */\nexport function parseLrc(lrcString) {\n const lines = lrcString.split('\\n');\n const syncText = [];\n for (const line of lines) {\n const match = line.match(TIMESTAMP_REGEX);\n if (match) {\n const minutes = Number.parseInt(match[1], 10);\n const seconds = Number.parseInt(match[2], 10);\n const ms = match[3].length === 3\n ? Number.parseInt(match[3], 10)\n : Number.parseInt(match[3], 10) * 10;\n const timestamp = (minutes * 60 + seconds) * 1000 + ms;\n const text = line.replace(TIMESTAMP_REGEX, '').trim();\n syncText.push({ timestamp, text });\n }\n }\n return {\n contentType: LyricsContentType.lyrics,\n timeStampFormat: TimestampFormat.milliseconds,\n text: syncText.map(line => line.text).join('\\n'),\n syncText,\n };\n}\n","export const mpegParserLoader = {\n parserType: 'mpeg',\n extensions: ['.mp2', '.mp3', '.m2a', '.aac', 'aacp'],\n mimeTypes: ['audio/mpeg', 'audio/mp3', 'audio/aacs', 'audio/aacp'],\n async load() {\n return (await import('./MpegParser.js')).MpegParser;\n }\n};\n","export const apeParserLoader = {\n parserType: 'apev2',\n extensions: ['.ape'],\n mimeTypes: ['audio/ape', 'audio/monkeys-audio'],\n async load() {\n return (await import('./APEv2Parser.js')).APEv2Parser;\n }\n};\n","export const asfParserLoader = {\n parserType: 'asf',\n extensions: ['.asf'],\n mimeTypes: ['audio/ms-wma', 'video/ms-wmv', 'audio/ms-asf', 'video/ms-asf', 'application/vnd.ms-asf'],\n async load() {\n return (await import('./AsfParser.js')).AsfParser;\n }\n};\n","export const dsdiffParserLoader = {\n parserType: 'dsdiff',\n extensions: ['.dff'],\n mimeTypes: ['audio/dsf', 'audio/dsd'],\n async load() {\n return (await import('./DsdiffParser.js')).DsdiffParser;\n }\n};\n","export const aiffParserLoader = {\n parserType: 'aiff',\n extensions: ['.aif', 'aiff', 'aifc'],\n mimeTypes: ['audio/aiff', 'audio/aif', 'audio/aifc', 'application/aiff'],\n async load() {\n return (await import('./AiffParser.js')).AIFFParser;\n }\n};\n","export const dsfParserLoader = {\n parserType: 'dsf',\n extensions: ['.dsf'],\n mimeTypes: ['audio/dsf'],\n async load() {\n return (await import('./DsfParser.js')).DsfParser;\n }\n};\n","export const flacParserLoader = {\n parserType: 'flac',\n extensions: ['.flac'],\n mimeTypes: ['audio/flac'],\n async load() {\n return (await import('./FlacParser.js')).FlacParser;\n }\n};\n","export const matroskaParserLoader = {\n parserType: 'matroska',\n extensions: ['.mka', '.mkv', '.mk3d', '.mks', 'webm'],\n mimeTypes: ['audio/matroska', 'video/matroska', 'audio/webm', 'video/webm'],\n async load() {\n return (await import('./MatroskaParser.js')).MatroskaParser;\n }\n};\n","export const mp4ParserLoader = {\n parserType: 'mp4',\n extensions: ['.mp4', '.m4a', '.m4b', '.m4pa', 'm4v', 'm4r', '3gp', '.mov', '.movie', '.qt'],\n mimeTypes: ['audio/mp4', 'audio/m4a', 'video/m4v', 'video/mp4', 'video/quicktime'],\n async load() {\n return (await import('./MP4Parser.js')).MP4Parser;\n }\n};\n","export const musepackParserLoader = {\n parserType: 'musepack',\n extensions: ['.mpc'],\n mimeTypes: ['audio/musepack'],\n async load() {\n return (await import('./MusepackParser.js')).MusepackParser;\n }\n};\n","export const oggParserLoader = {\n parserType: 'ogg',\n extensions: ['.ogg', '.ogv', '.oga', '.ogm', '.ogx', '.opus', '.spx'],\n mimeTypes: ['audio/ogg', 'audio/opus', 'audio/speex', 'video/ogg'], // RFC 7845, RFC 6716, RFC 5574\n async load() {\n return (await import('./OggParser.js')).OggParser;\n }\n};\n","export const wavpackParserLoader = {\n parserType: 'wavpack',\n extensions: ['.wv', '.wvp'],\n mimeTypes: ['audio/wavpack'],\n async load() {\n return (await import('./WavPackParser.js')).WavPackParser;\n }\n};\n","export const riffParserLoader = {\n parserType: 'riff',\n extensions: ['.wav', 'wave', '.bwf'],\n mimeTypes: ['audio/vnd.wave', 'audio/wav', 'audio/wave'],\n async load() {\n return (await import('./WaveParser.js')).WaveParser;\n }\n};\n","import { textDecode } from '@borewit/text-codec';\nexport const endTag2 = 'LYRICS200';\nexport async function getLyricsHeaderLength(tokenizer) {\n const fileSize = tokenizer.fileInfo.size;\n if (fileSize >= 143) {\n const buf = new Uint8Array(15);\n const position = tokenizer.position;\n await tokenizer.readBuffer(buf, { position: fileSize - 143 });\n tokenizer.setPosition(position); // Restore position\n const txt = textDecode(buf, 'latin1');\n const tag = txt.substring(6);\n if (tag === endTag2) {\n return Number.parseInt(txt.substring(0, 6), 10) + 15;\n }\n }\n return 0;\n}\n","/**\n * Primary entry point, Node.js specific entry point is MusepackParser.ts\n */\nimport { fromWebStream, fromBuffer, fromBlob } from 'strtok3';\nimport { ParserFactory } from './ParserFactory.js';\nimport { APEv2Parser } from './apev2/APEv2Parser.js';\nimport { hasID3v1Header } from './id3v1/ID3v1Parser.js';\nimport { getLyricsHeaderLength } from './lyrics3/Lyrics3.js';\nexport { LyricsContentType, TimestampFormat } from './type.js';\nexport { CouldNotDetermineFileTypeError, UnsupportedFileTypeError } from './ParseError.js';\nexport * from './ParseError.js';\n/**\n * Parse Web API File\n * Requires Blob to be able to stream using a ReadableStreamBYOBReader, only available since Node.js ≥ 20\n * @param blob - Blob to parse\n * @param options - Parsing options\n * @returns Metadata\n */\nexport async function parseBlob(blob, options = {}) {\n const tokenizer = fromBlob(blob);\n try {\n return await parseFromTokenizer(tokenizer, options);\n }\n finally {\n await tokenizer.close();\n }\n}\n/**\n * Parse audio from Web Stream.Readable\n * @param webStream - WebStream to read the audio track from\n * @param options - Parsing options\n * @param fileInfo - File information object or MIME-type string\n * @returns Metadata\n */\nexport async function parseWebStream(webStream, fileInfo, options = {}) {\n const tokenizer = fromWebStream(webStream, { fileInfo: typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo });\n try {\n return await parseFromTokenizer(tokenizer, options);\n }\n finally {\n await tokenizer.close();\n }\n}\n/**\n * Parse audio from memory\n * @param uint8Array - Uint8Array holding audio data\n * @param fileInfo - File information object or MIME-type string\n * @param options - Parsing options\n * @returns Metadata\n * Ref: https://github.com/Borewit/strtok3/blob/e6938c81ff685074d5eb3064a11c0b03ca934c1d/src/index.ts#L15\n */\nexport async function parseBuffer(uint8Array, fileInfo, options = {}) {\n const tokenizer = fromBuffer(uint8Array, { fileInfo: typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo });\n return parseFromTokenizer(tokenizer, options);\n}\n/**\n * Parse audio from ITokenizer source\n * @param tokenizer - Audio source implementing the tokenizer interface\n * @param options - Parsing options\n * @returns Metadata\n */\nexport function parseFromTokenizer(tokenizer, options) {\n const parserFactory = new ParserFactory();\n return parserFactory.parse(tokenizer, undefined, options);\n}\n/**\n * Create a dictionary ordered by their tag id (key)\n * @param nativeTags list of tags\n * @returns tags indexed by id\n */\nexport function orderTags(nativeTags) {\n const tags = {};\n for (const { id, value } of nativeTags) {\n (tags[id] || (tags[id] = [])).push(value);\n }\n return tags;\n}\n/**\n * Convert rating to 1-5 star rating\n * @param rating Normalized rating [0..1] (common.rating[n].rating)\n * @returns Number of stars: 1, 2, 3, 4 or 5 stars\n */\nexport function ratingToStars(rating) {\n return rating === undefined ? 0 : 1 + Math.round(rating * 4);\n}\n/**\n * Select most likely cover image.\n * @param pictures Usually metadata.common.picture\n * @return Cover image, if any, otherwise null\n */\nexport function selectCover(pictures) {\n return pictures ? pictures.reduce((acc, cur) => {\n if (cur.name && cur.name.toLowerCase() in ['front', 'cover', 'cover (front)'])\n return cur;\n return acc;\n }) : null;\n}\nexport async function scanAppendingHeaders(tokenizer, options = {}) {\n let apeOffset = tokenizer.fileInfo.size;\n if (await hasID3v1Header(tokenizer)) {\n apeOffset -= 128;\n const lyricsLen = await getLyricsHeaderLength(tokenizer);\n apeOffset -= lyricsLen;\n }\n options.apeHeader = await APEv2Parser.findApeFooterOffset(tokenizer, apeOffset);\n}\n/**\n * Implementation only available when loaded as Node.js\n * This method will throw an Error, always.\n */\nexport async function parseFile(_filePath, _options = {}) {\n throw new Error('This function require a Node engine. To load Web API File objects use parseBlob instead.');\n}\n/**\n * Implementation only available when loaded as Node.js\n * This method will throw an Error, always.\n */\nexport async function parseStream(_stream, _fileInfo, _options = {}) {\n throw new Error('This function require a Node engine.');\n}\n/**\n * Return a list of supported mime-types\n */\nexport function getSupportedMimeTypes() {\n return new ParserFactory().getSupportedMimeTypes();\n}\n","import { parseBlob, parseFromTokenizer, parseWebStream } from \"music-metadata\";\nimport * as URI from \"uri-js\";\nimport { HttpClient } from \"@tokenizer/http\";\nimport { tokenizer as rangeTokenizer } from \"@tokenizer/range\";\n\nimport { removeUndefinedValuesFromRecord } from \"@common/utils.js\";\n\n/**\n * @import { TrackStats, TrackTags } from \"@definitions/types.d.ts\";\n * @import { Extraction, Urls } from \"./types.d.ts\";\n */\n\n// 🛠️\n\n/**\n * @param {{ includeArtwork?: boolean; mimeType?: string; stream?: ReadableStream; urls?: Urls; }} _\n * @returns {Promise<Extraction>}\n */\nexport async function musicMetadataTags({\n includeArtwork,\n mimeType,\n stream,\n urls,\n}) {\n const uri = urls ? URI.parse(urls.get) : undefined;\n const pathParts = uri?.path?.split(\"/\");\n const filename = pathParts?.[pathParts.length - 1];\n\n let meta;\n\n if (urls?.get.startsWith(\"blob:\")) {\n const blob = await fetch(urls.get).then((r) => r.blob());\n meta = await parseBlob(blob, { skipCovers: !includeArtwork });\n } else if (urls) {\n const httpClient = new HttpClient(urls.head, {\n resolveUrl: false,\n });\n httpClient.resolvedUrl = urls.get;\n const getHeadInfo = httpClient.getHeadInfo;\n\n // FUCKAROUND: Not sure of the downsides of this\n httpClient.getHeadInfo = async () => {\n const info = await getHeadInfo.call(httpClient);\n return { ...info, acceptPartialRequests: true };\n };\n\n /** @type {any} */\n const tokenizer = await rangeTokenizer(httpClient);\n meta = await parseFromTokenizer(tokenizer, { skipCovers: !includeArtwork });\n } else if (stream) {\n meta = await parseWebStream(stream, { mimeType }, {\n skipCovers: !includeArtwork,\n });\n } else {\n throw new Error(\"Missing args, need either some urls or a stream.\");\n }\n\n /** @type {TrackStats} */\n const statsFull = {\n albumGain: meta.format.albumGain,\n bitrate: meta.format.bitrate,\n bitsPerSample: meta.format.bitsPerSample,\n codec: meta.format.codec,\n container: meta.format.container,\n duration: meta.format.duration,\n lossless: meta.format.lossless,\n numberOfChannels: meta.format.numberOfChannels,\n sampleRate: meta.format.sampleRate,\n trackGain: meta.format.trackGain,\n };\n\n /** @type {TrackTags} */\n const tagsFull = {\n album: meta.common.album,\n albumartist: meta.common.albumartist,\n albumartists: Array.isArray(meta.common.albumartist)\n ? meta.common.albumartist\n : (meta.common.albumartist ? [meta.common.albumartist] : undefined),\n albumartistsort: meta.common.albumartistsort,\n albumsort: meta.common.albumsort,\n arranger: meta.common.arranger,\n artist: meta.common.artist,\n artists: meta.common.artists ??\n (meta.common.artist ? [meta.common.artist] : []),\n artistsort: meta.common.artistsort,\n asin: meta.common.asin,\n averageLevel: meta.common.averageLevel,\n barcode: meta.common.barcode,\n bpm: meta.common.bpm,\n catalognumbers: meta.common.catalognumber,\n compilation: meta.common.compilation,\n composers: meta.common.composer,\n composersort: meta.common.composersort,\n conductors: meta.common.conductor,\n date: meta.common.date,\n disc: {\n no: meta.common.disk.no || 1,\n ...(meta.common.disk.of && { of: meta.common.disk.of }),\n },\n djmixers: meta.common.djmixer,\n engineers: meta.common.engineer,\n gapless: meta.common.gapless,\n genres: Array.isArray(meta.common.genre)\n ? meta.common.genre\n : meta.common.genre\n ? [meta.common.genre]\n : undefined,\n isrc: meta.common.isrc,\n labels: meta.common.label,\n lyricists: meta.common.lyricist,\n media: meta.common.media,\n mixers: meta.common.mixer,\n moods: Array.isArray(meta.common.mood)\n ? meta.common.mood\n : meta.common.mood\n ? [meta.common.mood]\n : undefined,\n originaldate: meta.common.originaldate,\n originalyear: meta.common.originalyear,\n peakLevel: meta.common.peakLevel,\n producers: meta.common.producer,\n publishers: meta.common.publisher,\n releasecountry: meta.common.releasecountry,\n releasedate: meta.common.releasedate,\n releasestatus: meta.common.releasestatus,\n releasetypes: meta.common.releasetype,\n remixers: meta.common.remixer,\n technicians: meta.common.technician,\n title: meta.common.title || filename || urls?.head || \"Unknown\",\n titlesort: meta.common.titlesort,\n track: {\n no: meta.common.track.no || 1,\n ...(meta.common.track.of && { of: meta.common.track.of }),\n },\n work: meta.common.work,\n writers: meta.common.writer,\n year: meta.common.year,\n };\n\n const stats = removeUndefinedValuesFromRecord(statsFull);\n const tags = removeUndefinedValuesFromRecord(tagsFull);\n\n return {\n artwork: includeArtwork ? meta.common.picture : undefined,\n stats,\n tags,\n };\n}\n","import initDebug from 'debug';\nimport { ResponseInfo } from './response-info.js'; // Add 'fetch' API for node.js\nconst debug = initDebug('streaming-http-token-reader:http-client');\nconst DEFAULT_CONFIG = {\n resolveUrl: false\n};\n/**\n * Simple HTTP-client, which works both in node.js and browser\n */\nexport class HttpClient {\n constructor(url, config) {\n this.url = url;\n this.abortController = new AbortController();\n this.config = DEFAULT_CONFIG;\n Object.assign(this.config, config);\n }\n async getHeadInfo() {\n const response = new ResponseInfo(await fetch(this.url, { method: 'HEAD', signal: this.abortController.signal }));\n if (this.config.resolveUrl)\n this.resolvedUrl = response.response.url;\n return response.toRangeRequestResponse();\n }\n async getResponse(method, range) {\n const headers = new Headers();\n if (range) {\n debug(`_getResponse ${method} ${range[0]}..${range[1]}`);\n headers.set('Range', `bytes=${range[0]}-${range[1]}`);\n }\n else {\n debug(`_getResponse ${method} (range not provided)`);\n }\n const response = new ResponseInfo(await fetch(this.resolvedUrl || this.url, { method, headers, signal: this.abortController.signal }));\n if (response.response.ok) {\n if (this.config.resolveUrl)\n this.resolvedUrl = response.response.url;\n return response.toRangeRequestResponse();\n }\n throw new Error(`Unexpected HTTP response status=${response.response.status}`);\n }\n abort() {\n debug('abort');\n this.abortController.abort();\n }\n}\n//# sourceMappingURL=http-client.js.map","export const defaultMessages = 'End-Of-Stream';\n/**\n * Thrown on read operation of the end of file or stream has been reached\n */\nexport class EndOfStreamError extends Error {\n constructor() {\n super(defaultMessages);\n }\n}\n","import { EndOfStreamError } from 'peek-readable';\n/**\n * Core tokenizer\n */\nexport class AbstractTokenizer {\n /**\n * Constructor\n * @param options Tokenizer options\n * @protected\n */\n constructor(options) {\n this.numBuffer = new Uint8Array(8);\n /**\n * Tokenizer-stream position\n */\n this.position = 0;\n this.onClose = options?.onClose;\n if (options?.abortSignal) {\n options.abortSignal.addEventListener('abort', () => {\n this.abort();\n });\n }\n }\n /**\n * Read a token from the tokenizer-stream\n * @param token - The token to read\n * @param position - If provided, the desired position in the tokenizer-stream\n * @returns Promise with token data\n */\n async readToken(token, position = this.position) {\n const uint8Array = new Uint8Array(token.len);\n const len = await this.readBuffer(uint8Array, { position });\n if (len < token.len)\n throw new EndOfStreamError();\n return token.get(uint8Array, 0);\n }\n /**\n * Peek a token from the tokenizer-stream.\n * @param token - Token to peek from the tokenizer-stream.\n * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.\n * @returns Promise with token data\n */\n async peekToken(token, position = this.position) {\n const uint8Array = new Uint8Array(token.len);\n const len = await this.peekBuffer(uint8Array, { position });\n if (len < token.len)\n throw new EndOfStreamError();\n return token.get(uint8Array, 0);\n }\n /**\n * Read a numeric token from the stream\n * @param token - Numeric token\n * @returns Promise with number\n */\n async readNumber(token) {\n const len = await this.readBuffer(this.numBuffer, { length: token.len });\n if (len < token.len)\n throw new EndOfStreamError();\n return token.get(this.numBuffer, 0);\n }\n /**\n * Read a numeric token from the stream\n * @param token - Numeric token\n * @returns Promise with number\n */\n async peekNumber(token) {\n const len = await this.peekBuffer(this.numBuffer, { length: token.len });\n if (len < token.len)\n throw new EndOfStreamError();\n return token.get(this.numBuffer, 0);\n }\n /**\n * Ignore number of bytes, advances the pointer in under tokenizer-stream.\n * @param length - Number of bytes to ignore\n * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available\n */\n async ignore(length) {\n if (this.fileInfo.size !== undefined) {\n const bytesLeft = this.fileInfo.size - this.position;\n if (length > bytesLeft) {\n this.position += bytesLeft;\n return bytesLeft;\n }\n }\n this.position += length;\n return length;\n }\n async close() {\n await this.abort();\n await this.onClose?.();\n }\n normalizeOptions(uint8Array, options) {\n if (options && options.position !== undefined && options.position < this.position) {\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\n }\n if (options) {\n return {\n mayBeLess: options.mayBeLess === true,\n offset: options.offset ? options.offset : 0,\n length: options.length ? options.length : (uint8Array.length - (options.offset ? options.offset : 0)),\n position: options.position ? options.position : this.position\n };\n }\n return {\n mayBeLess: false,\n offset: 0,\n length: uint8Array.length,\n position: this.position\n };\n }\n abort() {\n return Promise.resolve(); // Ignore abort signal\n }\n}\n","import { AbstractTokenizer } from './AbstractTokenizer.js';\nimport { EndOfStreamError } from 'peek-readable';\nimport { open as fsOpen } from 'node:fs/promises';\nexport class FileTokenizer extends AbstractTokenizer {\n /**\n * Create tokenizer from provided file path\n * @param sourceFilePath File path\n */\n static async fromFile(sourceFilePath) {\n const fileHandle = await fsOpen(sourceFilePath, 'r');\n const stat = await fileHandle.stat();\n return new FileTokenizer(fileHandle, { fileInfo: { path: sourceFilePath, size: stat.size } });\n }\n constructor(fileHandle, options) {\n super(options);\n this.fileHandle = fileHandle;\n this.fileInfo = options.fileInfo;\n }\n /**\n * Read buffer from file\n * @param uint8Array - Uint8Array to write result to\n * @param options - Read behaviour options\n * @returns Promise number of bytes read\n */\n async readBuffer(uint8Array, options) {\n const normOptions = this.normalizeOptions(uint8Array, options);\n this.position = normOptions.position;\n if (normOptions.length === 0)\n return 0;\n const res = await this.fileHandle.read(uint8Array, normOptions.offset, normOptions.length, normOptions.position);\n this.position += res.bytesRead;\n if (res.bytesRead < normOptions.length && (!options || !options.mayBeLess)) {\n throw new EndOfStreamError();\n }\n return res.bytesRead;\n }\n /**\n * Peek buffer from file\n * @param uint8Array - Uint8Array (or Buffer) to write data to\n * @param options - Read behaviour options\n * @returns Promise number of bytes read\n */\n async peekBuffer(uint8Array, options) {\n const normOptions = this.normalizeOptions(uint8Array, options);\n const res = await this.fileHandle.read(uint8Array, normOptions.offset, normOptions.length, normOptions.position);\n if ((!normOptions.mayBeLess) && res.bytesRead < normOptions.length) {\n throw new EndOfStreamError();\n }\n return res.bytesRead;\n }\n async close() {\n await this.fileHandle.close();\n return super.close();\n }\n setPosition(position) {\n this.position = position;\n }\n supportsRandomAccess() {\n return true;\n }\n}\n","import { stat as fsStat } from 'node:fs/promises';\nimport { fromStream as coreFromStream } from './core.js';\nimport { FileTokenizer } from \"./FileTokenizer.js\";\nexport { FileTokenizer } from './FileTokenizer.js';\nexport * from './core.js';\n/**\n * Construct ReadStreamTokenizer from given Stream.\n * Will set fileSize, if provided given Stream has set the .path property.\n * @param stream - Node.js Stream.Readable\n * @param options - Pass additional file information to the tokenizer\n * @returns Tokenizer\n */\nexport async function fromStream(stream, options) {\n const rst = coreFromStream(stream, options);\n if (stream.path) {\n const stat = await fsStat(stream.path);\n rst.fileInfo.path = stream.path;\n rst.fileInfo.size = stat.size;\n }\n return rst;\n}\nexport const fromFile = FileTokenizer.fromFile;\n","import { AbstractTokenizer } from 'strtok3';\nimport { ChunkedFileData } from './chunked-file-data.js';\nimport initDebug from 'debug';\nconst debug = initDebug('range-request-reader');\n/**\n * RangeRequestTokenizer is tokenizer which is an adapter for range-request clients.\n * Typically, HTTP clients implementing the HTTP Range Requests (https://tools.ietf.org/html/rfc7233)\n *\n * Inspired by \"XHR Reader\" written by António Afonso\n * https://github.com/aadsm/jsmediatags/blob/master/src/XhrFileReader.js\n */\nexport class RangeRequestTokenizer extends AbstractTokenizer {\n constructor(rangeRequestClient, options) {\n super({ fileInfo: options.fileInfo });\n this.rangeRequestClient = rangeRequestClient;\n this.options = options;\n this.fileInfo = options.fileInfo;\n if (Number.isNaN(options.minimumChunkSize)) {\n throw new Error('minimumChunkSize must be a number');\n }\n this._fileData = new ChunkedFileData();\n this.options.abortSignal?.addEventListener('abort', () => {\n this.abort();\n });\n }\n setPosition(position) {\n this.position = position;\n }\n /**\n * Read portion from stream\n * @param uint8array - Target `Uint8Array`\n * @param options - Additional read options\n * @returns Promise with number of bytes read\n */\n async readBuffer(uint8array, options) {\n if (options?.position) {\n this.position = options.position;\n }\n const length = await this.peekBuffer(uint8array, options);\n this.position += length;\n return length;\n }\n /**\n * Peek (read ahead) buffer from tokenizer\n * @param uint8array - Target `Uint8Array` to fill with data peek from the tokenizer-stream\n * @param options - Additional read options\n * @returns Promise with number of bytes read\n */\n async peekBuffer(uint8array, options) {\n let length = uint8array.length;\n let offset = 0;\n let position = this.position;\n if (options) {\n if (options.position) {\n position = options.position;\n }\n if (Number.isInteger(options.offset)) {\n offset = options.offset;\n }\n if (options.length) {\n length = options.length;\n }\n else {\n length -= offset;\n }\n }\n if (length === 0) {\n return 0;\n }\n debug(`peekBuffer position=${position} length=${length}`);\n if (!this.fileInfo)\n throw new Error('File-info missing');\n const lastPos = Math.min(this.fileInfo.size - 1, position + length - 1);\n return this.loadRange([position, lastPos]).then(() => {\n this._fileData.readToBuffer(uint8array, offset, position, Math.min(this.fileInfo.size, length));\n return length;\n });\n }\n /**\n * Ignore number of bytes, advances the pointer in under tokenizer-stream.\n * @param length - Number of bytes to skip (ignore)\n * @return actual number of bytes ignored\n */\n async ignore(length) {\n const bytesLeft = this.fileInfo.size - this.position;\n if (length <= bytesLeft) {\n this.position += length;\n return length;\n }\n this.position += bytesLeft;\n return bytesLeft;\n }\n async abort() {\n this.rangeRequestClient.abort();\n }\n supportsRandomAccess() {\n return true;\n }\n async loadRange(range) {\n if (range[0] > (this.fileInfo.size - 1)) {\n throw new Error('End-Of-File');\n }\n debug(`request range ${range[0]}..${range[1]}`);\n debug(`adjusted range ${range[0]}..${range[1]}`);\n if (this._fileData.hasDataRange(range[0], range[1])) {\n debug('Read from cache');\n return;\n }\n // Always download in multiples of CHUNK_SIZE. If we're going to make a\n // request might as well get a chunk that makes sense. The big cost is\n // establishing the connection so getting 10bytes or 1K doesn't really\n // make a difference.\n range = roundRange(range, this.options.minimumChunkSize);\n // Upper range should not be greater than max file size\n range[1] = Math.min(this.fileInfo.size - 1, range[1]);\n debug(`blocked range: ${range[0]}..${range[1]}`);\n return this.rangeRequestClient.getResponse('GET', range).then(response => {\n return response.arrayBuffer().then(data => {\n this._fileData.addData(range[0], data);\n });\n });\n }\n}\nexport function roundRange(range, minimumChunkSize) {\n const length = range[1] - range[0] + 1;\n // const newLength = Math.ceil(length / minimum_chunk_size) * minimum_chunk_size;\n const newLength = Math.max(minimumChunkSize, length);\n return [range[0], range[0] + newLength - 1];\n}\n/**\n * Convert HTTP range header value to IContentRangeType\n * @param contentRange - content range\n */\nexport function parseContentRange(contentRange) {\n if (!contentRange) {\n throw new Error('Content range must be provided');\n }\n debug(`parseContentRange response: contentRange=${contentRange}`);\n const parsedContentRange = contentRange.match(/bytes (\\d+)-(\\d+)\\/(?:(\\d+)|\\*)/i);\n if (!parsedContentRange) {\n throw new Error(`FIXME: Unknown Content-Range syntax: ${contentRange}`);\n }\n return {\n firstBytePosition: Number.parseInt(parsedContentRange[1], 10),\n lastBytePosition: Number.parseInt(parsedContentRange[2], 10),\n instanceLength: parsedContentRange[3] ? Number.parseInt(parsedContentRange[3], 10) : undefined\n };\n}\n//# sourceMappingURL=range-request-tokenizer.js.map","import { RangeRequestTokenizer, roundRange } from './range-request-tokenizer.js';\nimport initDebug from 'debug';\nconst debug = initDebug('range-request-reader');\nexport class RangeRequestFactory {\n constructor(rangeRequestClient) {\n this.rangeRequestClient = rangeRequestClient;\n this.config = {\n avoidHeadRequests: false,\n initialChunkSize: 4 * 1024,\n minimumChunkSize: 1024\n };\n }\n async initTokenizer(config) {\n if (config) {\n this.config = { ...this.config, ...config };\n }\n const headRequestInfo = await this.getHeadRequestInfo();\n if (!headRequestInfo.acceptPartialRequests) {\n throw new Error('Server does not accept partial requests');\n }\n return new RangeRequestTokenizer(this.rangeRequestClient, {\n fileInfo: headRequestInfo,\n minimumChunkSize: this.config.minimumChunkSize,\n abortSignal: config?.abortSignal\n });\n }\n /**\n * Get file information, an HTTP-client may implement this doing a HEAD request\n * @return Promise with head-request-info, extending tokenizer file-info.\n */\n getHeadRequestInfo() {\n return this.config.avoidHeadRequests ?\n this.fetchFileInfoWithGetRequest() :\n this.fetchFileInfoWithHeadRequest();\n }\n async fetchFileInfoWithHeadRequest() {\n debug('_fetchSizeWithHeadRequest()');\n if (this.rangeRequestClient.getHeadInfo) {\n const info = await this.rangeRequestClient.getHeadInfo();\n if (info.size) {\n debug(`MIME-type=${info.mimeType}, content-length=${info.size}, accept-partial-requests=${info.acceptPartialRequests}`);\n return info;\n }\n }\n // Content-Length not provided by the server, fallback to\n // GET requests.\n debug('Content-Length not provided by the server, fallback to GET requests');\n return this.fetchFileInfoWithGetRequest();\n }\n async fetchFileInfoWithGetRequest() {\n const range = roundRange([0, this.config.initialChunkSize], this.config.minimumChunkSize);\n const response = await this.rangeRequestClient.getResponse('GET', range);\n debug(`_fetchSizeWithGetRequest response: contentRange=[${response.contentRange?.firstBytePosition}-${response.contentRange?.lastBytePosition}/${response.contentRange?.instanceLength}]`);\n if (!response.contentRange) {\n throw new Error('Failed to resolve content range (file size)');\n }\n return response;\n }\n}\n//# sourceMappingURL=range-request-factory.js.map","import { parseContentRange as rangeParseContentRange } from '@tokenizer/range';\nexport class ResponseInfo {\n constructor(response) {\n this.response = response;\n }\n getContentLength() {\n const contentLength = this.response.headers.get('Content-Length');\n return contentLength ? Number.parseInt(contentLength, 10) : undefined;\n }\n getAcceptRangesHeaderValue() {\n return this.response.headers.get('Accept-Ranges');\n }\n getContentType() {\n return this.response.headers.get('Content-Type');\n }\n acceptRanges() {\n const value = this.getAcceptRangesHeaderValue();\n return value !== null && value.trim().toLowerCase() === 'bytes';\n }\n getContentRange() {\n const contentRange = this.response.headers.get('Content-Range');\n if (!contentRange) {\n return;\n }\n return rangeParseContentRange(contentRange);\n }\n toRangeRequestResponse() {\n const contentRange = this.getContentRange();\n const size = contentRange ? contentRange.instanceLength : this.getContentLength();\n if (typeof size !== 'number') {\n throw new Error('Could not determine file-size from HTTP response');\n }\n return {\n url: this.response.url,\n size,\n mimeType: this.getContentType() ?? undefined,\n acceptPartialRequests: this.acceptRanges(),\n contentRange,\n arrayBuffer: () => this.response.arrayBuffer().then(res => new Uint8Array(res))\n };\n }\n}\n//# sourceMappingURL=response-info.js.map","const NOT_FOUND = -1;\n/**\n * Keeps track of data chunks (partial downloaded file fragments).\n *\n * Based on \"ChunkedFileData\" written by António Afonso\n * https://github.com/aadsm/jsmediatags/blob/master/src/ChunkedFileData.js\n */\nexport class ChunkedFileData {\n constructor() {\n this._fileData = [];\n }\n /**\n * Adds data to the file storage at a specific offset.\n */\n addData(offset, data) {\n const offsetEnd = offset + data.byteLength - 1;\n const chunkRange = this._getChunkRange(offset, offsetEnd);\n if (chunkRange.startIx === NOT_FOUND) {\n this._fileData.splice(chunkRange.insertIx || 0, 0, {\n offset,\n data\n });\n }\n else {\n // If the data to add collides with existing chunks we prepend and\n // append data from the half colliding chunks to make the collision at\n // 100%. The new data can then replace all the colliding chunkes.\n const firstChunk = this._fileData[chunkRange.startIx];\n const lastChunk = this._fileData[chunkRange.endIx];\n const needsPrepend = offset > firstChunk.offset;\n const needsAppend = offsetEnd < lastChunk.offset + lastChunk.data.byteLength - 1;\n const chunk = {\n offset: Math.min(offset, firstChunk.offset),\n data\n };\n if (needsPrepend) {\n const slicedData = firstChunk.data.slice(0, offset - firstChunk.offset);\n chunk.data = this._concatData(slicedData, data);\n }\n if (needsAppend) {\n // Use the lastChunk because the slice logic is easier to handle.\n const slicedData = chunk.data.slice(0, lastChunk.offset - chunk.offset);\n chunk.data = this._concatData(slicedData, lastChunk.data);\n }\n this._fileData.splice(chunkRange.startIx, chunkRange.endIx - chunkRange.startIx + 1, chunk);\n }\n }\n hasDataRange(offsetStart, offsetEnd) {\n for (let i = 0; i < this._fileData.length; i++) {\n const chunk = this._fileData[i];\n if (offsetEnd < chunk.offset) {\n return false;\n }\n if (offsetStart >= chunk.offset && offsetEnd < chunk.offset + chunk.data.byteLength) {\n return true;\n }\n }\n return false;\n }\n readToBuffer(buffer, offset, position, length) {\n const _pos_offset = position;\n let dataChunk;\n for (let i = 0; i < this._fileData.length; i++) {\n const dataChunkStart = this._fileData[i].offset;\n const dataChunkEnd = dataChunkStart + this._fileData[i].data.byteLength;\n if (_pos_offset >= dataChunkStart && _pos_offset < dataChunkEnd) {\n dataChunk = this._fileData[i];\n const chunkOffset = _pos_offset - dataChunkStart;\n let chunkLength = Math.min(length, dataChunk.data.byteLength - chunkOffset);\n buffer.set(dataChunk.data.subarray(chunkOffset, chunkOffset + chunkLength), offset);\n if (chunkLength < length) {\n chunkLength += this.readToBuffer(buffer, offset + chunkLength, position + chunkLength, length - chunkLength);\n }\n return chunkLength;\n }\n }\n return 0;\n }\n _concatData(buffer1, buffer2) {\n const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp;\n }\n /**\n * Finds the chunk range that overlaps the [offsetStart-1,offsetEnd+1] range.\n * When a chunk is adjacent to the offset we still consider it part of the\n * range (this is the situation of offsetStart-1 or offsetEnd+1).\n * When no chunks are found `insertIx` denotes the index where the data\n * should be inserted in the data list (startIx == NOT_FOUND and endIX ==\n * NOT_FOUND).\n */\n _getChunkRange(offsetStart, offsetEnd) {\n let startChunkIx = NOT_FOUND;\n let endChunkIx = NOT_FOUND;\n let insertIx = 0;\n // Could use binary search but not expecting that many blocks to exist.\n for (let i = 0; i < this._fileData.length; i++, insertIx = i) {\n const chunkOffsetStart = this._fileData[i].offset;\n const chunkOffsetEnd = chunkOffsetStart + this._fileData[i].data.byteLength;\n if (offsetEnd < chunkOffsetStart - 1) {\n // This offset range doesn't overlap with any chunks.\n break;\n }\n // If it is adjacent we still consider it part of the range because\n // we're going end up with a single block with all contiguous data.\n if (offsetStart <= chunkOffsetEnd + 1 &&\n offsetEnd >= chunkOffsetStart - 1) {\n startChunkIx = i;\n break;\n }\n }\n // No starting chunk was found, meaning that the offset is either before\n // or after the current stored chunks.\n if (startChunkIx === NOT_FOUND) {\n return {\n startIx: NOT_FOUND,\n endIx: NOT_FOUND,\n insertIx\n };\n }\n // Find the ending chunk.\n for (let i = startChunkIx; i < this._fileData.length; i++) {\n const chunkOffsetStart = this._fileData[i].offset;\n const chunkOffsetEnd = chunkOffsetStart + this._fileData[i].data.byteLength;\n if (offsetEnd >= chunkOffsetStart - 1) {\n // Candidate for the end chunk, it doesn't mean it is yet.\n endChunkIx = i;\n }\n if (offsetEnd <= chunkOffsetEnd + 1) {\n break;\n }\n }\n if (endChunkIx === NOT_FOUND) {\n endChunkIx = startChunkIx;\n }\n return {\n startIx: startChunkIx,\n endIx: endChunkIx\n };\n }\n}\n//# sourceMappingURL=chunked-file-data.js.map","import { AbstractTokenizer } from 'strtok3';\nimport { ChunkedFileData } from './chunked-file-data.js';\nimport initDebug from 'debug';\nconst debug = initDebug('range-request-reader');\n/**\n * RangeRequestTokenizer is tokenizer which is an adapter for range-request clients.\n * Typically, HTTP clients implementing the HTTP Range Requests (https://tools.ietf.org/html/rfc7233)\n *\n * Inspired by \"XHR Reader\" written by António Afonso\n * https://github.com/aadsm/jsmediatags/blob/master/src/XhrFileReader.js\n */\nexport class RangeRequestTokenizer extends AbstractTokenizer {\n constructor(rangeRequestClient, options) {\n super({ fileInfo: options.fileInfo });\n this.rangeRequestClient = rangeRequestClient;\n this.options = options;\n this.fileInfo = options.fileInfo;\n if (Number.isNaN(options.minimumChunkSize)) {\n throw new Error('minimumChunkSize must be a number');\n }\n this._fileData = new ChunkedFileData();\n this.options.abortSignal?.addEventListener('abort', () => {\n this.abort();\n });\n }\n setPosition(position) {\n this.position = position;\n }\n /**\n * Read portion from stream\n * @param uint8array - Target `Uint8Array`\n * @param options - Additional read options\n * @returns Promise with number of bytes read\n */\n async readBuffer(uint8array, options) {\n if (options?.position) {\n this.position = options.position;\n }\n const length = await this.peekBuffer(uint8array, options);\n this.position += length;\n return length;\n }\n /**\n * Peek (read ahead) buffer from tokenizer\n * @param uint8array - Target `Uint8Array` to fill with data peek from the tokenizer-stream\n * @param options - Additional read options\n * @returns Promise with number of bytes read\n */\n async peekBuffer(uint8array, options) {\n let length = uint8array.length;\n const offset = 0;\n let position = this.position;\n if (options) {\n if (options.position) {\n position = options.position;\n }\n if (options.length) {\n length = options.length;\n }\n else {\n length -= offset;\n }\n }\n if (length === 0) {\n return 0;\n }\n debug(`peekBuffer position=${position} length=${length}`);\n if (!this.fileInfo)\n throw new Error('File-info missing');\n const lastPos = Math.min(this.fileInfo.size - 1, position + length - 1);\n await this.loadRange([position, lastPos]);\n this._fileData.readToBuffer(uint8array, offset, position, Math.min(this.fileInfo.size, length));\n return length;\n }\n /**\n * Ignore number of bytes, advances the pointer in under tokenizer-stream.\n * @param length - Number of bytes to skip (ignore)\n * @return actual number of bytes ignored\n */\n async ignore(length) {\n const bytesLeft = this.fileInfo.size - this.position;\n if (length <= bytesLeft) {\n this.position += length;\n return length;\n }\n this.position += bytesLeft;\n return bytesLeft;\n }\n async abort() {\n this.rangeRequestClient.abort();\n }\n supportsRandomAccess() {\n return true;\n }\n async loadRange(range) {\n if (range[0] > (this.fileInfo.size - 1)) {\n throw new Error('End-Of-File');\n }\n debug(`request range ${range[0]}..${range[1]}`);\n debug(`adjusted range ${range[0]}..${range[1]}`);\n if (this._fileData.hasDataRange(range[0], range[1])) {\n debug('Read from cache');\n return;\n }\n // Always download in multiples of CHUNK_SIZE. If we're going to make a\n // request might as well get a chunk that makes sense. The big cost is\n // establishing the connection so getting 10bytes or 1K doesn't really\n // make a difference.\n range = roundRange(range, this.options.minimumChunkSize);\n // Upper range should not be greater than max file size\n range[1] = Math.min(this.fileInfo.size - 1, range[1]);\n debug(`blocked range: ${range[0]}..${range[1]}`);\n return this.rangeRequestClient.getResponse('GET', range).then(response => {\n return response.arrayBuffer().then(data => {\n this._fileData.addData(range[0], data);\n });\n });\n }\n}\nexport function roundRange(range, minimumChunkSize) {\n const length = range[1] - range[0] + 1;\n // const newLength = Math.ceil(length / minimum_chunk_size) * minimum_chunk_size;\n const newLength = Math.max(minimumChunkSize, length);\n return [range[0], range[0] + newLength - 1];\n}\n/**\n * Convert HTTP range header value to IContentRangeType\n * @param contentRange - content range\n */\nexport function parseContentRange(contentRange) {\n if (!contentRange) {\n throw new Error('Content range must be provided');\n }\n debug(`parseContentRange response: contentRange=${contentRange}`);\n const parsedContentRange = contentRange.match(/bytes (\\d+)-(\\d+)\\/(?:(\\d+)|\\*)/i);\n if (!parsedContentRange) {\n throw new Error(`FIXME: Unknown Content-Range syntax: ${contentRange}`);\n }\n return {\n firstBytePosition: Number.parseInt(parsedContentRange[1], 10),\n lastBytePosition: Number.parseInt(parsedContentRange[2], 10),\n instanceLength: parsedContentRange[3] ? Number.parseInt(parsedContentRange[3], 10) : undefined\n };\n}\n//# sourceMappingURL=range-request-tokenizer.js.map","import { RangeRequestTokenizer, roundRange } from './range-request-tokenizer.js';\nimport initDebug from 'debug';\nconst debug = initDebug('range-request-reader');\nexport class RangeRequestFactory {\n constructor(rangeRequestClient) {\n this.rangeRequestClient = rangeRequestClient;\n this.config = {\n avoidHeadRequests: false,\n initialChunkSize: 4 * 1024,\n minimumChunkSize: 1024\n };\n }\n async initTokenizer(config) {\n if (config) {\n this.config = { ...this.config, ...config };\n }\n const headRequestInfo = await this.getHeadRequestInfo();\n if (!headRequestInfo.acceptPartialRequests) {\n throw new Error('Server does not accept partial requests');\n }\n return new RangeRequestTokenizer(this.rangeRequestClient, {\n fileInfo: headRequestInfo,\n minimumChunkSize: this.config.minimumChunkSize,\n abortSignal: config?.abortSignal\n });\n }\n /**\n * Get file information, an HTTP-client may implement this doing a HEAD request\n * @return Promise with head-request-info, extending tokenizer file-info.\n */\n getHeadRequestInfo() {\n return this.config.avoidHeadRequests ?\n this.fetchFileInfoWithGetRequest() :\n this.fetchFileInfoWithHeadRequest();\n }\n async fetchFileInfoWithHeadRequest() {\n debug('_fetchSizeWithHeadRequest()');\n if (this.rangeRequestClient.getHeadInfo) {\n const info = await this.rangeRequestClient.getHeadInfo();\n if (info.size) {\n debug(`MIME-type=${info.mimeType}, content-length=${info.size}, accept-partial-requests=${info.acceptPartialRequests}`);\n return info;\n }\n }\n // Content-Length not provided by the server, fallback to\n // GET requests.\n debug('Content-Length not provided by the server, fallback to GET requests');\n return this.fetchFileInfoWithGetRequest();\n }\n async fetchFileInfoWithGetRequest() {\n const range = roundRange([0, this.config.initialChunkSize], this.config.minimumChunkSize);\n const response = await this.rangeRequestClient.getResponse('GET', range);\n debug(`_fetchSizeWithGetRequest response: contentRange=[${response.contentRange?.firstBytePosition}-${response.contentRange?.lastBytePosition}/${response.contentRange?.instanceLength}]`);\n if (!response.contentRange) {\n throw new Error('Failed to resolve content range (file size)');\n }\n return response;\n }\n}\n//# sourceMappingURL=range-request-factory.js.map","import { RangeRequestFactory } from './range-request-factory.js';\nexport { parseContentRange } from './range-request-tokenizer.js';\n/**\n * Construct range-tokenizer from range-request-client and config\n * @param rangeRequestClient - HTTP range request client\n * @param abortController - AbortController\n * @param config - Configuration\n * @return Tokenizer\n */\nexport function tokenizer(rangeRequestClient, config) {\n const factory = new RangeRequestFactory(rangeRequestClient);\n return factory.initTokenizer(config);\n}\n//# sourceMappingURL=index.js.map"],"mappings":"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OAAO,SAAS,CAAC,KAAM,IAAO,OAAO,SAAS,CAAC,KAAM,KAAQ,OAAO,MAAM,KAAM,IAApI;AAAA,EACL,KAAK;AACN;;;AC3DO,IAAM,aAAa;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEO,IAAM,YAAY;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA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","names":["parse","ContentType","parse","import_debug","initDebug","tokenizer","tokenizer","tokenizer","import_debug","import_debug","tagMap","tagMap","tagType","debug","initDebug","tagType","debug","initDebug","ContentType","mimeTypeParse","tokenizer","tokenizer","tokenizer","tokenizer","tokenizer","debug","initDebug","import_debug","EndOfStreamError","AbstractTokenizer","EndOfStreamError","AbstractTokenizer","EndOfStreamError","fromFile","import_debug","debug","initDebug","debug","import_debug","debug","initDebug","debug","initDebug","ChunkedFileData","import_debug","debug","initDebug","RangeRequestTokenizer","ChunkedFileData","roundRange","import_debug","debug","initDebug","RangeRequestFactory","RangeRequestTokenizer","roundRange","tokenizer","RangeRequestFactory","tokenizer"],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-R3OSCHAC.js.map"}
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-R72UCYY5.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-R72UCYY5.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-R72UCYY5.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-R72UCYY5.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-RYKCUUD7.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-RYKCUUD7.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-RYKCUUD7.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-RYKCUUD7.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-SGG7NSCF.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-SGG7NSCF.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-SGG7NSCF.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-SGG7NSCF.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-SRUOXJB6.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-SRUOXJB6.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-SRUOXJB6.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-SRUOXJB6.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-T3A2JWMA.js
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-T3A2JWMA.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-T3A2JWMA.js.map
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-T3A2JWMA.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-UBNX6MK2.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-UBNX6MK2.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-UBNX6MK2.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-UBNX6MK2.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-UDP6MTZR.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-UDP6MTZR.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-UDP6MTZR.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-UDP6MTZR.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-US7RU3UC.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-US7RU3UC.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-US7RU3UC.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-US7RU3UC.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-UT643YRI.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-UT643YRI.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-UT643YRI.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-UT643YRI.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-UWEF6NCQ.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-UWEF6NCQ.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-UWEF6NCQ.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-UWEF6NCQ.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-VBRRMXMF.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-VBRRMXMF.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-VBRRMXMF.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-VBRRMXMF.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-VHBDVMZU.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-VHBDVMZU.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-VHBDVMZU.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-VHBDVMZU.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-VTFKOL5E.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-VTFKOL5E.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-VTFKOL5E.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-VTFKOL5E.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-W4NIMENU.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-W4NIMENU.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-W4NIMENU.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-W4NIMENU.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-WBWWX4CZ.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-WBWWX4CZ.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-WBWWX4CZ.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-WBWWX4CZ.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-WYFYW7EG.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-WYFYW7EG.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-WYFYW7EG.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-WYFYW7EG.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-YSZE43XE.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-YSZE43XE.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-YSZE43XE.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-YSZE43XE.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-Z6RWJW2M.js
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-Z6RWJW2M.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-Z6RWJW2M.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/chunk-Z6RWJW2M.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ZB6F4LGA.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-ZB6F4LGA.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ZB6F4LGA.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-ZB6F4LGA.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ZBNFP3DI.js
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-ZBNFP3DI.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ZBNFP3DI.js.map
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-ZBNFP3DI.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ZHEXXLC7.js
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-ZHEXXLC7.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ZHEXXLC7.js.map
··· 1 + ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/chunk-ZHEXXLC7.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ZMAPA42U.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-ZMAPA42U.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/chunk-ZMAPA42U.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/chunk-ZMAPA42U.js.map
+50
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/constituents/default.js
··· 1 + import { 2 + GROUP, 3 + addToBodyIfNeeded, 4 + config 5 + } from "../../chunk-UT643YRI.js"; 6 + import "../../chunk-I4QT5UNG.js"; 7 + import "../../chunk-NEVFYBXS.js"; 8 + import "../../chunk-5U6EFMUU.js"; 9 + import "../../chunk-UBNX6MK2.js"; 10 + import "../../chunk-IMYGW2WM.js"; 11 + import "../../chunk-WYFYW7EG.js"; 12 + import "../../chunk-G2LBW36E.js"; 13 + import "../../chunk-VTFKOL5E.js"; 14 + import "../../chunk-FIMGEMH3.js"; 15 + import "../../chunk-DR6IVCFO.js"; 16 + import "../../chunk-US7RU3UC.js"; 17 + import "../../chunk-W4NIMENU.js"; 18 + import "../../chunk-VHBDVMZU.js"; 19 + import "../../chunk-DNOJCDYS.js"; 20 + import "../../chunk-T3A2JWMA.js"; 21 + import "../../chunk-3SOBXJU4.js"; 22 + import "../../chunk-IUOHNZAT.js"; 23 + import "../../chunk-5RXABJDJ.js"; 24 + import "../../chunk-7PYRBX3C.js"; 25 + import "../../chunk-JEZ5YVU7.js"; 26 + import "../../chunk-MZBNHTGF.js"; 27 + import "../../chunk-CHZKHFKZ.js"; 28 + import "../../chunk-7J35BYGY.js"; 29 + import "../../chunk-ZMAPA42U.js"; 30 + import "../../chunk-N6PLTDUY.js"; 31 + import "../../chunk-UWEF6NCQ.js"; 32 + import "../../chunk-BGA2NGTF.js"; 33 + import "../../chunk-ZBNFP3DI.js"; 34 + import "../../chunk-AN7CZG6F.js"; 35 + import "../../chunk-J7D6CDIP.js"; 36 + import "../../chunk-2X53XAU6.js"; 37 + import "../../chunk-AFAFCDHW.js"; 38 + import "../../chunk-5PUD235R.js"; 39 + import "../../chunk-SRUOXJB6.js"; 40 + import "../../chunk-KM7A6C4E.js"; 41 + import "../../chunk-OSIZG2BO.js"; 42 + import "../../chunk-UDP6MTZR.js"; 43 + import "../../chunk-7IARE43G.js"; 44 + export { 45 + GROUP, 46 + addToBodyIfNeeded, 47 + config 48 + }; 49 + 50 + //# sourceMappingURL=./default.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/constituents/default.js.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/constituents/default.js.map
+47
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/constituents/default/config.js
··· 1 + import { 2 + config_default 3 + } from "../../../chunk-OS4QRJDG.js"; 4 + import "../../../chunk-UT643YRI.js"; 5 + import "../../../chunk-I4QT5UNG.js"; 6 + import "../../../chunk-NEVFYBXS.js"; 7 + import "../../../chunk-5U6EFMUU.js"; 8 + import "../../../chunk-UBNX6MK2.js"; 9 + import "../../../chunk-IMYGW2WM.js"; 10 + import "../../../chunk-WYFYW7EG.js"; 11 + import "../../../chunk-G2LBW36E.js"; 12 + import "../../../chunk-VTFKOL5E.js"; 13 + import "../../../chunk-FIMGEMH3.js"; 14 + import "../../../chunk-DR6IVCFO.js"; 15 + import "../../../chunk-US7RU3UC.js"; 16 + import "../../../chunk-W4NIMENU.js"; 17 + import "../../../chunk-VHBDVMZU.js"; 18 + import "../../../chunk-DNOJCDYS.js"; 19 + import "../../../chunk-T3A2JWMA.js"; 20 + import "../../../chunk-3SOBXJU4.js"; 21 + import "../../../chunk-IUOHNZAT.js"; 22 + import "../../../chunk-5RXABJDJ.js"; 23 + import "../../../chunk-7PYRBX3C.js"; 24 + import "../../../chunk-JEZ5YVU7.js"; 25 + import "../../../chunk-MZBNHTGF.js"; 26 + import "../../../chunk-CHZKHFKZ.js"; 27 + import "../../../chunk-7J35BYGY.js"; 28 + import "../../../chunk-ZMAPA42U.js"; 29 + import "../../../chunk-N6PLTDUY.js"; 30 + import "../../../chunk-UWEF6NCQ.js"; 31 + import "../../../chunk-BGA2NGTF.js"; 32 + import "../../../chunk-ZBNFP3DI.js"; 33 + import "../../../chunk-AN7CZG6F.js"; 34 + import "../../../chunk-J7D6CDIP.js"; 35 + import "../../../chunk-2X53XAU6.js"; 36 + import "../../../chunk-AFAFCDHW.js"; 37 + import "../../../chunk-5PUD235R.js"; 38 + import "../../../chunk-SRUOXJB6.js"; 39 + import "../../../chunk-KM7A6C4E.js"; 40 + import "../../../chunk-OSIZG2BO.js"; 41 + import "../../../chunk-UDP6MTZR.js"; 42 + import "../../../chunk-7IARE43G.js"; 43 + export { 44 + config_default as default 45 + }; 46 + 47 + //# sourceMappingURL=./config.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/constituents/default/config.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/constituents/default/config.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/element.js
··· 1 + ../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/common/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/element.js.map
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/signal.js
··· 1 + ../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/common/signal.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/signal.js.map
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/signal.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/utils.js
··· 1 + ../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/common/utils.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/utils.js.map
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/utils.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/worker.js
··· 1 + ../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/common/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/worker.js.map
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/worker/rpc.js
··· 1 + ../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/common/worker/rpc.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/common/worker/rpc.js.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/worker/rpc.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/configurator/input/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/configurator/input/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/configurator/input/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/input/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/configurator/input/worker.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/configurator/input/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/configurator/input/worker.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/input/worker.js.map
+19
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/configurator/output/element.js
··· 1 + import { 2 + CLASS, 3 + NAME, 4 + element_default 5 + } from "../../../chunk-CHZKHFKZ.js"; 6 + import "../../../chunk-AFAFCDHW.js"; 7 + import "../../../chunk-5PUD235R.js"; 8 + import "../../../chunk-SRUOXJB6.js"; 9 + import "../../../chunk-KM7A6C4E.js"; 10 + import "../../../chunk-OSIZG2BO.js"; 11 + import "../../../chunk-UDP6MTZR.js"; 12 + import "../../../chunk-7IARE43G.js"; 13 + export { 14 + CLASS, 15 + NAME, 16 + element_default as default 17 + }; 18 + 19 + //# sourceMappingURL=./element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/configurator/output/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/output/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/engine/audio/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/engine/audio/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/engine/audio/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/engine/audio/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/engine/queue/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/engine/queue/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/engine/queue/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/engine/queue/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/engine/queue/worker.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/engine/queue/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/engine/queue/worker.js.map
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/engine/queue/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/common.js
··· 1 + ../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/common.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/common.js.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/common.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/opensubsonic/common.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/opensubsonic/common.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/opensubsonic/common.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/common.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/opensubsonic/constants.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/opensubsonic/constants.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/opensubsonic/constants.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/constants.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/opensubsonic/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/opensubsonic/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/opensubsonic/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/opensubsonic/worker.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/opensubsonic/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/opensubsonic/worker.js.map
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/opensubsonic/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/s3/common.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/s3/common.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/s3/common.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/common.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/s3/constants.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/s3/constants.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/s3/constants.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/constants.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/s3/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/s3/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/s3/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/s3/worker.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/input/s3/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/input/s3/worker.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/input/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/input/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/input/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/input/element.js.map
+25
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/output/element.js
··· 1 + import { 2 + CLASS, 3 + NAME, 4 + element_default 5 + } from "../../../chunk-3SOBXJU4.js"; 6 + import "../../../chunk-IUOHNZAT.js"; 7 + import "../../../chunk-5RXABJDJ.js"; 8 + import "../../../chunk-7PYRBX3C.js"; 9 + import "../../../chunk-JEZ5YVU7.js"; 10 + import "../../../chunk-MZBNHTGF.js"; 11 + import "../../../chunk-CHZKHFKZ.js"; 12 + import "../../../chunk-AFAFCDHW.js"; 13 + import "../../../chunk-5PUD235R.js"; 14 + import "../../../chunk-SRUOXJB6.js"; 15 + import "../../../chunk-KM7A6C4E.js"; 16 + import "../../../chunk-OSIZG2BO.js"; 17 + import "../../../chunk-UDP6MTZR.js"; 18 + import "../../../chunk-7IARE43G.js"; 19 + export { 20 + CLASS, 21 + NAME, 22 + element_default as default 23 + }; 24 + 25 + //# sourceMappingURL=./element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/output/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/output/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/process-tracks/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/process-tracks/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/process-tracks/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/process-tracks/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/process-tracks/worker.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/process-tracks/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/process-tracks/worker.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/process-tracks/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/queue-audio/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/queue-audio/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/queue-audio/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/queue-audio/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/queue-tracks/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/queue-tracks/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/queue-tracks/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/queue-tracks/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/queue-tracks/worker.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/queue-tracks/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/queue-tracks/worker.js.map
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/queue-tracks/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/repeat-shuffle/element.js
··· 1 + ../../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/components/orchestrator/repeat-shuffle/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/repeat-shuffle/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/repeat-shuffle/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/search-tracks/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/search-tracks/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/search-tracks/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/search-tracks/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/search-tracks/worker.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/search-tracks/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/search-tracks/worker.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/search-tracks/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/sources/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/orchestrator/sources/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/orchestrator/sources/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/sources/element.js.map
+11
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/output/common.js
··· 1 + import { 2 + outputManager 3 + } from "../../chunk-MZBNHTGF.js"; 4 + import "../../chunk-SRUOXJB6.js"; 5 + import "../../chunk-KM7A6C4E.js"; 6 + import "../../chunk-7IARE43G.js"; 7 + export { 8 + outputManager 9 + }; 10 + 11 + //# sourceMappingURL=./common.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/output/common.js.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/common.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/output/polymorphic/indexed-db/constants.js
··· 1 + ../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/output/polymorphic/indexed-db/constants.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/output/polymorphic/indexed-db/constants.js.map
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/constants.js.map
+20
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/output/polymorphic/indexed-db/element.js
··· 1 + import { 2 + CLASS, 3 + NAME, 4 + element_default 5 + } from "../../../../chunk-JEZ5YVU7.js"; 6 + import "../../../../chunk-MZBNHTGF.js"; 7 + import "../../../../chunk-AFAFCDHW.js"; 8 + import "../../../../chunk-5PUD235R.js"; 9 + import "../../../../chunk-SRUOXJB6.js"; 10 + import "../../../../chunk-KM7A6C4E.js"; 11 + import "../../../../chunk-OSIZG2BO.js"; 12 + import "../../../../chunk-UDP6MTZR.js"; 13 + import "../../../../chunk-7IARE43G.js"; 14 + export { 15 + CLASS, 16 + NAME, 17 + element_default as default 18 + }; 19 + 20 + //# sourceMappingURL=./element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/output/polymorphic/indexed-db/element.js.map
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/output/polymorphic/indexed-db/worker.js
··· 1 + ../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/output/polymorphic/indexed-db/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/output/polymorphic/indexed-db/worker.js.map
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/artwork/constants.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/artwork/constants.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/artwork/constants.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/artwork/constants.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/artwork/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/artwork/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/artwork/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/artwork/element.js.map
+173
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/artwork/worker.js
··· 1 + import { 2 + musicMetadataTags 3 + } from "../../../chunk-R3OSCHAC.js"; 4 + import "../../../chunk-L3PGUTA5.js"; 5 + import "../../../chunk-Z6RWJW2M.js"; 6 + import "../../../chunk-SGG7NSCF.js"; 7 + import "../../../chunk-7OCWG5AW.js"; 8 + import "../../../chunk-CSVVW572.js"; 9 + import "../../../chunk-6AX6SYMQ.js"; 10 + import "../../../chunk-FGRUWWG5.js"; 11 + import "../../../chunk-ETGVMC2T.js"; 12 + import { 13 + IDB_ARTWORK_PREFIX 14 + } from "../../../chunk-JIV2BMIF.js"; 15 + import { 16 + get, 17 + set 18 + } from "../../../chunk-DNOJCDYS.js"; 19 + import "../../../chunk-BGA2NGTF.js"; 20 + import "../../../chunk-AN7CZG6F.js"; 21 + import "../../../chunk-J7D6CDIP.js"; 22 + import { 23 + ostiary, 24 + rpc 25 + } from "../../../chunk-OSIZG2BO.js"; 26 + import "../../../chunk-UDP6MTZR.js"; 27 + import { 28 + __name 29 + } from "../../../chunk-7IARE43G.js"; 30 + 31 + // components/processor/artwork/worker.js 32 + var queue = []; 33 + async function artwork(request) { 34 + const art = await processRequest(request); 35 + return art; 36 + } 37 + __name(artwork, "artwork"); 38 + function supply(items) { 39 + const exe = !queue[0]; 40 + queue = [...queue, ...items]; 41 + if (exe) shiftQueue(); 42 + } 43 + __name(supply, "supply"); 44 + ostiary((context) => { 45 + rpc(context, { 46 + artwork, 47 + supply 48 + }); 49 + }); 50 + function escapeLucene(str) { 51 + return [].map.call(str, (char) => { 52 + if (char === "+" || char === "-" || char === "&" || char === "|" || char === "!" || char === "(" || char === ")" || char === "{" || char === "}" || char === "[" || char === "]" || char === "^" || char === '"' || char === "~" || char === "*" || char === "?" || char === ":" || char === "\\" || char === "/") { 53 + return "\\" + char; 54 + } else return char; 55 + }).join(""); 56 + } 57 + __name(escapeLucene, "escapeLucene"); 58 + async function lastFm(req) { 59 + if (!navigator.onLine) return []; 60 + const query = req.tags?.artist; 61 + return await fetch( 62 + `https://ws.audioscrobbler.com/2.0/?method=album.search&album=${query}&api_key=4f0fe85b67baef8bb7d008a8754a95e5&format=json` 63 + ).then((r) => r.json()).then((r) => lastFmCover(r.results.albummatches.album)).catch((err) => { 64 + console.error(err); 65 + return []; 66 + }); 67 + } 68 + __name(lastFm, "lastFm"); 69 + async function lastFmCover(remainingMatches) { 70 + const album = remainingMatches[0]; 71 + const url = album ? album.image[album.image.length - 1]["#text"] : null; 72 + return url && url !== "" ? await fetch(url).then((r) => r.blob()).then(async (b) => [ 73 + { 74 + bytes: await b.arrayBuffer().then((buf) => new Uint8Array(buf)), 75 + mime: b.type 76 + } 77 + ]).catch((err) => { 78 + return lastFmCover(remainingMatches.slice(1)); 79 + }) : album ? lastFmCover(remainingMatches.slice(1)) : []; 80 + } 81 + __name(lastFmCover, "lastFmCover"); 82 + async function musicBrainz(req) { 83 + const artist = req.tags?.artist; 84 + const album = req.tags?.album; 85 + if (!navigator.onLine) return []; 86 + if (!album && !artist) return []; 87 + const query = `release:"${escapeLucene(album || "")}"` + (req.variousArtists ? `` : ` AND artistname:"${escapeLucene(artist || "")}"`); 88 + const encodedQuery = encodeURIComponent(query); 89 + return await fetch( 90 + `https://musicbrainz.org/ws/2/release/?query=${encodedQuery}&fmt=json` 91 + ).then((r) => r.json()).then((r) => { 92 + if (r.releases.length === 0 && !req.variousArtists) { 93 + return musicBrainz({ ...req, variousArtists: true }); 94 + } else { 95 + return musicBrainzCover(r.releases, req); 96 + } 97 + }).catch((err) => { 98 + return []; 99 + }); 100 + } 101 + __name(musicBrainz, "musicBrainz"); 102 + async function musicBrainzCover(remainingReleases, req) { 103 + const release = remainingReleases[0]; 104 + if (!release) return []; 105 + const credit = release?.["artist-credit"]?.[0]?.name; 106 + if (req.variousArtists && credit !== "Various Artists" && credit !== req.tags?.artist) return []; 107 + return await fetch( 108 + `https://coverartarchive.org/release/${release.id}/front-1200` 109 + ).then((r) => r.blob()).then(async (b) => { 110 + if (b.type.startsWith("image/")) { 111 + return [{ 112 + bytes: await b.arrayBuffer().then((buf) => new Uint8Array(buf)), 113 + mime: b.type 114 + }]; 115 + } else { 116 + return musicBrainzCover(remainingReleases.slice(1), req); 117 + } 118 + }).catch((err) => { 119 + console.error(err); 120 + return musicBrainzCover(remainingReleases.slice(1), req); 121 + }); 122 + } 123 + __name(musicBrainzCover, "musicBrainzCover"); 124 + async function processRequest(req) { 125 + const cache = await get(`${IDB_ARTWORK_PREFIX}/${req.cacheId}`); 126 + if (cache && Array.isArray(cache) && cache.length) return cache; 127 + if (req.tags?.artist?.toUpperCase() === "VA") { 128 + req.variousArtists = true; 129 + } 130 + let art = []; 131 + const meta = await musicMetadataTags({ ...req, includeArtwork: true }).catch( 132 + /** @param {Error} err */ 133 + (err) => { 134 + console.error("music-metadata error", err); 135 + const extraction = {}; 136 + return extraction; 137 + } 138 + ); 139 + if (!req.tags && meta.tags) req.tags = meta.tags; 140 + const fromMeta = meta.artwork?.map( 141 + /** 142 + * @param {IPicture} a 143 + */ 144 + (a) => { 145 + return { bytes: a.data, mime: a.format }; 146 + } 147 + ) || []; 148 + art.push(...fromMeta); 149 + if (art.length === 0) { 150 + const fromMusicBrainz = await musicBrainz(req); 151 + art.push(...fromMusicBrainz); 152 + } 153 + if (art.length === 0) { 154 + const fromLastFm = await lastFm(req); 155 + art.push(...fromLastFm); 156 + } 157 + await set(`${IDB_ARTWORK_PREFIX}/${req.cacheId}`, art); 158 + return art; 159 + } 160 + __name(processRequest, "processRequest"); 161 + async function shiftQueue() { 162 + const next = queue.shift(); 163 + if (!next) return; 164 + await processRequest(next); 165 + await shiftQueue(); 166 + } 167 + __name(shiftQueue, "shiftQueue"); 168 + export { 169 + artwork, 170 + supply 171 + }; 172 + 173 + //# sourceMappingURL=./worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/artwork/worker.js.map
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/artwork/worker.js.map
+20
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/metadata/common.js
··· 1 + import { 2 + musicMetadataTags 3 + } from "../../../chunk-R3OSCHAC.js"; 4 + import "../../../chunk-L3PGUTA5.js"; 5 + import "../../../chunk-Z6RWJW2M.js"; 6 + import "../../../chunk-SGG7NSCF.js"; 7 + import "../../../chunk-7OCWG5AW.js"; 8 + import "../../../chunk-CSVVW572.js"; 9 + import "../../../chunk-6AX6SYMQ.js"; 10 + import "../../../chunk-FGRUWWG5.js"; 11 + import "../../../chunk-ETGVMC2T.js"; 12 + import "../../../chunk-BGA2NGTF.js"; 13 + import "../../../chunk-AN7CZG6F.js"; 14 + import "../../../chunk-J7D6CDIP.js"; 15 + import "../../../chunk-7IARE43G.js"; 16 + export { 17 + musicMetadataTags 18 + }; 19 + 20 + //# sourceMappingURL=./common.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/metadata/common.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/metadata/common.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/metadata/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/metadata/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/metadata/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/metadata/element.js.map
+47
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/metadata/worker.js
··· 1 + import { 2 + musicMetadataTags 3 + } from "../../../chunk-R3OSCHAC.js"; 4 + import "../../../chunk-L3PGUTA5.js"; 5 + import "../../../chunk-Z6RWJW2M.js"; 6 + import "../../../chunk-SGG7NSCF.js"; 7 + import "../../../chunk-7OCWG5AW.js"; 8 + import "../../../chunk-CSVVW572.js"; 9 + import "../../../chunk-6AX6SYMQ.js"; 10 + import "../../../chunk-FGRUWWG5.js"; 11 + import "../../../chunk-ETGVMC2T.js"; 12 + import "../../../chunk-BGA2NGTF.js"; 13 + import "../../../chunk-AN7CZG6F.js"; 14 + import "../../../chunk-J7D6CDIP.js"; 15 + import { 16 + ostiary, 17 + rpc 18 + } from "../../../chunk-OSIZG2BO.js"; 19 + import "../../../chunk-UDP6MTZR.js"; 20 + import { 21 + __name 22 + } from "../../../chunk-7IARE43G.js"; 23 + 24 + // components/processor/metadata/worker.js 25 + async function supply(args) { 26 + return await musicMetadataTags(args).catch( 27 + /** 28 + * @param {Error} err 29 + * @returns {Extraction} 30 + */ 31 + (err) => { 32 + console.warn("Metadata processor error:", err, args); 33 + return {}; 34 + } 35 + ); 36 + } 37 + __name(supply, "supply"); 38 + ostiary((context) => { 39 + rpc(context, { 40 + supply 41 + }); 42 + }); 43 + export { 44 + supply 45 + }; 46 + 47 + //# sourceMappingURL=./worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/metadata/worker.js.map
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/metadata/worker.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/search/constants.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/search/constants.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/search/constants.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/search/constants.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/search/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/search/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/search/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/search/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/search/worker.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/search/worker.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/processor/search/worker.js.map
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/processor/search/worker.js.map
+15
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/base.js
··· 1 + import { 2 + OutputTransformer 3 + } from "../../../chunk-7PYRBX3C.js"; 4 + import "../../../chunk-AFAFCDHW.js"; 5 + import "../../../chunk-5PUD235R.js"; 6 + import "../../../chunk-SRUOXJB6.js"; 7 + import "../../../chunk-KM7A6C4E.js"; 8 + import "../../../chunk-OSIZG2BO.js"; 9 + import "../../../chunk-UDP6MTZR.js"; 10 + import "../../../chunk-7IARE43G.js"; 11 + export { 12 + OutputTransformer 13 + }; 14 + 15 + //# sourceMappingURL=./base.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/base.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/base.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/bytes/automerge/constants.js
··· 1 + ../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/automerge/constants.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/bytes/automerge/constants.js.map
··· 1 + ../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/automerge/constants.js.map
+77
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/bytes/automerge/element.js
··· 1 + import { 2 + INITIAL_TRACKS_DOCUMENT 3 + } from "../../../../../chunk-47SOYRCA.js"; 4 + import { 5 + it, 6 + rt, 7 + st 8 + } from "../../../../../chunk-YSZE43XE.js"; 9 + import { 10 + OutputTransformer 11 + } from "../../../../../chunk-7PYRBX3C.js"; 12 + import { 13 + recursivelyCloneRecords 14 + } from "../../../../../chunk-AN7CZG6F.js"; 15 + import { 16 + isUint8Array 17 + } from "../../../../../chunk-J7D6CDIP.js"; 18 + import "../../../../../chunk-AFAFCDHW.js"; 19 + import "../../../../../chunk-5PUD235R.js"; 20 + import { 21 + computed 22 + } from "../../../../../chunk-SRUOXJB6.js"; 23 + import "../../../../../chunk-KM7A6C4E.js"; 24 + import "../../../../../chunk-OSIZG2BO.js"; 25 + import "../../../../../chunk-UDP6MTZR.js"; 26 + import { 27 + __name 28 + } from "../../../../../chunk-7IARE43G.js"; 29 + 30 + // components/transformer/output/bytes/automerge/element.js 31 + var AutomergeBytesOutputTransformer = class extends OutputTransformer { 32 + static { 33 + __name(this, "AutomergeBytesOutputTransformer"); 34 + } 35 + constructor() { 36 + super(); 37 + const base = this.base(); 38 + const document = computed(() => { 39 + const value = base.tracks.collection(); 40 + if (isUint8Array(value)) { 41 + return st(value); 42 + } else if (value == void 0) { 43 + return INITIAL_TRACKS_DOCUMENT; 44 + } else { 45 + throw new Error("Invalid data type"); 46 + } 47 + }); 48 + const manager = { 49 + tracks: { 50 + ...base.tracks, 51 + collection: computed(() => document().collection), 52 + save: /* @__PURE__ */ __name(async (newTracks) => { 53 + const doc = rt(document(), (d) => { 54 + const clonedCollection = newTracks.map((track) => { 55 + return recursivelyCloneRecords(track); 56 + }); 57 + d.collection = clonedCollection; 58 + }); 59 + const bytes = it(doc); 60 + await base.tracks.save(bytes); 61 + }, "save") 62 + } 63 + }; 64 + this.tracks = manager.tracks; 65 + } 66 + }; 67 + var element_default = AutomergeBytesOutputTransformer; 68 + var CLASS = AutomergeBytesOutputTransformer; 69 + var NAME = "dtob-automerge"; 70 + customElements.define(NAME, CLASS); 71 + export { 72 + CLASS, 73 + NAME, 74 + element_default as default 75 + }; 76 + 77 + //# sourceMappingURL=./element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/bytes/automerge/element.js.map
··· 1 + ../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/automerge/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/bytes/automerge/utils.js
··· 1 + ../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/automerge/utils.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/bytes/automerge/utils.js.map
··· 1 + ../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/automerge/utils.js.map
+66
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/bytes/json/element.js
··· 1 + import { 2 + OutputTransformer 3 + } from "../../../../../chunk-7PYRBX3C.js"; 4 + import "../../../../../chunk-AFAFCDHW.js"; 5 + import "../../../../../chunk-5PUD235R.js"; 6 + import { 7 + computed 8 + } from "../../../../../chunk-SRUOXJB6.js"; 9 + import "../../../../../chunk-KM7A6C4E.js"; 10 + import "../../../../../chunk-OSIZG2BO.js"; 11 + import "../../../../../chunk-UDP6MTZR.js"; 12 + import { 13 + __name 14 + } from "../../../../../chunk-7IARE43G.js"; 15 + 16 + // components/transformer/output/bytes/json/element.js 17 + var JsonStringOutputTransformer = class extends OutputTransformer { 18 + static { 19 + __name(this, "JsonStringOutputTransformer"); 20 + } 21 + constructor() { 22 + super(); 23 + const base = this.base(); 24 + const manager = { 25 + tracks: { 26 + ...base.tracks, 27 + collection: computed(() => { 28 + let data = base.tracks.collection(); 29 + let json; 30 + if (data instanceof Uint8Array) { 31 + const decoder = new TextDecoder(); 32 + json = decoder.decode(data); 33 + } 34 + if (typeof data !== "string") json = "[]"; 35 + else json = data; 36 + try { 37 + return JSON.parse(json); 38 + } catch (err) { 39 + console.error( 40 + "components/transformer/output/string/json: Failed to parse JSON" 41 + ); 42 + return []; 43 + } 44 + }), 45 + save: /* @__PURE__ */ __name(async (newTracks) => { 46 + const json = JSON.stringify(newTracks); 47 + const encoder = new TextEncoder(); 48 + const bytes = encoder.encode(json); 49 + await base.tracks.save(bytes); 50 + }, "save") 51 + } 52 + }; 53 + this.tracks = manager.tracks; 54 + } 55 + }; 56 + var element_default = JsonStringOutputTransformer; 57 + var CLASS = JsonStringOutputTransformer; 58 + var NAME = "dtos-json"; 59 + customElements.define(NAME, CLASS); 60 + export { 61 + CLASS, 62 + NAME, 63 + element_default as default 64 + }; 65 + 66 + //# sourceMappingURL=./element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/bytes/json/element.js.map
··· 1 + ../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/json/element.js.map
+20
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/refiner/default/element.js
··· 1 + import { 2 + CLASS, 3 + NAME, 4 + element_default 5 + } from "../../../../../chunk-IUOHNZAT.js"; 6 + import "../../../../../chunk-7PYRBX3C.js"; 7 + import "../../../../../chunk-AFAFCDHW.js"; 8 + import "../../../../../chunk-5PUD235R.js"; 9 + import "../../../../../chunk-SRUOXJB6.js"; 10 + import "../../../../../chunk-KM7A6C4E.js"; 11 + import "../../../../../chunk-OSIZG2BO.js"; 12 + import "../../../../../chunk-UDP6MTZR.js"; 13 + import "../../../../../chunk-7IARE43G.js"; 14 + export { 15 + CLASS, 16 + NAME, 17 + element_default as default 18 + }; 19 + 20 + //# sourceMappingURL=./element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/refiner/default/element.js.map
··· 1 + ../../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/refiner/default/element.js.map
+20
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/string/json/element.js
··· 1 + import { 2 + CLASS, 3 + NAME, 4 + element_default 5 + } from "../../../../../chunk-5RXABJDJ.js"; 6 + import "../../../../../chunk-7PYRBX3C.js"; 7 + import "../../../../../chunk-AFAFCDHW.js"; 8 + import "../../../../../chunk-5PUD235R.js"; 9 + import "../../../../../chunk-SRUOXJB6.js"; 10 + import "../../../../../chunk-KM7A6C4E.js"; 11 + import "../../../../../chunk-OSIZG2BO.js"; 12 + import "../../../../../chunk-UDP6MTZR.js"; 13 + import "../../../../../chunk-7IARE43G.js"; 14 + export { 15 + CLASS, 16 + NAME, 17 + element_default as default 18 + }; 19 + 20 + //# sourceMappingURL=./element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/components/transformer/output/string/json/element.js.map
··· 1 + ../../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/string/json/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/definitions/index.ts
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/definitions/index.ts
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/definitions/output/tracks.json
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/definitions/output/tracks.json
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/favicon-16x16.png
··· 1 + ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon-16x16.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/favicon-32x32.png
··· 1 + ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon-32x32.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/favicon.ico
··· 1 + ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon.ico
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/fonts/CommitMonoVariable.woff2
··· 1 + ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/fonts/CommitMonoVariable.woff2
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/fonts/InterVariable-Italic.woff2
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/fonts/InterVariable-Italic.woff2
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/fonts/InterVariable.woff2
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/fonts/InterVariable.woff2
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/fonts/ms_sans_serif.woff2
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif.woff2
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/fonts/ms_sans_serif_bold.woff2
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif_bold.woff2
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/1.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/1.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/10.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/10.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/11.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/11.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/12.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/12.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/13.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/13.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/14.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/14.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/15.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/15.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/16.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/16.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/17.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/17.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/18.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/18.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/19.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/19.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/2.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/2.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/20.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/20.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/21.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/21.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/22.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/22.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/23.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/23.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/24.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/24.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/25.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/25.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/26.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/26.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/27.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/27.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/28.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/28.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/29.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/29.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/3.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/3.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/30.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/30.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/4.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/4.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/5.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/5.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/6.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/6.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/7.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/7.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/8.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/8.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/9.jpg
··· 1 + ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/9.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/1.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/1.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/10.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/10.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/11.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/11.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/12.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/12.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/13.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/13.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/14.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/14.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/15.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/15.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/16.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/16.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/17.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/17.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/18.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/18.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/19.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/19.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/2.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/2.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/20.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/20.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/21.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/21.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/22.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/22.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/23.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/23.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/24.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/24.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/25.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/25.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/26.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/26.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/27.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/27.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/28.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/28.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/29.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/29.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/3.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/3.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/30.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/30.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/4.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/4.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/5.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/5.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/6.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/6.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/7.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/7.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/8.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/8.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/background/thumbnails/9.jpg
··· 1 + ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/9.jpg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/diffuse-current.svg
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/diffuse-current.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/diffuse-dark.svg
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-dark.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/diffuse-grey.svg
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-grey.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/diffuse-light.svg
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-light.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/diffuse__icon-dark.svg
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-dark.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/diffuse__icon-grey.svg
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-grey.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/diffuse__icon-light.svg
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-light.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icon-square-ws.png
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon-square-ws.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icon-square.png
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon-square.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icon.png
··· 1 + ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/catalog-1.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/catalog-1.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/cd_audio_cd_a-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/cd_audio_cd_a-2.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-2.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/cd_audio_cd_a-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/cd_audio_cd_a-4.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-4.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/cd_drive-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_drive-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/cd_drive_purple-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_drive_purple-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/channels-2.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/channels-2.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/check-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/check-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/computer_sound-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/computer_sound-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/computer_user_pencil-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/computer_user_pencil-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/connected_world-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/connected_world-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_admin_tools-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_admin_tools-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_admin_tools-5.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_admin_tools-5.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_channels-2.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_channels-2.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_channels-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_channels-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_closed-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_closed-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_closed-4.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_closed-4.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_control_panel-2.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_control_panel-2.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_control_panel-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_control_panel-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_explorer-4.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_explorer-4.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_explorer-5.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_explorer-5.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_favorites-2.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_favorites-2.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_favorites-4.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_favorites-4.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_net_web-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_net_web-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_net_web-4.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_net_web-4.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_network_conn-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_network_conn-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_network_conn-5.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_network_conn-5.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_open_file_mydocs_2k-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_open_file_mydocs_2k-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/directory_open_file_mydocs_2k-4.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_open_file_mydocs_2k-4.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/gears-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/gears-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/globe_map-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/globe_map-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/help_book_big-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/help_book_big-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/installer-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/installer-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/installer_generic_old-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/installer_generic_old-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/loudspeaker_wave-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/loudspeaker_wave-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/magnifying_glass-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/magnifying_glass-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/magnifying_glass_4-1.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/magnifying_glass_4-1.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/media_player-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/media_player-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/media_player_stream_no.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/media_player_stream_no.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/ms_dos-1.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/ms_dos-1.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/msg_error-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_error-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/msg_information-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_information-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/msg_question-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_question-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/msg_warning-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_warning-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/multimedia-4.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/multimedia-4.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/network_drive_world-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/network_drive_world-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/no-1.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/no-1.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/restrict-1.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/restrict-1.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/search_computer-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_computer-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/search_server-1.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_server-1.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/search_web-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_web-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/settings_gear-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/settings_gear-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/settings_gear-2.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/settings_gear-2.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/tip.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/tip.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/utopia_smiley.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/utopia_smiley.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/winamp2-32x32.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/winamp2-32x32.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/windows-0.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/windows-0.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/world-2.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world-2.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/world-4.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world-4.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/images/icons/windows_98/world_network_directories-3.png
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world_network_directories-3.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/index.html
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/index.html
+94
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/index.js
··· 1 + import { 2 + GROUP 3 + } from "./chunk-UT643YRI.js"; 4 + import { 5 + element_default as element_default4 6 + } from "./chunk-I4QT5UNG.js"; 7 + import "./chunk-NEVFYBXS.js"; 8 + import "./chunk-5U6EFMUU.js"; 9 + import "./chunk-UBNX6MK2.js"; 10 + import { 11 + element_default as element_default5 12 + } from "./chunk-IMYGW2WM.js"; 13 + import "./chunk-WYFYW7EG.js"; 14 + import "./chunk-G2LBW36E.js"; 15 + import "./chunk-VTFKOL5E.js"; 16 + import "./chunk-FIMGEMH3.js"; 17 + import "./chunk-DR6IVCFO.js"; 18 + import "./chunk-US7RU3UC.js"; 19 + import { 20 + element_default as element_default2 21 + } from "./chunk-W4NIMENU.js"; 22 + import "./chunk-VHBDVMZU.js"; 23 + import "./chunk-DNOJCDYS.js"; 24 + import "./chunk-T3A2JWMA.js"; 25 + import { 26 + element_default as element_default3 27 + } from "./chunk-3SOBXJU4.js"; 28 + import "./chunk-IUOHNZAT.js"; 29 + import "./chunk-5RXABJDJ.js"; 30 + import "./chunk-7PYRBX3C.js"; 31 + import "./chunk-JEZ5YVU7.js"; 32 + import "./chunk-MZBNHTGF.js"; 33 + import "./chunk-CHZKHFKZ.js"; 34 + import "./chunk-7J35BYGY.js"; 35 + import "./chunk-ZMAPA42U.js"; 36 + import "./chunk-N6PLTDUY.js"; 37 + import "./chunk-UWEF6NCQ.js"; 38 + import "./chunk-BGA2NGTF.js"; 39 + import "./chunk-ZBNFP3DI.js"; 40 + import "./chunk-AN7CZG6F.js"; 41 + import "./chunk-J7D6CDIP.js"; 42 + import { 43 + element_default 44 + } from "./chunk-2X53XAU6.js"; 45 + import "./chunk-AFAFCDHW.js"; 46 + import "./chunk-5PUD235R.js"; 47 + import "./chunk-SRUOXJB6.js"; 48 + import "./chunk-KM7A6C4E.js"; 49 + import "./chunk-OSIZG2BO.js"; 50 + import "./chunk-UDP6MTZR.js"; 51 + import { 52 + __name 53 + } from "./chunk-7IARE43G.js"; 54 + 55 + // index.js 56 + var s3 = new element_default2(); 57 + var input = new element_default(); 58 + input.setAttribute("group", GROUP); 59 + input.append(s3); 60 + var output = new element_default3(); 61 + output.setAttribute("group", GROUP); 62 + var metadataProcessor = new element_default4(); 63 + metadataProcessor.setAttribute("group", GROUP); 64 + document.body.append(input, output, metadataProcessor); 65 + var pto = new element_default5(); 66 + pto.setAttribute("group", GROUP); 67 + pto.setAttribute("input-selector", input.selector); 68 + pto.setAttribute("output-selector", output.selector); 69 + pto.setAttribute("metadata-processor-selector", metadataProcessor.selector); 70 + document.body.append(pto); 71 + var addDemoBtn = document.querySelector("#add-sample-content"); 72 + async function addSampleContent() { 73 + if (!addDemoBtn) return; 74 + addDemoBtn.setAttribute("disabled", ""); 75 + addDemoBtn.innerHTML = `<span> 76 + <i class="ph-fill ph-hourglass-medium"></i> 77 + Adding source 78 + </span>`; 79 + const demo = await s3.demo(); 80 + const tracks = output.tracks.collection(); 81 + await output.tracks.save([...tracks, demo.track]); 82 + addDemoBtn.innerHTML = `<span> 83 + <i class="ph-fill ph-hourglass-medium"></i> 84 + Processing source 85 + </span>`; 86 + await pto.process(); 87 + addDemoBtn.innerHTML = `<span> 88 + <i class="ph-fill ph-check-fat"></i> Added 89 + </span>`; 90 + } 91 + __name(addSampleContent, "addSampleContent"); 92 + addDemoBtn?.addEventListener("click", addSampleContent); 93 + 94 + //# sourceMappingURL=./index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/index.js.map
··· 1 + ../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/mstile-150x150.png
··· 1 + ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/mstile-150x150.png
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/node_crypto-RCDOXNVG.js
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/node_crypto-RCDOXNVG.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/node_crypto-RCDOXNVG.js.map
··· 1 + ../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/node_crypto-RCDOXNVG.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/safari-pinned-tab.svg
··· 1 + ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/safari-pinned-tab.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/animations.css
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/animations.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/animations.css.map
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/animations.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/base.css
··· 1 + ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/base.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/base.css.map
··· 1 + ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/base.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/diffuse/colors.css
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/diffuse/colors.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/diffuse/colors.css.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/diffuse/colors.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/diffuse/fonts.css
··· 1 + ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/fonts.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/diffuse/fonts.css.map
··· 1 + ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/fonts.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/diffuse/page.css
··· 1 + ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/page.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/diffuse/page.css.map
··· 1 + ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/page.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/font-faces.css
··· 1 + ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/font-faces.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/font-faces.css.map
··· 1 + ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/font-faces.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/reset.css
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/reset.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/reset.css.map
··· 1 + ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/reset.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/variables.css
··· 1 + ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/variables.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/variables.css.map
··· 1 + ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/variables.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/98.css
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/98.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/98.css.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/98.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/ms_sans_serif.woff2
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif.woff2
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/ms_sans_serif_bold.woff2
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif_bold.woff2
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/phosphor/fill/Phosphor-Fill.svg
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.svg
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/phosphor/fill/Phosphor-Fill.ttf
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.ttf
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/phosphor/fill/Phosphor-Fill.woff
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.woff
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/phosphor/fill/Phosphor-Fill.woff2
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.woff2
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/phosphor/fill/style.css
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/style.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/styles/vendor/phosphor/fill/style.css.map
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/style.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/index.html
··· 1 + ../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/testing/index.html
+24
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/output.js
··· 1 + import { 2 + element_default 3 + } from "../chunk-CHZKHFKZ.js"; 4 + import "../chunk-AFAFCDHW.js"; 5 + import "../chunk-5PUD235R.js"; 6 + import { 7 + effect 8 + } from "../chunk-SRUOXJB6.js"; 9 + import "../chunk-KM7A6C4E.js"; 10 + import "../chunk-OSIZG2BO.js"; 11 + import "../chunk-UDP6MTZR.js"; 12 + import "../chunk-7IARE43G.js"; 13 + 14 + // testing/output.js 15 + var output = new element_default(); 16 + document.body.append(output); 17 + effect(() => { 18 + console.log(output.tracks.state()); 19 + }); 20 + effect(() => { 21 + console.log(output.tracks.collection()); 22 + }); 23 + 24 + //# sourceMappingURL=./output.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/output.js.map
··· 1 + {"version":3,"sources":["/output.js"],"sourcesContent":["import Output from \"@components/configurator/output/element.js\";\nimport { effect } from \"@common/signal.js\";\n\nconst output = new Output();\n\ndocument.body.append(output);\n\neffect(() => {\n console.log(output.tracks.state());\n});\n\neffect(() => {\n console.log(output.tracks.collection());\n});\n"],"mappings":";;;;;;;;;;;;;;AAGA,IAAM,SAAS,IAAI,gBAAO;AAE1B,SAAS,KAAK,OAAO,MAAM;AAE3B,OAAO,MAAM;AACX,UAAQ,IAAI,OAAO,OAAO,MAAM,CAAC;AACnC,CAAC;AAED,OAAO,MAAM;AACX,UAAQ,IAAI,OAAO,OAAO,WAAW,CAAC;AACxC,CAAC;","names":[],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/testing/output.js.map"}
+30
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/output/index.html
··· 1 + <html lang="en"> 2 + <head> 3 + <meta charset="UTF-8" /> 4 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 5 + 6 + <title>Diffuse</title> 7 + 8 + <!-- Base --> 9 + <base href="../../" /> 10 + 11 + <!-- Favicons & Mobile --> 12 + <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png" /> 13 + <link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png" /> 14 + <link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png" /> 15 + <!-- TODO: <link rel="manifest" href="site.webmanifest" />--> 16 + <link rel="mask-icon" href="safari-pinned-tab.svg" color="#8a90a9" /> 17 + <meta name="msapplication-TileColor" content="#8a90a9" /> 18 + <meta name="theme-color" content="#8a90a9" /> 19 + 20 + <!-- Styles --> 21 + <link rel="stylesheet" href="styles/base.css" /> 22 + <link rel="stylesheet" href="styles/diffuse/page.css" /> 23 + 24 + <!-- Scripts --> 25 + <script src="testing/output.js" type="module"></script> 26 + </head> 27 + <body> 28 + 29 + </body> 30 + </html>
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/sample/tracks.js
··· 1 + ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/testing/sample/tracks.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/sample/tracks.js.map
··· 1 + ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/testing/sample/tracks.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/artwork-controller/element.css
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/artwork-controller/element.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/artwork-controller/element.css.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/artwork-controller/element.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/artwork-controller/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/blur/artwork-controller/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/artwork-controller/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/artwork-controller/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/artwork-controller/index.html
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/artwork-controller/index.html
+72
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/artwork-controller/index.js
··· 1 + import { 2 + element_default 3 + } from "../../../chunk-2DEWUZFM.js"; 4 + import { 5 + config_default 6 + } from "../../../chunk-OS4QRJDG.js"; 7 + import "../../../chunk-UT643YRI.js"; 8 + import "../../../chunk-I4QT5UNG.js"; 9 + import "../../../chunk-NEVFYBXS.js"; 10 + import "../../../chunk-5U6EFMUU.js"; 11 + import "../../../chunk-UBNX6MK2.js"; 12 + import "../../../chunk-IMYGW2WM.js"; 13 + import "../../../chunk-WYFYW7EG.js"; 14 + import "../../../chunk-G2LBW36E.js"; 15 + import "../../../chunk-VTFKOL5E.js"; 16 + import "../../../chunk-FIMGEMH3.js"; 17 + import "../../../chunk-DR6IVCFO.js"; 18 + import "../../../chunk-US7RU3UC.js"; 19 + import "../../../chunk-W4NIMENU.js"; 20 + import "../../../chunk-VHBDVMZU.js"; 21 + import "../../../chunk-DNOJCDYS.js"; 22 + import "../../../chunk-T3A2JWMA.js"; 23 + import "../../../chunk-3SOBXJU4.js"; 24 + import "../../../chunk-IUOHNZAT.js"; 25 + import "../../../chunk-5RXABJDJ.js"; 26 + import "../../../chunk-7PYRBX3C.js"; 27 + import "../../../chunk-JEZ5YVU7.js"; 28 + import "../../../chunk-MZBNHTGF.js"; 29 + import "../../../chunk-CHZKHFKZ.js"; 30 + import "../../../chunk-7J35BYGY.js"; 31 + import "../../../chunk-ZMAPA42U.js"; 32 + import "../../../chunk-N6PLTDUY.js"; 33 + import "../../../chunk-UWEF6NCQ.js"; 34 + import "../../../chunk-BGA2NGTF.js"; 35 + import "../../../chunk-ZBNFP3DI.js"; 36 + import "../../../chunk-AN7CZG6F.js"; 37 + import "../../../chunk-J7D6CDIP.js"; 38 + import "../../../chunk-2X53XAU6.js"; 39 + import "../../../chunk-AFAFCDHW.js"; 40 + import "../../../chunk-5PUD235R.js"; 41 + import { 42 + effect 43 + } from "../../../chunk-SRUOXJB6.js"; 44 + import "../../../chunk-KM7A6C4E.js"; 45 + import "../../../chunk-OSIZG2BO.js"; 46 + import "../../../chunk-UDP6MTZR.js"; 47 + import "../../../chunk-7IARE43G.js"; 48 + 49 + // themes/blur/artwork-controller/index.js 50 + var aud = config_default.lazy.engine.audio(); 51 + var queue = config_default.lazy.engine.queue(); 52 + var art = config_default.lazy.processor.artwork(); 53 + var oqa = config_default.lazy.orchestrator.queueAudio(); 54 + var rso = config_default.lazy.orchestrator.repeatShuffle(); 55 + config_default.lazy.orchestrator.queueTracks(); 56 + config_default.lazy.orchestrator.repeatShuffle(); 57 + var dac = new element_default(); 58 + dac.setAttribute("artwork-processor-selector", art.selector); 59 + dac.setAttribute("audio-engine-selector", aud.selector); 60 + dac.setAttribute("input-selector", config_default.orchestrator.input.selector); 61 + dac.setAttribute("queue-engine-selector", queue.selector); 62 + document.body.append(dac); 63 + effect(() => { 64 + const repeat = rso.repeat(); 65 + if (repeat && !oqa.hasAttribute("repeat")) { 66 + oqa.toggleAttribute("repeat"); 67 + } else if (!repeat && oqa.hasAttribute("repeat")) { 68 + oqa.removeAttribute("repeat"); 69 + } 70 + }); 71 + 72 + //# sourceMappingURL=./index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/artwork-controller/index.js.map
··· 1 + ../../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/themes/blur/artwork-controller/index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/index.css
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/index.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/index.css.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/index.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/index.html
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/index.html
+70
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/index.js
··· 1 + import "../../chunk-I4QT5UNG.js"; 2 + import "../../chunk-US7RU3UC.js"; 3 + import { 4 + element_exports as element_exports3 5 + } from "../../chunk-3SOBXJU4.js"; 6 + import "../../chunk-IUOHNZAT.js"; 7 + import "../../chunk-5RXABJDJ.js"; 8 + import "../../chunk-7PYRBX3C.js"; 9 + import "../../chunk-JEZ5YVU7.js"; 10 + import "../../chunk-MZBNHTGF.js"; 11 + import "../../chunk-CHZKHFKZ.js"; 12 + import { 13 + element_exports 14 + } from "../../chunk-7J35BYGY.js"; 15 + import "../../chunk-ZMAPA42U.js"; 16 + import { 17 + element_exports as element_exports2 18 + } from "../../chunk-N6PLTDUY.js"; 19 + import "../../chunk-UWEF6NCQ.js"; 20 + import "../../chunk-BGA2NGTF.js"; 21 + import "../../chunk-ZBNFP3DI.js"; 22 + import { 23 + component 24 + } from "../../chunk-AFAFCDHW.js"; 25 + import "../../chunk-5PUD235R.js"; 26 + import { 27 + effect 28 + } from "../../chunk-SRUOXJB6.js"; 29 + import "../../chunk-KM7A6C4E.js"; 30 + import "../../chunk-OSIZG2BO.js"; 31 + import "../../chunk-UDP6MTZR.js"; 32 + import { 33 + __name 34 + } from "../../chunk-7IARE43G.js"; 35 + 36 + // themes/blur/index.js 37 + var audio = component(element_exports); 38 + var output = component(element_exports3); 39 + var queue = component(element_exports2); 40 + globalThis.audio = audio; 41 + globalThis.output = output; 42 + globalThis.queue = queue; 43 + isLeader().then((bool) => { 44 + if (!bool) return; 45 + import("../../components/orchestrator/process-tracks/element.js"); 46 + import("../../components/orchestrator/queue-audio/element.js"); 47 + import("../../components/orchestrator/queue-tracks/element.js"); 48 + }); 49 + effect(() => { 50 + console.log("Active queue item:", queue.now()); 51 + }); 52 + effect(() => { 53 + console.log("Queue pool hash:", queue.supplyFingerprint()); 54 + }); 55 + effect(() => { 56 + const trigger = queue.now(); 57 + const _other_trigger = queue.supplyFingerprint(); 58 + isLeader().then((bool) => { 59 + if (bool) { 60 + queue.fill({ amount: 10, shuffled: true }); 61 + if (!trigger) queue.shift(); 62 + } 63 + }); 64 + }); 65 + async function isLeader() { 66 + return await audio.isLeader(); 67 + } 68 + __name(isLeader, "isLeader"); 69 + 70 + //# sourceMappingURL=./index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/index.js.map
··· 1 + ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/themes/blur/index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/variables.css
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/variables.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/blur/variables.css.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/variables.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/loader/constituent/index.html
··· 1 + ../../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/themes/loader/constituent/index.html
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/loader/constituent/index.js
··· 1 + ../../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/themes/loader/constituent/index.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/loader/constituent/index.js.map
··· 1 + ../../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/themes/loader/constituent/index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/loader/constituent/s/index.html
··· 1 + ../../../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/themes/loader/constituent/s/index.html
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/98-vars.css
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/98-vars.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/98-vars.css.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/98-vars.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/browser/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/webamp/browser/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/browser/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/browser/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/browser/index.html
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/browser/index.html
+60
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/browser/index.js
··· 1 + import { 2 + element_default 3 + } from "../../../chunk-NUCRFIN6.js"; 4 + import "../../../chunk-N5CHD32K.js"; 5 + import { 6 + config_default 7 + } from "../../../chunk-OS4QRJDG.js"; 8 + import "../../../chunk-UT643YRI.js"; 9 + import "../../../chunk-I4QT5UNG.js"; 10 + import "../../../chunk-NEVFYBXS.js"; 11 + import "../../../chunk-5U6EFMUU.js"; 12 + import "../../../chunk-UBNX6MK2.js"; 13 + import "../../../chunk-IMYGW2WM.js"; 14 + import "../../../chunk-WYFYW7EG.js"; 15 + import "../../../chunk-G2LBW36E.js"; 16 + import "../../../chunk-VTFKOL5E.js"; 17 + import "../../../chunk-FIMGEMH3.js"; 18 + import "../../../chunk-DR6IVCFO.js"; 19 + import "../../../chunk-US7RU3UC.js"; 20 + import "../../../chunk-W4NIMENU.js"; 21 + import "../../../chunk-VHBDVMZU.js"; 22 + import "../../../chunk-DNOJCDYS.js"; 23 + import "../../../chunk-T3A2JWMA.js"; 24 + import "../../../chunk-3SOBXJU4.js"; 25 + import "../../../chunk-IUOHNZAT.js"; 26 + import "../../../chunk-5RXABJDJ.js"; 27 + import "../../../chunk-7PYRBX3C.js"; 28 + import "../../../chunk-JEZ5YVU7.js"; 29 + import "../../../chunk-MZBNHTGF.js"; 30 + import "../../../chunk-CHZKHFKZ.js"; 31 + import "../../../chunk-7J35BYGY.js"; 32 + import "../../../chunk-ZMAPA42U.js"; 33 + import "../../../chunk-N6PLTDUY.js"; 34 + import "../../../chunk-UWEF6NCQ.js"; 35 + import "../../../chunk-BGA2NGTF.js"; 36 + import "../../../chunk-ZBNFP3DI.js"; 37 + import "../../../chunk-AN7CZG6F.js"; 38 + import "../../../chunk-J7D6CDIP.js"; 39 + import "../../../chunk-2X53XAU6.js"; 40 + import "../../../chunk-AFAFCDHW.js"; 41 + import "../../../chunk-5PUD235R.js"; 42 + import "../../../chunk-SRUOXJB6.js"; 43 + import "../../../chunk-KM7A6C4E.js"; 44 + import "../../../chunk-OSIZG2BO.js"; 45 + import "../../../chunk-UDP6MTZR.js"; 46 + import "../../../chunk-7IARE43G.js"; 47 + 48 + // themes/webamp/browser/index.js 49 + var queue = config_default.lazy.engine.queue(); 50 + var search = config_default.lazy.processor.search(); 51 + config_default.lazy.orchestrator.queueTracks(); 52 + config_default.lazy.orchestrator.searchTracks(); 53 + var el = new element_default(); 54 + el.setAttribute("input-selector", config_default.orchestrator.input.selector); 55 + el.setAttribute("output-selector", config_default.orchestrator.output.selector); 56 + el.setAttribute("queue-engine-selector", queue.selector); 57 + el.setAttribute("search-processor-selector", search.selector); 58 + document.querySelector("#placeholder")?.replaceWith(el); 59 + 60 + //# sourceMappingURL=./index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/browser/index.js.map
··· 1 + ../../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/themes/webamp/browser/index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/common/ui.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/webamp/common/ui.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/common/ui.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/common/ui.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/configurators/input/element.js
··· 1 + ../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/webamp/configurators/input/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/configurators/input/element.js.map
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/configurators/input/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/configurators/input/index.html
··· 1 + ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/configurators/input/index.html
+56
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/configurators/input/index.js
··· 1 + import { 2 + element_default 3 + } from "../../../../chunk-R72UCYY5.js"; 4 + import "../../../../chunk-N5CHD32K.js"; 5 + import { 6 + config_default 7 + } from "../../../../chunk-OS4QRJDG.js"; 8 + import "../../../../chunk-UT643YRI.js"; 9 + import "../../../../chunk-I4QT5UNG.js"; 10 + import "../../../../chunk-NEVFYBXS.js"; 11 + import "../../../../chunk-5U6EFMUU.js"; 12 + import "../../../../chunk-UBNX6MK2.js"; 13 + import "../../../../chunk-IMYGW2WM.js"; 14 + import "../../../../chunk-WYFYW7EG.js"; 15 + import "../../../../chunk-G2LBW36E.js"; 16 + import "../../../../chunk-VTFKOL5E.js"; 17 + import "../../../../chunk-FIMGEMH3.js"; 18 + import "../../../../chunk-DR6IVCFO.js"; 19 + import "../../../../chunk-US7RU3UC.js"; 20 + import "../../../../chunk-W4NIMENU.js"; 21 + import "../../../../chunk-VHBDVMZU.js"; 22 + import "../../../../chunk-DNOJCDYS.js"; 23 + import "../../../../chunk-T3A2JWMA.js"; 24 + import "../../../../chunk-3SOBXJU4.js"; 25 + import "../../../../chunk-IUOHNZAT.js"; 26 + import "../../../../chunk-5RXABJDJ.js"; 27 + import "../../../../chunk-7PYRBX3C.js"; 28 + import "../../../../chunk-JEZ5YVU7.js"; 29 + import "../../../../chunk-MZBNHTGF.js"; 30 + import "../../../../chunk-CHZKHFKZ.js"; 31 + import "../../../../chunk-7J35BYGY.js"; 32 + import "../../../../chunk-ZMAPA42U.js"; 33 + import "../../../../chunk-N6PLTDUY.js"; 34 + import "../../../../chunk-UWEF6NCQ.js"; 35 + import "../../../../chunk-BGA2NGTF.js"; 36 + import "../../../../chunk-ZBNFP3DI.js"; 37 + import "../../../../chunk-AN7CZG6F.js"; 38 + import "../../../../chunk-J7D6CDIP.js"; 39 + import "../../../../chunk-2X53XAU6.js"; 40 + import "../../../../chunk-AFAFCDHW.js"; 41 + import "../../../../chunk-5PUD235R.js"; 42 + import "../../../../chunk-SRUOXJB6.js"; 43 + import "../../../../chunk-KM7A6C4E.js"; 44 + import "../../../../chunk-OSIZG2BO.js"; 45 + import "../../../../chunk-UDP6MTZR.js"; 46 + import "../../../../chunk-7IARE43G.js"; 47 + 48 + // themes/webamp/configurators/input/index.js 49 + var sources = config_default.lazy.orchestrator.sources(); 50 + var el = new element_default(); 51 + el.setAttribute("input-selector", config_default.orchestrator.input.selector); 52 + el.setAttribute("output-selector", config_default.orchestrator.output.selector); 53 + el.setAttribute("sources-orchestrator-selector", sources.selector); 54 + document.querySelector("#placeholder")?.replaceWith(el); 55 + 56 + //# sourceMappingURL=./index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/configurators/input/index.js.map
··· 1 + ../../../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/themes/webamp/configurators/input/index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/configurators/output.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/webamp/configurators/output.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/configurators/output.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/configurators/output.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/constituent.css
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/constituent.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/constituent.css.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/constituent.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/fonts.css
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/fonts.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/fonts.css.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/fonts.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/index.css
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/index.css
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/index.css.map
··· 1 + ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/index.css.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/index.html
··· 1 + ../../../bafybeih2s36bol7uisrik77ciyli5rhge2bikg7ezv7g43reykdd4jkaiq/themes/webamp/index.html
+160
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/index.js
··· 1 + import { 2 + element_default as element_default2 3 + } from "../../chunk-RYKCUUD7.js"; 4 + import "../../chunk-ZB6F4LGA.js"; 5 + import "../../chunk-NUCRFIN6.js"; 6 + import "../../chunk-R72UCYY5.js"; 7 + import "../../chunk-N5CHD32K.js"; 8 + import "../../chunk-FQF7EPH6.js"; 9 + import { 10 + element_default 11 + } from "../../chunk-FJZTCILJ.js"; 12 + import "../../chunk-I4QT5UNG.js"; 13 + import { 14 + element_exports as element_exports3 15 + } from "../../chunk-NEVFYBXS.js"; 16 + import "../../chunk-5U6EFMUU.js"; 17 + import "../../chunk-IMYGW2WM.js"; 18 + import "../../chunk-G2LBW36E.js"; 19 + import "../../chunk-FIMGEMH3.js"; 20 + import "../../chunk-DR6IVCFO.js"; 21 + import "../../chunk-US7RU3UC.js"; 22 + import "../../chunk-W4NIMENU.js"; 23 + import "../../chunk-VHBDVMZU.js"; 24 + import "../../chunk-DNOJCDYS.js"; 25 + import "../../chunk-T3A2JWMA.js"; 26 + import "../../chunk-3SOBXJU4.js"; 27 + import "../../chunk-IUOHNZAT.js"; 28 + import "../../chunk-5RXABJDJ.js"; 29 + import "../../chunk-7PYRBX3C.js"; 30 + import "../../chunk-JEZ5YVU7.js"; 31 + import "../../chunk-MZBNHTGF.js"; 32 + import "../../chunk-CHZKHFKZ.js"; 33 + import { 34 + element_exports 35 + } from "../../chunk-N6PLTDUY.js"; 36 + import "../../chunk-UWEF6NCQ.js"; 37 + import "../../chunk-BGA2NGTF.js"; 38 + import "../../chunk-ZBNFP3DI.js"; 39 + import "../../chunk-AN7CZG6F.js"; 40 + import "../../chunk-J7D6CDIP.js"; 41 + import { 42 + element_exports as element_exports2 43 + } from "../../chunk-2X53XAU6.js"; 44 + import { 45 + component 46 + } from "../../chunk-AFAFCDHW.js"; 47 + import "../../chunk-5PUD235R.js"; 48 + import { 49 + effect, 50 + signal, 51 + untracked 52 + } from "../../chunk-SRUOXJB6.js"; 53 + import "../../chunk-KM7A6C4E.js"; 54 + import "../../chunk-OSIZG2BO.js"; 55 + import "../../chunk-UDP6MTZR.js"; 56 + import { 57 + __name 58 + } from "../../chunk-7IARE43G.js"; 59 + 60 + // themes/webamp/index.js 61 + var input = component(element_exports2); 62 + var queue = component(element_exports); 63 + var search = component(element_exports3); 64 + var output = document.querySelector("#output"); 65 + if (!output) throw new Error("Missing output element"); 66 + globalThis.queue = queue; 67 + globalThis.output = output; 68 + var $playlist = signal( 69 + /** @type {Array<Track>} */ 70 + [], 71 + { 72 + eager: true 73 + } 74 + ); 75 + var ampElement = document.querySelector("dtw-webamp"); 76 + if (ampElement instanceof element_default === false) { 77 + throw new Error("Missing webamp element"); 78 + } 79 + var amp = ampElement.amp; 80 + var loadFromUrl = amp.media.loadFromUrl.bind(amp.media); 81 + async function loadOverride(uri, autoPlay) { 82 + if (uri.startsWith("blob:")) { 83 + return await loadFromUrl(uri, autoPlay); 84 + } 85 + const resp = await input.resolve({ method: "GET", uri }); 86 + if (!resp) throw new Error("Failed to resolve URI"); 87 + if (resp && "stream" in resp) { 88 + throw new Error("Webamp does not support playing streams."); 89 + } 90 + return await loadFromUrl(resp.url, autoPlay); 91 + } 92 + __name(loadOverride, "loadOverride"); 93 + amp.media.loadFromUrl = loadOverride.bind(amp.media); 94 + effect(() => { 95 + const future = queue.future(); 96 + const playlist = [ 97 + ...future 98 + ]; 99 + const lengthLastPlaylist = untracked($playlist.get).length; 100 + const tracksToAdd = playlist.slice( 101 + 0, 102 + Math.max(0, playlist.length - lengthLastPlaylist) 103 + ); 104 + $playlist.value = playlist; 105 + tracksToAdd.forEach((t) => ampElement.addTrack(t)); 106 + if (lengthLastPlaylist === 0 && playlist.length) { 107 + amp.store.dispatch({ type: "BUFFER_TRACK", id: 0 }); 108 + } 109 + }); 110 + var tracksPromise = Promise.withResolvers(); 111 + effect(() => { 112 + const state = output.tracks.state(); 113 + if (state !== "loaded") return; 114 + const fingerprintSearch = search.supplyFingerprint(); 115 + if (fingerprintSearch === void 0) return; 116 + const fingerprintQueue = queue.supplyFingerprint(); 117 + if (fingerprintQueue === void 0) return; 118 + tracksPromise.resolve("loaded"); 119 + }); 120 + document.body.querySelectorAll(".desktop__item").forEach((element) => { 121 + if (element instanceof HTMLElement) { 122 + element.addEventListener("dblclick", () => { 123 + const f = element.querySelector("label")?.getAttribute("for"); 124 + if (f) return windowManager()?.toggleWindow(f); 125 + }); 126 + } 127 + }); 128 + document.body.querySelector("#desktop-batch")?.addEventListener( 129 + "dblclick", 130 + () => { 131 + tracksPromise.promise.then(() => { 132 + addBatch(); 133 + }); 134 + } 135 + ); 136 + var winampIsShown = true; 137 + document.body.querySelector("#desktop-winamp")?.addEventListener( 138 + "dblclick", 139 + () => { 140 + if (winampIsShown) { 141 + amp.close(); 142 + } else { 143 + amp.reopen(); 144 + winampIsShown = true; 145 + } 146 + } 147 + ); 148 + amp.onClose(() => winampIsShown = false); 149 + async function addBatch() { 150 + await queue.fill({ augment: true, amount: 50, shuffled: true }); 151 + } 152 + __name(addBatch, "addBatch"); 153 + function windowManager() { 154 + const w = document.body.querySelector("dtw-window-manager"); 155 + if (w instanceof element_default2) return w; 156 + return null; 157 + } 158 + __name(windowManager, "windowManager"); 159 + 160 + //# sourceMappingURL=./index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/index.js.map
··· 1 + ../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/webamp/index.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/webamp/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/webamp/webamp/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/webamp/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/webamp/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/window-manager/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/webamp/window-manager/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/window-manager/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/window-manager/element.js.map
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/window/element.js
··· 1 + ../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/themes/webamp/window/element.js
+1
artifacts/bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/themes/webamp/window/element.js.map
··· 1 + ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/window/element.js.map
+1 -1
artifacts/versions.json
··· 4 4 "version": "3.5.0" 5 5 }, 6 6 "4.0.0-alpha": { 7 - "cid": "bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da", 7 + "cid": "bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm", 8 8 "version": "4.0.0-alpha" 9 9 } 10 10 }