taglib-wasm 2.1.0 → 2.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.
- package/dist/index.browser.js +54 -12
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -4
- package/dist/simple.browser.js +113 -13
- package/dist/src/constants/properties.d.ts +14 -0
- package/dist/src/constants/properties.d.ts.map +1 -1
- package/dist/src/constants/specialized-properties.d.ts +14 -0
- package/dist/src/constants/specialized-properties.d.ts.map +1 -1
- package/dist/src/constants/specialized-properties.js +22 -0
- package/dist/src/folder-api/folder-operations.d.ts +2 -30
- package/dist/src/folder-api/folder-operations.d.ts.map +1 -1
- package/dist/src/folder-api/folder-operations.js +1 -36
- package/dist/src/folder-api/index.d.ts +2 -2
- package/dist/src/folder-api/index.d.ts.map +1 -1
- package/dist/src/folder-api/index.js +2 -7
- package/dist/src/folder-api/types.d.ts +0 -21
- package/dist/src/folder-api/types.d.ts.map +1 -1
- package/dist/src/folder-api/types.js +1 -13
- package/dist/src/simple/batch-operations.d.ts +74 -2
- package/dist/src/simple/batch-operations.d.ts.map +1 -1
- package/dist/src/simple/batch-operations.js +66 -6
- package/dist/src/simple/index.d.ts +2 -2
- package/dist/src/simple/index.d.ts.map +1 -1
- package/dist/src/simple/index.js +6 -2
- package/dist/src/simple/tag-operations.d.ts +5 -1
- package/dist/src/simple/tag-operations.d.ts.map +1 -1
- package/dist/src/simple/tag-operations.js +5 -2
- package/dist/src/types/metadata-mappings.d.ts +1 -1
- package/dist/src/types/metadata-mappings.d.ts.map +1 -1
- package/dist/src/types/metadata-mappings.js +5 -0
- package/dist/src/types/tags.d.ts +13 -0
- package/dist/src/types/tags.d.ts.map +1 -1
- package/dist/src/utils/tag-mapping.d.ts +9 -1
- package/dist/src/utils/tag-mapping.d.ts.map +1 -1
- package/dist/src/utils/tag-mapping.js +22 -5
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/taglib-wasi.wasm +0 -0
- package/dist/taglib-web.wasm +0 -0
- package/package.json +1 -1
|
@@ -4,15 +4,6 @@
|
|
|
4
4
|
import type { ExtendedTag, Tag, TagInput } from "../simple/index.js";
|
|
5
5
|
import type { AudioProperties } from "../types.js";
|
|
6
6
|
export type { AudioProperties, ExtendedTag, Tag, TagInput };
|
|
7
|
-
export declare const EMPTY_TAG: Readonly<{
|
|
8
|
-
title: never[];
|
|
9
|
-
artist: never[];
|
|
10
|
-
album: never[];
|
|
11
|
-
comment: never[];
|
|
12
|
-
genre: never[];
|
|
13
|
-
year: number;
|
|
14
|
-
track: number;
|
|
15
|
-
}>;
|
|
16
7
|
export declare const DEFAULT_AUDIO_EXTENSIONS: string[];
|
|
17
8
|
/**
|
|
18
9
|
* Audio dynamics data (ReplayGain and Apple Sound Check)
|
|
@@ -87,18 +78,6 @@ export interface FolderScanResult {
|
|
|
87
78
|
/** Time taken in milliseconds */
|
|
88
79
|
duration: number;
|
|
89
80
|
}
|
|
90
|
-
export type FolderUpdateItem = {
|
|
91
|
-
status: "ok";
|
|
92
|
-
path: string;
|
|
93
|
-
} | {
|
|
94
|
-
status: "error";
|
|
95
|
-
path: string;
|
|
96
|
-
error: Error;
|
|
97
|
-
};
|
|
98
|
-
export interface FolderUpdateResult {
|
|
99
|
-
items: FolderUpdateItem[];
|
|
100
|
-
duration: number;
|
|
101
|
-
}
|
|
102
81
|
export interface DuplicateGroup {
|
|
103
82
|
criteria: Record<string, string>;
|
|
104
83
|
files: AudioFileMetadata[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/folder-api/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAE5D,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/folder-api/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAE5D,eAAO,MAAM,wBAAwB,UAiBpC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,IAAI,EAAE,WAAW,CAAC;IAClB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oDAAoD;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,qEAAqE;IACrE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,CAAC;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAAG,iBAAiB,CAAC,GACtC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB"}
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
const EMPTY_TAG = Object.freeze(
|
|
2
|
-
{
|
|
3
|
-
title: [],
|
|
4
|
-
artist: [],
|
|
5
|
-
album: [],
|
|
6
|
-
comment: [],
|
|
7
|
-
genre: [],
|
|
8
|
-
year: 0,
|
|
9
|
-
track: 0
|
|
10
|
-
}
|
|
11
|
-
);
|
|
12
1
|
const DEFAULT_AUDIO_EXTENSIONS = [
|
|
13
2
|
".mp3",
|
|
14
3
|
".m4a",
|
|
@@ -28,6 +17,5 @@ const DEFAULT_AUDIO_EXTENSIONS = [
|
|
|
28
17
|
".webm"
|
|
29
18
|
];
|
|
30
19
|
export {
|
|
31
|
-
DEFAULT_AUDIO_EXTENSIONS
|
|
32
|
-
EMPTY_TAG
|
|
20
|
+
DEFAULT_AUDIO_EXTENSIONS
|
|
33
21
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { AudioFile } from "../taglib.js";
|
|
1
2
|
import type { AudioDynamics } from "../folder-api/types.js";
|
|
2
|
-
import type { AudioFileInput, AudioProperties, ExtendedTag } from "../types.js";
|
|
3
|
+
import type { AudioFileInput, AudioProperties, ExtendedTag, TagInput } from "../types.js";
|
|
3
4
|
/** Configuration for batch processing operations. */
|
|
4
5
|
export interface BatchOptions {
|
|
5
6
|
concurrency?: number;
|
|
@@ -7,6 +8,13 @@ export interface BatchOptions {
|
|
|
7
8
|
onProgress?: (processed: number, total: number, currentFile: string) => void;
|
|
8
9
|
/** AbortSignal to cancel the batch operation between chunks. */
|
|
9
10
|
signal?: AbortSignal;
|
|
11
|
+
/**
|
|
12
|
+
* Raw WIRE keys (e.g. "CATALOGNUMBER") to surface per item under
|
|
13
|
+
* `extraProperties`, for keys outside the modeled typed set (taglib-3s1f).
|
|
14
|
+
* The PropertyMap is already fetched per file, so this costs no extra
|
|
15
|
+
* opens on either backend. Absent keys are omitted, not empty arrays.
|
|
16
|
+
*/
|
|
17
|
+
includeProperties?: string[];
|
|
10
18
|
}
|
|
11
19
|
/** Discriminated union result for a single file in a batch operation. */
|
|
12
20
|
export type BatchItem<T> = {
|
|
@@ -52,10 +60,14 @@ export interface FileMetadata {
|
|
|
52
60
|
* Read complete metadata (tags, properties, cover art, dynamics) from a single file.
|
|
53
61
|
*
|
|
54
62
|
* @param file - A file path, Uint8Array, ArrayBuffer, File object, or NamedAudioInput.
|
|
63
|
+
* @param options - Read options; `includeProperties` (wire keys) surfaces raw
|
|
64
|
+
* values in `tags.extraProperties` (taglib-3s1f).
|
|
55
65
|
* @returns The file's complete metadata.
|
|
56
66
|
* @throws `InvalidFormatError` if the file is corrupted or in an unsupported format.
|
|
57
67
|
*/
|
|
58
|
-
export declare function readMetadata(file: AudioFileInput
|
|
68
|
+
export declare function readMetadata(file: AudioFileInput, options?: {
|
|
69
|
+
includeProperties?: string[];
|
|
70
|
+
}): Promise<FileMetadata>;
|
|
59
71
|
/**
|
|
60
72
|
* Read complete metadata from multiple files with configurable concurrency.
|
|
61
73
|
*
|
|
@@ -65,4 +77,64 @@ export declare function readMetadata(file: AudioFileInput): Promise<FileMetadata
|
|
|
65
77
|
* @throws If `continueOnError` is `false` and any file fails to process.
|
|
66
78
|
*/
|
|
67
79
|
export declare function readMetadataBatch(files: AudioFileInput[], options?: BatchOptions): Promise<BatchResult<FileMetadata>>;
|
|
80
|
+
/** One file to update in a {@link writeTagsBatch} call. */
|
|
81
|
+
export interface WriteTagUpdate {
|
|
82
|
+
/** File path on disk; the file is updated in place. */
|
|
83
|
+
path: string;
|
|
84
|
+
/**
|
|
85
|
+
* Partial typed tag fields to merge with the file's existing metadata. An
|
|
86
|
+
* empty object performs a save with no tag changes (a no-op rewrite).
|
|
87
|
+
*/
|
|
88
|
+
tags?: Partial<TagInput>;
|
|
89
|
+
/**
|
|
90
|
+
* Raw WIRE-key map, merged verbatim — the same shape and rule as the Full
|
|
91
|
+
* API's `setProperties` (taglib-pmhp review): keys outside the typed
|
|
92
|
+
* TagInput surface (barcode, unmodeled TXXX fields) ride here, and an
|
|
93
|
+
* EMPTY ARRAY removes the key (the qyw2/nc5 clearing contract; no
|
|
94
|
+
* empty-string carrier). Applied in the same single save as `tags`;
|
|
95
|
+
* entries here take precedence over `tags` for the same normalized key.
|
|
96
|
+
* Writes are verbatim: unlike the typed `tags` channel (which clears the
|
|
97
|
+
* legacy YEAR field when DATE is set), a raw `properties` write does not
|
|
98
|
+
* reconcile related keys — exactly like the Full API's `setProperties`.
|
|
99
|
+
*/
|
|
100
|
+
properties?: Record<string, string[]>;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Apply tag updates to multiple files with configurable concurrency.
|
|
104
|
+
*
|
|
105
|
+
* The batch write counterpart to {@link readTagsBatch}: same
|
|
106
|
+
* {@link BatchOptions} contract (concurrency, continueOnError, onProgress,
|
|
107
|
+
* signal). Each file is updated in ONE save via a single `setProperties`
|
|
108
|
+
* fold: the typed `tags` merge ({@link mergeTagUpdatesInto} — the same
|
|
109
|
+
* semantics as {@link applyTagsToFile}) plus the raw wire-key `properties`
|
|
110
|
+
* entries. Atomic temp-file save, so a failed file is left in its pre-write
|
|
111
|
+
* state.
|
|
112
|
+
*
|
|
113
|
+
* @param updates - Per-file tag updates; a path may appear more than once
|
|
114
|
+
* (the last update for a path wins).
|
|
115
|
+
* @param options - Batch processing options (concurrency, error handling,
|
|
116
|
+
* progress, abort).
|
|
117
|
+
* @returns A `BatchItem` per update in input order plus total duration in ms.
|
|
118
|
+
* @throws If `continueOnError` is `false` and any file fails to process.
|
|
119
|
+
*/
|
|
120
|
+
export declare function writeTagsBatch(updates: WriteTagUpdate[], options?: BatchOptions): Promise<BatchResult<void>>;
|
|
121
|
+
/**
|
|
122
|
+
* Open, mutate, and save multiple files with configurable concurrency.
|
|
123
|
+
*
|
|
124
|
+
* Mutator-callback variant of {@link writeTagsBatch}: the callback receives
|
|
125
|
+
* the open {@link AudioFile} (Full-API style) plus the `path` it was opened
|
|
126
|
+
* from — the pair is a per-invocation contract, so precomputed per-path
|
|
127
|
+
* plans can be looked up without relying on invocation order (taglib-pmhp
|
|
128
|
+
* review). A one-argument mutator keeps working. Changes are saved per file;
|
|
129
|
+
* same {@link BatchOptions} contract and atomicity guarantees.
|
|
130
|
+
*
|
|
131
|
+
* @param files - File paths on disk, updated in place.
|
|
132
|
+
* @param mutator - Called once per file with the open audio file and its
|
|
133
|
+
* path; changes are saved automatically.
|
|
134
|
+
* @param options - Batch processing options (concurrency, error handling,
|
|
135
|
+
* progress, abort).
|
|
136
|
+
* @returns A `BatchItem` per file in input order plus total duration in ms.
|
|
137
|
+
* @throws If `continueOnError` is `false` and any file fails to process.
|
|
138
|
+
*/
|
|
139
|
+
export declare function editTagsBatch(files: string[], mutator: (audioFile: AudioFile, path: string) => void, options?: BatchOptions): Promise<BatchResult<void>>;
|
|
68
140
|
//# sourceMappingURL=batch-operations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-operations.d.ts","sourceRoot":"","sources":["../../../src/simple/batch-operations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"batch-operations.d.ts","sourceRoot":"","sources":["../../../src/simple/batch-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { isNamedAudioInput } from "../types/audio-formats.js";
|
|
2
2
|
import { InvalidFormatError } from "../errors.js";
|
|
3
|
-
import {
|
|
3
|
+
import { fromTagLibKey } from "../constants/properties.js";
|
|
4
|
+
import { mergeTagUpdatesInto, readExtendedTag } from "../utils/tag-mapping.js";
|
|
5
|
+
import { withAudioFileSaveToFile } from "./with-audio-file.js";
|
|
4
6
|
import { getTagLib } from "./config.js";
|
|
5
7
|
async function executeBatch(files, options, processor) {
|
|
6
8
|
if (files.length === 0) return { items: [], duration: 0 };
|
|
@@ -48,7 +50,7 @@ async function readTagsBatch(files, options = {}) {
|
|
|
48
50
|
return executeBatch(
|
|
49
51
|
files,
|
|
50
52
|
options,
|
|
51
|
-
(audioFile) => readExtendedTag(audioFile)
|
|
53
|
+
(audioFile) => readExtendedTag(audioFile, options.includeProperties)
|
|
52
54
|
);
|
|
53
55
|
}
|
|
54
56
|
async function readPropertiesBatch(files, options = {}) {
|
|
@@ -77,7 +79,7 @@ function extractDynamics(audioFile) {
|
|
|
77
79
|
if (appleSoundCheck) dynamics.appleSoundCheck = appleSoundCheck;
|
|
78
80
|
return Object.keys(dynamics).length > 0 ? dynamics : void 0;
|
|
79
81
|
}
|
|
80
|
-
async function readMetadata(file) {
|
|
82
|
+
async function readMetadata(file, options = {}) {
|
|
81
83
|
const taglib = await getTagLib();
|
|
82
84
|
const audioFile = await taglib.open(file);
|
|
83
85
|
try {
|
|
@@ -98,7 +100,7 @@ async function readMetadata(file) {
|
|
|
98
100
|
}
|
|
99
101
|
const dynamics = extractDynamics(audioFile);
|
|
100
102
|
return {
|
|
101
|
-
tags: readExtendedTag(audioFile),
|
|
103
|
+
tags: readExtendedTag(audioFile, options.includeProperties),
|
|
102
104
|
properties: audioFile.audioProperties(),
|
|
103
105
|
hasCoverArt: audioFile.getPictures().length > 0,
|
|
104
106
|
...dynamics !== void 0 ? { dynamics } : {}
|
|
@@ -111,16 +113,74 @@ async function readMetadataBatch(files, options = {}) {
|
|
|
111
113
|
return executeBatch(files, options, (audioFile) => {
|
|
112
114
|
const dynamics = extractDynamics(audioFile);
|
|
113
115
|
return {
|
|
114
|
-
tags: readExtendedTag(audioFile),
|
|
116
|
+
tags: readExtendedTag(audioFile, options.includeProperties),
|
|
115
117
|
properties: audioFile.audioProperties(),
|
|
116
118
|
hasCoverArt: audioFile.getPictures().length > 0,
|
|
117
119
|
...dynamics !== void 0 ? { dynamics } : {}
|
|
118
120
|
};
|
|
119
121
|
});
|
|
120
122
|
}
|
|
123
|
+
function entryPath(entry) {
|
|
124
|
+
return typeof entry === "string" ? entry : entry.path;
|
|
125
|
+
}
|
|
126
|
+
async function executeWriteBatch(entries, options, writer) {
|
|
127
|
+
if (entries.length === 0) return { items: [], duration: 0 };
|
|
128
|
+
await getTagLib();
|
|
129
|
+
const startTime = Date.now();
|
|
130
|
+
const { concurrency = 4, continueOnError = true, onProgress, signal } = options;
|
|
131
|
+
const items = new Array(entries.length);
|
|
132
|
+
let processed = 0;
|
|
133
|
+
const total = entries.length;
|
|
134
|
+
for (let i = 0; i < entries.length; i += concurrency) {
|
|
135
|
+
signal?.throwIfAborted();
|
|
136
|
+
const chunk = entries.slice(i, i + concurrency);
|
|
137
|
+
const chunkPromises = chunk.map(async (entry, idx) => {
|
|
138
|
+
const index = i + idx;
|
|
139
|
+
const path = entryPath(entry);
|
|
140
|
+
try {
|
|
141
|
+
await writer(path);
|
|
142
|
+
items[index] = { status: "ok", path, data: void 0 };
|
|
143
|
+
} catch (error) {
|
|
144
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
145
|
+
items[index] = { status: "error", path, error: err };
|
|
146
|
+
if (!continueOnError) throw err;
|
|
147
|
+
}
|
|
148
|
+
processed++;
|
|
149
|
+
onProgress?.(processed, total, path);
|
|
150
|
+
});
|
|
151
|
+
await Promise.all(chunkPromises);
|
|
152
|
+
}
|
|
153
|
+
return { items, duration: Date.now() - startTime };
|
|
154
|
+
}
|
|
155
|
+
async function writeTagsBatch(updates, options = {}) {
|
|
156
|
+
const byPath = new Map(updates.map((u) => [u.path, u]));
|
|
157
|
+
return executeWriteBatch(
|
|
158
|
+
updates,
|
|
159
|
+
options,
|
|
160
|
+
(path) => withAudioFileSaveToFile(path, (audioFile) => {
|
|
161
|
+
const update = byPath.get(path);
|
|
162
|
+
const merged = update.tags !== void 0 ? mergeTagUpdatesInto(audioFile.properties(), update.tags) : audioFile.properties();
|
|
163
|
+
if (update.properties !== void 0) {
|
|
164
|
+
for (const [key, values] of Object.entries(update.properties)) {
|
|
165
|
+
merged[fromTagLibKey(key)] = values;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
audioFile.setProperties(merged);
|
|
169
|
+
})
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
async function editTagsBatch(files, mutator, options = {}) {
|
|
173
|
+
return executeWriteBatch(
|
|
174
|
+
files,
|
|
175
|
+
options,
|
|
176
|
+
(path) => withAudioFileSaveToFile(path, (audioFile) => mutator(audioFile, path))
|
|
177
|
+
);
|
|
178
|
+
}
|
|
121
179
|
export {
|
|
180
|
+
editTagsBatch,
|
|
122
181
|
readMetadata,
|
|
123
182
|
readMetadataBatch,
|
|
124
183
|
readPropertiesBatch,
|
|
125
|
-
readTagsBatch
|
|
184
|
+
readTagsBatch,
|
|
185
|
+
writeTagsBatch
|
|
126
186
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { getTagLib, setBufferMode } from "./config.js";
|
|
2
2
|
export { applyTags, applyTagsToFile, clearTags, isValidAudioFile, readFormat, readProperties, readTags, } from "./tag-operations.js";
|
|
3
3
|
export { addPicture, applyCoverArt, applyPictures, clearPictures, findPictureByType, readCoverArt, readPictureMetadata, readPictures, replacePictureByType, } from "./picture-operations.js";
|
|
4
|
-
export { readMetadata, readMetadataBatch, readPropertiesBatch, readTagsBatch, } from "./batch-operations.js";
|
|
5
|
-
export type { BatchItem, BatchOptions, BatchResult, FileMetadata, } from "./batch-operations.js";
|
|
4
|
+
export { editTagsBatch, readMetadata, readMetadataBatch, readPropertiesBatch, readTagsBatch, writeTagsBatch, } from "./batch-operations.js";
|
|
5
|
+
export type { BatchItem, BatchOptions, BatchResult, FileMetadata, WriteTagUpdate, } from "./batch-operations.js";
|
|
6
6
|
export type { AudioProperties, ExtendedTag, Picture, PictureType, Tag, TagInput, } from "../types.js";
|
|
7
7
|
export { PICTURE_TYPE_NAMES, PICTURE_TYPE_VALUES } from "../types.js";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/simple/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACL,SAAS,EACT,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/simple/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACL,SAAS,EACT,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,eAAe,EACf,WAAW,EACX,OAAO,EACP,WAAW,EACX,GAAG,EACH,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/src/simple/index.js
CHANGED
|
@@ -20,10 +20,12 @@ import {
|
|
|
20
20
|
replacePictureByType
|
|
21
21
|
} from "./picture-operations.js";
|
|
22
22
|
import {
|
|
23
|
+
editTagsBatch,
|
|
23
24
|
readMetadata,
|
|
24
25
|
readMetadataBatch,
|
|
25
26
|
readPropertiesBatch,
|
|
26
|
-
readTagsBatch
|
|
27
|
+
readTagsBatch,
|
|
28
|
+
writeTagsBatch
|
|
27
29
|
} from "./batch-operations.js";
|
|
28
30
|
import { PICTURE_TYPE_NAMES, PICTURE_TYPE_VALUES } from "../types.js";
|
|
29
31
|
export {
|
|
@@ -36,6 +38,7 @@ export {
|
|
|
36
38
|
applyTagsToFile,
|
|
37
39
|
clearPictures,
|
|
38
40
|
clearTags,
|
|
41
|
+
editTagsBatch,
|
|
39
42
|
findPictureByType,
|
|
40
43
|
getTagLib,
|
|
41
44
|
isValidAudioFile,
|
|
@@ -50,5 +53,6 @@ export {
|
|
|
50
53
|
readTags,
|
|
51
54
|
readTagsBatch,
|
|
52
55
|
replacePictureByType,
|
|
53
|
-
setBufferMode
|
|
56
|
+
setBufferMode,
|
|
57
|
+
writeTagsBatch
|
|
54
58
|
};
|
|
@@ -3,11 +3,15 @@ import type { AudioFileInput, AudioProperties, ExtendedTag, FileType, TagInput }
|
|
|
3
3
|
* Reads all metadata tags from an audio file.
|
|
4
4
|
*
|
|
5
5
|
* @param file - File path, Uint8Array, ArrayBuffer, or File object
|
|
6
|
+
* @param options - Read options; `includeProperties` (wire keys) surfaces raw
|
|
7
|
+
* values in `extraProperties` (taglib-3s1f)
|
|
6
8
|
* @returns Parsed tag fields including extended metadata from the audio file
|
|
7
9
|
* @throws {TagLibInitializationError} If the Wasm module fails to initialize
|
|
8
10
|
* @throws {InvalidFormatError} If the file is corrupted or in an unsupported format
|
|
9
11
|
*/
|
|
10
|
-
export declare function readTags(file: AudioFileInput
|
|
12
|
+
export declare function readTags(file: AudioFileInput, options?: {
|
|
13
|
+
includeProperties?: string[];
|
|
14
|
+
}): Promise<ExtendedTag>;
|
|
11
15
|
/**
|
|
12
16
|
* Applies metadata tag changes to an audio file and returns the modified content as a buffer.
|
|
13
17
|
*
|
|
@@ -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,EAER,QAAQ,EACT,MAAM,aAAa,CAAC;AAWrB
|
|
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;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC7C,OAAO,CAAC,WAAW,CAAC,CAKtB;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"}
|
|
@@ -6,8 +6,11 @@ import {
|
|
|
6
6
|
withAudioFileSave,
|
|
7
7
|
withAudioFileSaveToFile
|
|
8
8
|
} from "./with-audio-file.js";
|
|
9
|
-
async function readTags(file) {
|
|
10
|
-
return withAudioFile(
|
|
9
|
+
async function readTags(file, options = {}) {
|
|
10
|
+
return withAudioFile(
|
|
11
|
+
file,
|
|
12
|
+
(audioFile) => readExtendedTag(audioFile, options.includeProperties)
|
|
13
|
+
);
|
|
11
14
|
}
|
|
12
15
|
async function applyTags(file, tags) {
|
|
13
16
|
return withAudioFileSave(file, (audioFile) => {
|
|
@@ -42,5 +42,5 @@ export interface FieldMapping {
|
|
|
42
42
|
* const vorbisField = METADATA_MAPPINGS.albumArtist.vorbis; // "ALBUMARTIST"
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
|
-
export declare const METADATA_MAPPINGS: Record<Exclude<keyof ExtendedTag, "pictures" | "ratings" | "lyrics" | "chapters" | "bext" | "bextData" | "ixml" | "id3v2Frames" | "advisory">, FieldMapping>;
|
|
45
|
+
export declare const METADATA_MAPPINGS: Record<Exclude<keyof ExtendedTag, "pictures" | "ratings" | "lyrics" | "chapters" | "bext" | "bextData" | "ixml" | "id3v2Frames" | "advisory" | "extraProperties">, FieldMapping>;
|
|
46
46
|
//# sourceMappingURL=metadata-mappings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-mappings.d.ts","sourceRoot":"","sources":["../../../src/types/metadata-mappings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,OAAO,CACL,MAAM,WAAW,EACf,UAAU,GACV,SAAS,GACT,QAAQ,GACR,UAAU,GACV,MAAM,GACN,UAAU,GACV,MAAM,GACN,aAAa,GAGb,UAAU,
|
|
1
|
+
{"version":3,"file":"metadata-mappings.d.ts","sourceRoot":"","sources":["../../../src/types/metadata-mappings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,OAAO,CACL,MAAM,WAAW,EACf,UAAU,GACV,SAAS,GACT,QAAQ,GACR,UAAU,GACV,MAAM,GACN,UAAU,GACV,MAAM,GACN,aAAa,GAGb,UAAU,GAGV,iBAAiB,CACpB,EACD,YAAY,CAuPb,CAAC"}
|
|
@@ -223,6 +223,11 @@ const METADATA_MAPPINGS = {
|
|
|
223
223
|
vorbis: "RELEASETYPE",
|
|
224
224
|
mp4: "----:com.apple.iTunes:MusicBrainz Album Type"
|
|
225
225
|
},
|
|
226
|
+
releaseCountry: {
|
|
227
|
+
id3v2: { frame: "TXXX", description: "MUSICBRAINZ ALBUM RELEASE COUNTRY" },
|
|
228
|
+
vorbis: "RELEASECOUNTRY",
|
|
229
|
+
mp4: "----:com.apple.iTunes:MusicBrainz Album Release Country"
|
|
230
|
+
},
|
|
226
231
|
itunesAdvisory: {
|
|
227
232
|
id3v2: { frame: "TXXX", description: "ITUNESADVISORY" },
|
|
228
233
|
vorbis: "ITUNESADVISORY",
|
package/dist/src/types/tags.d.ts
CHANGED
|
@@ -111,6 +111,8 @@ export interface TagInput {
|
|
|
111
111
|
readonly musicbrainzReleaseGroupId?: string | string[];
|
|
112
112
|
/** Release type (album, single, EP, compilation, ...); multi-value allowed */
|
|
113
113
|
readonly releaseType?: string | string[];
|
|
114
|
+
/** Release country (ISO 3166-1 code, e.g. "US"); multi-value allowed */
|
|
115
|
+
readonly releaseCountry?: string | string[];
|
|
114
116
|
/** Content advisory in the ITUNESADVISORY convention ('1' = explicit, '2' = clean, '0' = unspecified) */
|
|
115
117
|
readonly itunesAdvisory?: string | string[];
|
|
116
118
|
/**
|
|
@@ -176,6 +178,8 @@ export interface ExtendedTag extends Tag {
|
|
|
176
178
|
readonly musicbrainzReleaseGroupId?: string[];
|
|
177
179
|
/** Release type (album, single, EP, compilation, ...); multi-value */
|
|
178
180
|
readonly releaseType?: string[];
|
|
181
|
+
/** Release country (ISO 3166-1 code, e.g. "US"); multi-value */
|
|
182
|
+
readonly releaseCountry?: string[];
|
|
179
183
|
/** Content advisory in the ITUNESADVISORY convention ('1' = explicit, '2' = clean, '0' = unspecified) */
|
|
180
184
|
readonly itunesAdvisory?: string[];
|
|
181
185
|
/**
|
|
@@ -261,6 +265,15 @@ export interface ExtendedTag extends Tag {
|
|
|
261
265
|
readonly bextData?: Uint8Array;
|
|
262
266
|
/** Raw iXML chunk as a string. WAV and FLAC only. */
|
|
263
267
|
readonly ixml?: string;
|
|
268
|
+
/**
|
|
269
|
+
* Raw wire-key values requested via `includeProperties` (taglib-3s1f):
|
|
270
|
+
* keys outside the modeled typed set surface here under their exact WIRE
|
|
271
|
+
* names (e.g. `{ CATALOGNUMBER: ["LC1234"] }`). Present only when the read
|
|
272
|
+
* was asked for them; absent keys are omitted. Never written back —
|
|
273
|
+
* `normalizeTagInput` ignores it, so a readTags() -> applyTags() round-trip
|
|
274
|
+
* cannot create an EXTRAPROPERTIES tag.
|
|
275
|
+
*/
|
|
276
|
+
readonly extraProperties?: Record<string, string[]>;
|
|
264
277
|
/** Staged raw ID3v2 frame replacements: frame ID → list of body byte arrays. */
|
|
265
278
|
id3v2Frames?: Record<string, Uint8Array[]>;
|
|
266
279
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/types/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,GAAG;IAClB,kBAAkB;IAClB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB;IACjB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc;IACd,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY;IACZ,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW;IACX,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ;IACvB,kBAAkB;IAClB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,kBAAkB;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACpC,iBAAiB;IACjB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,cAAc;IACd,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACrC,YAAY;IACZ,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,WAAW;IACX,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,mBAAmB;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAGzC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvD,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,yGAAyG;IACzG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5C;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,aAAa,CAAC;IACzD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAIjD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAG3C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,yCAAyC;IACzC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,oBAAoB;IACpB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,2BAA2B;IAC3B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IACvC,6BAA6B;IAC7B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IACzC,4BAA4B;IAC5B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,mCAAmC;IACnC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9C,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,yGAAyG;IACzG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,aAAa,CAAC;IACzD,iDAAiD;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe;IACf,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB;IAClB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4BAA4B;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,6BAA6B;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,6BAA6B;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,wCAAwC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,gBAAgB;IAChB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB;IAChB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB;IACjB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe;IACf,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,mBAAmB;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe;IACf,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,yCAAyC;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,4BAA4B;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAGjC,qDAAqD;IACrD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,4CAA4C;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,kCAAkC;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,4CAA4C;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAKxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAGhC,sDAAsD;IACtD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,eAAe,EAAE,OAAO,EAAE,CAAC;IACtD,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,oCAAoC,EAAE,MAAM,EAAE,CAAC;IACzE,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EACd,OAAO,oCAAoC,EAAE,cAAc,EAAE,CAAC;IAChE;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,eAAe,EAAE,OAAO,EAAE,CAAC;IACtD,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,UAAU,EAAE,uBAAuB,CAAC;IAC3D,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,WAAW,GACnB;KAAG,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE;CAAE,GACjC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/types/tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,16 @@ import type { ExtendedTag, PropertyMap, TagInput } from "../types.js";
|
|
|
8
8
|
* (taglib-0co). Each field is included only when present, mirroring how
|
|
9
9
|
* {@link mapPropertiesToExtendedTag} omits absent text properties.
|
|
10
10
|
*/
|
|
11
|
-
export declare function readExtendedTag(audioFile: AudioFile): ExtendedTag;
|
|
11
|
+
export declare function readExtendedTag(audioFile: AudioFile, includeProperties?: string[]): ExtendedTag;
|
|
12
12
|
export declare function mapPropertiesToExtendedTag(props: PropertyMap): ExtendedTag;
|
|
13
|
+
/**
|
|
14
|
+
* Pure read-modify-write merge of typed tag input into an existing property
|
|
15
|
+
* map, WITHOUT touching the file. Shared by {@link mergeTagUpdates} (the
|
|
16
|
+
* single-file path) and the batch writer, which must fold raw wire-key
|
|
17
|
+
* entries and removals into the SAME map so one `setProperties` call reaches
|
|
18
|
+
* the replace-style Emscripten backend (taglib-pmhp review).
|
|
19
|
+
*/
|
|
20
|
+
export declare function mergeTagUpdatesInto(currentProps: PropertyMap, tags: Partial<TagInput>): PropertyMap;
|
|
13
21
|
export declare function mergeTagUpdates(file: AudioFile, tags: Partial<TagInput>): void;
|
|
14
22
|
export declare function normalizeTagInput(input: Partial<TagInput>): PropertyMap;
|
|
15
23
|
//# sourceMappingURL=tag-mapping.d.ts.map
|
|
@@ -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,
|
|
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,CA+Eb"}
|
|
@@ -28,8 +28,9 @@ const NUMERIC_FIELDS = /* @__PURE__ */ new Set([
|
|
|
28
28
|
"totalDiscs",
|
|
29
29
|
"bpm"
|
|
30
30
|
]);
|
|
31
|
-
function readExtendedTag(audioFile) {
|
|
32
|
-
const
|
|
31
|
+
function readExtendedTag(audioFile, includeProperties) {
|
|
32
|
+
const props = audioFile.properties();
|
|
33
|
+
const tag = mapPropertiesToExtendedTag(props);
|
|
33
34
|
const pictures = audioFile.getPictures();
|
|
34
35
|
if (pictures.length > 0) tag.pictures = pictures;
|
|
35
36
|
const ratings = audioFile.getRatings();
|
|
@@ -44,6 +45,18 @@ function readExtendedTag(audioFile) {
|
|
|
44
45
|
if (bextData !== void 0) tag.bextData = bextData;
|
|
45
46
|
const ixml = audioFile.getIxml();
|
|
46
47
|
if (ixml !== void 0) tag.ixml = ixml;
|
|
48
|
+
if (includeProperties !== void 0 && includeProperties.length > 0) {
|
|
49
|
+
const extraProperties = {};
|
|
50
|
+
for (const wireKey of includeProperties) {
|
|
51
|
+
const values = props[fromTagLibKey(wireKey)]?.filter((v) => v !== "");
|
|
52
|
+
if (values !== void 0 && values.length > 0) {
|
|
53
|
+
extraProperties[wireKey] = values;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (Object.keys(extraProperties).length > 0) {
|
|
57
|
+
tag.extraProperties = extraProperties;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
47
60
|
return tag;
|
|
48
61
|
}
|
|
49
62
|
function mapPropertiesToExtendedTag(props) {
|
|
@@ -107,14 +120,16 @@ function mapPropertiesToExtendedTag(props) {
|
|
|
107
120
|
}
|
|
108
121
|
return tag;
|
|
109
122
|
}
|
|
110
|
-
function
|
|
111
|
-
const currentProps = file.properties();
|
|
123
|
+
function mergeTagUpdatesInto(currentProps, tags) {
|
|
112
124
|
const newProps = normalizeTagInput(tags);
|
|
113
125
|
reconcilePairFields(currentProps, newProps, tags);
|
|
114
126
|
if (newProps.date !== void 0 || newProps.year !== void 0) {
|
|
115
127
|
currentProps.YEAR = [];
|
|
116
128
|
}
|
|
117
|
-
|
|
129
|
+
return { ...currentProps, ...newProps };
|
|
130
|
+
}
|
|
131
|
+
function mergeTagUpdates(file, tags) {
|
|
132
|
+
file.setProperties(mergeTagUpdatesInto(file.properties(), tags));
|
|
118
133
|
}
|
|
119
134
|
function reconcilePairFields(currentProps, newProps, input) {
|
|
120
135
|
const pairs = [
|
|
@@ -163,6 +178,7 @@ function normalizeTagInput(input) {
|
|
|
163
178
|
}
|
|
164
179
|
for (const [field, val] of Object.entries(input)) {
|
|
165
180
|
if (BASIC_FIELDS.has(field) || val === void 0) continue;
|
|
181
|
+
if (field === "extraProperties") continue;
|
|
166
182
|
if (field === "compilation") {
|
|
167
183
|
props[field] = [val ? "1" : "0"];
|
|
168
184
|
} else if (field === "advisory") {
|
|
@@ -190,6 +206,7 @@ function normalizeTagInput(input) {
|
|
|
190
206
|
export {
|
|
191
207
|
mapPropertiesToExtendedTag,
|
|
192
208
|
mergeTagUpdates,
|
|
209
|
+
mergeTagUpdatesInto,
|
|
193
210
|
normalizeTagInput,
|
|
194
211
|
readExtendedTag
|
|
195
212
|
};
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "2.1
|
|
1
|
+
export declare const VERSION = "2.2.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/src/version.js
CHANGED
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.1
|
|
3
|
+
"version": "2.2.1",
|
|
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",
|