taglib-wasm 1.1.2 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +512 -38
  2. package/dist/index.browser.js +293 -3
  3. package/dist/index.d.ts +2 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +2 -0
  6. package/dist/simple.browser.js +293 -3
  7. package/dist/src/bwf/bext.d.ts +28 -0
  8. package/dist/src/bwf/bext.d.ts.map +1 -0
  9. package/dist/src/bwf/bext.js +126 -0
  10. package/dist/src/constants/complex-properties.d.ts +1 -14
  11. package/dist/src/constants/complex-properties.d.ts.map +1 -1
  12. package/dist/src/msgpack/encoder.d.ts.map +1 -1
  13. package/dist/src/msgpack/encoder.js +11 -1
  14. package/dist/src/msgpack/index.d.ts +0 -1
  15. package/dist/src/msgpack/index.d.ts.map +1 -1
  16. package/dist/src/msgpack/index.js +1 -11
  17. package/dist/src/runtime/unified-loader/module-loading.js +1 -1
  18. package/dist/src/runtime/wasi-adapter/file-handle.d.ts +15 -1
  19. package/dist/src/runtime/wasi-adapter/file-handle.d.ts.map +1 -1
  20. package/dist/src/runtime/wasi-adapter/file-handle.js +62 -2
  21. package/dist/src/runtime/wasi-host-loader.d.ts +1 -1
  22. package/dist/src/runtime/wasi-host-loader.js +1 -1
  23. package/dist/src/taglib/audio-file-bwf.d.ts +14 -0
  24. package/dist/src/taglib/audio-file-bwf.d.ts.map +1 -0
  25. package/dist/src/taglib/audio-file-bwf.js +41 -0
  26. package/dist/src/taglib/audio-file-impl.d.ts +18 -0
  27. package/dist/src/taglib/audio-file-impl.d.ts.map +1 -1
  28. package/dist/src/taglib/audio-file-impl.js +74 -1
  29. package/dist/src/taglib/audio-file-interface.d.ts +44 -0
  30. package/dist/src/taglib/audio-file-interface.d.ts.map +1 -1
  31. package/dist/src/taglib/embind-adapter.d.ts +2 -0
  32. package/dist/src/taglib/embind-adapter.d.ts.map +1 -1
  33. package/dist/src/taglib/embind-adapter.js +36 -2
  34. package/dist/src/types/audio-formats.d.ts +18 -0
  35. package/dist/src/types/audio-formats.d.ts.map +1 -1
  36. package/dist/src/types/bwf.d.ts +43 -0
  37. package/dist/src/types/bwf.d.ts.map +1 -0
  38. package/dist/src/types/bwf.js +0 -0
  39. package/dist/src/types/chapters.d.ts +47 -0
  40. package/dist/src/types/chapters.d.ts.map +1 -0
  41. package/dist/src/types/chapters.js +0 -0
  42. package/dist/src/types/index.d.ts +2 -0
  43. package/dist/src/types/index.d.ts.map +1 -1
  44. package/dist/src/types/index.js +2 -0
  45. package/dist/src/types/metadata-mappings.d.ts +1 -1
  46. package/dist/src/types/metadata-mappings.d.ts.map +1 -1
  47. package/dist/src/types/tags.d.ts +11 -7
  48. package/dist/src/types/tags.d.ts.map +1 -1
  49. package/dist/src/version.d.ts +1 -1
  50. package/dist/src/version.js +1 -1
  51. package/dist/src/wasm.d.ts +22 -52
  52. package/dist/src/wasm.d.ts.map +1 -1
  53. package/dist/taglib-wasi.wasm +0 -0
  54. package/dist/taglib-web.wasm +0 -0
  55. package/dist/taglib-wrapper.d.ts +0 -2
  56. package/dist/taglib-wrapper.js +1 -1
  57. package/package.json +5 -6
  58. package/dist/src/msgpack/processor.d.ts +0 -37
  59. package/dist/src/msgpack/processor.d.ts.map +0 -1
  60. package/dist/src/msgpack/processor.js +0 -69
  61. package/dist/taglib_wasi.wasm +0 -0
@@ -100,6 +100,20 @@ var init_pictures = __esm({
100
100
  }
101
101
  });
102
102
 
103
+ // src/types/chapters.ts
104
+ var init_chapters = __esm({
105
+ "src/types/chapters.ts"() {
106
+ "use strict";
107
+ }
108
+ });
109
+
110
+ // src/types/bwf.ts
111
+ var init_bwf = __esm({
112
+ "src/types/bwf.ts"() {
113
+ "use strict";
114
+ }
115
+ });
116
+
103
117
  // src/types/config.ts
104
118
  var init_config = __esm({
105
119
  "src/types/config.ts"() {
@@ -122,6 +136,8 @@ var init_types = __esm({
122
136
  init_tags();
123
137
  init_metadata_mappings();
124
138
  init_pictures();
139
+ init_chapters();
140
+ init_bwf();
125
141
  init_config();
126
142
  init_format_property_keys();
127
143
  }
@@ -135,6 +151,136 @@ var init_types2 = __esm({
135
151
  }
136
152
  });
137
153
 
154
+ // src/bwf/bext.ts
155
+ function readFixedString(bytes, offset, len) {
156
+ let end = offset;
157
+ const max = Math.min(offset + len, bytes.length);
158
+ while (end < max && bytes[end] !== 0) end++;
159
+ let s = "";
160
+ for (let i = offset; i < end; i++) s += String.fromCharCode(bytes[i]);
161
+ return s;
162
+ }
163
+ function writeFixedString(bytes, offset, len, value) {
164
+ for (let i = 0; i < len; i++) {
165
+ bytes[offset + i] = i < value.length ? value.charCodeAt(i) & 255 : 0;
166
+ }
167
+ }
168
+ function clampInt16(n) {
169
+ return Math.max(-32768, Math.min(32767, Math.round(n)));
170
+ }
171
+ function loudnessRaw(v) {
172
+ return v === void 0 ? LOUDNESS_UNSET : clampInt16(v * 100);
173
+ }
174
+ function loudnessFromRaw(raw) {
175
+ return raw === LOUDNESS_UNSET ? void 0 : raw / 100;
176
+ }
177
+ function bytesToHex(bytes) {
178
+ let s = "";
179
+ for (const b of bytes) s += b.toString(16).padStart(2, "0");
180
+ return s;
181
+ }
182
+ function hexToBytes(hex, outLen) {
183
+ const clean = hex.replace(/[^0-9a-fA-F]/g, "");
184
+ const out = new Uint8Array(outLen);
185
+ for (let i = 0; i + 1 < clean.length + 1 && i / 2 < outLen; i += 2) {
186
+ const pair = clean.slice(i, i + 2);
187
+ if (pair.length === 2) out[i / 2] = parseInt(pair, 16);
188
+ }
189
+ return out;
190
+ }
191
+ function decodeBext(bytes) {
192
+ if (bytes.length < VERSION_OFFSET + 2) return void 0;
193
+ const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
194
+ const timeRefLow = dv.getUint32(338, true);
195
+ const timeRefHigh = dv.getUint32(342, true);
196
+ const version = dv.getUint16(VERSION_OFFSET, true);
197
+ const result = {
198
+ description: readFixedString(bytes, 0, 256),
199
+ originator: readFixedString(bytes, 256, 32),
200
+ originatorReference: readFixedString(bytes, 288, 32),
201
+ originationDate: readFixedString(bytes, 320, 10),
202
+ originationTime: readFixedString(bytes, 330, 8),
203
+ timeReferenceSamples: BigInt(timeRefHigh) << 32n | BigInt(timeRefLow),
204
+ version,
205
+ codingHistory: bytes.length > FIXED_PREFIX_LEN ? readFixedString(
206
+ bytes,
207
+ FIXED_PREFIX_LEN,
208
+ bytes.length - FIXED_PREFIX_LEN
209
+ ) : ""
210
+ };
211
+ if (version >= 1 && bytes.length >= UMID_OFFSET + UMID_LEN) {
212
+ result.umid = bytesToHex(
213
+ bytes.subarray(UMID_OFFSET, UMID_OFFSET + UMID_LEN)
214
+ );
215
+ }
216
+ if (version >= 2 && bytes.length >= LOUDNESS_OFFSET + 10) {
217
+ const lv = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET, true));
218
+ const lr = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET + 2, true));
219
+ const mtp = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET + 4, true));
220
+ const mml = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET + 6, true));
221
+ const msl = loudnessFromRaw(dv.getInt16(LOUDNESS_OFFSET + 8, true));
222
+ if (lv !== void 0) result.loudnessValueDb = lv;
223
+ if (lr !== void 0) result.loudnessRangeDb = lr;
224
+ if (mtp !== void 0) result.maxTruePeakLevelDbtp = mtp;
225
+ if (mml !== void 0) result.maxMomentaryLoudnessDb = mml;
226
+ if (msl !== void 0) result.maxShortTermLoudnessDb = msl;
227
+ }
228
+ return result;
229
+ }
230
+ function encodeBext(b) {
231
+ const codingHistory = b.codingHistory ?? "";
232
+ const bytes = new Uint8Array(FIXED_PREFIX_LEN + codingHistory.length);
233
+ const dv = new DataView(bytes.buffer);
234
+ const hasLoudness = b.loudnessValueDb !== void 0 || b.loudnessRangeDb !== void 0 || b.maxTruePeakLevelDbtp !== void 0 || b.maxMomentaryLoudnessDb !== void 0 || b.maxShortTermLoudnessDb !== void 0;
235
+ const version = Number.isInteger(b.version) ? b.version : hasLoudness ? 2 : b.umid ? 1 : 0;
236
+ writeFixedString(bytes, 0, 256, b.description ?? "");
237
+ writeFixedString(bytes, 256, 32, b.originator ?? "");
238
+ writeFixedString(bytes, 288, 32, b.originatorReference ?? "");
239
+ writeFixedString(bytes, 320, 10, b.originationDate ?? "");
240
+ writeFixedString(bytes, 330, 8, b.originationTime ?? "");
241
+ const tr = b.timeReferenceSamples ?? 0n;
242
+ dv.setUint32(338, Number(tr & 0xffffffffn), true);
243
+ dv.setUint32(342, Number(tr >> 32n & 0xffffffffn), true);
244
+ dv.setUint16(VERSION_OFFSET, version, true);
245
+ if (version >= 1 && b.umid) {
246
+ bytes.set(hexToBytes(b.umid, UMID_LEN), UMID_OFFSET);
247
+ }
248
+ if (version >= 2) {
249
+ dv.setInt16(LOUDNESS_OFFSET, loudnessRaw(b.loudnessValueDb), true);
250
+ dv.setInt16(LOUDNESS_OFFSET + 2, loudnessRaw(b.loudnessRangeDb), true);
251
+ dv.setInt16(LOUDNESS_OFFSET + 4, loudnessRaw(b.maxTruePeakLevelDbtp), true);
252
+ dv.setInt16(
253
+ LOUDNESS_OFFSET + 6,
254
+ loudnessRaw(b.maxMomentaryLoudnessDb),
255
+ true
256
+ );
257
+ dv.setInt16(
258
+ LOUDNESS_OFFSET + 8,
259
+ loudnessRaw(b.maxShortTermLoudnessDb),
260
+ true
261
+ );
262
+ }
263
+ writeFixedString(
264
+ bytes,
265
+ FIXED_PREFIX_LEN,
266
+ codingHistory.length,
267
+ codingHistory
268
+ );
269
+ return bytes;
270
+ }
271
+ var FIXED_PREFIX_LEN, VERSION_OFFSET, UMID_OFFSET, UMID_LEN, LOUDNESS_OFFSET, LOUDNESS_UNSET;
272
+ var init_bext = __esm({
273
+ "src/bwf/bext.ts"() {
274
+ "use strict";
275
+ FIXED_PREFIX_LEN = 602;
276
+ VERSION_OFFSET = 346;
277
+ UMID_OFFSET = 348;
278
+ UMID_LEN = 64;
279
+ LOUDNESS_OFFSET = 412;
280
+ LOUDNESS_UNSET = 32767;
281
+ }
282
+ });
283
+
138
284
  // src/errors/base.ts
139
285
  var SUPPORTED_FORMATS, TagLibError;
140
286
  var init_base = __esm({
@@ -377,6 +523,47 @@ var init_errors2 = __esm({
377
523
  }
378
524
  });
379
525
 
526
+ // src/taglib/audio-file-bwf.ts
527
+ function requireBwf(format) {
528
+ if (!BWF_FORMATS.has(format)) {
529
+ throw new UnsupportedFormatError(format, ["WAV", "FLAC"], {
530
+ operation: "BWF metadata"
531
+ });
532
+ }
533
+ }
534
+ function getBextData(handle) {
535
+ const raw = handle.getBextData();
536
+ return raw && raw.length > 0 ? raw : void 0;
537
+ }
538
+ function setBextData(handle, format, data) {
539
+ requireBwf(format);
540
+ handle.setBextData(data);
541
+ }
542
+ function getBext(handle) {
543
+ const raw = handle.getBextData();
544
+ return raw && raw.length > 0 ? decodeBext(raw) : void 0;
545
+ }
546
+ function setBext(handle, format, bext) {
547
+ requireBwf(format);
548
+ handle.setBextData(encodeBext(bext));
549
+ }
550
+ function getIxml(handle) {
551
+ return handle.getIxml();
552
+ }
553
+ function setIxml(handle, format, data) {
554
+ requireBwf(format);
555
+ handle.setIxml(data);
556
+ }
557
+ var BWF_FORMATS;
558
+ var init_audio_file_bwf = __esm({
559
+ "src/taglib/audio-file-bwf.ts"() {
560
+ "use strict";
561
+ init_bext();
562
+ init_errors2();
563
+ BWF_FORMATS = /* @__PURE__ */ new Set(["WAV", "FLAC"]);
564
+ }
565
+ });
566
+
380
567
  // browser-stub:platform-io-browser-stub
381
568
  function getPlatformIO() {
382
569
  throw new Error("Filesystem operations are not available in the browser.");
@@ -1359,6 +1546,9 @@ var init_audio_file_base = __esm({
1359
1546
  });
1360
1547
 
1361
1548
  // src/taglib/embind-adapter.ts
1549
+ function isValidBitrateMode(value) {
1550
+ return value === "CBR" || value === "VBR" || value === "ABR";
1551
+ }
1362
1552
  function wrapEmbindHandle(raw) {
1363
1553
  const overrides = {
1364
1554
  getTagData() {
@@ -1383,12 +1573,41 @@ function wrapEmbindHandle(raw) {
1383
1573
  if (data.year !== void 0) tw.setYear(data.year);
1384
1574
  if (data.track !== void 0) tw.setTrack(data.track);
1385
1575
  },
1576
+ getBextData() {
1577
+ const v = raw.getBextData();
1578
+ if (v === void 0 || v === null) return void 0;
1579
+ const u8 = v instanceof Uint8Array ? v : new Uint8Array(v);
1580
+ return u8.length > 0 ? u8 : void 0;
1581
+ },
1582
+ setBextData(data) {
1583
+ raw.setBextData(data ?? null);
1584
+ },
1585
+ getIxml() {
1586
+ const v = raw.getIxml();
1587
+ return typeof v === "string" && v.length > 0 ? v : void 0;
1588
+ },
1589
+ setIxml(data) {
1590
+ raw.setIxml(
1591
+ data ?? null
1592
+ );
1593
+ },
1594
+ hasId3Tags() {
1595
+ const v = raw.hasId3Tags();
1596
+ if (!v || typeof v !== "object") return { v1: false, v2: false };
1597
+ const o = v;
1598
+ return { v1: o.v1 === true, v2: o.v2 === true };
1599
+ },
1600
+ stripId3Tags(opts) {
1601
+ raw.stripId3Tags(opts);
1602
+ },
1386
1603
  getAudioProperties() {
1387
1604
  const pw = raw.getAudioProperties();
1388
1605
  if (!pw) return null;
1389
1606
  const containerFormat = pw.containerFormat() || "unknown";
1607
+ const codec = pw.codec() || "unknown";
1390
1608
  const mpegVersion = pw.mpegVersion();
1391
1609
  const formatVersion = pw.formatVersion();
1610
+ const bitrateMode = pw.bitrateMode();
1392
1611
  return {
1393
1612
  duration: pw.lengthInSeconds(),
1394
1613
  durationMs: pw.lengthInMilliseconds(),
@@ -1396,12 +1615,14 @@ function wrapEmbindHandle(raw) {
1396
1615
  sampleRate: pw.sampleRate(),
1397
1616
  channels: pw.channels(),
1398
1617
  bitsPerSample: pw.bitsPerSample(),
1399
- codec: pw.codec() || "unknown",
1618
+ codec,
1400
1619
  containerFormat,
1401
1620
  isLossless: pw.isLossless(),
1402
1621
  ...mpegVersion > 0 ? { mpegVersion, mpegLayer: pw.mpegLayer() } : {},
1403
1622
  ...containerFormat === "MP4" || containerFormat === "ASF" ? { isEncrypted: pw.isEncrypted() } : {},
1404
- ...formatVersion > 0 ? { formatVersion } : {}
1623
+ ...formatVersion > 0 ? { formatVersion } : {},
1624
+ ...isValidBitrateMode(bitrateMode) ? { bitrateMode } : {},
1625
+ ...codec === "Opus" ? { outputGainDb: pw.outputGainDb() } : {}
1405
1626
  };
1406
1627
  }
1407
1628
  };
@@ -1420,6 +1641,15 @@ var init_embind_adapter = __esm({
1420
1641
  });
1421
1642
 
1422
1643
  // src/taglib/audio-file-impl.ts
1644
+ function sortChapters(list) {
1645
+ return [...list].sort((a, b) => a.startTimeMs - b.startTimeMs);
1646
+ }
1647
+ function inferEndTimeMs(sorted, index, trackEndMs) {
1648
+ const own = sorted[index].endTimeMs;
1649
+ if (own !== void 0) return own;
1650
+ const next = sorted[index + 1];
1651
+ return next ? next.startTimeMs : trackEndMs;
1652
+ }
1423
1653
  function readFileSync(path) {
1424
1654
  if (typeof Deno !== "undefined") return Deno.readFileSync(path);
1425
1655
  if (_nodeFs === void 0) {
@@ -1437,6 +1667,7 @@ var init_audio_file_impl = __esm({
1437
1667
  "src/taglib/audio-file-impl.ts"() {
1438
1668
  "use strict";
1439
1669
  init_types2();
1670
+ init_audio_file_bwf();
1440
1671
  init_errors2();
1441
1672
  init_file();
1442
1673
  init_write();
@@ -1502,6 +1733,10 @@ var init_audio_file_impl = __esm({
1502
1733
  fullFileHandle.setTagData(this.handle.getTagData());
1503
1734
  fullFileHandle.setProperties(this.handle.getProperties());
1504
1735
  fullFileHandle.setPictures(this.handle.getPictures());
1736
+ const bextBytes = this.handle.getBextData();
1737
+ if (bextBytes !== void 0) fullFileHandle.setBextData(bextBytes);
1738
+ const ixmlStr = this.handle.getIxml();
1739
+ if (ixmlStr !== void 0) fullFileHandle.setIxml(ixmlStr);
1505
1740
  if (!fullFileHandle.save()) {
1506
1741
  throw new FileOperationError(
1507
1742
  "save",
@@ -1556,6 +1791,52 @@ var init_audio_file_impl = __esm({
1556
1791
  removePictures() {
1557
1792
  this.handle.removePictures();
1558
1793
  }
1794
+ getChapters() {
1795
+ const sorted = sortChapters(this.handle.getChapters());
1796
+ const trackEndMs = this.audioProperties()?.durationMs;
1797
+ return sorted.map((c, i) => ({
1798
+ startTimeMs: c.startTimeMs,
1799
+ endTimeMs: inferEndTimeMs(sorted, i, trackEndMs),
1800
+ title: c.title || void 0,
1801
+ id: c.id || void 0,
1802
+ source: c.source
1803
+ }));
1804
+ }
1805
+ setChapters(chapters, options) {
1806
+ const fmt = this.getFormat();
1807
+ if (fmt !== "MP3" && fmt !== "MP4") {
1808
+ throw new UnsupportedFormatError(fmt, ["MP3", "MP4"], {
1809
+ operation: "setChapters"
1810
+ });
1811
+ }
1812
+ const sorted = sortChapters(chapters);
1813
+ const trackEndMs = this.audioProperties()?.durationMs;
1814
+ const raw = sorted.map((c, i) => ({
1815
+ id: c.id,
1816
+ startTimeMs: c.startTimeMs,
1817
+ endTimeMs: inferEndTimeMs(sorted, i, trackEndMs) ?? c.startTimeMs,
1818
+ title: c.title
1819
+ }));
1820
+ this.handle.setChapters(raw, options?.mp4ChapterStyle ?? "quicktime");
1821
+ }
1822
+ getBext() {
1823
+ return getBext(this.handle);
1824
+ }
1825
+ setBext(bext) {
1826
+ setBext(this.handle, this.getFormat(), bext);
1827
+ }
1828
+ getBextData() {
1829
+ return getBextData(this.handle);
1830
+ }
1831
+ setBextData(data) {
1832
+ setBextData(this.handle, this.getFormat(), data);
1833
+ }
1834
+ getIxml() {
1835
+ return getIxml(this.handle);
1836
+ }
1837
+ setIxml(data) {
1838
+ setIxml(this.handle, this.getFormat(), data);
1839
+ }
1559
1840
  getRatings() {
1560
1841
  return this.handle.getRatings().map(
1561
1842
  (r) => ({
@@ -1579,6 +1860,15 @@ var init_audio_file_impl = __esm({
1579
1860
  setRating(rating, email) {
1580
1861
  this.setRatings([{ rating, email, counter: 0 }]);
1581
1862
  }
1863
+ hasId3Tags() {
1864
+ return this.handle.hasId3Tags();
1865
+ }
1866
+ stripId3Tags(opts) {
1867
+ this.handle.stripId3Tags({
1868
+ v1: opts?.v1 ?? true,
1869
+ v2: opts?.v2 ?? true
1870
+ });
1871
+ }
1582
1872
  };
1583
1873
  }
1584
1874
  });
@@ -1729,7 +2019,7 @@ var VERSION;
1729
2019
  var init_version = __esm({
1730
2020
  "src/version.ts"() {
1731
2021
  "use strict";
1732
- VERSION = "1.1.2";
2022
+ VERSION = "1.2.1";
1733
2023
  }
1734
2024
  });
1735
2025
 
package/dist/index.d.ts CHANGED
@@ -45,7 +45,7 @@ export type { PropertyMetadata } from "./src/constants/property-types.js";
45
45
  export { copyCoverArt, exportAllPictures, exportCoverArt, exportPictureByType, findCoverArtFiles, importCoverArt, importPictureWithType, loadPictureFromFile, savePictureToFile, } from "./src/file-utils/index.js";
46
46
  export { type AudioDynamics, type AudioFileMetadata, type DuplicateGroup, exportFolderMetadata, findDuplicates, type FolderScanItem, type FolderScanOptions, type FolderScanResult, type FolderUpdateItem, type FolderUpdateResult, scanFolder, updateFolderTags, } from "./src/folder-api/index.js";
47
47
  export { canvasToPicture, createPictureDownloadURL, createPictureGallery, dataURLToPicture, displayPicture, imageFileToPicture, pictureToDataURL, setCoverArtFromCanvas, } from "./src/web-utils/index.js";
48
- export type { AudioCodec, AudioFileInput, AudioProperties, BitrateControlMode, ContainerFormat, ExtendedTag, FieldMapping, FileType, NamedAudioInput, OpenOptions, Picture, PictureType, PropertyMap, Tag, TagInput, TagName, } from "./src/types.js";
48
+ export type { AudioCodec, AudioFileInput, AudioProperties, BitrateControlMode, BroadcastAudioExtension, Chapter, ContainerFormat, ExtendedTag, FieldMapping, FileType, NamedAudioInput, OpenOptions, Picture, PictureType, PropertyMap, SetChaptersOptions, Tag, TagInput, TagName, } from "./src/types.js";
49
49
  export { BITRATE_CONTROL_MODE_NAMES, BITRATE_CONTROL_MODE_VALUES, PICTURE_TYPE_NAMES, PICTURE_TYPE_VALUES, } from "./src/types.js";
50
50
  export type { PropertyKey, PropertyValue } from "./src/constants.js";
51
51
  export type { FormatPropertyKey, TagFormat, } from "./src/types/format-property-keys.js";
@@ -54,6 +54,7 @@ export { COMPLEX_PROPERTIES, COMPLEX_PROPERTY_KEY, } from "./src/constants/compl
54
54
  export type { ComplexPropertyKey, ComplexPropertyKeyMap, ComplexPropertyValueMap, Rating, UnsyncedLyrics, VariantMap, } from "./src/constants/complex-properties.js";
55
55
  export { RatingUtils } from "./src/utils/rating.js";
56
56
  export type { NormalizedRating, PopmRating } from "./src/utils/rating.js";
57
+ export * as bwf from "./src/bwf/bext.js";
57
58
  export type { TagLibModule, WasmModule } from "./src/wasm.js";
58
59
  export type { LoadTagLibOptions } from "./src/runtime/loader-types.js";
59
60
  export { loadTagLibModule } from "./src/runtime/module-loader.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,YAAY,EACV,SAAS,EACT,cAAc,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,aAAa,EACb,SAAS,EACT,KAAK,YAAY,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,EACV,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,oBAAoB,EACpB,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,UAAU,EACV,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,OAAO,EACP,eAAe,EACf,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,WAAW,EACX,OAAO,EACP,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,GAAG,EACH,QAAQ,EACR,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EACV,iBAAiB,EACjB,SAAS,GACV,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,MAAM,EACN,cAAc,EACd,UAAU,GACX,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG1E,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAGzC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -97,6 +97,7 @@ import {
97
97
  COMPLEX_PROPERTY_KEY
98
98
  } from "./src/constants/complex-properties.js";
99
99
  import { RatingUtils } from "./src/utils/rating.js";
100
+ import * as bwf from "./src/bwf/bext.js";
100
101
  import { loadTagLibModule } from "./src/runtime/module-loader.js";
101
102
  export {
102
103
  AudioFileImpl,
@@ -125,6 +126,7 @@ export {
125
126
  applyPictures,
126
127
  applyTags,
127
128
  applyTagsToFile,
129
+ bwf,
128
130
  canvasToPicture,
129
131
  clearPictures,
130
132
  clearTags,