@agentdocumentformat/cli 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +45 -0
- package/dist/adf.mjs +162 -0
- package/dist/chunks/APEv2Parser-2CNNHMXV.mjs +22 -0
- package/dist/chunks/AiffParser-7BR4RL6G.mjs +162 -0
- package/dist/chunks/App-L5L37JI5.mjs +16747 -0
- package/dist/chunks/AsfParser-VVRSLFOM.mjs +538 -0
- package/dist/chunks/DsdiffParser-CMD4AX7A.mjs +156 -0
- package/dist/chunks/DsfParser-UOGZDS2M.mjs +94 -0
- package/dist/chunks/FlacParser-HB3T3CD4.mjs +23 -0
- package/dist/chunks/MP4Parser-66HBRUSX.mjs +973 -0
- package/dist/chunks/MatroskaParser-J3HUIMEW.mjs +579 -0
- package/dist/chunks/MpegParser-YW6LIUEW.mjs +442 -0
- package/dist/chunks/MusepackParser-PAUSXP7D.mjs +252 -0
- package/dist/chunks/OggParser-NUBV3GWC.mjs +359 -0
- package/dist/chunks/WavPackParser-WQAGT7TC.mjs +171 -0
- package/dist/chunks/WaveParser-EWLQVDX4.mjs +238 -0
- package/dist/chunks/adf-schema-JRU2BTOG.mjs +62 -0
- package/dist/chunks/build-QF5W473T.mjs +60 -0
- package/dist/chunks/chatgpt-subscription-BQGWYZXE.mjs +23 -0
- package/dist/chunks/chunk-2DIECGFL.mjs +6 -0
- package/dist/chunks/chunk-2NAP2ZF7.mjs +60 -0
- package/dist/chunks/chunk-3AT7IIP7.mjs +25696 -0
- package/dist/chunks/chunk-3GNIDM53.mjs +35 -0
- package/dist/chunks/chunk-3M4ZPOA3.mjs +1477 -0
- package/dist/chunks/chunk-4MQPTCXY.mjs +510 -0
- package/dist/chunks/chunk-5PO5PKRV.mjs +366 -0
- package/dist/chunks/chunk-5QU5VY7N.mjs +52 -0
- package/dist/chunks/chunk-5W7KES6P.mjs +436 -0
- package/dist/chunks/chunk-62NE4LG4.mjs +61 -0
- package/dist/chunks/chunk-64OKE4X3.mjs +45 -0
- package/dist/chunks/chunk-6GJ4QHRI.mjs +1278 -0
- package/dist/chunks/chunk-6VQEXLE2.mjs +144 -0
- package/dist/chunks/chunk-6XUV6EK6.mjs +41 -0
- package/dist/chunks/chunk-776TSXEP.mjs +43 -0
- package/dist/chunks/chunk-7CV2SA3H.mjs +285 -0
- package/dist/chunks/chunk-7MTRVW2U.mjs +3103 -0
- package/dist/chunks/chunk-7N2R2VCG.mjs +1434 -0
- package/dist/chunks/chunk-7T2YMTWL.mjs +374 -0
- package/dist/chunks/chunk-7XYNI52E.mjs +149 -0
- package/dist/chunks/chunk-APHX6HSV.mjs +7731 -0
- package/dist/chunks/chunk-APRU6PHC.mjs +40 -0
- package/dist/chunks/chunk-AUYKRQPJ.mjs +499 -0
- package/dist/chunks/chunk-DXWDD5XJ.mjs +136 -0
- package/dist/chunks/chunk-EWL5FG4I.mjs +39 -0
- package/dist/chunks/chunk-EYX2YLJW.mjs +117 -0
- package/dist/chunks/chunk-F5ELW46V.mjs +27 -0
- package/dist/chunks/chunk-G426FACA.mjs +49 -0
- package/dist/chunks/chunk-GEKSJHIV.mjs +2472 -0
- package/dist/chunks/chunk-HBUENVQL.mjs +570 -0
- package/dist/chunks/chunk-HPVFJYXR.mjs +112 -0
- package/dist/chunks/chunk-HWLWPXQ7.mjs +721 -0
- package/dist/chunks/chunk-I2HJYHFT.mjs +665 -0
- package/dist/chunks/chunk-I3UYSITV.mjs +68 -0
- package/dist/chunks/chunk-IC4JDZCI.mjs +3864 -0
- package/dist/chunks/chunk-IHDDCZBS.mjs +112 -0
- package/dist/chunks/chunk-IIGMZHQQ.mjs +10416 -0
- package/dist/chunks/chunk-KWFOS5WC.mjs +41 -0
- package/dist/chunks/chunk-LAZIXV2F.mjs +5290 -0
- package/dist/chunks/chunk-LFMB4PAA.mjs +10814 -0
- package/dist/chunks/chunk-M2RX3S2T.mjs +49 -0
- package/dist/chunks/chunk-M3WPIJYM.mjs +65 -0
- package/dist/chunks/chunk-NBTUWMGP.mjs +263 -0
- package/dist/chunks/chunk-NGK6PVSF.mjs +2676 -0
- package/dist/chunks/chunk-NZ7JTHEO.mjs +85 -0
- package/dist/chunks/chunk-OQN33RGQ.mjs +52 -0
- package/dist/chunks/chunk-RIX34QHC.mjs +2935 -0
- package/dist/chunks/chunk-SGUTYISF.mjs +16 -0
- package/dist/chunks/chunk-SLJ5L7PY.mjs +1473 -0
- package/dist/chunks/chunk-SLUKGXKH.mjs +68 -0
- package/dist/chunks/chunk-TMT32MXT.mjs +419 -0
- package/dist/chunks/chunk-UYY5M2PB.mjs +151 -0
- package/dist/chunks/chunk-VAUOM3IN.mjs +298 -0
- package/dist/chunks/chunk-VMHTYDH4.mjs +172 -0
- package/dist/chunks/chunk-VZS54AA5.mjs +200 -0
- package/dist/chunks/chunk-WFQUVXML.mjs +295 -0
- package/dist/chunks/chunk-X34PDRUH.mjs +809 -0
- package/dist/chunks/chunk-XNPZBLYL.mjs +33 -0
- package/dist/chunks/chunk-XX7OSWTO.mjs +157 -0
- package/dist/chunks/chunk-XYTWGHFS.mjs +600 -0
- package/dist/chunks/chunk-XYV3VCIX.mjs +336 -0
- package/dist/chunks/chunk-Y5ZLKFLE.mjs +1469 -0
- package/dist/chunks/chunk-ZJKXHM4Q.mjs +230 -0
- package/dist/chunks/cli-TCMBNZF6.mjs +1030 -0
- package/dist/chunks/commands-DTEKM4ZL.mjs +20 -0
- package/dist/chunks/daemon-ZC3FZ2P4.mjs +112449 -0
- package/dist/chunks/daemon-control-WDX7PMTC.mjs +300 -0
- package/dist/chunks/daemon-token-WRSULP7G.mjs +23 -0
- package/dist/chunks/devtools-H7CI2ZVG.mjs +85 -0
- package/dist/chunks/discord-IWDQJA7A.mjs +70588 -0
- package/dist/chunks/dist-C57KYFS2.mjs +4952 -0
- package/dist/chunks/dist-I3XBAGDL.mjs +11 -0
- package/dist/chunks/email-V4Q4VJON.mjs +58679 -0
- package/dist/chunks/environment-NX277MQG.mjs +15 -0
- package/dist/chunks/grok-subscription-4PYX7TBF.mjs +19 -0
- package/dist/chunks/layout-EPJQNFAI.mjs +22 -0
- package/dist/chunks/lib-N7FCZWKH.mjs +4038 -0
- package/dist/chunks/open-OTQDGDH5.mjs +36 -0
- package/dist/chunks/parser-JVY2PWSM.mjs +19 -0
- package/dist/chunks/pipeline-executor-BHBSJX2K.mjs +19 -0
- package/dist/chunks/react-IUIDQ5LX.mjs +11 -0
- package/dist/chunks/screen-54BUTYCW.mjs +27 -0
- package/dist/chunks/slack-3L5QTDZX.mjs +8113 -0
- package/dist/chunks/store-WR7TZJZS.mjs +32 -0
- package/dist/chunks/telegram-5ISVFBV3.mjs +14918 -0
- package/dist/chunks/terminal-O5WO7C5U.mjs +48 -0
- package/dist/chunks/theme-NORU4J74.mjs +20 -0
- package/dist/chunks/themes-F2FKU7CP.mjs +23 -0
- package/dist/chunks/token-6G3HCMNX.mjs +54 -0
- package/dist/chunks/token-util-UXYSDQIW.mjs +12 -0
- package/dist/chunks/tui-ODVYUIMT.mjs +197 -0
- package/dist/chunks/welcome-XHXFV7SH.mjs +32 -0
- package/dist/chunks/whatsapp-XSAMNGPJ.mjs +85412 -0
- package/dist/chunks/xterm-headless-YF53XWXE.mjs +3353 -0
- package/package.json +53 -0
- package/resources/wasm/coreutils.LICENSE +18 -0
- package/resources/wasm/coreutils.wasm +0 -0
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
import { createRequire as __adfCreateRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __adfFileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __adfDirname } from 'node:path';
|
|
4
|
+
const require = __adfCreateRequire(import.meta.url);
|
|
5
|
+
const __filename = __adfFileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __adfDirname(__filename);
|
|
7
|
+
import "./chunk-2DIECGFL.mjs";
|
|
8
|
+
import {
|
|
9
|
+
TrackType
|
|
10
|
+
} from "./chunk-EWL5FG4I.mjs";
|
|
11
|
+
import {
|
|
12
|
+
AttachedPictureType
|
|
13
|
+
} from "./chunk-DXWDD5XJ.mjs";
|
|
14
|
+
import {
|
|
15
|
+
decodeString,
|
|
16
|
+
getBit,
|
|
17
|
+
stripNulls
|
|
18
|
+
} from "./chunk-XX7OSWTO.mjs";
|
|
19
|
+
import {
|
|
20
|
+
BasicParser,
|
|
21
|
+
StringType,
|
|
22
|
+
UINT16_LE,
|
|
23
|
+
UINT32_LE,
|
|
24
|
+
UINT64_LE,
|
|
25
|
+
makeUnexpectedFileContentError
|
|
26
|
+
} from "./chunk-I2HJYHFT.mjs";
|
|
27
|
+
import {
|
|
28
|
+
require_src
|
|
29
|
+
} from "./chunk-AUYKRQPJ.mjs";
|
|
30
|
+
import "./chunk-NZ7JTHEO.mjs";
|
|
31
|
+
import {
|
|
32
|
+
__toESM
|
|
33
|
+
} from "./chunk-M2RX3S2T.mjs";
|
|
34
|
+
|
|
35
|
+
// node_modules/music-metadata/lib/asf/AsfParser.js
|
|
36
|
+
var import_debug = __toESM(require_src(), 1);
|
|
37
|
+
|
|
38
|
+
// node_modules/win-guid/lib/guid.js
|
|
39
|
+
function parseWindowsGuid(guid) {
|
|
40
|
+
let s = guid.trim();
|
|
41
|
+
if (s.length !== 36 || s[8] !== "-" || s[13] !== "-" || s[18] !== "-" || s[23] !== "-")
|
|
42
|
+
throw new Error(`Invalid GUID format: ${guid}`);
|
|
43
|
+
let v, out = new Uint8Array(16);
|
|
44
|
+
v = parseInt(s.slice(0, 8), 16), out[0] = v & 255, out[1] = v >>> 8 & 255, out[2] = v >>> 16 & 255, out[3] = v >>> 24 & 255, v = parseInt(s.slice(9, 13), 16), out[4] = v & 255, out[5] = v >>> 8 & 255, v = parseInt(s.slice(14, 18), 16), out[6] = v & 255, out[7] = v >>> 8 & 255, v = parseInt(s.slice(19, 23), 16), out[8] = v >>> 8 & 255, out[9] = v & 255, v = parseInt(s.slice(24, 32), 16), out[10] = v >>> 24 & 255, out[11] = v >>> 16 & 255, out[12] = v >>> 8 & 255, out[13] = v & 255, v = parseInt(s.slice(32, 36), 16), out[14] = v >>> 8 & 255, out[15] = v & 255;
|
|
45
|
+
for (let i = 0; i < 16; i++)
|
|
46
|
+
if (!Number.isFinite(out[i]))
|
|
47
|
+
throw new Error(`Invalid GUID format: ${guid}`);
|
|
48
|
+
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))
|
|
49
|
+
throw new Error(`Invalid GUID format: ${guid}`);
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
var Guid = class _Guid {
|
|
53
|
+
constructor(bytes) {
|
|
54
|
+
if (bytes.length !== 16)
|
|
55
|
+
throw new Error("GUID must be exactly 16 bytes");
|
|
56
|
+
this.bytes = bytes;
|
|
57
|
+
}
|
|
58
|
+
static fromString(guid) {
|
|
59
|
+
return new _Guid(parseWindowsGuid(guid));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Convert Windows / CFBF byte order into canonical GUID string:
|
|
63
|
+
* xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
64
|
+
*/
|
|
65
|
+
toString() {
|
|
66
|
+
let b = this.bytes, hx = (n) => n.toString(16).padStart(2, "0"), g1 = hx(b[3]) + hx(b[2]) + hx(b[1]) + hx(b[0]), g2 = hx(b[5]) + hx(b[4]), g3 = hx(b[7]) + hx(b[6]), g4 = hx(b[8]) + hx(b[9]), g5 = hx(b[10]) + hx(b[11]) + hx(b[12]) + hx(b[13]) + hx(b[14]) + hx(b[15]);
|
|
67
|
+
return `${g1}-${g2}-${g3}-${g4}-${g5}`.toUpperCase();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Compare against a Uint8Array containing GUID bytes
|
|
71
|
+
* in Windows / CFBF layout.
|
|
72
|
+
*/
|
|
73
|
+
equals(buf, offset = 0) {
|
|
74
|
+
if (offset < 0 || buf.length - offset < 16)
|
|
75
|
+
return !1;
|
|
76
|
+
let a = this.bytes;
|
|
77
|
+
for (let i = 0; i < 16; i++)
|
|
78
|
+
if (buf[offset + i] !== a[i])
|
|
79
|
+
return !1;
|
|
80
|
+
return !0;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// node_modules/music-metadata/lib/asf/AsfGuid.js
|
|
85
|
+
var AsfGuid = class _AsfGuid {
|
|
86
|
+
static fromBin(bin, offset = 0) {
|
|
87
|
+
return new _AsfGuid(_AsfGuid.decode(bin, offset));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Decode GUID in format like "B503BF5F-2EA9-CF11-8EE3-00C00C205365"
|
|
91
|
+
* @param objectId Binary GUID
|
|
92
|
+
* @param offset Read offset in bytes, default 0
|
|
93
|
+
* @returns GUID as dashed hexadecimal representation
|
|
94
|
+
*/
|
|
95
|
+
static decode(objectId, offset = 0) {
|
|
96
|
+
return new Guid(objectId.subarray(offset, offset + 16)).toString();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Decode stream type
|
|
100
|
+
* @param mediaType Media type GUID
|
|
101
|
+
* @returns Media type
|
|
102
|
+
*/
|
|
103
|
+
static decodeMediaType(mediaType) {
|
|
104
|
+
switch (mediaType.str) {
|
|
105
|
+
case _AsfGuid.AudioMedia.str:
|
|
106
|
+
return "audio";
|
|
107
|
+
case _AsfGuid.VideoMedia.str:
|
|
108
|
+
return "video";
|
|
109
|
+
case _AsfGuid.CommandMedia.str:
|
|
110
|
+
return "command";
|
|
111
|
+
case _AsfGuid.Degradable_JPEG_Media.str:
|
|
112
|
+
return "degradable-jpeg";
|
|
113
|
+
case _AsfGuid.FileTransferMedia.str:
|
|
114
|
+
return "file-transfer";
|
|
115
|
+
case _AsfGuid.BinaryMedia.str:
|
|
116
|
+
return "binary";
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Encode GUID
|
|
121
|
+
* @param guid GUID like: "B503BF5F-2EA9-CF11-8EE3-00C00C205365"
|
|
122
|
+
* @returns Encoded Binary GUID
|
|
123
|
+
*/
|
|
124
|
+
static encode(guid) {
|
|
125
|
+
return parseWindowsGuid(guid);
|
|
126
|
+
}
|
|
127
|
+
constructor(str) {
|
|
128
|
+
this.str = str;
|
|
129
|
+
}
|
|
130
|
+
equals(guid) {
|
|
131
|
+
return this.str === guid.str;
|
|
132
|
+
}
|
|
133
|
+
toBin() {
|
|
134
|
+
return _AsfGuid.encode(this.str);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
AsfGuid.HeaderObject = new AsfGuid("75B22630-668E-11CF-A6D9-00AA0062CE6C");
|
|
138
|
+
AsfGuid.DataObject = new AsfGuid("75B22636-668E-11CF-A6D9-00AA0062CE6C");
|
|
139
|
+
AsfGuid.SimpleIndexObject = new AsfGuid("33000890-E5B1-11CF-89F4-00A0C90349CB");
|
|
140
|
+
AsfGuid.IndexObject = new AsfGuid("D6E229D3-35DA-11D1-9034-00A0C90349BE");
|
|
141
|
+
AsfGuid.MediaObjectIndexObject = new AsfGuid("FEB103F8-12AD-4C64-840F-2A1D2F7AD48C");
|
|
142
|
+
AsfGuid.TimecodeIndexObject = new AsfGuid("3CB73FD0-0C4A-4803-953D-EDF7B6228F0C");
|
|
143
|
+
AsfGuid.FilePropertiesObject = new AsfGuid("8CABDCA1-A947-11CF-8EE4-00C00C205365");
|
|
144
|
+
AsfGuid.StreamPropertiesObject = new AsfGuid("B7DC0791-A9B7-11CF-8EE6-00C00C205365");
|
|
145
|
+
AsfGuid.HeaderExtensionObject = new AsfGuid("5FBF03B5-A92E-11CF-8EE3-00C00C205365");
|
|
146
|
+
AsfGuid.CodecListObject = new AsfGuid("86D15240-311D-11D0-A3A4-00A0C90348F6");
|
|
147
|
+
AsfGuid.ScriptCommandObject = new AsfGuid("1EFB1A30-0B62-11D0-A39B-00A0C90348F6");
|
|
148
|
+
AsfGuid.MarkerObject = new AsfGuid("F487CD01-A951-11CF-8EE6-00C00C205365");
|
|
149
|
+
AsfGuid.BitrateMutualExclusionObject = new AsfGuid("D6E229DC-35DA-11D1-9034-00A0C90349BE");
|
|
150
|
+
AsfGuid.ErrorCorrectionObject = new AsfGuid("75B22635-668E-11CF-A6D9-00AA0062CE6C");
|
|
151
|
+
AsfGuid.ContentDescriptionObject = new AsfGuid("75B22633-668E-11CF-A6D9-00AA0062CE6C");
|
|
152
|
+
AsfGuid.ExtendedContentDescriptionObject = new AsfGuid("D2D0A440-E307-11D2-97F0-00A0C95EA850");
|
|
153
|
+
AsfGuid.ContentBrandingObject = new AsfGuid("2211B3FA-BD23-11D2-B4B7-00A0C955FC6E");
|
|
154
|
+
AsfGuid.StreamBitratePropertiesObject = new AsfGuid("7BF875CE-468D-11D1-8D82-006097C9A2B2");
|
|
155
|
+
AsfGuid.ContentEncryptionObject = new AsfGuid("2211B3FB-BD23-11D2-B4B7-00A0C955FC6E");
|
|
156
|
+
AsfGuid.ExtendedContentEncryptionObject = new AsfGuid("298AE614-2622-4C17-B935-DAE07EE9289C");
|
|
157
|
+
AsfGuid.DigitalSignatureObject = new AsfGuid("2211B3FC-BD23-11D2-B4B7-00A0C955FC6E");
|
|
158
|
+
AsfGuid.PaddingObject = new AsfGuid("1806D474-CADF-4509-A4BA-9AABCB96AAE8");
|
|
159
|
+
AsfGuid.ExtendedStreamPropertiesObject = new AsfGuid("14E6A5CB-C672-4332-8399-A96952065B5A");
|
|
160
|
+
AsfGuid.AdvancedMutualExclusionObject = new AsfGuid("A08649CF-4775-4670-8A16-6E35357566CD");
|
|
161
|
+
AsfGuid.GroupMutualExclusionObject = new AsfGuid("D1465A40-5A79-4338-B71B-E36B8FD6C249");
|
|
162
|
+
AsfGuid.StreamPrioritizationObject = new AsfGuid("D4FED15B-88D3-454F-81F0-ED5C45999E24");
|
|
163
|
+
AsfGuid.BandwidthSharingObject = new AsfGuid("A69609E6-517B-11D2-B6AF-00C04FD908E9");
|
|
164
|
+
AsfGuid.LanguageListObject = new AsfGuid("7C4346A9-EFE0-4BFC-B229-393EDE415C85");
|
|
165
|
+
AsfGuid.MetadataObject = new AsfGuid("C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA");
|
|
166
|
+
AsfGuid.MetadataLibraryObject = new AsfGuid("44231C94-9498-49D1-A141-1D134E457054");
|
|
167
|
+
AsfGuid.IndexParametersObject = new AsfGuid("D6E229DF-35DA-11D1-9034-00A0C90349BE");
|
|
168
|
+
AsfGuid.MediaObjectIndexParametersObject = new AsfGuid("6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7");
|
|
169
|
+
AsfGuid.TimecodeIndexParametersObject = new AsfGuid("F55E496D-9797-4B5D-8C8B-604DFE9BFB24");
|
|
170
|
+
AsfGuid.CompatibilityObject = new AsfGuid("26F18B5D-4584-47EC-9F5F-0E651F0452C9");
|
|
171
|
+
AsfGuid.AdvancedContentEncryptionObject = new AsfGuid("43058533-6981-49E6-9B74-AD12CB86D58C");
|
|
172
|
+
AsfGuid.AudioMedia = new AsfGuid("F8699E40-5B4D-11CF-A8FD-00805F5C442B");
|
|
173
|
+
AsfGuid.VideoMedia = new AsfGuid("BC19EFC0-5B4D-11CF-A8FD-00805F5C442B");
|
|
174
|
+
AsfGuid.CommandMedia = new AsfGuid("59DACFC0-59E6-11D0-A3AC-00A0C90348F6");
|
|
175
|
+
AsfGuid.JFIF_Media = new AsfGuid("B61BE100-5B4E-11CF-A8FD-00805F5C442B");
|
|
176
|
+
AsfGuid.Degradable_JPEG_Media = new AsfGuid("35907DE0-E415-11CF-A917-00805F5C442B");
|
|
177
|
+
AsfGuid.FileTransferMedia = new AsfGuid("91BD222C-F21C-497A-8B6D-5AA86BFC0185");
|
|
178
|
+
AsfGuid.BinaryMedia = new AsfGuid("3AFB65E2-47EF-40F2-AC2C-70A90D71D343");
|
|
179
|
+
AsfGuid.ASF_Index_Placeholder_Object = new AsfGuid("D9AADE20-7C17-4F9C-BC28-8555DD98E2A2");
|
|
180
|
+
var AsfGuid_default = AsfGuid;
|
|
181
|
+
|
|
182
|
+
// node_modules/music-metadata/lib/asf/AsfUtil.js
|
|
183
|
+
function getParserForAttr(i) {
|
|
184
|
+
return attributeParsers[i];
|
|
185
|
+
}
|
|
186
|
+
function parseUnicodeAttr(uint8Array) {
|
|
187
|
+
return stripNulls(decodeString(uint8Array, "utf-16le"));
|
|
188
|
+
}
|
|
189
|
+
var attributeParsers = [
|
|
190
|
+
parseUnicodeAttr,
|
|
191
|
+
parseByteArrayAttr,
|
|
192
|
+
parseBoolAttr,
|
|
193
|
+
parseDWordAttr,
|
|
194
|
+
parseQWordAttr,
|
|
195
|
+
parseWordAttr,
|
|
196
|
+
parseByteArrayAttr
|
|
197
|
+
];
|
|
198
|
+
function parseByteArrayAttr(buf) {
|
|
199
|
+
return new Uint8Array(buf);
|
|
200
|
+
}
|
|
201
|
+
function parseBoolAttr(buf, offset = 0) {
|
|
202
|
+
return parseWordAttr(buf, offset) === 1;
|
|
203
|
+
}
|
|
204
|
+
function parseDWordAttr(buf, offset = 0) {
|
|
205
|
+
return UINT32_LE.get(buf, offset);
|
|
206
|
+
}
|
|
207
|
+
function parseQWordAttr(buf, offset = 0) {
|
|
208
|
+
return UINT64_LE.get(buf, offset);
|
|
209
|
+
}
|
|
210
|
+
function parseWordAttr(buf, offset = 0) {
|
|
211
|
+
return UINT16_LE.get(buf, offset);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// node_modules/music-metadata/lib/asf/AsfObject.js
|
|
215
|
+
var AsfContentParseError = class extends makeUnexpectedFileContentError("ASF") {
|
|
216
|
+
};
|
|
217
|
+
var TopLevelHeaderObjectToken = {
|
|
218
|
+
len: 30,
|
|
219
|
+
get: (buf, off) => ({
|
|
220
|
+
objectId: AsfGuid_default.fromBin(buf, off),
|
|
221
|
+
objectSize: Number(UINT64_LE.get(buf, off + 16)),
|
|
222
|
+
numberOfHeaderObjects: UINT32_LE.get(buf, off + 24)
|
|
223
|
+
// Reserved: 2 bytes
|
|
224
|
+
})
|
|
225
|
+
}, HeaderObjectToken = {
|
|
226
|
+
len: 24,
|
|
227
|
+
get: (buf, off) => ({
|
|
228
|
+
objectId: AsfGuid_default.fromBin(buf, off),
|
|
229
|
+
objectSize: Number(UINT64_LE.get(buf, off + 16))
|
|
230
|
+
})
|
|
231
|
+
}, State = class {
|
|
232
|
+
constructor(header) {
|
|
233
|
+
this.len = Number(header.objectSize) - HeaderObjectToken.len;
|
|
234
|
+
}
|
|
235
|
+
postProcessTag(tags, name, valueType, data) {
|
|
236
|
+
if (name === "WM/Picture")
|
|
237
|
+
tags.push({ id: name, value: WmPictureToken.fromBuffer(data) });
|
|
238
|
+
else {
|
|
239
|
+
let parseAttr = getParserForAttr(valueType);
|
|
240
|
+
if (!parseAttr)
|
|
241
|
+
throw new AsfContentParseError(`unexpected value headerType: ${valueType}`);
|
|
242
|
+
tags.push({ id: name, value: parseAttr(data) });
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}, IgnoreObjectState = class extends State {
|
|
246
|
+
get(_buf, _off) {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
}, FilePropertiesObject = class extends State {
|
|
250
|
+
get(buf, off) {
|
|
251
|
+
return {
|
|
252
|
+
fileId: AsfGuid_default.fromBin(buf, off),
|
|
253
|
+
fileSize: UINT64_LE.get(buf, off + 16),
|
|
254
|
+
creationDate: UINT64_LE.get(buf, off + 24),
|
|
255
|
+
dataPacketsCount: UINT64_LE.get(buf, off + 32),
|
|
256
|
+
playDuration: UINT64_LE.get(buf, off + 40),
|
|
257
|
+
sendDuration: UINT64_LE.get(buf, off + 48),
|
|
258
|
+
preroll: UINT64_LE.get(buf, off + 56),
|
|
259
|
+
flags: {
|
|
260
|
+
broadcast: getBit(buf, off + 64, 24),
|
|
261
|
+
seekable: getBit(buf, off + 64, 25)
|
|
262
|
+
},
|
|
263
|
+
// flagsNumeric: Token.UINT32_LE.get(buf, off + 64),
|
|
264
|
+
minimumDataPacketSize: UINT32_LE.get(buf, off + 68),
|
|
265
|
+
maximumDataPacketSize: UINT32_LE.get(buf, off + 72),
|
|
266
|
+
maximumBitrate: UINT32_LE.get(buf, off + 76)
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
FilePropertiesObject.guid = AsfGuid_default.FilePropertiesObject;
|
|
271
|
+
var StreamPropertiesObject = class extends State {
|
|
272
|
+
get(buf, off) {
|
|
273
|
+
return {
|
|
274
|
+
streamType: AsfGuid_default.decodeMediaType(AsfGuid_default.fromBin(buf, off)),
|
|
275
|
+
errorCorrectionType: AsfGuid_default.fromBin(buf, off + 8)
|
|
276
|
+
// ToDo
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
StreamPropertiesObject.guid = AsfGuid_default.StreamPropertiesObject;
|
|
281
|
+
var HeaderExtensionObject = class {
|
|
282
|
+
constructor() {
|
|
283
|
+
this.len = 22;
|
|
284
|
+
}
|
|
285
|
+
get(buf, off) {
|
|
286
|
+
let view = new DataView(buf.buffer, off);
|
|
287
|
+
return {
|
|
288
|
+
reserved1: AsfGuid_default.fromBin(buf, off),
|
|
289
|
+
reserved2: view.getUint16(16, !0),
|
|
290
|
+
extensionDataSize: view.getUint16(18, !0)
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
HeaderExtensionObject.guid = AsfGuid_default.HeaderExtensionObject;
|
|
295
|
+
var CodecListObjectHeader = {
|
|
296
|
+
len: 20,
|
|
297
|
+
get: (buf, off) => ({
|
|
298
|
+
entryCount: new DataView(buf.buffer, off).getUint16(16, !0)
|
|
299
|
+
})
|
|
300
|
+
};
|
|
301
|
+
async function readString(tokenizer) {
|
|
302
|
+
let length = await tokenizer.readNumber(UINT16_LE);
|
|
303
|
+
return (await tokenizer.readToken(new StringType(length * 2, "utf-16le"))).replace("\0", "");
|
|
304
|
+
}
|
|
305
|
+
async function readCodecEntries(tokenizer) {
|
|
306
|
+
let codecHeader = await tokenizer.readToken(CodecListObjectHeader), entries = [];
|
|
307
|
+
for (let i = 0; i < codecHeader.entryCount; ++i)
|
|
308
|
+
entries.push(await readCodecEntry(tokenizer));
|
|
309
|
+
return entries;
|
|
310
|
+
}
|
|
311
|
+
async function readInformation(tokenizer) {
|
|
312
|
+
let length = await tokenizer.readNumber(UINT16_LE), buf = new Uint8Array(length);
|
|
313
|
+
return await tokenizer.readBuffer(buf), buf;
|
|
314
|
+
}
|
|
315
|
+
async function readCodecEntry(tokenizer) {
|
|
316
|
+
let type = await tokenizer.readNumber(UINT16_LE);
|
|
317
|
+
return {
|
|
318
|
+
type: {
|
|
319
|
+
videoCodec: (type & 1) === 1,
|
|
320
|
+
audioCodec: (type & 2) === 2
|
|
321
|
+
},
|
|
322
|
+
codecName: await readString(tokenizer),
|
|
323
|
+
description: await readString(tokenizer),
|
|
324
|
+
information: await readInformation(tokenizer)
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
var ContentDescriptionObjectState = class _ContentDescriptionObjectState extends State {
|
|
328
|
+
get(buf, off) {
|
|
329
|
+
let tags = [], view = new DataView(buf.buffer, off), pos = 10;
|
|
330
|
+
for (let i = 0; i < _ContentDescriptionObjectState.contentDescTags.length; ++i) {
|
|
331
|
+
let length = view.getUint16(i * 2, !0);
|
|
332
|
+
if (length > 0) {
|
|
333
|
+
let tagName = _ContentDescriptionObjectState.contentDescTags[i], end = pos + length;
|
|
334
|
+
tags.push({ id: tagName, value: parseUnicodeAttr(buf.subarray(off + pos, off + end)) }), pos = end;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return tags;
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
ContentDescriptionObjectState.guid = AsfGuid_default.ContentDescriptionObject;
|
|
341
|
+
ContentDescriptionObjectState.contentDescTags = ["Title", "Author", "Copyright", "Description", "Rating"];
|
|
342
|
+
var ExtendedContentDescriptionObjectState = class extends State {
|
|
343
|
+
get(buf, off) {
|
|
344
|
+
let tags = [], view = new DataView(buf.buffer, off), attrCount = view.getUint16(0, !0), pos = 2;
|
|
345
|
+
for (let i = 0; i < attrCount; i += 1) {
|
|
346
|
+
let nameLen = view.getUint16(pos, !0);
|
|
347
|
+
pos += 2;
|
|
348
|
+
let name = parseUnicodeAttr(buf.subarray(off + pos, off + pos + nameLen));
|
|
349
|
+
pos += nameLen;
|
|
350
|
+
let valueType = view.getUint16(pos, !0);
|
|
351
|
+
pos += 2;
|
|
352
|
+
let valueLen = view.getUint16(pos, !0);
|
|
353
|
+
pos += 2;
|
|
354
|
+
let value = buf.subarray(off + pos, off + pos + valueLen);
|
|
355
|
+
pos += valueLen, this.postProcessTag(tags, name, valueType, value);
|
|
356
|
+
}
|
|
357
|
+
return tags;
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
ExtendedContentDescriptionObjectState.guid = AsfGuid_default.ExtendedContentDescriptionObject;
|
|
361
|
+
var ExtendedStreamPropertiesObjectState = class extends State {
|
|
362
|
+
get(buf, off) {
|
|
363
|
+
let view = new DataView(buf.buffer, off);
|
|
364
|
+
return {
|
|
365
|
+
startTime: UINT64_LE.get(buf, off),
|
|
366
|
+
endTime: UINT64_LE.get(buf, off + 8),
|
|
367
|
+
dataBitrate: view.getInt32(12, !0),
|
|
368
|
+
bufferSize: view.getInt32(16, !0),
|
|
369
|
+
initialBufferFullness: view.getInt32(20, !0),
|
|
370
|
+
alternateDataBitrate: view.getInt32(24, !0),
|
|
371
|
+
alternateBufferSize: view.getInt32(28, !0),
|
|
372
|
+
alternateInitialBufferFullness: view.getInt32(32, !0),
|
|
373
|
+
maximumObjectSize: view.getInt32(36, !0),
|
|
374
|
+
flags: {
|
|
375
|
+
reliableFlag: getBit(buf, off + 40, 0),
|
|
376
|
+
seekableFlag: getBit(buf, off + 40, 1),
|
|
377
|
+
resendLiveCleanpointsFlag: getBit(buf, off + 40, 2)
|
|
378
|
+
},
|
|
379
|
+
// flagsNumeric: Token.UINT32_LE.get(buf, off + 64),
|
|
380
|
+
streamNumber: view.getInt16(42, !0),
|
|
381
|
+
streamLanguageId: view.getInt16(44, !0),
|
|
382
|
+
averageTimePerFrame: view.getInt32(52, !0),
|
|
383
|
+
streamNameCount: view.getInt32(54, !0),
|
|
384
|
+
payloadExtensionSystems: view.getInt32(56, !0),
|
|
385
|
+
streamNames: [],
|
|
386
|
+
// ToDo
|
|
387
|
+
streamPropertiesObject: null
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
ExtendedStreamPropertiesObjectState.guid = AsfGuid_default.ExtendedStreamPropertiesObject;
|
|
392
|
+
var MetadataObjectState = class extends State {
|
|
393
|
+
get(uint8Array, off) {
|
|
394
|
+
let tags = [], view = new DataView(uint8Array.buffer, off), descriptionRecordsCount = view.getUint16(0, !0), pos = 2;
|
|
395
|
+
for (let i = 0; i < descriptionRecordsCount; i += 1) {
|
|
396
|
+
pos += 4;
|
|
397
|
+
let nameLen = view.getUint16(pos, !0);
|
|
398
|
+
pos += 2;
|
|
399
|
+
let dataType = view.getUint16(pos, !0);
|
|
400
|
+
pos += 2;
|
|
401
|
+
let dataLen = view.getUint32(pos, !0);
|
|
402
|
+
pos += 4;
|
|
403
|
+
let name = parseUnicodeAttr(uint8Array.subarray(off + pos, off + pos + nameLen));
|
|
404
|
+
pos += nameLen;
|
|
405
|
+
let data = uint8Array.subarray(off + pos, off + pos + dataLen);
|
|
406
|
+
pos += dataLen, this.postProcessTag(tags, name, dataType, data);
|
|
407
|
+
}
|
|
408
|
+
return tags;
|
|
409
|
+
}
|
|
410
|
+
};
|
|
411
|
+
MetadataObjectState.guid = AsfGuid_default.MetadataObject;
|
|
412
|
+
var MetadataLibraryObjectState = class extends MetadataObjectState {
|
|
413
|
+
};
|
|
414
|
+
MetadataLibraryObjectState.guid = AsfGuid_default.MetadataLibraryObject;
|
|
415
|
+
var WmPictureToken = class _WmPictureToken {
|
|
416
|
+
static fromBuffer(buffer) {
|
|
417
|
+
return new _WmPictureToken(buffer.length).get(buffer, 0);
|
|
418
|
+
}
|
|
419
|
+
constructor(len) {
|
|
420
|
+
this.len = len;
|
|
421
|
+
}
|
|
422
|
+
get(buffer, offset) {
|
|
423
|
+
let view = new DataView(buffer.buffer, offset), typeId = view.getUint8(0), size = view.getInt32(1, !0), index = 5;
|
|
424
|
+
for (; view.getUint16(index) !== 0; )
|
|
425
|
+
index += 2;
|
|
426
|
+
let format = new StringType(index - 5, "utf-16le").get(buffer, 5);
|
|
427
|
+
for (; view.getUint16(index) !== 0; )
|
|
428
|
+
index += 2;
|
|
429
|
+
let description = new StringType(index - 5, "utf-16le").get(buffer, 5);
|
|
430
|
+
return {
|
|
431
|
+
type: AttachedPictureType[typeId],
|
|
432
|
+
format,
|
|
433
|
+
description,
|
|
434
|
+
size,
|
|
435
|
+
data: buffer.slice(index + 4)
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
|
|
440
|
+
// node_modules/music-metadata/lib/asf/AsfParser.js
|
|
441
|
+
var debug = (0, import_debug.default)("music-metadata:parser:ASF"), headerType = "asf", AsfParser = class extends BasicParser {
|
|
442
|
+
async parse() {
|
|
443
|
+
let header = await this.tokenizer.readToken(TopLevelHeaderObjectToken);
|
|
444
|
+
if (!header.objectId.equals(AsfGuid_default.HeaderObject))
|
|
445
|
+
throw new AsfContentParseError(`expected asf header; but was not found; got: ${header.objectId.str}`);
|
|
446
|
+
await this.parseObjectHeader(header.numberOfHeaderObjects);
|
|
447
|
+
}
|
|
448
|
+
async parseObjectHeader(numberOfObjectHeaders) {
|
|
449
|
+
let tags;
|
|
450
|
+
do {
|
|
451
|
+
let header = await this.tokenizer.readToken(HeaderObjectToken);
|
|
452
|
+
switch (debug("header GUID=%s", header.objectId.str), header.objectId.str) {
|
|
453
|
+
case FilePropertiesObject.guid.str: {
|
|
454
|
+
let fpo = await this.tokenizer.readToken(new FilePropertiesObject(header));
|
|
455
|
+
this.metadata.setFormat("duration", Number(fpo.playDuration / BigInt(1e3)) / 1e4 - Number(fpo.preroll) / 1e3), this.metadata.setFormat("bitrate", fpo.maximumBitrate);
|
|
456
|
+
break;
|
|
457
|
+
}
|
|
458
|
+
case StreamPropertiesObject.guid.str: {
|
|
459
|
+
let spo = await this.tokenizer.readToken(new StreamPropertiesObject(header));
|
|
460
|
+
this.metadata.setFormat("container", `ASF/${spo.streamType}`);
|
|
461
|
+
break;
|
|
462
|
+
}
|
|
463
|
+
case HeaderExtensionObject.guid.str: {
|
|
464
|
+
let extHeader = await this.tokenizer.readToken(new HeaderExtensionObject());
|
|
465
|
+
await this.parseExtensionObject(extHeader.extensionDataSize);
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
case ContentDescriptionObjectState.guid.str:
|
|
469
|
+
tags = await this.tokenizer.readToken(new ContentDescriptionObjectState(header)), await this.addTags(tags);
|
|
470
|
+
break;
|
|
471
|
+
case ExtendedContentDescriptionObjectState.guid.str:
|
|
472
|
+
tags = await this.tokenizer.readToken(new ExtendedContentDescriptionObjectState(header)), await this.addTags(tags);
|
|
473
|
+
break;
|
|
474
|
+
case AsfGuid_default.CodecListObject.str: {
|
|
475
|
+
let codecs = await readCodecEntries(this.tokenizer);
|
|
476
|
+
codecs.forEach((codec) => {
|
|
477
|
+
this.metadata.addStreamInfo({
|
|
478
|
+
type: codec.type.videoCodec ? TrackType.video : TrackType.audio,
|
|
479
|
+
codecName: codec.codecName
|
|
480
|
+
});
|
|
481
|
+
});
|
|
482
|
+
let audioCodecs = codecs.filter((codec) => codec.type.audioCodec).map((codec) => codec.codecName).join("/");
|
|
483
|
+
this.metadata.setFormat("codec", audioCodecs);
|
|
484
|
+
break;
|
|
485
|
+
}
|
|
486
|
+
case AsfGuid_default.StreamBitratePropertiesObject.str:
|
|
487
|
+
await this.tokenizer.ignore(header.objectSize - HeaderObjectToken.len);
|
|
488
|
+
break;
|
|
489
|
+
case AsfGuid_default.PaddingObject.str:
|
|
490
|
+
debug("Padding: %s bytes", header.objectSize - HeaderObjectToken.len), await this.tokenizer.ignore(header.objectSize - HeaderObjectToken.len);
|
|
491
|
+
break;
|
|
492
|
+
default:
|
|
493
|
+
this.metadata.addWarning(`Ignore ASF-Object-GUID: ${header.objectId.str}`), debug("Ignore ASF-Object-GUID: %s", header.objectId.str), await this.tokenizer.readToken(new IgnoreObjectState(header));
|
|
494
|
+
}
|
|
495
|
+
} while (--numberOfObjectHeaders);
|
|
496
|
+
}
|
|
497
|
+
async addTags(tags) {
|
|
498
|
+
await Promise.all(tags.map(({ id, value }) => this.metadata.addTag(headerType, id, value)));
|
|
499
|
+
}
|
|
500
|
+
async parseExtensionObject(extensionSize) {
|
|
501
|
+
do {
|
|
502
|
+
let header = await this.tokenizer.readToken(HeaderObjectToken), remaining = header.objectSize - HeaderObjectToken.len;
|
|
503
|
+
if (remaining < 0)
|
|
504
|
+
throw new AsfContentParseError(`Invalid ASF header object size: ${header.objectSize}`);
|
|
505
|
+
switch (header.objectId.str) {
|
|
506
|
+
case ExtendedStreamPropertiesObjectState.guid.str:
|
|
507
|
+
await this.tokenizer.readToken(new ExtendedStreamPropertiesObjectState(header));
|
|
508
|
+
break;
|
|
509
|
+
case MetadataObjectState.guid.str: {
|
|
510
|
+
let moTags = await this.tokenizer.readToken(new MetadataObjectState(header));
|
|
511
|
+
await this.addTags(moTags);
|
|
512
|
+
break;
|
|
513
|
+
}
|
|
514
|
+
case MetadataLibraryObjectState.guid.str: {
|
|
515
|
+
let mlTags = await this.tokenizer.readToken(new MetadataLibraryObjectState(header));
|
|
516
|
+
await this.addTags(mlTags);
|
|
517
|
+
break;
|
|
518
|
+
}
|
|
519
|
+
case AsfGuid_default.PaddingObject.str:
|
|
520
|
+
await this.tokenizer.ignore(remaining);
|
|
521
|
+
break;
|
|
522
|
+
case AsfGuid_default.CompatibilityObject.str:
|
|
523
|
+
await this.tokenizer.ignore(remaining);
|
|
524
|
+
break;
|
|
525
|
+
case AsfGuid_default.ASF_Index_Placeholder_Object.str:
|
|
526
|
+
await this.tokenizer.ignore(remaining);
|
|
527
|
+
break;
|
|
528
|
+
default:
|
|
529
|
+
this.metadata.addWarning(`Ignore ASF-Object-GUID: ${header.objectId.str}`), await this.tokenizer.readToken(new IgnoreObjectState(header));
|
|
530
|
+
break;
|
|
531
|
+
}
|
|
532
|
+
extensionSize -= header.objectSize;
|
|
533
|
+
} while (extensionSize > 0);
|
|
534
|
+
}
|
|
535
|
+
};
|
|
536
|
+
export {
|
|
537
|
+
AsfParser
|
|
538
|
+
};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { createRequire as __adfCreateRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __adfFileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __adfDirname } from 'node:path';
|
|
4
|
+
const require = __adfCreateRequire(import.meta.url);
|
|
5
|
+
const __filename = __adfFileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __adfDirname(__filename);
|
|
7
|
+
import {
|
|
8
|
+
ID3v2Parser
|
|
9
|
+
} from "./chunk-XYTWGHFS.mjs";
|
|
10
|
+
import "./chunk-VAUOM3IN.mjs";
|
|
11
|
+
import "./chunk-DXWDD5XJ.mjs";
|
|
12
|
+
import {
|
|
13
|
+
FourCcToken
|
|
14
|
+
} from "./chunk-NBTUWMGP.mjs";
|
|
15
|
+
import "./chunk-XX7OSWTO.mjs";
|
|
16
|
+
import {
|
|
17
|
+
fromBuffer
|
|
18
|
+
} from "./chunk-HBUENVQL.mjs";
|
|
19
|
+
import {
|
|
20
|
+
BasicParser,
|
|
21
|
+
INT64_BE,
|
|
22
|
+
StringType,
|
|
23
|
+
UINT16_BE,
|
|
24
|
+
UINT32_BE,
|
|
25
|
+
UINT32_LE,
|
|
26
|
+
UINT8,
|
|
27
|
+
Uint8ArrayType,
|
|
28
|
+
makeUnexpectedFileContentError
|
|
29
|
+
} from "./chunk-I2HJYHFT.mjs";
|
|
30
|
+
import {
|
|
31
|
+
require_src
|
|
32
|
+
} from "./chunk-AUYKRQPJ.mjs";
|
|
33
|
+
import "./chunk-NZ7JTHEO.mjs";
|
|
34
|
+
import {
|
|
35
|
+
__toESM
|
|
36
|
+
} from "./chunk-M2RX3S2T.mjs";
|
|
37
|
+
|
|
38
|
+
// node_modules/music-metadata/lib/dsdiff/DsdiffParser.js
|
|
39
|
+
var import_debug = __toESM(require_src(), 1);
|
|
40
|
+
|
|
41
|
+
// node_modules/music-metadata/lib/dsdiff/DsdiffToken.js
|
|
42
|
+
var ChunkHeader64 = {
|
|
43
|
+
len: 12,
|
|
44
|
+
get: (buf, off) => ({
|
|
45
|
+
// Group-ID
|
|
46
|
+
chunkID: FourCcToken.get(buf, off),
|
|
47
|
+
// Size
|
|
48
|
+
chunkSize: INT64_BE.get(buf, off + 4)
|
|
49
|
+
})
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// node_modules/music-metadata/lib/dsdiff/DsdiffParser.js
|
|
53
|
+
var debug = (0, import_debug.default)("music-metadata:parser:aiff"), DsdiffContentParseError = class extends makeUnexpectedFileContentError("DSDIFF") {
|
|
54
|
+
}, DsdiffParser = class extends BasicParser {
|
|
55
|
+
async parse() {
|
|
56
|
+
let header = await this.tokenizer.readToken(ChunkHeader64);
|
|
57
|
+
if (header.chunkID !== "FRM8")
|
|
58
|
+
throw new DsdiffContentParseError("Unexpected chunk-ID");
|
|
59
|
+
this.metadata.setAudioOnly();
|
|
60
|
+
let type = (await this.tokenizer.readToken(FourCcToken)).trim();
|
|
61
|
+
if (type === "DSD")
|
|
62
|
+
return this.metadata.setFormat("container", `DSDIFF/${type}`), this.metadata.setFormat("lossless", !0), this.readFmt8Chunks(header.chunkSize - BigInt(FourCcToken.len));
|
|
63
|
+
throw new DsdiffContentParseError(`Unsupported DSDIFF type: ${type}`);
|
|
64
|
+
}
|
|
65
|
+
async readFmt8Chunks(remainingSize) {
|
|
66
|
+
for (; remainingSize >= ChunkHeader64.len; ) {
|
|
67
|
+
let chunkHeader = await this.tokenizer.readToken(ChunkHeader64);
|
|
68
|
+
debug(`Chunk id=${chunkHeader.chunkID}`), await this.readData(chunkHeader), remainingSize -= BigInt(ChunkHeader64.len) + chunkHeader.chunkSize;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async readData(header) {
|
|
72
|
+
debug(`Reading data of chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);
|
|
73
|
+
let p0 = this.tokenizer.position;
|
|
74
|
+
switch (header.chunkID.trim()) {
|
|
75
|
+
case "FVER": {
|
|
76
|
+
let version = await this.tokenizer.readToken(UINT32_LE);
|
|
77
|
+
debug(`DSDIFF version=${version}`);
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case "PROP": {
|
|
81
|
+
if (await this.tokenizer.readToken(FourCcToken) !== "SND ")
|
|
82
|
+
throw new DsdiffContentParseError("Unexpected PROP-chunk ID");
|
|
83
|
+
await this.handleSoundPropertyChunks(header.chunkSize - BigInt(FourCcToken.len));
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case "ID3": {
|
|
87
|
+
let id3_data = await this.tokenizer.readToken(new Uint8ArrayType(Number(header.chunkSize))), rst = fromBuffer(id3_data);
|
|
88
|
+
await new ID3v2Parser().parse(this.metadata, rst, this.options);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
case "DSD":
|
|
92
|
+
this.metadata.format.numberOfChannels && this.metadata.setFormat("numberOfSamples", Number(header.chunkSize * BigInt(8) / BigInt(this.metadata.format.numberOfChannels))), this.metadata.format.numberOfSamples && this.metadata.format.sampleRate && this.metadata.setFormat("duration", this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);
|
|
93
|
+
break;
|
|
94
|
+
default:
|
|
95
|
+
debug(`Ignore chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
let remaining = header.chunkSize - BigInt(this.tokenizer.position - p0);
|
|
99
|
+
remaining > 0 && (debug(`After Parsing chunk, remaining ${remaining} bytes`), await this.tokenizer.ignore(Number(remaining)));
|
|
100
|
+
}
|
|
101
|
+
async handleSoundPropertyChunks(remainingSize) {
|
|
102
|
+
for (debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`); remainingSize > 0; ) {
|
|
103
|
+
let sndPropHeader = await this.tokenizer.readToken(ChunkHeader64);
|
|
104
|
+
debug(`Sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);
|
|
105
|
+
let p0 = this.tokenizer.position;
|
|
106
|
+
switch (sndPropHeader.chunkID.trim()) {
|
|
107
|
+
case "FS": {
|
|
108
|
+
let sampleRate = await this.tokenizer.readToken(UINT32_BE);
|
|
109
|
+
this.metadata.setFormat("sampleRate", sampleRate);
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case "CHNL": {
|
|
113
|
+
let numChannels = await this.tokenizer.readToken(UINT16_BE);
|
|
114
|
+
this.metadata.setFormat("numberOfChannels", numChannels), await this.handleChannelChunks(sndPropHeader.chunkSize - BigInt(UINT16_BE.len));
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case "CMPR": {
|
|
118
|
+
let compressionIdCode = (await this.tokenizer.readToken(FourCcToken)).trim(), count = await this.tokenizer.readToken(UINT8), compressionName = await this.tokenizer.readToken(new StringType(count, "ascii"));
|
|
119
|
+
compressionIdCode === "DSD" && (this.metadata.setFormat("lossless", !0), this.metadata.setFormat("bitsPerSample", 1)), this.metadata.setFormat("codec", `${compressionIdCode} (${compressionName})`);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "ABSS": {
|
|
123
|
+
let hours = await this.tokenizer.readToken(UINT16_BE), minutes = await this.tokenizer.readToken(UINT8), seconds = await this.tokenizer.readToken(UINT8), samples = await this.tokenizer.readToken(UINT32_BE);
|
|
124
|
+
debug(`ABSS ${hours}:${minutes}:${seconds}.${samples}`);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case "LSCO": {
|
|
128
|
+
let lsConfig = await this.tokenizer.readToken(UINT16_BE);
|
|
129
|
+
debug(`LSCO lsConfig=${lsConfig}`);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
default:
|
|
133
|
+
debug(`Unknown sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`), await this.tokenizer.ignore(Number(sndPropHeader.chunkSize));
|
|
134
|
+
}
|
|
135
|
+
let remaining = sndPropHeader.chunkSize - BigInt(this.tokenizer.position - p0);
|
|
136
|
+
remaining > 0 && (debug(`After Parsing sound-property-chunk ${sndPropHeader.chunkSize}, remaining ${remaining} bytes`), await this.tokenizer.ignore(Number(remaining))), remainingSize -= BigInt(ChunkHeader64.len) + sndPropHeader.chunkSize, debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);
|
|
137
|
+
}
|
|
138
|
+
if (this.metadata.format.lossless && this.metadata.format.sampleRate && this.metadata.format.numberOfChannels && this.metadata.format.bitsPerSample) {
|
|
139
|
+
let bitrate = this.metadata.format.sampleRate * this.metadata.format.numberOfChannels * this.metadata.format.bitsPerSample;
|
|
140
|
+
this.metadata.setFormat("bitrate", bitrate);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async handleChannelChunks(remainingSize) {
|
|
144
|
+
debug(`Parsing channel-chunks, remainingSize=${remainingSize}`);
|
|
145
|
+
let channels = [];
|
|
146
|
+
for (; remainingSize >= FourCcToken.len; ) {
|
|
147
|
+
let channelId = await this.tokenizer.readToken(FourCcToken);
|
|
148
|
+
debug(`Channel[ID=${channelId}]`), channels.push(channelId), remainingSize -= BigInt(FourCcToken.len);
|
|
149
|
+
}
|
|
150
|
+
return debug(`Channels: ${channels.join(", ")}`), channels;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
export {
|
|
154
|
+
DsdiffContentParseError,
|
|
155
|
+
DsdiffParser
|
|
156
|
+
};
|