taglib-wasm 1.3.0 → 1.4.0
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/dist/index.browser.js +84 -18
- package/dist/simple.browser.js +84 -18
- package/dist/src/runtime/wasi-adapter/file-handle.d.ts.map +1 -1
- package/dist/src/runtime/wasi-adapter/file-handle.js +20 -10
- package/dist/src/simple/batch-operations.js +4 -4
- package/dist/src/simple/tag-operations.d.ts.map +1 -1
- package/dist/src/simple/tag-operations.js +10 -9
- package/dist/src/taglib/audio-file-base.d.ts +10 -0
- package/dist/src/taglib/audio-file-base.d.ts.map +1 -1
- package/dist/src/taglib/audio-file-base.js +29 -1
- package/dist/src/taglib/audio-file-impl.d.ts +3 -1
- package/dist/src/taglib/audio-file-impl.d.ts.map +1 -1
- package/dist/src/taglib/audio-file-impl.js +17 -1
- package/dist/src/taglib/audio-file-interface.d.ts +8 -1
- package/dist/src/taglib/audio-file-interface.d.ts.map +1 -1
- package/dist/src/taglib/save-reconstruct.d.ts +1 -1
- package/dist/src/taglib/save-reconstruct.d.ts.map +1 -1
- package/dist/src/taglib/save-reconstruct.js +6 -6
- package/dist/src/types/tags.d.ts +4 -12
- package/dist/src/types/tags.d.ts.map +1 -1
- package/dist/src/utils/tag-mapping.d.ts +9 -0
- package/dist/src/utils/tag-mapping.d.ts.map +1 -1
- package/dist/src/utils/tag-mapping.js +20 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/taglib-web.wasm +0 -0
- package/dist/taglib-wrapper.js +2 -2
- package/package.json +1 -1
package/dist/index.browser.js
CHANGED
|
@@ -1333,12 +1333,15 @@ var init_properties = __esm({
|
|
|
1333
1333
|
});
|
|
1334
1334
|
|
|
1335
1335
|
// src/taglib/audio-file-base.ts
|
|
1336
|
-
var BaseAudioFileImpl;
|
|
1336
|
+
var LYRICS_PROPERTY_KEY, LYRICS_WIRE_KEY, EMPTY_KEY_SET, BaseAudioFileImpl;
|
|
1337
1337
|
var init_audio_file_base = __esm({
|
|
1338
1338
|
"src/taglib/audio-file-base.ts"() {
|
|
1339
1339
|
"use strict";
|
|
1340
1340
|
init_properties();
|
|
1341
1341
|
init_errors2();
|
|
1342
|
+
LYRICS_PROPERTY_KEY = "lyrics";
|
|
1343
|
+
LYRICS_WIRE_KEY = toTagLibKey(LYRICS_PROPERTY_KEY);
|
|
1344
|
+
EMPTY_KEY_SET = /* @__PURE__ */ new Set();
|
|
1342
1345
|
BaseAudioFileImpl = class {
|
|
1343
1346
|
constructor(module, fileHandle, sourcePath, originalSource, isPartiallyLoaded = false, partialLoadOptions) {
|
|
1344
1347
|
__publicField(this, "module", module);
|
|
@@ -1348,11 +1351,30 @@ var init_audio_file_base = __esm({
|
|
|
1348
1351
|
__publicField(this, "originalSource");
|
|
1349
1352
|
__publicField(this, "isPartiallyLoaded", false);
|
|
1350
1353
|
__publicField(this, "partialLoadOptions");
|
|
1354
|
+
/** Text-property wire keys in the partial header at load; undefined if full. */
|
|
1355
|
+
__publicField(this, "partialKeysAtLoad");
|
|
1351
1356
|
this.fileHandle = fileHandle;
|
|
1352
1357
|
this.sourcePath = sourcePath;
|
|
1353
1358
|
this.originalSource = originalSource;
|
|
1354
1359
|
this.isPartiallyLoaded = isPartiallyLoaded;
|
|
1355
1360
|
this.partialLoadOptions = partialLoadOptions;
|
|
1361
|
+
this.partialKeysAtLoad = isPartiallyLoaded ? new Set(Object.keys(fileHandle.getProperties())) : void 0;
|
|
1362
|
+
}
|
|
1363
|
+
/**
|
|
1364
|
+
* Wire-key text properties present in the partial header at load but now
|
|
1365
|
+
* absent — the user deleted them. The partial-load reconstruct subtracts these
|
|
1366
|
+
* from its preserve-the-original merge so a deletion persists without wiping
|
|
1367
|
+
* frames beyond the loaded header (taglib-d14). Lyrics are excluded (they ride
|
|
1368
|
+
* their own reconstruct path); empty for a full load.
|
|
1369
|
+
*/
|
|
1370
|
+
partialDeletedPropertyKeys() {
|
|
1371
|
+
if (!this.partialKeysAtLoad) return EMPTY_KEY_SET;
|
|
1372
|
+
const current = new Set(Object.keys(this.handle.getProperties()));
|
|
1373
|
+
const deleted = /* @__PURE__ */ new Set();
|
|
1374
|
+
for (const key of this.partialKeysAtLoad) {
|
|
1375
|
+
if (key !== LYRICS_WIRE_KEY && !current.has(key)) deleted.add(key);
|
|
1376
|
+
}
|
|
1377
|
+
return deleted;
|
|
1356
1378
|
}
|
|
1357
1379
|
get handle() {
|
|
1358
1380
|
if (!this.fileHandle) {
|
|
@@ -1448,13 +1470,19 @@ var init_audio_file_base = __esm({
|
|
|
1448
1470
|
return this.cachedAudioProperties ?? void 0;
|
|
1449
1471
|
}
|
|
1450
1472
|
properties() {
|
|
1451
|
-
|
|
1473
|
+
const remapped = remapKeysFromTagLib(this.handle.getProperties());
|
|
1474
|
+
delete remapped[LYRICS_PROPERTY_KEY];
|
|
1475
|
+
return remapped;
|
|
1452
1476
|
}
|
|
1453
1477
|
setProperties(properties) {
|
|
1454
1478
|
const translated = {};
|
|
1455
1479
|
for (const [key, values] of Object.entries(properties)) {
|
|
1456
1480
|
if (values !== void 0) translated[toTagLibKey(key)] = values;
|
|
1457
1481
|
}
|
|
1482
|
+
if (!(LYRICS_WIRE_KEY in translated)) {
|
|
1483
|
+
const existing = this.handle.getProperties()[LYRICS_WIRE_KEY];
|
|
1484
|
+
if (existing !== void 0) translated[LYRICS_WIRE_KEY] = existing;
|
|
1485
|
+
}
|
|
1458
1486
|
this.handle.setProperties(translated);
|
|
1459
1487
|
}
|
|
1460
1488
|
getProperty(key) {
|
|
@@ -1734,14 +1762,14 @@ var init_extra_state_registry = __esm({
|
|
|
1734
1762
|
});
|
|
1735
1763
|
|
|
1736
1764
|
// src/taglib/save-reconstruct.ts
|
|
1737
|
-
function copyEditedState(target, source, sourceComplete) {
|
|
1765
|
+
function copyEditedState(target, source, sourceComplete, deletedKeys) {
|
|
1738
1766
|
target.setTagData(source.getTagData());
|
|
1739
|
-
target.
|
|
1740
|
-
|
|
1741
|
-
);
|
|
1767
|
+
const merged = sourceComplete ? source.getProperties() : { ...target.getProperties(), ...source.getProperties() };
|
|
1768
|
+
for (const key of deletedKeys) delete merged[key];
|
|
1769
|
+
target.setProperties(merged);
|
|
1742
1770
|
copyExtraState(target, source, sourceComplete);
|
|
1743
1771
|
}
|
|
1744
|
-
async function saveViaFreshHandle(module, editing, source, targetPath, sourceComplete) {
|
|
1772
|
+
async function saveViaFreshHandle(module, editing, source, targetPath, sourceComplete, deletedKeys = /* @__PURE__ */ new Set()) {
|
|
1745
1773
|
const rawFullHandle = module.createFileHandle();
|
|
1746
1774
|
const fullFileHandle = module.isWasi ? rawFullHandle : wrapEmbindHandle(rawFullHandle);
|
|
1747
1775
|
try {
|
|
@@ -1753,7 +1781,7 @@ async function saveViaFreshHandle(module, editing, source, targetPath, sourceCom
|
|
|
1753
1781
|
);
|
|
1754
1782
|
}
|
|
1755
1783
|
}
|
|
1756
|
-
copyEditedState(fullFileHandle, editing, sourceComplete);
|
|
1784
|
+
copyEditedState(fullFileHandle, editing, sourceComplete, deletedKeys);
|
|
1757
1785
|
if (!fullFileHandle.save()) {
|
|
1758
1786
|
throw new FileOperationError(
|
|
1759
1787
|
"save",
|
|
@@ -1858,7 +1886,8 @@ var init_audio_file_impl = __esm({
|
|
|
1858
1886
|
this.handle,
|
|
1859
1887
|
this.originalSource,
|
|
1860
1888
|
targetPath,
|
|
1861
|
-
false
|
|
1889
|
+
false,
|
|
1890
|
+
this.partialDeletedPropertyKeys()
|
|
1862
1891
|
);
|
|
1863
1892
|
this.isPartiallyLoaded = false;
|
|
1864
1893
|
this.originalSource = void 0;
|
|
@@ -1976,6 +2005,21 @@ var init_audio_file_impl = __esm({
|
|
|
1976
2005
|
counter: r.counter ?? 0
|
|
1977
2006
|
})));
|
|
1978
2007
|
}
|
|
2008
|
+
getLyrics() {
|
|
2009
|
+
return this.handle.getLyrics().map((l) => {
|
|
2010
|
+
const out = { text: l.text };
|
|
2011
|
+
if (l.description) out.description = l.description;
|
|
2012
|
+
if (l.language) out.language = l.language;
|
|
2013
|
+
return out;
|
|
2014
|
+
});
|
|
2015
|
+
}
|
|
2016
|
+
setLyrics(lyrics) {
|
|
2017
|
+
this.handle.setLyrics(lyrics.map((l) => ({
|
|
2018
|
+
text: l.text,
|
|
2019
|
+
description: l.description ?? "",
|
|
2020
|
+
language: l.language ?? ""
|
|
2021
|
+
})));
|
|
2022
|
+
}
|
|
1979
2023
|
getRating() {
|
|
1980
2024
|
const ratings = this.getRatings();
|
|
1981
2025
|
return ratings.length > 0 ? ratings[0].rating : void 0;
|
|
@@ -2038,6 +2082,24 @@ function parseNumeric(value) {
|
|
|
2038
2082
|
const parsed = Number.parseInt(value, 10);
|
|
2039
2083
|
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
2040
2084
|
}
|
|
2085
|
+
function readExtendedTag(audioFile) {
|
|
2086
|
+
const tag = mapPropertiesToExtendedTag(audioFile.properties());
|
|
2087
|
+
const pictures = audioFile.getPictures();
|
|
2088
|
+
if (pictures.length > 0) tag.pictures = pictures;
|
|
2089
|
+
const ratings = audioFile.getRatings();
|
|
2090
|
+
if (ratings.length > 0) tag.ratings = ratings;
|
|
2091
|
+
const lyrics = audioFile.getLyrics();
|
|
2092
|
+
if (lyrics.length > 0) tag.lyrics = lyrics;
|
|
2093
|
+
const chapters = audioFile.getChapters();
|
|
2094
|
+
if (chapters.length > 0) tag.chapters = chapters;
|
|
2095
|
+
const bext = audioFile.getBext();
|
|
2096
|
+
if (bext !== void 0) tag.bext = bext;
|
|
2097
|
+
const bextData = audioFile.getBextData();
|
|
2098
|
+
if (bextData !== void 0) tag.bextData = bextData;
|
|
2099
|
+
const ixml = audioFile.getIxml();
|
|
2100
|
+
if (ixml !== void 0) tag.ixml = ixml;
|
|
2101
|
+
return tag;
|
|
2102
|
+
}
|
|
2041
2103
|
function mapPropertiesToExtendedTag(props) {
|
|
2042
2104
|
const tag = {};
|
|
2043
2105
|
for (const [propKey, tagField] of Object.entries(BASIC_PROPERTY_KEYS)) {
|
|
@@ -2149,7 +2211,7 @@ var VERSION;
|
|
|
2149
2211
|
var init_version = __esm({
|
|
2150
2212
|
"src/version.ts"() {
|
|
2151
2213
|
"use strict";
|
|
2152
|
-
VERSION = "1.
|
|
2214
|
+
VERSION = "1.4.0";
|
|
2153
2215
|
}
|
|
2154
2216
|
});
|
|
2155
2217
|
|
|
@@ -2504,10 +2566,7 @@ async function withAudioFileSaveToFile(file, fn) {
|
|
|
2504
2566
|
|
|
2505
2567
|
// src/simple/tag-operations.ts
|
|
2506
2568
|
async function readTags(file) {
|
|
2507
|
-
return withAudioFile(
|
|
2508
|
-
file,
|
|
2509
|
-
(audioFile) => mapPropertiesToExtendedTag(audioFile.properties())
|
|
2510
|
-
);
|
|
2569
|
+
return withAudioFile(file, (audioFile) => readExtendedTag(audioFile));
|
|
2511
2570
|
}
|
|
2512
2571
|
async function applyTags(file, tags) {
|
|
2513
2572
|
return withAudioFileSave(file, (audioFile) => {
|
|
@@ -2565,8 +2624,15 @@ async function readFormat(file) {
|
|
|
2565
2624
|
}
|
|
2566
2625
|
async function clearTags(file) {
|
|
2567
2626
|
return withAudioFileSave(file, (audioFile) => {
|
|
2568
|
-
|
|
2627
|
+
const cleared = {};
|
|
2628
|
+
for (const key of Object.keys(audioFile.properties())) cleared[key] = [];
|
|
2629
|
+
audioFile.setProperties(cleared);
|
|
2569
2630
|
audioFile.removePictures();
|
|
2631
|
+
audioFile.setLyrics([]);
|
|
2632
|
+
audioFile.setRatings([]);
|
|
2633
|
+
if (audioFile.getChapters().length > 0) audioFile.setChapters([]);
|
|
2634
|
+
if (audioFile.getBextData() !== void 0) audioFile.setBextData(null);
|
|
2635
|
+
if (audioFile.getIxml() !== void 0) audioFile.setIxml(null);
|
|
2570
2636
|
});
|
|
2571
2637
|
}
|
|
2572
2638
|
|
|
@@ -2678,7 +2744,7 @@ async function readTagsBatch(files, options = {}) {
|
|
|
2678
2744
|
return executeBatch(
|
|
2679
2745
|
files,
|
|
2680
2746
|
options,
|
|
2681
|
-
(audioFile) =>
|
|
2747
|
+
(audioFile) => readExtendedTag(audioFile)
|
|
2682
2748
|
);
|
|
2683
2749
|
}
|
|
2684
2750
|
async function readPropertiesBatch(files, options = {}) {
|
|
@@ -2727,7 +2793,7 @@ async function readMetadata(file) {
|
|
|
2727
2793
|
);
|
|
2728
2794
|
}
|
|
2729
2795
|
return {
|
|
2730
|
-
tags:
|
|
2796
|
+
tags: readExtendedTag(audioFile),
|
|
2731
2797
|
properties: audioFile.audioProperties(),
|
|
2732
2798
|
hasCoverArt: audioFile.getPictures().length > 0,
|
|
2733
2799
|
dynamics: extractDynamics(audioFile)
|
|
@@ -2738,7 +2804,7 @@ async function readMetadata(file) {
|
|
|
2738
2804
|
}
|
|
2739
2805
|
async function readMetadataBatch(files, options = {}) {
|
|
2740
2806
|
return executeBatch(files, options, (audioFile) => ({
|
|
2741
|
-
tags:
|
|
2807
|
+
tags: readExtendedTag(audioFile),
|
|
2742
2808
|
properties: audioFile.audioProperties(),
|
|
2743
2809
|
hasCoverArt: audioFile.getPictures().length > 0,
|
|
2744
2810
|
dynamics: extractDynamics(audioFile)
|
package/dist/simple.browser.js
CHANGED
|
@@ -1321,12 +1321,15 @@ var init_properties = __esm({
|
|
|
1321
1321
|
});
|
|
1322
1322
|
|
|
1323
1323
|
// src/taglib/audio-file-base.ts
|
|
1324
|
-
var BaseAudioFileImpl;
|
|
1324
|
+
var LYRICS_PROPERTY_KEY, LYRICS_WIRE_KEY, EMPTY_KEY_SET, BaseAudioFileImpl;
|
|
1325
1325
|
var init_audio_file_base = __esm({
|
|
1326
1326
|
"src/taglib/audio-file-base.ts"() {
|
|
1327
1327
|
"use strict";
|
|
1328
1328
|
init_properties();
|
|
1329
1329
|
init_errors2();
|
|
1330
|
+
LYRICS_PROPERTY_KEY = "lyrics";
|
|
1331
|
+
LYRICS_WIRE_KEY = toTagLibKey(LYRICS_PROPERTY_KEY);
|
|
1332
|
+
EMPTY_KEY_SET = /* @__PURE__ */ new Set();
|
|
1330
1333
|
BaseAudioFileImpl = class {
|
|
1331
1334
|
constructor(module, fileHandle, sourcePath, originalSource, isPartiallyLoaded = false, partialLoadOptions) {
|
|
1332
1335
|
__publicField(this, "module", module);
|
|
@@ -1336,11 +1339,30 @@ var init_audio_file_base = __esm({
|
|
|
1336
1339
|
__publicField(this, "originalSource");
|
|
1337
1340
|
__publicField(this, "isPartiallyLoaded", false);
|
|
1338
1341
|
__publicField(this, "partialLoadOptions");
|
|
1342
|
+
/** Text-property wire keys in the partial header at load; undefined if full. */
|
|
1343
|
+
__publicField(this, "partialKeysAtLoad");
|
|
1339
1344
|
this.fileHandle = fileHandle;
|
|
1340
1345
|
this.sourcePath = sourcePath;
|
|
1341
1346
|
this.originalSource = originalSource;
|
|
1342
1347
|
this.isPartiallyLoaded = isPartiallyLoaded;
|
|
1343
1348
|
this.partialLoadOptions = partialLoadOptions;
|
|
1349
|
+
this.partialKeysAtLoad = isPartiallyLoaded ? new Set(Object.keys(fileHandle.getProperties())) : void 0;
|
|
1350
|
+
}
|
|
1351
|
+
/**
|
|
1352
|
+
* Wire-key text properties present in the partial header at load but now
|
|
1353
|
+
* absent — the user deleted them. The partial-load reconstruct subtracts these
|
|
1354
|
+
* from its preserve-the-original merge so a deletion persists without wiping
|
|
1355
|
+
* frames beyond the loaded header (taglib-d14). Lyrics are excluded (they ride
|
|
1356
|
+
* their own reconstruct path); empty for a full load.
|
|
1357
|
+
*/
|
|
1358
|
+
partialDeletedPropertyKeys() {
|
|
1359
|
+
if (!this.partialKeysAtLoad) return EMPTY_KEY_SET;
|
|
1360
|
+
const current = new Set(Object.keys(this.handle.getProperties()));
|
|
1361
|
+
const deleted = /* @__PURE__ */ new Set();
|
|
1362
|
+
for (const key of this.partialKeysAtLoad) {
|
|
1363
|
+
if (key !== LYRICS_WIRE_KEY && !current.has(key)) deleted.add(key);
|
|
1364
|
+
}
|
|
1365
|
+
return deleted;
|
|
1344
1366
|
}
|
|
1345
1367
|
get handle() {
|
|
1346
1368
|
if (!this.fileHandle) {
|
|
@@ -1436,13 +1458,19 @@ var init_audio_file_base = __esm({
|
|
|
1436
1458
|
return this.cachedAudioProperties ?? void 0;
|
|
1437
1459
|
}
|
|
1438
1460
|
properties() {
|
|
1439
|
-
|
|
1461
|
+
const remapped = remapKeysFromTagLib(this.handle.getProperties());
|
|
1462
|
+
delete remapped[LYRICS_PROPERTY_KEY];
|
|
1463
|
+
return remapped;
|
|
1440
1464
|
}
|
|
1441
1465
|
setProperties(properties) {
|
|
1442
1466
|
const translated = {};
|
|
1443
1467
|
for (const [key, values] of Object.entries(properties)) {
|
|
1444
1468
|
if (values !== void 0) translated[toTagLibKey(key)] = values;
|
|
1445
1469
|
}
|
|
1470
|
+
if (!(LYRICS_WIRE_KEY in translated)) {
|
|
1471
|
+
const existing = this.handle.getProperties()[LYRICS_WIRE_KEY];
|
|
1472
|
+
if (existing !== void 0) translated[LYRICS_WIRE_KEY] = existing;
|
|
1473
|
+
}
|
|
1446
1474
|
this.handle.setProperties(translated);
|
|
1447
1475
|
}
|
|
1448
1476
|
getProperty(key) {
|
|
@@ -1722,14 +1750,14 @@ var init_extra_state_registry = __esm({
|
|
|
1722
1750
|
});
|
|
1723
1751
|
|
|
1724
1752
|
// src/taglib/save-reconstruct.ts
|
|
1725
|
-
function copyEditedState(target, source, sourceComplete) {
|
|
1753
|
+
function copyEditedState(target, source, sourceComplete, deletedKeys) {
|
|
1726
1754
|
target.setTagData(source.getTagData());
|
|
1727
|
-
target.
|
|
1728
|
-
|
|
1729
|
-
);
|
|
1755
|
+
const merged = sourceComplete ? source.getProperties() : { ...target.getProperties(), ...source.getProperties() };
|
|
1756
|
+
for (const key of deletedKeys) delete merged[key];
|
|
1757
|
+
target.setProperties(merged);
|
|
1730
1758
|
copyExtraState(target, source, sourceComplete);
|
|
1731
1759
|
}
|
|
1732
|
-
async function saveViaFreshHandle(module, editing, source, targetPath, sourceComplete) {
|
|
1760
|
+
async function saveViaFreshHandle(module, editing, source, targetPath, sourceComplete, deletedKeys = /* @__PURE__ */ new Set()) {
|
|
1733
1761
|
const rawFullHandle = module.createFileHandle();
|
|
1734
1762
|
const fullFileHandle = module.isWasi ? rawFullHandle : wrapEmbindHandle(rawFullHandle);
|
|
1735
1763
|
try {
|
|
@@ -1741,7 +1769,7 @@ async function saveViaFreshHandle(module, editing, source, targetPath, sourceCom
|
|
|
1741
1769
|
);
|
|
1742
1770
|
}
|
|
1743
1771
|
}
|
|
1744
|
-
copyEditedState(fullFileHandle, editing, sourceComplete);
|
|
1772
|
+
copyEditedState(fullFileHandle, editing, sourceComplete, deletedKeys);
|
|
1745
1773
|
if (!fullFileHandle.save()) {
|
|
1746
1774
|
throw new FileOperationError(
|
|
1747
1775
|
"save",
|
|
@@ -1846,7 +1874,8 @@ var init_audio_file_impl = __esm({
|
|
|
1846
1874
|
this.handle,
|
|
1847
1875
|
this.originalSource,
|
|
1848
1876
|
targetPath,
|
|
1849
|
-
false
|
|
1877
|
+
false,
|
|
1878
|
+
this.partialDeletedPropertyKeys()
|
|
1850
1879
|
);
|
|
1851
1880
|
this.isPartiallyLoaded = false;
|
|
1852
1881
|
this.originalSource = void 0;
|
|
@@ -1964,6 +1993,21 @@ var init_audio_file_impl = __esm({
|
|
|
1964
1993
|
counter: r.counter ?? 0
|
|
1965
1994
|
})));
|
|
1966
1995
|
}
|
|
1996
|
+
getLyrics() {
|
|
1997
|
+
return this.handle.getLyrics().map((l) => {
|
|
1998
|
+
const out = { text: l.text };
|
|
1999
|
+
if (l.description) out.description = l.description;
|
|
2000
|
+
if (l.language) out.language = l.language;
|
|
2001
|
+
return out;
|
|
2002
|
+
});
|
|
2003
|
+
}
|
|
2004
|
+
setLyrics(lyrics) {
|
|
2005
|
+
this.handle.setLyrics(lyrics.map((l) => ({
|
|
2006
|
+
text: l.text,
|
|
2007
|
+
description: l.description ?? "",
|
|
2008
|
+
language: l.language ?? ""
|
|
2009
|
+
})));
|
|
2010
|
+
}
|
|
1967
2011
|
getRating() {
|
|
1968
2012
|
const ratings = this.getRatings();
|
|
1969
2013
|
return ratings.length > 0 ? ratings[0].rating : void 0;
|
|
@@ -2026,6 +2070,24 @@ function parseNumeric(value) {
|
|
|
2026
2070
|
const parsed = Number.parseInt(value, 10);
|
|
2027
2071
|
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
2028
2072
|
}
|
|
2073
|
+
function readExtendedTag(audioFile) {
|
|
2074
|
+
const tag = mapPropertiesToExtendedTag(audioFile.properties());
|
|
2075
|
+
const pictures = audioFile.getPictures();
|
|
2076
|
+
if (pictures.length > 0) tag.pictures = pictures;
|
|
2077
|
+
const ratings = audioFile.getRatings();
|
|
2078
|
+
if (ratings.length > 0) tag.ratings = ratings;
|
|
2079
|
+
const lyrics = audioFile.getLyrics();
|
|
2080
|
+
if (lyrics.length > 0) tag.lyrics = lyrics;
|
|
2081
|
+
const chapters = audioFile.getChapters();
|
|
2082
|
+
if (chapters.length > 0) tag.chapters = chapters;
|
|
2083
|
+
const bext = audioFile.getBext();
|
|
2084
|
+
if (bext !== void 0) tag.bext = bext;
|
|
2085
|
+
const bextData = audioFile.getBextData();
|
|
2086
|
+
if (bextData !== void 0) tag.bextData = bextData;
|
|
2087
|
+
const ixml = audioFile.getIxml();
|
|
2088
|
+
if (ixml !== void 0) tag.ixml = ixml;
|
|
2089
|
+
return tag;
|
|
2090
|
+
}
|
|
2029
2091
|
function mapPropertiesToExtendedTag(props) {
|
|
2030
2092
|
const tag = {};
|
|
2031
2093
|
for (const [propKey, tagField] of Object.entries(BASIC_PROPERTY_KEYS)) {
|
|
@@ -2137,7 +2199,7 @@ var VERSION;
|
|
|
2137
2199
|
var init_version = __esm({
|
|
2138
2200
|
"src/version.ts"() {
|
|
2139
2201
|
"use strict";
|
|
2140
|
-
VERSION = "1.
|
|
2202
|
+
VERSION = "1.4.0";
|
|
2141
2203
|
}
|
|
2142
2204
|
});
|
|
2143
2205
|
|
|
@@ -2486,10 +2548,7 @@ async function withAudioFileSaveToFile(file, fn) {
|
|
|
2486
2548
|
|
|
2487
2549
|
// src/simple/tag-operations.ts
|
|
2488
2550
|
async function readTags(file) {
|
|
2489
|
-
return withAudioFile(
|
|
2490
|
-
file,
|
|
2491
|
-
(audioFile) => mapPropertiesToExtendedTag(audioFile.properties())
|
|
2492
|
-
);
|
|
2551
|
+
return withAudioFile(file, (audioFile) => readExtendedTag(audioFile));
|
|
2493
2552
|
}
|
|
2494
2553
|
async function applyTags(file, tags) {
|
|
2495
2554
|
return withAudioFileSave(file, (audioFile) => {
|
|
@@ -2547,8 +2606,15 @@ async function readFormat(file) {
|
|
|
2547
2606
|
}
|
|
2548
2607
|
async function clearTags(file) {
|
|
2549
2608
|
return withAudioFileSave(file, (audioFile) => {
|
|
2550
|
-
|
|
2609
|
+
const cleared = {};
|
|
2610
|
+
for (const key of Object.keys(audioFile.properties())) cleared[key] = [];
|
|
2611
|
+
audioFile.setProperties(cleared);
|
|
2551
2612
|
audioFile.removePictures();
|
|
2613
|
+
audioFile.setLyrics([]);
|
|
2614
|
+
audioFile.setRatings([]);
|
|
2615
|
+
if (audioFile.getChapters().length > 0) audioFile.setChapters([]);
|
|
2616
|
+
if (audioFile.getBextData() !== void 0) audioFile.setBextData(null);
|
|
2617
|
+
if (audioFile.getIxml() !== void 0) audioFile.setIxml(null);
|
|
2552
2618
|
});
|
|
2553
2619
|
}
|
|
2554
2620
|
|
|
@@ -2660,7 +2726,7 @@ async function readTagsBatch(files, options = {}) {
|
|
|
2660
2726
|
return executeBatch(
|
|
2661
2727
|
files,
|
|
2662
2728
|
options,
|
|
2663
|
-
(audioFile) =>
|
|
2729
|
+
(audioFile) => readExtendedTag(audioFile)
|
|
2664
2730
|
);
|
|
2665
2731
|
}
|
|
2666
2732
|
async function readPropertiesBatch(files, options = {}) {
|
|
@@ -2709,7 +2775,7 @@ async function readMetadata(file) {
|
|
|
2709
2775
|
);
|
|
2710
2776
|
}
|
|
2711
2777
|
return {
|
|
2712
|
-
tags:
|
|
2778
|
+
tags: readExtendedTag(audioFile),
|
|
2713
2779
|
properties: audioFile.audioProperties(),
|
|
2714
2780
|
hasCoverArt: audioFile.getPictures().length > 0,
|
|
2715
2781
|
dynamics: extractDynamics(audioFile)
|
|
@@ -2720,7 +2786,7 @@ async function readMetadata(file) {
|
|
|
2720
2786
|
}
|
|
2721
2787
|
async function readMetadataBatch(files, options = {}) {
|
|
2722
2788
|
return executeBatch(files, options, (audioFile) => ({
|
|
2723
|
-
tags:
|
|
2789
|
+
tags: readExtendedTag(audioFile),
|
|
2724
2790
|
properties: audioFile.audioProperties(),
|
|
2725
2791
|
hasCoverArt: audioFile.getPictures().length > 0,
|
|
2726
2792
|
dynamics: extractDynamics(audioFile)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-handle.d.ts","sourceRoot":"","sources":["../../../../src/runtime/wasi-adapter/file-handle.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"file-handle.d.ts","sourceRoot":"","sources":["../../../../src/runtime/wasi-adapter/file-handle.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
} from "./wasm-io.js";
|
|
13
13
|
const AUDIO_KEYS = /* @__PURE__ */ new Set([
|
|
14
14
|
"bitrate",
|
|
15
|
+
"bitrateMode",
|
|
15
16
|
"bitsPerSample",
|
|
16
17
|
"channels",
|
|
17
18
|
"codec",
|
|
@@ -59,6 +60,12 @@ function firstString(v) {
|
|
|
59
60
|
if (Array.isArray(v)) return v[0] ?? "";
|
|
60
61
|
return v || "";
|
|
61
62
|
}
|
|
63
|
+
function mp4ItemPropertyKey(key) {
|
|
64
|
+
if (key.startsWith("----:")) {
|
|
65
|
+
return key.slice(key.lastIndexOf(":") + 1).toUpperCase();
|
|
66
|
+
}
|
|
67
|
+
return key;
|
|
68
|
+
}
|
|
62
69
|
class WasiFileHandle {
|
|
63
70
|
constructor(wasiModule) {
|
|
64
71
|
__publicField(this, "wasi");
|
|
@@ -219,22 +226,25 @@ class WasiFileHandle {
|
|
|
219
226
|
}
|
|
220
227
|
setProperties(props) {
|
|
221
228
|
this.checkNotDestroyed();
|
|
222
|
-
const
|
|
229
|
+
const next = { ...this.tagData };
|
|
223
230
|
for (const [key, values] of Object.entries(props)) {
|
|
224
231
|
const camelKey = fromTagLibKey(key);
|
|
225
232
|
const storeKey = NUMERIC_FIELD_ALIASES[camelKey] ?? camelKey;
|
|
226
|
-
if (
|
|
233
|
+
if (values.length === 0) {
|
|
234
|
+
delete next[storeKey];
|
|
235
|
+
if (camelKey === "date") delete next.year;
|
|
236
|
+
} else if (storeKey === "track") {
|
|
227
237
|
const parsed = Number.parseInt(values[0] ?? "", 10);
|
|
228
|
-
if (!Number.isNaN(parsed))
|
|
238
|
+
if (!Number.isNaN(parsed)) next[storeKey] = parsed;
|
|
229
239
|
} else if (camelKey === "date") {
|
|
230
|
-
|
|
240
|
+
next.date = values;
|
|
231
241
|
const year = Number.parseInt(values[0] ?? "", 10);
|
|
232
|
-
if (!Number.isNaN(year))
|
|
242
|
+
if (!Number.isNaN(year)) next.year = year;
|
|
233
243
|
} else {
|
|
234
|
-
|
|
244
|
+
next[camelKey] = values;
|
|
235
245
|
}
|
|
236
246
|
}
|
|
237
|
-
this.tagData =
|
|
247
|
+
this.tagData = next;
|
|
238
248
|
}
|
|
239
249
|
getProperty(key) {
|
|
240
250
|
this.checkNotDestroyed();
|
|
@@ -273,16 +283,16 @@ class WasiFileHandle {
|
|
|
273
283
|
}
|
|
274
284
|
getMP4Item(key) {
|
|
275
285
|
this.checkNotDestroyed();
|
|
276
|
-
return this.getProperty(key);
|
|
286
|
+
return this.getProperty(mp4ItemPropertyKey(key));
|
|
277
287
|
}
|
|
278
288
|
setMP4Item(key, value) {
|
|
279
289
|
this.checkNotDestroyed();
|
|
280
|
-
this.setProperty(key, value);
|
|
290
|
+
this.setProperty(mp4ItemPropertyKey(key), value);
|
|
281
291
|
}
|
|
282
292
|
removeMP4Item(key) {
|
|
283
293
|
this.checkNotDestroyed();
|
|
284
294
|
if (this.tagData) {
|
|
285
|
-
const mappedKey = fromTagLibKey(key);
|
|
295
|
+
const mappedKey = fromTagLibKey(mp4ItemPropertyKey(key));
|
|
286
296
|
const storeKey = NUMERIC_FIELD_ALIASES[mappedKey] ?? mappedKey;
|
|
287
297
|
delete this.tagData[storeKey];
|
|
288
298
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isNamedAudioInput } from "../types/audio-formats.js";
|
|
2
2
|
import { InvalidFormatError } from "../errors.js";
|
|
3
|
-
import {
|
|
3
|
+
import { readExtendedTag } from "../utils/tag-mapping.js";
|
|
4
4
|
import { getTagLib } from "./config.js";
|
|
5
5
|
async function executeBatch(files, options, processor) {
|
|
6
6
|
if (files.length === 0) return { items: [], duration: 0 };
|
|
@@ -48,7 +48,7 @@ async function readTagsBatch(files, options = {}) {
|
|
|
48
48
|
return executeBatch(
|
|
49
49
|
files,
|
|
50
50
|
options,
|
|
51
|
-
(audioFile) =>
|
|
51
|
+
(audioFile) => readExtendedTag(audioFile)
|
|
52
52
|
);
|
|
53
53
|
}
|
|
54
54
|
async function readPropertiesBatch(files, options = {}) {
|
|
@@ -97,7 +97,7 @@ async function readMetadata(file) {
|
|
|
97
97
|
);
|
|
98
98
|
}
|
|
99
99
|
return {
|
|
100
|
-
tags:
|
|
100
|
+
tags: readExtendedTag(audioFile),
|
|
101
101
|
properties: audioFile.audioProperties(),
|
|
102
102
|
hasCoverArt: audioFile.getPictures().length > 0,
|
|
103
103
|
dynamics: extractDynamics(audioFile)
|
|
@@ -108,7 +108,7 @@ async function readMetadata(file) {
|
|
|
108
108
|
}
|
|
109
109
|
async function readMetadataBatch(files, options = {}) {
|
|
110
110
|
return executeBatch(files, options, (audioFile) => ({
|
|
111
|
-
tags:
|
|
111
|
+
tags: readExtendedTag(audioFile),
|
|
112
112
|
properties: audioFile.audioProperties(),
|
|
113
113
|
hasCoverArt: audioFile.getPictures().length > 0,
|
|
114
114
|
dynamics: extractDynamics(audioFile)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag-operations.d.ts","sourceRoot":"","sources":["../../../src/simple/tag-operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,QAAQ,
|
|
1
|
+
{"version":3,"file":"tag-operations.d.ts","sourceRoot":"","sources":["../../../src/simple/tag-operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,QAAQ,EAER,QAAQ,EACT,MAAM,aAAa,CAAC;AAWrB;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,WAAW,CAAC,CAEtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GACtB,OAAO,CAAC,UAAU,CAAC,CAIrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GACtB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC,CAY1B;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAW/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { FileOperationError, MetadataError } from "../errors.js";
|
|
2
|
-
import {
|
|
3
|
-
mapPropertiesToExtendedTag,
|
|
4
|
-
mergeTagUpdates
|
|
5
|
-
} from "../utils/tag-mapping.js";
|
|
2
|
+
import { mergeTagUpdates, readExtendedTag } from "../utils/tag-mapping.js";
|
|
6
3
|
import { getTagLib } from "./config.js";
|
|
7
4
|
import {
|
|
8
5
|
withAudioFile,
|
|
@@ -10,10 +7,7 @@ import {
|
|
|
10
7
|
withAudioFileSaveToFile
|
|
11
8
|
} from "./with-audio-file.js";
|
|
12
9
|
async function readTags(file) {
|
|
13
|
-
return withAudioFile(
|
|
14
|
-
file,
|
|
15
|
-
(audioFile) => mapPropertiesToExtendedTag(audioFile.properties())
|
|
16
|
-
);
|
|
10
|
+
return withAudioFile(file, (audioFile) => readExtendedTag(audioFile));
|
|
17
11
|
}
|
|
18
12
|
async function applyTags(file, tags) {
|
|
19
13
|
return withAudioFileSave(file, (audioFile) => {
|
|
@@ -71,8 +65,15 @@ async function readFormat(file) {
|
|
|
71
65
|
}
|
|
72
66
|
async function clearTags(file) {
|
|
73
67
|
return withAudioFileSave(file, (audioFile) => {
|
|
74
|
-
|
|
68
|
+
const cleared = {};
|
|
69
|
+
for (const key of Object.keys(audioFile.properties())) cleared[key] = [];
|
|
70
|
+
audioFile.setProperties(cleared);
|
|
75
71
|
audioFile.removePictures();
|
|
72
|
+
audioFile.setLyrics([]);
|
|
73
|
+
audioFile.setRatings([]);
|
|
74
|
+
if (audioFile.getChapters().length > 0) audioFile.setChapters([]);
|
|
75
|
+
if (audioFile.getBextData() !== void 0) audioFile.setBextData(null);
|
|
76
|
+
if (audioFile.getIxml() !== void 0) audioFile.setIxml(null);
|
|
76
77
|
});
|
|
77
78
|
}
|
|
78
79
|
export {
|
|
@@ -16,7 +16,17 @@ export declare abstract class BaseAudioFileImpl {
|
|
|
16
16
|
protected originalSource?: string | Uint8Array | ArrayBuffer | File;
|
|
17
17
|
protected isPartiallyLoaded: boolean;
|
|
18
18
|
protected readonly partialLoadOptions?: OpenOptions;
|
|
19
|
+
/** Text-property wire keys in the partial header at load; undefined if full. */
|
|
20
|
+
protected readonly partialKeysAtLoad?: ReadonlySet<string>;
|
|
19
21
|
constructor(module: TagLibModule, fileHandle: FileHandle, sourcePath?: string, originalSource?: string | Uint8Array | ArrayBuffer | File, isPartiallyLoaded?: boolean, partialLoadOptions?: OpenOptions);
|
|
22
|
+
/**
|
|
23
|
+
* Wire-key text properties present in the partial header at load but now
|
|
24
|
+
* absent — the user deleted them. The partial-load reconstruct subtracts these
|
|
25
|
+
* from its preserve-the-original merge so a deletion persists without wiping
|
|
26
|
+
* frames beyond the loaded header (taglib-d14). Lyrics are excluded (they ride
|
|
27
|
+
* their own reconstruct path); empty for a full load.
|
|
28
|
+
*/
|
|
29
|
+
protected partialDeletedPropertyKeys(): ReadonlySet<string>;
|
|
20
30
|
protected get handle(): FileHandle;
|
|
21
31
|
getFormat(): FileType;
|
|
22
32
|
isFormat<F extends FileType>(format: F): this is TypedAudioFile<F>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-file-base.d.ts","sourceRoot":"","sources":["../../../src/taglib/audio-file-base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"audio-file-base.d.ts","sourceRoot":"","sources":["../../../src/taglib/audio-file-base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAchE;;;;;GAKG;AACH,8BAAsB,iBAAiB;IAWnC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY;IAVzC,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACxC,SAAS,CAAC,qBAAqB,EAAE,eAAe,GAAG,IAAI,CAAQ;IAC/D,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACvC,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC;IACpE,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAS;IAC7C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACpD,gFAAgF;IAChF,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBAGtC,MAAM,EAAE,YAAY,EACvC,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,EACzD,iBAAiB,GAAE,OAAe,EAClC,kBAAkB,CAAC,EAAE,WAAW;IAYlC;;;;;;OAMG;IACH,SAAS,CAAC,0BAA0B,IAAI,WAAW,CAAC,MAAM,CAAC;IAU3D,SAAS,KAAK,MAAM,IAAI,UAAU,CAKjC;IAED,SAAS,IAAI,QAAQ;IAIrB,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC;IAIlE,GAAG,IAAI,UAAU;IA4EjB,eAAe,IAAI,eAAe,GAAG,SAAS;IAO9C,UAAU,IAAI,WAAW;IAMzB,aAAa,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAiB5C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK5C,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7C,KAAK,IAAI,OAAO;IAIhB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQ3C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO5C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOhC,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,IAAI;IAQf,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CAGzB"}
|