taglib-wasm 2.2.2 → 2.2.3
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 +1 -1
- package/README.md +5 -3
- package/dist/index.browser.js +17 -10
- package/dist/index.d.ts +1 -1
- package/dist/simple.browser.js +13 -8
- package/dist/src/constants/properties.d.ts +2 -2
- package/dist/src/constants/specialized-properties.d.ts +2 -2
- package/dist/src/constants/specialized-properties.js +2 -2
- package/dist/src/runtime/detector.d.ts +16 -1
- package/dist/src/runtime/detector.d.ts.map +1 -1
- package/dist/src/runtime/detector.js +58 -52
- package/dist/src/runtime/platform-io.d.ts +8 -0
- package/dist/src/runtime/platform-io.d.ts.map +1 -1
- package/dist/src/runtime/platform-io.js +11 -11
- package/dist/src/runtime/unified-loader/module-selection.d.ts +2 -2
- package/dist/src/runtime/unified-loader/module-selection.d.ts.map +1 -1
- package/dist/src/runtime/unified-loader/module-selection.js +3 -5
- package/dist/src/runtime/wasi-adapter/audio-properties.d.ts.map +1 -1
- package/dist/src/runtime/wasi-adapter/audio-properties.js +1 -0
- package/dist/src/taglib/audio-file-impl.d.ts.map +1 -1
- package/dist/src/taglib/audio-file-impl.js +2 -2
- package/dist/src/taglib/embind-adapter.d.ts.map +1 -1
- package/dist/src/taglib/embind-adapter.js +4 -1
- package/dist/src/taglib/id3v2-frames.d.ts.map +1 -1
- package/dist/src/taglib/id3v2-frames.js +2 -2
- package/dist/src/types/audio-formats.d.ts +5 -5
- package/dist/src/types/audio-formats.d.ts.map +1 -1
- package/dist/src/types/format-property-keys.d.ts +1 -1
- package/dist/src/types/format-property-keys.d.ts.map +1 -1
- package/dist/src/types/tags.d.ts +8 -1
- package/dist/src/types/tags.d.ts.map +1 -1
- package/dist/src/utils/tag-mapping.d.ts.map +1 -1
- package/dist/src/utils/tag-mapping.js +2 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/web-utils/data-url.d.ts.map +1 -1
- package/dist/src/web-utils/data-url.js +4 -2
- package/dist/taglib-wasi.wasm +0 -0
- package/dist/taglib-web.wasm +0 -0
- package/package.json +8 -14
package/LICENSE
CHANGED
|
@@ -42,7 +42,7 @@ The WebAssembly binaries are subject to LGPL requirements. This means:
|
|
|
42
42
|
To rebuild the WebAssembly binaries with a modified TagLib:
|
|
43
43
|
1. Modify the TagLib source in lib/taglib/
|
|
44
44
|
2. Run: npm run build:wasm (builds both backends; requires the
|
|
45
|
-
Emscripten SDK and WASI SDK
|
|
45
|
+
Emscripten SDK and WASI SDK 34 — see CONTRIBUTING.md)
|
|
46
46
|
3. The new binaries will be in build/taglib-web.wasm and
|
|
47
47
|
build/taglib-wasi.wasm
|
|
48
48
|
|
package/README.md
CHANGED
|
@@ -386,7 +386,7 @@ import { readProperties } from "taglib-wasm/simple";
|
|
|
386
386
|
const props = await readProperties("song.m4a");
|
|
387
387
|
|
|
388
388
|
console.log(props.containerFormat); // "MP4" (container format)
|
|
389
|
-
console.log(props.codec); // "AAC"
|
|
389
|
+
console.log(props.codec); // "AAC", "ALAC", "AC-3", … (compressed media format)
|
|
390
390
|
console.log(props.isLossless); // false for AAC, true for ALAC
|
|
391
391
|
console.log(props.bitsPerSample); // 16 for most formats
|
|
392
392
|
console.log(props.bitrate); // 256 (kbps)
|
|
@@ -407,7 +407,7 @@ Container format vs Codec:
|
|
|
407
407
|
|
|
408
408
|
Supported formats:
|
|
409
409
|
|
|
410
|
-
- **MP4 container** (.mp4, .m4a) – Can contain AAC
|
|
410
|
+
- **MP4 container** (.mp4, .m4a) – Can contain AAC, ALAC, AC-3, E-AC-3, DTS, FLAC, or Opus
|
|
411
411
|
- **OGG container** (.ogg) – Can contain Vorbis, Opus, FLAC, or Speex
|
|
412
412
|
- **MP3** – Both container and codec (lossy)
|
|
413
413
|
- **FLAC** – Both container and codec (lossless)
|
|
@@ -444,9 +444,11 @@ Supported formats:
|
|
|
444
444
|
`taglib-wasm` is designed to support all formats supported by TagLib:
|
|
445
445
|
|
|
446
446
|
- **.mp3** – ID3v2 and ID3v1 tags
|
|
447
|
+
- **.aac** – ADTS / raw AAC streams (ID3v2 metadata, read through the MPEG reader)
|
|
447
448
|
- **.m4a/.mp4** – MPEG-4/AAC metadata for AAC and Apple Lossless audio
|
|
448
449
|
- **.flac** – Vorbis comments and audio properties (plus BWF `bext`/iXML)
|
|
449
|
-
- **.ogg** – Ogg Vorbis
|
|
450
|
+
- **.ogg** – Ogg container: Vorbis with full metadata support, plus FLAC-in-Ogg
|
|
451
|
+
and Speex
|
|
450
452
|
- **.wav** – INFO chunk metadata, plus BWF `bext` and iXML
|
|
451
453
|
- **Additional formats** – Opus, APE, MPC, WavPack, TrueAudio, AIFF, WMA, and
|
|
452
454
|
more
|
package/dist/index.browser.js
CHANGED
|
@@ -574,8 +574,8 @@ var init_audio_file_bwf = __esm({
|
|
|
574
574
|
|
|
575
575
|
// src/taglib/id3v2-frames.ts
|
|
576
576
|
function assertMp3(format) {
|
|
577
|
-
if (format !== "MP3") {
|
|
578
|
-
throw new UnsupportedFormatError(format, ["MP3"], {
|
|
577
|
+
if (format !== "MP3" && format !== "AAC") {
|
|
578
|
+
throw new UnsupportedFormatError(format, ["MP3", "AAC"], {
|
|
579
579
|
operation: "id3v2Frames"
|
|
580
580
|
});
|
|
581
581
|
}
|
|
@@ -1371,7 +1371,7 @@ var init_specialized_properties = __esm({
|
|
|
1371
1371
|
},
|
|
1372
1372
|
releaseType: {
|
|
1373
1373
|
key: "RELEASETYPE",
|
|
1374
|
-
description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.
|
|
1374
|
+
description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.2 translates the RELEASETYPE key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM TYPE' (TagLib's description casing), MP4 freeform atom, APEv2 MUSICBRAINZ_ALBUMTYPE, ASF 'MusicBrainz/Album Type', Vorbis/Matroska raw RELEASETYPE",
|
|
1375
1375
|
type: "string",
|
|
1376
1376
|
supportedFormats: [
|
|
1377
1377
|
"ID3v2",
|
|
@@ -1389,7 +1389,7 @@ var init_specialized_properties = __esm({
|
|
|
1389
1389
|
},
|
|
1390
1390
|
releaseCountry: {
|
|
1391
1391
|
key: "RELEASECOUNTRY",
|
|
1392
|
-
description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.
|
|
1392
|
+
description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.2 translates the RELEASECOUNTRY key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM RELEASE COUNTRY' (TagLib's description casing; an uppercase TXXX:RELEASECOUNTRY description also reads back), MP4 freeform atom 'MusicBrainz Album Release Country', APEv2 raw RELEASECOUNTRY, ASF 'MusicBrainz/Album Release Country', WAV ICNT, Vorbis/Matroska raw RELEASECOUNTRY",
|
|
1393
1393
|
type: "string",
|
|
1394
1394
|
supportedFormats: [
|
|
1395
1395
|
"ID3v2",
|
|
@@ -2121,7 +2121,10 @@ function wrapEmbindHandle(raw) {
|
|
|
2121
2121
|
...containerFormat === "MP4" || containerFormat === "ASF" ? { isEncrypted: pw.isEncrypted() } : {},
|
|
2122
2122
|
...formatVersion > 0 ? { formatVersion } : {},
|
|
2123
2123
|
...isValidBitrateMode(bitrateMode) ? { bitrateMode } : {},
|
|
2124
|
-
|
|
2124
|
+
// OpusHead gain exists only in an Ogg Opus stream. Gating on codec
|
|
2125
|
+
// alone fabricated outputGainDb: 0 for MP4 tracks once the MP4 codec
|
|
2126
|
+
// enum was mapped (the WASI side never emitted it there) — taglib-kswf.
|
|
2127
|
+
...containerFormat === "OGG" && codec === "Opus" ? { outputGainDb: pw.outputGainDb() } : {}
|
|
2125
2128
|
};
|
|
2126
2129
|
}
|
|
2127
2130
|
};
|
|
@@ -2437,8 +2440,8 @@ var init_audio_file_impl = __esm({
|
|
|
2437
2440
|
}
|
|
2438
2441
|
setChapters(chapters, options) {
|
|
2439
2442
|
const fmt = this.getFormat();
|
|
2440
|
-
if (fmt !== "MP3" && fmt !== "MP4") {
|
|
2441
|
-
throw new UnsupportedFormatError(fmt, ["MP3", "MP4"], {
|
|
2443
|
+
if (fmt !== "MP3" && fmt !== "AAC" && fmt !== "MP4") {
|
|
2444
|
+
throw new UnsupportedFormatError(fmt, ["MP3", "AAC", "MP4"], {
|
|
2442
2445
|
operation: "setChapters"
|
|
2443
2446
|
});
|
|
2444
2447
|
}
|
|
@@ -2944,6 +2947,8 @@ function normalizeTagInput(input) {
|
|
|
2944
2947
|
if (val === "explicit") props.itunesAdvisory = ["1"];
|
|
2945
2948
|
else if (val === "clean") props.itunesAdvisory = ["2"];
|
|
2946
2949
|
else if (val === "unspecified") props.itunesAdvisory = [];
|
|
2950
|
+
} else if (field === "bpm") {
|
|
2951
|
+
props[field] = [String(Math.trunc(val))];
|
|
2947
2952
|
} else if (NUMERIC_FIELDS.has(field)) {
|
|
2948
2953
|
props[field] = [String(val)];
|
|
2949
2954
|
} else if (field === "r128TrackGain" || field === "r128AlbumGain") {
|
|
@@ -3004,7 +3009,7 @@ var VERSION;
|
|
|
3004
3009
|
var init_version = __esm({
|
|
3005
3010
|
"src/version.ts"() {
|
|
3006
3011
|
"use strict";
|
|
3007
|
-
VERSION = "2.2.
|
|
3012
|
+
VERSION = "2.2.3";
|
|
3008
3013
|
}
|
|
3009
3014
|
});
|
|
3010
3015
|
|
|
@@ -3701,9 +3706,11 @@ function propertyValue(props, key) {
|
|
|
3701
3706
|
// src/web-utils/data-url.ts
|
|
3702
3707
|
init_classes();
|
|
3703
3708
|
function pictureToDataURL(picture) {
|
|
3709
|
+
const data = picture.data;
|
|
3710
|
+
const CHUNK = 32768;
|
|
3704
3711
|
let binary = "";
|
|
3705
|
-
for (
|
|
3706
|
-
binary += String.
|
|
3712
|
+
for (let i = 0; i < data.length; i += CHUNK) {
|
|
3713
|
+
binary += String.fromCharCode(...data.subarray(i, i + CHUNK));
|
|
3707
3714
|
}
|
|
3708
3715
|
const base64 = btoa(binary);
|
|
3709
3716
|
return `data:${picture.mimeType};base64,${base64}`;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Main module exports for TagLib-Wasm
|
|
3
3
|
*
|
|
4
|
-
* TagLib v2.3.
|
|
4
|
+
* TagLib v2.3.2 compiled to WebAssembly with TypeScript bindings
|
|
5
5
|
* for universal audio metadata handling across all JavaScript runtimes.
|
|
6
6
|
*
|
|
7
7
|
* @module TagLib-Wasm
|
package/dist/simple.browser.js
CHANGED
|
@@ -562,8 +562,8 @@ var init_audio_file_bwf = __esm({
|
|
|
562
562
|
|
|
563
563
|
// src/taglib/id3v2-frames.ts
|
|
564
564
|
function assertMp3(format) {
|
|
565
|
-
if (format !== "MP3") {
|
|
566
|
-
throw new UnsupportedFormatError(format, ["MP3"], {
|
|
565
|
+
if (format !== "MP3" && format !== "AAC") {
|
|
566
|
+
throw new UnsupportedFormatError(format, ["MP3", "AAC"], {
|
|
567
567
|
operation: "id3v2Frames"
|
|
568
568
|
});
|
|
569
569
|
}
|
|
@@ -1303,7 +1303,7 @@ var init_specialized_properties = __esm({
|
|
|
1303
1303
|
},
|
|
1304
1304
|
releaseType: {
|
|
1305
1305
|
key: "RELEASETYPE",
|
|
1306
|
-
description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.
|
|
1306
|
+
description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.2 translates the RELEASETYPE key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM TYPE' (TagLib's description casing), MP4 freeform atom, APEv2 MUSICBRAINZ_ALBUMTYPE, ASF 'MusicBrainz/Album Type', Vorbis/Matroska raw RELEASETYPE",
|
|
1307
1307
|
type: "string",
|
|
1308
1308
|
supportedFormats: [
|
|
1309
1309
|
"ID3v2",
|
|
@@ -1321,7 +1321,7 @@ var init_specialized_properties = __esm({
|
|
|
1321
1321
|
},
|
|
1322
1322
|
releaseCountry: {
|
|
1323
1323
|
key: "RELEASECOUNTRY",
|
|
1324
|
-
description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.
|
|
1324
|
+
description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.2 translates the RELEASECOUNTRY key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM RELEASE COUNTRY' (TagLib's description casing; an uppercase TXXX:RELEASECOUNTRY description also reads back), MP4 freeform atom 'MusicBrainz Album Release Country', APEv2 raw RELEASECOUNTRY, ASF 'MusicBrainz/Album Release Country', WAV ICNT, Vorbis/Matroska raw RELEASECOUNTRY",
|
|
1325
1325
|
type: "string",
|
|
1326
1326
|
supportedFormats: [
|
|
1327
1327
|
"ID3v2",
|
|
@@ -2053,7 +2053,10 @@ function wrapEmbindHandle(raw) {
|
|
|
2053
2053
|
...containerFormat === "MP4" || containerFormat === "ASF" ? { isEncrypted: pw.isEncrypted() } : {},
|
|
2054
2054
|
...formatVersion > 0 ? { formatVersion } : {},
|
|
2055
2055
|
...isValidBitrateMode(bitrateMode) ? { bitrateMode } : {},
|
|
2056
|
-
|
|
2056
|
+
// OpusHead gain exists only in an Ogg Opus stream. Gating on codec
|
|
2057
|
+
// alone fabricated outputGainDb: 0 for MP4 tracks once the MP4 codec
|
|
2058
|
+
// enum was mapped (the WASI side never emitted it there) — taglib-kswf.
|
|
2059
|
+
...containerFormat === "OGG" && codec === "Opus" ? { outputGainDb: pw.outputGainDb() } : {}
|
|
2057
2060
|
};
|
|
2058
2061
|
}
|
|
2059
2062
|
};
|
|
@@ -2369,8 +2372,8 @@ var init_audio_file_impl = __esm({
|
|
|
2369
2372
|
}
|
|
2370
2373
|
setChapters(chapters, options) {
|
|
2371
2374
|
const fmt = this.getFormat();
|
|
2372
|
-
if (fmt !== "MP3" && fmt !== "MP4") {
|
|
2373
|
-
throw new UnsupportedFormatError(fmt, ["MP3", "MP4"], {
|
|
2375
|
+
if (fmt !== "MP3" && fmt !== "AAC" && fmt !== "MP4") {
|
|
2376
|
+
throw new UnsupportedFormatError(fmt, ["MP3", "AAC", "MP4"], {
|
|
2374
2377
|
operation: "setChapters"
|
|
2375
2378
|
});
|
|
2376
2379
|
}
|
|
@@ -2876,6 +2879,8 @@ function normalizeTagInput(input) {
|
|
|
2876
2879
|
if (val === "explicit") props.itunesAdvisory = ["1"];
|
|
2877
2880
|
else if (val === "clean") props.itunesAdvisory = ["2"];
|
|
2878
2881
|
else if (val === "unspecified") props.itunesAdvisory = [];
|
|
2882
|
+
} else if (field === "bpm") {
|
|
2883
|
+
props[field] = [String(Math.trunc(val))];
|
|
2879
2884
|
} else if (NUMERIC_FIELDS.has(field)) {
|
|
2880
2885
|
props[field] = [String(val)];
|
|
2881
2886
|
} else if (field === "r128TrackGain" || field === "r128AlbumGain") {
|
|
@@ -2936,7 +2941,7 @@ var VERSION;
|
|
|
2936
2941
|
var init_version = __esm({
|
|
2937
2942
|
"src/version.ts"() {
|
|
2938
2943
|
"use strict";
|
|
2939
|
-
VERSION = "2.2.
|
|
2944
|
+
VERSION = "2.2.3";
|
|
2940
2945
|
}
|
|
2941
2946
|
});
|
|
2942
2947
|
|
|
@@ -299,7 +299,7 @@ export declare const PROPERTIES: {
|
|
|
299
299
|
};
|
|
300
300
|
readonly releaseType: {
|
|
301
301
|
readonly key: "RELEASETYPE";
|
|
302
|
-
readonly description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.
|
|
302
|
+
readonly description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.2 translates the RELEASETYPE key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM TYPE' (TagLib's description casing), MP4 freeform atom, APEv2 MUSICBRAINZ_ALBUMTYPE, ASF 'MusicBrainz/Album Type', Vorbis/Matroska raw RELEASETYPE";
|
|
303
303
|
readonly type: "string";
|
|
304
304
|
readonly supportedFormats: readonly ["ID3v2", "MP4", "Vorbis", "APE", "ASF", "Matroska"];
|
|
305
305
|
readonly mappings: {
|
|
@@ -313,7 +313,7 @@ export declare const PROPERTIES: {
|
|
|
313
313
|
};
|
|
314
314
|
readonly releaseCountry: {
|
|
315
315
|
readonly key: "RELEASECOUNTRY";
|
|
316
|
-
readonly description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.
|
|
316
|
+
readonly description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.2 translates the RELEASECOUNTRY key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM RELEASE COUNTRY' (TagLib's description casing; an uppercase TXXX:RELEASECOUNTRY description also reads back), MP4 freeform atom 'MusicBrainz Album Release Country', APEv2 raw RELEASECOUNTRY, ASF 'MusicBrainz/Album Release Country', WAV ICNT, Vorbis/Matroska raw RELEASECOUNTRY";
|
|
317
317
|
readonly type: "string";
|
|
318
318
|
readonly supportedFormats: readonly ["ID3v2", "MP4", "Vorbis", "APE", "ASF", "Matroska", "WAV"];
|
|
319
319
|
readonly mappings: {
|
|
@@ -61,7 +61,7 @@ export declare const SPECIALIZED_PROPERTIES: {
|
|
|
61
61
|
};
|
|
62
62
|
readonly releaseType: {
|
|
63
63
|
readonly key: "RELEASETYPE";
|
|
64
|
-
readonly description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.
|
|
64
|
+
readonly description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.2 translates the RELEASETYPE key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM TYPE' (TagLib's description casing), MP4 freeform atom, APEv2 MUSICBRAINZ_ALBUMTYPE, ASF 'MusicBrainz/Album Type', Vorbis/Matroska raw RELEASETYPE";
|
|
65
65
|
readonly type: "string";
|
|
66
66
|
readonly supportedFormats: readonly ["ID3v2", "MP4", "Vorbis", "APE", "ASF", "Matroska"];
|
|
67
67
|
readonly mappings: {
|
|
@@ -75,7 +75,7 @@ export declare const SPECIALIZED_PROPERTIES: {
|
|
|
75
75
|
};
|
|
76
76
|
readonly releaseCountry: {
|
|
77
77
|
readonly key: "RELEASECOUNTRY";
|
|
78
|
-
readonly description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.
|
|
78
|
+
readonly description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.2 translates the RELEASECOUNTRY key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM RELEASE COUNTRY' (TagLib's description casing; an uppercase TXXX:RELEASECOUNTRY description also reads back), MP4 freeform atom 'MusicBrainz Album Release Country', APEv2 raw RELEASECOUNTRY, ASF 'MusicBrainz/Album Release Country', WAV ICNT, Vorbis/Matroska raw RELEASECOUNTRY";
|
|
79
79
|
readonly type: "string";
|
|
80
80
|
readonly supportedFormats: readonly ["ID3v2", "MP4", "Vorbis", "APE", "ASF", "Matroska", "WAV"];
|
|
81
81
|
readonly mappings: {
|
|
@@ -46,7 +46,7 @@ const SPECIALIZED_PROPERTIES = {
|
|
|
46
46
|
},
|
|
47
47
|
releaseType: {
|
|
48
48
|
key: "RELEASETYPE",
|
|
49
|
-
description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.
|
|
49
|
+
description: "Release type (album, single, EP, compilation, ...). Multi-value (e.g. 'album' + 'EP'). TagLib 2.3.2 translates the RELEASETYPE key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM TYPE' (TagLib's description casing), MP4 freeform atom, APEv2 MUSICBRAINZ_ALBUMTYPE, ASF 'MusicBrainz/Album Type', Vorbis/Matroska raw RELEASETYPE",
|
|
50
50
|
type: "string",
|
|
51
51
|
supportedFormats: [
|
|
52
52
|
"ID3v2",
|
|
@@ -64,7 +64,7 @@ const SPECIALIZED_PROPERTIES = {
|
|
|
64
64
|
},
|
|
65
65
|
releaseCountry: {
|
|
66
66
|
key: "RELEASECOUNTRY",
|
|
67
|
-
description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.
|
|
67
|
+
description: "Release country (ISO 3166-1 code, e.g. 'US'). TagLib 2.3.2 translates the RELEASECOUNTRY key per format: ID3v2 TXXX 'MUSICBRAINZ ALBUM RELEASE COUNTRY' (TagLib's description casing; an uppercase TXXX:RELEASECOUNTRY description also reads back), MP4 freeform atom 'MusicBrainz Album Release Country', APEv2 raw RELEASECOUNTRY, ASF 'MusicBrainz/Album Release Country', WAV ICNT, Vorbis/Matroska raw RELEASECOUNTRY",
|
|
68
68
|
type: "string",
|
|
69
69
|
supportedFormats: [
|
|
70
70
|
"ID3v2",
|
|
@@ -7,6 +7,21 @@ export interface RuntimeDetectionResult {
|
|
|
7
7
|
supportsStreaming: boolean;
|
|
8
8
|
performanceTier: 1 | 2 | 3;
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* The pure per-environment backend configuration. `detectRuntime()` is the
|
|
12
|
+
* only sniffer in the codebase; every downstream decision (backend choice,
|
|
13
|
+
* PlatformIO creation, WASI availability) derives from this table so it can
|
|
14
|
+
* be exercised with synthetic environments instead of real runtimes
|
|
15
|
+
* (taglib-2b4).
|
|
16
|
+
*/
|
|
17
|
+
export interface EnvironmentProfile {
|
|
18
|
+
wasmType: WasmBinaryType;
|
|
19
|
+
supportsFilesystem: boolean;
|
|
20
|
+
supportsStreaming: boolean;
|
|
21
|
+
performanceTier: 1 | 2 | 3;
|
|
22
|
+
}
|
|
23
|
+
/** Pure environment -> backend configuration lookup (taglib-2b4). */
|
|
24
|
+
export declare function environmentProfile(env: RuntimeEnvironment): EnvironmentProfile;
|
|
10
25
|
/**
|
|
11
26
|
* Check if a Node.js version meets the minimum requirement (v22.6.0+).
|
|
12
27
|
* Returns an error message string if the version is too old, or undefined if OK.
|
|
@@ -22,5 +37,5 @@ export declare function detectRuntime(): RuntimeDetectionResult;
|
|
|
22
37
|
*/
|
|
23
38
|
export declare function supportsExnref(): boolean;
|
|
24
39
|
export declare function getEnvironmentDescription(env: RuntimeEnvironment): string;
|
|
25
|
-
export declare function canLoadWasmType(wasmType: WasmBinaryType): boolean;
|
|
40
|
+
export declare function canLoadWasmType(wasmType: WasmBinaryType, env?: RuntimeEnvironment): boolean;
|
|
26
41
|
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/runtime/detector.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,WAAW,GACX,UAAU,GACV,SAAS,GACT,iBAAiB,GACjB,QAAQ,GACR,YAAY,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,cAAc,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC5B;AAOD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,GAAG,SAAS,CAepB;AAuCD,qFAAqF;AACrF,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED,wBAAgB,aAAa,IAAI,sBAAsB,
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/runtime/detector.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,WAAW,GACX,UAAU,GACV,SAAS,GACT,iBAAiB,GACjB,QAAQ,GACR,YAAY,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,cAAc,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC5B;AA+CD,qEAAqE;AACrE,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,kBAAkB,GACtB,kBAAkB,CAEpB;AAOD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,GAAG,SAAS,CAepB;AAuCD,qFAAqF;AACrF,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED,wBAAgB,aAAa,IAAI,sBAAsB,CAuCtD;AAWD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAMxC;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAmBzE;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,GAAG,GAAE,kBAAgD,GACpD,OAAO,CAKT"}
|
|
@@ -1,3 +1,50 @@
|
|
|
1
|
+
const ENVIRONMENT_PROFILES = {
|
|
2
|
+
"deno-wasi": {
|
|
3
|
+
wasmType: "wasi",
|
|
4
|
+
supportsFilesystem: true,
|
|
5
|
+
supportsStreaming: true,
|
|
6
|
+
performanceTier: 1
|
|
7
|
+
},
|
|
8
|
+
"node-wasi": {
|
|
9
|
+
wasmType: "wasi",
|
|
10
|
+
supportsFilesystem: true,
|
|
11
|
+
supportsStreaming: true,
|
|
12
|
+
performanceTier: 1
|
|
13
|
+
},
|
|
14
|
+
"bun-wasi": {
|
|
15
|
+
wasmType: "wasi",
|
|
16
|
+
supportsFilesystem: true,
|
|
17
|
+
supportsStreaming: true,
|
|
18
|
+
performanceTier: 1
|
|
19
|
+
},
|
|
20
|
+
browser: {
|
|
21
|
+
wasmType: "emscripten",
|
|
22
|
+
supportsFilesystem: false,
|
|
23
|
+
supportsStreaming: true,
|
|
24
|
+
performanceTier: 2
|
|
25
|
+
},
|
|
26
|
+
worker: {
|
|
27
|
+
wasmType: "emscripten",
|
|
28
|
+
supportsFilesystem: false,
|
|
29
|
+
supportsStreaming: true,
|
|
30
|
+
performanceTier: 2
|
|
31
|
+
},
|
|
32
|
+
cloudflare: {
|
|
33
|
+
wasmType: "emscripten",
|
|
34
|
+
supportsFilesystem: false,
|
|
35
|
+
supportsStreaming: false,
|
|
36
|
+
performanceTier: 3
|
|
37
|
+
},
|
|
38
|
+
"node-emscripten": {
|
|
39
|
+
wasmType: "emscripten",
|
|
40
|
+
supportsFilesystem: true,
|
|
41
|
+
supportsStreaming: true,
|
|
42
|
+
performanceTier: 3
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
function environmentProfile(env) {
|
|
46
|
+
return ENVIRONMENT_PROFILES[env];
|
|
47
|
+
}
|
|
1
48
|
const g = globalThis;
|
|
2
49
|
const MIN_NODE_MAJOR = 22;
|
|
3
50
|
const MIN_NODE_MINOR = 6;
|
|
@@ -38,73 +85,32 @@ function isDeno() {
|
|
|
38
85
|
}
|
|
39
86
|
function detectRuntime() {
|
|
40
87
|
if (isDeno() && hasWASISupport()) {
|
|
41
|
-
return {
|
|
42
|
-
environment: "deno-wasi",
|
|
43
|
-
wasmType: "wasi",
|
|
44
|
-
supportsFilesystem: true,
|
|
45
|
-
supportsStreaming: true,
|
|
46
|
-
performanceTier: 1
|
|
47
|
-
};
|
|
88
|
+
return { environment: "deno-wasi", ...environmentProfile("deno-wasi") };
|
|
48
89
|
}
|
|
49
90
|
if (isBun()) {
|
|
50
|
-
return {
|
|
51
|
-
environment: "bun-wasi",
|
|
52
|
-
wasmType: "wasi",
|
|
53
|
-
supportsFilesystem: true,
|
|
54
|
-
supportsStreaming: true,
|
|
55
|
-
performanceTier: 1
|
|
56
|
-
};
|
|
91
|
+
return { environment: "bun-wasi", ...environmentProfile("bun-wasi") };
|
|
57
92
|
}
|
|
58
93
|
if (isNode() && hasWASISupport()) {
|
|
59
|
-
return {
|
|
60
|
-
environment: "node-wasi",
|
|
61
|
-
wasmType: "wasi",
|
|
62
|
-
supportsFilesystem: true,
|
|
63
|
-
supportsStreaming: true,
|
|
64
|
-
performanceTier: 1
|
|
65
|
-
};
|
|
94
|
+
return { environment: "node-wasi", ...environmentProfile("node-wasi") };
|
|
66
95
|
}
|
|
67
96
|
if (isBrowser()) {
|
|
68
|
-
return {
|
|
69
|
-
environment: "browser",
|
|
70
|
-
wasmType: "emscripten",
|
|
71
|
-
supportsFilesystem: false,
|
|
72
|
-
supportsStreaming: true,
|
|
73
|
-
performanceTier: 2
|
|
74
|
-
};
|
|
97
|
+
return { environment: "browser", ...environmentProfile("browser") };
|
|
75
98
|
}
|
|
76
99
|
if (isWebWorker()) {
|
|
77
|
-
return {
|
|
78
|
-
environment: "worker",
|
|
79
|
-
wasmType: "emscripten",
|
|
80
|
-
supportsFilesystem: false,
|
|
81
|
-
supportsStreaming: true,
|
|
82
|
-
performanceTier: 2
|
|
83
|
-
};
|
|
100
|
+
return { environment: "worker", ...environmentProfile("worker") };
|
|
84
101
|
}
|
|
85
102
|
if (isCloudflareWorker()) {
|
|
86
|
-
return {
|
|
87
|
-
environment: "cloudflare",
|
|
88
|
-
wasmType: "emscripten",
|
|
89
|
-
supportsFilesystem: false,
|
|
90
|
-
supportsStreaming: false,
|
|
91
|
-
performanceTier: 3
|
|
92
|
-
};
|
|
103
|
+
return { environment: "cloudflare", ...environmentProfile("cloudflare") };
|
|
93
104
|
}
|
|
94
105
|
if (isNode()) {
|
|
95
106
|
return {
|
|
96
107
|
environment: "node-emscripten",
|
|
97
|
-
|
|
98
|
-
supportsFilesystem: true,
|
|
99
|
-
supportsStreaming: true,
|
|
100
|
-
performanceTier: 3
|
|
108
|
+
...environmentProfile("node-emscripten")
|
|
101
109
|
};
|
|
102
110
|
}
|
|
103
111
|
return {
|
|
104
112
|
environment: "browser",
|
|
105
|
-
|
|
106
|
-
supportsFilesystem: false,
|
|
107
|
-
supportsStreaming: true,
|
|
113
|
+
...environmentProfile("browser"),
|
|
108
114
|
performanceTier: 3
|
|
109
115
|
};
|
|
110
116
|
}
|
|
@@ -158,10 +164,9 @@ function getEnvironmentDescription(env) {
|
|
|
158
164
|
return "Unknown environment";
|
|
159
165
|
}
|
|
160
166
|
}
|
|
161
|
-
function canLoadWasmType(wasmType) {
|
|
162
|
-
const result = detectRuntime();
|
|
167
|
+
function canLoadWasmType(wasmType, env = detectRuntime().environment) {
|
|
163
168
|
if (wasmType === "wasi") {
|
|
164
|
-
return
|
|
169
|
+
return environmentProfile(env).wasmType === "wasi";
|
|
165
170
|
}
|
|
166
171
|
return true;
|
|
167
172
|
}
|
|
@@ -169,6 +174,7 @@ export {
|
|
|
169
174
|
canLoadWasmType,
|
|
170
175
|
checkNodeVersion,
|
|
171
176
|
detectRuntime,
|
|
177
|
+
environmentProfile,
|
|
172
178
|
getEnvironmentDescription,
|
|
173
179
|
isDeno,
|
|
174
180
|
supportsExnref
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type RuntimeEnvironment } from "./detector.js";
|
|
1
2
|
export type PlatformIO = {
|
|
2
3
|
readFile(path: string): Promise<Uint8Array>;
|
|
3
4
|
writeFile(path: string, data: Uint8Array): Promise<void>;
|
|
@@ -11,6 +12,13 @@ export type PlatformIO = {
|
|
|
11
12
|
}>;
|
|
12
13
|
readPartial?: (path: string, headerSize: number, footerSize: number) => Promise<Uint8Array>;
|
|
13
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Pure environment -> PlatformIO selection (taglib-2b4): each environment's
|
|
17
|
+
* factory is chosen without sniffing, so the routing is testable with a
|
|
18
|
+
* synthetic environment. Factories are lazy — nothing touches the runtime
|
|
19
|
+
* until a method is called, so calling this under any runtime is safe.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createPlatformIOFor(env: RuntimeEnvironment): PlatformIO;
|
|
14
22
|
export declare function getPlatformIO(): PlatformIO;
|
|
15
23
|
/** @internal */
|
|
16
24
|
export declare function _setPlatformIOForTesting(io: PlatformIO): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-io.d.ts","sourceRoot":"","sources":["../../../src/runtime/platform-io.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"platform-io.d.ts","sourceRoot":"","sources":["../../../src/runtime/platform-io.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,OAAO,CACL,IAAI,EAAE,MAAM,GACX,cAAc,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3E,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1B,CAAC;AA0LF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,GAAG,UAAU,CAgBvE;AAED,wBAAgB,aAAa,IAAI,UAAU,CAM1C;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAE7D;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -152,27 +152,26 @@ function createBunIO() {
|
|
|
152
152
|
}
|
|
153
153
|
};
|
|
154
154
|
}
|
|
155
|
-
function
|
|
156
|
-
|
|
157
|
-
const runtime = detectRuntime();
|
|
158
|
-
switch (runtime.environment) {
|
|
155
|
+
function createPlatformIOFor(env) {
|
|
156
|
+
switch (env) {
|
|
159
157
|
case "deno-wasi":
|
|
160
|
-
|
|
161
|
-
break;
|
|
158
|
+
return createDenoIO();
|
|
162
159
|
case "bun-wasi":
|
|
163
|
-
|
|
164
|
-
break;
|
|
160
|
+
return createBunIO();
|
|
165
161
|
case "node-wasi":
|
|
166
162
|
case "node-emscripten":
|
|
167
|
-
|
|
168
|
-
break;
|
|
163
|
+
return createNodeIO();
|
|
169
164
|
default:
|
|
170
165
|
throw new EnvironmentError(
|
|
171
|
-
|
|
166
|
+
env,
|
|
172
167
|
"does not support filesystem operations",
|
|
173
168
|
"filesystem access"
|
|
174
169
|
);
|
|
175
170
|
}
|
|
171
|
+
}
|
|
172
|
+
function getPlatformIO() {
|
|
173
|
+
if (platformIO) return platformIO;
|
|
174
|
+
platformIO = createPlatformIOFor(detectRuntime().environment);
|
|
176
175
|
return platformIO;
|
|
177
176
|
}
|
|
178
177
|
function _setPlatformIOForTesting(io) {
|
|
@@ -184,5 +183,6 @@ function _resetPlatformIO() {
|
|
|
184
183
|
export {
|
|
185
184
|
_resetPlatformIO,
|
|
186
185
|
_setPlatformIOForTesting,
|
|
186
|
+
createPlatformIOFor,
|
|
187
187
|
getPlatformIO
|
|
188
188
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type RuntimeDetectionResult } from "../detector.js";
|
|
2
2
|
import type { UnifiedLoaderOptions } from "./types.js";
|
|
3
3
|
export declare function selectWasmType(runtime: RuntimeDetectionResult, options: UnifiedLoaderOptions): "wasi" | "emscripten";
|
|
4
|
-
export declare function isWasiAvailable(): boolean;
|
|
5
|
-
export declare function getRecommendedConfig(): UnifiedLoaderOptions;
|
|
4
|
+
export declare function isWasiAvailable(runtime?: RuntimeDetectionResult): boolean;
|
|
5
|
+
export declare function getRecommendedConfig(runtime?: RuntimeDetectionResult): UnifiedLoaderOptions;
|
|
6
6
|
//# sourceMappingURL=module-selection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-selection.d.ts","sourceRoot":"","sources":["../../../../src/runtime/unified-loader/module-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,MAAM,GAAG,YAAY,CAqBvB;AAED,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"module-selection.d.ts","sourceRoot":"","sources":["../../../../src/runtime/unified-loader/module-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,MAAM,GAAG,YAAY,CAqBvB;AAED,wBAAgB,eAAe,CAC7B,OAAO,GAAE,sBAAwC,GAChD,OAAO,CAET;AAED,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,sBAAwC,GAChD,oBAAoB,CAqBtB"}
|
|
@@ -14,19 +14,17 @@ function selectWasmType(runtime, options) {
|
|
|
14
14
|
}
|
|
15
15
|
return "emscripten";
|
|
16
16
|
}
|
|
17
|
-
function isWasiAvailable() {
|
|
18
|
-
const runtime = detectRuntime();
|
|
17
|
+
function isWasiAvailable(runtime = detectRuntime()) {
|
|
19
18
|
return runtime.wasmType === "wasi" && runtime.supportsFilesystem;
|
|
20
19
|
}
|
|
21
|
-
function getRecommendedConfig() {
|
|
22
|
-
const runtime = detectRuntime();
|
|
20
|
+
function getRecommendedConfig(runtime = detectRuntime()) {
|
|
23
21
|
if (runtime.environment === "browser") {
|
|
24
22
|
return {
|
|
25
23
|
forceWasmType: "emscripten",
|
|
26
24
|
disableOptimizations: false
|
|
27
25
|
};
|
|
28
26
|
}
|
|
29
|
-
if (runtime.supportsFilesystem) {
|
|
27
|
+
if (runtime.wasmType === "wasi" && runtime.supportsFilesystem) {
|
|
30
28
|
return {
|
|
31
29
|
forceWasmType: "wasi",
|
|
32
30
|
disableOptimizations: false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-properties.d.ts","sourceRoot":"","sources":["../../../../src/runtime/wasi-adapter/audio-properties.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"audio-properties.d.ts","sourceRoot":"","sources":["../../../../src/runtime/wasi-adapter/audio-properties.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AAgBxB,wEAAwE;AACxE,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACtC,eAAe,GAAG,IAAI,CA4BxB;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAe3D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACvC,QAAQ,EAAE,UAAU,GAAG,IAAI,GAC1B,MAAM,CAuDR;AAED,4EAA4E;AAC5E,wBAAgB,KAAK,CACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACvC,QAAQ,EAAE,UAAU,GAAG,IAAI,GAC1B,OAAO,CAYT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-file-impl.d.ts","sourceRoot":"","sources":["../../../src/taglib/audio-file-impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EACN,cAAc,EACf,MAAM,oCAAoC,CAAC;AAc5C,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAoBzD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CASrD;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,iBAAkB,YAAW,SAAS;IACvE,OAAO,CAAC,cAAc,CAA2B;gBAG/C,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,cAAc,EAC1B,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,IAAI,IAAI,OAAO;IAef,aAAa,IAAI,UAAU;IA2BrB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4D9C,WAAW,IAAI,OAAO,EAAE;IAYxB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAStC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASlC,cAAc,IAAI,IAAI;IAItB,WAAW,IAAI,OAAO,EAAE;IAqBxB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"audio-file-impl.d.ts","sourceRoot":"","sources":["../../../src/taglib/audio-file-impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EACN,cAAc,EACf,MAAM,oCAAoC,CAAC;AAc5C,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAoBzD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CASrD;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,iBAAkB,YAAW,SAAS;IACvE,OAAO,CAAC,cAAc,CAA2B;gBAG/C,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,cAAc,EAC1B,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,IAAI,IAAI,OAAO;IAef,aAAa,IAAI,UAAU;IA2BrB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4D9C,WAAW,IAAI,OAAO,EAAE;IAYxB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAStC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASlC,cAAc,IAAI,IAAI;IAItB,WAAW,IAAI,OAAO,EAAE;IAqBxB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI;IA0BpE,OAAO,IAAI,uBAAuB,GAAG,SAAS;IAI9C,OAAO,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI;IAI5C,WAAW,IAAI,UAAU,GAAG,SAAS;IAIrC,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IAI1C,OAAO,IAAI,MAAM,GAAG,SAAS;IAI7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIlC,UAAU,IAAI,MAAM,EAAE;IAWtB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAQnC,SAAS,IAAI,cAAc,EAAE;IAS7B,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAQzC,SAAS,IAAI,gBAAgB,GAAG,SAAS;IAKzC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ/C,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAMzC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI;IAOpD,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMnC,UAAU,IAAI;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE;IAI1C,YAAY,CAAC,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;CAM1D"}
|
|
@@ -174,8 +174,8 @@ class AudioFileImpl extends BaseAudioFileImpl {
|
|
|
174
174
|
}
|
|
175
175
|
setChapters(chapters, options) {
|
|
176
176
|
const fmt = this.getFormat();
|
|
177
|
-
if (fmt !== "MP3" && fmt !== "MP4") {
|
|
178
|
-
throw new UnsupportedFormatError(fmt, ["MP3", "MP4"], {
|
|
177
|
+
if (fmt !== "MP3" && fmt !== "AAC" && fmt !== "MP4") {
|
|
178
|
+
throw new UnsupportedFormatError(fmt, ["MP3", "AAC", "MP4"], {
|
|
179
179
|
operation: "setChapters"
|
|
180
180
|
});
|
|
181
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embind-adapter.d.ts","sourceRoot":"","sources":["../../../src/taglib/embind-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,YAAY,CAAC;AAcxE,wEAAwE;AACxE,UAAU,gBAAgB;IACxB,KAAK,IAAI,MAAM,CAAC;IAChB,MAAM,IAAI,MAAM,CAAC;IACjB,KAAK,IAAI,MAAM,CAAC;IAChB,OAAO,IAAI,MAAM,CAAC;IAClB,KAAK,IAAI,MAAM,CAAC;IAChB,IAAI,IAAI,MAAM,CAAC;IACf,KAAK,IAAI,MAAM,CAAC;IAChB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,oFAAoF;AACpF,UAAU,4BAA4B;IACpC,eAAe,IAAI,MAAM,CAAC;IAC1B,oBAAoB,IAAI,MAAM,CAAC;IAC/B,OAAO,IAAI,MAAM,CAAC;IAClB,UAAU,IAAI,MAAM,CAAC;IACrB,QAAQ,IAAI,MAAM,CAAC;IACnB,aAAa,IAAI,MAAM,CAAC;IACxB,KAAK,IAAI,MAAM,CAAC;IAChB,eAAe,IAAI,MAAM,CAAC;IAC1B,UAAU,IAAI,OAAO,CAAC;IACtB,WAAW,IAAI,MAAM,CAAC;IACtB,SAAS,IAAI,MAAM,CAAC;IACpB,WAAW,IAAI,OAAO,CAAC;IACvB,aAAa,IAAI,MAAM,CAAC;IACxB,WAAW,IAAI,MAAM,CAAC;IACtB,YAAY,IAAI,MAAM,CAAC;CACxB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,IAAI,gBAAgB,CAAC;IAC3B,kBAAkB,IAAI,4BAA4B,GAAG,IAAI,CAAC;IAC1D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"embind-adapter.d.ts","sourceRoot":"","sources":["../../../src/taglib/embind-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,YAAY,CAAC;AAcxE,wEAAwE;AACxE,UAAU,gBAAgB;IACxB,KAAK,IAAI,MAAM,CAAC;IAChB,MAAM,IAAI,MAAM,CAAC;IACjB,KAAK,IAAI,MAAM,CAAC;IAChB,OAAO,IAAI,MAAM,CAAC;IAClB,KAAK,IAAI,MAAM,CAAC;IAChB,IAAI,IAAI,MAAM,CAAC;IACf,KAAK,IAAI,MAAM,CAAC;IAChB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,oFAAoF;AACpF,UAAU,4BAA4B;IACpC,eAAe,IAAI,MAAM,CAAC;IAC1B,oBAAoB,IAAI,MAAM,CAAC;IAC/B,OAAO,IAAI,MAAM,CAAC;IAClB,UAAU,IAAI,MAAM,CAAC;IACrB,QAAQ,IAAI,MAAM,CAAC;IACnB,aAAa,IAAI,MAAM,CAAC;IACxB,KAAK,IAAI,MAAM,CAAC;IAChB,eAAe,IAAI,MAAM,CAAC;IAC1B,UAAU,IAAI,OAAO,CAAC;IACtB,WAAW,IAAI,MAAM,CAAC;IACtB,SAAS,IAAI,MAAM,CAAC;IACpB,WAAW,IAAI,OAAO,CAAC;IACvB,aAAa,IAAI,MAAM,CAAC;IACxB,WAAW,IAAI,MAAM,CAAC;IACtB,YAAY,IAAI,MAAM,CAAC;CACxB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,IAAI,gBAAgB,CAAC;IAC3B,kBAAkB,IAAI,4BAA4B,GAAG,IAAI,CAAC;IAC1D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,cAAc,CAyKtE"}
|
|
@@ -121,7 +121,10 @@ function wrapEmbindHandle(raw) {
|
|
|
121
121
|
...containerFormat === "MP4" || containerFormat === "ASF" ? { isEncrypted: pw.isEncrypted() } : {},
|
|
122
122
|
...formatVersion > 0 ? { formatVersion } : {},
|
|
123
123
|
...isValidBitrateMode(bitrateMode) ? { bitrateMode } : {},
|
|
124
|
-
|
|
124
|
+
// OpusHead gain exists only in an Ogg Opus stream. Gating on codec
|
|
125
|
+
// alone fabricated outputGainDb: 0 for MP4 tracks once the MP4 codec
|
|
126
|
+
// enum was mapped (the WASI side never emitted it there) — taglib-kswf.
|
|
127
|
+
...containerFormat === "OGG" && codec === "Opus" ? { outputGainDb: pw.outputGainDb() } : {}
|
|
125
128
|
};
|
|
126
129
|
}
|
|
127
130
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id3v2-frames.d.ts","sourceRoot":"","sources":["../../../src/taglib/id3v2-frames.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAIrE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"id3v2-frames.d.ts","sourceRoot":"","sources":["../../../src/taglib/id3v2-frames.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAIrE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ9C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQ3E;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,CAUtE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAM9D"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { MetadataError, UnsupportedFormatError } from "../errors/classes.js";
|
|
2
2
|
const FRAME_ID_PATTERN = /^[A-Z0-9]{4}$/;
|
|
3
3
|
function assertMp3(format) {
|
|
4
|
-
if (format !== "MP3") {
|
|
5
|
-
throw new UnsupportedFormatError(format, ["MP3"], {
|
|
4
|
+
if (format !== "MP3" && format !== "AAC") {
|
|
5
|
+
throw new UnsupportedFormatError(format, ["MP3", "AAC"], {
|
|
6
6
|
operation: "id3v2Frames"
|
|
7
7
|
});
|
|
8
8
|
}
|
|
@@ -24,7 +24,7 @@ export declare function isNamedAudioInput(input: AudioFileInput): input is Named
|
|
|
24
24
|
* }
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
export type FileType = "MP3" | "MP4" | "FLAC" | "OGG" | "OPUS" | "WAV" | "AIFF" | "ASF" | "APE" | "DSF" | "DSDIFF" | "WV" | "MPC" | "TTA" | "SHN" | "MOD" | "S3M" | "IT" | "XM" | "OggFLAC" | "SPEEX" | "MATROSKA" | "unknown";
|
|
27
|
+
export type FileType = "MP3" | "AAC" | "MP4" | "FLAC" | "OGG" | "OPUS" | "WAV" | "AIFF" | "ASF" | "APE" | "DSF" | "DSDIFF" | "WV" | "MPC" | "TTA" | "SHN" | "MOD" | "S3M" | "IT" | "XM" | "OggFLAC" | "SPEEX" | "MATROSKA" | "unknown";
|
|
28
28
|
/**
|
|
29
29
|
* Container formats for audio files.
|
|
30
30
|
* A container format defines how audio data and metadata are stored in a file.
|
|
@@ -37,7 +37,7 @@ export type FileType = "MP3" | "MP4" | "FLAC" | "OGG" | "OPUS" | "WAV" | "AIFF"
|
|
|
37
37
|
* console.log(`Codec: ${props.codec}`); // "AAC"
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
|
-
export type ContainerFormat = "MP3" | "MP4" | "FLAC" | "OGG" | "WAV" | "AIFF" | "ASF" | "APE" | "DSF" | "DSDIFF" | "WavPack" | "MPC" | "TTA" | "Shorten" | "MOD" | "S3M" | "IT" | "XM" | "Matroska" | "unknown";
|
|
40
|
+
export type ContainerFormat = "MP3" | "ADTS" | "MP4" | "FLAC" | "OGG" | "WAV" | "AIFF" | "ASF" | "APE" | "DSF" | "DSDIFF" | "WavPack" | "MPC" | "TTA" | "Shorten" | "MOD" | "S3M" | "IT" | "XM" | "Matroska" | "unknown";
|
|
41
41
|
/**
|
|
42
42
|
* Audio codecs (compression formats) for audio data.
|
|
43
43
|
* A codec defines how audio is encoded/compressed within a container.
|
|
@@ -54,7 +54,7 @@ export type ContainerFormat = "MP3" | "MP4" | "FLAC" | "OGG" | "WAV" | "AIFF" |
|
|
|
54
54
|
* console.log(props2.codec); // "ALAC" (lossless)
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
|
-
export type AudioCodec = "AAC" | "ALAC" | "MP3" | "FLAC" | "Vorbis" | "Opus" | "Speex" | "PCM" | "IEEEFloat" | "WAV" | "WMA" | "WMALossless" | "APE" | "DSD" | "WavPack" | "MPC" | "TTA" | "Shorten" | "MOD" | "S3M" | "IT" | "XM" | "unknown";
|
|
57
|
+
export type AudioCodec = "AAC" | "ALAC" | "AC-3" | "E-AC-3" | "DTS" | "MP3" | "FLAC" | "Vorbis" | "Opus" | "Speex" | "PCM" | "IEEEFloat" | "WAV" | "WMA" | "WMALossless" | "APE" | "DSD" | "WavPack" | "MPC" | "TTA" | "Shorten" | "MOD" | "S3M" | "IT" | "XM" | "unknown";
|
|
58
58
|
/**
|
|
59
59
|
* Bitrate mode for MP3 audio.
|
|
60
60
|
*
|
|
@@ -118,7 +118,7 @@ export interface AudioProperties {
|
|
|
118
118
|
*
|
|
119
119
|
* After narrowing via `isFormat()`, optional fields that are guaranteed present
|
|
120
120
|
* for a given format become required:
|
|
121
|
-
* - MP3: `mpegVersion`, `mpegLayer`
|
|
121
|
+
* - MP3 / ADTS (`"AAC"`, raw .aac): `mpegVersion`, `mpegLayer`
|
|
122
122
|
* - MP4/ASF: `isEncrypted`
|
|
123
123
|
* - OPUS: `outputGainDb`
|
|
124
124
|
* - APE/WV/TTA/MPC/SHN: `formatVersion`
|
|
@@ -131,7 +131,7 @@ export interface AudioProperties {
|
|
|
131
131
|
* }
|
|
132
132
|
* ```
|
|
133
133
|
*/
|
|
134
|
-
export type TypedAudioProperties<F extends FileType> = F extends "MP3" ? AudioProperties & {
|
|
134
|
+
export type TypedAudioProperties<F extends FileType> = F extends "MP3" | "AAC" ? AudioProperties & {
|
|
135
135
|
readonly mpegVersion: number;
|
|
136
136
|
readonly mpegLayer: number;
|
|
137
137
|
} : F extends "MP4" | "ASF" ? AudioProperties & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-formats.d.ts","sourceRoot":"","sources":["../../../src/types/audio-formats.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"audio-formats.d.ts","sourceRoot":"","sources":["../../../src/types/audio-formats.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { FileType } from "./audio-formats.js";
|
|
8
8
|
export type TagFormat = "ID3v2" | "MP4" | "Vorbis" | "WAV";
|
|
9
|
-
export type FileTypeToTagFormat<F extends FileType> = F extends "MP3" | "AIFF" ? "ID3v2" : F extends "MP4" ? "MP4" : F extends "FLAC" | "OGG" | "OPUS" | "OggFLAC" | "SPEEX" | "MATROSKA" ? "Vorbis" : F extends "WAV" ? "WAV" : TagFormat;
|
|
9
|
+
export type FileTypeToTagFormat<F extends FileType> = F extends "MP3" | "AAC" | "AIFF" ? "ID3v2" : F extends "MP4" ? "MP4" : F extends "FLAC" | "OGG" | "OPUS" | "OggFLAC" | "SPEEX" | "MATROSKA" ? "Vorbis" : F extends "WAV" ? "WAV" : TagFormat;
|
|
10
10
|
type AllPropertyDefs = typeof import("../constants/basic-properties.js").BASIC_PROPERTIES & typeof import("../constants/general-extended-properties.js").GENERAL_EXTENDED_PROPERTIES & typeof import("../constants/specialized-properties.js").SPECIALIZED_PROPERTIES;
|
|
11
11
|
type PropertyKeysForTagFormat<TF extends TagFormat> = {
|
|
12
12
|
[K in keyof AllPropertyDefs]: TF extends AllPropertyDefs[K]["supportedFormats"][number] ? K : never;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-property-keys.d.ts","sourceRoot":"","sources":["../../../src/types/format-property-keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC;AAM3D,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"format-property-keys.d.ts","sourceRoot":"","sources":["../../../src/types/format-property-keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC;AAM3D,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,SACrD,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAC9B,CAAC,SAAS,KAAK,GAAG,KAAK,GACvB,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAClE,QAAQ,GACV,CAAC,SAAS,KAAK,GAAG,KAAK,GACvB,SAAS,CAAC;AAId,KAAK,eAAe,GAChB,cAAc,kCAAkC,EAAE,gBAAgB,GAClE,cAAc,6CAA6C,EAAE,2BAA2B,GACxF,cAAc,wCAAwC,EAAE,sBAAsB,CAAC;AAEnF,KAAK,wBAAwB,CAAC,EAAE,SAAS,SAAS,IAAI;KACnD,CAAC,IAAI,MAAM,eAAe,GAAG,EAAE,SAC9B,eAAe,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;CAC7D,CAAC,MAAM,eAAe,CAAC,CAAC;AAEzB,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,QAAQ,IAAI,wBAAwB,CAC1E,mBAAmB,CAAC,CAAC,CAAC,CACvB,CAAC"}
|
package/dist/src/types/tags.d.ts
CHANGED
|
@@ -131,6 +131,11 @@ export interface TagInput {
|
|
|
131
131
|
readonly discNumber?: number;
|
|
132
132
|
readonly totalTracks?: number;
|
|
133
133
|
readonly totalDiscs?: number;
|
|
134
|
+
/** Integer BPM. The typed surface is integer by convention — the read
|
|
135
|
+
* side narrows any wire value to its leading integer, so a fractional
|
|
136
|
+
* value is truncated toward zero on write to keep all formats in
|
|
137
|
+
* agreement (ID3v2 would store "120.5" verbatim while MP4's tmpo atom
|
|
138
|
+
* int-converts; taglib-ory8). */
|
|
134
139
|
readonly bpm?: number;
|
|
135
140
|
readonly compilation?: boolean;
|
|
136
141
|
}
|
|
@@ -198,7 +203,9 @@ export interface ExtendedTag extends Tag {
|
|
|
198
203
|
readonly totalTracks?: number;
|
|
199
204
|
/** Total discs in release */
|
|
200
205
|
readonly totalDiscs?: number;
|
|
201
|
-
/** BPM (beats per minute)
|
|
206
|
+
/** BPM (beats per minute), always an integer — the typed surface narrows
|
|
207
|
+
* to the leading integer on read and truncates fractional writes
|
|
208
|
+
* (taglib-ory8). */
|
|
202
209
|
readonly bpm?: number;
|
|
203
210
|
/** Compilation flag */
|
|
204
211
|
readonly compilation?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/types/tags.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/types/tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag-mapping.d.ts","sourceRoot":"","sources":["../../../src/utils/tag-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAqCtE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAC3B,WAAW,CA2Cb;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAiG1E;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,WAAW,EACzB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GACtB,WAAW,CAYb;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GACtB,IAAI,CAEN;AAoDD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GACvB,WAAW,
|
|
1
|
+
{"version":3,"file":"tag-mapping.d.ts","sourceRoot":"","sources":["../../../src/utils/tag-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAqCtE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAC3B,WAAW,CA2Cb;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAiG1E;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,WAAW,EACzB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GACtB,WAAW,CAYb;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GACtB,IAAI,CAEN;AAoDD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GACvB,WAAW,CA0Fb"}
|
|
@@ -185,6 +185,8 @@ function normalizeTagInput(input) {
|
|
|
185
185
|
if (val === "explicit") props.itunesAdvisory = ["1"];
|
|
186
186
|
else if (val === "clean") props.itunesAdvisory = ["2"];
|
|
187
187
|
else if (val === "unspecified") props.itunesAdvisory = [];
|
|
188
|
+
} else if (field === "bpm") {
|
|
189
|
+
props[field] = [String(Math.trunc(val))];
|
|
188
190
|
} else if (NUMERIC_FIELDS.has(field)) {
|
|
189
191
|
props[field] = [String(val)];
|
|
190
192
|
} else if (field === "r128TrackGain" || field === "r128AlbumGain") {
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "2.2.
|
|
1
|
+
export declare const VERSION = "2.2.3";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/src/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-url.d.ts","sourceRoot":"","sources":["../../../src/web-utils/data-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGxD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"data-url.d.ts","sourceRoot":"","sources":["../../../src/web-utils/data-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGxD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAazD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,WAA0B,EAChC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAqBT"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { InvalidFormatError } from "../errors/classes.js";
|
|
2
2
|
function pictureToDataURL(picture) {
|
|
3
|
+
const data = picture.data;
|
|
4
|
+
const CHUNK = 32768;
|
|
3
5
|
let binary = "";
|
|
4
|
-
for (
|
|
5
|
-
binary += String.
|
|
6
|
+
for (let i = 0; i < data.length; i += CHUNK) {
|
|
7
|
+
binary += String.fromCharCode(...data.subarray(i, i + CHUNK));
|
|
6
8
|
}
|
|
7
9
|
const base64 = btoa(binary);
|
|
8
10
|
return `data:${picture.mimeType};base64,${base64}`;
|
package/dist/taglib-wasi.wasm
CHANGED
|
Binary file
|
package/dist/taglib-web.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "taglib-wasm",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"description": "TagLib-Wasm is the universal tagging library for TypeScript/JavaScript platforms: Browsers, Node.js, Deno, Bun, Cloudflare Workers, and Electron apps",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -91,23 +91,17 @@
|
|
|
91
91
|
"build:clean": "mkdir -p dist && find dist -mindepth 1 -maxdepth 1 ! -name wasi -exec rm -rf {} +",
|
|
92
92
|
"build": "npm run build:clean && npm run build:wasm:emscripten && npm run build:copy-wasm && npm run build:ts && npm run postbuild",
|
|
93
93
|
"test": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc tests/",
|
|
94
|
-
"test:all": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc tests/index.test.ts",
|
|
95
94
|
"test:core": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc tests/taglib.test.ts",
|
|
96
95
|
"test:pictures": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc tests/picture-api.test.ts",
|
|
97
96
|
"test:edge": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc tests/edge-cases.test.ts",
|
|
98
97
|
"test:errors": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc tests/error-handling.test.ts",
|
|
99
98
|
"test:memory": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc tests/memory.test.ts",
|
|
100
99
|
"test:extended": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc tests/extended-metadata.test.ts",
|
|
101
|
-
"test:multi-runtime": "./tests/test-runtimes.sh",
|
|
102
100
|
"test:bun": "bun test tests/bun-integration.test.ts",
|
|
103
|
-
"test:
|
|
101
|
+
"test:cross-runtime": "./tests/cross-runtime/run.sh",
|
|
104
102
|
"test:watch": "deno test --allow-read --allow-write --allow-env --v8-flags=--expose-gc --watch tests/",
|
|
105
103
|
"test:coverage": "deno test --allow-read --allow-write --allow-env --coverage=coverage tests/ && deno coverage coverage",
|
|
106
104
|
"test:coverage:lcov": "deno test --allow-read --allow-write --allow-env --coverage=coverage tests/ && deno coverage coverage --lcov --output=coverage/lcov.info",
|
|
107
|
-
"test:local": "./scripts/test-local-package.sh",
|
|
108
|
-
"test:deno-quick": "./scripts/quick-deno-test.ts",
|
|
109
|
-
"test:deno-imports": "./scripts/test-deno-imports.sh",
|
|
110
|
-
"test:amusic": "./scripts/test-with-amusic.sh",
|
|
111
105
|
"test:package": "./scripts/test-npm-package.sh",
|
|
112
106
|
"docs:dev": "cd docs && npm install && npm run dev",
|
|
113
107
|
"docs:build": "cd docs && npm install && npm run build",
|
|
@@ -160,14 +154,14 @@
|
|
|
160
154
|
"@msgpack/msgpack": "^3.1.3"
|
|
161
155
|
},
|
|
162
156
|
"devDependencies": {
|
|
163
|
-
"@types/node": "^24.13.
|
|
157
|
+
"@types/node": "^24.13.5",
|
|
164
158
|
"esbuild": "^0.28.2",
|
|
165
|
-
"eslint": "^10.
|
|
166
|
-
"fast-check": "^4.
|
|
167
|
-
"knip": "^6.
|
|
168
|
-
"tsx": "^4.23.
|
|
159
|
+
"eslint": "^10.10.0",
|
|
160
|
+
"fast-check": "^4.10.1",
|
|
161
|
+
"knip": "^6.36.0",
|
|
162
|
+
"tsx": "^4.23.13",
|
|
169
163
|
"typescript": "^6.0.3",
|
|
170
|
-
"typescript-eslint": "^8.
|
|
164
|
+
"typescript-eslint": "^8.70.0"
|
|
171
165
|
},
|
|
172
166
|
"peerDependencies": {
|
|
173
167
|
"typescript": ">=4.5.0"
|