@kenzuya/mediabunny 1.26.0 → 1.28.5
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/README.md +1 -1
- package/dist/bundles/{mediabunny.mjs → mediabunny.js} +21963 -21388
- package/dist/bundles/mediabunny.min.js +490 -0
- package/dist/modules/shared/mp3-misc.d.ts.map +1 -1
- package/dist/modules/src/adts/adts-demuxer.d.ts +6 -6
- package/dist/modules/src/adts/adts-demuxer.d.ts.map +1 -1
- package/dist/modules/src/adts/adts-muxer.d.ts +4 -4
- package/dist/modules/src/adts/adts-muxer.d.ts.map +1 -1
- package/dist/modules/src/adts/adts-reader.d.ts +1 -1
- package/dist/modules/src/adts/adts-reader.d.ts.map +1 -1
- package/dist/modules/src/avi/avi-demuxer.d.ts +44 -0
- package/dist/modules/src/avi/avi-demuxer.d.ts.map +1 -0
- package/dist/modules/src/avi/avi-misc.d.ts +88 -0
- package/dist/modules/src/avi/avi-misc.d.ts.map +1 -0
- package/dist/modules/src/avi/avi-muxer.d.ts +45 -0
- package/dist/modules/src/avi/avi-muxer.d.ts.map +1 -0
- package/dist/modules/src/avi/riff-writer.d.ts +26 -0
- package/dist/modules/src/avi/riff-writer.d.ts.map +1 -0
- package/dist/modules/src/codec-data.d.ts +8 -3
- package/dist/modules/src/codec-data.d.ts.map +1 -1
- package/dist/modules/src/codec.d.ts +10 -10
- package/dist/modules/src/codec.d.ts.map +1 -1
- package/dist/modules/src/conversion.d.ts +33 -16
- package/dist/modules/src/conversion.d.ts.map +1 -1
- package/dist/modules/src/custom-coder.d.ts +8 -8
- package/dist/modules/src/custom-coder.d.ts.map +1 -1
- package/dist/modules/src/demuxer.d.ts +3 -3
- package/dist/modules/src/demuxer.d.ts.map +1 -1
- package/dist/modules/src/encode.d.ts +8 -8
- package/dist/modules/src/encode.d.ts.map +1 -1
- package/dist/modules/src/flac/flac-demuxer.d.ts +7 -7
- package/dist/modules/src/flac/flac-demuxer.d.ts.map +1 -1
- package/dist/modules/src/flac/flac-misc.d.ts +3 -3
- package/dist/modules/src/flac/flac-misc.d.ts.map +1 -1
- package/dist/modules/src/flac/flac-muxer.d.ts +5 -5
- package/dist/modules/src/flac/flac-muxer.d.ts.map +1 -1
- package/dist/modules/src/id3.d.ts +3 -3
- package/dist/modules/src/id3.d.ts.map +1 -1
- package/dist/modules/src/index.d.ts +20 -20
- package/dist/modules/src/index.d.ts.map +1 -1
- package/dist/modules/src/input-format.d.ts +22 -0
- package/dist/modules/src/input-format.d.ts.map +1 -1
- package/dist/modules/src/input-track.d.ts +8 -8
- package/dist/modules/src/input-track.d.ts.map +1 -1
- package/dist/modules/src/input.d.ts +12 -12
- package/dist/modules/src/isobmff/isobmff-boxes.d.ts +2 -2
- package/dist/modules/src/isobmff/isobmff-boxes.d.ts.map +1 -1
- package/dist/modules/src/isobmff/isobmff-demuxer.d.ts +12 -12
- package/dist/modules/src/isobmff/isobmff-demuxer.d.ts.map +1 -1
- package/dist/modules/src/isobmff/isobmff-misc.d.ts.map +1 -1
- package/dist/modules/src/isobmff/isobmff-muxer.d.ts +11 -11
- package/dist/modules/src/isobmff/isobmff-muxer.d.ts.map +1 -1
- package/dist/modules/src/isobmff/isobmff-reader.d.ts +2 -2
- package/dist/modules/src/isobmff/isobmff-reader.d.ts.map +1 -1
- package/dist/modules/src/matroska/ebml.d.ts +3 -3
- package/dist/modules/src/matroska/ebml.d.ts.map +1 -1
- package/dist/modules/src/matroska/matroska-demuxer.d.ts +13 -13
- package/dist/modules/src/matroska/matroska-demuxer.d.ts.map +1 -1
- package/dist/modules/src/matroska/matroska-input.d.ts +33 -0
- package/dist/modules/src/matroska/matroska-input.d.ts.map +1 -0
- package/dist/modules/src/matroska/matroska-misc.d.ts.map +1 -1
- package/dist/modules/src/matroska/matroska-muxer.d.ts +5 -5
- package/dist/modules/src/matroska/matroska-muxer.d.ts.map +1 -1
- package/dist/modules/src/media-sink.d.ts +5 -5
- package/dist/modules/src/media-sink.d.ts.map +1 -1
- package/dist/modules/src/media-source.d.ts +22 -4
- package/dist/modules/src/media-source.d.ts.map +1 -1
- package/dist/modules/src/metadata.d.ts +2 -2
- package/dist/modules/src/metadata.d.ts.map +1 -1
- package/dist/modules/src/misc.d.ts +5 -4
- package/dist/modules/src/misc.d.ts.map +1 -1
- package/dist/modules/src/mp3/mp3-demuxer.d.ts +7 -7
- package/dist/modules/src/mp3/mp3-demuxer.d.ts.map +1 -1
- package/dist/modules/src/mp3/mp3-muxer.d.ts +4 -4
- package/dist/modules/src/mp3/mp3-muxer.d.ts.map +1 -1
- package/dist/modules/src/mp3/mp3-reader.d.ts +2 -2
- package/dist/modules/src/mp3/mp3-reader.d.ts.map +1 -1
- package/dist/modules/src/mp3/mp3-writer.d.ts +1 -1
- package/dist/modules/src/mp3/mp3-writer.d.ts.map +1 -1
- package/dist/modules/src/muxer.d.ts +4 -4
- package/dist/modules/src/muxer.d.ts.map +1 -1
- package/dist/modules/src/node.d.ts +1 -1
- package/dist/modules/src/ogg/ogg-demuxer.d.ts +7 -7
- package/dist/modules/src/ogg/ogg-demuxer.d.ts.map +1 -1
- package/dist/modules/src/ogg/ogg-misc.d.ts +1 -1
- package/dist/modules/src/ogg/ogg-misc.d.ts.map +1 -1
- package/dist/modules/src/ogg/ogg-muxer.d.ts +5 -5
- package/dist/modules/src/ogg/ogg-muxer.d.ts.map +1 -1
- package/dist/modules/src/ogg/ogg-reader.d.ts +1 -1
- package/dist/modules/src/ogg/ogg-reader.d.ts.map +1 -1
- package/dist/modules/src/output-format.d.ts +51 -6
- package/dist/modules/src/output-format.d.ts.map +1 -1
- package/dist/modules/src/output.d.ts +13 -13
- package/dist/modules/src/output.d.ts.map +1 -1
- package/dist/modules/src/packet.d.ts +1 -1
- package/dist/modules/src/packet.d.ts.map +1 -1
- package/dist/modules/src/pcm.d.ts.map +1 -1
- package/dist/modules/src/reader.d.ts +2 -2
- package/dist/modules/src/reader.d.ts.map +1 -1
- package/dist/modules/src/sample.d.ts +57 -15
- package/dist/modules/src/sample.d.ts.map +1 -1
- package/dist/modules/src/source.d.ts +3 -3
- package/dist/modules/src/source.d.ts.map +1 -1
- package/dist/modules/src/subtitles.d.ts +1 -1
- package/dist/modules/src/subtitles.d.ts.map +1 -1
- package/dist/modules/src/target.d.ts +2 -2
- package/dist/modules/src/target.d.ts.map +1 -1
- package/dist/modules/src/tsconfig.tsbuildinfo +1 -1
- package/dist/modules/src/wave/riff-writer.d.ts +1 -1
- package/dist/modules/src/wave/riff-writer.d.ts.map +1 -1
- package/dist/modules/src/wave/wave-demuxer.d.ts +6 -6
- package/dist/modules/src/wave/wave-demuxer.d.ts.map +1 -1
- package/dist/modules/src/wave/wave-muxer.d.ts +4 -4
- package/dist/modules/src/wave/wave-muxer.d.ts.map +1 -1
- package/dist/modules/src/writer.d.ts +1 -1
- package/dist/modules/src/writer.d.ts.map +1 -1
- package/dist/packages/eac3/eac3.wasm +0 -0
- package/dist/packages/eac3/mediabunny-eac3.js +1058 -0
- package/dist/packages/eac3/mediabunny-eac3.min.js +44 -0
- package/dist/packages/mp3-encoder/mediabunny-mp3-encoder.js +694 -0
- package/dist/packages/mp3-encoder/mediabunny-mp3-encoder.min.js +58 -0
- package/dist/packages/mpeg4/mediabunny-mpeg4.js +1198 -0
- package/dist/packages/mpeg4/mediabunny-mpeg4.min.js +44 -0
- package/dist/packages/mpeg4/xvid.wasm +0 -0
- package/package.json +18 -57
- package/dist/bundles/mediabunny.cjs +0 -26140
- package/dist/bundles/mediabunny.min.cjs +0 -147
- package/dist/bundles/mediabunny.min.mjs +0 -146
- package/dist/mediabunny.d.ts +0 -3319
- package/dist/modules/shared/mp3-misc.js +0 -147
- package/dist/modules/src/adts/adts-demuxer.js +0 -239
- package/dist/modules/src/adts/adts-muxer.js +0 -80
- package/dist/modules/src/adts/adts-reader.js +0 -63
- package/dist/modules/src/codec-data.js +0 -1730
- package/dist/modules/src/codec.js +0 -869
- package/dist/modules/src/conversion.js +0 -1459
- package/dist/modules/src/custom-coder.js +0 -117
- package/dist/modules/src/demuxer.js +0 -12
- package/dist/modules/src/encode.js +0 -442
- package/dist/modules/src/flac/flac-demuxer.js +0 -504
- package/dist/modules/src/flac/flac-misc.js +0 -135
- package/dist/modules/src/flac/flac-muxer.js +0 -222
- package/dist/modules/src/id3.js +0 -848
- package/dist/modules/src/index.js +0 -28
- package/dist/modules/src/input-format.js +0 -480
- package/dist/modules/src/input-track.js +0 -372
- package/dist/modules/src/input.js +0 -188
- package/dist/modules/src/isobmff/isobmff-boxes.js +0 -1480
- package/dist/modules/src/isobmff/isobmff-demuxer.js +0 -2618
- package/dist/modules/src/isobmff/isobmff-misc.js +0 -20
- package/dist/modules/src/isobmff/isobmff-muxer.js +0 -966
- package/dist/modules/src/isobmff/isobmff-reader.js +0 -72
- package/dist/modules/src/matroska/ebml.js +0 -653
- package/dist/modules/src/matroska/matroska-demuxer.js +0 -2133
- package/dist/modules/src/matroska/matroska-misc.js +0 -20
- package/dist/modules/src/matroska/matroska-muxer.js +0 -1017
- package/dist/modules/src/media-sink.js +0 -1736
- package/dist/modules/src/media-source.js +0 -1825
- package/dist/modules/src/metadata.js +0 -193
- package/dist/modules/src/misc.js +0 -623
- package/dist/modules/src/mp3/mp3-demuxer.js +0 -285
- package/dist/modules/src/mp3/mp3-muxer.js +0 -123
- package/dist/modules/src/mp3/mp3-reader.js +0 -26
- package/dist/modules/src/mp3/mp3-writer.js +0 -78
- package/dist/modules/src/muxer.js +0 -50
- package/dist/modules/src/node.js +0 -9
- package/dist/modules/src/ogg/ogg-demuxer.js +0 -763
- package/dist/modules/src/ogg/ogg-misc.js +0 -78
- package/dist/modules/src/ogg/ogg-muxer.js +0 -353
- package/dist/modules/src/ogg/ogg-reader.js +0 -65
- package/dist/modules/src/output-format.js +0 -527
- package/dist/modules/src/output.js +0 -300
- package/dist/modules/src/packet.js +0 -182
- package/dist/modules/src/pcm.js +0 -85
- package/dist/modules/src/reader.js +0 -236
- package/dist/modules/src/sample.js +0 -1056
- package/dist/modules/src/source.js +0 -1182
- package/dist/modules/src/subtitles.js +0 -575
- package/dist/modules/src/target.js +0 -140
- package/dist/modules/src/wave/riff-writer.js +0 -30
- package/dist/modules/src/wave/wave-demuxer.js +0 -447
- package/dist/modules/src/wave/wave-muxer.js +0 -318
- package/dist/modules/src/writer.js +0 -370
- package/src/adts/adts-demuxer.ts +0 -331
- package/src/adts/adts-muxer.ts +0 -111
- package/src/adts/adts-reader.ts +0 -85
- package/src/codec-data.ts +0 -2078
- package/src/codec.ts +0 -1092
- package/src/conversion.ts +0 -2112
- package/src/custom-coder.ts +0 -197
- package/src/demuxer.ts +0 -24
- package/src/encode.ts +0 -739
- package/src/flac/flac-demuxer.ts +0 -730
- package/src/flac/flac-misc.ts +0 -164
- package/src/flac/flac-muxer.ts +0 -320
- package/src/id3.ts +0 -925
- package/src/index.ts +0 -221
- package/src/input-format.ts +0 -541
- package/src/input-track.ts +0 -529
- package/src/input.ts +0 -235
- package/src/isobmff/isobmff-boxes.ts +0 -1719
- package/src/isobmff/isobmff-demuxer.ts +0 -3190
- package/src/isobmff/isobmff-misc.ts +0 -29
- package/src/isobmff/isobmff-muxer.ts +0 -1348
- package/src/isobmff/isobmff-reader.ts +0 -91
- package/src/matroska/ebml.ts +0 -730
- package/src/matroska/matroska-demuxer.ts +0 -2481
- package/src/matroska/matroska-misc.ts +0 -29
- package/src/matroska/matroska-muxer.ts +0 -1276
- package/src/media-sink.ts +0 -2179
- package/src/media-source.ts +0 -2243
- package/src/metadata.ts +0 -320
- package/src/misc.ts +0 -798
- package/src/mp3/mp3-demuxer.ts +0 -383
- package/src/mp3/mp3-muxer.ts +0 -166
- package/src/mp3/mp3-reader.ts +0 -34
- package/src/mp3/mp3-writer.ts +0 -120
- package/src/muxer.ts +0 -88
- package/src/node.ts +0 -11
- package/src/ogg/ogg-demuxer.ts +0 -1053
- package/src/ogg/ogg-misc.ts +0 -116
- package/src/ogg/ogg-muxer.ts +0 -497
- package/src/ogg/ogg-reader.ts +0 -93
- package/src/output-format.ts +0 -945
- package/src/output.ts +0 -488
- package/src/packet.ts +0 -263
- package/src/pcm.ts +0 -112
- package/src/reader.ts +0 -323
- package/src/sample.ts +0 -1461
- package/src/source.ts +0 -1688
- package/src/subtitles.ts +0 -711
- package/src/target.ts +0 -204
- package/src/tsconfig.json +0 -16
- package/src/wave/riff-writer.ts +0 -36
- package/src/wave/wave-demuxer.ts +0 -529
- package/src/wave/wave-muxer.ts +0 -371
- package/src/writer.ts +0 -490
package/src/metadata.ts
DELETED
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2025-present, Vanilagy and contributors
|
|
3
|
-
*
|
|
4
|
-
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
5
|
-
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
6
|
-
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Represents descriptive (non-technical) metadata about a media file, such as title, author, date, cover art, or other
|
|
11
|
-
* attached files. Common tags are normalized by Mediabunny into a uniform format, while the `raw` field can be used to
|
|
12
|
-
* directly read or write the underlying metadata tags (which differ by format).
|
|
13
|
-
*
|
|
14
|
-
* - For MP4/QuickTime files, the metadata refers to the data in `'moov'`-level `'udta'` and `'meta'` atoms.
|
|
15
|
-
* - For WebM/Matroska files, the metadata refers to the Tags and Attachments elements whose target is 50 (MOVIE).
|
|
16
|
-
* - For MP3 files, the metadata refers to the ID3v2 or ID3v1 tags.
|
|
17
|
-
* - For Ogg files, there is no global metadata so instead, the metadata refers to the combined metadata of all tracks,
|
|
18
|
-
* in Vorbis-style comment headers.
|
|
19
|
-
* - For WAVE files, the metadata refers to the chunks within the RIFF INFO chunk.
|
|
20
|
-
* - For ADTS files, there is no metadata.
|
|
21
|
-
* - For FLAC files, the metadata lives in Vorbis style in the Vorbis comment block.
|
|
22
|
-
*
|
|
23
|
-
* @group Metadata tags
|
|
24
|
-
* @public
|
|
25
|
-
*/
|
|
26
|
-
export type MetadataTags = {
|
|
27
|
-
/** Title of the media (e.g. Gangnam Style, Titanic, etc.) */
|
|
28
|
-
title?: string;
|
|
29
|
-
/** Short description or subtitle of the media. */
|
|
30
|
-
description?: string;
|
|
31
|
-
/** Primary artist(s) or creator(s) of the work. */
|
|
32
|
-
artist?: string;
|
|
33
|
-
/** Album, collection, or compilation the media belongs to. */
|
|
34
|
-
album?: string;
|
|
35
|
-
/** Main credited artist for the album/collection as a whole. */
|
|
36
|
-
albumArtist?: string;
|
|
37
|
-
/** Position of this track within its album or collection (1-based). */
|
|
38
|
-
trackNumber?: number;
|
|
39
|
-
/** Total number of tracks in the album or collection. */
|
|
40
|
-
tracksTotal?: number;
|
|
41
|
-
/** Disc index if the release spans multiple discs (1-based). */
|
|
42
|
-
discNumber?: number;
|
|
43
|
-
/** Total number of discs in the release. */
|
|
44
|
-
discsTotal?: number;
|
|
45
|
-
/** Genre or category describing the media's style or content (e.g. Metal, Horror, etc.) */
|
|
46
|
-
genre?: string;
|
|
47
|
-
/** Release, recording or creation date of the media. */
|
|
48
|
-
date?: Date;
|
|
49
|
-
/** Full text lyrics or transcript associated with the media. */
|
|
50
|
-
lyrics?: string;
|
|
51
|
-
/** Freeform notes, remarks or commentary about the media. */
|
|
52
|
-
comment?: string;
|
|
53
|
-
/** Embedded images such as cover art, booklet scans, artwork or preview frames. */
|
|
54
|
-
images?: AttachedImage[];
|
|
55
|
-
/**
|
|
56
|
-
* The raw, underlying metadata tags.
|
|
57
|
-
*
|
|
58
|
-
* This field can be used for both reading and writing. When reading, it represents the original tags that were used
|
|
59
|
-
* to derive the normalized fields, and any additional metadata that Mediabunny doesn't understand. When writing, it
|
|
60
|
-
* can be used to set arbitrary metadata tags in the output file.
|
|
61
|
-
*
|
|
62
|
-
* The format of these tags differs per format:
|
|
63
|
-
* - MP4/QuickTime: By default, the keys refer to the names of the individual atoms in the `'ilst'` atom inside the
|
|
64
|
-
* `'meta'` atom, and the values are derived from the content of the `'data'` atom inside them. When a `'keys'` atom
|
|
65
|
-
* is also used, then the keys reflect the keys specified there (such as `'com.apple.quicktime.version'`).
|
|
66
|
-
* Additionally, any atoms within the `'udta'` atom are dumped into here, however with unknown internal format
|
|
67
|
-
* (`Uint8Array`).
|
|
68
|
-
* - WebM/Matroska: `SimpleTag` elements whose target is 50 (MOVIE), either containing string or `Uint8Array`
|
|
69
|
-
* values. Additionally, all attached files (such as font files) are included here, where the key corresponds to
|
|
70
|
-
* the FileUID and the value is an {@link AttachedFile}.
|
|
71
|
-
* - MP3: The ID3v2 tags, or a single `'TAG'` key with the contents of the ID3v1 tag.
|
|
72
|
-
* - Ogg: The key-value string pairs from the Vorbis-style comment header (see RFC 7845, Section 5.2).
|
|
73
|
-
* Additionally, the `'vendor'` key refers to the vendor string within this header.
|
|
74
|
-
* - WAVE: The individual metadata chunks within the RIFF INFO chunk. Values are always ISO 8859-1 strings.
|
|
75
|
-
* - FLAC: The key-value string pairs from the vorbis metadata block (see RFC 9639, Section D.2.3).
|
|
76
|
-
* Additionally, the `'vendor'` key refers to the vendor string within this header.
|
|
77
|
-
*/
|
|
78
|
-
raw?: Record<string, string | Uint8Array | RichImageData | AttachedFile | null>;
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* An embedded image such as cover art, booklet scan, artwork or preview frame.
|
|
83
|
-
*
|
|
84
|
-
* @group Metadata tags
|
|
85
|
-
* @public
|
|
86
|
-
*/
|
|
87
|
-
export type AttachedImage = {
|
|
88
|
-
/** The raw image data. */
|
|
89
|
-
data: Uint8Array;
|
|
90
|
-
/** An RFC 6838 MIME type (e.g. image/jpeg, image/png, etc.) */
|
|
91
|
-
mimeType: string;
|
|
92
|
-
/** The kind or purpose of the image. */
|
|
93
|
-
kind: 'coverFront' | 'coverBack' | 'unknown';
|
|
94
|
-
/** The name of the image file. */
|
|
95
|
-
name?: string;
|
|
96
|
-
/** A description of the image. */
|
|
97
|
-
description?: string;
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Image data with additional metadata.
|
|
102
|
-
*
|
|
103
|
-
* @group Metadata tags
|
|
104
|
-
* @public
|
|
105
|
-
*/
|
|
106
|
-
export class RichImageData {
|
|
107
|
-
/** Creates a new {@link RichImageData}. */
|
|
108
|
-
constructor(
|
|
109
|
-
/** The raw image data. */
|
|
110
|
-
public data: Uint8Array,
|
|
111
|
-
/** An RFC 6838 MIME type (e.g. image/jpeg, image/png, etc.) */
|
|
112
|
-
public mimeType: string,
|
|
113
|
-
) {
|
|
114
|
-
if (!(data instanceof Uint8Array)) {
|
|
115
|
-
throw new TypeError('data must be a Uint8Array.');
|
|
116
|
-
}
|
|
117
|
-
if (typeof mimeType !== 'string') {
|
|
118
|
-
throw new TypeError('mimeType must be a string.');
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* A file attached to a media file.
|
|
125
|
-
*
|
|
126
|
-
* @group Metadata tags
|
|
127
|
-
* @public
|
|
128
|
-
*/
|
|
129
|
-
export class AttachedFile {
|
|
130
|
-
/** Creates a new {@link AttachedFile}. */
|
|
131
|
-
constructor(
|
|
132
|
-
/** The raw file data. */
|
|
133
|
-
public data: Uint8Array,
|
|
134
|
-
/** An RFC 6838 MIME type (e.g. image/jpeg, image/png, font/ttf, etc.) */
|
|
135
|
-
public mimeType?: string,
|
|
136
|
-
/** The name of the file. */
|
|
137
|
-
public name?: string,
|
|
138
|
-
/** A description of the file. */
|
|
139
|
-
public description?: string,
|
|
140
|
-
) {
|
|
141
|
-
if (!(data instanceof Uint8Array)) {
|
|
142
|
-
throw new TypeError('data must be a Uint8Array.');
|
|
143
|
-
}
|
|
144
|
-
if (mimeType !== undefined && typeof mimeType !== 'string') {
|
|
145
|
-
throw new TypeError('mimeType, when provided, must be a string.');
|
|
146
|
-
}
|
|
147
|
-
if (name !== undefined && typeof name !== 'string') {
|
|
148
|
-
throw new TypeError('name, when provided, must be a string.');
|
|
149
|
-
}
|
|
150
|
-
if (description !== undefined && typeof description !== 'string') {
|
|
151
|
-
throw new TypeError('description, when provided, must be a string.');
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
export const validateMetadataTags = (tags: MetadataTags) => {
|
|
157
|
-
if (!tags || typeof tags !== 'object') {
|
|
158
|
-
throw new TypeError('tags must be an object.');
|
|
159
|
-
}
|
|
160
|
-
if (tags.title !== undefined && typeof tags.title !== 'string') {
|
|
161
|
-
throw new TypeError('tags.title, when provided, must be a string.');
|
|
162
|
-
}
|
|
163
|
-
if (tags.description !== undefined && typeof tags.description !== 'string') {
|
|
164
|
-
throw new TypeError('tags.description, when provided, must be a string.');
|
|
165
|
-
}
|
|
166
|
-
if (tags.artist !== undefined && typeof tags.artist !== 'string') {
|
|
167
|
-
throw new TypeError('tags.artist, when provided, must be a string.');
|
|
168
|
-
}
|
|
169
|
-
if (tags.album !== undefined && typeof tags.album !== 'string') {
|
|
170
|
-
throw new TypeError('tags.album, when provided, must be a string.');
|
|
171
|
-
}
|
|
172
|
-
if (tags.albumArtist !== undefined && typeof tags.albumArtist !== 'string') {
|
|
173
|
-
throw new TypeError('tags.albumArtist, when provided, must be a string.');
|
|
174
|
-
}
|
|
175
|
-
if (tags.trackNumber !== undefined && (!Number.isInteger(tags.trackNumber) || tags.trackNumber <= 0)) {
|
|
176
|
-
throw new TypeError('tags.trackNumber, when provided, must be a positive integer.');
|
|
177
|
-
}
|
|
178
|
-
if (
|
|
179
|
-
tags.tracksTotal !== undefined
|
|
180
|
-
&& (!Number.isInteger(tags.tracksTotal) || tags.tracksTotal <= 0)
|
|
181
|
-
) {
|
|
182
|
-
throw new TypeError('tags.tracksTotal, when provided, must be a positive integer.');
|
|
183
|
-
}
|
|
184
|
-
if (tags.discNumber !== undefined && (!Number.isInteger(tags.discNumber) || tags.discNumber <= 0)) {
|
|
185
|
-
throw new TypeError('tags.discNumber, when provided, must be a positive integer.');
|
|
186
|
-
}
|
|
187
|
-
if (
|
|
188
|
-
tags.discsTotal !== undefined
|
|
189
|
-
&& (!Number.isInteger(tags.discsTotal) || tags.discsTotal <= 0)
|
|
190
|
-
) {
|
|
191
|
-
throw new TypeError('tags.discsTotal, when provided, must be a positive integer.');
|
|
192
|
-
}
|
|
193
|
-
if (tags.genre !== undefined && typeof tags.genre !== 'string') {
|
|
194
|
-
throw new TypeError('tags.genre, when provided, must be a string.');
|
|
195
|
-
}
|
|
196
|
-
if (tags.date !== undefined && (!(tags.date instanceof Date) || Number.isNaN(tags.date.getTime()))) {
|
|
197
|
-
throw new TypeError('tags.date, when provided, must be a valid Date.');
|
|
198
|
-
}
|
|
199
|
-
if (tags.lyrics !== undefined && typeof tags.lyrics !== 'string') {
|
|
200
|
-
throw new TypeError('tags.lyrics, when provided, must be a string.');
|
|
201
|
-
}
|
|
202
|
-
if (tags.images !== undefined) {
|
|
203
|
-
if (!Array.isArray(tags.images)) {
|
|
204
|
-
throw new TypeError('tags.images, when provided, must be an array.');
|
|
205
|
-
}
|
|
206
|
-
for (const image of tags.images) {
|
|
207
|
-
if (!image || typeof image !== 'object') {
|
|
208
|
-
throw new TypeError('Each image in tags.images must be an object.');
|
|
209
|
-
}
|
|
210
|
-
if (!(image.data instanceof Uint8Array)) {
|
|
211
|
-
throw new TypeError('Each image.data must be a Uint8Array.');
|
|
212
|
-
}
|
|
213
|
-
if (typeof image.mimeType !== 'string') {
|
|
214
|
-
throw new TypeError('Each image.mimeType must be a string.');
|
|
215
|
-
}
|
|
216
|
-
if (!['coverFront', 'coverBack', 'unknown'].includes(image.kind)) {
|
|
217
|
-
throw new TypeError('Each image.kind must be \'coverFront\', \'coverBack\', or \'unknown\'.');
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
if (tags.comment !== undefined && typeof tags.comment !== 'string') {
|
|
222
|
-
throw new TypeError('tags.comment, when provided, must be a string.');
|
|
223
|
-
}
|
|
224
|
-
if (tags.raw !== undefined) {
|
|
225
|
-
if (!tags.raw || typeof tags.raw !== 'object') {
|
|
226
|
-
throw new TypeError('tags.raw, when provided, must be an object.');
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
for (const value of Object.values(tags.raw)) {
|
|
230
|
-
if (
|
|
231
|
-
value !== null
|
|
232
|
-
&& typeof value !== 'string'
|
|
233
|
-
&& !(value instanceof Uint8Array)
|
|
234
|
-
&& !(value instanceof RichImageData)
|
|
235
|
-
&& !(value instanceof AttachedFile)
|
|
236
|
-
) {
|
|
237
|
-
throw new TypeError(
|
|
238
|
-
'Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, or null.',
|
|
239
|
-
);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
export const metadataTagsAreEmpty = (tags: MetadataTags) => {
|
|
246
|
-
return tags.title === undefined
|
|
247
|
-
&& tags.description === undefined
|
|
248
|
-
&& tags.artist === undefined
|
|
249
|
-
&& tags.album === undefined
|
|
250
|
-
&& tags.albumArtist === undefined
|
|
251
|
-
&& tags.trackNumber === undefined
|
|
252
|
-
&& tags.tracksTotal === undefined
|
|
253
|
-
&& tags.discNumber === undefined
|
|
254
|
-
&& tags.discsTotal === undefined
|
|
255
|
-
&& tags.genre === undefined
|
|
256
|
-
&& tags.date === undefined
|
|
257
|
-
&& tags.lyrics === undefined
|
|
258
|
-
&& (!tags.images || tags.images.length === 0)
|
|
259
|
-
&& tags.comment === undefined
|
|
260
|
-
&& (tags.raw === undefined || Object.keys(tags.raw).length === 0);
|
|
261
|
-
};
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Specifies a track's disposition, i.e. information about its intended usage.
|
|
265
|
-
* @public
|
|
266
|
-
* @group Miscellaneous
|
|
267
|
-
*/
|
|
268
|
-
export type TrackDisposition = {
|
|
269
|
-
/**
|
|
270
|
-
* Indicates that this track is eligible for automatic selection by a player; that it is the main track among other,
|
|
271
|
-
* non-default tracks of the same type.
|
|
272
|
-
*/
|
|
273
|
-
default: boolean;
|
|
274
|
-
/**
|
|
275
|
-
* Indicates that players should always display this track by default, even if it goes against the user's default
|
|
276
|
-
* preferences. For example, a subtitle track only containing translations of foreign-language audio.
|
|
277
|
-
*/
|
|
278
|
-
forced: boolean;
|
|
279
|
-
/** Indicates that this track is in the content's original language. */
|
|
280
|
-
original: boolean;
|
|
281
|
-
/** Indicates that this track contains commentary. */
|
|
282
|
-
commentary: boolean;
|
|
283
|
-
/** Indicates that this track is intended for hearing-impaired users. */
|
|
284
|
-
hearingImpaired: boolean;
|
|
285
|
-
/** Indicates that this track is intended for visually-impaired users. */
|
|
286
|
-
visuallyImpaired: boolean;
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
export const DEFAULT_TRACK_DISPOSITION: TrackDisposition = {
|
|
290
|
-
default: true,
|
|
291
|
-
forced: false,
|
|
292
|
-
original: false,
|
|
293
|
-
commentary: false,
|
|
294
|
-
hearingImpaired: false,
|
|
295
|
-
visuallyImpaired: false,
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
export const validateTrackDisposition = (disposition: Partial<TrackDisposition>) => {
|
|
299
|
-
if (!disposition || typeof disposition !== 'object') {
|
|
300
|
-
throw new TypeError('disposition must be an object.');
|
|
301
|
-
}
|
|
302
|
-
if (disposition.default !== undefined && typeof disposition.default !== 'boolean') {
|
|
303
|
-
throw new TypeError('disposition.default must be a boolean.');
|
|
304
|
-
}
|
|
305
|
-
if (disposition.forced !== undefined && typeof disposition.forced !== 'boolean') {
|
|
306
|
-
throw new TypeError('disposition.forced must be a boolean.');
|
|
307
|
-
}
|
|
308
|
-
if (disposition.original !== undefined && typeof disposition.original !== 'boolean') {
|
|
309
|
-
throw new TypeError('disposition.original must be a boolean.');
|
|
310
|
-
}
|
|
311
|
-
if (disposition.commentary !== undefined && typeof disposition.commentary !== 'boolean') {
|
|
312
|
-
throw new TypeError('disposition.commentary must be a boolean.');
|
|
313
|
-
}
|
|
314
|
-
if (disposition.hearingImpaired !== undefined && typeof disposition.hearingImpaired !== 'boolean') {
|
|
315
|
-
throw new TypeError('disposition.hearingImpaired must be a boolean.');
|
|
316
|
-
}
|
|
317
|
-
if (disposition.visuallyImpaired !== undefined && typeof disposition.visuallyImpaired !== 'boolean') {
|
|
318
|
-
throw new TypeError('disposition.visuallyImpaired must be a boolean.');
|
|
319
|
-
}
|
|
320
|
-
};
|