From 083bb4f94bb4bc9b5eb0587e77d6c52276852147 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Apr 2021 16:55:12 +0000 Subject: [PATCH 01/10] Bump y18n from 3.2.1 to 3.2.2 (#26) Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2. - [Release notes](https://github.com/yargs/y18n/releases) - [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md) - [Commits](https://github.com/yargs/y18n/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9acb910f..2c264085 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-taglib-sharp", - "version": "3.2.0", + "version": "3.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2765,12 +2765,6 @@ "strip-ansi": "^5.0.0" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", @@ -3147,12 +3141,6 @@ "strip-ansi": "^6.0.0" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", @@ -4524,9 +4512,9 @@ } }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { @@ -4627,6 +4615,12 @@ "lcid": "^1.0.0", "mem": "^1.1.0" } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true } } }, @@ -4768,12 +4762,6 @@ "strip-ansi": "^5.0.0" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", From b23356261f9e8659ba0d5392650df503de148693 Mon Sep 17 00:00:00 2001 From: Benjamin Russell Date: Sat, 8 May 2021 19:26:20 +0000 Subject: [PATCH 02/10] Latin1 APIC Hotfix (#29) * Hotfix for bug in attachment frame reading * vbump --- package.json | 2 +- src/id3v2/frames/attachmentFrame.ts | 2 +- test-unit/id3v2/attachmentsFrameTests.ts | 48 +++++++++++++++++++++--- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 96f0f2ba..ae8258de 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "node-taglib-sharp", "description": "Read and write audio/video/picture tags using a similar interface to TagLib#", - "version": "3.3.0", + "version": "3.3.1", "license": "LGPL-2.1-or-later", "author": "Ben Russell (https://github.com/benrr101)", "repository": "github:benrr101/node-taglib-sharp", diff --git a/src/id3v2/frames/attachmentFrame.ts b/src/id3v2/frames/attachmentFrame.ts index 8a2f09ae..b0a4033c 100644 --- a/src/id3v2/frames/attachmentFrame.ts +++ b/src/id3v2/frames/attachmentFrame.ts @@ -383,7 +383,7 @@ export default class AttachmentFrame extends Frame implements IPicture { // Picture type $xx // Description $00 (00) // Picture data - const mimeTypeEndIndex = data.find(ByteVector.getTextDelimiter(StringType.Latin1)); + const mimeTypeEndIndex = data.find(ByteVector.getTextDelimiter(StringType.Latin1), 1); if (mimeTypeEndIndex === -1) { return; } diff --git a/test-unit/id3v2/attachmentsFrameTests.ts b/test-unit/id3v2/attachmentsFrameTests.ts index 7227dc14..eed5e396 100644 --- a/test-unit/id3v2/attachmentsFrameTests.ts +++ b/test-unit/id3v2/attachmentsFrameTests.ts @@ -1,21 +1,19 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; -import FrameConstructorTests from "./frameConstructorTests"; -import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; import {suite, test} from "mocha-typescript"; import AttachmentFrame from "../../src/id3v2/frames/attachmentFrame"; +import FrameConstructorTests from "./frameConstructorTests"; import Id3v2Settings from "../../src/id3v2/id3v2Settings"; +import PropertyTests from "../utilities/propertyTests"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifier, FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; import {IPicture, PictureType} from "../../src/iPicture"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; function getTestFrame() { @@ -137,8 +135,46 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi assert.throws(() => { const _ = AttachmentFrame.fromRawData(data, 4); }); } + // NOTE: If you're wondering why we have a test for latin1 vs other encodings, it's b/c the + // mimetype detection looks for a 0 to mark the end of the mimetype. If encoding is Latin1, + // the first byte of the picture is 0, which we want to make sure isn't mistaken for the end + // of the mimetype. + + @test + public fromRawData_apicV4_latin1Encoding() { + // Arrange + const testData = ByteVector.fromString("fuxbuxqux", StringType.Latin1); + const header = new Id3v2FrameHeader(FrameIdentifiers.APIC); + header.frameSize = 41; + const data = ByteVector.concatenate( + header.render(4), + StringType.Latin1, + ByteVector.fromString("image/gif", StringType.Latin1), + ByteVector.getTextDelimiter(StringType.Latin1), + PictureType.Artist, + ByteVector.fromString("foobarbaz", StringType.Latin1), + ByteVector.getTextDelimiter(StringType.Latin1), + testData + ); + + // Act + const frame = AttachmentFrame.fromRawData(data, 4); + + // Assert + this.verifyFrame( + frame, + FrameIdentifiers.APIC, + testData, + "foobarbaz", + undefined, + "image/gif", + StringType.Latin1, + PictureType.Artist + ); + } + @test - public fromRawData_apicV4() { + public fromRawData_apicV4_nonLatinEncoding() { // Arrange const testData = ByteVector.fromString("fuxbuxqux", StringType.Latin1); const header = new Id3v2FrameHeader(FrameIdentifiers.APIC); From 8795f896a8f879159478eb4be919551e612590c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 22 May 2021 18:15:34 +0000 Subject: [PATCH 03/10] Bump postcss from 8.2.8 to 8.3.0 (#32) Bumps [postcss](https://github.com/postcss/postcss) from 8.2.8 to 8.3.0. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.2.8...8.3.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c264085..3bbe41a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-taglib-sharp", - "version": "3.3.0", + "version": "3.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2852,12 +2852,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "nanoid": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.21.tgz", - "integrity": "sha512-A6oZraK4DJkAOICstsGH98dvycPr/4GGDH7ZWKmMdd3vGcOurZ6JmWFUt0DA5bzrrn2FrUjmv6mFNWvv8jpppA==", - "dev": true - }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -3550,14 +3544,22 @@ "dev": true }, "postcss": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.8.tgz", - "integrity": "sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "dev": true, "requires": { "colorette": "^1.2.2", - "nanoid": "^3.1.20", - "source-map": "^0.6.1" + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, + "dependencies": { + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + } } }, "postcss-values-parser": { @@ -3927,6 +3929,12 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, "source-map-support": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", From f6ed65933955fb094c87e440f897577777d20f59 Mon Sep 17 00:00:00 2001 From: Benjamin Russell Date: Sun, 4 Jul 2021 15:23:46 -0500 Subject: [PATCH 04/10] RIFF support (#35) * Getting started on RIFF files * More WIP... * More WIP * More WIP * I *think* this wraps up the initial porting of RIFF support. Next ... more unit tests :sob: * Reorganizing imports * Starting on tests for riff * WIP that doesn't work right yet * Integration tests done! * More unit tests * Wrapping up unit tests for riff lists * I should've broken out the monkey patching sooner * Ughhhh almost there * DivxTag tests * mo tests mo betta * What I'm gonna call "the rest... of the unit tests" --- src/byteVector.ts | 8 +- src/combinedTag.ts | 31 +- src/genres.ts | 2 +- src/index.ts | 20 + src/riff/aviHeaderList.ts | 162 +++++ src/riff/aviStream.ts | 124 ++++ src/riff/aviStreamHeader.ts | 182 ++++++ src/riff/divxTag.ts | 171 ++++++ src/riff/infoTag.ts | 229 +++++++ src/riff/movieIdTag.ts | 142 +++++ src/riff/riffFile.ts | 416 +++++++++++++ src/riff/riffList.ts | 264 ++++++++ src/riff/riffListTag.ts | 165 +++++ src/riff/riffWaveFormatEx.ts | 11 +- src/utils.ts | 10 +- test-integration/aiff_fileTests.ts | 13 +- test-integration/avi_fileTests.ts | 82 +++ .../resources/corruptSamples/corrupt.avi | 0 .../resources/corruptSamples/corrupt.wav | 0 test-integration/resources/samples/sample.avi | Bin 0 -> 71680 bytes test-integration/resources/samples/sample.wav | Bin 0 -> 186992 bytes .../utilities/standardFileTests.ts | 1 - test-integration/wav_fileTest.ts | 81 +++ test-unit/byteVectorConstructorTests.ts | 2 +- test-unit/riff/aviHeaderListTests.ts | 175 ++++++ test-unit/riff/aviStreamHeaderTests.ts | 75 +++ test-unit/riff/aviStreamTests.ts | 146 +++++ test-unit/riff/divxTagTests.ts | 253 ++++++++ test-unit/riff/infoTagTests.ts | 379 ++++++++++++ test-unit/riff/movieIdTagTests.ts | 244 ++++++++ test-unit/riff/riffBitmapInfoHeaderTests.ts | 4 +- test-unit/riff/riffListTests.ts | 570 ++++++++++++++++++ 32 files changed, 3926 insertions(+), 36 deletions(-) create mode 100644 src/riff/aviHeaderList.ts create mode 100644 src/riff/aviStream.ts create mode 100644 src/riff/aviStreamHeader.ts create mode 100644 src/riff/divxTag.ts create mode 100644 src/riff/infoTag.ts create mode 100644 src/riff/movieIdTag.ts create mode 100644 src/riff/riffFile.ts create mode 100644 src/riff/riffList.ts create mode 100644 src/riff/riffListTag.ts create mode 100644 test-integration/avi_fileTests.ts create mode 100644 test-integration/resources/corruptSamples/corrupt.avi create mode 100644 test-integration/resources/corruptSamples/corrupt.wav create mode 100644 test-integration/resources/samples/sample.avi create mode 100644 test-integration/resources/samples/sample.wav create mode 100644 test-integration/wav_fileTest.ts create mode 100644 test-unit/riff/aviHeaderListTests.ts create mode 100644 test-unit/riff/aviStreamHeaderTests.ts create mode 100644 test-unit/riff/aviStreamTests.ts create mode 100644 test-unit/riff/divxTagTests.ts create mode 100644 test-unit/riff/infoTagTests.ts create mode 100644 test-unit/riff/movieIdTagTests.ts create mode 100644 test-unit/riff/riffListTests.ts diff --git a/src/byteVector.ts b/src/byteVector.ts index 6621e2bd..1a1b63ef 100644 --- a/src/byteVector.ts +++ b/src/byteVector.ts @@ -393,12 +393,8 @@ export class ByteVector { fill: number = 0x0, isReadOnly: boolean = false ): ByteVector { - if (!Number.isInteger(size) || size < 0 || !Number.isSafeInteger(size)) { - throw new Error("Argument out of range exception: ByteVector size is invalid uint"); - } - if (!Number.isInteger(fill) || fill < 0 || fill > 0xff) { - throw new Error("Argument out of range exception: ByteVector fill value cannot be used as a uint8"); - } + Guards.safeUint(size, "size"); + Guards.byte(fill, "fill"); const vector = new ByteVector(); vector._data = new Uint8Array(size); diff --git a/src/combinedTag.ts b/src/combinedTag.ts index 3d93fef8..fa5ec956 100644 --- a/src/combinedTag.ts +++ b/src/combinedTag.ts @@ -1,5 +1,6 @@ import {IPicture} from "./iPicture"; import {Tag, TagTypes} from "./tag"; +import {Guards} from "./utils"; export default class CombinedTag extends Tag { protected _tags: Tag[]; @@ -225,7 +226,7 @@ export default class CombinedTag extends Tag { * Gets the year that the media represented by the current instance was recorded. * Returns the first non-null/non-undefined value from the child tags. */ - public get year(): number { return this.getFirstValue((t) => t.year); } + public get year(): number { return this.getFirstValue((t) => t.year, 0); } /** * Sets the year that the media represented by the current instance was recorded. Must be a * positive integer. @@ -237,7 +238,7 @@ export default class CombinedTag extends Tag { * Gets the position of the media represented by the current instance in its containing album. * Returns the first non-null/non-undefined value from the child tags. */ - public get track(): number { return this.getFirstValue((t) => t.track); } + public get track(): number { return this.getFirstValue((t) => t.track, 0); } /** * Sets the position of the media represented by the current instance in its containing album. * Must be a positive integer positive integer. @@ -250,7 +251,7 @@ export default class CombinedTag extends Tag { * instance. * Returns the first non-null/non-undefined value from the child tags. */ - public get trackCount(): number { return this.getFirstValue((t) => t.trackCount); } + public get trackCount(): number { return this.getFirstValue((t) => t.trackCount, 0); } /** * Sets the number of tracks in the album containing the media represented by the current * instance. Must be a positive integer positive integer. @@ -263,7 +264,7 @@ export default class CombinedTag extends Tag { * boxed set. * Returns the first non-null/non-undefined value from the child tags. */ - public get disc(): number { return this.getFirstValue((t) => t.disc); } + public get disc(): number { return this.getFirstValue((t) => t.disc, 0); } /** * Sets the number of the disc containing the media represented by the current instance in a * boxed set. Must be a positive integer positive integer. @@ -276,7 +277,7 @@ export default class CombinedTag extends Tag { * current instance. * Returns the first non-null/non-undefined value from the child tags. */ - public get discCount(): number { return this.getFirstValue((t) => t.discCount); } + public get discCount(): number { return this.getFirstValue((t) => t.discCount, 0); } /** * Sets the number of the discs in the boxed set containing the media represented by the * current instance. Must be a positive integer positive integer. @@ -310,7 +311,7 @@ export default class CombinedTag extends Tag { * Gets the number of beats per minute of the media represented by the current instance. * Returns the first non-null/non-undefined value from the child tags. */ - public get beatsPerMinute(): number { return this.getFirstValue((t) => t.beatsPerMinute); } + public get beatsPerMinute(): number { return this.getFirstValue((t) => t.beatsPerMinute, 0); } /** * Sets the number of beats per minute of the media represented by the current instance. Must * be a positive integer positive integer. @@ -485,7 +486,7 @@ export default class CombinedTag extends Tag { * Gets the ReplayGain track gain in dB. * Returns the first non-null/non-undefined value from the child tags. */ - public get replayGainTrackGain(): number { return this.getFirstValue((t) => t.replayGainTrackGain); } + public get replayGainTrackGain(): number { return this.getFirstValue((t) => t.replayGainTrackGain, NaN); } /** * Sets the ReplayGain track gain in dB. * Sets the value on all child tags @@ -496,7 +497,7 @@ export default class CombinedTag extends Tag { * Gets the ReplayGain track peak sample. * Returns the first non-null/non-undefined value from the child tags. */ - public get replayGainTrackPeak(): number { return this.getFirstValue((t) => t.replayGainTrackPeak); } + public get replayGainTrackPeak(): number { return this.getFirstValue((t) => t.replayGainTrackPeak, NaN); } /** * Sets the ReplayGain track peak sample. * Sets the value on all child tags @@ -507,7 +508,7 @@ export default class CombinedTag extends Tag { * Gets the ReplayGain album gain in dB. * Returns the first non-null/non-undefined value from the child tags. */ - public get replayGainAlbumGain(): number { return this.getFirstValue((t) => t.replayGainAlbumGain); } + public get replayGainAlbumGain(): number { return this.getFirstValue((t) => t.replayGainAlbumGain, NaN); } /** * Sets the ReplayGain album gain in dB. * Sets the value on all child tags @@ -518,7 +519,7 @@ export default class CombinedTag extends Tag { * Gets the ReplayGain album peak sample. * Returns the first non-null/non-undefined value from the child tags. */ - public get replayGainAlbumPeak(): number { return this.getFirstValue((t) => t.replayGainAlbumPeak); } + public get replayGainAlbumPeak(): number { return this.getFirstValue((t) => t.replayGainAlbumPeak, NaN); } /** * Sets the ReplayGain album peak sample. * Sets the value on all child tags @@ -647,19 +648,17 @@ export default class CombinedTag extends Tag { return tagWithProperty ? propertyFn(tagWithProperty) : []; } - private getFirstValue(propertyFn: (t: Tag) => T): T { + private getFirstValue(propertyFn: (t: Tag) => T, defaultValue?: T): T { const tagWithProperty = this._tags.find((t) => { if (!t) { return false; } const val = propertyFn(t); - return val !== undefined && val !== null; + return val !== undefined && val !== null && val !== defaultValue; }); - return tagWithProperty ? propertyFn(tagWithProperty) : undefined; + return tagWithProperty ? propertyFn(tagWithProperty) : defaultValue; } private setAllUint(propertyFn: (t: Tag, val: number) => void, val: number): void { - if (!Number.isInteger(val) || val < 0) { - throw new Error("Argument out of range: value must be a positive integer"); - } + Guards.uint(val, "val"); this._tags.forEach((t) => { if (!t) { return; } propertyFn(t, val); diff --git a/src/genres.ts b/src/genres.ts index 89e13785..82714f4b 100644 --- a/src/genres.ts +++ b/src/genres.ts @@ -174,7 +174,7 @@ const videoGenres = [ "Horror/Mystic", "Humor", "Indian", - "Informercial", + "Infomercial", "Melodrama", "Military & War", "Music Video", diff --git a/src/index.ts b/src/index.ts index 650c3724..fa927c86 100644 --- a/src/index.ts +++ b/src/index.ts @@ -116,3 +116,23 @@ export {default as MpegFile} from "./mpeg/mpegFile"; export {default as MpegVbriHeader} from "./mpeg/vbriHeader"; export {default as MpegVideoHeader} from "./mpeg/mpegVideoHeader"; export {default as MpegXingHeader} from "./mpeg/xingHeader"; + +// RIFF //////////////////////////////////////////////////////////////////// +export {default as RiffFile} from "./riff/riffFile"; +export { + AviStream, + AviAudioStream, + AviVideoStream +} from "./riff/aviStream"; +export { + AviStreamHeader as AviStreamHeader, + AviStreamType as AviStreamType +} from "./riff/aviStreamHeader"; +export {default as DivxTag} from "./riff/divxTag"; +export {default as InfoTag} from "./riff/infoTag"; +export {default as MovieIdTag} from "./riff/movieIdTag"; +export {default as RiffBitmapInfoHeader} from "./riff/riffBitmapInfoHeader"; +export {default as RiffList} from "./riff/riffList"; +export {default as RiffListTag} from "./riff/riffListTag"; +export {default as RiffWaveFormatEx} from "./riff/riffWaveFormatEx"; + diff --git a/src/riff/aviHeaderList.ts b/src/riff/aviHeaderList.ts new file mode 100644 index 00000000..eee16b82 --- /dev/null +++ b/src/riff/aviHeaderList.ts @@ -0,0 +1,162 @@ +import RiffList from "./riffList"; +import {AviStream} from "./aviStream"; +import {ByteVector} from "../byteVector"; +import {CorruptFileError} from "../errors"; +import {File} from "../file"; +import {ICodec} from "../iCodec"; +import {Guards} from "../utils"; + +/** + * Representation of a Microsoft AviMainHeader structure, minus the first 8 bytes. + */ +export class AviHeader { + private readonly _durationMilliseconds: number; + private readonly _flags: number; + private readonly _height: number; + private readonly _initialFrames: number; + private readonly _microsecondsPerFrame: number; + private readonly _maxBytesPerSeconds: number; + private readonly _streams: number; + private readonly _suggestedBufferSize: number; + private readonly _totalFrames: number; + private readonly _width: number; + + /** + * Constructs and initializes a new instance by reading the raw structure from a specified in a + * {@see ByteVector} object. + * @param data ByteStructure containing the raw structure + * @param offset Index into `data` where the structure begins + */ + public constructor(data: ByteVector, offset: number) { + Guards.truthy(data, "data"); + Guards.safeUint(offset, "offset"); + if (offset + 40 > data.length) { + throw new CorruptFileError("Data is too short for AVI header, expected 40 bytes"); + } + + this._microsecondsPerFrame = data.mid(offset, 4).toUInt(false); + this._maxBytesPerSeconds = data.mid(offset + 4, 4).toUInt(false); + this._flags = data.mid(offset + 12, 4).toUInt(false); + this._totalFrames = data.mid(offset + 16, 4).toUInt(false); + this._initialFrames = data.mid(offset + 20, 4).toUInt(false); + this._streams = data.mid(offset + 24, 4).toUInt(false); + this._suggestedBufferSize = data.mid(offset + 28, 4).toUInt(false); + this._width = data.mid(offset + 32, 4).toUInt(false); + this._height = data.mid(offset + 36, 4).toUInt(false); + + this._durationMilliseconds = this._totalFrames * this._microsecondsPerFrame / 1000; + } + + // #region Properties + + /** + * Gets the duration of the media in this file, in milliseconds. + */ + public get durationMilliseconds(): number { return this._durationMilliseconds; } + + /** + * Gets the file flags. + */ + public get flags(): number { return this._flags; } + + /** + * Gets the height of the video in the file, in pixels. + */ + public get height(): number { return this._height; } + + /** + * Gets how far ahead audio is from video. + */ + public get initialFrames(): number { return this._initialFrames; } + + /** + * Gets the maximum number of bytes per second. + */ + public get maxBytesPerSecond(): number { return this._maxBytesPerSeconds; } + + /** + * Gets the number of microseconds per frame. + */ + public get microsecondsPerFrame(): number { return this._microsecondsPerFrame; } + + /** + * Gets the number of stream in the file. + */ + public get streams(): number { return this._streams; } + + /** + * Gets the suggested buffer size for the file, in bytes. + */ + public get suggestedBufferSize(): number { return this._suggestedBufferSize; } + + /** + * Gets the number of frames in the file. + */ + public get totalFrames(): number { return this._totalFrames; } + + /** + * Gets the width of the video in the file, in pixels. + */ + public get width(): number { return this._width; } + + // #endregion +} + +/** + * This class provides support for reading an AVI header list to extract stream information. + */ +export class AviHeaderList { + private readonly _codecs: ICodec[] = []; + private readonly _header: AviHeader; + + /** + * Constructs and initializes a new instance by reading the contents of a raw RIFF list from a + * specified position in a file. + * @param file File that contains AVI headers that will be read into the new instance + * @param position Index into the file where the header list begins + * @param length Number of bytes to read + */ + public constructor(file: File, position: number, length: number) { + Guards.truthy(file, "file"); + Guards.uint(length, "length"); + Guards.safeUint(position, "position"); + if (position > file.length - length) { + throw new Error("Argument out of range: position must be less than length of file"); + } + + const list = RiffList.fromFile(file, position, length); + + // Read the header + if (!list.containsKey("avih")) { + throw new CorruptFileError("AVI header not found"); + } + const headerData = list.getValues("avih")[0]; + if (headerData.length !== 0x38) { + throw new CorruptFileError("AVI header is an invalid length"); + } + this._header = new AviHeader(headerData, 0); + + // Read the streams in the file + const searchPattern = ByteVector.fromString("strl"); + for (const listData of list.getValues("LIST")) { + if (!listData.startsWith(searchPattern)) { + continue; + } + + const stream = AviStream.parseStreamList(listData); + if (stream) { + this._codecs.push(stream.codec); + } + } + } + + /** + * Gets the codecs read in from the file used to construct the current instance. + */ + public get codecs(): ICodec[] { return this._codecs; } + + /** + * Gets the AVI header read in from the file used to construct the current instance. + */ + public get header(): AviHeader { return this._header; } +} diff --git a/src/riff/aviStream.ts b/src/riff/aviStream.ts new file mode 100644 index 00000000..07abcfa3 --- /dev/null +++ b/src/riff/aviStream.ts @@ -0,0 +1,124 @@ +import RiffBitmapInfoHeader from "./riffBitmapInfoHeader"; +import RiffWaveFormatEx from "./riffWaveFormatEx"; +import {AviStreamHeader, AviStreamType} from "./aviStreamHeader"; +import {ByteVector} from "../byteVector"; +import {ICodec} from "../iCodec"; +import {Guards} from "../utils"; + +/** + * Base class representing a stream in an AVI file. Provides basic support for parsing a raw AVI + * stream list. + */ +export abstract class AviStream { + protected readonly _header: AviStreamHeader; + protected _codec: ICodec; + + /** + * Constructs and initializes a new instance with a specified stream header. + * @param header The strean's header + * @protected + */ + protected constructor(header: AviStreamHeader) { + this._header = header; + } + + // #region Properties + + /** + * Gets the codec information for this stream. + */ + public get codec(): ICodec { return this._codec; } + + /** + * Gets the header for this stream. + */ + public get header(): AviStreamHeader { return this._header; } + + // #endregion + + // #region Methods + + /** + * Parses a raw AVI stream list and returns the stream information + * @param data + */ + public static parseStreamList(data: ByteVector): AviStream { + Guards.truthy(data, "data"); + + // This must be a stream header list + if (!data.startsWith(ByteVector.fromString("strl"))) { + return undefined; + } + + let stream: AviStream; + let position = 4; + while (position + 8 < data.length) { + const id = data.mid(position, 4).toString(); + const blockLength = data.mid(position + 4, 4).toUInt(false); + + if (id === "strh" && !stream) { + const streamHeader = new AviStreamHeader(data, position + 8); + switch (streamHeader.type) { + case AviStreamType.VIDEO_STREAM: + stream = new AviVideoStream(streamHeader); + break; + case AviStreamType.AUDIO_STREAM: + stream = new AviAudioStream(streamHeader); + break; + case AviStreamType.MIDI_STREAM: + case AviStreamType.TEXT_STREAM: + // @TODO: Maybe support reading these? + break; + } + } else if (stream) { + stream.parseItem(id, data, position + 8); + } + + position += blockLength + 8; + } + + return stream; + } + + protected abstract parseItem(id: string, data: ByteVector, start: number): void; + + // #endregion +} + +/** + * Representation of an AVI audio stream to support reading audio stream data. + */ +export class AviAudioStream extends AviStream { + /** + * Constructs and initializes a new instance with a specified stream header. + * @param header Header that defines the stream + */ + public constructor(header: AviStreamHeader) { + super(header); + } + + protected parseItem(id: string, data: ByteVector, start: number) { + if (id === "strf") { + this._codec = new RiffWaveFormatEx(data, start); + } + } +} + +/** + * Representation of an AVI video stream to support reading video stream data. + */ +export class AviVideoStream extends AviStream { + /** + * Constructs and initializes a new instance with a specified stream header. + * @param header Header that defines the stream + */ + public constructor(header: AviStreamHeader) { + super(header); + } + + protected parseItem(id: string, data: ByteVector, start: number) { + if (id === "strf") { + this._codec = new RiffBitmapInfoHeader(data, start); + } + } +} diff --git a/src/riff/aviStreamHeader.ts b/src/riff/aviStreamHeader.ts new file mode 100644 index 00000000..57449158 --- /dev/null +++ b/src/riff/aviStreamHeader.ts @@ -0,0 +1,182 @@ +import {ByteVector} from "../byteVector"; +import {CorruptFileError} from "../errors"; +import {Guards} from "../utils"; + +export enum AviStreamType { + /** Audio Stream */ + /* auds*/ AUDIO_STREAM = 0x73647561, + + /** MIDI Stream */ + /* mids */ MIDI_STREAM = 0x7264696D, + + /** Text stream */ + /* txts */ TEXT_STREAM = 0x73747874, + + /** Video stream */ + /* vids */ VIDEO_STREAM = 0x73646976 +} + +/** + * Contains information about one stream in an AVI file. + * @link https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/avifmt/ns-avifmt-avistreamheader + */ +export class AviStreamHeader { + private readonly _bottom: number; + private readonly _flags: number; + private readonly _handler: number; + private readonly _initialFrames: number; + private readonly _language: number; + private readonly _left: number; + private readonly _length: number; + private readonly _priority: number; + private readonly _quality: number; + private readonly _rate: number; + private readonly _right: number; + private readonly _sampleSize: number; + private readonly _scale: number; + private readonly _start: number; + private readonly _suggestedBufferSize: number; + private readonly _top: number; + private readonly _type: number; + + /** + * Constructs and initializes a new instance by reading the raw structure from a specified + * position in the provided data. + * @param data Data that contains the raw stream header + * @param offset Position into `data` where the stream header begins + */ + public constructor(data: ByteVector, offset: number) { + Guards.truthy(data, "data"); + Guards.uint(offset, "offset"); + if (offset + 56 > data.length) { + throw new CorruptFileError("Expected 56 bytes for AVI stream header"); + } + + this._type = data.mid(offset, 4).toUInt(false); + this._handler = data.mid(offset + 4, 4).toUInt(false); + this._flags = data.mid(offset + 8, 4).toUInt(false); + this._priority = data.mid(offset + 12, 2).toUShort(false); + this._language = data.mid(offset + 14, 2).toUShort(false); + this._initialFrames = data.mid(offset + 16, 4).toUInt(false); + this._scale = data.mid(offset + 20, 4).toUInt(false); + this._rate = data.mid(offset + 24, 4).toUInt(false); + this._start = data.mid(offset + 28, 4).toUInt(false); + this._length = data.mid(offset + 32, 4).toUInt(false); + this._suggestedBufferSize = data.mid(offset + 36, 4).toUInt(false); + this._quality = data.mid(offset + 40, 4).toUInt(false); + this._sampleSize = data.mid(offset + 44, 4).toUInt(false); + this._left = data.mid(offset + 48, 2).toUShort(false); + this._top = data.mid(offset + 50, 2).toUShort(false); + this._right = data.mid(offset + 52, 2).toUShort(false); + this._bottom = data.mid(offset + 54, 2).toUShort(false); + } + + /** + * Gets the offset from the bottom of the main movie rectangle where this stream should be + * positioned. + */ + public get bottom(): number { return this._bottom; } + + /** + * Gets any flags for the data stream. + */ + public get flags(): number { return this._flags; } + + /** + * Gets an optional FOURCC that identifies a specific data handler. The data handler is the + * preferred handler for the stream. For audio/video streams, this specifies the codec for + * decoding the stream. + */ + public get handler(): number { return this._handler; } + + /** + * Gets how far audio data is skewed ahead of the video frames in an interleaved file. This + * value generally 0 for non-interleaved files. + */ + public get initialFrames(): number { return this._initialFrames; } + + /** + * Gets the language tag for the stream. + */ + public get language(): number { return this._language; } + + /** + * Gets the offset from the left of the main movie rectangle where this stream should be + * positioned. + */ + public get left(): number { return this._left; } + + /** + * Gets the length of the stream. The units are defined by `rate` and `scale` in the main file + * header. + */ + public get length(): number { return this._length; } + + /** + * Gets the priority of a stream type. For example, in a file with multiple audio streams, + * the one with the highest priority might be the default stream. + */ + public get priority(): number { return this._priority; } + + /** + * Gets an indicator of the quality of the data in the stream. Quality is represented as a + * number between `0` and `10000`. -1 indicates the default quality values shold be used. + * @remarks For compressed data, this typically represents the value of the quality parameter + * passed to the compression software. + */ + public get quality(): number { return this._quality; } + + /** + * Used with {@see scale} to specify the time scale that this stream will use. + * @remarks Dividing {@see rate} by this gives the number of samples per second. For video + * streams, this is the frame rate. For audio streams, this rate corresponds to the time + * needed to play {@see RiffWaveFormatEx.blockAligh} bytes of audio. For PCM audio this is + * just the sample rate. + */ + public get rate(): number { return this._rate; } + + /** + * Gets the offset from the right of the main movie rectangle where this stream should be + * positioned. + */ + public get right(): number { return this._right; } + + /** + * Gets the size of a single sample of data. If the sample size varies, this will be `0`. + */ + public get sampleSize(): number { return this._sampleSize; } + + /** + * Used with {@see rate} to specify the time scale that this stream will use. + * @remarks Dividing {@see rate} by this gives the number of samples per second. For video + * streams, this is the frame rate. For audio streams, this rate corresponds to the time + * needed to play `nBlockAlign` bytes of audio. For PCM audio is just the sample rate. + */ + public get scale(): number { return this._scale; } + + /** + * Gets the starting time for this stream. The units are defined by `rate` and `scale` in the + * main file header. + * @remarks Usually this is zero, but it can specify a delay time for a stream that does not + * start concurrently with the file. + */ + public get start(): number { return this._start; } + + /** + * Gets how large of a buffer should be used to read this stream. + * @remarks Typically, this contains a value corresponding to the largest chunk present in the + * stream. + */ + public get suggestedSampleSize(): number { return this._suggestedBufferSize; } + + /** + * Gets the offset from the top of the main movie rectangle where this stream should be + * positioned. + */ + public get top(): number { return this._top; } + + /** + * Gets a FOURCC that species the type of data contained in the stream. + */ + public get type(): AviStreamType { return this._type; } +} diff --git a/src/riff/divxTag.ts b/src/riff/divxTag.ts new file mode 100644 index 00000000..58b29396 --- /dev/null +++ b/src/riff/divxTag.ts @@ -0,0 +1,171 @@ +import {ByteVector, StringType} from "../byteVector"; +import {CorruptFileError} from "../errors"; +import {File, FileAccessMode} from "../file"; +import {Genres} from "../index"; +import {Tag, TagTypes} from "../tag"; +import {Guards} from "../utils"; + +export default class DivxTag extends Tag { + /** + * Identifier used to recognize DivX tags. + */ + public static readonly FILE_IDENTIFIER = ByteVector.fromString("DIVXTAG", undefined, undefined, true); + + /** + * Size of a DivX tag in bytes. + */ + public static readonly SIZE = 128; + + private _artist: string = ""; + private _comment: string = ""; + private _extraData: ByteVector = ByteVector.fromSize(6); + private _genre: string = ""; + private _title: string = ""; + private _year: string = ""; + + // #region Constructors + + private constructor() { + super(); + } + + /** + * Constructs and initializes a new instance by reading the raw tag data stored in a specified + * {@link ByteVector} object. + * @param data {@link ByteVector} that contains the raw tag data + */ + public static fromData(data: ByteVector): DivxTag { + Guards.truthy(data, "data"); + if (data.length < DivxTag.SIZE) { + throw new CorruptFileError("DivX tag data is less than minimum DivX tag length"); + } + if (!data.endsWith(this.FILE_IDENTIFIER)) { + throw new CorruptFileError("DivX tag does not end with identifier"); + } + + const tag = new DivxTag(); + tag._title = data.toString(32, StringType.Latin1, 0).trim(); + tag._artist = data.toString(28, StringType.Latin1, 32).trim(); + tag._year = data.toString(4, StringType.Latin1, 60).trim(); + tag._comment = data.toString(48, StringType.Latin1, 64).trim(); + tag._genre = data.toString(3, StringType.Latin1, 112).trim(); + tag._extraData = data.mid(115, 6); + + return tag; + } + + /** + * Constructs and initializes a new instance with no contents. + */ + public static fromEmpty(): DivxTag { + return new DivxTag(); + } + + /** + * Constructs and initializes a new instance by reading the contents of the tag from a + * specified position in the provided file. + * @param file File containing the tag + * @param position Index into the file where the tag starts. Must be a safe, unsigned integer + */ + public static fromFile(file: File, position: number): DivxTag { + Guards.truthy(file, "file"); + Guards.safeUint(position, "position"); + + // Move to location where tag starts + file.mode = FileAccessMode.Read; + if (position > file.length - DivxTag.SIZE) { + throw new Error("Argument out of range: position must be within size of file"); + } + file.seek(position); + + // Read the tag -- always 128 bytes + const data = file.readBlock(DivxTag.SIZE); + return DivxTag.fromData(data); + } + + // #endregion + + // #region Properties + + /** @inheritDoc */ + public get tagTypes(): TagTypes { return TagTypes.DivX; } + + /** @inheritDoc */ + public get title(): string { return this._title || undefined; } + /** @inheritDoc */ + public set title(value: string) { this._title = value ? value.trim() : ""; } + + /** @inheritDoc */ + public get performers(): string[] { return this._artist ? this._artist.split(";") : []; } + /** @inheritDoc */ + public set performers(value: string[]) { this._artist = value ? value.join(";") : ""; } + + /** @inheritDoc */ + public get comment(): string { return this._comment || undefined; } + /** @inheritDoc */ + public set comment(value: string) { this._comment = value ? value.trim() : ""; } + + /** + * @inheritDoc + * @remarks Genre is stored as an numeric genre. This is translated into the human- + * readable genre. + */ + public get genres(): string[] { + const genreName = Genres.indexToVideo(this._genre, false); + return genreName ? [genreName] : []; + } + /** + * @inheritDoc + * @remarks Genre is stored as an numeric genre, so only video genres are supported. Only + * one genre can be stored. + */ + public set genres(value: string[]) { + this._genre = value && value.length > 0 + ? Genres.videoToIndex(value[0].trim()).toString() + : ""; + } + + /** @inheritDoc */ + public get year(): number { + const numericYear = Number.parseInt(this._year, 10); + return Number.isNaN(numericYear) ? 0 : numericYear; + } + /** @inheritDoc */ + public set year(value: number) { + Guards.uint(value, "value"); + this._year = value > 0 && value < 10000 + ? value.toString() + : ""; + } + + // #endregion + + // #region Methods + + /** @inheritDoc */ + public clear() { + this._title = ""; + this._artist = ""; + this._genre = ""; + this._year = ""; + this._comment = ""; + this._extraData = ByteVector.fromSize(6); + } + + /** + * Renders the current instance as a raw DivX tag. + */ + public render(): ByteVector { + return ByteVector.concatenate( + ByteVector.fromString(this._title, StringType.Latin1).resize(32, 0x20), + ByteVector.fromString(this._artist, StringType.Latin1).resize(28, 0x20), + ByteVector.fromString(this._year, StringType.Latin1).resize(4, 0x20), + ByteVector.fromString(this._comment, StringType.Latin1).resize(48, 0x20), + ByteVector.fromString(this._genre, StringType.Latin1).resize(3, 0x20), + this._extraData, + DivxTag.FILE_IDENTIFIER + ); + } + + // #endregion +} diff --git a/src/riff/infoTag.ts b/src/riff/infoTag.ts new file mode 100644 index 00000000..74108e60 --- /dev/null +++ b/src/riff/infoTag.ts @@ -0,0 +1,229 @@ +import RiffListTag from "./riffListTag"; +import {ByteVector} from "../byteVector"; +import {File} from "../file"; +import {TagTypes} from "../tag"; +import {Guards} from "../utils"; + +/** + * Provides support for reading and writing standard INFO tags. + */ +export default class InfoTag extends RiffListTag { + + // #region Constructors + + private constructor() { + super(); + } + + /** + * Constructs and initializes a new instance by reading the contents of a raw RIFF list stored + * in a {@link ByteVector} object. + * @param data Object containing the raw RIFF list + */ + public static fromData(data: ByteVector): InfoTag { + const tag = new InfoTag(); + tag.initializeFromData(data); + return tag; + } + + /** + * Constructs and initializes a new, empty instance. + */ + public static fromEmpty(): InfoTag { + const tag = new InfoTag(); + tag.initializeFromEmpty(); + return tag; + } + + /** + * Constructs and initializes a new instance by reading the contents of a raw RIFF list stored + * a file. + * @param file File containing the raw RIFF list + * @param position Index into the file where the RIFF list begins. Must be a safe, unsigned int + * @param length Number of bytes to read + */ + public static fromFile(file: File, position: number, length: number): InfoTag { + const tag = new InfoTag(); + tag.initializeFromFile(file, position, length); + return tag; + } + + // #endregion + + // #region Properties + + /** @inheritDoc */ + public get tagTypes(): TagTypes { return TagTypes.RiffInfo; } + + /** + * @inheritDoc + * @remarks Implemented via the `INAM` item. + */ + public get title(): string { return this.getFirstValueAsString("INAM"); } + /** + * @inheritDoc + * @remarks Implemented via the `INAM` item. + */ + public set title(value: string) { this.setValuesFromStrings("INAM", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `ISBJ` item. + */ + public get description(): string { return this.getFirstValueAsString("ISBJ"); } + /** + * @inheritDoc + * @remarks Implemented via the `ISBJ` item. + */ + public set description(value: string) { this.setValuesFromStrings("ISBJ", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `ISTR` item. + */ + public get performers(): string[] { return this.getValuesAsStrings("ISTR"); } + /** + * @inheritDoc + * @remarks Implemented via the `ISTR` item. + */ + public set performers(value: string[]) { + value = value || []; + this.setValuesFromStrings("ISTR", ... value); + } + + /** + * @inheritDoc + * @remarks Implemented via the `IART` item. + */ + public get albumArtists(): string[] { return this.getValuesAsStrings("IART"); } + /** + * @inheritDoc + * @remarks Implemented via the `IART` item. + */ + public set albumArtists(value: string[]) { + value = value || []; + this.setValuesFromStrings("IART", ... value); + } + + /** + * @inheritDoc + * @remarks Implemented via the `IWRI` item. + */ + public get composers(): string[] { return this.getValuesAsStrings("IWRI"); } + /** + * @inheritDoc + * @remarks Implemented via the `IWRI` item. + */ + public set composers(value: string[]) { + value = value || []; + this.setValuesFromStrings("IWRI", ... value); + } + + /** + * @inheritDoc + * @remarks Implemented via the `DIRC` item. + */ + public get album(): string { return this.getFirstValueAsString("DIRC"); } + /** + * @inheritDoc + * @remarks Implemented via the `DIRC` item. + */ + public set album(value: string) { this.setValuesFromStrings("DIRC", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `ICNM` item. + */ + public get conductor(): string { return this.getFirstValueAsString("ICNM"); } + /** + * @inheritDoc + * @remarks Implemented via the `ISBJ` item. + */ + public set conductor(value: string) { this.setValuesFromStrings("ICNM", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `ICMT` item. + */ + public get comment(): string { return this.getFirstValueAsString("ICMT"); } + /** + * @inheritDoc + * @remarks Implemented via the `ICMT` item. + */ + public set comment(value: string) { this.setValuesFromStrings("ICMT", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `IGNR` item. + */ + public get genres(): string[] { return this.getValuesAsStrings("IGNR"); } + /** + * @inheritDoc + * @remarks Implemented via the `IGNR` item. + */ + public set genres(value: string[]) { + value = value || []; + this.setValuesFromStrings("IGNR", ... value); + } + + /** + * @inheritDoc + * @remarks Implemented via the `ICRD` item. + */ + public get year(): number { return this.getValueAsUint("ICRD"); } + /** + * @inheritDoc + * @remarks Implemented via the `ICRD` item. + */ + public set year(value: number) { + Guards.uint(value, "value"); + if (value < 0 || value > 9999) { + value = 0; + } + this.setValueFromUint("ICRD", value); + } + + /** + * @inheritDoc + * @remarks Implemented via the `IPRT` item. + */ + public get track(): number { return this.getValueAsUint("IPRT"); } + /** + * @inheritDoc + * @remarks Implemented via the `IPRT` item. + */ + public set track(value: number) { this.setValueFromUint("IPRT", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `IFRM` item. + */ + public get trackCount(): number { return this.getValueAsUint("IFRM"); } + /** + * @inheritDoc + * @remarks Implemented via the `IFRM` item. + */ + public set trackCount(value: number) { this.setValueFromUint("IFRM", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `ICOP` item. + */ + public get copyright(): string { return this.getFirstValueAsString("ICOP"); } + /** + * @inheritDoc + * @remarks Implemented via the `ICOP` item. + */ + public set copyright(value: string) { this.setValuesFromStrings("ICOP", value); } + + // #endregion + + // #region Methods + + /** @inheritDoc */ + public renderEnclosed(): ByteVector { + return this.renderEnclosedInternal("INFO"); + } + + // #endregion +} diff --git a/src/riff/movieIdTag.ts b/src/riff/movieIdTag.ts new file mode 100644 index 00000000..a203e1c4 --- /dev/null +++ b/src/riff/movieIdTag.ts @@ -0,0 +1,142 @@ +import RiffListTag from "./riffListTag"; +import {ByteVector} from "../byteVector"; +import {File} from "../file"; +import {TagTypes} from "../tag"; + +/** + * Provides support for reading and writing MovieID tags. + */ +export default class MovieIdTag extends RiffListTag { + + // #region Constructors + + private constructor() { + super(); + } + + /** + * Constructs and initializes a new instance by reading the contents of a raw RIFF list stored + * in a {@link ByteVector} object. + * @param data Object containing the raw RIFF list + */ + public static fromData(data: ByteVector): MovieIdTag { + const tag = new MovieIdTag(); + tag.initializeFromData(data); + return tag; + } + + /** + * Constructs and initializes a new, empty instance. + */ + public static fromEmpty(): MovieIdTag { + const tag = new MovieIdTag(); + tag.initializeFromEmpty(); + return tag; + } + + /** + * Constructs and initializes a new instance by reading the contents of a raw RIFF list stored + * a file. + * @param file File containing the raw RIFF list + * @param position Index into the file where the RIFF list begins. Must be a safe, unsigned int + * @param length Number of bytes to read + */ + public static fromFile(file: File, position: number, length: number): MovieIdTag { + const tag = new MovieIdTag(); + tag.initializeFromFile(file, position, length); + return tag; + } + + // #endregion + + // #region Properties + + /** @inheritDoc */ + public get tagTypes(): TagTypes { return TagTypes.MovieId; } + + /** + * @inheritDoc + * @remarks Implemented via the `TITL` item. + */ + public get title(): string { return this.getFirstValueAsString("TITL"); } + /** + * @inheritDoc + * @remarks Implemented via the `TITL` item. + */ + public set title(value: string) { this.setValuesFromStrings("TITL", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `IART` item. + */ + public get performers(): string[] { return this.getValuesAsStrings("IART"); } + /** + * @inheritDoc + * @remarks Implemented via the `IART` item. + */ + public set performers(value: string[]) { + value = value || []; + this.setValuesFromStrings("IART", ... value); + } + + /** + * @inheritDoc + * @remarks Implemented via the `COMM` item. + */ + public get comment(): string { return this.getFirstValueAsString("COMM"); } + /** + * @inheritDoc + * @remarks Implemented via the `COMM` item. + */ + public set comment(value: string) { this.setValuesFromStrings("COMM", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `GENR` item. + */ + public get genres(): string[] { return this.getValuesAsStrings("GENR"); } + /** + * @inheritDoc + * @remarks Implemented via the `GENR` item. + */ + public set genres(value: string[]) { + value = value || []; + this.setValuesFromStrings("GENR", ... value); + } + + /** + * @inheritDoc + * @remarks Implemented via the `PRT1` item. + */ + public get track(): number { return this.getValueAsUint("PRT1"); } + /** + * @inheritDoc + * @remarks Implemented via the `PRT1` item. + */ + public set track(value: number) { this.setValueFromUint("PRT1", value); } + + /** + * @inheritDoc + * @remarks Implemented via the `PRT2` item. + */ + public get trackCount(): number { return this.getValueAsUint("PRT2"); } + /** + * @inheritDoc + * @remarks Implemented via the `PRT2` item. + */ + public set trackCount(value: number) { this.setValueFromUint("PRT2", value); } + + // #endregion + + // #region Methods + + /** + * Renders the current instance, enclosed in a `MID ` item. + */ + public renderEnclosed(): ByteVector { + return this.renderEnclosedInternal("MID "); + } + + // #endregion + +} diff --git a/src/riff/riffFile.ts b/src/riff/riffFile.ts new file mode 100644 index 00000000..abfac7e5 --- /dev/null +++ b/src/riff/riffFile.ts @@ -0,0 +1,416 @@ +import CombinedTag from "../combinedTag"; +import DivxTag from "./divxTag"; +import Id3v2Tag from "../id3v2/id3v2Tag"; +import InfoTag from "./infoTag"; +import MovieIdTag from "./movieIdTag"; +import Properties from "../properties"; +import RiffWaveFormatEx from "./riffWaveFormatEx"; +import {AviHeaderList} from "./aviHeaderList"; +import {ByteVector} from "../byteVector"; +import {File, FileAccessMode, ReadStyle} from "../file"; +import {IFileAbstraction} from "../fileAbstraction"; +import {CorruptFileError, UnsupportedFormatError} from "../errors"; +import {ICodec} from "../iCodec"; +import {Id3v2TagHeaderFlags} from "../id3v2/id3v2TagHeader"; +import {Tag, TagTypes} from "../tag"; +import {NumberUtils} from "../utils"; + +export default class RiffFile extends File { + /** + * Identifier used to recognize a RIFF file. + */ + public static readonly FILE_IDENTIFIER = ByteVector.fromString("RIFF", undefined, undefined, true); + + private readonly _tag: CombinedTag = new CombinedTag(); + private _divxTag: DivxTag; + private _id3v2Tag: Id3v2Tag; + private _infoTag: InfoTag; + private _properties: Properties; + private _movieIdTag: MovieIdTag; + + public constructor(file: IFileAbstraction|string, propertiesStyle: ReadStyle) { + super(file); + + this.read(true, propertiesStyle); + + // Make sure we have all the possible tags at our disposal + // @TODO: Creating *all* the tag types should probably be optional + this.getTag(TagTypes.Id3v2, true); + this.getTag(TagTypes.RiffInfo, true); + this.getTag(TagTypes.MovieId, true); + this.getTag(TagTypes.DivX, true); + } + + // #region Properties + + /** @inheritDoc */ + public get tag(): Tag { return this._tag; } + + /** @inheritDoc */ + public get properties(): Properties { return this._properties; } + + // #endregion + + // #region Methods + + /** @inheritDoc */ + public getTag(type: TagTypes, create: boolean): Tag { + let tag: Tag; + + switch (type) { + case TagTypes.Id3v2: + if (!this._id3v2Tag && create) { + this._id3v2Tag = Id3v2Tag.fromEmpty(); + this._id3v2Tag.version = 4; // @TODO: Is only v2.4 supported or should we fallback to default? + this._id3v2Tag.flags |= Id3v2TagHeaderFlags.FooterPresent; + this._tag.copyTo(this._id3v2Tag, true); + } + + tag = this._id3v2Tag; + break; + + case TagTypes.RiffInfo: + if (!this._infoTag) { + this._infoTag = InfoTag.fromEmpty(); + this._tag.copyTo(this._infoTag, true); + } + + tag = this._infoTag; + break; + + case TagTypes.MovieId: + if (!this._movieIdTag) { + this._movieIdTag = MovieIdTag.fromEmpty(); + this._tag.copyTo(this._movieIdTag, true); + } + + tag = this._movieIdTag; + break; + + case TagTypes.DivX: + if (!this._divxTag) { + this._divxTag = DivxTag.fromEmpty(); + this._tag.copyTo(this._divxTag, true); + } + + tag = this._movieIdTag; + break; + } + + this._tag.setTags(this._id3v2Tag, this._infoTag, this._movieIdTag, this._divxTag); + return tag; + } + + /** @inheritDoc */ + public removeTags(types: TagTypes): void { + if (NumberUtils.uintAnd(types, TagTypes.Id3v2) !== TagTypes.None) { + this._id3v2Tag = undefined; + } + if (NumberUtils.uintAnd(types, TagTypes.RiffInfo) !== TagTypes.None) { + this._infoTag = undefined; + } + if (NumberUtils.uintAnd(types, TagTypes.MovieId) !== TagTypes.None) { + this._movieIdTag = undefined; + } + // noinspection JSSuspiciousNameCombination + if (NumberUtils.uintAnd(types, TagTypes.DivX) !== TagTypes.None) { + this._divxTag = undefined; + } + + this._tag.setTags(this._id3v2Tag, this._infoTag, this._movieIdTag, this._divxTag); + } + + /** @inheritDoc */ + public save(): void { + this.preSave(); + + this.mode = FileAccessMode.Write; + try { + const data = ByteVector.empty(); + + // Enclose the ID3v2 tag in an "id3 " item and embed it as the first tag. + if (this._id3v2Tag) { + const id3v2TagData = this._id3v2Tag.render(); + if (id3v2TagData.length > 10) { + if (id3v2TagData.length % 2 === 1) { + id3v2TagData.addByte(0); + } + data.addByteVector(ByteVector.concatenate( + ByteVector.fromString("id3 "), + ByteVector.fromUInt(id3v2TagData.length, false), + id3v2TagData + )); + } + } + + // Embed "INFO" tag as the second tag + if (this._infoTag) { + data.addByteVector(this._infoTag.renderEnclosed()); + } + + // Embed MovieID as the third tag + if (this._movieIdTag) { + data.addByteVector(this._movieIdTag.renderEnclosed()); + } + + // Embed the DivX tag in "IDVX" as the fourth tag + if (this._divxTag) { + const divxTagData = this._divxTag.render(); + // NOTE: No need to pad odd sized tags, b/c DivX is always 128 bytes + data.addByteVector(ByteVector.concatenate( + ByteVector.fromString("IDVX"), + ByteVector.fromUInt(divxTagData.length, false), + divxTagData + )); + } + + // Reread the file to figure out where the RIFF tag blocks should go + // NOTE: I suppose we could just store this info in the class when we first read in the + // file, but this *does* prevent problems if the file changes in between reading and + // wring. + const readInfo = this.read(false, ReadStyle.None); + + // If tagging info cannot be found, place it at the end of the file + if (readInfo.tagStart < 12 || readInfo.tagEnd < readInfo.tagStart) { + readInfo.tagStart = this.length; + readInfo.tagEnd = this.length; + } + + const originalTagLength = readInfo.tagEnd - readInfo.tagStart; + + // If the tag isn't at the end of the file, try appending using padding to improve + // write time now or for subsequent writes. + if (readInfo.tagEnd !== this.length) { + let paddingSize = originalTagLength - data.length - 8; + if (paddingSize < 0) { + paddingSize = 1024; + } + + data.addByteVector(ByteVector.concatenate( + ByteVector.fromString("JUNK"), + ByteVector.fromUInt(paddingSize, false), + ByteVector.fromSize(paddingSize) + )); + } + + // Insert the tagging data + this.insert(data, readInfo.tagStart, originalTagLength); + + // If the data size changed, and the tagging data is within the RIFF portion of the + // file, update the riff size + if (data.length - originalTagLength !== 0 && readInfo.tagStart <= readInfo.riffSize) { + const newRiffSize = ByteVector.fromUInt(readInfo.riffSize + data.length - originalTagLength, false); + this.insert(newRiffSize, 4, 4); + } + + // Update the tag types on disk + this._tagTypesOnDisk = this.tagTypes; + } finally { + this.mode = FileAccessMode.Closed; + } + } + + private read(readTags: boolean, style: ReadStyle): {riffSize: number, tagEnd: number, tagStart: number} { + this.mode = FileAccessMode.Read; + + try { + // Make sure this is a RIFF file + if (!ByteVector.equal(this.readBlock(4), RiffFile.FILE_IDENTIFIER)) { + throw new CorruptFileError("File does not begin with RIFF identifier"); + } + + // Initialize our loop state + const riffSize = this.readBlock(4).toUInt(false); + const streamFormat = this.readBlock(4).toString(); + let tagStart = -1; + let tagEnd = -1; + let position = 12; + let size = 0; + let durationMilliseconds = 0; + let codecs: ICodec[] = []; + + // Read until there are less than 8 bytes to read + do { + let tagFound = false; + + // Check if the current position is an odd number and increment it so it is even. + // This is done when the previous chunk size was an odd number. If this is not + // done, the chunk being read after the odd chunk will not be read. + if (position > 12 && (position % 2) === 1) { + position++; + } + + this.seek(position); + const fourcc = this.readBlock(4).toString(); + size = this.readBlock(4).toUInt(false); + + switch (fourcc) { + case "fmt ": + // "fmt " is used by wave files to hold the WaveFormatEx structure + if (style === ReadStyle.None || streamFormat !== "WAVE") { + break; + } + + this.seek(position + 8); + codecs = [new RiffWaveFormatEx(this.readBlock(18), 0)]; + break; + + case "data": + // "data" contains the audio data for wave files. It's contents represent + // the invariant portion of the file and is used to determine the duration + // of a file. It should always appear after "fmt ". + if (streamFormat !== "WAVE") { + break; + } + + this._invariantStartPosition = position; + this._invariantEndPosition = position + size; + + if ( + style === ReadStyle.None || + codecs.length !== 1 || + !(codecs[0] instanceof RiffWaveFormatEx) + ) { + break; + } + + const durationSeconds = size / ( codecs[0]).averageBytesPerSecond; + durationMilliseconds += durationSeconds * 1000; + break; + + case "LIST": + // Lists are used to store a variety of data collections. Read the type and + // act on it. + switch (this.readBlock(4).toString()) { + case "hdrl": + // "hdrl" is used by AVI files to hold a media header and + // BitmapInfoHeader and WaveFormatEv structures. + if (style === ReadStyle.None || streamFormat !== "AVI ") { + position += 8 + size; + continue; + } + + const headerList = new AviHeaderList(this, position + 12, size - 4); + durationMilliseconds = headerList.header.durationMilliseconds; + codecs = headerList.codecs; + break; + + case "INFO": + // "INFO" is a tagging format handled by the InfoTag class + if (readTags && !this._infoTag) { + this._infoTag = InfoTag.fromFile(this, position + 12, size - 4); + } + + tagFound = true; + break; + + case "MID ": + // "MID " is a tagging format handled by the MovieIdTag class + if (readTags && !this._movieIdTag) { + this._movieIdTag = MovieIdTag.fromFile(this, position + 12, size - 4); + } + + tagFound = true; + break; + + case "movi": + // "movi" contains the media data for an AVI and its contents + // represent the inavariant portion of the file + if (streamFormat !== "AVI ") { + break; + } + + this._invariantStartPosition = position; + this._invariantEndPosition = position + size; + break; + } + break; + + case "id3 ": + case "ID3 ": + case "ID32": + // "ID32" is a custom box for this format that contains an ID3v2 tag. + // "ID3 " and "id3 " have become defacto standards. + if (readTags && !this._id3v2Tag) { + this._id3v2Tag = Id3v2Tag.fromFile(this, position + 8, style); + } + + tagFound = true; + break; + + case "IDVX": + // "IDVX" is used by DivX and holds an ID3v1 style tag + if (readTags && !this._divxTag) { + this._divxTag = DivxTag.fromFile(this, position + 8); + } + + tagFound = true; + break; + + case "JUNK": + // "JUNK" is a padding element that could be associated with tag data. + if (tagEnd === position) { + tagEnd = position + 8 + size; + } + break; + } + + // Determine the region of the file that contains tags. + if (tagFound) { + if (tagStart === -1) { + tagStart = position; + tagEnd = position + 8 + size; + } else if (tagEnd === position) { + tagEnd = position + 8 + size; + } + } + + // Move to the next item + position += 8 + size; + } while (position + 8 < this.length); + + // If we're reading properties and one was found, throw an exception. Otherwise + // create the properties object + if (style !== ReadStyle.None) { + if (codecs.length === 0) { + throw new UnsupportedFormatError("Unsupported RIFF type"); + } + + this._properties = new Properties(durationMilliseconds, codecs); + } + + // If we're reading tags, update the combined tag + if (readTags) { + this._tag.setTags(this._id3v2Tag, this._infoTag, this._movieIdTag, this._divxTag); + } + + return { + riffSize: riffSize, + tagEnd: tagEnd, + tagStart: tagStart + }; + + } finally { + this.mode = FileAccessMode.Closed; + } + } + + // #endregion +} + +//////////////////////////////////////////////////////////////////////////// +// Register the file type +[ + "taglib/avi", + "taglib/wav", + "taglib/divx", + "video/avi", + "video/msvideo", + "video/x-msvideo", + "image/avi", + "application/x-troff-msvideo", + "audio/avi", + "audio/wav", + "audio/wave", + "audio/x-wav" +].forEach((mt) => File.addFileType(mt, RiffFile)); diff --git a/src/riff/riffList.ts b/src/riff/riffList.ts new file mode 100644 index 00000000..174a1d1e --- /dev/null +++ b/src/riff/riffList.ts @@ -0,0 +1,264 @@ +import {ByteVector, StringType} from "../byteVector"; +import {File} from "../file"; +import {Guards} from "../utils"; + +export default class RiffList { + private _dict: {[key: string]: ByteVector[]} = {}; + private _stringType: StringType = StringType.UTF8; + + /** + * Constructs and initializes a new instance by reading the contents of a raw RIFF list stored + * in a {@link ByteVector} object. + * @param data Object containing a raw RIFF list to read into the new instance. + */ + public static fromData(data: ByteVector): RiffList { + Guards.truthy(data, "data"); + + const list = new RiffList(); + + let offset = 0; + while (offset + 8 <= data.length) { + const id = data.mid(offset, 4).toString(4); + let length = data.mid(offset + 4, 4).toUInt(false); + + if (list._dict[id] === undefined) { + list._dict[id] = []; + } + list._dict[id].push(data.mid(offset + 8, length)); + + if (length % 2 === 1) { + length++; + } + + offset += 8 + length; + } + + return list; + } + + /** + * Constructs and initializes a new instance by reading the contents of a raw RIFF list from a + * specified position in a file. + * @param file File containing the contents of the new instance + * @param position Index into the file where the the list begins, must be safe positive integer + * @param length Length of the list in bytes, must be a positive integer + */ + public static fromFile(file: File, position: number, length: number): RiffList { + Guards.truthy(file, "file"); + Guards.safeUint(position, "position"); + Guards.uint(length, "length"); + if (position > file.length - length) { + throw new Error("Argument out of range: position must be less than file length"); + } + + file.seek(position); + return RiffList.fromData(file.readBlock(length)); + } + + /** + * Gets the {@link StringType} value used for parsing and rendering the contents of this list. + */ + public get stringType(): StringType { return this._stringType; } + /** + * Sets the {@link StringType} value used for parsing and rendering the contents of this list. + */ + public set stringType(value: StringType) { this._stringType = value; } + + /** + * Gets the number of items in the current instance. + */ + public get length(): number { return Object.keys(this._dict).length; } + + // #region Methods + + /** + * Removes all elements from the list. + */ + public clear(): void { + for (const key in this._dict) { + if (!this._dict.hasOwnProperty(key)) { + continue; + } + delete this._dict[key]; + } + } + + /** + * Determines whether the current instance contains the specified key. + * @param id Key to locate in the current instance + * @returns `true` if key exists, `false` otherwise + */ + public containsKey(id: string) { + return !!this._dict[id]; + } + + /** + * Gets the values for a specified item in the current instance as an array of + * {@link ByteVector}. + * @param id ID of the item of which to get the values. Must be 4 bytes + */ + public getValues(id: string): ByteVector[] { + RiffList.validateId(id); + return this._dict[id] || []; + } + + /** + * Gets the values for a specified item as an array of strings. + * @param id ID of the item of which to get the values. Must be 4 bytes + */ + public getValuesAsStrings(id: string): string[] { + const values = this.getValues(id); + return values.map((value) => { + return value + ? value.toString(value.length, this._stringType) + : ""; + }); + } + + /** + * Gets the value for a specified item in the current instance as an unsigned integer. The + * first value that can be parsed as an int will be returned. `0` is returned if no matching + * values exist. + * @param id ID of the item of which to get the values. Must be 4 bytes + */ + public getValueAsUint(id: string): number { + for (const value of this.getValuesAsStrings(id)) { + const numberValue = Number.parseInt(value, 10); + if (!Number.isNaN(numberValue) && numberValue > 0) { + return numberValue; + } + } + + return 0; + } + + /** + * Removes the item with the specified ID from the current instance. + * @param id ID of the item to remove. Must be 4 bytes + */ + public removeValue(id: string): void { + RiffList.validateId(id); + delete this._dict[id]; + } + + /** + * Renders the current instance as a raw RIFF list. + */ + public render(): ByteVector { + const renderedValues = []; + for (const key in this._dict) { + if (!this._dict.hasOwnProperty(key)) { continue; } + + for (const value of this._dict[key]) { + // Omit any empty values + if (value.length === 0) { + continue; + } + + const data = ByteVector.concatenate( + ByteVector.fromString(key), + ByteVector.fromUInt(value.length, false), + value + ); + + // Pad odd length values + if (value.length % 2 === 1) { + data.addByte(0x00); + } + + renderedValues.push(data); + } + } + + return ByteVector.concatenate(... renderedValues); + } + + /** + * Renders the current instance enclosed in an item with a specified ID. + * @param id ID of the item in which to enclose the current instance. Must be 4 bytes. + */ + public renderEnclosed(id: string): ByteVector { + RiffList.validateId(id); + + const data = this.render(); + if (data.length <= 8) { + return ByteVector.empty(); + } + + const header = ByteVector.concatenate( + ByteVector.fromString("LIST"), + ByteVector.fromUInt(data.length + 4, false), + ByteVector.fromString(id) + ); + data.insertByteVector(0, header); + + return data; + } + + /** + * Sets the value for a specified item in the current instance to a uint. + * @param id ID of the item of which to get the values. Must be 4 bytes + * @param value Value to store in the item. Must be an unsigned integer + */ + public setValueFromUint(id: string, value: number) { + RiffList.validateId(id); + Guards.uint(value, "value"); + + if (value === 0) { + this.removeValue(id); + } else { + this.setValuesFromStrings(id, value.toString(10)); + } + } + + /** + * Sets the value for a specified item in the current instance to an array. + * @param id ID of the item of which to get the values. Must be 4 bytes + * @param values Array of {@link ByteVector} to store in the specified item. If falsey or + * undefined, the item will be removed + */ + public setValues(id: string, ... values: ByteVector[]): void { + RiffList.validateId(id); + if (!values || values.length === 0) { + this.removeValue(id); + } else { + this._dict[id] = values; + } + } + + /** + * Sets the value for a specified item in the current instance to an array of strings. + * @param id ID of the item of which to get the values. Must be 4 bytes + * @param values Array of strings to store in the specified item. If falsey or undefined, the + * item will be removed + */ + public setValuesFromStrings(id: string, ... values: string[]): void { + RiffList.validateId(id); + + if (!values || values.length === 0) { + this.removeValue(id); + return; + } + + const byteVectorValues = values + .filter((v) => v !== undefined && v !== null) + .map((v) => { + return ByteVector.fromString(v, this._stringType); + }); + + if (byteVectorValues.length === 0) { + this.removeValue(id); + } else { + this.setValues(id, ... byteVectorValues); + } + } + + private static validateId(id: string) { + Guards.truthy(id, "id"); + if (id.length !== 4) { + throw new Error("Argument error: ID must be 4 bytes long"); + } + } + + // #endregion +} diff --git a/src/riff/riffListTag.ts b/src/riff/riffListTag.ts new file mode 100644 index 00000000..4bf75298 --- /dev/null +++ b/src/riff/riffListTag.ts @@ -0,0 +1,165 @@ +import RiffList from "./riffList"; +import {ByteVector, StringType} from "../byteVector"; +import {File} from "../file"; +import {Tag} from "../tag"; +import {Guards} from "../utils"; + +/** + * Abstract class that provides support for reading/writing tags in the RIFF list format. + */ +export default abstract class RiffListTag extends Tag { + // NOTE: Although it would totally make sense for this class to extend RiffList, we can't do + // that because multiple inheritance doesn't exist. + + private _fields: RiffList; + private _stringType: StringType = StringType.UTF8; + + // #region Constructors + + protected constructor() { + super(); + } + + protected initializeFromEmpty(): void { + this._fields = new RiffList(); + } + + protected initializeFromList(fields: RiffList): void { + Guards.truthy(fields, "fields"); + this._fields = fields; + } + + protected initializeFromData(data: ByteVector): void { + this._fields = RiffList.fromData(data); + } + + protected initializeFromFile(file: File, position: number, length: number): void { + this._fields = RiffList.fromFile(file, position, length); + } + + // #endregion + + // #region Properties + + /** @inheritDoc */ + public get isEmpty(): boolean { return this._fields.length === 0; } + + /** + * Gets the type of string used for parsing and rendering the contents of this tag. + */ + public get stringType(): StringType { return this._stringType; } + /** + * Sets the type of string used for parsing and rendering the contents of this tag. + * @remarks The value must be `StringType.Latin1` or `StringType.UTF8`. + */ + public set stringType(value: StringType) { + // @TODO: Add a guard here? + this._stringType = value; + } + + // #endregion + + // #region Methods + + /** @inheritDoc */ + public clear() { + this._fields.clear(); + } + + /** + * Gets the value for a specified item in the current instance as an unsigned integer. + * @param id ID of the item for which to get the value + */ + public getValueAsUint(id: string): number { + return this._fields.getValueAsUint(id); + } + + /** + * Gets the values for a specified item in the current instance. + * @param id ID of the item of which to get the values + */ + public getValues(id: string): ByteVector[] { + return this._fields.getValues(id); + } + + /** + * Gets the values for a specified item in the current instance as strings. + * @param id ID of the item of which to get the values + */ + public getValuesAsStrings(id: string): string[] { + return this._fields.getValuesAsStrings(id); + } + + /** + * Removed the item with the specified ID from the current instance. + * @param id ID of the item to remove + */ + public removeValue(id: string): void { + this._fields.removeValue(id); + } + + /** + * Renders the current instance as a raw RIFF list. + */ + public render(): ByteVector { + return this._fields.render(); + } + + /** + * Renders the current instance enclosed in the appropriate item. + */ + public abstract renderEnclosed(): ByteVector; + + /** + * Sets the value for a specified item in the current instance using an unsigned integer. + * @param id ID of the item to set + * @param value Value to store in the specified item, must be an unsigned 32-bit integer + */ + public setValueFromUint(id: string, value: number): void { + this._fields.setValueFromUint(id, value); + } + + /** + * Sets the value for a specified item in the current instance + * @param id ID of the item to set + * @param values Values to store in the specified item + */ + public setValues(id: string, ... values: ByteVector[]): void { + this._fields.setValues(id, ... values); + } + + /** + * Sets the value for a specified item in the current instance using a list of strings. + * @param id ID of the item to set + * @param values Values to store in the specified item + */ + public setValuesFromStrings(id: string, ... values: string[]): void { + this._fields.setValuesFromStrings(id, ... values); + } + + /** + * Gets the first non-falsy string for the specified ID. If the item is not found, `undefined` + * is returned. + * @param id ID of the item to lookup in the list. + * @protected + */ + protected getFirstValueAsString(id: string): string | undefined { + return this.getValuesAsStrings(id).find((v) => !!v) || undefined; + } + + /** + * Renders the current instance enclosed in an item with a specified ID. + * @param id ID of the item to enclose the current instance in when rendering + */ + protected renderEnclosedInternal(id: string): ByteVector { + Guards.truthy(id, "id"); + if (id.length !== 4) { + throw new Error("ID must be 4 bytes long"); + } + + return this._fields.renderEnclosed(id); + } + + // #endregion + +} diff --git a/src/riff/riffWaveFormatEx.ts b/src/riff/riffWaveFormatEx.ts index 32b92544..1661a45b 100644 --- a/src/riff/riffWaveFormatEx.ts +++ b/src/riff/riffWaveFormatEx.ts @@ -1,7 +1,7 @@ import {ByteVector} from "../byteVector"; +import {CorruptFileError} from "../errors"; import {ILosslessAudioCodec, MediaTypes} from "../iCodec"; import {Guards} from "../utils"; -import {CorruptFileError} from "../errors"; /** * Defines the format of waveform-audio data. Only format information common to all waveform-audio @@ -281,6 +281,7 @@ export default class RiffWaveFormatEx implements ILosslessAudioCodec { private readonly _averageBytesPerSecond: number; private readonly _bitsPerSample: number; + private readonly _blockAlign: number; private readonly _channels: number; private readonly _formatTag: number; private readonly _samplesPerSecond: number; @@ -302,6 +303,7 @@ export default class RiffWaveFormatEx implements ILosslessAudioCodec { this._channels = data.mid(offset + 2, 2).toUShort(false); this._samplesPerSecond = data.mid(offset + 4, 4).toUInt(false); this._averageBytesPerSecond = data.mid(offset + 8, 4).toUInt(false); + this._blockAlign = data.mid(offset + 12, 2).toUShort(false); this._bitsPerSample = data.mid(offset + 14, 2).toUShort(false); } @@ -325,9 +327,16 @@ export default class RiffWaveFormatEx implements ILosslessAudioCodec { /** * @inheritDoc * @remarks Some compression schemes cannot define a value for this field, so it may be `0`. + * This is especially common for MP3 audio embedded in an AVI. */ public get bitsPerSample(): number { return this._bitsPerSample; } + /** + * Gets the block alignment, in bytes. Block alignment is the minimum atomic unit of data for + * {@see formatTag} format type. + */ + public get blockAlign(): number { return this._blockAlign; } + /** @inheritDoc */ public get description(): string { const formatTagString = this._formatTag.toString(16).padStart(4, "0").toUpperCase(); diff --git a/src/utils.ts b/src/utils.ts index de7bb07b..dbfb6b02 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -258,10 +258,18 @@ export class NumberUtils { } export class StringUtils { - public static trimStart(toTrim: string, chars: string) { + public static trimStart(toTrim: string, chars: string): string { while (toTrim.length > 0 && chars.indexOf(toTrim[0]) > -1) { toTrim = toTrim.substr(0); } return toTrim; } + + public static findLastByteFromRight(haystack: string, needle: number): number { + let length = haystack.length; + while (length > 0 && haystack.charCodeAt(length - 1) === needle) { + length--; + } + return length; + } } diff --git a/test-integration/aiff_fileTests.ts b/test-integration/aiff_fileTests.ts index 64a879ec..454344ae 100644 --- a/test-integration/aiff_fileTests.ts +++ b/test-integration/aiff_fileTests.ts @@ -53,16 +53,14 @@ const assert = Chai.assert; @test public writeExtendedTags() { - ExtendedFileTests.writeExtendedTags(Aiff_FileTests.sampleFilePath, Aiff_FileTests.tmpFileName); + const tmpFilePath = TestConstants.getTempFilePath(Aiff_FileTests.tmpFileName); + ExtendedFileTests.writeExtendedTags(Aiff_FileTests.sampleFilePath, tmpFilePath); } @test public writeStandardPictures() { - StandardFileTests.writeStandardPictures( - Aiff_FileTests.sampleFilePath, - Aiff_FileTests.tmpFileName, - ReadStyle.None - ); + const tmpFilePath = TestConstants.getTempFilePath(Aiff_FileTests.tmpFileName); + StandardFileTests.writeStandardPictures(Aiff_FileTests.sampleFilePath, tmpFilePath, ReadStyle.None); } // @test @@ -76,7 +74,8 @@ const assert = Chai.assert; @test public writeStandardTags() { - StandardFileTests.writeStandardTags(Aiff_FileTests.sampleFilePath, Aiff_FileTests.tmpFileName); + const tmpFilePath = TestConstants.getTempFilePath(Aiff_FileTests.tmpFileName); + StandardFileTests.writeStandardTags(Aiff_FileTests.sampleFilePath, tmpFilePath); } } diff --git a/test-integration/avi_fileTests.ts b/test-integration/avi_fileTests.ts new file mode 100644 index 00000000..5eaf1c96 --- /dev/null +++ b/test-integration/avi_fileTests.ts @@ -0,0 +1,82 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; + +import TestConstants from "./utilities/testConstants"; +import {File, MediaTypes, ReadStyle, TagTypes} from "../src"; +import {StandardFileTests, TestTagLevel} from "./utilities/standardFileTests"; + +// Setup chai +const assert = Chai.assert; + +@suite class Avi_FileTests { + private static readonly corruptFilePath = TestConstants.getCorruptFilePath("corrupt.avi"); + private static readonly sampleFilePath = TestConstants.getSampleFilePath("sample.avi"); + private static readonly tmpFileName = "tmpwrite.avi"; + + private static file: File; + + public static before() { + Avi_FileTests.file = File.createFromPath(Avi_FileTests.sampleFilePath); + } + + public static after() { + Avi_FileTests.file.dispose(); + } + + @test + public readAudioProperties() { + assert.strictEqual(Avi_FileTests.file.properties.audioChannels, 2); + assert.strictEqual(Avi_FileTests.file.properties.audioBitrate, 32); + assert.strictEqual(Avi_FileTests.file.properties.audioSampleRate, 44100); + assert.strictEqual(Avi_FileTests.file.properties.bitsPerSample, 0); + assert.approximately(Avi_FileTests.file.properties.durationMilliseconds, 5800, 1); + assert.strictEqual(Avi_FileTests.file.properties.mediaTypes, MediaTypes.LosslessAudio | MediaTypes.Video); + assert.strictEqual(Avi_FileTests.file.properties.videoHeight, 120); + assert.strictEqual(Avi_FileTests.file.properties.videoWidth, 160); + } + + @test + public readTags() { + assert.strictEqual(Avi_FileTests.file.tag.album, "Avi album"); + assert.strictEqual(Avi_FileTests.file.tag.firstAlbumArtist, "Dan Drake"); + assert.strictEqual(Avi_FileTests.file.tag.firstPerformer, "AVI artist"); + assert.strictEqual(Avi_FileTests.file.tag.comment, "AVI comment"); + assert.strictEqual(Avi_FileTests.file.tag.firstGenre, "Brit Pop"); + assert.strictEqual(Avi_FileTests.file.tag.track, 5); + assert.strictEqual(Avi_FileTests.file.tag.year, 2005); + } + + @test + public testCorruptionResistance() { + StandardFileTests.testCorruptionResistance(Avi_FileTests.corruptFilePath); + } + + @test + public writeStandardPictures() { + const tmpFilePath = TestConstants.getTempFilePath(Avi_FileTests.tmpFileName); + StandardFileTests.writeStandardPictures(Avi_FileTests.sampleFilePath, tmpFilePath, ReadStyle.None); + } + + // @test + // public writeStandardPicturesLazy() { + // const tmpFilePath = TestConstants.getTempFilePath(Avi_FileTests.tmpFileName); + // StandardFileTests.writeStandardPictures(Avi_FileTests.sampleFilePath, tmpFilePath, ReadStyle.PictureLazy); + // } + + @test + public writeStandardTags() { + const tmpFilePath = TestConstants.getTempFilePath(Avi_FileTests.tmpFileName); + StandardFileTests.writeStandardTags(Avi_FileTests.sampleFilePath, tmpFilePath); + } + + @test + public writeStandardTagsId3v2() { + const tmpFilePath = TestConstants.getTempFilePath(Avi_FileTests.tmpFileName); + StandardFileTests.writeStandardTags( + Avi_FileTests.sampleFilePath, + tmpFilePath, + TestTagLevel.Normal, + TagTypes.Id3v2 + ); + } +} diff --git a/test-integration/resources/corruptSamples/corrupt.avi b/test-integration/resources/corruptSamples/corrupt.avi new file mode 100644 index 00000000..e69de29b diff --git a/test-integration/resources/corruptSamples/corrupt.wav b/test-integration/resources/corruptSamples/corrupt.wav new file mode 100644 index 00000000..e69de29b diff --git a/test-integration/resources/samples/sample.avi b/test-integration/resources/samples/sample.avi new file mode 100644 index 0000000000000000000000000000000000000000..add60ca754df4ffc0274b454178ba3d7fe8da731 GIT binary patch literal 71680 zcmeFZcUV)w(m#Ge=mrSALuf*%p*IV?_uj5I{15MKClS)$_HP#{vZGYaMsom_~Ab; zEmJ*h2C(nH*IxwwBJdZ1zX<$A;4cDy5%`P1Uj+Ul@E3u<2>eChF9QE}5y1H-;{U@p zVHfBa@Slj_JRkYLT@wJQ4FHsa1*hPJEC0uZ^G&dUA4~x}K&A3`ecbmj&_jXqk+_0) zKZ3s=iGSer_x=}wzX<$A;4cDy5%`P1Uj+Ul@E3u<2>eChF9LrN_`iz)&Le>fwD58C z@&x}}4?rmX5oz&%4HZolaj_>L(cm2)0KGI2MiWIHC9r@L0HBK3-4J%3_JLj|2C8Cz z%2e#U5i0(69!_AHC|Gt5R}TzlvGc#?7H~~jUso3_1RH`ndApp&xj6WEc{zDsGf~#p z1HT~wzftmcyM{3E@ij40)&`3}#|>1{M8!xMd?o;&#ZV|o6HSwUbck#Gn%gx`Cvg?c zKSKm?Gk7*?JvDtzbv+}nRp1}3g0v_anSjFw{y9`YQ(4yp2A1I3`ZFFt(^$5o=cy8Cuj}K85EYgb7DWk*A^7YA-8>x;Vv-Ul5q~F7C%XVAB%o^p+s-kgQ0-H=@A?kqvu0t9ZjPEkSz}ScE$pb zIWkAqRDf6x`z4|lfNU$ACd8n6DYiLAB2JNu*i(9PyF~UyKYB!;vT zSyTaNKonEnQ5_4w){s2Cm7iTT$L+dAc2Ak)h|Rxs4J9EgJl>xkrW@Z!QiJnE4HYLIRW$10C4BoU{fLOr|R=TBoBWze@{aG|A z=8d1a>ruVQlOCGhHyJV-l!nn{$Y*NFh0o6k3Q9oGI1(9CwgVt05q1DT-p-%zi2xu& zL`GzhXmD`=vBUt~p;_J)g~(X3RND)7#@}bYI9yZ!AmBg%>D#|Bd7Gz?pHd|)kW~#_ zk9v7hlnPx0)NdatbQX9W2cFUG1M&v4kF@$0H^j&mq|A|>BGm(!i~uPkNAm|WfS8sN znc+GV!jyCS#sbun`p+pebyS-UYT|8g2zHMo9C`WnoOiyrWZPMsqndgkY>~jjxt_~?Lc4xiUuiDkW2N10+1$xGYF-D zavX$SS^-~IcPV=f^&-CJb6$L+bTSifDx!owDkV&2Y5Fo7H&ucu+t)w@!G2)*{M9%F9}|EGDgaWLax948+sb>v z!~T6=Y%znk*Stz|UarMF9^FL_*NqbIHwD2Ud*$)*ratu!^GhoVYy-`8SzJkZeBGo3 zc(8}XzdlV;mXAyu+JOW)N>HSRpRqkSRa&Op;51YdSdhgk04Tr>NR0)cJo_b+S6cZ2 z6w1+o9>g8Qwi>)a>f@-vcicw=(47}Q`&E}cEzJpGrS zrJS|bqkCAGbj`nNI6-d^#!40e3s-lrEHakO+g~Nfq24r`oM+wx z2ZzW9!?ChL%CiT_f9DU%_DA>*f0zQC-8243k-|;%{Oy&W|1;4b z^e=G?bcCxLKZ{pPZm)=_tG_4eACrpXkh7T##WCUK z`v+dFxQE|g``rHLqgPwX?Uxt+i~%gY^!;Fe>ksFivFpF{(x*Qygl>W31ski{QtVz} z4*BJ^^`l{ajlO62kOBXpz9&!jDP@~R{z4!I>n{t`^5DYAM^EkO`dHBU=P{ zg$vY1WFW670Mb}cOArIDRU=nV_>45C)e(k#VeeZj_ss=9Jyehr;3lo5JsBjJO2P-M z9lx|~D4j=o-YXt(aEoQ9kQ`xnxc00Z`xU5c`(UvriqjIhDXA{dNvJ&lr$F%MGH?Qr zc7ikgDuQvZMkfLWfn5E|aFeJRMq)AAjoBMbdFB{I*%d6=skw3mGPY1HQYkQx?n>W} zj9yzv~wL!zM?g&;NC;o21kax8~?FT<<0r7y_6OkF^&UaQyQL^m16I*n}XZi|rhA5=L zs9n2>v5SF=Ic%{+Yrl0>JLKKM9BgyTC1fgM!TNR+;~f3`x%n-Ey&G*WKflMmhDsAO zUY?`fP!ylR+@FJmZA%6*J%iHAwhmwUO4!zbN!&v?A7N91MC{MaZ`)Rk!_`b9BhEPZ>V6{k1P|G&!x^}oo)A5J|}Nec(FAuF4I`1c=LPhjie z!NO}CtL~j#{D%;=;<)|@$G|uN_HU-O8*zFs zsXFWcSip(c)~ySD|05H>hvK!B5(bJ#3r_gUL%AAAgL+}ZoFa@3a8h?Ayy zpJl0zPF%$vpIRSKtS-(Ue80Ui+?LdOBH)!nba}b4m2>}J^a&^jnjmfh<#hpi!4bUV z$CE$qlsmq07FFOVIg|)y5LU-==9QGx5F%61ra{4$4-Fac*g8^iD?b1T60ZBgi4oM^ za7BkjDbWfpd+WCRBC`W^&gi#v!H<4y1P%8iXt4O=i1@7CHzP$^f400nNBI&*YQBx2@b#%tj;(y5@*r?z@^^{|LOouxutK@;Y8Hs zjj^&TfxM9&PvqmIp{$6;(>1QxmW#>DwyEX0x}UzBTqvOmO^Y6_RVj8YYx_YvY2E7M z+w}J8^wkEOTJ{8G8niI%Knnw4I#bKnaBBI_${!0Decd8qCK+C>Eb15 zuV9`Pn4Np_*{n-QcfDNU z^%}*t9RxJHf#1s=xC+gkJ0tfZQm0xK#}~AZeWXQXX#EC`}Bds&o);YJGB-Q8l}MpTsHDB4AO8L-MAlmcmRy-)so@ngoq{M)nWKk=)~<4S{u=@xzj`k-Y$d-p+4N<2BE&q zi)8;!7!1G1Dxga_gt+l`bn?DAV?-M1uEA{!;FqMYKf$8b>;k0gQn*)d&?S6mKFhiM zTf~Hl+Xz}%7co_V@JRa`k_(HMV@|)YTyO6RVxe;37xR2R;tz|JvJ7~@FuTx2RC>Ab z^r%nfe3Sb==KD4zBE@@;oQH^mCdeJX^m5ASW;CLjAtE+g9qkeHiNuDe{PY*k_M3Sk z`~wz&?cUk>cKgA*^eSS$KUm{C9O)nIDjQrKq9s&(Oyy%CN`$u*{>`pn2d#@<)bZTy zVje!QYal1RznV+E*yi^tI#u1%lYR(n=gq02$`=;K%j1Qg6$Xb843AKXJ?)Z)8Pm~< zsR!9wh3(@H!uc*e27a;due#e&FVRc@ZQE1t-eUHveVtF?9hc7S^Fy>MZj;(FVg^1Sp%p3T}-7w_jAEoKWZmD(u<%qoPAQ2H(sdWBO3X5Xk}Vcnq2^FJ4) zIz++~w?#ynBR@|wOTe~mN!*qG&=T@WR+@ER(TgFvih#G0NOy!l8HK5sWeOmXjmQnO z5>L+g$Sc!5e^gTkzex9-2>mobTATjgCp zNi-=^5SE~hA8B|v_b`Bux35x&PP+nDu}Y7};<;dT$X_js_HE$zRrSK#`H6DQm{ ziOU7WZDP$A4b;y0E==%JH8rDzs06tP33>!rsVa1LQRiDxLma&fUg6zACh2nA3QY0% zbn9Y;5n+ZCqe=ot;rF%mv9Y!L#`TnU-P$-x4`f^1&Zm9Rotu1wG+Muod@ADTq%5CM zG%74;_L)E&zn&O1BihleaC?T_viin-)TK7ony8C9**B8T%kkK-`n}wdp+s)k@Vo*H zj49rFe7pXw#@f82=C!+7dM3HXxeB>AHs7tLkH+G8+_?ReqY zhsRfmZVhX{o3NDoe3;O3MFb@xoL`dL*RY{<@k{J0FE-&)zbdD@vuGpugk3u+sp~VO z(i#yluRk{<7SM;uH7?q+(G~Hq`%QJX^k3utLxSV;yYS`!-AL9*Z(w3aOn`{b^U!DyL zHpdm1I{CP?N%;P@z`WlR7K~{wOQFuR^>I^79y~p+OO(MGZt$4jhLGHP%|}^R`oqWT zy;IuK)Xz!^T#PcHWctKo`=$6O2D7{b(Zcyc*EeI?UC2G}K{36C^xb*5TtsP{GO9S7 zv~9RMq3AyJEk$MHm(Nm?E+1Do#oYs=btoDGy~T%oMCALaxnjo@_kcb#D^`;PWeMDgyx*>4O9t=Xqss$vdxi&h?jRCjZt%NVdE4NV#?|3YW2v+ zHMsg`a{Dge6CTR3Rua+M&o44xaZ4X{KySl2#|{`-XD6F;ZboH$rZR*PVXercyQ2_G zrN(k%uuE)T@M>x%K3nxl@u}plN|^BU`d5vOo8HZsH~Aq>gu&ud3?DzVzYgW5Y};XS zIo>jrdl{;XT|{UWS|sdc1X^rl@l0O);TiaIhU*Sg;3d%khSosFk)~@W)s>Xd%0**Z7|iFMb(N6Y-l#%|$h$W22b404XoZMhW}G{^7zdgm zb*Aa}cpRyBd>s%Xc-hx4U3nqC!mU*F?0@(7B)kr_zz7V#$>JJ<`v*U#3PYCwcmfo}Z3Ha$z)e@A_!@n`EoPLRFeyDtSt69BvW2nPWQv zt{j3S342z=8zMdNU$~_Vln7+s9XIGjv@66D-=r)}@*fqO++gIrcrc5_h#H3V3K}oU zSezFx5K9^lt|dQ>!nS^4{2eaaXY9`K5bTRovwX<>0`n zqC58jUYlQGA)=TqC4$7(ETN7;!QMaCMG5~9EefuMhK&su*zllf`|D{mAq_hXKF^Nk zo$c3NLrGMpB!_pWZz#M=@wb;LE90ZTz(b*z@`auN)%-gCXv)&#D5Tv!{<>%X2R z>{=HBD;mP%Rs2M+>Mk$qdbZA$N5wzo9(V*cb#F>L@%&t3Ku2d3uCEw2XJAWg5bWQC zw}S39zhKRH(1d*5eqAC;{Ji==`{=r$B^@P|w}|Z3#Z@%?+}QirRXV#{_S0Qlr&8o( z`h<#lQm`_sFXu-}+_xfC92d9YEGLp&wj;Kamp$4`>Wet}zA*HmG7q0wTQBQ5S0#~0 zI^gPLRa9a#*7?4DRP7A+MMv8t26S{3a4n+9-tLucBG(5wYxyWmN|lOLf3}pE*3s@e zkJ#@J-OcbCxvBNm+1km5N?@JWM9b&yB(v_|K%xxK@_^l;d8vzMA^#Kyc%0?P z9Fq_c-8*LYyzi#kNnP=iy{9AyM`;^A^Bbjn!@(HYcuf*YTUOCaeT{@SVxQ|i`XV`8 zJ90^LppGXRI~eV2MmW)2*K&n|^yA~Z3B#S2@8`wd1d5@F??kjG^)uPZ6#H`O~d5xAt z^QwGb5fxhx{9Ayzn)x9JPtTwqCUAJx%UU zuxz_zQf)#d(YJS3hZYDsUL#cs(~mRp_@!a?JTKC_jFO_zo^d4S*ukkXWhMB4EX$`*Bqi4xFZ%n78!eL3ADzumS<(})p`sI8wvLZWl$Wn)x=e>%Bz2CFW z8Ae5i!}kr3?P%23lY`JOZvL-}sxiqSZdgUNa_cqS-xEbkL4>QYwQZJ+Ej;GHxCCM`VMyW9lx1ckdE-DmCQ z5!iA+EzcwF0oli!Q<(t~&V@!1KnL_FkF`JH9oMeOX=qg=lhIp&j>vk2&vA;`%Oof*$pY-uJSI zBySnocL^6-I{0b2Ss`7no`_IF**K)>d81u!X4Ejr#Xik#7_#)X?mqwh$wHrj1_PH3 zWq$rdbNr3)?Ra2-;$Csul?CZ{{H zG|2l~-Y>?8IMol4E&|mJV@>jyMGMa0V8eKrg=4iE;kJxt8}bQ)Qt{*EWBDs8%%kl6 zJ$xuH%JBJ6$Xq7PmYF1tFTL@nNWH3#y081en$tnnZ)T)6!|zC-3gX+pa$T|wfHSMb zCmuHUTv;ZOh$MU4*b-T=bX6uli{9$PM`Jq0@y&{cP0UBpo3)v=n-quyq1fjkuLh#- z;%VO~61c88x?&LU@?wrqnp445HR^)egJffkk$2Md*Oa;K;`fx4B$to5`38)~ohZHY zpgtnJ?ok&pPAVgO{M@mWk8;!T7V7IAoNUw$cS8)OyDvuHm9_0*ZKag`di1Czi zB9hdfS@j&5w^$3tbhK{mIJd|DtQzyeqxvwAeGI`$Oqo)pPO6 z^|eYM6=Oq<&z_9e!6@C)XGSMg9cHaX=TF(b1fMcHlyRlxa#Rn$UocBR$>D9|O^ff336+Ol#WGxHEX#^X&CQUyzc=LOH$GM+9%%!yh-Q8FE z2wuF3y~l--e@7R=iY(zcxA#k4z_E3l-4hwR^&iE7m_ldYLmwC0yC?@H4{<2QIcf zq;v_WXZI#=tr#xpNSH{D2%L5;yGKFsm|u+!Qf+;TXt^_+mtI9@;hAtR*dnQ~VeG0H zr*%C{!F&Bz?9HC0AGhQE$OAT>XeDR%q!}CPw5o(U&q%aUy2qMVAabp8C}}=Ogz;1e zhI2_IrWX78rxWyds$8%rFI4Rr{VtQ7(L`3&)VjP*M_;g{^?sdLw^)!VvB@jcq9lXc zI5cUbp9Yfp^c# zYxq~A4OuD86oSZB@yS#)=#?6w@-t%Rc;U8B-;}cuS1_%A3^tH{(i47uruCyyL~K`1 z6W61GMv9@>7e2D3QJ?NwYDvDJ1nw5@7Qy)6s*h*^`B(Kutpcdb4m?n!D~vW6@>kt|=`R69ril0v|Q114Bku9f|wyCUP9tTzmLi5wOnOP*c{^@6tC-XFY^6 z0?TH}Nq`_Vue)q0-E67hX#rASDU*LFkU_~=d-jONrUD{9T%WTg<2Lgql zk5edlKOj$V<=Hw!J80(lh~az_M;OE+P4;?WJs~Th>8|p0zJ9#Aa?_)mz6Ow^cI%r_ zcM=tf;fe>|6rXh-f?KnTmj0P+P4YtzO+N`Wb0R&gp`l)iph3wHc8PV858h^-me`9M1tbU!wtP@9 zDgKhDl(cWmobb)XMSenHKNG(=4#`xZ7R6v^#~0^@7=PWf&U2{UPxe&NUYmvR$L{>R zcK`W+yZz;qRNoUsW(sII)9|V$D~-qKI;-*&q@(18t%nRV4}-rIrs>^On|WMCX>g;_ z^D||D|964?*1khoSKN;?4aTtOvcqFq_LumelJJeb8(n)v6y(3zhe=h{9w~#o6M?u9pW5t zvBC3e69Y8nCZ#Hkis?+QYQ9rl>H)YTcY34tENN_9JH*k)$*t|m&;{6~=6g@o_|+OM zJZ}iHxv;^w>D92HlX79aKu4CMBWB)I7o-qN(n@MJQEfLPYTBbYiida(r7hYN%Ydo`FVhS~E?c{js)U)W->i$LwN2 z&JqK&J;ym_g(PaBi3kH2x<0HkX)*U!6N;8-2*biWs&;^)F%yM#qaP4pr0aR{W#WG( z)|6|(xUWmM_(=7B_m zg)u8HeOd5u4MnmqG8Dx%Jv#F7bD50F6-2BYlV#A)GQ$ZET9-t3W{vt*JnFDg=Id&;XcEm-0I zfxo4xk;nFWOy1_#k^30lW4eg0(@*WX`GJb@OhiO_!ZFvJ8Je$o8@f6#N*&ZyJTXbg zFZRkv;5YcPkt=gP}) zp3z*g@B~iA_Rplt=dzv~en<;yuxgGi++FLZTe=cmA1poCFB4Ikgi!n1er*&bfL%e5 zh~9y6xfVubM12lc=>KS9Z&2D^J z?OK}8E`3^$mOS%Z{!d((FX#{F?Hj^*XUiemw;-kh_F!Zb26UQ&Ud(swV6++T*b8); z#sXdVW7?w_s@x*U5+|l993GNb6d@y{Y zi}d7yZz+&{^<=y}gy%^$Hs?%m-r1)q+c)vSxD^Hf3=uf%Xby~wibNAj<06(~fv3#e zh{gP-Y$R7>&cSgx?{KXeLD#D(ol4oFjNLoE)4rqc$c4X`-*~;_9feFP44hdLCuW9zR6M@%X;;Fl-HBgJs zQp5GW%-{6fKu7lU!8lw?CeW{~YaK9UGG6^BxVm@}&@Pbb4 zE8?z*)nW5>96`+#+l~MjTmi=E0lx{#B{0Dq49MYP5ddJFm*W91QR3H<3J2zA!L&Gk zxg72sBGNlmZcbKd(NC=WWuB0+KqhZbn+9vzfGdkm%6;}aUnPD#=fE(Hm00Q+UqQb)IYu5M6?o&QN_CF-tLHYG) z2zKk(jTm`;HAYgxAzF_QY|oR+l+!6ame-zc=F_8n=;KBbfmN5?w4z&^1W#6|R9^q_ z*Mlb>?O?1N2grK3BXb4ZkvWbd26mp_ox{c}QQy?QI`y6p`M=MzK&She|NScr_XKIM zXjheJxiP7+!8C@iMB9z^sV*Xp_xlSIYu_!B++>wR zTUxyO9rBwK z1Wv|>BGduuklHNJm5_m%(t^i(%Mg=#x;QFQJ4H=bMIJ z44+!4Q+PNZ`D$3O@I>j0Zl%h5n>xdm$e7p;boOJ~nARy-EvdAg4JRFu2yRQo!G<9Y zSobZ8NQg>5#4IUQFQ+=tJZFSjwT9uA#tvgn6%nJbT3YzTQ0o(D)I3WfTeg7@v9ev) z`PTP3vW`kRieF1-KT#*GnqMrsonK9v7CcFvI|LPb@>oKu+^es9q{xQBJ9ex5JWcH= zD!TI%uaAACQ1zW~xajB*vfuoex{h?_o&#)ZR7WG-6jSrskdk#|PkW*awHJH5NZ-3C zstsG5s+L9bbC5dw21J#C8%f`Jq$AAsm)As&WY)m?Ey{{3_si42F#Lc$CJ15S-0*T1 zBY%up(l8b;q9Q&wLD?|JS?m$lw)fFP#i!(U)}!ZXDgMj0bg-SId89^`Nf=iE(lW|5 zjY%I{;A&6P_kEiG>8Ga`JJ_RG`{FP4$-6vbpg0&qB?yNSox9yT<~!+;7$~;3x>h%x zk*f%)swL;+Bz1W=8&a0PSr>bAD$)7b9RI{G%B%d4SuJDnA*IpR<(yt#xA-h3Y1t^l zm(sW#V)jhTp}I6BFGd#)@Uy(Cyy82T{HLSKw_%@7yZOb(E${fJwu z|8(D@ikqCA9s>6#8Z0zEd{R-5?4tlA5sOv->djqHMpe zvB0=9TXE}2KxM49|pa&7O7MV#mub16)Wv`mTB&nZ4uCjhXrAp*1p=>er-D zx+!v1MV*K&XO|FXZ96XkLD?FkheGkZ%vZCRPu@l7@IPvCYvS6soYWj>%KkB@k%n*M z7kxP*$RaLXNUxhnN{OaV+H1CQUhl`X8OA%jtVi@^#+se;yi5lbj7|iUk=Qimiy8h>`a&`a{Za(ZBx z!=tw6#2*tH$EO1l)Mqn{G9b;=C$xX}{p=gn9vlsw2;1y9wix+9&^UljsQE+cf>m2sLm-a(V$RX7&dBy0yH_l@Zx5@3SWlZAUpQ^r_4j^^u>h}B&l)`ls?F+PDi zglh|%t6#s~h{{mP73;Y_J0uj5*`#{wos8SBbt6LxAyAemhg56b5QUl(+QI8TIkQx!`ta-)C{L+w$$SILA$~@1D>U8vYcJ9Tm z*3-Sl)(tDJo>@*M_CSoiWL$W*syxYkAsa7Et7##@=lPZ|9fGD$h%3Y_MX5BV3wOU` z+k!&YbDUyfEDc8YPQDs8eIO*bcz55KFsE67B!|^sdw!ciQE6H#*=yvE^7=c~i%i;9 ze1<`)46c;SI%+fnz2{XF12Y)I;frZzcMdKweA*Qt8CavXnh$inh0KF33LXr+y{6h7 zmAs=NQCV7CU4PGtigJb$ zgz3D3e}BhOsh5U&Vz!%bF_AB>-0=V=PU`eMWH_EN-IYEoVlr&%-dZ!KcOQ2nqYzGkYYK8qq`oKl{k#DQ z8AS>K160!Ya%=e3BJ+Dq+Qr6{`uy}Z8Ga^v1SR^`yC&I2MA(Nwdhs3oh~#1~&~#(R zU5rP+NC#=!a2+#@&P4{+pWlG-5SS8JxX7{I5pAYG!UeI01vR-}9^xC{#jY73dg<4VH;34Pt z%@hkfO$Gz5@do1cyFa?~+_bv=3f@kSG2uNiuxtK?3Z5HMVXq?$;x{LkHA-|1^So7O5^%LDY^0Fb>;k4cIXsR%uGUQrTzP=mk zRafQUMq2&V3=&)Wovx=^`b}4dKC8Xr%le|Gei6nG3B;k~>UwOS#kM78=PTXpm_H5< z&Sy#u3XRBG%u!G4XmG{jee=L0kGLZn^v>UeLBA2cQ^%qq8`AB2@-9{}leDuk?+P9F zvc%&P?ANGycm|?7i?ZQRkEU-wq=%1_cI?)b+>RlS8o^)7W+PXMVvqW;#SgVD$7uN} z1C=b!Sy)Xghu_Pk+*Z%E&T|cPaGSUh^Ge6Znfp}R(u3#XYJPAR85T>HQ>#2Y)4S}G z{34{_SEo~O#*>&;;$>0D`DhNE5pUi*S<()-!fN>734Z7tz+{- z1WPQMP<4}YSkxC_j9mga)X8pU3>A|A8@el2wFq-UKTd-H2Hib~?VD9S;aa841hey` zzTdnr-@k9AFyJMCyf(jslEbL7%{ISZKVaw7FLBVcm`GT&meIUc(typ}uPO;Lj@flr zdpfh`=4IbFMd6?mV^Yq1I39;0+IyNAsY=J|a>*$;ZsC}SQ@gLM|%FNR?wnHSTb3tdt-kJfk0)xZ#VxE9w>O%|m2l z$UaZB*wB|*HCY7DsnTO$EpnuP+1oADe%<2%S4M-KhC9QJqI_r0yzcDh^i3B1ZVr;N zi~%?2;N}`BMh{?}_hPcgy$CCb)xQ*q@iSq4#ctnuIXJmX>NQW-OiasgOIP`g)U^X+ zarfjclitgcl@9RLWYw0$V0-+Huls_I%L|KNj~md8v6hQdABS6pUM_CcJaASs5qb11 zlWopIkQ^G_W2fgT<#7An*R6=%;j-_p_=KYc@@V=hgK07v`tONQqB%qJ#jF0E-PxpX zka^uvLS8MpNsr}d2EUA&ddFyJcyl^cBji^|V5VG8T&Zg^bBp2Qe!EB&QF#&H9fr;OFoEuv-Y$_)HLmT${~kBJRIn8on(+QAvua@)lW0@ZX6>Cv z@0%Jrre@(>%Q}yXcB}p5Hqndu1rA-Pl)`AEUzFaeZ+6C8DevfKXl2*Se)()&L{Mtx zIaO-y<@&5ZQO@pF`^Rc4B7|TtCpT=d4vEpA73TB2D8R#RqdkmP8dowVeG~CXfsR{2 zqLL4`gek^Th&_5>JnGxjY_slMsb57)%MPq_Mi8hjIFg*ptfA`gLl{HQCZWM{hn5W4 zgj8>wbany}J;-o7j;q?gU|>8%B_2lBQDMiI;3T0bfGNMjfSG`NNmX*jjfzyPxIg1a zyD-*H#AypY!%}7$)&V~{;8AaHqCSvS%zQ^qk6!_&Dud3M(ropC#;2~Y9iqVuH;HZdU8C0Hzyb;&*a$9Q3W$fZ zOV4b2#~<$dOFR?A$FRUSp`0T8!7Z%(`QLn@(OUBLd~GY~*ivJ$eUTf_JF6bmWqA8A zF&D&*CdPDfR`VZ}6)Civi1&^iRIS)Gx%!gY6-3~1K)&jo_oQ?%MU5FVPE(4N_b1KP0RXA^fmXl4j;rZZMQ zD(t?j`qb)>LWLB!kDZ{{b|%E_E8!FhV4eqm?@qgrwYZOZM!A z&2JqHc!_N@sOAaLk~I(R@X`6O7^k7PRo0Dyo~(8X08@PZ%nC}(npbHSCrN37ig;0j zF+nUG9DKZ(iIvI0mp-ERrNc!1e?qZzp&2#a50v{8)N5;u9d|BjewUEZvvYS@a976S z2wF_pc7fuu9`MdGWI%!v|1G<0=5&|F*ye~;?wMVbK!g%0X;4$kG}*)dppzod-+zr-cVxNS-bqBQEd5LF(wLH4=d(Yi5Q(7{&dg`FD;yOQ77e7~5 z;lTN1+Cf#-O#hC7i~{*~_Vb$3x`B|*E#WgdQ{dU4N5vivP%X+8f%|kk7?B=1KDbZE zF$e&J2jwKfAoJI*EJ>i{(-xdQ&Nm~6@?uF;bSkTp)|fRz>m7G9Cv9oqx#EJVYk>l@ zrpPIclJnhp${h}zaTMbB*6Bx$aRjYW!0&9W5V4RlX3>vR|98@z3sG@|#Q5xsqjHS8~Ot zIQ=DZFPv{{V~Wg>+&*i}YlhSwN9E^~?b{HrbC60v4uea6T%^FIT`H*K@k450#JtlA z)88rxGgWWc?rmC^sqzw!qrzFb@!3`cpBmjr-}r(YuH060=A`huOaG%GNJw#c1M=Y!J*_OtpMO=X~b5@gSZoSESU=ekuHGCtde zvpK6_4V`$2?YYal`6eO}oB|S}>J|@KUssa8(0f?cSS4D};h-H9RDAv>S9mI*^2VIL z=}y_S_1UzgY^M{QbwrsD`f(6oN6cq(pn?VY0|u-qaLJz}bJ~1jILE*}{=eklU*ahL z;m`TUorU1HU&nG$gRn#NYT)s&e(!egQf>944aJeF1?v*Eq$) zMQA36j^-((?drzS>{24(ai|r=^y%>}u99LUCYp9M9X~hl^s|w${xFFNyT}EaS0b&L z&kA}Lg?Rg+YIvGAo>1kHqP^Ma=vlvu>qrO!2R3E~Q1U30z_}mQj$yP3&D$}&8rDSA z1SoofFeAwqeR@|45M67qf$CgjIOTD$=#umc03l!|dWi;o3+9n<_r7OToy*{BLPZ_2 z@N~Hg!gonxKId{`0TkmLsWO*?cxhA4!{T;993iJxY3ybl%PnN-?V51DZB^Rfc*Vub!|ZxA&k9OW z6QN<*8Dx=FVo&b12IuUUR7FGa6#TyXL*pUu3Hq3uoiHz+etu=?yC#Vf5{DZ|>ph}om1VoJ-%7;97}>w95J=MgP7j5-B03}t8)N1sx<=nA zOR1nk>QJ+l&OchJN*4hrWL3sRdK*dUbyYABdoyCN9GSlN`eWy5cnJ<9_(=}5wu@I{ zTWVzQLxf~x-^1I{cWsQI*pw*IPDk$+b^OmAnH}*3*~SEbqfHQpLEpVjT`7`$Poxdk z$MDBx$#e`4Tk+o&$z5?yV7~PeD(vl^oi{;6u zTF^JZV*cVU!X=fvA}MunuAris>H-6n(8O(D~3NR zRU9<|qvKWVQRLwe6B`iCQbuI79AlD3v&ps{-uY6j0PITS*JB|g^7bfycwIIFe!jO$ zY;h2a!VVxa77JOz#&ae<`iNBLA#ICsZ9osZ|a0|&K5w>oWZGa(43*n|7}i4;0|aM0FB?~%)xeh zjNZa&e2ws?K)flEcsYZxqt=wvok>QuPCmp@C`8M_&xTp2JW3h?VONq8(vPph>Z#N9 zvY`3N;{xcu+!%j-=Pc9eQ_6N6coGC=K*95WCj@*rvzruDFzdMW0{w)8#^gM;{PR}W z(Kmi1@zn$qn>b=7?R2rDO#dF{{mKX8MT!R1kF9LduiiK$%~)PI|0o`gmqnrvW39Ap z_8RSj(*9Y|6N$!g1i^veRM6nWWB9!Qs^a=d1dKSU5d*3PWARfprhPRp<9UgPxs)mG zQ_#d$hCeW*e;T(v#QQLQGGsPcZDFv^|2RlwNk=ym-%(7?8PUEYn6zol=bZ7|ZrP3{ z7{{%&l<4L&Ly(5`Yys5#jU0Zq`q7(V@us{dFghtg__p!oCA1{@6a5k=c0H=_Yki902*H7;rb#UfrO6S zVsTWK`(7Hp0*0}ivqa+qHDsOhf^r10vphdPsgsmnC|jnEX0}Pw#s~@?X_Bz)2*h** z$;i<*A&Kb3Zf7L~6#RdTeR(w0@Bj8}X2uv}Fc?gX-PjtECZri#vNiT4YOEm@Q6yUodP=XuWW`Tl$<1g7o2GTgY~fg-o~S+Z*x>KFP^UUhb9tbWL8stV$@Ee{8FUOHDfa6V65%;vmokM zjxCT=efF2{dpc$CGI`IY^%G8rV@)d8?xU^X~wL5{X3X|vS2BNN_D8w<=Q91|B5_pcHq1a8A93fq&|0=m?d ziKu(hw;&r8v%;b^4bRSZ3PfA&d6yoWzq?)d?XP108 zC4Qp`4^2~w!id_gh1T72-^*U z0s<#Dv-kw=K#_YYeVk8Hjz2`u+KXg z{bBBCnve!UKwRM4=hX$-PrWf;d$*T}PHzLvHDUK{mLdv@>=#!VIik%Jz|6?=JWG^m zKAhMt?`(|@2@zUcmgAupl#S7^R(u2+CHd#;3+823I{OsVwXV$s%ckW{8F-Whr`0<| zsvaD>Tz6i{@7VxiSUE3C^sr^GPA+T1sMC|(-lH{=t7p1!t{T2_!zwUlR;YtHS>WR1 zgEoL?SisdYVAdvjFZ>}x>?7HgrTfWSAvbj{DB`3O1*2rvPcUbET$?F~?7sM33 z)_=9>*E$?0>LC_Hgc4XE+|*(>_#(G^0o(zQ85S0m1K7mD69NC0m8+a0zjDL6GF!{& z`5=!|FeII_D{B|QZ>`yxh{$oGLGE}y#__Jh`sJCO%A3?X@Pwmv)p9ex0$i~HNN$KF zj4TE_WIdlvO{x3*pupg6jRi2F$ak!{YT%0FV9Bx!HL3}4#TBjcmz2J3m@Ryu*{=lq zI>Ad9yIFqCN8b|@!f987;mNQ8gXowjajn%kIyRgunFI?tAG8w&w7>_ zW8Y%(j9ULgzhMjPn*qwL!e9AO-Pb)Bf^@&dEzz^!EArM8TfQX;$P@ZzZ{<@{^B>sZ zPf>{es0Qnstk~E^bGBsD0QgM;()ksTS0_yMG8TotuO&c(o@Pvq@O%9to z*sC;XJDVE{byO)9Z?i3{YBYDx`swV}rq+gwkJ5U-b2Dw(?sCH+!8ggDQG5?OpeAh2?8wBGywGQ~frG09rr&I`` zXZnXPKX25ESsQI&uOwx4)(?7d_D730EAfIt;y3RqQ2_e-Bi)(QE|30?v${VsJEAxr zt-d8foH!p*$cZYy|V>G~aTG zn4Qsj^=lVmEAPd=TAtN~Ti^ttMrHQ>hjO;6g)6mU22Xp(Q(D8#+Y?F`U)g=8ew;p|q zPDv9PUNUaIfFE_sciRd-MAV4Zcl*=bO7*tB*MeHwND;MV`ient!U( zY!4m-_wN^V~%G|#<6N2RjOO+SO$WPj7&ctM;tydP_=W_@94|@>ATH>UzSW4 zZguP?xX6R{ToHx!JiBWW2K0j^UisDg7P+c86|Gqt{fM~`dr&x(GWvE82WJf=Z8%$?#mj*+X>>Cq~)U~$6f3-U|rTq~D~Hf-h` z&&`Gde^mwIGvU!|tDnU_TlFRkJYv{;eZqBC+jwjHoR8PGygQp9v#TTHOI!Hn30m`p z`&YxwVB`dm26U;*sjr1T@QJrGThRQsfKo#$B?XjS%%o-i-nNQ8jE92leRHHZa=hPm za`HvM`SiJ1?aE@B5K}WSDo{{b zW&h4Z?LVR~>*a7G?KP3#gACGw!Av5$_rC^8J-AU+E{0u86()H!r>o2ZbxL3 z7R`~$ut;ZiWpWB@IBN119(3|jW>fJ;_jT`YY-#$CS_Qd<98-CF_GLWbjIVM?4{ls z-p!5db!)sYUFzZ+#aiT2N?6xEE?z@GO6Y4u(r4$TrgNUgn-0VEF7N+icd5t(X)BPClyCp7ad3IAe0rOJE$YwMc=lsx6j6L{;fDqXQ;#rPL-m9&_+vtJwkVzJ-a!-i z@~@k>XWU=D8RVJG>#*uE-z-bZJcUg-L*np6=6mbs7P>mvjSlne@ytj$Fk~Z(LuO!n z(Z38Qm_g8tAJ^ka5xT?Jdzt2wNwW~chU*!kBpTk5sch%Blz)n*yV-2@T{$k~0$@zr z)+V^Ee|tgfvthxZEc}|0>K{+%b8E)#9&MCQ<13Iud3jr_M{dZDM^)zRP0)b;p8r19 z?24J%WYqm+J8ajnn$6e?@uap#j~{-`V5aO*xiz}IVVD=Z2KUu89(nOt*`L}iWtk85 zWK=()awbn$Y;b>!pybWBBLhB@POJ9k20Oaw-S!U}EEh0*f?B`l?r`pFC^!XQxBJwL zVA|u+&z#2M__j+LXKu%s!WF0%JHCD0nS3dF${i{j*V&;?t;XGv-ti`=i&J9@&YU}o z)Gj`-jg!SxrP*pgzmqXvH$d@4O74u0r&Bb*oaGPJ&+RWV#|y6Z`)bsK$dz}j<>r_F zSja#-&(%uRFMoZZQm6X0vH>wde=PM|^_v1Tld)^RQ`_(0w$%YK8v>SJhqagAwuIW* z`xP8hnRRrN7bV=<>qS<-ro3e8ElNRdr2XPS37$_E8p3g>0=w^G*Y5?b!>)F-BzR+_ z!(-elPFUWF5!_!ro-609L*^?opJ=9&%x;cAe=YybZW(4d8%AQ#tn~eVGN9$oOmZzw z>aNouXtJ!&_yCe!Y3D*NZ4(!NPEL>p&0*Cl;0)EzjdFd@`aA8+Sp~7`VhPS-)@2&$@NS8ipfeeRrLvcTFXybXL0gwjb%~QC3r~ zIPLD8PO8TEg8a@|J*IR9`&7R$^n}LgCaF)qrQI6m5`rs>@K6ER-dX*NDyOlWyBPd4 zSZJiBii(uFT_!-5s^1=3ti?(}KM!3$8Z_n%@Z^V)cw5hg{cyE6*NW5nm(0lsm4d7f zaL}%{909*Oo&!*cM(<+QGZI}q%DU%Q{~l=R@xY|5YlG$ys+jH69D)Va5&n!gxm)E< zw9Z@jrW>L7TQF53^2oyU&{I%CuRb*3aIN`$w86_@Z(Qjk`p`B@=)R(WVNd)?%IEh~ zlh}GM^KDsoPZ6QXDn6jsj8DaP=tn?(R=f}%;ldi~`hg#6@~J~F@INa`_}tcqaxhRn3J_C6@!;+9j$PMy=5)_ z9QnCe2E{?8f(zEfX5YQ^vJnVLw1fTMMZK6J&DmPvZl`r+2R}>Ny7|}1c&FJ4|J3ra zTm|H@e8ZV|*BIyFuLQ{Br#$3N@}`oENcg(vUNaY-=El}E-Fb-YjrMmahh!f!l_s74oJ46d0K9Z&U;A(^Fzy z$x{3V%?S$Y@J?mi-Q>)eCaoUd4J|hurMak|q&aqB^eR<3_xW&~!K@?3UgoBVkeQIs zZMd5JN+l>U)ka>ylz@9KBjyuM3!ox9r$_dTFp@7(A=?-dNQO%*UJtcS>_FNg7WKXx z7S_$~g#N8Y?T#r^mu1ClR|6aMzVv?hlyo3{*uJ11=!Qa;V2P`klYBn{T*2|i+jQ zHAraZ&EW?4H6BAZ5TR|c1LMx?A0ktqjI0*ioLiMG^Gxbsd=4PHI55+}b<<%Wh7ni} zF}FdalUAT{w7^&}OahDfYI@thss=nf{?+eN;1-0()#aG32BfsGisM)}!9=%m>bgVD z(*9~qzm#T)Hx9hQbk%reJ7i5LuX!t(De-uFTg4NSDZ zn+HyZ_8{`|DV-glXL20Su!?yBswSqWG%G?z8!@;1ca|p(>^+~Rpf115Digdq1jk>J z;-?}p6A9bU;9`0={?OzUm1SGizE_(8{MhZ<1M!^Z!-pj)&`!3fNr}T}X+`KEoj9NE z^O)hGIy8eX>}fS=*ULI8w7cd(R&wCKs2k0bfl}R=;Zz@)r*?j$gRWql_^*M>V0q`= z*A9>6uJMiz8DqHS4_2Kv9lhJzk-3hR4^?6AZMs-)bzA)AIo7e{?>oKEj*bzR9>i}t zj|y|^Z`IyXNIddp!?$&li#S}Rh!AjZAvqn&yfj!Pii}G+zA55*^v6YOBp8jyG3Vyw z3R#n4MR)@F$5!HyAPc0Sm*TSzej(>mTv_aC7k#O9GN9WRWvOcz`0%8P_ZO0v;Bk&$ zK6;hm^LTZ~#C;#3o81JHVre*<#a1X@MWo=wf}(Y=KR?J2o@=yO)TSu6q(zb{)!}}7 zR^uP}U>3QG$#XkiCgoRQ(bi=%;91!pXn!B;G`$U#X98h}9<=hLpvCA)LEyQkF zuGMc$5Hd3UMV~Sw^I3DVeZqB7%%|%}&uXyecRe>^9!EcQ2OZZYlM^ z9mY_mp`@fZ0xlhcbz;n6Hx&x1HCguAP(ID(>&CpUM77cTkElF$GPFM=2suRJ$uL*B zRg2E3j}gX{U|P#RKxgn!xze&DAN^+CI#+$?$UQXvxEY+uk2iB>CX7d0yw`@=>Imj2 zk(d_228xtxf~Fa$cA`_(60a|Nd{aXOjm@l*kJla9?}2^^7v8gsA2;*4ALNhj@wUK2 zr7vlz!bVt3#@svqkP7*87llri=&|(Swvtb9hvNb=PMoRGj-oySQ`Pp8$4#$f9)SMz zPuGCR97fI?lG`;P(u>pqkl3eNO|HQZ#tZxHjj9`Jm*pzgPhZ$(0xjlT#l=eRC&tID z?+rrF=#@K?;#kE?mIyHYI$nLG$Swr**63EPY&V|EHeL3eqg)lFnw^yN*KCmRIPf93 z6omf#I>FK!K|YTEGnkYn{Uvfp-gxg)0`Kbc+QRpWcT3KkR|qbZKd!Z*50zBAZ~HE% zeJhMrA^pTZjFlpPW~Gor{HK&+1Zwl+&j7 zhc^WWuZ)vm3XnN8swZ>?3@~Hn3Ulf6W$l%Hp{qR#w3NKndPuoL;3us7hJDXJTz~uk-364u z4FBQ!HZf<)+L7S-%iZ>)8%?xeHYp*pp{-8;m1hCg^CYmIq~T*hpcJ-?>b;&O_ki%A zQx-m|TAM(7ut?4e_q@$*t*?uOsrk?>om@~(-PuJ^tFSlR<-8r zn>W&ORokK!Y3c(ASfR7oKZ^Ho?xEvzA_1u93 zo=d6gr^3*+D?Gj(uunSh%}*d#KR-svUWNF>TTt@BF{Ghmb4n*$GvO~4+}Ao5*i;JB zgAR6_{q55cJ7jyO&4OzkUmfj86?kC>jGv5F_e(eT2z;R3bNN;+b7k( zW&?loTJ~kG63LZx>kJ1$r2j}LV5;~$IZ()JQl5m|L-yS@WN)2!^%}PfIbTw)y?2)< zH^0{9+eO;eKW|e1IgUk%fcGV^Rq|A$E=j490eoLDK8OZwrFG;GOIzqO)UP?`_8iFn z^lsn@X{er8i5*D7nCn&tZ9MgpbqEwNv&dDBv~`X1&?tOb_xsN5+Ixjh3S%zR$T|#d zU%zeanDF1NDg-Ks0Ea2Zi(4s)n#g&d1(;`dFhG{(fVSEy1l^WD;+wEwoB6e@@uSPY z|6d)EBmED*7{YfavA?j6JRF;AY!A-e7*RLft-Ae>^3Q0dOU3Wt@@-NqnMayG_)W@V ztnFy^H@g>`wldl)sJyhz1)ZYg&j-~Cnhw<^_-weab#2K@5I?JU_d>why)3@dpJOD3 zG2~BGd%PgVyX_50F>}JBF2=!!c2kJ|p2IvC-}58hs?nFes`G&fs=r`D++;h)ZoW?7 z6hdM0AL*yH{hc&?Qu1v#``p(rRmr<<=klsjPN52PH-@kp6^REBJ2vqE))uj}955z@ z;}R>3Nk+<`U8`p(W}wfl_aALFg4ruf;0S>RD8^Pg*#RnE+WwmZitAW1{9TF`=WK(@ z+`ODDZ{K0k+l%>O8praVW60{e=Z9?q2dBiyp`vJItT`_*<*o|!@GEE0=08#j7Q+Z~ zaz@*%ft_yprZ8k9Jx!Wzp@uY~^%Nw9$!?!EdVc0$<8P=T=ckff2IfaJb3}WcH-&UM zJm`>EH-$NMd;gEd!p(|kzBMPyRZKZE?Ze=QFLS{36jnNR+1O}ale;Q(cL`KFZZ;4f zjy=2s;RzC>^icbs7M&*U9hv4*rx|B%47~1}Rp%TXpo+zDEv6_h+rOriwM`q&mP zl3EZ!6#|~d@`9Uvnq)}{zvi2G(08t9I z^XxHrnLMu(PhDM^(Q6Qzuk0~v8PPe4nY|c8w4k5jqpW`IWKcp%@S#ame&#kJxZ&%7 zLn+VjP@o(@?YQjz)WEMf?AIx?Y`G>cSf+7)yS5=}ItJ*@%~edE{%Z?iF~CCC-no4( zfe)+WY>CM&>+Em>6T9@QpZ@I6qVkz%GBhwtwe=*TiLjFXkUUO~+}N()#qaxY>0@Mj z`hoR6^Z`yH}_#ne1c4Z)eQerX+9Q`^5eRhYXNF(9HX?HPn#h^wGSiEgN)ZM zE)N^e(*%`nUeF>=uCV&qqE1%#mGI=|$M=dW#;qr48ySvmmg|cEOT>I>miy%wQiI;H zv_T%_+vJhP;+!YpmYdwJGR33EQF}H&j4rd*goF6mscJd%+?~&}%F@CUJW;W7HJWr3 zawDj2i424CsU>GpE|~IzD&FFu;nh1bTc2XI!(wkeJCaX3_(R}svHR*n0jB4V(2sdm z6#~+Rmh>7P*;#fZwuriVA@-tuzKUEbF4tr*O7p4i{!(n zy^Ex*r2fvF(2}}vWA}bgS&|yz7-&!9wk&`WA>`6-J4?~fXXB~sOcG>2xXKa{tM8Q* zsK;P=U@=ASr^}jNM~sz);-x+dY9cRCdta<3?Hvz_&=A%d-8}78eiU0>dbZ@!>7a<4 zzY-esQJocPc+*x;U_^k~3_9DEsS70qgqTjO3fP{L+UEl-vT>AUe3Fdz`34J1U*XDrln9Q9*%RCn}-&a&IMp(rVJ;oSCN{&a^=OqL) z_qu_c!(L5Kvm86tX>k)(>rScj6Dg6y!htka0=c{e0{9$mP(ZvY>#D?{azJ(;^N%VU z?T|l#Vsy(x5C8Q%6S+P8pbd{_zXhTda?P! zfPJfwo&>YLwFqYz_fj zJTU!L{$nO}IZr3_=3P=9aU%Vjg>Uq;Fo4fo$}Ps|J8(bEoq|%fCGv+|A3P9Lny1`& zkol@My8LJeZW!h@Vghk2Jj_aFRW9L|h=zBu!SYx**!^1jYV`FpdU+Ef^lH}*EY+`v z*>w%Z7$O;GP|GbW;V`hNc}%=Yp?>{`SViuHdyJm6&a=7%_^)a27_U8B<@$bP9hvNn z(}eqNELT=OUcWB&!X(0;*KCW8+YZfB)z)dyS zYmc;Ve=AB>Jo`1({1lH!fpzPou3K|Ws>LTmR~<46YD~E+F35qD{6$8=VRh4!Qrlqd zO}g8sqrir4XO8`$cH+BlAga}rl$&j)z>cmFH>$Rz9~dCrVzCh;ugW{k2gL@N_OF&g zM_OobTXabCJk~Rm`MDgC4XKSPT#Cd}zuT4{VZkd_f%r=_Fb#aYnRE|rUwP@7RO8LE z2XW^hh9+Px%V1Fx%XNBrd;$5$FfbVRd9`hiUEae-r*YLpWdt?Q|afeV{D{g{8{dijBN@6Nsj=V4I(`9a{|N;Uqbc=<1--lm$BqO{YpY2ICQC#x&?BxYDEE+ED$8RsOW6 zyJLfrRU&BL4fGcoQ7v>Yk6`GzmKHA4B=0QCv)j0QAaYig;mP!s&R_rZvOJ9GgM7js z1vl({A0DT)rzIT+g=u}=hPb&rdxibFRgejIJP~sp-mITX7{9XrP5ama zyoi^8Yz}i8!UltP|8(6O+u)^j$2wZ*aBkyU=iuslx86G1= zh3gOQ>_-Jy2n+FMuMfSvofiQ}Sg;a#M>hB$)uW^<1n6U!B}wER{I!zo0S($^4k_Iz zTcWh^^+rEZK{2Zjo~A(y`JwH*J?+M$06%90=2CVM{m{W5X|fH#OFF*cy?sQgD=DbM`Lj1PxEU_jCU$Veoz!;XB=(8nt&Ea^u{9r@0F zj|W@-kKV}O*69JHAdC;bc|xtX=OHi8j?w5Z#J11WeD4c5cZMVH{U-MdF*sqmSw`8^ z7#H+0ZG7=3pcnw87KL+Jz!M9A6Sq7Fm>D2}!2Q!_U@y^=9Z?v)kY#@|wW3!(FOepf5 zT+s<6a3;u9468Mn2vq}8WM9CrnyQ^W6G=oK42fA^@3tJ^C;o8rNL50|8vRz%-C7G? zG&`1FQ}yNhnd6AIjQPW>UX3<942p2;yIJN1IfT)Jp}hElQA81{NX54%M=~LRZfJl# z08()UMKQ2&Iv{(hL~u)`(m*pnLJ4~RtL+Hl{`uu3own{!Jz5yG;6HePbrK$+pr@c( z-K~|Kx%mBXLzC5v6+_*%RhqTjx-s;--6WYC2#a;`L#yg9cIX_xrU*~}iCWn-xjE*F zI0u9!0>=dSzF?~)U0>8q>^NXCkx6>|KqH7Q=)e`H@%?4i;Z4U4?w%}C<-`>app=cG zDx-EkwwPhp0Gs`{_Vk*Lrvu2-8XiLDHTDe(s3KQqGg_;%m1K@UcAkv@m=3^RMm)ol zjAJO}dlop3R8AZV80Xg2&C}qGmp>cPkBH1Bc$W9irH&d8b|7IUqHfpt&b!NF-lrH? zU8C4AQdfvbXXATPZoQcq^#Lf`WWVtEy%EucUJ_X{A>czUhXSV%iN#8upaBM={v-CK z0y!*jIzsC0rC~<)Mm0N&8_IU6toV~ivPOwd_<#QY>fipBP_etS%*5fowX~{3zMBlA z-XU8PqS8@(XB%4uiB_$#WSt^uH9n=1#Pq)KQ}uiO9cnVdOaa3>`tv!9>a*n+ zEnM%_qhhXC7JRU2F2K+qEp94pdzN!6hGPESa-%q55XC;eb?3t+_!1#P1N{yzSZzq* z5jL5B*Hk#Bi|r#`dH0upgC(k&^U~YHHKaO3gA7So_G-;u(A*om3ExMuHq0|3Q8D0P z5l{NvQ6e-qaFs1&^^bUzP%wzg0f9?pqJ$O_Siy2RRh~)z^}Qfl&$)~i=(Fw@Z(_^w z&gyGEcb;0ea7l=BPrySSBC-2NS&xc1St}{>1?6FfcWDso+VbRefuX9RP_7XsGDKt| zJpRhrSJ|kOV9ym(;db2(q#`+m44-=#j=Ygq;T$0yE};AxNf;(<%D=&!uk?3o@zK={ z*bE)nklrgcIRbH_id#rWT%_7wcxq~`1xIf&zm#UBs^S&s-SyK~_9x#8nzir2 zN4?lOm>$s7jrux-WMvEFe$(jYJ8^l`geL+Q={x(>{w5m$j&cSIjhEDC?E9vEbZE^r zx%@$MTUB9dsw8yhHeC-jDI+uvzWtovCS5SNMA+_u0)BBq&zL#sWqh|(snp5@rP~SN zY^;IFh!f9P<3^Q#roKseZBMb*Ykl7ywm@R!AD-v=$grryti$bugw4$hhI3LBQkP|{ zU5;)>4x=3*BdEcRmT|S(?oAXLZwL1Q?#BsDMS|s%cByz5&Cv$N>*!JgLtRuPED{On$tY6%v0F|cm zecU{4-kk__3q;w&BHQC|Zre&Zxfus%ZK3BZF)qQD-;3)BYN(yi+_a*EUai|1!O5xM zaO%QtXjDP~)g4#XMK9fmkhz4t`fem}-%D=aoHQQGnrbri48+Jq?aA@bSBA<2Am~Bd`psrw?z78rp z^ZEOZpu+LH0aEl2_-MbL%|VN*u-B-rB%CwB?++4f}ZI**s!# z+dX3H?*tPhL+nd&eW?TXtI>ioPXC3n)^G1D2xD%5fug$)Z?Mk6$5C@I8Dgt*Kf?7g z`23l)RnS5MFLaAL`Lcjj4SQQ0qsCEbFW(Jp&0G5ttX^Jh}Jn>vAIjP`d`u< zxf=^>fl`0{qqCOuFh1bD$}CG1%N92Wp^06KUxbOse#E=#y*%z;YaFzT_08ncsM|`>BCn7gkGcOD4z}55>&SJ{iLXde+s9>k16(>UOM& zQ@$S+Ea{sD82h3eq#rttDk$g z*SNpP7GJ)|s~bC8cyVxNccXuzxc~A66rptdQ2uw{tLI5W=Y%yRyC>}j$V-ePRm7hk z7aM>HMFJ6ODHM3p33vesWKFgOpuJPkR}wi|f!>4oAW)OVOfqu24E2*c+3A_4M%V7V zR#MJH6qZ5{Q}L+Zxb*k-44g)ti!qT;q8pceZ#k(imxzXjE_x@eBDu-0JG6a#i=x55 zvBz#8z5?FW)AXv%ERaB5GXhu?);JnX=?f`)fFIdAPUT^Et9IB|HzdN*(nY&3C z4OCHvuKL<6p40V=3Az0h7kGhu=7g?S=Aadt^n*C&{x0~@R6yWg56M9U8pN_CsS*%k zF=u$bK;#o?yb|$m1|0l=h@Y_8Sw)T^tergC%qV~J^hn%)%hOH)>xqVetakvnd+p-q@HqZyz6$fj(VfTMY@S-#Ox7F|i2lQ{ z5UevFPyZ13NQSskdW&q_Rpmrcn1p-M2I3yML z+;aFJ_kZF$ts;dJHDiJF>E`CGpE|i^216%w!lrH;;3DL@BNv(qwglNmF0==>J5J_P z9;|;`S~+v`R;kcsq56te8{GPLO7I_P(n|Y2@EPod0ud_~vf{i5ET^N+%5pkO>Pb1E z;<1mqYsp(0A1x#Y4Ll^})&v&Uw13&720g#?`=@DAAb7K!fx{Nek>fO-Y0p}dlC->} zs4O+h@J(Da@qxl5@ET#7>&k?{b7e3;W8iaBko1S?1MS&B1P)}lHqaRs(AXYM0&JA~ zdx>Gn8;0|fUIZ`J{onicKg6y7JC4oxx36j&--$dsyYYKXpbwj~RuJnBxG_DrF)poN zCH2@|+=%%pUG_1|igWa%9qtua`!vPS!9MVAuh{)=9lzHZ=lg33GclM=oQkYpt8{eQ zWt|EMuj!!#qvPj(7i$Gx^Cb|B)G}9}ruEVHCiTeNo{I5FH;~a~=!(xfO}MJbz*+-j zzBkzpG4=Bma)!H*+en|myWeM^V@OhRP8^Sot4%yhcO}OqyY4?OhXk+Tp9@4}t~nN>plmm!~Yf zCWr4rF;=RQa)ma=6%P23Hn#5H{mB1^D>0aPm?PC@JKE1J&FjD8-%$%GcV&fPRcvPAdp~QIO|GOL_UJDM?{oj zj^*cU#$=cVP5}}n)iIW(f#Nx1_?09SM$0-ehcGE z_q2~{v$hbkmmfkXi<&jWn`z=@BGs;k2DR9@DxZ+?T!y`a^dB9vCme;rbA?&ACYivy zXU36rUYiRMjGS13y4dueEH?P#jb&>HJJSM^ zO1;WHVsWcyh*HbIwTnm}`^Ey(2`a5UmucJXR1iv}*t<^^CmX86>XOyW~WCiil} zBO+ojAB6R5q=zgCo2DsJ(|(s<+j*utV+pDgCvUF)vuAn`T$GQ6$-UeTPTvS6F3rIT zCtS##5J)8oDnO_^l96#xabl22ZV3Zl8V|EfCR_>Q`ABh$4+}?3q>S18{YRvk<0i}E z;WFg=R(<9Im1w=>~)dz0u9v_2v$UFnb9~P6ZGe3Ku$59M9 zT_X0(1)OmdHo6s=`?9H1%9Tna9sdDoPw;UT3qQ9j?qqn%JRCPeFJr(D()=%VOQ2rA7Pw!HTWY7hUJ8A>i|yDi8P%zM~0PNBH_P`dOh7lGwXf6G*V~usKYjWk z_D<=f+mM-&^=<7f{;0N5-5WRl*h+3(fT%ho4FEC_cToQUWHK-`(7-B**Z_(^WV{%U z9PoKd5X_>rU%q;p=@$rgnO$_KDG@2BHg4T>q@mH-$>E9~Pa`kc>P!8?G4Zn|6Ro0M z8A5(y*RyjDpJHu2R^9>y7PCO&sY?cw0(rn3A>ijEKq)|DZh!(@Up|P**K+8^Knu>j z3NKxKg*3EJK7okM3hG26QcI4sZ5y31VjBN231ZMkeN|O@J_jt8_K!A&c_GWD8(9dO zT|+7Fy*5kM5)cS5VPhQNZA`^~>-N-tTEkr>4bC8tlrfXXVMacpCtaFeI8Cb4?C<#k zi`WuuVqs*t>cx+Osd@Yph-&j$Wlrwe7rsLZDQT`tb-t>M+6I&cxQ9PQ0W8eJy*`Kqdf!bDGn_TH*vHA493VENx zL$YN_^b27I=Iq$Yt{kV7r~N%|j+1g;TcUEq66#rByPVd4{$RXvHh_My6%`2?OT4`j z&BFk32iKl&$1-AdAVDS9;&H;GWjKS~_kS6aa+;~^@KZUN`XHl>H_5XGIp-n%W3SEK zX`ItZ^h-(mLIPDct1+80+bXN~5MKwGKf1P^=58`4nb3PV>`}xRqz+J#FeJe*1Y*0= zeTQ@ge^BD(gP!+4xI{^GC@Iiwei-rW`N03gPyKJ4KkzTk$0TT<;f+-}D=V@^F^(3F z3isGzQk4ep6LM451oOFhb|%CIMH?TlhUOSj#wjtl-)-k^dP@xoE%+|Q`1M-3t}c$i z-I)lQH9!zhzV>x2yjhf$_Qh#EdCeqr55}tCV)K$Gv1G41g28YhR!a@$)5a}jc1-gV z?jVQ2TrH-LG0R5IYqu96!3Jip%A8;xv)egRL)Dy@Cmt1MvhHc4I9eJ|e@9<~_29&h z+HNO2on>Ha)TtMU9yzsqaXlm+>9y{e0mt-z0LyyvW_8z0f=lt=n?35ogCsI1YjkKqIRWr4;+JOob=pObGRjI_t zaUJqC0wumRlBp=;iH~#C55Yvjrk zxIjVo6=X;8jvueKy&<4gr?f)sr#Um?dZvPMQ_2GynN47q3~4PdXQmCm>j)act?$^DJt&@pf0Tig z<@~Xe;ibsu>>x6c!?N-nkcnPdzC9#4tN#;17EczxnU+P#cMISG-^OeLE|Qk2!>!)Z zFBZ?fE0j{@b!I`_`E%_rpUK5%#4JPeXgW_V0aybT5n;uC%+g} z2VqdA{UT-H2(xbr%yuhjpLGmMHf+y?HC{+p?}6ThM}gOl(_J@lY3J&)xYM(;r`wA( zZ!Z5F$4KiUV2cZM59{t>-8!-lh)>2Io*)=1_*znBGsefD0(W$2pl)mZ#P{18I6g&A znwUD-gI0wa|MJ6jL!ZD=v}|!-4N%~D?<8d`m3(dOYD;$MEenfOmZY{P!Mi( z#<6}t`_m-{_6E15z`1(eJ>YDR@aGVH40vqAMi<3kpobCiztp9~KV0%l@!Ra8)U%(C z7droKIL}Y_`N!18%WaoUY5&K0{ z@}nA(<*q^EBmK|F$CnyQg)gmz75h0Z#33+{ud+8>&0V>Gz;jv9hiwwuaz+|29tr~N zBIvS}e5xaG$9Ci+AMCMJiY~{Z)zHI%4K^KX{YmcSNUp+Bb(1%FNn3kCo^>W*7+t7F zS+8jEy5}g{iBdGwjdwyuP9pWBGi7|6&t~{G{tFt%{<%@He4~LFpyEYdVg5mmOu!#K zALQ@76yEYZ8tEI9fA+Y~R`=jmz%yQb$hG)3o0r6Lc1e6|K2>hP zud8cNnMy8Pfe4_VSrWPcz9o#63>4fAlxqNpph+rgNYJ^GvXE6VG~zQ%0nvE&!+Eb@ zNp$vK{aGY+6o57 z7@?xRyyM{W*qXAhDy1!36E1~E3L*8{pFZr3+4nkcZ`AXrbt7pJeRVqLw)H68a9yd_ zya&>3$urmhY)Cj0;CR@s+G+}8@ZEqkyS)-Wuh*~4E;foi)rYx~_Q|KP<*ZKbWet$1 z#-5B6zrEhSe5SzpL;^nZ3Eoir?zLi<-_9^w(_DhWbxxyR(+2u*teoeCe`BO0!0C|G zYxqE#t&M~@07V z!-ItQaC;3MSWzOfp>jQ$>7?1%hK$7m>JN)T9QdYhKM5khL>O0$-EK}c~XG_U_P)6gmRRJDREMAYbP0FH!=^X5~Vy4LxM`#<% zyfdFz6la0zCrpJSpF6lDt4uYkqSsk){ub?wPA)9dSafmKC>p1TnKYGQwl z>0L8ey0HP^dz3@b$8~TD;q^rc{U#2CApG70D@7n);X zP>+fu?h|H9_23@S2AsIeiS|lUZ8h&f3MQTIzlz!3p7a92KnJyNS+)Ly;7SmMJ`IOv z5-TzM7Z)6lJAa(FN^E8_?xKuSew)dn z-(%0d)5sy_66J#mLN8;*HJi?O@K1W9tYJrfGXmw z>55u;IDQdPlS@_J7=-P;R(#ItD*z@Cl&9W()OEBcHhm0Yzqm8gksq(5$rdLXu73De z0b0aP|D)OGsw!hJ!6dtT7`}HI*1ZKD(ttmFlm`b*dRg~~?i?+w=MWjymV4%s3Zrf* z2a1AmeDTiEdyu(njEPrDpo448=Sc}B8~A#1QpiY*%#8^KDoC0Nc(x{J&6)MLLb<2s zA42NIRBu1<%f!7Mgcx2^zI`Pcs_h38aaFlehpoZ4|5`hN{}*HL8P;UhwGF3|kc1E* zK!6~jNoX318nGpz1w;%;7oAWAL=A|Fh?a%q5H7lIB%iK1B(x2BAz-#@_K!CDcL zm)i-k*H@+++U1^c$JaXV7WdS#)}8i0=@~R1U9AXayVB;_rT)HPQD|A$%{!l1zLyyJ z0g8oH-?OZ`CP9RO^w&ZlXG0N&?-9%ZGP8{(2-ixOi*N$f0z=H57#I3x#Sl9TvLZjd z$M>0hft$>#(ZY$ftv2oQn-h_6APEd_;180SOkB=TtAsi=9o zddDZaCez+CRfEz{2eL3<2vvkBkp2ov&p#jLsPfIRN=x8Ke9p4(j;}t74|VLxE)`m8 z-!&>;MYz^~>hHf@?!yenYx1#gyoX|9MlV+kF!QSuc+W?-E3#nc>~@HmawufJf=b*P z_cU-dH$&@?%%I^UEKg(##P%K_VlHU@_qv2?pdtz!mRBbN}je z(aC^`*lBcAE5DG8mmzi;d`czqmYW$3bs}%<I>Lzyg7Ln+8HQ zfCd(Dd{nT6eqslRorNacdIZ0*#CwZT>+pR0!$gO+=fy;Sjz^a<<`LXx;XQ?>t$*u-&>K0N) z+qK1?$qmmh;lH8~Mq!<{b8m3*qY@ zlxofmK2?FxWPJbn;OIcN&*ck2;{vpN1?Ng>ov9(yngG9R+CM$%*wujy@J={PYf&B? z82rHYLyyiO74Nkm>ps7WkLZnqVG5M8Oh|Tcn6Ll@7nr-Tmz^|NZ0JB(e8(r zP-Ev5F=_7$iED1oe%arW;4)XF&nymX8FHIzu;hDy!R}$rhW3#5XzDsJ1K3Z44gus2 z6?~zW)IoHbKyoD7@I0)wB#oE%>P`3mhwlKIdt`lmD^1R?ZN3CoNSvgH8YHs^!-KG; zY~RDdZs%8*4G?W zRgai1*KL`8V}E^XEsmuBd9LL#agDs_+j=%o?lqHQ>%j9`K;8ih@<{wCX^S5{k&s!Tp?i#03=sa6#ty&Ja#5{d#n` z)X{STlfoWAXVM17{VjDn{g0oet#Es4BhQ`u6{>%Yi)a zU-{m@|99E1{4ZGTowFM&BUibOP_M!XMy5n7458Ax+y{HKjY!H_CLWdK%);$&rkF74 zKCvXF5mB(hhG^w+c7%c7D4mDVR&@acp-KPjbg777{4O53PwwQQhF|Xq$U_%Kb`pTVgJio(E5|K-}#(@0!eu9_cUs%W|e8zRO2+i>akt zsV%-~^MyPM;op5v8}VX^yO6pR-ZheJVzD>y24#>KH4mO>gvstRCB`d+>ERbt95b8j zHM#rIXNTwM7RpL;Mkr^DCB;16VRq-Fxs28-d<*Y%SH;^2m=Wqz;y&Zc7$-zbu^}Of zZsoWOaazvXJBqLo~pg&is_lj(x5AHmkvn9x?SR;(f-swXWhDYBY& znAB1~RZNRAIGl_^402rZhD<8b<0&lTDQe(|A|&Kxrh%2N7wKvTe31h>cjX3bjOA3j zpVH?Dy!JLLeN?0>v+lh|K#bFajg--CMwUMNBRgYTRSCO9Jt%$>AzSHoUtDam^yXN+ zWzh;0OJFjMA?Z$V&%d!TZbRoP6}0c}OFFA#OGKIM2ouXp#?{qirErFRN=+T#1{m6f zDHAkC7s>m`WCO$cp|OFCLDkm1CTt2^`ZYQUsq&YCcl?SZeZ5RPX_SCh&| zKBp*r$V!%heiM3VF$y$Xy;0VgJqO)19XkiEjs)l-^Fs7RdtiJD*C}6`RX*AA_|)Tt z|NXlIdIR)snSIwGcHz4ACkrDY`}6)bbUB_w6FRmerFiu-BSxmDfnTmbg|6>)JHAVh z9kJ;6kCM#DU)Z-@6RSx86ae-i5PZlc3dV~3j4f35`d+t(#F4dDAC`Fp3nwT2C~)RG zHzn(y3gYaujN8ydt_ z06-RUFTf_Dg+Lo11hQCQfgFK3s?F|-Ye`fa94~f;cG}}Z1eh$DK0@<&cB+MP^)dR^9 zK2|!>HcV!GH4a!nvD%Ps z(lT)=eyX)AtmbJIHj*gbGWVLn53o&W2xlAcQ%V3PC`>DXh=HI3?2*%ikYAY(gLRfY zx)W9KcARssXE$f^)6skO(jx_RQXia=v#f`}2r}B?6udv=0!>xyi$2;*O1SYYEQ@)_ zp#F?u3Z`a^b;+i0GW0dHp;r=M5QR1bgaEK1kkxXb4Jl#3)vE#*89c6LwvaAx2P6t~0w$+bF1O&PL_QIXa)kyj`DD7tTem%wK(0G(cZ&a4)wh%y+5f zd@+0P+-}W9)Fl-_!aD;&RCv5hf?N_H*#l$Omue>N!Jc}5^=8?femr<*(}$=o#^lY$ ze>=DT1%DR(!k-mNzW^$Ipw_t+7kR6mdM?90s88#~B@!BTVJj`z2I$6e>hDUyi>sYg zhzcW_Lf!fVtz;H?-$sg6!75L?n2WKE0mt~Ge1S@0$z$F~+GA65+EXWxNY26Z7&vFD zngvY`#iIxV%P&k;R%eV>E*JS$2A^D(RK~tISG)6szYI&jT^K^JRieHlAyna%Jd9`? zuavRQ3^5xi#}Udz4&tAWQ@7u?SG{2|9FA9_`{B&s_Cn7Xzu8E|xugi^12w8n|Dq71 zmfR7;*+dTutBNZ?V+5K~U4cQwxzFx{8!LR34R-raL`{U@LC)y6An;{m~K zL(X{A=_k1N`ZB zxK9`pYSlWI;9)~aDRWj)OmmK7tsET6PCH^IPZ9KykXNw=M!|B+OU>= zk9o32yR)e`lAwdk;lEyZ!vQINC^KVs7Bwfh2&Nj6h&25Lh_th-ba6|)YaXk+w#{Z| z8mqF*bP(gp7o2f-T$?pwM8X=ooo?jwgHcytGd3{)|7Rck~>Aq#eYXQ-|q=BWM0OO z_|X+wD$nLZ|F{s^l>^cm)C;5pwpVm^9=w}1TC~dkG6uDxhUWOx-P>M!<+yYJnTx2f zMHc^~mEImLAn_RlSpOGLS|(j%D57kLsT4FN#yM>}dhLhqtACF38VJFH`bX=0uNh?J zs#)f*;ledhXw&U`l#5v$Tiv(Ad+~;iRb9_A$zBdJdk|yn@S{-o%D>?aq?1|)wXvn= zjXXT|UtaWSXRA2lv6QkjEw1+DhCSQO>|dV*{+=4);BJqK(44M07ajd^F_7mAOz`AY zBf~V|gys?9#DO7F0qd75g>Hq(+#>AOAO`i-**ga^8s6?5yJF^MEw2$5PT=&#!WX?k z$Bu2M^rK-0pDyVwEUqR+=H(x4FHCST_T8nu_BxVb`0^HM`P)c8tzWp74{$AxLeu4g z*G#}V5g?p^ILrkc1jy(;b>&-W{E5fkE|w>qJ8PGBXeDR=HbV~kb%Dz)mxqz7ynY`h z-~7?AtT>`>fO_fN=dyUad$3m7HDcq{MfN{_Mqm!GEmAAKfouM3NfXlZ2ZDp`3UesbL2a_>AiDwtM{ zDQVxo{&+(|f{QCk*sShzr{|kW62_xe@BXRGiU5#4aP)+vW)P5po^JD#6|n|Oi%5gfik*@W@igvDXL}|Od^fB6^U9atC&7w zFWq;Gbe`e3BS7KkDvPMuh5P-Aau97yoa&l z(@>adEF#cy67Es*XSRQ_r1PdW*Kv|^@Oc; ziDpB(Q`xxtNFb1qM1bCaqr(2;`JlAYTmegnNUItb{M{;@cjd=$=zrj)kl)Zcw>ihO zO)r0*!iQ(2gR7aoUEIJgKTn7)9FKEVHO~HL*oo~S+tR$UqET36&uHG?d+Fx%Aao_c z^C|M5`V2`83NB!u(DFc7TOxswloZHbJ>-1*OsRqcW-F+xdjX8S-ql8(|p}# z$Ni5V1hcK2bSVfc-ud6BPn33czxYE{6sVoAsxJCM+Z*k+Wx@^^0X2hNWssf$%?kiG zWG3k80A3MrB?Ew<&?3d|yM2ftPK#Ccj;Y0wg1e77Db|*I{TJ*DNQxD&^>BIq{FC19 zo3`dR>w~U^^CrXDSSxWIxwT?d7m5={BuM9n(Uy*&({cEUO&GvKQXu< za_s#0gKc>ScxvJL6?NP1D1LUW{8zo@f5Gc{zwkOl&GkP?Tm-*XnG=g(I8~46MJtK^ z_;#YS({Wat0sHP^>i~>CUpf=abrB2B{3-5-8L>w73?qgb8jPZ`6*aK5!R2tPm@M<_ z`?S01F~smLT>wpd!Z(m>3cFDTwsiY}LX7>RfC5L{jh zOPdwQx1W>C&ct4wEsD7ej+Nf&%00=V|^w9d=c{s=wEA#&qO))?QZ zxcNnxz&;Y*b6v%xwtDIy<+9KDJZn9?_P9V>wP8E(GdI-Dl3#Ks`Xdn^Fbv8Q-O|1K zGIRYnm5Om)f3$CWk+#pwLi(cT)33EgoZM|LJcJ4B8kn&!MjR&cuA@?zR;(!M^1hXb zh^N9cj*gXG*K-6^{;UBNflYu9)A7?!FgQ~OBiYjfD8Zp}LswIMSq{Gw;R3tmY*Uuf z!dT%Yh0&-!ZEclbs=+jHlI8q6Q;SfaRF2*0O2H+8Alt`?P82*9D-}oCt5av)9hrl{ z`99E-4RC_%tZ}!uI%C{t;?9^M<;XlqbKekifvc7KH){szvq|1PgX&}2fijNv5&oDK zdOhyXG!G>$!a2lk#z~?*hhIY$k$rp3sF$h7^!xIX*@yB`(OQQdT zs)bT%hqGJ`zv__r#i?IRx0S7NV4T}eCJZ}Kh00Zzu=5?eVtDrxLkrf?wd@IR*V}3t zYjGHSg{mTvG_DgKiTh`slPU>3W+wTj#BA0=>>Y;nxoqxBbAdJE=uQZJJywxrduVp! zUc4A@$;IS0u%8h+%?hMm>v8;Cte86kSt^n#?r6;xGvaOTvA$S*+*96MX3$x6tT|0c zuAHBKPG4BjIUkl8ml1fNm`uJ;u~jBqZ^8$U#^x;sB*D3ZoOvE_V%|4qE7yKaSn&>A?|IU{-fW z^mcBm2nO;lAZnN?8Hkb)Q4<292HqvAu#9K~1j#@Rb0rhJ zocKWrh8AWY9E+;lcE{5rUr>806Zg2*ROE7GX)!Z;2?dtYM_VsW-+exy3H#%4h`~UG z1`>Z#!(dou8b-K80);7oZT~*_U#DM@fn4D^a^$ zV>9oQ{mOHf(xy9(1p7Q7J1^q|meS+Ques0rT-v~WstJdCriy>c$a+GsP8i7@ve{SkNqHF2H-r8r7Z*qDUkeAc4_lDDVy zqSu}$_ntcSwZvL_G>PPDR8lK~qjqOra_s+Z6IV8cBKg|-+ar7zUGY8_?&n|dx<)sY zw+TgcM0+>e#XvtGXmEg1Dd5WkRP%lk7!;oL6Q8+|5S|MwNvDKh7lnHA*ms&kmmYZQ zY-f444sN`$o=4|0c3s+>WN&_>Pw&BpBZyv6&*r`Fzd72;D&Jgmes0+&>4e7|?<;@z ztLYJp3W9C~384pVC>DXB>8^4BSKJ%Adbu#)HM9@xVXsaL?81~!F5AgJYc&W+*3^7o z8oh-ly{X+bht2E_mu%{JWla9?5t3F5nb*yZ=IXl41y5HUEPHk7|$cnD_v$r2g z==ixu@D_=trlBi5p!qHNKw_1$uuI_JlH_8wveFaB_qxdzUn{+^=+Mi#<#xI2RJ<{} zYwh;yMZ!tK8R?12;4fn^80o|FY4>V2Md#4uBfHRoIjo?E#M70b$U@SlH_)L$Movha zhGzL_K4XNFohAwJMQak^?|w-5@txn}FN^XGx8tn4Z^(I1ns0@Gxq$T4d07#IN7oi! zr?Fr#fmxRTwcv-m+dGrDPrt;p!@8f_cX2W7){ihvpE2mSEdN=?(^LJt9Ax0SD1-W$ zp-YIp{&o5m_|@J#*fNdFd%mLd_v`=fyxsd(9uTVJddH*tlaz0US2>&JzV@(?Gl`UZ zRYay&y7&pzU(Vw@T~yCE=_6?~sCGD4pHu+t?}egOaFJKMV>ok$ac$bT>KIlXixI9_knm4$)WjY7uL* z1KiLR;SJ1)^?Pm9PNE_0n3Piwa>T-Rm*f@3xiFf!z!qP-h{;@HiEm}r8;OTz^97kM z7=3izMdhgISezC@CjPREf>|^kP~Bk5jA`u9XI~X`v75lduo&n zLiE%>bd2_{;RE=ZL6&2#Vkp>nA3Gb*I!?o5@Q5yYDS{X3opv7A*R<}&Me%zq>mqLc z8LDww3ySZ294RT8^AI&vZI8XXt5+GpTw;WN3@1Gepy4~m4`UV?88K(wVy=g^-SGOl zQp6Y;dKaILS5!yyn{CeplLv(_q^h7IqfO0Ts2b1r`Lrj3Xe|G{AoyaNi!FKzM|#qw zJ`ax-wxrA!wp8<1Cc>A>HkIgoVTKq!)ovG1XL_wvb~#&rQlR@okRLcU6g49^m0m|6W4l&ey8bmJJk+b#tZ9D<3R$4H zWm9=_SV=nWGpE6>i85$ebjM;*FKE93++xpE9U91Vpj$-^IFuC({*Qf_P6eCAk*$T- zV(DKlhK3kCh~wpWuK4iw`<(lZ^`Zm9HMiT76Z&RG;_lrKik9ZpA&y-1zQ(_vcs%g4 zxAwg?4^aeO5JRLCE{nPPxh69mI5$Mq|p8qzNnB+0B5l^WClRPcmusB zV$ufx?S_j%(XwS>v{0Ls_F?a0W&n4%k5&4zWg+_JO*!xAf4;bWKe<8>i;2x1=T*d< zf3`msWLi+;U~`kUW{X7ejbJK*%3;|@KxgJGJf<#&!J>-_+cdmta-OF`3Mz|QsuJ>RRa!?LSeNH@{dDVNZ%Eslaq2e&u zBAB7UI0q4V28>YMnBjz^B5v7&mot^v`LJU&kZ9Ej#mP@wQ(csea>ASH>1sP(*L%kK z`gFWeGgFcLI4J9Sugij>^S54&4*JkdH$Pb2?l)-nhT$RjvLcyWRPMj&-4aT$=FFf@ zx1ZRi&}4M*Pj*n@6~;onfdlWf-;x!gd-=f>yp9Kzl(4f8`ZfQHcY?eN>T|OWl8otT zYg4^TH}fB!`@YScTy$M&BbDYH)#v~5c*liF`hZVq>5yLcIm(+zAA4ks-Nme504{^@ zjser?J%GjYpo?kA0#$ScS=#0 zBWS37;Zt&vBwA2%CA{)Mu#1OWN8MU*ROMQ;L!5SfkiX&ACS{smlSCW=z{qq;n(y|OZKoTsm}Phw$W7o zPSO#kF5aOh2X7=P(xDAiIt)niW)O9?UPl`a_hu+N@MwmK!TI*OQ zf^)OM$Ni?iFPz5&#o4gGYRF!N43!xXU(1`YX0sfz;_<_}l9r{kv*e2eg!+q~H=EO} z{4!L!B@C5H(5taQ^^Hex8}*bU%p=9!e0gr-JOQsyAZQvLg*TIoV>8VAn)UqABb%2+ z+hW)at3DQOjOVNCc3AEbGG`rEZt{21ZJ}>=!7o#&PrP{$D3i7m*(vz2NKqHbd6_rH z-2lOI%n{1*X-gN2KZVoM`s$pbXS2>FC2gzjS2X8m?e>Bz9DS;{Go2flcyQwat{|s@^G(nPIUO^}*72E>BKV1Ig>v?F-mfS5p=mRbI2!v9QH+)vrPIg*WtQ zV@$?Y@81g%<6pzHtq`8b8-lkBA|lBC^Q`$7jzxnPCH7!D#&bkD^HPPw8)G8Gz(gkNnUY7TjiEEIRGE=*5wkMx+=S=7~|7;Ubs^43npWfrn# zi7TjL>^|SCx}q^*_t-9!u_Rl``rFGGP4S+it;3%g;ij)z3Z|M{geh&-@Rz+pq!dxl zSh|vxb$T6B(kUS!+tl8kqV4_qa`XZLsA-2R&Mf9CU6#X(JI^Dt{%MLPof!G}x4Is$ z1$&_$$#hX~SlY|7&6?8gPun8e9(qvo8l{$o!~BcKK>avy3Vg}_K}9TQTzv<5;L3_% z1Q(GtH&|3+?5nl@ap`oD$bQ000c$63ynpY<^PpYRSENwX0Q4eH`&Srr(C`?RbBInw z3=7y);b1E0i!y&bL*|Xq8#CNOWApAsS%+L)#I!wDxYx;ckJnY=vpjM7(vzsUhvsfg z$~{ihIr9GEy-5GMTyuVz#aLy8uvPziV;~?*8Xl7mEd;_7#MMB&bqDdb!V)YrsRAUI z+;=5af8QHk*x1f(@1h*6WuhEU_ ziUz{9bjDv@Bh%8}q~0zr`W4snAlZY&(o;gj41sX62J7&Z3#4lyOc^lKB8-2d@`N9! zK8^0!v+7^`-QKbY?X^{}8bR^s%Lx7UqxH~fQ4ldnpin(Hyz<`m=@!&P$v|mbq|Jr0 zm{pbj5Ar|!5Ni?-@C)W>YjhSpOU*9`KLccMxl*Z-3o0nusUynf6)_Z=184Z@m2ta( z%S8eggIjoIqR{xn*U7KA6|-+mW#H)-c@_-P^>4gCgDAoKb!*Y>&sIM@v5Zvo=11Vq z=eJ~2`yjHbQG+!`nQPrt>|%?D?+V)(tq zq(5|z%@CJ!7ly*Mw#wp-geG(J8eiL0{IVqW$-$4A%pmF0CYvE?oeF6@O4tJA8}Dj4 z)>f9Mn5p?I(y{L77k?#N+uodHXAhW~<=)A;{lR3w_n{-#*&Ca~?lN3DSmt)ZD~0hQ zJ@xR!Sw@0lc0y3H<9kph(|lg#xDZJ)Xm=B~L+b#q9=IHQ?yoGvJb!(4=o`{Q^n`Qz>eggwjl!6spc;@{xJQStRMvDIX1`-dPuop4^R?dmcV1-v%< z$BttImwtU-KnjsS+K&3G5-Lh~fhh<;+u@*704UQb&0@CAU&Z43-G_rUzvBN39+Q9J zak$biK7|-R&?Aeb@2;d4B`Yp^2#JCd9@>Y|Yc_YV{%F{U-v%Q|T=h;F zq1tQ)Mqk#5l*J|7^hMPu&R^QA+WJh6E;d6cFJ=hlvSt~|HYn76ed@?a7OrcRD>-m% z2ja8(0#4Nv;wh2df5%g=;QyX($qUY2h(mPJX1_t}B-yQUKu@irdL$Vr1*=Nk|K>Gq z-u*+;pq~13MqhY=xRId^r;R0R#ca(Y8e}lGyD84h{rccb~H7M0iMBVq7y0_2+L?5;?{A7Uhz6!1(*PTmrcl08XdP34Gr1WA* zwX1R@)6U=k*$olbe~V}X7`R1#=ZR1JN^56K3~e@|vwF@};l-77yr^$Ha&50KV!B?t zb6~Y{7E(_-DYeCD)w*2dP(oaRF>0kmTnDGEz>yG2=ZLcr_Sy32u}(&m9!5ERYiZ|E z>0F*1VXIDG|*Io~e93^SK6HCuF$C4x~ zk1jo^Q%Md~s1^JDE|_Yo2E)+4ajXm~%9554CS|FRD-ryw=-=+tFWOiQ7KVkb0^Wxr z2dwc}0~vutyOtixv%E_7&uh2%{1Rko&k%@-T3skch;dYnuNB`p?Yocd`8>r{-t3)3qZt$ zq68x!GDwqP`id+~q0b3mqg07yp&Ua&?U}9Rm)>}$x3Xf@huU=t%t)e6wO5MkUi{+I z7DlLJh%TcfjG`AVM7ZtzJF`Vm@X0|T>nw?6R^F*3P33O42vA?6s2F(@HJk<1V%*(_V+W z=H*05$)Ad%2ffcZ@p9WQUm9v&Ty5<%b{#o<&So^Jq5N^gKMB^*hJdtz-+%k^L7VVVa^fuy|&8-`?4^mRvYAnYL!JdnNs zP~@TcjatdF+txVtXGoBZTAg)j1>5G8*83_Q&5da4p<}P`|25C&r z1$P&%60}OcM;iXErrfb!#vx$6A3XG0N|+LCbNQ}B!W{dp6e^=biD%-D{MOj&{^X#0 z?my8_(z6J(1#^Et&@f@~>!d1iK+XX32!zm$Kp_@7f(?Ni0dNESfXkX5)%m`k};WcsSkW$ z+v9R}CwjpG7N5mBd};^t zfz|KFwwFUwf*{*s9)yn!U{07+CdF!TAi59IPZmU4<=EZaF<12JeIYBnMowQyynB4o zZY*FE_D+!AEyLIET1$4gzG?7D&)v6hWJSU-Iv3q zGt1q{ohE)8X1RJdn?}ivOr!Z2ZE3x}2tR`?yDY3dj1olg(vCz*4c0c#qL%g-ta)am zL$Zm%&YIzY-~CtposXH!WYHuqQszo+KnWE`mn|CMSbHSdWHaq?tBtw=&VIm!OLAZ* zDD6{J^WufhR)m}}SR}ff1=_^=zECd?VaNrDQnQi~k|Uxp71d!MiNW-o+Brp?gEKHW zqkJ*Ot8>e0x-PY3=5Th+RYvNdCWrAgLAenrF-wLMPVHStji1#tpX!2g$;8cQ7AR*; z&&5{n8Ia^4?`61SJXPGm80G>NYeAqyoI=DQ?)r3T-Fle+2))O&`c46xX&*Ttk@5a0 z-|Z>bUos%59+Gymf-9H{JO_d@03QVZJ6EF7J>;V+Y*o_gPYqOgGTX`7t;4Fijc;T$ zs!aQwa75b^u9b*-x@$Gr#z-PlfbzRpW{@iuQ502rUv2CNA2f>D9Dh@80H&XR<+Vx* zP)K-k@ei-wmHzNSp3#jv?Zcgv7|;F-uvPvb42c5F_QilaW{j?;~HBJrAVYBVRtaN$&pR|hG;y_$PiiRn94Fm zXOu8Ep#PLem8trt8u2Hpa|6ej!Zz>HTos>nWo(IfXy-~F-Tg4;_uRb&wZc@ghv%ke zBA$)Of)K%x&QaPuWXewENIu5#vW*vUa?EcqlV{MWgUNPd4Cm)Jr!maJBO;TC^k}Nr z(P7l5hDSG!db4+IbiASKI6YC#-oY`mSL?4*1vvcn+@icQ+U4^=0f#a~;U8CC&2`0- zJ9mX8Jv2ci_;yxM5LXt`z+3VT|76Ik)!om(v4f9f=yj+3u4?xHQ_{WBaUUcy*cTF3 zxQU>;H2o3V!3~dIGJeb6)3Y40j37NC5?^@Le`vbq9a4a#F!&JQ5Fk770btrpfxWOF7fHn@`&*LN?d;I4f%D+zrp%x&xY)=zfqeeT^JjXW zYemOvtQ+y9-3~Ej_fG%TP??kFBEmgu(viQ`Te1)Q6N)I{rQm{}1e0Wm17%yFi2f8R z13(23*s26WO4)`mt)7j!hcm9+hcUq{6>1eG`n!eI+n~eU(UT8?Ju#Mjo9_1iKC9d0 z$C&A4SWO8oBCZquR_l(so1VGtnfOo{v>_0>b^_4$0TMbK*9Wo?1pVj4Hg6D%L5OUL z=)N-RPEIkdXwL3+JCZyzP2d;6gKAWuj8P~DZ49TBIxT~1t0Ol~OhO4>4SI?mZXs7P6n?&|qZ z9KYH!&6HZ7s;GnZ32Gmymfhb?dl7j3ax}U9@@Ni$mjpclm8!d-$*6b z-+d-V{}3g`)>k~W+&Ug2b*uziFIiBq4%PW;uHv$fx3b!lmdG%mA3Z&^V|0*pCcPLo${ ztc~JHIuOTHGRsgB)!p=+nV@Q9RjpuS0Y`9CeKNkhOiY{QFN%~}S$Q$KM+}Oq#o=ap z;8lYWn7h#;M^1D4T7WkiY=W|_|hHvqR%wg0h(&->d*%WW+KQGzQ@4{~77F-WJ zhVq5Ec+ONLny_ynm1B;!+#;Tj(bq>?U)(*l*Hlq9_lQ~U%tN&Ox^e<`bm4duk#Fa2 z_z0`TdaK(Ut!){%=mkA;rDtc5wjdgvxTevE=tcQ1%|kXf&|?=a{N69DoE=}?-lcxk zQyp~|b@-%!UTpnrqYO2oiV*S>i>}i`1m@D*HpGGT6)}=xD(Ml;seAbYX4|aJPAq-z zlwo$EJ2ByjF?v)hWKMivBxA)3%PKX~1;eX!ZdkV+gP`3BLOU3Yov~C3q_a&7B_bD> zIS;PJ-1VvTaT{kY+u+#&Uly0a>d-%(6vC&*J2~9DO&Cu?il1Ips}dxN1Jal*wlLUe z|Fh9%e|+mR?W<}_CB=9d7r%cgdyqk8wj*DA4#bp)P~T#-U?Y)TCnb!?!{*k~4Ti4B zT<;ie2_geY6NCeSysdwVnpK9(_4#w#_{)tkF-5{JPuSR9MkII-K1k~t;-*_?+{i1P zJ81XAjtnB@-m`dghn9+-_^k6gyKDTd*1Ny>%rV92x*FO7waUY{-}LIdyi{d&CL;8K zNE{QfLPsZj-!X;rtPnUI(@!>`HSf?0#_u!{P@oB9n-qds_fP20@Ppl=*o2S!@KtlK z>+N7Iji-!tRxtMF_#!NnY1!bp(>|+0p7I>$k~@(S45AJAI?Af4y6ei+Ec~w2gg|ygq{K<#K0b=2Eh@GE7W|;1Z=irix}-4$=h9!71#274%ydP}H2Qw9|2>Qcx1biOS5=g` zG4Xuu`lkamu2kU-gF8(dcL(GTY2#0CaNpKyMHQLAc%Nb_`2;7~&bWxbMEr!2 zsoTlfc9uh4YC5K4*QbHN{Txd-=Vyy}rh{JuR!fZRX^^ci{S2d#G8J0eBQ5 z-aHCoyt9QV41o}4?>4(5OEG6`YvDk0e!0#_Ou;rp=lyijAM8ibFit5GfPjL71K$CV z)jhF1JrO9h{MR~Mw$u??XX|pVm-0kORdO*Fe$%vl!*deb2AK2XyZdzKj;-7g_C zk&ikf?C0Fj5jdSH~)p1m+?U4zZMLtp;~pZ{O-fgcE{vIRdErS?u#Go2$|@3j_=vTBQ% z_wuT(#di$lPe)_ux#LcrmW0Hq2)TrI(rev&LD8%3^_2KEqN{e;m*~3Js%w?x6Kz6j zvZ^SkpZi&P=E zsFiB32CA`A-(JNs7pwdf8TicWwBX`}pv9<7n*0vV-aN7oHZ!JI>QX75>;kj4Errmh85@O8Z@HES7pm2Ka?bL*P5xR z^XQajs=F{3QOWk~BCC({)t>^L3(xq#*{QX^u|86|zwH;ON;-oe_h^3GRv zzRKCC7zuz|`tbagAYUu@DQQmD=>F%3h>*FP`ffDYV`gR3eMI(s3NT+k#4v~AgwZMd zCS=-2X^Rp9NR8mpAuE;<;rHpXf}34j`EO`nafK7vDWr zDJ{7JaHqKp*5z`VWq$i{*86K@f~#XtB`$>p7KJ z!I~Zh&%t&-zuomdXqEyzxkExPZP3NCE41v@j9{#>nu%QUMK60iNQTbgaJpEr5_H17 z*DPBI>op&N#-|F+rLYUwbT}cQy7p{q0IJJxmBoR+aC78}AXRQY70$HQo7via;kcv4 zoBf3_Z+D7;Hd(vvukMGM0JjJ7fkSae&k_VU5D#FM5jq4GYatX5aK#Do%s4tcG>}_lv12l+qcR8Olf;S#%COU@4d&Z1#Yv9C`WzyL9VBpK zYU#S(nzdYmi+iR@@S(^=fEemw4bXc5(HG3l;vhkQBfthcGv*)_4P!@2bmYea??hsg z;2yV@OZ>L(sAD6X4{)l!vP@yYp2p*~jt8VP@6(|R#w{l78n84YbBwB1>9#kc_@@I4 ztn<^UO8T`98QKsq)S$qID6rB&5$rTykTgYjx%=LC+<(9ejc@1=JBH7U(BpFv0Yc%b z8~cCMEN;ybVShgn*{shO`YiRlH9a)%RkCB=W5?UXEtTS`o4<8f*FyVztqY7{P#{N; zXjy$pRxtLIb%YK|30nd`ejgx4q}j0w=YY^gF1Ezy&gnNbc5h~~v&{+(MOv;a6uB~L)!G9Sxnw0j5~KQlG;QQ*j}0Dut-rjGJ83ZDiT z6-pNSXX3Pl(t{$hxnn+@_brF-TYoe&YMJ0Xlxb7?{3B}1r-xXuGceeSnd?0lb>M>X zLv^1AtvA9Idh9pxt@Q9n1AQk*6S;EJG-wW_m4yq9(H1O;9 zT=YnBqHdFto_&Id=Rb~Eze&pUF)Ztw$S)dqzT3CFCo?n9uPm`!S&5T?^k#N08->?W@7}}Qpvid5e5T(=i&UT05kL=G!2iDMSVV!W( zgVeA~GR^lUDk{N*J8~Ex51srBCDt!=!7gbmHvA2{T8ed#|1>pr*&$4u%>fx`*yY

^B&ST6tY-ZPN_! z@-Ijz_Dsp4+Q+Z^kqG1s=;u^&eNmbc!2>;Zj84yG7(o8}Uq7{11D5t!-&$zP;GuuV^f zl|Jm7Nj!L6z}-4Z2L(;})ogPTMdBZ@iJ7^aap%wD&#lc>=7A^X$L~wZyH5+eYV`KZ zo|EG4gY7EMilX*9?N?+fE}|F7=vd#(OmjLMdF^EDj%Kk+vrXNpEg-S>gwz@kC*xoU z7Dxnh`ATmPzQFA)%VthBm`gklU2r_MAsEJoFU2#upWZ4X!6s_Ap9`Gt%x_A4^tHx{ zApB_QHnjYCx%I@b$j3G~c{U=CAB-Iyp0FM%*PI(P-w={(U?kzs?>YeFO`xUK7g%oo zzxK}juZe35;5Q+V5Fi9(2^dR)EMX6{RX}_uR4^dcV10;+7*T0tGgzh6TABpICcD~# zhz3ODq4ech#8`c8!d6_+xPrI^p^A0GkJwUa?Yk2vH8Vf-A9&`6z&CT}oS8E-XU;u$ zYbd4j8atXUC7T~ww0-YrTV594fBj9|bODW)_AD=vD%F`?+|9~nCG|NkER^w9!G3n1a_ysCdHU{Uj6{j$ zu%KTQrw^5q6r!K5i`z^2K7^WkRHurpebk+fW(6!&gyY)mR~}6F%-y{;gK|cNbt>`k zJc(nc{=dYGxEYekl^@f_l}^&?S*q1=WgicR_qmCOKO~z+u9c6M`lMQ^B=NoTMGf9>-1+_&dKwaw${P#f^LN%WbQktp&3ES=W><#x5Q@u6y_ig`tCpK| znGq^tjWZ?8b)4EunwI1maacn@In~}qc~_E6?%G!s8qo18aWp7dKJlPeQ|VMY7l>$b z-S^vg!)foXS>tA_J|x#4ZIf?tddbkOZqN4;#9fc(M;6N(gR38rSzP9@^*M{(RR?K{ zcn<7~`UQ?qy?RTaf>5Fr0n(ay8)r9pAw^}tYT#1TD z`30*J?YmWLQjS%B7aBrL+mpn!B2-N&^{bvFnB`0j+TQqcN*U^Xhip|J?y^sr^(&#f zo$2V;#`YweZxXMwo)$@vau*97CVb_}W}tEKxb#FGtBMfV{Hcnh_`&82=P4CMs@wQa zxu%(-Z5+;tCz?@Vzt6+R zf+5{hRdRU9;g6*=4vgDSMI6f45wW?EOK6j7`n+e7$aag0Yx9HP0xvO=6aq0SjSyTK zn6Bl2($Z##e+>0Irh>*1^u>WI%R7C2_6VQ9=*+YCZY*)57ajUiC!_(*NmU*YGaHpp_Er_mG#m^4?OzxL@%&R5% z?eD?G?U{!72i7FF8QP+`umdj4s8|p^{GdOE6+GCb9?rUSE!({?^N&@lYj|GMnWL8< z&U_GlPJ29jJeJq3Co29mQ8iIto1eTz|G;dTlNsV?9<|Fwz1(SpeEsK^ z3e-`Ry>9t~C!|4|hUsqbgb;^#7;#ih$v4@}X?M?;3rC9I`{9)WX6nPQkLm3~+6$lb zPMzvcFV`(pTJ~M+zv!D8wxc}CG3lw={kv<5m<_SrT;}O{E;pK*Gf_t+Me^711%o6y zVB~1cUSUHKX>?uQ1dnaFv<8DPp`%^b#)G#PZr zFmc3jgK6zGK!60U)-0dNB}a=N!y!6!;@-{WH_!g@zW0Mz4xi_<+ttcUQBpU(;mWRw zR+Ar+W$nAlFKZ*Mm+x{tv3tj52z7=Rs`iPKmx0}%~}{zHQ@L>eTZ zJYdZ@lX}C8!tQm^^7ZcbPriISr0}WrPTjcFm&W1o=yRQSoy)&oca@r7A}yMgH!^R8 z{A0RhKW?Qi^kKkE0B^ij?0?lvw>{%O&K{b>@fX<9ld%d%&tyCj=sOTV{4 zH<#?@U~~Q_g^07M=1STGTPrrJfo>&kdkA$nIButPF2!3X>6;O$UEeJ4JIxKW=yFk{ zOkdyD%%#z9vxNf<^ftu}UQMb)jO%jf-y+;PsM?k=IeR5fpHOG6t}JrWdp>Rv_Usqy z?@Io|?h7#Mu(n89UN?Jz)i_Df^Kz+@qp!W~=QP4PUZUALMt|6Ox=wZ>EGEj5B)UJF zyD2#Bq)e+%amZLq7uc3{hs3K@L2i>n>(Bg19}-Gh0_tzk3PivB`R9HoSG9aw;KE0N zjFE+n*2Ga6!-=4uY2Ib2l1Kv@ToX#ZW?AKMNlJ+#N*p~veuwLxDpw`z;B={7q{7Rd zWSffS`GF2>>#M^F{<9d0TcU*Qb*dzW;{N#2z0R{0DX~gydzr|uZY;=r;7o7iQg63obJl)pey(Spu4qe@ z{8WacBJn28HNT*TG(5ytrMSb^_#Ku*jXBYx;mT-Ft(NcUq}Umrv8<0a7RC4AyGYB( za|-37vTklmlc#Hk&(_2t2lKV;F5%KSiE|xklI(%q0fU9qHP5QGDe3~dX-tADcG=3? zN>0PVE9P`g9Qy#5V@}#b%l+Mad$=&be#|d9H=05)d-eGX)f(mR49UY&P5d|#;BPIs zL>$i}5Ctv*p$icE6m`06A^iL`n<@$=S`AD5qVy6S>xg5qeR=z6a1>4^t*fWhnhsy5mzZW zQGR0CK||CJgVzcw^kKoUr94(APNhUL;W#H)x0#Q02d)9nJ&)$t>_|wXhXp%HZG5kJ zKPdXx=OE|Yz1ET{7OMjG*L_et^igblZFg&lmc!WiT+n>aU*lOvv2;;|oQ z_Y6U@jBE(T>4;N?zLJMz_xQXI;Ij?0Zmae-*|vwwP|*6xhaDEbOamL%7Rr!2mb#Q{xvcSnqwof9r^(}{JjSD*>E-~uZ991BjwTUYI6XP{;|gW z0U5vw>g(;W7!XhZkeZa&LH05!PoV-3V^Ush1;9$AJbHYCknK#i0~-L`;V~N5Hwd)_ zVA!NQ7ap|GM1GMS01r|9@DC`mN50?eUkSP1;f+3?Hvkfo{nZ=*kny`leH35p{&dJs ztl#WUpA7&KM;MR4FBAY|9uOll!qM%hpViI5${WP79>-&lnb78c$>Rfn)K`tHiv(a6 z!l-=4e5`yHjyX8yLbiq1+$c}5003m%xsgE(07!eak%h6)ekS@r99AC%$8;PsAWy<; zXq3lD0swiR8(F*x0AxLABhyy{@DCGxA`w=f7{?ME=R(dmc^>F#So!L7?D~e+mGSH!|vze1_GRi(@H{iy$NGcp3FE zz5oDON65&cJh&pC2{WVs25xWkCCae+L^u}XSOOVYPsAu6C;(_8ykT_#)_#+PSoxp` z%M={bA%AQlU%CVPe1(=_?Kxf!0FnnV9uKb)y`JdvFbM}RA|IoDK{b{sIHp5hWTIcP z8}$dMf6{z~>PO}0)?npHaa@GsO3283bH?M<*P-@8<+JLs=R3F$yLBUoh(9oCE;rr)}iHQ`qZQ`91b|(EWhbH;7|Bj>jO!nCKI9VdaA!)Sl@12z#;e z6LBoUu^6(c{gkJ%&sXAE?DN%f4%Lt96P?HE6XRHd<6Ou{JDky8MHjL12QQ)b1A6@` zuV9Zya1AYw>aQ8V>Q~~p1;;ALNIvT?{X;01cfxH2?qr literal 0 HcmV?d00001 diff --git a/test-integration/resources/samples/sample.wav b/test-integration/resources/samples/sample.wav new file mode 100644 index 0000000000000000000000000000000000000000..4e7a87d575eb1f250421370c3dc7a1d5ac42b72a GIT binary patch literal 186992 zcmeFaO|mW7lBD%AYXUh0rh*8R2wfULw?s-1I`nD~42BNVVJ>9yG`{$rnk`?x&p9_D zvS{EbvD}vZsH)lWz0W>B@8?2{`>#+fB!H4&At@=t&J=fC~S-~RJ|`Y-?KU;eLu{(EFz|MqYH^!F`mYI6P4-}kP@ znvvMuOWls8u4r!=WsUXeLgD66>tsp>I97Z@ZOrak+s@;YqZL1~Hv0D}IUjOm7l&Ba z>Ptql8*3j{2NPQ>*<7v5{$7ztE3(V==DBO9hILn}jJi)Je#R!|%@+9&@{d^H4P+d)W8-jABCH~DyD z-7l4&)&KhY)BVqXNBFmY%PP~vYzHTL^;?I+pgp?;=Z2>K)`UqftZ->hrEt#*RH)@| ze}DJ>*Q2w0eUNUKUOQl4wPVcH1jnDx)NIgOOJl|h$J-Q>;eVqmGsOs8R<`x!5bS>L&% z>84Q*P>LSTSrt3EUC)de3)(~$Nfz#1jTap>-p7(hhM1e%D0!(Y^0uhozV1Yi=b34A zbH^LiUwg~*GmCCqr><##!c=*3wvFmfwKF#PVxwth{8ctO=M3aVhh33}3NyAQo-m)7 zw{uI)?U~g3xo$J=UHRc4YG>?rH^%0~XV)A5kMCgr<2Zi?g1rapd~eWmd#3*k?yoVN z)K-bsudDxP2JG)o;(k|Z-h6iK;IkH)lGRs5c61)=``3x^)KjfN{S}Vyt08kT)~>R? zYNMtdm~r<8d!ogrB0t0M^QWI$#Sn8>XJ>UXMDBd1_o?t%4aRR!-&)!U+|@aC#kP|- zjay6R5D%Zm{frIANePxHH>Rdv>s&>scd1e9t;OyLwLFn)$qUs(No(#F|?sx*$0Jnc8G_MifL z+WUNGwK;+~FE!o0GxL*OmMY%)cb??5YkR0yG_y|iaJ;k2N**gL+PikfJv<@;l_j`RNjqiF(f1NyT%!@HeWZPHMn!Y$8=#;?$k2w|P_N+D?Mu z-vgd#s^TZgsfBav=}yJ>=c9SXn@?;%6LuAaiO;n$u%>e70$L(felku?;Hzy$YCC~) zOlDP;FO{uf`t^V-7CZ6S-PWKqi!N_@Kk?anYQ#n@6VoQI9l`#-`gJ8J^r+_TP_dbOBt&)z5H z>9OL|9mStkCxvk-tpO>bKg{k2V#GoGk5=#jZ}IpX_A~$DHcZzN5Zr z+s{{PpM34FSzlXIU(e~BkSgwY?YSDB`pWb~-?-0sYNMe{)0TCk+;*x;>?a7;o%}L$ zdOk-pduNb0*Q&G%ZJ*ZGeBauflk58!e?{hBqhzAabDnliCV8&!-OZ}lvr0Sjoq6K= zO!PTW+pZ92*4@ucuN4~y6~@vNeDb?Tt8DG*Ga7kfyie>FLH8~4<~uu09^JTBt^NIk zrQHe4>oqq07j8jz*PF3yq#B6rBZ+XqQqoSJ1 z*fKnAJlhXCzD_-R`@>EimNT-;>TX7?>Nex z-wr;h`iy+)D`t9(>b>%_zWo!wUGs@=&JfMwTQxH}TutEOl4onGLjqu90H6g2}T5!!cWmzcWV@b3Oy z1*a=aU3*G*EWGM&U3Jn)*W2Wh-HfNr?E0LAb>>%vIm`wXpS4hXUr#0ZUbjDazjflg z#EZ)BTwzk@?Co9)>g?{c&!4c*PM*4N9w#^zaK6*??_uv5_8F7AXRc@7clC^HJGl0& zo!WD9yXt$pjbjHv*4`)JlYoxzar|o5oR4~fHSH(%u6o9Q?%BP9uLfdso%o$@RVVlM z_o_ZCH{?|Ob=R%G@3A?HWNXvkoQU|lhv~InU&PuuuU@4=A4R}P)1G6jMi8p6e|E%*# znE36oHPf29oD1>+!wUbv>^xm~dFm#n`qTG3=*AoGUNHKSG=A4t7HL;_H--u}A`Dzsx=1h%A zJo|p4|3>>*`q~NR{;QdIiccx(Q7vnBJGcD?feX#QZ~k%9+o?>>;zZ|ndV1o}LHhtx z0h8aSa8|S~6=Yi@hJN-lDk71|Jncly#Q$7H2zsLKC-;t-)B8;sSgs(DcPeUZ&Zp=< zv*^$ouxBqu{_Oka{e;d;K4m;(&XLHRSUq&nGmbvwJ9u^P49p!cV#hVy?Gt zQwqY4Eo+Ux9&HZ-QcC#j2+YaXWaK|Bz?xy4obf5Q=Bej!5ESTJVb)Swn=o7`vRtVhA*!SmHh#fcm*%Fgb;(%ZB8 ziusH?Q5Bu>|9}5qcLMudJgsP&_D?i^zYcDg&Sw<``-zRu8Weq>i~LXPuVKyksSTu! zH}j$*dozq>?;KF->yn+5ayRdvxXCkPR&D$1jGdpIJzxi+?=bPvk6n>%SMbdY6_^o( z=d30tQS$aG*7WYm8PT2@r+q`T?)^SdRJ(glMkf>&`^Wa&LE7t?U4|%<2X*jZ*E9F; zwo2YJ&PbIdvU}8Hr)Moa>J8G*u2!77H}W0zmQ%!8Gts9_zh>U>jCo$&|HOjxrY)TH zV|DM7apStHollZB99=!l`Shwn?ukBa@}_5^V5@rachWMXCo-_kjG1@qAD>xthfhVb z%Dm~@y(DAywKKoFn+VgU{^|LIYqrXA&&1kaGMr(&+H~f+&)W)eyTX$7cBv&XPnmhi zsj4DQrlKd$9-49E)YsbPqi1sVx2p5syyAbqm4D$D-C=(I_BBkf$T|Df$Ngk};`%T8 zqPFUtTRgc$VuyFG_|J7Ji!Iuj_t)(w>$J}q{&fmIA$K0NlJDH&?Ma}2ug&Q56@)(N z**SSxz%Mcx(>u|oz2^p=sJ{{YwoH#oh{Cb;m?3|0zH6mY&Z)LGuVU9^Q!_cSPtNU? zWoAvExWwTwcjoCsVfFY5tp|**J`q;(w1{1A81NdC^V5CiPWw~MUlUV%J9oD6Fa@6+ z6yX1^8neUW)F#8UgQ*_uYOp#OJYUUlg2~oSG?xh2RRPXEf3trp{Khi5ru~i5OUg!Y zZkNPwxjI*Sjz@b=Q`_00gG{KVU5_%zch~!;$;)|rB0L4_#m}Cuc6GZV0|hhN&eR4n z-kXBkq~xAz#4G+(P#xyUoBf+@?)UDh`Cj(UQUMsQbU>_=ofCh5cMnEu-t)GOw_VY0 zvq$e)t8Oc%9&KYHIENGKtNpAiuT}A!Pitb|ecqBcF~mLZbaC%xdp#Kt8jE#T)xRe; zLyWEMUhPc8pWU3XXquR@t=rt>CHllm?2ZK9TsJCuek&deXgH=lQod(o8}l5E;r z+mqtnW%9~{{j7cW%nr5ZT&DewvLkP&_?3U7d}oKcy`~FQ+tCe+*gl!m;VH(hmCNen z)!whq+hjRP7|F7X>WW8|FsKXUG10j=wXLl_@=Eb)xot0N$wuwynoq z?sH1h?itMNX~S~PYHL?nXI1UQs1L4qlY{K(!JhtLi}F05c*^-^I|u8_xIKHa!L{<# zzd1RDy_x|7b8{6HhN}6FH8qNZx-!Lo&cZ3izm@LnqR>G!$ypCd@w@VU68Uy-$Ebm6 zD#Mc%L{}7+WvZI?)@HTyXf%=Vw)eZj+jOXOtyVPBJzl$n*Pis2Q4G~ox4p%qP5oqx z$9Hj~8@=N0C!#ppua2rweO05jdvnQjLVGG?H)b_`unW%ATP`;&(Fdp@ztS6g*>CTk*2YT7gBv~LW- zsQ;|!UL|^3BRd}Ajhg@6`$h{+U)5-MTV=4H?6s>+kJqOiDXpigtznhGoT9YLZvXX6t3T zc2uu*?_a_BnrGfkqtmdPXO8Sdz-rb_t$dB`Cok2+ic=lKE2l{Iu9-cllRKD=Z|{@i?um9Tx^S2K^t6L#w`Z=;Q~c?s8euC|GTtsu z&}eFcwI@XsFW7REclMCzyk>{f|Fq}X)UGBq7z5!stLFKX#4~kF`>ErT2b|(2S3c_Y zOh02a`mXP(mD6VKL4c8|pLQ9vg7>pa1;w^wIVa|{eNw_lwahbX+QvbqM{Q!su4kfR zJ4y1Q^gJ`FXWl$R@o%c^XV&ID55N4PJ#}v8XFtr<8T{&fD&L6ke}&sDI!eALK5e^+ zuQl0uQNO34btpDEbjIr_e3*eSDZVr?MIw5>$$h?8JQlH+j(No{@Zi;+nE>> z_s_Lq1#{ZJ!lK$+$HAlfcjWK#%kz$8u>ga_d)qR2{7E{nuMKYiLpP%P~ zdixwyMtSAv{hgah+flTnYOeMphB`sVYiu)u0>kEUT23ML;)+O2#LaNeee$LHJ(r2j z4E5NvlTgLHH+LdnH?}#%-QFrZ>)!IvLH5-2*$$egQO(pi^&*>Lh1J0@_NIJhfVlDT zbp_M?&PB5s`#G@U&%cLfb57=IH}B6^@oR`vdk{D!tglaVKBLx%A=2$x5ZQU`=>;j* z_BuzrXUzSqE5dJZ>uVsY;s^JpQp`Cc^FXx6jnD2o>+Gekk5o=oBB_VH^Dz2X-uJYo z(rNFfL48rJT`P4r)O4}?Y+s_tN#r~cRV11Uvh~UtFUmv%J>LD5b7#SMU*B|_{Yee_ zsx{vu@>94tbrrLj&wg8Pe>@>s?Fb~0(LvQjE3aK88VvV68$4Sd_271v`>WpM1}&MH zzfbjiFWcGfk{@OBl>r7yt7>*lP1LEAvla(5IhsX3-(68qh3Guhf#wXeo9e9LlY>v4 z&(Tzp%v{c+?D&l{X)^7wx$=SIbUvY;eAP%#cHYi zvFr`t^rDfOp ztohWIY%4nnUvHm2r@)iisqAeJOEPOQo9yYHeZ6Xhi4_D->X~bN)>sLi{q`)L-Fg~! zw$Yr^j55QWhZZBzs&4a$&6!PA&k7KWQfv`-cN5K5v0o#du9!ubmQl2bK6%?i>Z{MD~9F3DTHCqe0X0rPutG$IaTw-BO&B;^`QI)CDy_iJ8>`x#tRRy{VhZ8@X9$^({xuiK(2t@=Tnb)bnigq<+?b zcPgJV*mjx4!SlwgU!G6*iG9nP@!&F(c$vNPG7m3EJ}2y~ZXG%|D>!yA(Xn@S&uCWE zM(2rHuL@h?nc)%t$xRpbX%$mx)f0EdQav+1#lF%*kMJkAJ;D(Wn!A?ooa!Int0(NJ zqFazp4R+V;UH?f>us&Ty`fe5#=(ZZgpAgz*vOEDQHr6K;>d2@)+3S_%6Q25$qdn1D z>l~-n^O+&W6O~H4)L*neY6ZFMvFF#G`B|g$n0>u@tNo8E-1W~Vc*p0?bBM2XGvk~r z70zR4p1X;D#`fM5-`+ka_}{XKs>$=>)Oa4c+Na%uc_Q28?ta&n?^J!;^Av<9|9v%? z@^8*JJvT;tu(>*uXzxs7e@E3j%PkT_FWBtc?#Y;W=AU;@3j`~+YQ5CT!EVP+^hC|a zCV$Sz4D(Km+g{b8CC5pS{~a_{w4xX)*AvERS9SZ6v$Z0Br*`7R_L{c7+gxuW*@6!oAZ%uZ1 z&ZAoCwRtzK?fO$)FoMSS@_t8;vVN`QNp%g|=AKHw7gI4OwCwa7}K5=VBwh)(%#)azXm)#ozt8RIFs4Q;ww+~Q&mr$ zOgee$BYI}*eY>AiogCKK$CLSuZ9lj9y1`U3t^J(R=|qNg&I|snLT${dD|J>(bhQ?z z@8`r&5xW+;!`4@8c60vOb6Ll(IN4jVW2e_VvhFKAij%wjnm;pwsCv+&iww^NjG0%Y z=MzqsVt|AKtNz%%h;XPrx}TmiY8T1WHpl6TGH27Nyz|r7SzRxT*@HpkxjrYTLgz@v zu535x-rdZ8w?eanHZfG$eyd{UfhJ~8L5=m?>Ya%wvnRWqK2+6HmiVXu^F)5ezMltQ zG>Tf!oSzz;23d20c$Q=V(q*e>zVOu z`>C=gh%RI3vM+diLS&tt7_$PLiDuQO`$SBhuY-vmn>;x_&G4NK%)}>}Cqf^Ifj;{R zf4%wqNM3OK4LjQM^?PRb6=M(Rn|QNp)Rn6->bj~=JSrQn1+!0An9u&*2h+dKnpxV# ze9jOIGpwLbepBwO_NN@?ZyovVnyKy_bN5~TR^V}+Gi@b0JV)ow%`M#M#ZcE!zZc0KLHzH@b&;@b1Ekc0JF53UjMg1y|N$eD5r++)7UEpgO@KNS|?iTtef1c{`g z@0}ZIE6<$wV8|+Z7*#4(B>|8tL!;G?PjAT zv0uHWc1~k^I(HZnRa-qjWtRgaPZI3=%G2u%!gpfCCsOTL&&%3GrtKb_$!X8GiEo6S z&YibN)yw4lokcR9Kf_Sli8}FSY@a5oSm{}N*3?c2}RFwNKs zCdWj#r|HAqk?_N(7Uqtwc?SA}5)HZ3gzZW*nf zqN>AwTVW%rlI*ZswfDO_&x`D6P_Y^&%X2nm`L4C`QiVsA&MuKtYkdFym&#y9pDNUT zpBk0U_|r2c-tB&#ia7CiS}O24QrXP7b#P;R@AyPdwb^?zCoX#Qe$F-Pd6$bwP|m9v z?~Ie(j>I7bGBG<8d1hFZJ2lgDvp34jc(1p{*UGHIzSUCYO2%A8E4rON@xS&2StRG? zd#BZj-;^4E-bGAg+Rx0-p4L`_Cy(cRE%{CuzZq3ul<3MUQvN*$ysbCOS1bEnZO%DG zvbLJ1>S&yNQ>no5f6Kp7!l7VzfQy8Q;`>%h-IW_b`X75tM!ilU&mYh;b+Qk>+U7__v%E*eIlJT z)!Br=E!R#86q{-$%8pROL!#(PPPh-L=`1ZB~;}jKt38UVLJ^ znzIPX#K?YMli#^dow18d?d;R&=_At>6n5G_sUSCNdcM8e<7aJlxbk1QY85G{yGJz= znQJ4cIAhN69i1*xm-DQ?ctpofru`MTy!fcY+I3DOv1yxo`nRe?LC4B!Mm@i7 z`7Y8KeC_cpk~!_D;6#|E{eDmHoK0U(V7iJ_-ZDl>fBrQ6sixBUc%IihPqiltWg>J^ z<#=M@kA-({6v#sm_U|kE%T@`blK=F{@#op4h1~a&|B~ zo%Y0l4+L^1KYCP}IQjjH5@!nL^Hk(DPJI=KI2FJ{XMK&bucEsuys-A)NJB5DB|^4{Lsw&8i+a%v3}6XJ4mp{{4>Awgyx%u(KLPZ_jFKNsaxWhAI(r zueR)-x*DIaoSUNC!S!S8oX^M_I?$q$a7w0Jb9?J zzBL6HIwvvhuaQo66z{s3V<(()^7PR8^nk+5vESA=hWNv< z&ux1=vG4R?hlGBY#Q-qZd1L{(KLPfSLT8|Q51{@va){3A$m{3?cB@kG4MOTA`K zR_)xGn%1levK*a$yz!&HD;fAF{-15D3Eb-A71C#B^0vq6-L{>_TU6LUm6^;=;69Cw z{@kId_+-p^P92FhrdBbY=zqQkc5vq;-t0Lu)i^Wvxwor&nZNtVjPE<1WWMu>{quXc z=c^&R@bo0x5&UFWlbsl`y*yL*=bf35WnbbL+swDmoT#|Jg1=ILqGuNDQ}5F=qu;gZ zj%=SYcHpDLSvb`j`b6SYb!IU+xz6ahpV`JXhh9&;QETgIF4~N=GoR$5wf9U0Ojpi5 zs7@`O$r8IWOr5oxDag$;R=&o_0~MymvM>Hrh22qAV&Z+RqZw7?6RKz8ZyPSx z#-6W{IlKMJu$%eBSJmBu$(Z~_2)}1lule4oWA~h>ip4P_+&h+xPrWym%E`L5f$TiM zl!-dm;M}egft<;IK1Vl{(-*~DYTq8C-c{lL`}e8TNy%B1ve$RB)G-k}De}$84({Bw z_UXtF1fPjk5&f<*vEJ^*+1jU~sXaLEsdc57uE_(F3=~XzY9g~ax4!$F&dNW_wyWT& zd}6;TpLIS-)^!?cH{?tSv^giphrwp@t=WuHHJd4k)W~C-}v+=VmH1@@+n}JsL{Jq(k z3(vXc>FRg)>0ivyuFFvOxNOcSO1t-EumHS5Z29nT6ZS@~Ix z&sCo&811c{PfxL`o`1(P=c{J3tYn{^mgtky=f@oH@%PDB{cUnEfPL!e-Z?V?rwF?% zIZ@C$anHZsHOp>$XCmDPjmufh7*T6v16|FDmJeG*JIOu~kv7NsZfh#`X=NXEa}_n( za>-w<_&={yyTUOm>iZ8<^VOWpsmUk^>YaGC zoelix?_8!eYh<%$_Pi_hTu{x5*Zg)qJ!oM{s4l0L-Auic!MxrR6)iUSRZy$gRG??p z&OZA$@KZ~8r=B8huPT@@x}4n9QM6eBRKxzj?o+#$?TIAoF?pNAsmdX4^m{8&>pZH9R&d79r z$)9!^%nMF=CIjBxp>aEAfA+;!?)@n}x>2|-@pH20XCyn?z20{8WgouFRqcIhPE$px zw??fuzL>~>j;ruiP3-x*JDtM6DUWmZoWGI=I*--&<{F5&(IKI%}My zT{X)ync1_?GCWn%+w|Aov7pQJoN)M>G41)RN6CpFpUOAm&c0VBCs$F~?-l&LmWxwO zMLV!wWke?n^)qjJoPhDkhHqzg239m{dwy;AWSgF_?i%`gFu{=KGyG ze)wHGdC_)dux=N1w@7?dqo#UP(Aw=$893_m9WW}%2(ns>Mb)#8r&`Ep2hK)+ zs$%c;IrHCAj)gj$6K_`^Mc3_|s|v4)e|Oqh;?9fQ%+=GJGgjxBO_iOy1OLfl{JfWQ z_Z>D=ROhEDsS^Cje=0mDv~!)1-nXf2Rl!WfP4V5E{#sF+9$jx4>Cm&-U89{^y2Qix zf2nh(cb&nTR(mR$Q$MLi(dcX4ZNhWekDEQx5RdfU|De`36Q&I(YI@62+~b!OtN4)!Wz&a*C& zT*aLpe%gp9wVCPp^CO;O^w>R^*0F=ZH8HbQz%Nbi5kkSGY~ z&YnvhryosOQ^yL%$?QIOa-a&&)9)sQSYpb_etNBRV(vku zqq8q!Vxl9M<>Zv(d(T4k??wN($*2x>k$~6atxJBR&PN3(R3~0*jFlyp_-Y|qMR#QC zM5ZR|)6Mh9+fs;3*L#$vvyli`KHD>OfBZx^;CjwhSgD4HF!}QFWFUZ zWO^n?{Syf_jcLi7y*Ax^R#{bK7fX?_g zPQ;l0-1m&)Ij_m@Igm4JnV%dlm1 z&pAK)Eao%T?qqn*SB;*bDCaEpe$OB^c;3~#M`Toq`^~ZWlVeZjbBCwvTh@Gc0h>&p zFcF&P?940QeRe&&WLot+)Al*Jzq0*aAlO^kc@{7ykLyHEJP7fV>-Qcg<1Jk@j9c)GqI*V za;*^a)G#Za9Zk+X$&KR^pm)}x+6*|N3g)>wC8}p%Pa7sPbI)bZ?4}C&h*0fp@G(=7 z^xf{{xVD4x%iNg!dd#pUb0KzPoW5kCHTUA^1xMU-B7I*1gDz5gzhK)uVd(6p>XU6^ zP9*(mWj`~tx5{$WdduhpK&R8)??j z8o<-F&k*b<5;|F{PfWOpPD~W_q;@R%@qB&3W8Oq@7EjeaWzA?^V%4rbdxq!qqBLHS zJ8zZc{;8w4K2XmYh_1qk{n>t-fqk_DPrDuL*}!vCI~7nfJ>oipCqlCEy87v)^A=?z zvlBTvAWe&$`vk*h1$k8B1(lk?B#ld$B!{mJB=yZyBXb>yD7)y@ci*I4^P zLG@aRXXj=IcUPu@U)w5X;;z+t$hV5@Pb)pn^?TX!O+8MNSTrP>s}o`WzLwqo#n?4) zy{$0rin#;xh7AAAt!)*Z-PdOS%=*c+lH2RnMWfp~Pl#@JUsS-cnKo8-JHC}9R?oIR z)je786yYu7lYgq=6^#b%pkoJx?5T3v_JyMP41y6)@kEVx+M;|?y<=c*AG@16^L8&= zR}}SqGm4_H9hr^iIUzZ!ES8s5c4}-Ya#GZ!;#9+eo@Tt>0nv2=X`e9+&#ylq0N0~mp=B?&NEJi_(9RO>+H9>IdigLx7Md7-hGJ~ zZ!xnIvv~1>Sbb;xnJrGxe0pGNC9!xvUnr`sJ=;_lGe|q%J&|`dbS5ik^W5W^oXN?> zd2IG(%G)l*pqj4h1I^Wr&ONp5(D>FUH`&De9ax`2eoED!Ae|UfXS>z1(`bpE|H1(` z-nS`&5qzcqmWX=c&q|l<=^gK^hF5lbL76eVAc?zYcTv}T(nx-=PpV>2do^G(6 z9Xy={duAdY$`fG%wNP)r&2L65u6tCSTfxpveLS+aM&$XY$Dypg7J*c7?o}txDKyTj#mL{&;lXXR}8m9VAkVz90DVToGdBbS6m|KDI zczIttPm>J!c6HA&{`10TPpE%GD?a^j>hCKmQ&n6wz;UWM_o;+65m3&Yb3e0E3wyHW zTtu77+MhM`IK{7YZ}y&(D$(Gs?7^?TyZw0<)_`3sx#BsmnZ>Mq_p35y@mx==KYKs5 zfqn0w-c~pZVslkx&oQ~4w^5MX-S3@{aai4XFOz3%1YPd#cRL}9u30zjC&GL6MxvKn zJ+GR{{>=L1c|-nG^J_7lUu!4t(~f7qqW7dkdEWQDC-O5l9+-?ht9>T!&yIEH9h}>1 z($2njzQsK|*-D!?t(i0Jc3l<0mjjJK(gP~l*k?@d{SFSe^CYz=^41i*>ABfOpA&E8 zT~m;Hp{@HrYE_fdw$~tQqoF;?iicgJvnqBuYWKZzX7}qHeKrOLOvQUDJoD`8rg-W$ z?tS9mi^ofQ_D?LH_v_3DN3{34&ymlZZ?$Nlw&&9K>C7H~5VrE~DNdH!KvRoe_ql%$ zb5>9zR`tT`=gIeHDp=`|r!2dvm}pimXT%P*RI2<_hOxK0twGLtr_YHKJKnkOZpjV` zdE%+qsmm@pdGU(y&N2CeE5`1$I?>{)qTcC~{j}BE%7{xet%V1U8d6m3vpt2w9D({(J-I4soI%* z=MIP5FtK}of}`T5P(ET}<~~`>dcTWK#$?jt8N6Za_|$W&nDO)$ekS2O)R23hFj!`F zWAMz_wBJbkYaMKq{-e!_6(h9f6mPM;gRoHF))eeTy%V?G!2bl^bo zm|}{uaSLwvLH+>ty#Zvtxtx)IB|@WBT|-DR%R#;W-

Pr8%`?t#Ej>{=<;r~`7)Q5rni+HQPYtPvx4+3qZ8eA+ zUaC7y_lZ5P;BajOw)W!gx-o{Z((3&Dz*iGbf~LcqeqjN$y1Zt>EuV5o?oc#_g_Nx;%St1xn`Leo(XH#+rY(cGa0PQ97q& zP1Wr06A=-O>~`($cxH&Giqxrs*qeGQK4*D0pq#4wbkOc58`*X@@4M3(Iqj-6GHa`y zJY!RZb;-?Sh}CMmXw$cCW}7vP=L-M1HV-T?VuMky6O)Aq>%FI$@n)kZQLUe1?Niv* zJB9`_o_X6t?ySe|eAG)&Jj4y)%8J=6ZKzS+6mTKk-sk@*bOw=LA~mFEr4 zuAHvt#%XSDkn3x$J?|=?pwwwoz4Nx>bBA`laJrK>`&0SsdH%0!PbFf#-6zNS{O+3F zm3qkO)OHQKQ&Y9umuPaB@qU&;K3S?JABr9SBLvQ@BR~Hb3Li3z~*`JNkg64*-iTy#q-q~3>o?? z)H_cnSf1Hrf9m*(^&SVCSa?0-sUh~%Fk_;shgiI=uv@v>snu`yROFf!rm`cTbe`BIle; zlx)SR*p7mcHX!$$ij_=t+$IS+InR~qlkLgVXIHgb{}cJ?p$C*xeRf5S3{w>|#FMOA zlP6v-<4#0w{mIg9RlL!s2m8JzH<$gen=29HV4|n0KtPEZ@!^?hddO;y{wTq&r=3is z+SL|IZN%$wCS;%fWS5uPjV120zS*DVIJ2?Ci8pi#I~Xwc$|Q7?`IzVyVsh17a0{)&UI&JM<#coPY?dv ze2V~!rf=>o5Dte*akSIP7FBD3GY<{9I+9^^jPpiSM(=ed&i##l{EqN`mcqfgJY z`n=at6Ut82dc!hfs8Ays_Uz8==bk=YH-56=?r)Nk;qRB28Y*P3&%b%#({X<9#OZKa z{2nT6_K5`{eD*UtQAc928><~=KZ)P+P}r5u(3||ZpFLSYrn}o61S05~ICPjO>bFJJ zTqoMZnK{2|S4$Ai&gVY%dFkuSV%f3JP^$1T-Fb36L5**QiQAldcecC9m3ehfhN{iy z&LqH=i|WL0HQ<_KB_}lV%O5X#PE}O*c_=FCHir7*Z6ulC-1UOwdOs(lxwi*&8$+c} zPWWY&zp>(ghT7(BuM9uC%SM&+5CiS-e9ACC_nAHYciXd@y?p9Zg|p5HHU`&IeP-8K zwTeJ|cR)q?vM*CP#4vXDyZz#+MqOtW`*M2v)o#Vf|E}AL@7?z_Qq!KDgnt2n2EVd> z`V3Kw)U>~8+pDumY-Sgu(`YVAi@ebiea6JG=V!)=FRGKElDcp_;}ZcJ*4T8P>dr2R zeW&l&=3tYLl{J^XVh8WM>hUC3nvLs#vCnrwPPMk(O4{<=;%GE)Yf1Tu~LY|p; z^Qn_3t7kBAPZcW14|-NL!E3KGk_z{+&5X^}$tN%Ijl2Jf=$u&gsnb8Je<%12vpLDP zYbP`rqi4U5QCnnj?S_5($lh5rH&#_-ms22zizSxmC`e(KbQL!04+f+R{(19-PGS-rtoUY;JRS;%oM<1z} zPsvkR6vfM>HC0%1_Vm?0+~BD@9Lxwd_M-XUjdc<)-FY ziE{F$vRQd@oqNA(oUa$O1SyvKXIJfYNBd6bIVaA0;)!M@iq$qJRDE(=Gxy+vk~KM8 zW_MOj*^J!J>77clhfgNn z*)xYH_}0Yo$({%$yZ_UPNpTXg5&vS?hszjTdASa?_ z_W3T!>o{IIOFpk*aVH9RbdDc8wVsdfo&VwY^JvUxJe5_e#axSOcH@bimwhpdo(+BP zJdMrhU!&iNw@Yb3=BnAViZL`k5I# zygTb;0v|6rRc)sD*&B;GDrJTRgcB#RYCJR9Guha=M94jrOd}CAR7reaUlZe|WFvfy zJ~5&(*R85Pty$@W+Z{-*sVTZMNff&t(C0Jb*I(-I`QpIWob2INHJ-^=+*2cH^=3b_ zi*4V|gv{BsSl+8=X4MM<*|!XI5TEw_^lmu3!V>AU&*wA9Ta!pcZYvmQ?phWQz}?FC zDU$b8K#eQv(t)$5n|=m_StW^ThoO~Im-gEo4%Xy=X!g{sPMF9vPaSVK>7u#t+RXsgL{He8dd0tZylQR$eTlYKTsRPUt zP4CPXJw9!Et}d0%x@n^(>#X!#%q)BJ_D?f>{iWjUa95X$r_xWpB7-oQiNs?!MKq7- z?4g~_O7n}b)vBUM(_?R~o_JFow%AT*_HH-DDrXhzbRxUXYVNGTFpH|z1~*rq7u45N1?25o z>*AH8)|`)sWSy%s>%3GJRx}h>D=0-011<9u_v=WsjY~DJ5r5hi3_Fu&|0IZbk!qRG z)UtBvM}=DSHcKSt-4oosCrgd~97C)!(1X~ylXG&+3~aIdDMn|k@@EYm=a!us{mBJ$ zjn`?)6I3h9r4_8iv)AGiPxkQ86FGY#d`!T&RLPaRaSBMM5Oa7Fe^PZM{j+t=uD=CdNlrr-=4OA{@efa`zh^Nh`HH{6>j^% z3%427R?CcC*Pq(?{_Nb&y^NcCp2a!a$;fn*(J571t>VS<68m8UM6$LAI{|IxXu~vX z_gT|>5vwXzP}JIc5E9`zp6^Stc4AoQ6Dypv52E(+8|^<9^5hafNOo3BgcE!2{{j4W zBYsx(xCaxK@Q{g>n0xZ@tFdQqU&->qR|K)A#;Ic0y=7O~X{prNhq*b`48JPW=LDi+ z*Udgqb;eseEqgP2?!yu+*s$C;LiEf5C*G-yKFU?JWE$-h^14fo7_)26mFRqrnc1xa zpY_?%WT~cF)QOh6CsP%h!JL^1@64Na5vwn8S!1_1XBh8!wE`81S5J20&>=I_PCOZ& z@Ql_Ef|}=7&=aQ`L=3)q%)+Ebllvz9!y?QAuOMNM?(>h$WFJ&@tr3O!c+2KF0T zB1MROR{#Q;pv=q}1^djz+gPphH0P95H>>qIKh*4uVoZOSp4E7Xm|dTq+}jg#@{Bg7 zx~Oao**@`1c`5?GeDq}}QxTX|)EX_%alRL*GC63RnEH%{7jATbY+Z00_bY?7!LnO% zn+?V}JNJ`KAKb2H$cjojO^y?bt&Z69GUrsKw&c#7_dRM_hjrUeEsX~`yUdfR?lVig zSJC&`iGk{9%4hEB4MzM$h+VGsn@n6}Oz3pUf!AHK&fJI7aoq-$iS8Q}sUSpvo|)Pv=93xS_>0zVg7%zxIbdx@ zvUfGuWW;`2@o+Upo~sjN0u#f^pWfd&?RP3N+i6vYo@A%8lcATrlI^-<)Ei5WvA=W1 zD7GSX8#&K)-%Dm5_+^QeEA?JrxkDejYOP8l(V(hZB@FbJcrCMU_pPLyc3VB20qACA z$6VvdrAoZ+)wBC3KDAlJu_O1*jVJ%jQ>ltFnXzN4oz>F@+qJs1V0PzSR`=mPG1@`0 z+CghRStrBBzpI*fp2zgP+0CuW&ZvDPPv+duu3Mdct*h7S#=z*SzB6q9cAk3>T75$f zVl%YyqBr(WFS@nL&fJSz%}xeS`=*1`ZNwsBS;sE@obN#S+{Vv16Ac=l3)S$Bf13^n zrwZBaFZRg<{n}V$lqT1?sI+^KRFQaMD5>|%VvmMrN1f)0m5Tk{)$=oiYLn|k z!nZq~+S*NZM?-Z`zgMGsCSO%ejHxeZv$mQz*DA9=XXE#qd`H>edr;v!m}=n{9jram zsGxRg#TKP%>>lmSiq$Oq8wRj1-PxHJkM_=> zo|u(nJQ?aavA(ZXCOLA?Rlk<^#^O0I=A!p4Bk?&Q@;j&Ooe;Je@oSgs#zWSxuI=`x z2vwCzaJo)U;yXJYu05TZmANpfWZv?UO{~+x({=Y}MdR<*tSq}v9LkpZ!zxr(6mpfHJf4XWQ)(q5Vy;sz`WOqwe5*)M3vcV7heTd znlY;z<7*vAcqfuI+&>}hneDpgZa>jC#hv2T6Ae{QrDw@BX1>n`Rp@tp%X_NTLj^na zfi^Q@@6)Y{t<)+i=I)a{yHDO!)#u?8!Wnxa$Z=+Fw$7jkcG#YS;mpA+dh2?sIJ7tr_Sa~%j#-Pbk^N6JU{0O-^K_|JU_W+z8us~ zMPDPL#JscCr^0ydc8Sjnywqz??BwrmRkh1GwboDX zoaH(H=r}PmhsL_qQ1_hjtnapG*4M-F?;D zj?ekj_O*X{eAREpTUX4$2skLm_uXz=DYuyCUCqUB#XgaZIbY?$aNbmlN=?@IC!RIU zpoYBIOnla$vHB)gW7HMrE|L0e$#MQ$S zBjPif$ee_k`saSyBE<*ST*b74n7Ox;nBSN8D-89U%Q?$e^s_6?a;IL; zo4+~gif3asXIer0>1BV^<@v*t{hY%)ZnJ!65%W2-&Qm=5+N?&;yV>!V*Q|JYIgO_p zxtd|s#-FcUGv=NCd>-sAd$l=%c(lng!|dQTBfDla7AseEYUR$Q$9?b3sqgz%)J=`M zqiQNkt6@zV9q=x%m{?V8i^b7S)PEx`QkrvDqPc^;g^J`dUGFgq=|JSC9AHJ^=6 zrj?=up*Fql^~NzXtQU#BtEbScPPfQJCxUgI4Lwfg*zFvQ*&(_3Pn>wmVJ+UdgJXK8 zO4#gZa`3#RZX?JE;;q6A>%zzHkF4Ro*FDSKd9`4Pyb<1Z>M;&ecH$(1PMGPm@l?U7 zOw@g!GcMoGdE4ztB+Cw}cWMWRSToRBFBqwt_*3VpN38g#-Mq~)`(&bK&g#jCy}O(G zteZ7rp7)u%&kyzXPaVpOabutdBUE&?b|THFeUK-LRos(b%N#4&*K6+Wo~*3|j~IQv z?`J8eC@8DG$*H30yW6VD6YTu=*?_f`gXL4Pk<|&ZIqEFmuF4J$Gu@vN@$dDWU3DjO zJ}K3t#*IZ~kZO_9%IvFj*BcR?zQ_qCsCH|X80@nnPyf7|BSvEVo40wEvnsZj=%529 zYHZfDPjosvpWVctai`kqlYQ^Y9~AT!55;GWeQcywldlq<4Oa1Bm>Thjtb)E~ zgPCa8TFI7^6G$xoomFMwWaa67P5?e*R1k;T$X0FMsdj7JS$@XU8)TT|xZSI-R$2CZ zKx87?PLr9zuzS&`u0;EHQhcJxGYb-m{lv_tWIizmrza#T-gcUdPS*ZaG+%$BdA@TW zR8h*Ql?W`cc*P~ZCqOr7WCe}NIjcm$&B|<0>)x6&%zsyaS#A^UYzrk%e6JD(sb%gfaItlrr0MJ3rXv2O*~ zFghh>Wu~+8&ZL~OxK4_m#D`xk?YG#}x$f%Jl~v5%<%|ZrWIL}uWkl7S?3t7L{VKIG zb!29(B^yZD)yl4_YsJqsalmzoW_Z6<8++ct6|1jUJ@zlZ2)pj=*xB&&JFwdAyOl^T z+1%r0Mx7~Y_p3i#=ee*aqLxg_-e4?;tW~kIt!q5BRJmG_{hpQjt&sPA_cXVr#*QT4zK#T-BEZFa zV&1{k*EqPM&sk!ZpTFp?HpV?DcUr*&K zrg~-%CmPI~Rfc$t7d001z(=-mHJg*n_*j#5Q);$($*u}{HV)pMcVl_-Sp(~>=C0E^ zD&{*_F;vBUu2kFM?09B<&#sc-L`giIk9N>v&r>-W%x%t@ao>ZR>2gx{tfzOM$M;z2 z3@q%oI?#7dPAm1=pYrHOjMO~4&|_})t(Z}5?^Lj};@Q*o?3z>2j7}D9x!S!Ro*Q=U zvevUAx#4?W^g@NU&xU_gf zpFE=6vhm&Kdn)6pOxK)1Dyx)d6eeuf$vU;Eiixr|7j~aLvD7eYV<)?x5yQ(POU+lS7TxmMaf+40F`RZXGvA^bC|8Nc`}usUf%fNo~+57iq4GowtInrC$zRx z1(j&EnfK|Qj#@Fh5si%7DtqfsCL%LF?M?#yH;#>%j6F@Kv~lqk|3rq*4#8v&Fa!-N zv0uA({i&~*c2Lhek?B3{v#UN!CjyygefG0c?7eP|#!}f>&*a9TFV(xQ7!%pqdy3XS z@4M<5pPr~y=TwOH7kC6bH!W4?785m+U)(Q zP_7jQDsZoPHY%T2094l|RGAFjx&Z+K5 z@h39g8;8DT2d~Vri6ygE?DKnGswSfLyl-?c`ui|C4QDlLO(k1P@R_<+lya4C_L!fo z+CysnS*y(E7F9GArn(rh^WR1ymr9WAVNQ~G@jyM5n6>ZpsgjAl^BS4xeV%vr-pyIS zWM7~rTZ=jHbNo3ee=Ez3s+Za)-)$OYi8U{#Fg@>fCvRUOCv)SIVVzHRy?Y)^kL>>Zvady-<5cZQZya{8pb1?l_IEmA zn7`9eWvcB+AA7yK&*Z~pwtHCp?3_N%-yg|kW~U2=`{eaXb}m`5cmm>wg>FT#1D+3m zW5xt#X6olfPCh8K=^5o`8+UIvvoGdB{15aDf!jE3g zo5`6&{Q3UT-m4dDvSRNJ?H~yAd~S%X3{on&;zwEbs{cLsxHTJYIxKeMkJ5i&f67S} zda$bJ-8v(wPe<^?_9`--sf3A~8CK>_Mr)V=UR2NQ+T^iU6B?UyTB5=_JKQ+dk#7}U zz(K7DRiDZko3_tG)t)_oJ-sSXarT_S%vC1}slg^|s)*fKZCJZ*weNZ0`JVSx-bQs+ zbmw}Wy4~3q8rczxeR}D6@{!S%*mEAu0Ha87erKI(lFvDOs^m<*%6P_iUA527Q#E_3 zeR~q9+(=K}KjN9wi5*6++0C?n4_|NAUV}e!hS6)<)n|0xH~*~DPKHkr&q7}(K_bs} zW+%_e_nN8ZJ2r}4!wdGilC41w`*ZIdWOr{_GhY5@_x)<9&ScL#XDXun$+{uW>hIdm za|oO0GS9o`8Q;?;Gk(>^1Kzo|*PB|9$iY6>XVqqHezn{Y$Fqs)w#3Zb(__Sw>zDQfO-+oX79w_aK7u`C^ED=J;6IwHRidZ%{(-yo*fz3 zt~0|)f<0>{cKpwbjW?0DcAxBK@Lt6%&h^Z$CUv6(eb4BAnyuMhx=AhUpqN|a-7~qa zeRnxeBWT3{`zPynYM(iH^xKy`z40gCoab}obGbX*Q+q>x^Or3+@VlbAs~K-tr((NL z{!RPIM_wn8Jvp&zt1murIpcPN>SR!N%L9iTwAukUMI(o`-px@hv#(isvnR&xA=yM> zENWDC2CZ1aV6MfFn zeAK$DLOoyIx1uw<3io*=kC++Yz&~|9?UN(>sry#ZE~k#?No~)K3Exd^vx!z!BC2YZ z6PTXw+2SXg&RO58>A9;T&m}>cc(bl{GJ1j6xpZbKt%s_! ze)67nDympkk=?)FXYDx|zaHb?r>*A6bYeAUsz%H7#Lh*1CshyeyMn|-Fz@Ce2Jh2; z_v{YO`f6(T^ga6sdNtP4i>LDv^~6BsA6sS5sj3tm`~1)8TlY2l`MfZ}$tM$7Rq-{p z6}QYMYCY%a$cg`krZ0Wdfm2FEWTG>Ny6u_l#Ot|Z&H8EI(D7wW=GWKm`H4OeidbvL z@Aky>sZQp!>DzOdv%O=UUeDz8pZl3NPt9r3*Qw0tiPrs|V*HbdyzOx+dy?Rg+10re z!FS^-_#>8+5CawNa^D`c?=B}wm2$EZ>!&tYPek~N){I!4+2`+u&)$khmzD+qzqwi8JR}-M?l^%%=ln=XG|NdbyjUhv@9e`6e>4 zsz;P$QP1QJiW%$Eq-|E{`54nxaXXm*eBI?HhIK$HeulE++-yeb;)sx z#Cc+~?!TT74jFQ!*4J5C;x)6;c=3~&-D$aRb+S^$U^U>2eQYA~On8b;LH|xI0+dg(8oQU+C^%kMSAe_kQwol}I#>w_C zVS~_DH&t*ZuNGCR$SyXgruO)pR${4^nWr#bQDbqTA?wsUQO*474kyZ3of;=1rcZP5 z&_vw*6Q^irMRVsV&_8Rjrxl#DA7)T4_p?r4v6*dhcv5|Gc`qct9n&w>d)~~dC)L>n z`>ASYdeU?Si}Q45a??AQ?agTXt^7JJ+SIG!-=Y3-n>lLCgvgJj_t|eE&w5o)75|_+ z3_HdhEUIz``?hBuJ5Fut(3!Ib1CCu&bS+McT2?!=-aQ=P&3tVUWlX*p)Ur;+@pP{> zr|+b#mEX!vLtgt&XY-`0Me96cIqZaey>qXPX3pN%0W+Pi165jO*C@ejj?WSOv?5mX zlTBv)zTWMO+&NEbGo}k(-*31mfjt8T!BYz$t-}8>fDh2PRS}) z@UX8pmXSFL&#cO8IipSryx@pYJ)%F)jc)CtwW*ksmF0DrAJf7LNXmG1Jh(!}W_vY9E(Xv<<1S?^5H!J+ao%3+6 za3srar$_b1+$X<`b9YvM-5Y(%uyO4#(LE1w;Z8U6nmTWFJP)&?ymQtwZ%&;`dM&e- zekz!?)#glua>q-CbG+A4-MTVP+{qQYSk7l=h_H z?9LS}dXrn;b_>RgTG6`-;+b|czHfcj{KRSBo}67IciPX|GftO3>GfGrk9_guik9=# z`E=A1y>(N>TQ}1;8SvK=evnXeL!H@Z0!4jx0z%i;%`=#`lNK+v+jbI(R9kkr#A0`5 zl%HH@y|dkYx`Wh=eO~oHExK`S2Ta`#f=5mew&ir=wck{$VPmU+Y<8aT$sWJ&Bx1|Z z{Tqf%>T`de^30lctKO~IOLWZ%)t$c6pR+w#RZk522XRizp6&cQF*Wv`X}_ACz23VbyX)ON@f)$jdhXWF+j#ei^#9cr z9Opy69nKlsZP1+eo+doAX4~+P_0+zjsy?+@N4%;*?b^JYVt<;MuUh@iJXwwHS=pm{ zPsVc3$n>JY8CBavG%8zaVvA`N`|M&FH|kx+y>DNwi*?gFE6b^Os#HagRNZG}t1Pcb zxr5(oYl_w^>gbONvEFOc)|`FjFoT(#`91Y~S`ynAo!E~PRM(T&OePbo)Tr8hy=8;> zoX&h&Wh;kz(Gx%QT6RMPGlAO`{-?h3&X@}1?cP4B9|o)6&KQMMF`Z5hOuJ1^U(JcJ z*J2Nk=W7@4t$Ci`WDV}bVQ%lw$?O4@@SuOL;^ITaUY%Dm$ezk3R{f&dRrXG8R-jXD zyUTdzw8&x#%@kE-LC1H`aWc+74D$3Rrqw84afyjjuK4YToURiEX8%2_@b?))Gq0I4 z6z68y`J6R*=PAr;boUjZ#XC`F5{xJjePYDcUlmN0x>oPWklh*>e6Ns$$wUjDpMa5lT&WJvx{vPiAwe`-R4rn%`?B^hhgRgQ;&RK-R%{%LCYn|v%}>3I}6`C z&_E?C^;NES<`kQ}{p_lNSn!xztl0LgS1uWzel?kq3NNi&PPx!jWHlxuUf*M~SL3Nm z#)%SN_V&?D)ET@4*H&%J~Ji4EjGt_2o)WMx9`nd5mD@gVzYWq)L?-{a?!Oj`Zn32uOtU5=s zx-yNOb<-1tDn{+82XC1~Mh{(ww^miuqRLuwt(abID$M}Bu~?1OuHPsgDm{&2+uQDC ze|6_8IW;F5vr8;|;yY3O)fdm(g+`(xu?t>2WtZ2yvWKgAyRTD+)heRS9hmN>I(>Ak z7MQ2bs)A{2OWn^h;4NQu{PotJ%_qK@$<$oa?LLD&<1@PV=eh3L!MdN-JjXl%u%aWV zTE+Oz*|aVgZqm{QiBR-dPd5Q&jKF ztUhuR+t*}GM7-E!i%})#2`4w#W^TUUDJBP%y~j5z;rHDS1$Jf?IaMxZ`LV>F`Qa*_ z++=o5PVmXRe8%(i~3$IBX3vpSh_%{*hxTm>e@N;%nXw?IcF95R_zn>M9iNUTQ?b-F}`@7Uju40yt$=>#pnmx$bpP0tvCj0qZg{xPz z+%w~am#IwEa!nkwbF#NijZ;%JyP8w5zwq$Y7)I_ifcJz>yDwMwI6@&a!zdYjD&Fr~+!60*@PMcHEV{Y!fJSnuC%qsMGqE0>R zzM6+w<c9FYi*zKVeiR4P`ywnyP6_G=KXMXoEWnZgNEVOC!uFvjPgYUMYt(|uE$)4{w z>A_CI)EanQi(nSH#^>EhobyRV_;cB5?zzNgr4z0Znf zCddE(PV+04dWfqR@IP0EWg?Z8YWLL|OAXl8$J=LIZ?#$1dvl_9e@>n6=VHwH zmOGXg%KqO@tppybu8rTBF?JzKh>U&9zQja@Y-Pz3rBaN+Scb+}+azs>C@tENXwfQC zZ;Q0=l1j@E6M+eDCeoz0Y};|MP#IbMBon=fV+D8R9FL57=S-@G}W| zq5i|~*3b^S08oJh{NO=INF%6+-XJSDP(C<vsf2WP|w*oged1Nx%qp|2_Lr@C;)R12_Uz5)24bIFqPm!5G48Am4$0M3C(dg zKm#zrLH7B38L@$J0D^Lk&5KEE6cGt4IT`2pLAe8ASDx{ZMC6PUr)p2!Du1 z)*?R`Pn?OWpf{{(C?r(px*$gwLzdBu zK?_7eGEo=O3q}$QPy{iLgL?xs1b6hQ2*3XlXTS&SsX+}y0pFI1UoPQ}8;nONfivh383iJtI^f?0@b4Jp z2|UP*Kt?zw^1*mGMp{%i(Q{}aVgVAlbEqOB+dvG$0%8T(qHm<+>I9jB7?6?B_AC0w zh{;eIa#lh{++ZYu3Ox|c-(3eI5c2?Mn^|B5hgY%=GJJJ^FSHdk45E*OD>;0i|2MtDHBz=95fKhgjU5Q)Y} zBF7TAC?3@XRuAMb`0pxsuM)8+!@s#AOd=X(2GKx^Jcu5UaZwdy-9O2oCgS)n2(Xt3 zgJ1|W5D%deJs&JV9O%mp+950npK0y{#3Hsk>;s3IW$KL;5DafBIB?};i1CddP3 zLe;_%@&d?+FR;Kd^g)@>h}=g)2c^O21m~e7A|5b-9)tv}1QWy$<@hT<#Du_xwZS-4 zCqg58A(_aD@+0mrCpeRFkQQJf8C8QYfj`VS(2Iy5d{I6^10|T5%xWMS@*_Wo5DLr$ zMudcHLtQ~NDC1D}|Dq%J_OE!5*`c0+nvo1K$UP!tvJGmD6c6oaB$$z?6xbnerlr9*CU!y!V~5t#!y09$VZS3w2?gqM*q_o#0p{#6@l^)9MEbcYX(LlUPuq~kmnj@ z{wEe>B(jW<|J!vS6IcttLe)WB#ByM#AZy46ML-M~f$;x5I~W1{2`>LG8s&%H1Y

lQEDl!3fSX3U*jwZ&6URpg+{whnP=j9qa?=7@`qYGCI%_2jn1lCa{U_4DJAd@mCVLKEWD5grJ6e=aTco zzM^{uW&*fqb^r=d5t0Ua49-S)5J(UmWke%_4P=aRqd4FP(V#Sx7x0A@4n!05MmZ5C zxDJd!K2Q(sWPfOfxP#A#Jwo}bE2sz^WE7MSWk)_pFE}PwH?V%f6G-G7K!zQKJ0H+a zWI)`27s`O<0NMn#ARh1qXR@8hgS6z|as_`^Cw2`GSAa)m0?|PpxIZ-z9r&XIt_K1M z{3?!qSq55=8^uE}#2g{OijdD>Jiu(Amf$NW!MTJP&<>N}ULf2-0h~}*KxQ%u>Mi0a zXoua0+=-sS%77L`!HA)7ASS8^#l!3{5+W0LNJ9M~c7OzT)*u#{D_o_B1sMnB7^}(va8PupN4lD;f$JprHPP+`tFMpgSB|krw3{xcf*v zcVJ#Y?x-S&3^5=Z$Q)G-*9ThT@YxC0k>I)_Vi5Cz^$)CcU|uvP-`hlmh%HeAvZ30D z*+M?38pH%d5W0b%Lj(>P3Cd&}vO?Xz;RQWWX2cuS3#^0<`hqiJOZWi|k&loB-|QI* zpFoAUsK=lm#2Y8b2Kxo^k&fIsh(_c=Ob}BrhU)`G!w8~E;0dcH#{fIBzzA?AbWnoN zTB2uyJ_GLov`WdH0}*5{h(AOEXK)Y^fD`eA2fYK;!Hyul00SHd7mm=`)5AX?93Oai zyZU%c@tY`&%Z{;ONpYBmqhEjs81eX=L_Y4}=IsZpZfq`(jd?hG1<>(P8ap8rL_2x` zTL6b2i`xSHCWGqCaWB7#z{|qS%nrji;g*ck`ndN*OB$}kd~E`peY|l&8t-LauN%h3 zxEK#V<3N7Slkp31Gsm2Lyu5Hh9`|B%Bl~*sT6)uPw*(ANjRklFSl}0k5rAlFQ8J~#r!ygzmX?$b=M=$G+M zVXrA;`(+S|QRN8#%ngKoIR_KM%^(wXg$|ObO?X77b0{~Si}jxwExm4nP+knf z!vi3Ks``2LUn7hY6XN-dWHv966VGLsnb??^n^=SPnwv4r?3fmI3=1=+l^xS^42G#? z7Nbh2;h9^0%dsmoiON^#L0NbLhONdhun>jJEG*1d(@=#}{%WD$@`?fq^r28`SRn-y zhwP}E3#q^H%L;{l>-QFl5FIHL`z4EESfTiD|09LV`Y}cEZk#Aw-JgpF)^TA0NiHPh z?TDwjnb~#a1k-b{dl9WJ-qp&ec#N{ae0TB13R1LpXRrWmE#QjP^?gdSODw zhu{FSz5xHW! zHqm2fj@D9D)gNOp+RWU_%1T|&&cW8g-o(<%0)SA&#Ka^eB$cG3lq@tnKX(fMwO+|WGQ_Om^#jrjz15;BjMM9FI6GBu!yLbxCHJ{jXwe?G#XWiMyCtm z`br7R>%AFg5UC@kk2Dxx`8-ePgV4pA+qgJ%@{ZoSpE4C7^ri7Sp!QdZH?)zddH zw6eAtV{6BBp6KH0=I$}cKVWKL(6s5ntZ;TjWE3Ylk)M>DlA4yjBx~uiQ_trwU%!F6@bwAH`d!(8x@7UXs6s+CArVj)g_?r@r^yP@HOz&FJNk-* z&Xv=&SS%{5Y)Au<-k`p4Uqs2GyiSpA%j$W@r%*l$&+!vUJbVdFQis z@HdQqsD8QRRNcyu5AKs6DYkr*lRvn}K#7sv{`%y|=VQ;fCx5ticag8BWp=0kJd2$| zMYk@Vef!;WT88-L1S%<{jwbLEc7tH@!yZZdrCHs=Shp7Zu)O>fdJ{5H(x8i*Cy+y^fMnT&wgP1$$F>CHm zcZ?KuXH6ZIF?Dyg;zPsW<}I7~7VFwvW|4&R_tciCVsE=e>3Kbv|p;i=`DGALB_IS^H%IDl{RAOMK8X@>JmwurgClV`U5Qw zA6u>1lOnR7o1c+UJM*C0jBVRry+}6Rr+#(BnB2lyEL!}d+;o#g{!Ks4gjBj?53D-4 zdDe_Rtm{r?dgxc$VADfY&*i7R+U? zO6<_pZaX79Z|rnEcWItvLi!Q)*#VzleSGdazpDL`!JZ`jmcnfYFAOiP>D;~hMWbRM z-G`C4EZ_2(^@X6vYa*IHu3B~6xyU-Aa+>OepqTXWl(oH#l58VCYPSA%>CGCd;x#f~ zUz~7W9LW0qsr$BF_+-&*EsIVVJ@~ljE8VfTYrkAgAC_O%houG`jk>nQM4hd$%(6|* zbj7TY>z#d=cj4p4p2>C_GIhO6MQneh2dX`5iL+KVPtq=YHI*ZZ733~H{rpnZ?qffl zG+WkQE4Vmwq0@;E36AO&+g)mEtm$WC zU0L@M4B6U6_jFRiXD}bVc=x@$56js0u8i67R6|OBqI#HNW-VWGY_{8ai41+ex;o)H zi@g@tVyquLIQ>R>WCQkN_oJS7=M!(gS6KKsd8=qg>ebj6N;_^`USLQ2>OVS%%S)HN zHp%B|jB?r5W$)IcA712Tm%YE4yJ1nX(WI*N^=yawZ2f&6{p*XLv%T`>k59p-b%qUT zk3xlEJMm~Y>&?;UNbV-!2%=t5-&yULy= z(?#@sYNm(WM|!;U@pBwgY4N&RAw%d`=f7d|rhr1e$&ecoB!sGWrq zY-F~#^2RfF&Xcbw__6!kpHaRyKD55uI=;R}^qSdrhhu6+OIr;l?LS)daMjZlYgw0% zn!kKf9I(FKx8u0U%Zh4%6?g z`F4BE%_DN-vQB(?Q|7wp=EqIPmhY`P*oPV4xg4`-Wc8JfsE=KY+c*0#nV(O4Bl87jE`GeT;=!qzi-Q$MOzz3B zocaBc$AQ-`qK%oIvtJ2yFA3QyZIx4)Rd8$NWgQi6v|HspsT<0l6`nV5d)KYrc;c-4 z*wPi-qCeK|l;!k>D&O09E^gzCTkUN}xSg?E4GvFUx#PZW*M>c+DZ4v6;&sM|O0WBA zIWy(K4Bz5;MLBZ{E}f4lZ^W4N`H{I)4t+elVmvSVIQ_RaLc(S4~rRxe_Z?XcDIN2CRc;S>wC5Yq|F)KZZI-u z!jhDl$NQ8_w(PiazU#E)8!VDBs^Qzy7gDa;-1~OrI#4@9I{}J`Qh$aTYf$~8lqO58kD#EpH%)7rCj=@WGF)mQOXKeS$#Kk`6(o=D}ZnLm8AZ|+^S>e{99a}}2=W|&^7 z)`-Y8=y8Z?@N@roO#AlwiQ_!jg|5jRE3YTcPz=(2ZI(CJFju{2`M!jplZ@KQCC1I> z;;M>sJQnTRzHi#64U^oGqWZ8Cx$#je+gTOg0(P&o_?h)`OWvk{V>W@gT76i^Q~VRI zd*->twaZ$)Ekr+e2gREPzt^cVs=2mGJ-$3ZHPE5wph6aXOM!x$-(0UFk1o!g%QfZA zUisPSP1^(a<+jIiZN?_4_FA_tf1}b}`c8L8MORDbx(S7kpPxJZ@XPy)2@lgV={%ty zcTzl6b>z#Ma}(_S zFZofz+jh-d(Q_ce)%JpK!H-o_g+F>;uqySoW-}Kg-8^@5v;=3wXYbO_1xypSIm3Lu zeyobxnm8+O%kJmNb+NJw_PI8+JmrXJ^XBHoO7MW9?6s)4{)KYo)K1;W7b>kF`L>Jwta^Y3E(sNT(qsk7ODZKhN(>!>3!*+I& zYs|7neuY(~{lob62Oajzs-E7oIl#ZF_00%Yq+@kN-jlo2mvR*~vsCYv1c%6l*0Nr= z2W4E?b4j&Zt0GK#Uvl!Fa&t0I*Ed_lKge)Ys>1y&HE^+RlZiK7JVTC9pgC*-N(Wjq(}s@AcmAX(_6%UbZR5whx=GQskn3?!y6U zb^FZ_X)Jo~<3$%9wM%Pnd~t#u^tQLWde_K{9s7-(u73Tfs*;>m&JQ!7bRM@pzoAPl+lk$#96vE?)X>lJ~r(xJ%t3>>JT%N5-eG%6z)hh|;p*5wr2Q+Ug4u zc}27CYtb(~$V+_gZ)?3~-{r8wEz%})zf5(sY1E8!HF0fM`I3FTv3-wHx$($xX+i#f zzBOE=@*u~5ZPB!+Y18xMO|^@k@Fm=uK6-gyG#_SjBkql6-h^*UzKQp!OLdt)x2ZHf z^TD)zN~3u%)r}Dpf5@vV;es6g<>e*c{lUxhr7zT(^pSJI#7o<^Jbu>s!|>Tkz4s>^ zDkh~p;6Cfa)U0QF-6?#xKddEDwMyjL)-2jK@6r!@rPWh2ZRa~A#f&V_(!F~jw&zF8 zH0^cEtv&3<9zGNP{eJoF&F#1KWnSLo=x?VkanUhT%$}rAYr0q9soiunARxSQzjn{% zSH-I~WFJWG+%Z35!$sv|-P2m$>gsPg5N5=GrLb+clg^>}l0{#4KR@na$-LFM#PxH1 zOk(1KG=r%|+|oJYA9MS#)%(3`juc;h{bWYY2j=8_6N~L>bCRB&vVL+>_^wW)N%;Fm zL5ac%kHlN^Z*J~Y=#qXSHtWFa`wmXj@xdRTRHZg18#|8<_6(}gIkZaW;qp;ei=Gz0 zK0LQ#>^Ut}x{(PU;7qXNJn?;zUy4QYo*ETN31?fZdOzD_qxMZ_B+k&eQ|SFMe4XW z0ge7%C!&f)J2+tvRy&WfvwN2P>{Ofo)p0M6?z)}a)@$8(<>^mzS6`Dqd$H1Qcapy> zW##6?l!9;G-9b0#P5JDpA8kz)e%RN(?OmHR{>a2jouebPFP(8Xqgi{5VeY#3k;n6p zoloLNoU4jz=fE(cq_}*IZb!xzJ^v;`R>Xt1bE^)piXf>k2o3 zZ;7Kam7eaS=RNGqHoEFiK-(5PW>i{9wr5oCnr_e0iOu-^vow#{OwCQqOfmcMsR^O17&e~~#*XB09W>t@Kc&gwgga;kS$mmzB{;LA zIPU2@wtu>J04qI)Wf!hFew?^{Dl;`MA&$)tWu(T%aub=U4x0VoOk4(PQ_XSW42C@~ zJc8*r(e;-TpA!+`pg9yBVCmSv*bxAOAHIkN}50NWk=ukKm_-^4R0NI4oX#B0gdSak$~} zDT$0JQStnEhFfTCESs0cura}Z1vN7>GcmWZw6(D}6^s_Z1StO<^LMlWrVo$9#tZ8& z!2DNsvaa9R-V`)<73gh#U=di^N z6c){9@qf*HIO})jgd|>U|LqmdGG+goUHon|hd1%BI|vl-6dH-(M*07rih z*j#+@YbBHI)@I4Z(MeIUq5Q#KP(uQ?Hzlb4P2DgKf41NcBh%kcBYg1tdB*1A4>2D8 zwCZ~zInBe_dG-`PA6E}g7kp<2!zA53Iox=v42H#V`8+>2CkFmoD?{Wuz9ArnZ!Y0m zN};U81TTNr0Pusahl?{K5qCnr{=#cdbN`R$*llC?DGY|7?H@<7tOOpuNky50ds>F$ zPb^%{!sXZ$ege>gttt7i7$8%@59;zfoFFbM0XY)Nqx*fJJORkzaolj+2XIaZj|&HK z11_&fPGaLS%@dcGC3Dy*xZH%x+ObJ-99;f_%kpvT&_sOqKoaQrY*rN5v%zIa9=@H2 z%l7!bmt-VK4kO8Yb}G&j!<^$2(s-Q6C_Y1Z&jg7H|3E0s?$KM)}(?49n+(MTRzHq}s@hYJsf(c!G z35MBz!h5rt(1mTpu$rY9rqn{{w728CmsuEg^aiOOMX+9eeawLmFAke!0vh`J_(zA| zo_{Tn@|l2qzkA1+$c_k2isdsvQ(5t`_~VL^h=0bj8O8$_@qZ2^(IW8}?Z=K_^VnQG zRUp2~INV5ly1C&T@Il7laQ|wC|6>@50}$c5#s#^uUQB+r2_|zx9;3awiV4X{V6>TA zaSP@5ym^WRV&KjTQhx^5Juc(+{mw8DkdM7;G#y0dv77VLn&@HXRGWSXdOkd(FdAu=&_xY#Ek=?~4{;#n?8i z46DSdutQi4b^<$toyV?VH?cd|1FRM6z`C)wSP%9c-<%PlNKxb{$`o~q4#kLKL9wNb zqqtB!DSnjclsS}03YU^ZnNL|l$)OZdiYYrNm6U^&W0W(LOO#ub`;<1ybINNE~8>l7Jz0{-BGt?{8JJeQcH}w;~6DUDb zq-oHMX|^u4pkDq0=w0_`@fmG+YMRY+J!PKY67EHqZgU1+Kh zOK7gpLZMutVxbD5qe2Zrw}sk--U{{7rRb`3BRZ4rL7zsCq^HoA(bv(->DBae^gHwp zdXKQMu%fV@@EBot;pxKB!t;c4g|`Ur7d|a~OZchqCwzNQS;R=hLBvNSRD>_GOk|_T zUXfEGjUpW)UqmHD)kQ5tT}6XMxuTh(>qK{po)m2qeJ1){Oh!ycj49?L7A}@1mM>N& zRws5ttV8U(xU9IIxPy3rc(nLp@eSft;^)L4ihq!hkkFK{lkk<`NMuNCkT@W5QKC)a ztK@J=LrG`JnUYD8d6K&%PfOmH{2(PIr7JZ-Dp-myl_ymxbyn)J)R$p$!%T*G3=1E& zXxOGbA2S9Z7TCE2dwBExluy9^H>o;AF5_}Sr4Kyg8 z>ZjCSFccV$j9A77Mg!w5z8CARk)*Lh1w&i zvexpQm5~+OYOB>fYdLE#>*dz<)<12=*zjzsY@UzN9y4dm<}r6|~=>J@LBBaF?kr#V(Is zHC-cJ_qe`wvv!;3cG{ipKH0s%{jP_a2g{?<NUx0jn_kO9dE98jSuGI;j_l)(GDLW)#in zm}xz8+05oydb3hzT?$bNi4FNxH)mhxWlO{V+|;XShG{F)o~65{@0=$zk2SA;zQ+8;^V=3UF4(bt@MdV%2x5?kST6i^gb#uY^f{H@f z!t}zYYrNJRUCUUTz4l|#?4nEStk!K?FTOr$ed`9#4YeD!H?H3Jqd2Pg&L*c#`!}m@ zUb*@6mhdf&TPJL-+NQQGXWO^!obC5^xa~MvqFb`ARJb&`w6iR*?7~jlot5P(RMCZunYPss{qm-j*N8i>&)wI@5uf26_(y{uwv31qQO^)w6p>bl<9}0iu zpApS|FC;nYQkizhBI zFCDvVd%5O{&6T59t*=&Jv%Xe+-RAny8)I(N-n6?}cgz0P$;R=GXKqiteZI+~>B=4N zJGYvrHs8BD^KR?C@OxeNWADFfNpAW6AmbtZVfG`LN9!J|J}&vw;LrW7Hm!fOO>DdR z#Q({Ir>v*l?TPI_I+_p0X1wU=PU!yra@i}{SDRn!zdrJ2 z!kepar@ifX$9vcJKKFz2hg~17KGuJl^67C;T+jE<*=s(7h0+ig?MpgM*oW|_a3M`O4RZ^+ zqm!_fub)V0*j%2dyyfD|g2IxwI}RQ?Q!l3Ae5>)vJ8l2A_lhhl@ew+S6PGCITCY*o zD?J=A#)ZA~EdF}QDEtpC^nS^&^u+5WxSfSF#a}O>2~+X6OGI%`4gBpAS=w+7A#+DM z{$h#mTj5Zrx%gW%2hWJeYx&)>3_H{&>deb5sc(FzPJ${zU&g%9)fpsf4 literal 0 HcmV?d00001 diff --git a/test-integration/utilities/standardFileTests.ts b/test-integration/utilities/standardFileTests.ts index a7a1f67b..eeaf6780 100644 --- a/test-integration/utilities/standardFileTests.ts +++ b/test-integration/utilities/standardFileTests.ts @@ -6,7 +6,6 @@ import TestConstants from "./testConstants"; import Utilities from "./utilities"; import { ByteVector, - CorruptFileError, File, Picture, PictureLazy, diff --git a/test-integration/wav_fileTest.ts b/test-integration/wav_fileTest.ts new file mode 100644 index 00000000..72a22208 --- /dev/null +++ b/test-integration/wav_fileTest.ts @@ -0,0 +1,81 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; + +import TestConstants from "./utilities/testConstants"; +import {File, MediaTypes, PictureType, ReadStyle} from "../src"; +import {StandardFileTests} from "./utilities/standardFileTests"; + +// Setup chai +const assert = Chai.assert; + +@suite class Wav_FileTests { + private static readonly corruptFilePath = TestConstants.getCorruptFilePath("corrupt.wav"); + private static readonly sampleFilePath = TestConstants.getSampleFilePath("sample.wav"); + private static readonly tmpFileName = "tmpwrite.wav"; + + private static file: File; + + public static before() { + Wav_FileTests.file = File.createFromPath(Wav_FileTests.sampleFilePath); + } + + public static after() { + Wav_FileTests.file.dispose(); + } + + @test + public readAudioProperties() { + assert.strictEqual(Wav_FileTests.file.properties.audioChannels, 1); + assert.strictEqual(Wav_FileTests.file.properties.audioBitrate, 705.6); + assert.strictEqual(Wav_FileTests.file.properties.audioSampleRate, 44100); + assert.strictEqual(Wav_FileTests.file.properties.bitsPerSample, 16); + assert.strictEqual(Wav_FileTests.file.properties.durationMilliseconds, 2000); + assert.strictEqual(Wav_FileTests.file.properties.mediaTypes, MediaTypes.LosslessAudio); + } + + @test + public readPictures() { + const pics = Wav_FileTests.file.tag.pictures; + assert.strictEqual(pics[0].type, PictureType.FrontCover); + assert.strictEqual(pics[0].mimeType, "image/jpeg"); + assert.strictEqual(pics[0].data.length, 10210); + } + + @test + public readTags() { + assert.strictEqual(Wav_FileTests.file.tag.firstPerformer, "Artist"); + assert.strictEqual(Wav_FileTests.file.tag.comment, "yepa"); + assert.strictEqual(Wav_FileTests.file.tag.firstGenre, "Genre"); + assert.strictEqual(Wav_FileTests.file.tag.album, "Album"); + assert.strictEqual(Wav_FileTests.file.tag.title, "Title"); + assert.strictEqual(Wav_FileTests.file.tag.year, 2009); + assert.strictEqual(Wav_FileTests.file.tag.track, 1); + assert.isEmpty(Wav_FileTests.file.tag.composers); + assert.isUndefined(Wav_FileTests.file.tag.conductor); + assert.isUndefined(Wav_FileTests.file.tag.copyright); + } + + @test + public removeStandardTags() { + StandardFileTests.removeStandardTags(Wav_FileTests.sampleFilePath, Wav_FileTests.tmpFileName); + } + + @test + public testCorruptionResistance() { + StandardFileTests.testCorruptionResistance(Wav_FileTests.corruptFilePath); + } + + @test + public writeStandardPictures() { + const tmpFilePath = TestConstants.getTempFilePath(Wav_FileTests.tmpFileName); + StandardFileTests.writeStandardPictures(Wav_FileTests.sampleFilePath, tmpFilePath, ReadStyle.None); + } + + @test + public writeStandardTags() { + // @TODO: This was originally a medium test. However, medium has a text frame that can't be + // rendered on ID3v2.3 tags. So I took it off. + const tmpFilePath = TestConstants.getTempFilePath(Wav_FileTests.tmpFileName); + StandardFileTests.writeStandardTags(Wav_FileTests.sampleFilePath, tmpFilePath); + } +} diff --git a/test-unit/byteVectorConstructorTests.ts b/test-unit/byteVectorConstructorTests.ts index 6c76c335..b5dd457a 100644 --- a/test-unit/byteVectorConstructorTests.ts +++ b/test-unit/byteVectorConstructorTests.ts @@ -1010,7 +1010,7 @@ const assert = Chai.assert; @test public fromSize_badSize() { // Arrange, Act, Assert - Testers.testUint((v: number) => { ByteVector.fromSize(v); }); + Testers.testSafeUint((v: number) => { ByteVector.fromSize(v); }); } @test diff --git a/test-unit/riff/aviHeaderListTests.ts b/test-unit/riff/aviHeaderListTests.ts new file mode 100644 index 00000000..b7ab4cb9 --- /dev/null +++ b/test-unit/riff/aviHeaderListTests.ts @@ -0,0 +1,175 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; + +import RiffList from "../../src/riff/riffList"; +import TestFile from "../utilities/testFile"; +import {AviHeader, AviHeaderList} from "../../src/riff/aviHeaderList"; +import {AviStream} from "../../src/riff/aviStream"; +import {ByteVector} from "../../src/byteVector"; +import {File} from "../../src/file"; +import {ICodec} from "../../src/iCodec"; +import {Testers} from "../utilities/testers"; + +// Setup chai +const assert = Chai.assert; + +function getTestAviHeader(): ByteVector { + return ByteVector.concatenate( + ByteVector.fromUInt(1234, false), // Microseconds per frame + ByteVector.fromUInt(2345, false), // Max bytes per second + ByteVector.fromUInt(3456, false), // Padding granularity + ByteVector.fromUInt(4567, false), // Flags + ByteVector.fromUInt(5678, false), // Total frames + ByteVector.fromUInt(6789, false), // Initial frames + ByteVector.fromUInt(7890, false), // Streams + ByteVector.fromUInt(8901, false), // Suggested buffer size + ByteVector.fromUInt(9012, false), // Width + ByteVector.fromUInt(123, false), // Height + ByteVector.fromSize(16), // Reserved + ); +} + +@suite class Riff_AviHeaderTests { + @test + public constructor_invalidParams() { + // Arrange + const data = ByteVector.fromSize(43); + + // Act / Assert + Testers.testTruthy((v) => new AviHeader(v, 0)); + Testers.testUint((v) => new AviHeader(data, v)); + assert.throws(() => new AviHeader(data, 4)); + } + + @test + public constructor_validParams() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromSize(4), + getTestAviHeader() + ); + + // Act + const header = new AviHeader(data, 4); + + // Assert + assert.approximately(header.durationMilliseconds, 7006, 1); + assert.strictEqual(header.flags, 4567); + assert.strictEqual(header.height, 123); + assert.strictEqual(header.initialFrames, 6789); + assert.strictEqual(header.maxBytesPerSecond, 2345); + assert.strictEqual(header.microsecondsPerFrame, 1234); + assert.strictEqual(header.streams, 7890); + assert.strictEqual(header.suggestedBufferSize, 8901); + assert.strictEqual(header.totalFrames, 5678); + assert.strictEqual(header.width, 9012); + } +} + +@suite class Riff_AviHeaderListTests { + @test + public constructor_invalidParams() { + // Arrange + const file = TestFile.getFile(ByteVector.empty()); + + // Act / Assert + Testers.testTruthy((v) => new AviHeaderList(v, 0, 0)); + Testers.testSafeUint((v) => new AviHeaderList(file, v, 0)); + Testers.testUint((v) => new AviHeaderList(file, 0, v)); + assert.throws(() => new AviHeaderList(file, 10, 10)); + } + + @test + public constructor_invalidHeaderFourCC() { + // Arrange + const riffList = new RiffList(); + riffList.setValuesFromStrings("abcd", "foo", "bar", "baz"); + const data = riffList.render(); + const file = TestFile.getFile(data); + + // Act / Assert + assert.throws(() => new AviHeaderList(file, 0, data.length)); + } + + @test + public constructor_aviHeaderTooShort() { + // Arrange + const riffList = new RiffList(); + riffList.setValues("avih", ByteVector.fromSize(10)); + const data = riffList.render(); + const file = TestFile.getFile(data); + + // Act / Assert + assert.throws(() => new AviHeaderList(file, 0, data.length)); + } + + @test + public constructor_noCodecs() { + const streamHeaderData = getTestAviHeader(); + const riffList = new RiffList(); + riffList.setValues("avih", streamHeaderData); + const data = riffList.render(); + const file = TestFile.getFile(data); + + // Act + const headerList = new AviHeaderList(file, 0, data.length); + + // Assert + assert.isOk(headerList.codecs); + assert.isEmpty(headerList.codecs); + + assert.isOk(headerList.header); + assert.strictEqual(headerList.header.flags, 4567); + } + + @test + public constructor_hasCodecs() { + // Arrange + // NOTE: This looks kinda nasty, but we're monkey patching the AviStream.parseStreamList + // with a mock. Using the base implementation gets too complex. + const origImpl = AviStream.parseStreamList; + + try { + const aviHeader = getTestAviHeader(); + + const listData1 = ByteVector.concatenate(ByteVector.fromString("strl")); + const listData2 = ByteVector.concatenate(ByteVector.fromString("strl")); + const listData3 = ByteVector.concatenate(ByteVector.fromString("fooo")); + + // Monkey patch that will just return a test stream + const codec = {}; + const stream = new AviTestStream(codec); + AviStream.parseStreamList = () => stream; + + const riffList = new RiffList(); + riffList.setValues("avih", aviHeader); + riffList.setValues("LIST", listData1, listData2, listData3); + const data = riffList.render(); + const file = TestFile.getFile(data); + + // Act + const headerList = new AviHeaderList(file, 0, data.length); + + // Assert + assert.isOk(headerList.codecs); + assert.strictEqual(headerList.codecs.length, 2); + assert.strictEqual(headerList.codecs[0], codec); + assert.strictEqual(headerList.codecs[1], codec); + + assert.isOk(headerList.header); + assert.strictEqual(headerList.header.flags, 4567); + } finally { + // Teardown + AviStream.parseStreamList = origImpl; + } + } +} + +class AviTestStream extends AviStream { + public constructor(codec: ICodec) { + super(undefined); + this._codec = codec; + } + + public parseItem(id: string, data: ByteVector, start: number) { /* no-op */ } +} diff --git a/test-unit/riff/aviStreamHeaderTests.ts b/test-unit/riff/aviStreamHeaderTests.ts new file mode 100644 index 00000000..5057c970 --- /dev/null +++ b/test-unit/riff/aviStreamHeaderTests.ts @@ -0,0 +1,75 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; + +import {AviStreamHeader} from "../../src/riff/aviStreamHeader"; +import {ByteVector} from "../../src/byteVector"; +import {Testers} from "../utilities/testers"; + +// Setup chai +const assert = Chai.assert; + +@suite class Riff_AviStreamHeaderTests { + + @test + public constructor_invalidData() { + // Act / Assert + Testers.testTruthy((v) => new AviStreamHeader(v, 123)); + } + + @test + public constructor_invalidOffset() { + // Arrange + const data = ByteVector.empty(); + + // Act / Assert + Testers.testUint((v) => new AviStreamHeader(data, v)); + assert.throws(() => new AviStreamHeader(data, 1)); + } + + @test + public constructor_validParams() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromSize(10), // Offset + ByteVector.fromUInt(0x12345678, false), // FourCC + ByteVector.fromUInt(0x23456789, false), // FourCC handler + ByteVector.fromUInt(0x34567890, false), // Flags + ByteVector.fromUShort(0x1234, false), // Priority + ByteVector.fromUShort(0x2345, false), // Language + ByteVector.fromUInt(0x45678901, false), // Initial Frames + ByteVector.fromUInt(0x56789012, false), // Scale + ByteVector.fromUInt(0x67890123, false), // Rate + ByteVector.fromUInt(0x78901234, false), // Start + ByteVector.fromUInt(0x89012345, false), // Length + ByteVector.fromUInt(0x90123456, false), // Suggested Buffer Size + ByteVector.fromUInt(0x01234567, false), // Quality + ByteVector.fromUInt(0x11234567, false), // Sample size + ByteVector.fromUShort(0x3456, false), // left + ByteVector.fromUShort(0x4567, false), // top + ByteVector.fromUShort(0x5678, false), // right + ByteVector.fromUShort(0x6789, false), // bottom + ); + + // Act + const result = new AviStreamHeader(data, 10); + + // Assert + assert.strictEqual(result.bottom, 0x6789); + assert.strictEqual(result.flags, 0x34567890); + assert.strictEqual(result.handler, 0x23456789); + assert.strictEqual(result.initialFrames, 0x45678901); + assert.strictEqual(result.language, 0x2345); + assert.strictEqual(result.left, 0x3456); + assert.strictEqual(result.length, 0x89012345); + assert.strictEqual(result.priority, 0x1234); + assert.strictEqual(result.quality, 0x01234567); + assert.strictEqual(result.rate, 0x67890123); + assert.strictEqual(result.right, 0x5678); + assert.strictEqual(result.sampleSize, 0x11234567); + assert.strictEqual(result.scale, 0x56789012); + assert.strictEqual(result.start, 0x78901234); + assert.strictEqual(result.suggestedSampleSize, 0x90123456); + assert.strictEqual(result.top, 0x4567); + assert.strictEqual(result.type, 0x12345678); + } +} diff --git a/test-unit/riff/aviStreamTests.ts b/test-unit/riff/aviStreamTests.ts new file mode 100644 index 00000000..9de0b0b8 --- /dev/null +++ b/test-unit/riff/aviStreamTests.ts @@ -0,0 +1,146 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; +import {AviStream} from "../../src/riff/aviStream"; +import {ByteVector} from "../../src/byteVector"; +import {Testers} from "../utilities/testers"; +import {AviStreamType, RiffBitmapInfoHeader, RiffWaveFormatEx} from "../../src"; + +// Setup chai +const assert = Chai.assert; + +@suite class Riff_AviStreamTest { + @test + public parseStreamList_invalidParams() { + // Act / Assert + Testers.testTruthy((v) => AviStream.parseStreamList(v)); + } + + @test + public parseStreamList_invalidFourCC() { + // Arrange + const data = ByteVector.fromString("fooo1234"); + + // Act + const result = AviStream.parseStreamList(data); + + // Assert + assert.isUndefined(result); + } + + @test + public parseStreamList_noValidStreamData() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromString("strl"), + ByteVector.fromUInt(10, false), + ByteVector.fromSize(10) + ); + + // Act + const result = AviStream.parseStreamList(data); + + // Assert + assert.isUndefined(result); + } + + @test + public parseStreamList_midiStream() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromString("strl"), + ByteVector.fromString("strh"), + ByteVector.fromUInt(56, false), + ByteVector.fromUInt(AviStreamType.MIDI_STREAM, false), + ByteVector.fromSize(52) + ); + + // Act + const result = AviStream.parseStreamList(data); + + // Assert + assert.isUndefined(result); + } + + @test + public parseStreamList_textStream() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromString("strl"), + ByteVector.fromString("strh"), + ByteVector.fromUInt(56, false), + ByteVector.fromUInt(AviStreamType.TEXT_STREAM, false), + ByteVector.fromSize(52) + ); + + // Act + const result = AviStream.parseStreamList(data); + + // Assert + assert.isUndefined(result); + } + + @test + public parseStreamList_videoStream() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromString("strl"), + ByteVector.fromString("strh"), + ByteVector.fromUInt(56, false), + ByteVector.fromUInt(AviStreamType.VIDEO_STREAM, false), + ByteVector.fromUInt(1234, false), + ByteVector.fromSize(48), + ByteVector.fromString("strf"), + ByteVector.fromUInt(40, false), + ByteVector.fromSize(4), + ByteVector.fromUInt(2345, false), + ByteVector.fromSize(32), + ByteVector.fromString("fooo"), + ByteVector.fromUInt(10, false), + ByteVector.fromSize(10) + ); + + // Act + const result = AviStream.parseStreamList(data); + + // Assert + assert.isOk(result); + + assert.strictEqual(result.header.type, AviStreamType.VIDEO_STREAM); + assert.strictEqual(result.header.handler, 1234); + + assert.isTrue(result.codec instanceof RiffBitmapInfoHeader); + assert.strictEqual(( result.codec).videoWidth, 2345); + } + + @test + public parseStreamList_audioStream() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromString("strl"), + ByteVector.fromString("strh"), + ByteVector.fromUInt(56, false), + ByteVector.fromUInt(AviStreamType.AUDIO_STREAM, false), + ByteVector.fromUInt(1234, false), + ByteVector.fromSize(48), + ByteVector.fromString("strf"), + ByteVector.fromUInt(16, false), + ByteVector.fromUShort(2345, false), + ByteVector.fromSize(12), + ByteVector.fromString("fooo"), + ByteVector.fromUInt(10, false), + ByteVector.fromSize(10) + ); + + // Act + const result = AviStream.parseStreamList(data); + + // Assert + assert.isOk(result); + + assert.strictEqual(result.header.type, AviStreamType.AUDIO_STREAM); + assert.strictEqual(result.header.handler, 1234); + + assert.isTrue(result.codec instanceof RiffWaveFormatEx); + assert.strictEqual(( result.codec).formatTag, 2345); + } +} diff --git a/test-unit/riff/divxTagTests.ts b/test-unit/riff/divxTagTests.ts new file mode 100644 index 00000000..050470dc --- /dev/null +++ b/test-unit/riff/divxTagTests.ts @@ -0,0 +1,253 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; +import {Mock} from "typemoq"; + +import DivxTag from "../../src/riff/divxTag"; +import TestFile from "../utilities/testFile"; +import {ByteVector} from "../../src/byteVector"; +import {File} from "../../src/file"; +import {TagTypes} from "../../src/tag"; +import {TagTesters, Testers} from "../utilities/testers"; +import PropertyTests from "../utilities/propertyTests"; + +// Setup chai +const assert = Chai.assert; + +@suite class Riff_DivxTagTests { + @test + public fromEmpty() { + // Act + const tag = DivxTag.fromEmpty(); + + // Assert + assert.isOk(tag); + assert.strictEqual(tag.tagTypes, TagTypes.DivX); + TagTesters.testTagProperties(tag, {}); + } + + @test + public fromData_invalidParams() { + // Act / Assert + Testers.testTruthy((v) => DivxTag.fromData(v)); + } + + @test + public fromData_tooShort() { + // Arrange + const data = ByteVector.fromSize(DivxTag.SIZE - 1); + + // Act / Assert + assert.throws(() => DivxTag.fromData(data)); + } + + @test + public fromData_wrongEnding() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromSize(DivxTag.SIZE), + ByteVector.fromString("FooBarBaz") + ); + + // Act / Assert + assert.throws(() => DivxTag.fromData(data)); + } + + @test + public fromData_validData() { + // Arrange + const data = this.getTestTagData(0); + + // Act + const tag = DivxTag.fromData(data); + + // Assert + assert.isOk(tag); + assert.strictEqual(tag.tagTypes, TagTypes.DivX); + + const expectedProps = { + comment: "baz", + genres: ["Infomercial"], + performers: ["bar", "bux"], + title: "foo", + year: 2021, + }; + TagTesters.testTagProperties(tag, expectedProps); + } + + @test + public fromFile_invalidParams() { + // Arrange + const file = Mock.ofType(); + + // Act / Assert + Testers.testTruthy((v) => DivxTag.fromFile(v, 0)); + Testers.testSafeUint((v) => DivxTag.fromFile(file.object, v)); + } + + @test + public fromFile_fileTooShort() { + // Arrange + const file = TestFile.getFile(ByteVector.fromSize(DivxTag.SIZE)); + + // Act / Assert + assert.throws(() => DivxTag.fromFile(file, 10)); + } + + @test + public fromFile_validParams() { + // Arrange + const data = this.getTestTagData(10); + const file = TestFile.getFile(data); + + // Act + const tag = DivxTag.fromFile(file, 10); + + // Assert + assert.isOk(tag); + assert.strictEqual(tag.tagTypes, TagTypes.DivX); + + const expectedProps = { + comment: "baz", + genres: ["Infomercial"], + performers: ["bar", "bux"], + title: "foo", + year: 2021, + }; + TagTesters.testTagProperties(tag, expectedProps); + } + + @test + public title() { + // Arrange + const tag = DivxTag.fromEmpty(); + const setter = (v: string) => tag.title = v; + const getter = () => tag.title; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foo"); + PropertyTests.propertyNormalized(setter, getter, "foo ", "foo"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public performers() { + // Arrange + const tag = DivxTag.fromEmpty(); + const setter = (v: string[]) => tag.performers = v; + const getter = () => tag.performers; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, ["foo", "bar", "baz"]); + PropertyTests.propertyNormalized(setter, getter, undefined, []); + PropertyTests.propertyNormalized(setter, getter, null, []); + PropertyTests.propertyRoundTrip(setter, getter, []); + } + + @test + public comment() { + // Arrange + const tag = DivxTag.fromEmpty(); + const setter = (v: string) => tag.comment = v; + const getter = () => tag.comment; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foobarbaz"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "foobarbaz ", "foobarbaz"); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public genres() { + // Arrange + const tag = DivxTag.fromEmpty(); + const setter = (v: string[]) => tag.genres = v; + const getter = () => tag.genres; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, ["Musical"]); + PropertyTests.propertyNormalized(setter, getter, ["Nature", "Infomercial"], ["Nature"]); + PropertyTests.propertyNormalized(setter, getter, ["foobarbaz"], []); + PropertyTests.propertyNormalized(setter, getter, undefined, []); + PropertyTests.propertyNormalized(setter, getter, null, []); + PropertyTests.propertyRoundTrip(setter, getter, []); + } + + @test + public year() { + // Arrange + const tag = DivxTag.fromEmpty(); + const setter = (v: number) => tag.year = v; + const getter = () => tag.year; + + // Act / Assert + PropertyTests.propertyThrows(setter, -1); + PropertyTests.propertyThrows(setter, 1.23); + PropertyTests.propertyThrows(setter, 0x100000000); + PropertyTests.propertyRoundTrip(setter, getter, 2021); + PropertyTests.propertyNormalized(setter, getter, 100001, 0); + PropertyTests.propertyRoundTrip(setter, getter, 0); + } + + @test + public clear() { + // Arrange + const data = this.getTestTagData(0); + const tag = DivxTag.fromData(data); + + // Act + tag.clear(); + + // Assert + assert.isOk(tag); + assert.strictEqual(tag.tagTypes, TagTypes.DivX); + TagTesters.testTagProperties(tag, {}); + } + + @test + public render_hasValues() { + // Arrange + const data = this.getTestTagData(0); + const tag = DivxTag.fromData(data); + + // Act + const result = tag.render(); + + // Assert + assert.isTrue(ByteVector.equal(result, data)); + } + + @test + public render_empty() { + // Arrange + const tag = DivxTag.fromEmpty(); + + // Act + const result = tag.render(); + + // Assert + const expected = ByteVector.concatenate( + ByteVector.fromSize(DivxTag.SIZE - 6 - DivxTag.FILE_IDENTIFIER.length, 0x20), + ByteVector.fromSize(6), + DivxTag.FILE_IDENTIFIER + ); + assert.isTrue(ByteVector.equal(result, expected)); + } + + private getTestTagData(padding: number) { + return ByteVector.concatenate( + ByteVector.fromSize(padding), + ByteVector.fromString("foo "), + ByteVector.fromString("bar;bux "), + ByteVector.fromString("2021"), + ByteVector.fromString("baz "), + ByteVector.fromString("22 "), + ByteVector.fromSize(6), + DivxTag.FILE_IDENTIFIER, + ByteVector.fromSize(padding) + ); + } +} diff --git a/test-unit/riff/infoTagTests.ts b/test-unit/riff/infoTagTests.ts new file mode 100644 index 00000000..5a6a70a2 --- /dev/null +++ b/test-unit/riff/infoTagTests.ts @@ -0,0 +1,379 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; +import {Mock} from "typemoq"; + +import InfoTag from "../../src/riff/infoTag"; +import PropertyTests from "../utilities/propertyTests"; +import TestFile from "../utilities/testFile"; +import {ByteVector, StringType} from "../../src/byteVector"; +import {File} from "../../src/file"; +import {TagTypes} from "../../src/tag"; +import {TagTesters, Testers} from "../utilities/testers"; + +// Setup chai +const assert = Chai.assert; + +@suite class Riff_InfoTagTests { + private testTagData = ByteVector.concatenate( + ByteVector.fromString("INAM"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("foo"), 0x00, + ByteVector.fromString("ISBJ"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("bar"), 0x00, + ByteVector.fromString("ISTR"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("baz"), 0x00, + ByteVector.fromString("IART"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("fux"), 0x00, + ByteVector.fromString("IWRI"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("bux"), 0x00, + ByteVector.fromString("DIRC"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("qux"), 0x00, + ByteVector.fromString("ICNM"), + ByteVector.fromUInt(6, false), + ByteVector.fromString("foobar"), + ByteVector.fromString("ICMT"), + ByteVector.fromUInt(6, false), + ByteVector.fromString("barbaz"), + ByteVector.fromString("IGNR"), + ByteVector.fromUInt(6, false), + ByteVector.fromString("bazfux"), + ByteVector.fromString("ICRD"), + ByteVector.fromUInt(4, false), + ByteVector.fromString("1234"), + ByteVector.fromString("IPRT"), + ByteVector.fromUInt(4, false), + ByteVector.fromString("2345"), + ByteVector.fromString("IFRM"), + ByteVector.fromUInt(4, false), + ByteVector.fromString("3456"), + ByteVector.fromString("ICOP"), + ByteVector.fromUInt(6, false), + ByteVector.fromString("buxqux") + ); + + @test + public fromEmpty() { + // Act + const tag = InfoTag.fromEmpty(); + + // Assert + assert.isOk(tag); + assert.isTrue(tag.isEmpty); + assert.strictEqual(tag.stringType, StringType.UTF8); + assert.strictEqual(tag.tagTypes, TagTypes.RiffInfo); + + TagTesters.testTagProperties(tag, {}); + } + + @test + public fromData_invalidParams() { + // Act / Assert + Testers.testTruthy((v) => InfoTag.fromData(v)); + } + + @test + public fromData_validParams() { + // Act + const tag = InfoTag.fromData(this.testTagData); + + // Assert + assert.isOk(tag); + assert.isFalse(tag.isEmpty); + assert.strictEqual(tag.stringType, StringType.UTF8); + assert.strictEqual(tag.tagTypes, TagTypes.RiffInfo); + + const expected = { + album: "qux", + albumArtists: ["fux"], + comment: "barbaz", + composers: ["bux"], + conductor: "foobar", + copyright: "buxqux", + description: "bar", + genres: ["bazfux"], + performers: ["baz"], + title: "foo", + track: 2345, + trackCount: 3456, + year: 1234 + }; + TagTesters.testTagProperties(tag, expected); + } + + @test + public fromFile_invalidParams() { + // Arrange + const mockFile = Mock.ofType(); + mockFile.setup((f) => f.length).returns(() => 10); + + // Act / Assert + Testers.testTruthy((v: File) => InfoTag.fromFile(v, 0, 0)); + Testers.testSafeUint((v) => InfoTag.fromFile(mockFile.object, v, 0)); + Testers.testUint((v) => InfoTag.fromFile(mockFile.object, 0, v)); + assert.throws(() => InfoTag.fromFile(mockFile.object, 123, 5)); + } + + @test + public fromFile_validParams() { + // Arrange + const testData = ByteVector.concatenate( + ByteVector.fromSize(10), + this.testTagData + ); + const mockFile = TestFile.getFile(testData); + + // Act + const tag = InfoTag.fromFile(mockFile, 10, this.testTagData.length); + + // Assert + assert.isOk(tag); + assert.isFalse(tag.isEmpty); + assert.strictEqual(tag.stringType, StringType.UTF8); + assert.strictEqual(tag.tagTypes, TagTypes.RiffInfo); + + const expected = { + album: "qux", + albumArtists: ["fux"], + comment: "barbaz", + composers: ["bux"], + conductor: "foobar", + copyright: "buxqux", + description: "bar", + genres: ["bazfux"], + performers: ["baz"], + title: "foo", + track: 2345, + trackCount: 3456, + year: 1234 + }; + TagTesters.testTagProperties(tag, expected); + } + + @test + public title() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string) => tag.title = v; + const getter = () => tag.title; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foo"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public description() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string) => tag.description = v; + const getter = () => tag.description; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foo"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public performers() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string[]) => tag.performers = v; + const getter = () => tag.performers; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, ["foo", "bar", "baz"]); + PropertyTests.propertyNormalized(setter, getter, undefined, []); + PropertyTests.propertyNormalized(setter, getter, null, []); + PropertyTests.propertyRoundTrip(setter, getter, []); + } + + @test + public albumArtists() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string[]) => tag.albumArtists = v; + const getter = () => tag.albumArtists; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, ["foo", "bar", "baz"]); + PropertyTests.propertyNormalized(setter, getter, undefined, []); + PropertyTests.propertyNormalized(setter, getter, null, []); + PropertyTests.propertyRoundTrip(setter, getter, []); + } + + @test + public composers() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string[]) => tag.composers = v; + const getter = () => tag.composers; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, ["foo", "bar", "baz"]); + PropertyTests.propertyNormalized(setter, getter, undefined, []); + PropertyTests.propertyNormalized(setter, getter, null, []); + PropertyTests.propertyRoundTrip(setter, getter, []); + } + + @test + public album() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string) => tag.album = v; + const getter = () => tag.album; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foo"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public conductor() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string) => tag.conductor = v; + const getter = () => tag.conductor; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foo"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public comment() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string) => tag.comment = v; + const getter = () => tag.comment; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foobarbaz"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public genres() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string[]) => tag.genres = v; + const getter = () => tag.genres; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, ["Musical"]); + PropertyTests.propertyRoundTrip(setter, getter, ["Nature", "Infomercial"]); + PropertyTests.propertyRoundTrip(setter, getter, ["foobarbaz"]); + PropertyTests.propertyNormalized(setter, getter, undefined, []); + PropertyTests.propertyNormalized(setter, getter, null, []); + PropertyTests.propertyRoundTrip(setter, getter, []); + } + + @test + public year() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: number) => tag.year = v; + const getter = () => tag.year; + + // Act / Assert + PropertyTests.propertyThrows(setter, -1); + PropertyTests.propertyThrows(setter, 1.23); + PropertyTests.propertyThrows(setter, 0x100000000); + PropertyTests.propertyRoundTrip(setter, getter, 2021); + PropertyTests.propertyNormalized(setter, getter, 100001, 0); + PropertyTests.propertyRoundTrip(setter, getter, 0); + } + + @test + public track() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: number) => tag.track = v; + const getter = () => tag.track; + + // Act / Assert + PropertyTests.propertyThrows(setter, -1); + PropertyTests.propertyThrows(setter, 1.23); + PropertyTests.propertyThrows(setter, 0x100000000); + PropertyTests.propertyRoundTrip(setter, getter, 1234); + PropertyTests.propertyRoundTrip(setter, getter, 0); + } + + @test + public trackCount() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: number) => tag.trackCount = v; + const getter = () => tag.trackCount; + + // Act / Assert + PropertyTests.propertyThrows(setter, -1); + PropertyTests.propertyThrows(setter, 1.23); + PropertyTests.propertyThrows(setter, 0x100000000); + PropertyTests.propertyRoundTrip(setter, getter, 1234); + PropertyTests.propertyRoundTrip(setter, getter, 0); + } + + @test + public copyright() { + // Arrange + const tag = InfoTag.fromEmpty(); + const setter = (v: string) => tag.copyright = v; + const getter = () => tag.copyright; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foobarbaz"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public clear() { + // Arrange + const data = this.testTagData; + const tag = InfoTag.fromData(data); + + // Act + tag.clear(); + + // Assert + assert.isOk(tag); + assert.strictEqual(tag.tagTypes, TagTypes.RiffInfo); + TagTesters.testTagProperties(tag, {}); + } + + @test + public renderEnclosed() { + // Arrange + const tag = InfoTag.fromData(this.testTagData); + + // Act + const output = tag.renderEnclosed(); + + // Assert + assert.isOk(output); + + const expected = ByteVector.concatenate( + ByteVector.fromString("LIST"), + ByteVector.fromUInt(this.testTagData.length + 4, false), + ByteVector.fromString("INFO"), + this.testTagData + ); + assert.isTrue(ByteVector.equal(output, expected)); + } +} diff --git a/test-unit/riff/movieIdTagTests.ts b/test-unit/riff/movieIdTagTests.ts new file mode 100644 index 00000000..cc88ede8 --- /dev/null +++ b/test-unit/riff/movieIdTagTests.ts @@ -0,0 +1,244 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; +import {Mock} from "typemoq"; + +import MovieIdTag from "../../src/riff/movieIdTag"; +import PropertyTests from "../utilities/propertyTests"; +import TestFile from "../utilities/testFile"; +import {ByteVector, StringType} from "../../src/byteVector"; +import {File} from "../../src/file"; +import {TagTypes} from "../../src/tag"; +import {TagTesters, Testers} from "../utilities/testers"; + +// Setup chai +const assert = Chai.assert; + +@suite class Riff_MovieIdTagTests { + private testTagData = ByteVector.concatenate( + ByteVector.fromString("TITL"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("foo"), 0x00, + ByteVector.fromString("IART"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("bar"), 0x00, + ByteVector.fromString("COMM"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("baz"), 0x00, + ByteVector.fromString("GENR"), + ByteVector.fromUInt(3, false), + ByteVector.fromString("fux"), 0x00, + ByteVector.fromString("PRT1"), + ByteVector.fromUInt(4, false), + ByteVector.fromString("1234"), + ByteVector.fromString("PRT2"), + ByteVector.fromUInt(4, false), + ByteVector.fromString("2345") + ); + + @test + public fromEmpty() { + // Act + const tag = MovieIdTag.fromEmpty(); + + // Assert + assert.isOk(tag); + assert.isTrue(tag.isEmpty); + assert.strictEqual(tag.stringType, StringType.UTF8); + assert.strictEqual(tag.tagTypes, TagTypes.MovieId); + + TagTesters.testTagProperties(tag, {}); + } + + @test + public fromData_invalidParams() { + // Act / Assert + Testers.testTruthy((v) => MovieIdTag.fromData(v)); + } + + @test + public fromData_validParams() { + // Act + const tag = MovieIdTag.fromData(this.testTagData); + + // Assert + assert.isOk(tag); + assert.isFalse(tag.isEmpty); + assert.strictEqual(tag.stringType, StringType.UTF8); + assert.strictEqual(tag.tagTypes, TagTypes.MovieId); + + const expected = { + comment: "baz", + genres: ["fux"], + performers: ["bar"], + title: "foo", + track: 1234, + trackCount: 2345 + }; + TagTesters.testTagProperties(tag, expected); + } + + @test + public fromFile_invalidParams() { + // Arrange + const mockFile = Mock.ofType(); + mockFile.setup((f) => f.length).returns(() => 10); + + // Act / Assert + Testers.testTruthy((v: File) => MovieIdTag.fromFile(v, 0, 0)); + Testers.testSafeUint((v) => MovieIdTag.fromFile(mockFile.object, v, 0)); + Testers.testUint((v) => MovieIdTag.fromFile(mockFile.object, 0, v)); + assert.throws(() => MovieIdTag.fromFile(mockFile.object, 123, 5)); + } + + @test + public fromFile_validParams() { + // Arrange + const testData = ByteVector.concatenate( + ByteVector.fromSize(10), + this.testTagData + ); + const mockFile = TestFile.getFile(testData); + + // Act + const tag = MovieIdTag.fromFile(mockFile, 10, this.testTagData.length); + + // Assert + assert.isOk(tag); + assert.isFalse(tag.isEmpty); + assert.strictEqual(tag.stringType, StringType.UTF8); + assert.strictEqual(tag.tagTypes, TagTypes.MovieId); + + const expected = { + comment: "baz", + genres: ["fux"], + performers: ["bar"], + title: "foo", + track: 1234, + trackCount: 2345 + }; + TagTesters.testTagProperties(tag, expected); + } + + @test + public title() { + // Arrange + const tag = MovieIdTag.fromEmpty(); + const setter = (v: string) => tag.title = v; + const getter = () => tag.title; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foo"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public performers() { + // Arrange + const tag = MovieIdTag.fromEmpty(); + const setter = (v: string[]) => tag.performers = v; + const getter = () => tag.performers; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, ["foo", "bar", "baz"]); + PropertyTests.propertyNormalized(setter, getter, undefined, []); + PropertyTests.propertyNormalized(setter, getter, null, []); + PropertyTests.propertyRoundTrip(setter, getter, []); + } + + @test + public comment() { + // Arrange + const tag = MovieIdTag.fromEmpty(); + const setter = (v: string) => tag.comment = v; + const getter = () => tag.comment; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, "foobarbaz"); + PropertyTests.propertyRoundTrip(setter, getter, undefined); + PropertyTests.propertyNormalized(setter, getter, null, undefined); + PropertyTests.propertyNormalized(setter, getter, "", undefined); + } + + @test + public genres() { + // Arrange + const tag = MovieIdTag.fromEmpty(); + const setter = (v: string[]) => tag.genres = v; + const getter = () => tag.genres; + + // Act / Assert + PropertyTests.propertyRoundTrip(setter, getter, ["Musical"]); + PropertyTests.propertyRoundTrip(setter, getter, ["Nature", "Infomercial"]); + PropertyTests.propertyRoundTrip(setter, getter, ["foobarbaz"]); + PropertyTests.propertyNormalized(setter, getter, undefined, []); + PropertyTests.propertyNormalized(setter, getter, null, []); + PropertyTests.propertyRoundTrip(setter, getter, []); + } + + @test + public track() { + // Arrange + const tag = MovieIdTag.fromEmpty(); + const setter = (v: number) => tag.track = v; + const getter = () => tag.track; + + // Act / Assert + PropertyTests.propertyThrows(setter, -1); + PropertyTests.propertyThrows(setter, 1.23); + PropertyTests.propertyThrows(setter, 0x100000000); + PropertyTests.propertyRoundTrip(setter, getter, 1234); + PropertyTests.propertyRoundTrip(setter, getter, 0); + } + + @test + public trackCount() { + // Arrange + const tag = MovieIdTag.fromEmpty(); + const setter = (v: number) => tag.trackCount = v; + const getter = () => tag.trackCount; + + // Act / Assert + PropertyTests.propertyThrows(setter, -1); + PropertyTests.propertyThrows(setter, 1.23); + PropertyTests.propertyThrows(setter, 0x100000000); + PropertyTests.propertyRoundTrip(setter, getter, 1234); + PropertyTests.propertyRoundTrip(setter, getter, 0); + } + + @test + public clear() { + // Arrange + const data = this.testTagData; + const tag = MovieIdTag.fromData(data); + + // Act + tag.clear(); + + // Assert + assert.isOk(tag); + assert.strictEqual(tag.tagTypes, TagTypes.MovieId); + TagTesters.testTagProperties(tag, {}); + } + + @test + public renderEnclosed() { + // Arrange + const tag = MovieIdTag.fromData(this.testTagData); + + // Act + const output = tag.renderEnclosed(); + + // Assert + assert.isOk(output); + + const expected = ByteVector.concatenate( + ByteVector.fromString("LIST"), + ByteVector.fromUInt(this.testTagData.length + 4, false), + ByteVector.fromString("MID "), + this.testTagData + ); + assert.isTrue(ByteVector.equal(output, expected)); + } +} diff --git a/test-unit/riff/riffBitmapInfoHeaderTests.ts b/test-unit/riff/riffBitmapInfoHeaderTests.ts index 3da9c379..b028f41c 100644 --- a/test-unit/riff/riffBitmapInfoHeaderTests.ts +++ b/test-unit/riff/riffBitmapInfoHeaderTests.ts @@ -1,10 +1,10 @@ import * as Chai from "chai"; import {suite, test} from "mocha-typescript"; -import {Testers} from "../utilities/testers"; -import {ByteVector} from "../../src/byteVector"; import RiffBitmapInfoHeader from "../../src/riff/riffBitmapInfoHeader"; +import {ByteVector} from "../../src/byteVector"; import {MediaTypes} from "../../src/iCodec"; +import {Testers} from "../utilities/testers"; // Setup chai const assert = Chai.assert; diff --git a/test-unit/riff/riffListTests.ts b/test-unit/riff/riffListTests.ts new file mode 100644 index 00000000..6216ae07 --- /dev/null +++ b/test-unit/riff/riffListTests.ts @@ -0,0 +1,570 @@ +import * as Chai from "chai"; +import {suite, test} from "mocha-typescript"; +import {Mock} from "typemoq"; + +import RiffList from "../../src/riff/riffList"; +import TestFile from "../utilities/testFile"; +import {ByteVector, StringType} from "../../src/byteVector"; +import {File} from "../../src/File"; +import {Testers} from "../utilities/testers"; + +// Setup chai +const assert = Chai.assert; + +const data1 = ByteVector.fromString("foo", undefined, undefined, true); +const data2 = ByteVector.fromString("barbaz", undefined, undefined, true); +const data3 = ByteVector.fromString("buxfux", undefined, undefined, true); +const data4 = ByteVector.fromString("nan", undefined, undefined, false); +const data5 = ByteVector.fromString("234", undefined, undefined, false); +const sampleData = ByteVector.concatenate( + ByteVector.fromString("TXT1"), + ByteVector.fromUInt(data1.length, false), + data1, 0x00, + ByteVector.fromString("TXT1"), + ByteVector.fromUInt(data2.length, false), + data2, + ByteVector.fromString("TXT2"), + ByteVector.fromUInt(data3.length, false), + data3, + ByteVector.fromString("TXT3"), + ByteVector.fromUInt(data4.length, false), + data4, 0x00, + ByteVector.fromString("TXT3"), + ByteVector.fromUInt(data5.length, false), + data5, 0x00 + ); + +@suite class RiffList_ConstructorTests { + @test + public fromData_invalidValue() { + // Act / Assert + Testers.testTruthy((v: ByteVector) => RiffList.fromData(v)); + } + + @test + public fromData_emptyList() { + // Arrange + const data = ByteVector.fromSize(7); + + // Act + const list = RiffList.fromData(data); + + // Assert + assert.isOk(list); + assert.strictEqual(list.length, 0); + } + + @test + public fromData_listWithValues() { + // Act + const list = RiffList.fromData(sampleData); + + // Assert + this.verifySample(list); + } + + @test + public fromFile_invalidValue() { + // Arrange + const mockFile = Mock.ofType(); + mockFile.setup((f) => f.length).returns(() => 10); + + // Act / Assert + Testers.testTruthy((v: File) => RiffList.fromFile(v, 0, 0)); + Testers.testSafeUint((v) => RiffList.fromFile(mockFile.object, v, 0)); + Testers.testUint((v) => RiffList.fromFile(mockFile.object, 0, v)); + assert.throws(() => RiffList.fromFile(mockFile.object, 123, 5)); + } + + @test + public fromFile_emptyList() { + // Arrange + const data = ByteVector.fromSize(8); + const mockFile = TestFile.getFile(data); + + // Act + const list = RiffList.fromFile(mockFile, 1, 7); + + // Assert + assert.isOk(list); + assert.strictEqual(list.length, 0); + } + + @test + public fromFile_listWithValues() { + // Arrange + const data = ByteVector.concatenate( + ByteVector.fromSize(10), + sampleData + ); + const mockFile = TestFile.getFile(data); + + // Act + const list = RiffList.fromFile(mockFile, 10, sampleData.length); + + // Assert + this.verifySample(list); + } + + private verifySample(list: RiffList): void { + assert.isOk(list); + assert.strictEqual(list.length, 3); + + const txt1 = list.getValues("TXT1"); + assert.isOk(txt1); + assert.isTrue(ByteVector.equal(txt1[0], data1)); + assert.isTrue(ByteVector.equal(txt1[1], data2)); + + const txt2 = list.getValues("TXT2"); + assert.isOk(txt2); + assert.isTrue(ByteVector.equal(txt2[0], data3)); + + const txt3 = list.getValues("TXT3"); + assert.isOk(txt3); + assert.isTrue(ByteVector.equal(txt3[0], data4)); + assert.isTrue(ByteVector.equal(txt3[1], data5)); + } +} + +@suite class RiffList_MethodTests { + @test + public clear() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + list.clear(); + + // Assert + assert.strictEqual(list.length, 0); + } + + @test + public containsKey_keyExists() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.containsKey("TXT1"); + + // Assert + assert.isTrue(result); + } + + @test + public containsKey_keyDoesNotExist() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.containsKey("FUX "); + + // Assert + assert.isFalse(result); + } + + @test + public getValues_invalidKey() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act / Assert + Testers.testTruthy((v) => list.getValues(v)); + assert.throws(() => list.getValues("FOO")); + assert.throws(() => list.getValues("FOOOO")); + } + + @test + public getValues_keyExists() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.getValues("TXT2"); + + // Assert + assert.isOk(result); + assert.strictEqual(result.length, 1); + assert.isTrue(ByteVector.equal(result[0], data3)); + } + + @test + public getValues_keyDoesNotExist() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.getValues("FOO "); + + // Assert + assert.isOk(result); + assert.isEmpty(result); + } + + @test + public getValueAsStrings_invalidKey() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act / Assert + Testers.testTruthy((v) => list.getValuesAsStrings(v)); + assert.throws(() => list.getValuesAsStrings("FOO")); + assert.throws(() => list.getValuesAsStrings("FOOOO")); + } + + @test + public getValueAsStrings_keyExists() { + // Arrange + const strData1 = ByteVector.fromString("foobar", StringType.UTF16BE); + const strData2 = ByteVector.fromString("fuxbux", StringType.UTF16BE); + const data = ByteVector.concatenate( + ByteVector.fromString("TXT1"), + ByteVector.fromUInt(strData1.length, false), + strData1, + ByteVector.fromString("TXT1"), + ByteVector.fromUInt(strData2.length, false), + strData2, + ByteVector.fromString("TXT1"), + ByteVector.fromUInt(0, false) + ); + const list = RiffList.fromData(data); + + // Act + list.stringType = StringType.UTF16BE; + const result = list.getValuesAsStrings("TXT1"); + + // Assert + assert.strictEqual(list.stringType, StringType.UTF16BE); + assert.sameOrderedMembers(result, ["foobar", "fuxbux", ""]); + } + + @test + public getValueAsStrings_KeyDoesNotExist() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.getValuesAsStrings("FOOO"); + + // Assert + assert.isOk(result); + assert.isEmpty(result); + } + + @test + public getValueAsUint_invalidKey() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act / Assert + Testers.testTruthy((v) => list.getValueAsUint(v)); + assert.throws(() => list.getValueAsUint("FOO")); + assert.throws(() => list.getValueAsUint("FOOOO")); + } + + @test + public getValueAsUint_keyExists() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.getValueAsUint("TXT3"); + + // Assert + assert.strictEqual(result, 234); + } + + @test + public getValueAsUint_keyExistsButValueNotNumeric() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.getValueAsUint("TXT2"); + + // Assert + assert.strictEqual(result, 0); + } + + @test + public getValueAsUint_keyDoesNotExist() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.getValueAsUint("FOO "); + + // Assert + assert.strictEqual(result, 0); + } + + @test + public removeValue_invalidKey() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act / Assert + Testers.testTruthy((v) => list.removeValue(v)); + assert.throws(() => list.removeValue("FOO")); + assert.throws(() => list.removeValue("FOOOO")); + } + + @test + public removeValue_keyDoesNotExist() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act / Assert + list.removeValue("FOO1"); + + // Assert + assert.strictEqual(list.length, 3); + } + + @test + public removeValue_keyExists() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + list.removeValue("TXT3"); + + // Assert + assert.strictEqual(list.length, 2); + assert.isTrue(list.containsKey("TXT1")); + assert.isTrue(list.containsKey("TXT2")); + } + + @test + public render_hasValues() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.render(); + + // Assert + assert.isTrue(ByteVector.equal(result, sampleData)); + } + + @test + public render_noValues() { + // Arrange + const list = RiffList.fromData(ByteVector.empty()); + + // Act + const result = list.render(); + + // Assert + assert.isOk(result); + assert.isTrue(result.isEmpty); + } + + @test + public renderEnclosed_invalidId() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act/Assert + Testers.testTruthy((v) => list.renderEnclosed(v)); + assert.throws(() => list.renderEnclosed("FOO")); + assert.throws(() => list.renderEnclosed("FOOOO")); + } + + @test + public renderEnclosed_empty() { + // Arrange + const list = RiffList.fromData(ByteVector.empty()); + + // Act + const result = list.renderEnclosed("FOOO"); + + // Assert + assert.isOk(result); + assert.isTrue(result.isEmpty); + } + + @test + public renderEnclosed_hasValues() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + const result = list.renderEnclosed("FOOO"); + + // Assert + const expected = ByteVector.concatenate( + ByteVector.fromString("LIST"), + ByteVector.fromUInt(sampleData.length + 4, false), + ByteVector.fromString("FOOO"), + sampleData + ); + assert.isOk(result); + assert.isTrue(ByteVector.equal(result, expected)); + } + + @test + public setValueFromUint_invalidKey() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act / Assert + Testers.testTruthy((v) => list.setValueFromUint(v, 123)); + assert.throws(() => list.setValueFromUint("FOO", 123)); + assert.throws(() => list.setValueFromUint("FOOOO", 123)); + } + + @test + public setValueFromUint_invalidValues() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act / Assert + Testers.testUint((v) => list.setValueFromUint("FOOO", v)); + } + + @test + public setValueFromUint_keyExists() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + list.setValueFromUint("TXT1", 888); + + // Assert + assert.strictEqual(list.getValueAsUint("TXT1"), 888); + } + + @test + public setValueFromUint_keyDoesNotExist() { + // Arrange + const list = RiffList.fromData(sampleData); + const originalLength = list.length; + + // Act + list.setValueFromUint("NUM1", 888); + + // Assert + assert.strictEqual(list.length, originalLength + 1); + } + + @test + public setValueFromUint_removesValue() { + // Arrange + const list = RiffList.fromData(sampleData); + const originalLength = list.length; + + // Act + list.setValueFromUint("TXT1", 0); + + // Assert + assert.strictEqual(list.length, originalLength - 1); + assert.isEmpty(list.getValues("TXT1")); + } + + @test + public setValues_invalidKey() { + // Arrange + const list = RiffList.fromData(sampleData); + const data = ByteVector.empty(); + + // Act / Assert + Testers.testTruthy((v) => list.setValues(v, data)); + assert.throws(() => list.setValues("FOO", data)); + assert.throws(() => list.setValues("FOOOO", data)); + } + + @test + public setValues_keyDoesNotExist() { + // Arrange + const list = RiffList.fromData(sampleData); + const data = ByteVector.fromString("foobarbaz"); + const originalLength = list.length; + + // Act + list.setValues("FOOO", data, data); + + // Assert + assert.strictEqual(list.length, originalLength + 1); + assert.sameMembers(list.getValues("FOOO"), [data, data]); + } + + @test + public setValues_keyExists() { + // Arrange + const list = RiffList.fromData(sampleData); + const data = ByteVector.fromString("foobarbaz"); + + // Act + list.setValues("TXT1", data, data); + + // Assert + assert.sameMembers(list.getValues("TXT1"), [data, data]); + } + + @test + public setValues_removesValue() { + // Arrange + const list = RiffList.fromData(sampleData); + const originalLength = list.length; + + // Act + list.setValues("TXT1"); + + // Assert + assert.strictEqual(list.length, originalLength - 1); + assert.isEmpty(list.getValues("TXT1")); + } + + @test + public setValuesFromStrings_invalidKey() { + // Arrange + const list = RiffList.fromData(sampleData); + const data = ""; + + // Act / Assert + Testers.testTruthy((v) => list.setValuesFromStrings(v, data)); + assert.throws(() => list.setValuesFromStrings("FOO", data)); + assert.throws(() => list.setValuesFromStrings("FOOOO", data)); + } + + @test + public setValuesFromStrings_keyDoesNotExist() { + // Arrange + const list = RiffList.fromData(sampleData); + const originalLength = list.length; + + // Act + list.setValuesFromStrings("FOOO", "foo", "barbaz"); + + // Assert + assert.strictEqual(list.length, originalLength + 1); + assert.sameOrderedMembers(list.getValuesAsStrings("FOOO"), ["foo", "barbaz"]); + } + + @test + public setValuesFromStrings_keyExists() { + // Arrange + const list = RiffList.fromData(sampleData); + + // Act + list.setValuesFromStrings("TXT1", "fux", "buxqux"); + + // Assert + assert.sameOrderedMembers(list.getValuesAsStrings("TXT1"), ["fux", "buxqux"]); + } + + @test + public setValuesFromStrings_removesValue() { + // Arrange + const list = RiffList.fromData(sampleData); + const originalLength = list.length; + + // Act + list.setValuesFromStrings("TXT1"); + + // Assert + assert.strictEqual(list.length, originalLength - 1); + assert.isEmpty(list.getValues("TXT1")); + } +} From 6af9c70280c2d8d992183e824a1433d6a3f7bdf9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Jul 2021 16:25:14 -0400 Subject: [PATCH 05/10] Bump glob-parent from 5.1.1 to 5.1.2 (#33) Bumps [glob-parent](https://github.com/gulpjs/glob-parent) from 5.1.1 to 5.1.2. - [Release notes](https://github.com/gulpjs/glob-parent/releases) - [Changelog](https://github.com/gulpjs/glob-parent/blob/main/CHANGELOG.md) - [Commits](https://github.com/gulpjs/glob-parent/compare/v5.1.1...v5.1.2) --- updated-dependencies: - dependency-name: glob-parent dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bbe41a1..0e5bd9dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1689,9 +1689,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" From 29ae0adecd4eefe22f95ff8a7ce75370ae40160c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Jul 2021 16:32:51 -0400 Subject: [PATCH 06/10] Bump handlebars from 4.7.6 to 4.7.7 (#30) Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.7.6 to 4.7.7. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.7.6...v4.7.7) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e5bd9dc..e62525e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1748,9 +1748,9 @@ "dev": true }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", From 3624e7e94b852584969234e1efa4657a80e36613 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Jul 2021 16:38:29 -0400 Subject: [PATCH 07/10] Bump lodash from 4.17.19 to 4.17.21 (#28) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.21) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index e62525e3..7ded4509 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2355,9 +2355,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.flattendeep": { @@ -4322,14 +4322,6 @@ "shelljs": "^0.8.4", "shiki": "^0.9.2", "typedoc-default-themes": "^0.12.7" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } } }, "typedoc-default-themes": { From d6b77ed75962a9dcc5f0f977c1de84ac475312ed Mon Sep 17 00:00:00 2001 From: Benjamin Russell Date: Sun, 4 Jul 2021 17:07:48 -0500 Subject: [PATCH 08/10] Updating to latest test framework version --- .idea/runConfigurations/Tests__Unit.xml | 2 +- package-lock.json | 8814 ++++++++++++++--- package.json | 8 +- src/file.ts | 6 +- src/stream.ts | 10 +- test-integration/aac_fileTests.ts | 4 +- test-integration/aiff_fileTests.ts | 4 +- test-integration/ape_fileTests.ts | 4 +- test-integration/asf_fileTests.ts | 2 +- test-integration/avi_fileTests.ts | 2 +- test-integration/id3v1_fileTests.ts | 5 +- test-integration/id3v24_fileTests.ts | 4 +- test-integration/id3v2_fileTests.ts | 4 +- test-integration/mpeg_fileTest.ts | 2 +- test-integration/wav_fileTest.ts | 2 +- test-unit/aac/aacAudioHeaderTests.ts | 9 +- test-unit/aac/aacFileTests.ts | 10 - test-unit/aiff/aiffStreamHeaderTests.ts | 2 +- test-unit/ape/apeFileTests.ts | 10 - test-unit/ape/apeStreamHeaderTests.ts | 6 +- test-unit/ape/apeTagFooterTests.ts | 8 +- test-unit/ape/apeTagItemTests.ts | 6 +- test-unit/ape/apeTagTests.ts | 10 +- test-unit/asf/asfTagTests.ts | 2 +- .../asf/contentDescriptionObjectTests.ts | 2 +- test-unit/asf/descriptorBaseTests.ts | 2 +- .../extendedContentDescriptionObjectTests.ts | 2 +- test-unit/asf/filePropertiesObjectTests.ts | 2 +- test-unit/asf/headerExtensionObjectTests.ts | 2 +- test-unit/asf/headerObjectTests.ts | 2 +- test-unit/asf/metadataLibraryObjectTests.ts | 2 +- test-unit/asf/objectTests.ts | 2 +- test-unit/asf/paddingObjectTests.ts | 2 +- test-unit/asf/streamPropertiesObjectTests.ts | 2 +- test-unit/asf/unknownObjectTests.ts | 2 +- test-unit/byteVectorConstructorTests.ts | 6 +- test-unit/byteVectorConversionTests.ts | 2 +- test-unit/byteVectorStaticMethodTests.ts | 6 +- test-unit/byteVectorVoidMethodTests.ts | 6 +- test-unit/fileAbstractionTests.ts | 8 +- test-unit/fileTests.ts | 15 +- test-unit/id3v1/id3v1TagTests.ts | 4 +- test-unit/id3v2/attachmentsFrameTests.ts | 2 +- test-unit/id3v2/commentsFrameTests.ts | 8 +- test-unit/id3v2/eventTimeCodeFrameTests.ts | 8 +- test-unit/id3v2/frameConstructorTests.ts | 4 +- test-unit/id3v2/frameFactoryTests.ts | 6 +- test-unit/id3v2/frameIdentifiersTests.ts | 4 +- test-unit/id3v2/frameTests.ts | 4 +- test-unit/id3v2/id3v2TagTests.ts | 4 +- .../id3v2/musicCdIdentifierFrameTests.ts | 8 +- test-unit/id3v2/playCountFrameTests.ts | 8 +- test-unit/id3v2/popularimeterFrameTests.ts | 10 +- test-unit/id3v2/privateFrameTests.ts | 4 +- test-unit/id3v2/relativeVolumeFrameTests.ts | 8 +- test-unit/id3v2/syncDataTests.ts | 6 +- .../id3v2/synchronizedLyricsFrameTests.ts | 11 +- test-unit/id3v2/tagExtendedHeaderTests.ts | 6 +- test-unit/id3v2/tagFooterTests.ts | 8 +- test-unit/id3v2/tagHeaderTests.ts | 8 +- test-unit/id3v2/termsOfUseFrameTests.ts | 8 +- test-unit/id3v2/textInformationFrameTests.ts | 10 +- .../id3v2/uniqueFileIdentifierFrameTests.ts | 8 +- test-unit/id3v2/unknownFrameTests.ts | 8 +- .../id3v2/unsynchronizedLyricsFrameTests.ts | 8 +- test-unit/id3v2/urlLinkFrameTests.ts | 8 +- .../id3v2/userTextInformationFrameTests.ts | 8 +- test-unit/id3v2/userUrlLinkFrameTests.ts | 8 +- test-unit/mpeg/mpegAudioHeaderTests.ts | 16 +- test-unit/mpeg/mpegVideoHeaderTests.ts | 6 +- test-unit/mpeg/vbriHeaderTests.ts | 6 +- test-unit/mpeg/xingHeaderTests.ts | 6 +- test-unit/pictureLazyTests.ts | 8 +- test-unit/pictureTests.ts | 4 +- test-unit/riff/aviHeaderListTests.ts | 2 +- test-unit/riff/aviStreamHeaderTests.ts | 2 +- test-unit/riff/aviStreamTests.ts | 2 +- test-unit/riff/divxTagTests.ts | 2 +- test-unit/riff/infoTagTests.ts | 2 +- test-unit/riff/movieIdTagTests.ts | 2 +- test-unit/riff/riffBitmapInfoHeaderTests.ts | 2 +- test-unit/riff/riffListTests.ts | 2 +- test-unit/riff/riffWaveFormatExTests.ts | 6 +- test-unit/streamTest.ts | 6 +- test-unit/utilities/propertyTests.ts | 2 - test-unit/utilities/testStream.ts | 9 +- 86 files changed, 7402 insertions(+), 1871 deletions(-) delete mode 100644 test-unit/aac/aacFileTests.ts delete mode 100644 test-unit/ape/apeFileTests.ts diff --git a/.idea/runConfigurations/Tests__Unit.xml b/.idea/runConfigurations/Tests__Unit.xml index f40d5ea4..ec8b90b4 100644 --- a/.idea/runConfigurations/Tests__Unit.xml +++ b/.idea/runConfigurations/Tests__Unit.xml @@ -5,7 +5,7 @@ $PROJECT_DIR$/node_modules/mocha $PROJECT_DIR$ true - mocha-typescript + bdd DIRECTORY $PROJECT_DIR$/test-unit diff --git a/package-lock.json b/package-lock.json index 7ded4509..b27ea47f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,42 +1,6030 @@ { "name": "node-taglib-sharp", "version": "3.3.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "3.3.1", + "license": "LGPL-2.1-or-later", + "dependencies": { + "arraybuffer-to-buffer": "^0.0.5", + "dateformat": "^3.0.3", + "iconv-lite": "^0.4.24", + "os-locale": "^4.0.0", + "uuid": "^8.3.2" + }, + "devDependencies": { + "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@testdeck/mocha": "^0.1.2", + "@types/chai": "^4.1.7", + "@types/chai-as-promised": "^7.1.0", + "@types/dateformat": "^3.0.0", + "@types/stream-buffers": "^3.0.2", + "@types/uuid": "^8.3.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "coveralls": "^3.0.9", + "madge": "^4.0.1", + "mocha": "^7.0.0-esm1", + "nyc": "^15.1.0", + "source-map-support": "^0.5.16", + "stream-buffers": "^3.0.2", + "ts-node": "^8.5.4", + "tslint": "^5.13.1", + "typedoc": "^0.21.2", + "typedoc-plugin-markdown": "^3.10.2", + "typemoq": "^2.1.0", + "typescript": "^4.1.6" + }, + "engines": { + "node": ">=12.16.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/nyc-config-typescript": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.1.tgz", + "integrity": "sha512-/gz6LgVpky205LuoOfwEZmnUtaSmdk0QIMcNFj9OvxhiMhPpKftMgZmGN7jNj7jR+lr8IB1Yks3QSSSNSxfoaQ==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "nyc": ">=15", + "source-map-support": "*", + "ts-node": "*" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@testdeck/core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@testdeck/core/-/core-0.1.2.tgz", + "integrity": "sha512-rggcFQqSejqtkqK1JcwZE/utD4oNsM1JMHwrYxH1PKYx0uL2cMs0Q4zMVLKw0oacIASCfkIUSdXx7rDNdCDlvA==", + "dev": true + }, + "node_modules/@testdeck/mocha": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@testdeck/mocha/-/mocha-0.1.2.tgz", + "integrity": "sha512-yn3OkFUlO9EkdBkDV08bPV0r26U2FC/8KvU9FdiS0ligOsjB5Ry4sp3eUQJAFxjrGJBpih0t7rZ/GzdsgCv/EQ==", + "dev": true, + "dependencies": { + "@testdeck/core": "^0.1.2" + }, + "bin": { + "testdeck-watch": "bin/watch" + } + }, + "node_modules/@types/chai": { + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.19.tgz", + "integrity": "sha512-jRJgpRBuY+7izT7/WNXP/LsMO9YonsstuL+xuvycDyESpoDoIAsMd7suwpB4h9oEWB+ZlPTqJJ8EHomzNhwTPQ==", + "dev": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", + "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/dateformat": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/dateformat/-/dateformat-3.0.1.tgz", + "integrity": "sha512-KlPPdikagvL6ELjWsljbyDIPzNCeliYkqRpI+zea99vBBbCIA5JNshZAwQKTON139c87y9qvTFVgkFd14rtS4g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz", + "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==", + "dev": true + }, + "node_modules/@types/stream-buffers": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz", + "integrity": "sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", + "dev": true + }, + "node_modules/@typescript-eslint/types": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.1.tgz", + "integrity": "sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz", + "integrity": "sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/visitor-keys": "4.28.1", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz", + "integrity": "sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.28.1", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", + "dev": true + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arraybuffer-to-buffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/arraybuffer-to-buffer/-/arraybuffer-to-buffer-0.0.5.tgz", + "integrity": "sha512-0trREOEceZLcLWDwAStIoEARDLXw8OZsUgot15FQkHT+ey6MG54yt4aWWsAaZfI55BDEIeAHd2Ua7K3I1pwlIQ==" + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/ast-module-types": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", + "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001242", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001242.tgz", + "integrity": "sha512-KvNuZ/duufelMB3w2xtf9gEWCSxJwUgoxOx5b6ScLXC4kPc9xsczUVCPrQU26j5kOsHM4pSUL54tAZt5THQKug==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" + } + }, + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/coveralls": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", + "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" + }, + "bin": { + "coveralls": "bin/coveralls.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decomment": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.4.tgz", + "integrity": "sha512-8eNlhyI5cSU4UbBlrtagWpR03dqXcE5IR9zpe7PnO6UzReXDskucsD8usgrzUmQ6qJ3N82aws/p/mu/jqbURWw==", + "dev": true, + "dependencies": { + "esprima": "4.0.1" + }, + "engines": { + "node": ">=6.4", + "npm": ">=2.15" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dependency-tree": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-8.1.1.tgz", + "integrity": "sha512-bl5U16VQpaYxD0xvcnCH/dTctCiWnsVWymh9dNjbm4T00Hm21flu1VLnNueKCj7+3uusbcJhKKKtiWrpU0I+Nw==", + "dev": true, + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "filing-cabinet": "^3.0.0", + "precinct": "^8.0.0", + "typescript": "^3.9.7" + }, + "bin": { + "dependency-tree": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + } + }, + "node_modules/dependency-tree/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/dependency-tree/node_modules/precinct": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.1.0.tgz", + "integrity": "sha512-oeZBR9IdER42Ef6Rz11z1oOUqicsI5J1Qffj6tYghKLhxN2UnHy7uE1axxNr0VZRevPK2HWkROk36uXrbJwHFA==", + "dev": true, + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "detective-amd": "^3.0.1", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.2.0", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^7.0.0", + "module-definition": "^3.3.1", + "node-source-walk": "^4.2.0" + }, + "bin": { + "precinct": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + } + }, + "node_modules/dependency-tree/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/detective-amd": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.0.tgz", + "integrity": "sha512-G7wGWT6f0VErjUkE2utCm7IUshT7nBh7aBBH2VBOiY9Dqy2DMens5iiOvYCuhstoIxRKLrnOvVAz4/EyPIAjnw==", + "dev": true, + "dependencies": { + "ast-module-types": "^2.7.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^3.0.0", + "node-source-walk": "^4.0.0" + }, + "bin": { + "detective-amd": "bin/detective-amd.js" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-cjs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.1.tgz", + "integrity": "sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==", + "dev": true, + "dependencies": { + "ast-module-types": "^2.4.0", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-es6": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.0.tgz", + "integrity": "sha512-fSpNY0SLER7/sVgQZ1NxJPwmc9uCTzNgdkQDhAaj8NPYwr7Qji9QBcmbNvtMCnuuOGMuKn3O7jv0An+/WRWJZQ==", + "dev": true, + "dependencies": { + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-less": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", + "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", + "dev": true, + "dependencies": { + "debug": "^4.0.0", + "gonzales-pe": "^4.2.3", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-postcss": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", + "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "is-url": "^1.2.4", + "postcss": "^8.1.7", + "postcss-values-parser": "^2.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/detective-sass": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.1.tgz", + "integrity": "sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "gonzales-pe": "^4.2.3", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-scss": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.1.tgz", + "integrity": "sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "gonzales-pe": "^4.2.3", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-stylus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.0.tgz", + "integrity": "sha1-UK7n24uruZA4HwEMY/q7pbWOVM0=", + "dev": true + }, + "node_modules/detective-typescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.0.tgz", + "integrity": "sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "^4.8.2", + "ast-module-types": "^2.7.1", + "node-source-walk": "^4.2.0", + "typescript": "^3.9.7" + }, + "engines": { + "node": "^10.13 || >=12.0.0" + } + }, + "node_modules/detective-typescript/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.766", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.766.tgz", + "integrity": "sha512-u2quJ862q9reRKh/je3GXis3w38+RoXH1J9N3XjtsS6NzmUAosNsyZgUVFZPN/ZlJ3v6T0rTyZR3q/J5c6Sy5w==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filing-cabinet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.0.0.tgz", + "integrity": "sha512-o8Qac5qxZ1uVidR4Sd7ZQbbqObFZlqXU4xu1suAYg9PQPcQFNTzOmxQa/MehIDMgIvXHTb42mWPNV9l3eHBPSw==", + "dev": true, + "dependencies": { + "app-module-path": "^2.2.0", + "commander": "^2.20.3", + "debug": "^4.3.1", + "decomment": "^0.9.3", + "enhanced-resolve": "^5.3.2", + "is-relative-path": "^1.0.2", + "module-definition": "^3.3.1", + "module-lookup-amd": "^7.0.0", + "resolve": "^1.19.0", + "resolve-dependency-path": "^2.0.0", + "sass-lookup": "^3.0.0", + "stylus-lookup": "^3.0.1", + "typescript": "^3.9.7" + }, + "bin": { + "filing-cabinet": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/filing-cabinet/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/filing-cabinet/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-amd-module-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz", + "integrity": "sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==", + "dev": true, + "dependencies": { + "ast-module-types": "^2.3.2", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/graphviz": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", + "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", + "dev": true, + "dependencies": { + "temp": "~0.4.0" + }, + "engines": { + "node": ">=0.6.8" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" + } + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", + "integrity": "sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY=", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "dependencies": { + "invert-kv": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true, + "bin": { + "lcov-parse": "bin/cli.js" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "node_modules/log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true, + "engines": { + "node": ">=0.8.6" + } + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/madge": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/madge/-/madge-4.0.2.tgz", + "integrity": "sha512-l5bnA2dvyk0azLKDbOTCI+wDZ6nB007PhvPdmiYlPmqwVi49JPbhQrH/t4u8E6Akp3gwji1GZuA+v/F5q6yoWQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "commander": "^6.2.1", + "commondir": "^1.0.1", + "debug": "^4.0.1", + "dependency-tree": "^8.0.0", + "detective-amd": "^3.0.1", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.1.0", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^7.0.0", + "graphviz": "0.0.9", + "ora": "^5.1.0", + "pluralize": "^8.0.0", + "precinct": "^7.0.0", + "pretty-ms": "^7.0.0", + "rc": "^1.2.7", + "typescript": "^3.9.5", + "walkdir": "^0.4.1" + }, + "bin": { + "madge": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/pahen" + } + }, + "node_modules/madge/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/marked": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", + "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/mem": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", + "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^2.1.0", + "p-is-promise": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, + "dependencies": { + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/module-definition": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.3.1.tgz", + "integrity": "sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A==", + "dev": true, + "dependencies": { + "ast-module-types": "^2.7.1", + "node-source-walk": "^4.0.0" + }, + "bin": { + "module-definition": "bin/module-definition.js" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/module-lookup-amd": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz", + "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==", + "dev": true, + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0", + "glob": "^7.1.6", + "requirejs": "^2.3.5", + "requirejs-config-file": "^4.0.0" + }, + "bin": { + "lookup-amd": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/module-lookup-amd/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/module-lookup-amd/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "node_modules/node-source-walk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz", + "integrity": "sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nyc/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onigasm": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", + "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", + "dev": true, + "dependencies": { + "lru-cache": "^5.1.1" + } + }, + "node_modules/onigasm/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/onigasm/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-locale": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-4.0.0.tgz", + "integrity": "sha512-HsSR1+2l6as4Wp2SGZxqLnuFHxVvh1Ir9pvZxyujsC13egZVe7P0YeBLN0ijQzM/twrO5To3ia3jzBXAvpMTEA==", + "dependencies": { + "execa": "^1.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "dev": true, + "dependencies": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=6.14.4" + } + }, + "node_modules/postinstall-build": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz", + "integrity": "sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==", + "deprecated": "postinstall-build's behavior is now built into npm! You should migrate off of postinstall-build and use the new `prepare` lifecycle script with npm 5.0.0 or greater.", + "dev": true, + "bin": { + "postinstall-build": "cli.js" + } + }, + "node_modules/precinct": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-7.1.0.tgz", + "integrity": "sha512-I1RkW5PX51/q6Xl39//D7x9NgaKNGHpR5DCNaoxP/b2+KbzzXDNhauJUMV17KSYkJA41CSpwYUPRtRoNxbshWA==", + "dev": true, + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "detective-amd": "^3.0.1", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.2.0", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^6.0.0", + "module-definition": "^3.3.1", + "node-source-walk": "^4.2.0" + }, + "bin": { + "precinct": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + } + }, + "node_modules/precinct/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/precinct/node_modules/detective-typescript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-6.0.0.tgz", + "integrity": "sha512-vTidcSDK3QostdbrH2Rwf9FhvrgJ4oIaVw5jbolgruTejexk6nNa9DShGpuS8CFVDb1IP86jct5BaZt1wSxpkA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "^4.8.2", + "ast-module-types": "^2.7.1", + "node-source-walk": "^4.2.0", + "typescript": "^3.9.7" + }, + "engines": { + "node": "^10.13 || >=12.0.0" + } + }, + "node_modules/precinct/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true, + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/requirejs-config-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", + "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.0", + "stringify-object": "^3.2.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dependency-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", + "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass-lookup": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", + "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", + "dev": true, + "dependencies": { + "commander": "^2.16.0" + }, + "bin": { + "sass-lookup": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sass-lookup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shiki": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.5.tgz", + "integrity": "sha512-XFn+rl3wIowDjzdr5DlHoHgQphXefgUTs2bNp/bZu4WF9gTrTLnKwio3f28VjiFG6Jpip7yQn/p4mMj6OrjrtQ==", + "dev": true, + "dependencies": { + "json5": "^2.2.0", + "onigasm": "^2.2.5", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylus-lookup": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", + "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", + "dev": true, + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0" + }, + "bin": { + "stylus-lookup": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/stylus-lookup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", + "integrity": "sha1-ZxrWPVe+D+nXKUZks/xABjZnimA=", + "dev": true, + "engines": [ + "node >=0.4.0" + ] + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" + } + }, + "node_modules/tslint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/tslint/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/tslint/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslint/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + } + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.2.tgz", + "integrity": "sha512-SR1ByJB3USg+jxoxwzMRP07g/0f/cQUE5t7gOh1iTUyjTPyJohu9YSKRlK+MSXXqlhIq+m0jkEHEG5HoY7/Adg==", + "dev": true, + "dependencies": { + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lodash": "^4.17.21", + "lunr": "^2.3.9", + "marked": "^2.1.1", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.20.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x" + } + }, + "node_modules/typedoc-default-themes": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.10.2.tgz", + "integrity": "sha512-eAV7fuCymdbUIk2P3jjehUWG0VE3YSr/qGGYAHUEBTrRZMuFxS/rYrooF0PPabBUdbprL4BKV8HaP7oed12T2Q==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "engines": { + "node": ">= 12.20.0" + }, + "peerDependencies": { + "typedoc": ">=0.21.0" + } + }, + "node_modules/typedoc/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typemoq": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typemoq/-/typemoq-2.1.0.tgz", + "integrity": "sha512-DtRNLb7x8yCTv/KHlwes+NI+aGb4Vl1iPC63Hhtcvk1DpxSAZzKWQv0RQFY0jX2Uqj0SDBNl8Na4e6MV6TNDgw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "circular-json": "^0.3.1", + "lodash": "^4.17.4", + "postinstall-build": "^5.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/walkdir": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + }, "dependencies": { "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, + "@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "dev": true + }, "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -46,12 +6034,12 @@ } }, "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dev": true, "requires": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -64,177 +6052,255 @@ } } }, + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", "dev": true }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, @@ -251,12 +6317,6 @@ "resolve-from": "^5.0.0" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -267,16 +6327,6 @@ "path-exists": "^4.0.0" } }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -286,15 +6336,6 @@ "p-locate": "^4.1.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -304,12 +6345,6 @@ "p-limit": "^2.2.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -328,154 +6363,122 @@ } }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, + "@testdeck/core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@testdeck/core/-/core-0.1.2.tgz", + "integrity": "sha512-rggcFQqSejqtkqK1JcwZE/utD4oNsM1JMHwrYxH1PKYx0uL2cMs0Q4zMVLKw0oacIASCfkIUSdXx7rDNdCDlvA==", + "dev": true + }, + "@testdeck/mocha": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@testdeck/mocha/-/mocha-0.1.2.tgz", + "integrity": "sha512-yn3OkFUlO9EkdBkDV08bPV0r26U2FC/8KvU9FdiS0ligOsjB5Ry4sp3eUQJAFxjrGJBpih0t7rZ/GzdsgCv/EQ==", + "dev": true, + "requires": { + "@testdeck/core": "^0.1.2" + } + }, "@types/chai": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz", - "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==", + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.19.tgz", + "integrity": "sha512-jRJgpRBuY+7izT7/WNXP/LsMO9YonsstuL+xuvycDyESpoDoIAsMd7suwpB4h9oEWB+ZlPTqJJ8EHomzNhwTPQ==", "dev": true }, "@types/chai-as-promised": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz", - "integrity": "sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", + "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", "dev": true, "requires": { "@types/chai": "*" } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, "@types/dateformat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/dateformat/-/dateformat-3.0.0.tgz", - "integrity": "sha512-4N/J/ISasvUYOPnr5gfYRp+YYmPhHqkAyUgP9T9/HQHFoIfjU53lt3jaX67VuTvhpF5WsyNlCcEFbpI3spdxEA==", - "dev": true - }, - "@types/mocha": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz", - "integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/dateformat/-/dateformat-3.0.1.tgz", + "integrity": "sha512-KlPPdikagvL6ELjWsljbyDIPzNCeliYkqRpI+zea99vBBbCIA5JNshZAwQKTON139c87y9qvTFVgkFd14rtS4g==", "dev": true }, "@types/node": { - "version": "11.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.10.4.tgz", - "integrity": "sha512-wa09itaLE8L705aXd8F80jnFpxz3Y1/KRHfKsYL2bPc0XF+wEWu8sR9n5bmeu8Ba1N9z2GRNzm/YdHcghLkLKg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz", + "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==", "dev": true }, "@types/stream-buffers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha1-tzv8zq457LJZdQtE7zijbPwg43A=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz", + "integrity": "sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w==", "dev": true, "requires": { "@types/node": "*" } }, "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", "dev": true }, "@typescript-eslint/types": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.17.0.tgz", - "integrity": "sha512-RN5z8qYpJ+kXwnLlyzZkiJwfW2AY458Bf8WqllkondQIcN2ZxQowAToGSd9BlAUZDB5Ea8I6mqL2quGYCLT+2g==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.1.tgz", + "integrity": "sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.17.0.tgz", - "integrity": "sha512-lRhSFIZKUEPPWpWfwuZBH9trYIEJSI0vYsrxbvVvNyIUDoKWaklOAelsSkeh3E2VBSZiNe9BZ4E5tYBZbUczVQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz", + "integrity": "sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.17.0", - "@typescript-eslint/visitor-keys": "4.17.0", - "debug": "^4.1.1", - "globby": "^11.0.1", + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/visitor-keys": "4.28.1", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.17.0.tgz", - "integrity": "sha512-WfuMN8mm5SSqXuAr9NM+fItJ0SVVphobWYkWOwQ1odsfC014Vdxk/92t4JwS1Q6fCA/ABfCKpa3AVtpUKTNKGQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz", + "integrity": "sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.17.0", + "@typescript-eslint/types": "4.28.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -490,12 +6493,12 @@ } }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -508,21 +6511,24 @@ "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -551,9 +6557,9 @@ "dev": true }, "arg": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", - "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { @@ -609,12 +6615,6 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -622,41 +6622,15 @@ "dev": true }, "aws4": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", - "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - } - } - }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { @@ -675,9 +6649,9 @@ } }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bl": { @@ -716,6 +6690,19 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -748,29 +6735,28 @@ "make-dir": "^3.0.0", "package-hash": "^4.0.0", "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001242", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001242.tgz", + "integrity": "sha512-KvNuZ/duufelMB3w2xtf9gEWCSxJwUgoxOx5b6ScLXC4kPc9xsczUVCPrQU26j5kOsHM4pSUL54tAZt5THQKug==", "dev": true }, "caseless": { @@ -780,16 +6766,16 @@ "dev": true }, "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.1.0", + "pathval": "^1.1.1", "type-detect": "^4.0.5" } }, @@ -803,34 +6789,13 @@ } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "check-error": { @@ -877,35 +6842,46 @@ } }, "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", "dev": true }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -916,25 +6892,19 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colorette": { @@ -943,12 +6913,6 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -959,9 +6923,9 @@ } }, "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, "commondir": { @@ -977,9 +6941,9 @@ "dev": true }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -992,34 +6956,16 @@ "dev": true }, "coveralls": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", - "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", + "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", "dev": true, "requires": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.88.0" - }, - "dependencies": { - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } + "minimist": "^1.2.5", + "request": "^2.88.2" } }, "cross-spawn": { @@ -1032,6 +6978,13 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "dashdash": { @@ -1049,9 +7002,9 @@ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -1064,9 +7017,9 @@ "dev": true }, "decomment": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.3.tgz", - "integrity": "sha512-5skH5BfUL3n09RDmMVaHS1QGCiZRnl2nArUwmsE9JRY93Ueh3tihYl5wIrDdAuXnoFhxVis/DmRWREO2c6DG3w==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.4.tgz", + "integrity": "sha512-8eNlhyI5cSU4UbBlrtagWpR03dqXcE5IR9zpe7PnO6UzReXDskucsD8usgrzUmQ6qJ3N82aws/p/mu/jqbURWw==", "dev": true, "requires": { "esprima": "4.0.1" @@ -1127,26 +7080,61 @@ "dev": true }, "dependency-tree": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-8.0.0.tgz", - "integrity": "sha512-zagnV3jgizudEWY3FIFkGCrRr3+GukSMLlw1snIWAOL2beceC22hBXdeNjCnnfPZvbHIPB9DvacSCfD+IoOG3w==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-8.1.1.tgz", + "integrity": "sha512-bl5U16VQpaYxD0xvcnCH/dTctCiWnsVWymh9dNjbm4T00Hm21flu1VLnNueKCj7+3uusbcJhKKKtiWrpU0I+Nw==", "dev": true, "requires": { "commander": "^2.20.3", "debug": "^4.3.1", "filing-cabinet": "^3.0.0", - "precinct": "^7.0.0", + "precinct": "^8.0.0", "typescript": "^3.9.7" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "precinct": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.1.0.tgz", + "integrity": "sha512-oeZBR9IdER42Ef6Rz11z1oOUqicsI5J1Qffj6tYghKLhxN2UnHy7uE1axxNr0VZRevPK2HWkROk36uXrbJwHFA==", + "dev": true, + "requires": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "detective-amd": "^3.0.1", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.2.0", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^7.0.0", + "module-definition": "^3.3.1", + "node-source-walk": "^4.2.0" + } + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + } } }, "detective-amd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.0.1.tgz", - "integrity": "sha512-vJgluSKkPyo+/McW9hzwmZwY1VPA3BS0VS1agdpPAWAhr65HwC1ox4Ig82rVfGYDYCa4GcKQON5JWBk++2Kf1Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.0.tgz", + "integrity": "sha512-G7wGWT6f0VErjUkE2utCm7IUshT7nBh7aBBH2VBOiY9Dqy2DMens5iiOvYCuhstoIxRKLrnOvVAz4/EyPIAjnw==", "dev": true, "requires": { "ast-module-types": "^2.7.0", - "escodegen": "^1.8.0", + "escodegen": "^2.0.0", "get-amd-module-type": "^3.0.0", "node-source-walk": "^4.0.0" } @@ -1222,15 +7210,23 @@ "dev": true }, "detective-typescript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-6.0.0.tgz", - "integrity": "sha512-vTidcSDK3QostdbrH2Rwf9FhvrgJ4oIaVw5jbolgruTejexk6nNa9DShGpuS8CFVDb1IP86jct5BaZt1wSxpkA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.0.tgz", + "integrity": "sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==", "dev": true, "requires": { "@typescript-eslint/typescript-estree": "^4.8.2", "ast-module-types": "^2.7.1", "node-source-walk": "^4.2.0", "typescript": "^3.9.7" + }, + "dependencies": { + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + } } }, "diff": { @@ -1258,6 +7254,12 @@ "safer-buffer": "^2.1.0" } }, + "electron-to-chromium": { + "version": "1.3.766", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.766.tgz", + "integrity": "sha512-u2quJ862q9reRKh/je3GXis3w38+RoXH1J9N3XjtsS6NzmUAosNsyZgUVFZPN/ZlJ3v6T0rTyZR3q/J5c6Sy5w==", + "dev": true + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -1265,17 +7267,17 @@ "dev": true }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", - "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -1283,22 +7285,41 @@ } }, "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "es-to-primitive": { @@ -1318,6 +7339,12 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1325,22 +7352,22 @@ "dev": true }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "esprima": { @@ -1350,15 +7377,15 @@ "dev": true }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "execa": { @@ -1373,6 +7400,13 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + } } }, "extend": { @@ -1388,23 +7422,22 @@ "dev": true }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -1420,9 +7453,9 @@ "dev": true }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -1447,6 +7480,20 @@ "sass-lookup": "^3.0.0", "stylus-lookup": "^3.0.1", "typescript": "^3.9.7" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + } } }, "fill-range": { @@ -1467,38 +7514,21 @@ "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "^3.0.0" } }, "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", "dev": true, "requires": { "is-buffer": "~2.0.3" @@ -1581,23 +7611,11 @@ } }, "fromentries": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.1.tgz", - "integrity": "sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1618,9 +7636,9 @@ "dev": true }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-amd-module-type": { @@ -1634,9 +7652,9 @@ } }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-func-name": { @@ -1645,6 +7663,17 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -1704,9 +7733,9 @@ "dev": true }, "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -1727,9 +7756,9 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "graphviz": { @@ -1767,12 +7796,12 @@ "dev": true }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -1785,43 +7814,32 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "hasha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz", - "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "requires": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - } } }, "he": { @@ -1902,21 +7920,21 @@ "dev": true }, "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "invert-kv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.0.tgz", - "integrity": "sha512-JzF8q2BeZA1ZkE3XROwRpoMQ9ObMgTtp0JH8EXewlbkikuOj2GPLIpUipdO+VL8QsTr2teAJD02EFGGL5cO7uw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" + }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true }, "is-binary-path": { "version": "2.1.0", @@ -1927,31 +7945,40 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true }, "is-callable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.1.tgz", - "integrity": "sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true }, "is-extglob": { @@ -1981,12 +8008,24 @@ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", @@ -1994,12 +8033,13 @@ "dev": true }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, "is-regexp": { @@ -2015,17 +8055,24 @@ "dev": true }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-typedarray": { @@ -2034,6 +8081,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -2115,16 +8168,7 @@ "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" + "which": "^2.0.1" } }, "path-key": { @@ -2133,12 +8177,6 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2180,38 +8218,6 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "istanbul-lib-source-maps": { @@ -2236,15 +8242,15 @@ } }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -2282,30 +8288,12 @@ "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" } }, "jsprim": { @@ -2321,9 +8309,9 @@ } }, "lcid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.0.0.tgz", - "integrity": "sha512-cT68NXBqcByQPcYCoMArX8SI5SuzOTjF7nibqHlf24K01zYbFifLHaacZi8Ye3dvmBP9XaatbRO8uXM6YPHlSg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", "requires": { "invert-kv": "^3.0.0" } @@ -2345,12 +8333,12 @@ } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, @@ -2379,16 +8367,67 @@ "dev": true, "requires": { "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, "lunr": { @@ -2398,9 +8437,9 @@ "dev": true }, "madge": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/madge/-/madge-4.0.1.tgz", - "integrity": "sha512-bcZDGa+cweRJ0XFCWaVlPTJKw2lB+EBBhUsBOqGv84jvlC6G1syKxCiS15+KBarwsVXNEtEEAs30r7EYn4ccNw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/madge/-/madge-4.0.2.tgz", + "integrity": "sha512-l5bnA2dvyk0azLKDbOTCI+wDZ6nB007PhvPdmiYlPmqwVi49JPbhQrH/t4u8E6Akp3gwji1GZuA+v/F5q6yoWQ==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -2416,7 +8455,7 @@ "detective-sass": "^3.0.1", "detective-scss": "^2.0.1", "detective-stylus": "^1.0.0", - "detective-typescript": "^6.0.0", + "detective-typescript": "^7.0.0", "graphviz": "0.0.9", "ora": "^5.1.0", "pluralize": "^8.0.0", @@ -2427,74 +8466,35 @@ "walkdir": "^0.4.1" }, "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + } + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "map-age-cleaner": { @@ -2506,9 +8506,9 @@ } }, "marked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.0.tgz", - "integrity": "sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", + "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", "dev": true }, "mem": { @@ -2528,28 +8528,28 @@ "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true }, "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, "requires": { - "mime-db": "1.42.0" + "mime-db": "1.48.0" } }, "mimic-fn": { @@ -2613,38 +8613,6 @@ "yargs-unparser": "1.6.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -2654,19 +8622,10 @@ "ms": "^2.1.1" } }, - "find-up": { + "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "js-yaml": { @@ -2679,72 +8638,12 @@ "esprima": "^4.0.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, "supports-color": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", @@ -2753,60 +8652,9 @@ "requires": { "has-flag": "^3.0.0" } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, - "mocha-typescript": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/mocha-typescript/-/mocha-typescript-1.1.17.tgz", - "integrity": "sha512-Ge6pCQkZumkkhxVNdAf3JxunskShgaynCb30HYD7TT1Yhog/7NW2+6w5RcRHI+nuQrCMTX6z1+qf2pD8qwCoQA==", - "dev": true, - "requires": { - "@types/mocha": "^5.2.0", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "yargs": "^11.0.0" - } - }, "module-definition": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.3.1.tgz", @@ -2830,10 +8678,16 @@ "requirejs-config-file": "^4.0.0" }, "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2852,6 +8706,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -2890,6 +8750,12 @@ "process-on-spawn": "^1.0.0" } }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, "node-source-walk": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz", @@ -2913,12 +8779,6 @@ "path-key": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -2950,32 +8810,10 @@ "rimraf": "^3.0.0", "signal-exit": "^3.0.2", "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -2987,21 +8825,6 @@ "wrap-ansi": "^6.2.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3018,16 +8841,10 @@ "path-exists": "^4.0.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3053,24 +8870,6 @@ "p-locate": "^4.1.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -3080,34 +8879,16 @@ "p-limit": "^2.2.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -3115,15 +8896,6 @@ "strip-ansi": "^6.0.0" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -3173,9 +8945,9 @@ "dev": true }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true }, "object-keys": { @@ -3197,13 +8969,14 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "es-abstract": "^1.18.0-next.2" } }, "once": { @@ -3264,92 +9037,30 @@ } }, "ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "requires": { - "bl": "^4.0.3", + "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } } } @@ -3380,21 +9091,21 @@ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, "p-map": { @@ -3407,9 +9118,9 @@ } }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "package-hash": { @@ -3448,9 +9159,9 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { @@ -3460,9 +9171,9 @@ "dev": true }, "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "performance-now": { @@ -3472,9 +9183,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pkg-dir": { @@ -3505,15 +9216,6 @@ "p-locate": "^4.1.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -3523,12 +9225,6 @@ "p-limit": "^2.2.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3544,22 +9240,14 @@ "dev": true }, "postcss": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", - "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "dev": true, "requires": { "colorette": "^1.2.2", "nanoid": "^3.1.23", "source-map-js": "^0.6.2" - }, - "dependencies": { - "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true - } } }, "postcss-values-parser": { @@ -3598,6 +9286,32 @@ "detective-typescript": "^6.0.0", "module-definition": "^3.3.1", "node-source-walk": "^4.2.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "detective-typescript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-6.0.0.tgz", + "integrity": "sha512-vTidcSDK3QostdbrH2Rwf9FhvrgJ4oIaVw5jbolgruTejexk6nNa9DShGpuS8CFVDb1IP86jct5BaZt1wSxpkA==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "^4.8.2", + "ast-module-types": "^2.7.1", + "node-source-walk": "^4.2.0", + "typescript": "^3.9.7" + } + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + } } }, "prelude-ls": { @@ -3607,9 +9321,9 @@ "dev": true }, "pretty-ms": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.0.tgz", - "integrity": "sha512-J3aPWiC5e9ZeZFuSeBraGxSkGMOvulSWsxDByOcbD1Pr75YL3LSNIKIb52WXbCLE1sS5s4inBBbryjF4Y05Ceg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, "requires": { "parse-ms": "^2.1.0" @@ -3630,16 +9344,10 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "pump": { @@ -3664,9 +9372,9 @@ "dev": true }, "queue-microtask": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", - "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "rc": { @@ -3679,14 +9387,6 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, "readable-stream": { @@ -3709,15 +9409,6 @@ "picomatch": "^2.0.4" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -3728,9 +9419,9 @@ } }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -3740,7 +9431,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -3750,7 +9441,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, @@ -3770,9 +9461,9 @@ "dev": true }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "requirejs": { @@ -3865,12 +9556,24 @@ "dev": true, "requires": { "commander": "^2.16.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "set-blocking": { "version": "2.0.0", @@ -3891,31 +9594,21 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, "shiki": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.2.tgz", - "integrity": "sha512-BjUCxVbxMnvjs8jC4b+BQ808vwjJ9Q8NtLqPwXShZ307HdXiDFYP968ORSVfaTNNSWYDBYdMnVKJ0fYNsoZUBA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.5.tgz", + "integrity": "sha512-XFn+rl3wIowDjzdr5DlHoHgQphXefgUTs2bNp/bZu4WF9gTrTLnKwio3f28VjiFG6Jpip7yQn/p4mMj6OrjrtQ==", "dev": true, "requires": { + "json5": "^2.2.0", "onigasm": "^2.2.5", - "vscode-textmate": "^5.2.0" + "vscode-textmate": "5.2.0" } }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "slash": { "version": "3.0.0", @@ -3936,9 +9629,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -3959,21 +9652,6 @@ "which": "^2.0.1" }, "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4014,6 +9692,23 @@ "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", "dev": true }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -4042,40 +9737,23 @@ } }, "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "stringify-object": { @@ -4090,12 +9768,12 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -4123,13 +9801,24 @@ "requires": { "commander": "^2.8.1", "debug": "^4.1.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, "tapable": { "version": "2.2.0", @@ -4155,9 +9844,9 @@ }, "dependencies": { "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4186,75 +9875,146 @@ } }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" }, "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true } } }, - "ts-node": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz", - "integrity": "sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw==", + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "requires": { - "arg": "^4.1.0", + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } } } }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tslint": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.13.1.tgz", - "integrity": "sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ==", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - } - }, "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -4306,37 +10066,51 @@ } }, "typedoc": { - "version": "0.20.24", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.20.24.tgz", - "integrity": "sha512-TadOYtcw8agrk7WTZlXUcct4jLZZcGcYe3xbmARkI+rBpXI6Mw+0P8oUo13+9oFreQvK5zZgMem4YEi7lCXLIw==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.2.tgz", + "integrity": "sha512-SR1ByJB3USg+jxoxwzMRP07g/0f/cQUE5t7gOh1iTUyjTPyJohu9YSKRlK+MSXXqlhIq+m0jkEHEG5HoY7/Adg==", "dev": true, "requires": { - "colors": "^1.4.0", - "fs-extra": "^9.1.0", - "handlebars": "^4.7.6", - "lodash": "^4.17.20", + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lodash": "^4.17.21", "lunr": "^2.3.9", - "marked": "^2.0.0", + "marked": "^2.1.1", "minimatch": "^3.0.0", "progress": "^2.0.3", - "shelljs": "^0.8.4", - "shiki": "^0.9.2", - "typedoc-default-themes": "^0.12.7" + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "typedoc-default-themes": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.7.tgz", - "integrity": "sha512-0XAuGEqID+gon1+fhi4LycOEFM+5Mvm2PjwaiVZNAzU7pn3G2DEpsoXnFOPlLDnHY6ZW0BY0nO7ur9fHOFkBLQ==", + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", "dev": true }, "typedoc-plugin-markdown": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.4.5.tgz", - "integrity": "sha512-m24mSCGcEk6tQDCHIG4TM3AS2a7e9NtC/YdO0mefyF+z1/bKYnZ/oQswLZmm2zBngiLIoKX6eNdufdBpQNPtrA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.10.2.tgz", + "integrity": "sha512-eAV7fuCymdbUIk2P3jjehUWG0VE3YSr/qGGYAHUEBTrRZMuFxS/rYrooF0PPabBUdbprL4BKV8HaP7oed12T2Q==", "dev": true, "requires": { - "handlebars": "^4.7.6" + "handlebars": "^4.7.7" } }, "typemoq": { @@ -4351,34 +10125,40 @@ } }, "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true }, "uglify-js": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.4.tgz", - "integrity": "sha512-kBFT3U4Dcj4/pJ52vfjCSfyLyvG9VYYuGYPmrPvAxRw/i7xHiT4VvCev+uiEMcEEiu6UNB6KgWmGtSUYIWScbw==", + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", "dev": true, "optional": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -4435,6 +10215,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -4463,33 +10256,64 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "color-name": "1.1.3" } }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -4518,130 +10342,27 @@ "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" }, "dependencies": { "ansi-regex": { @@ -4650,87 +10371,6 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -4750,48 +10390,30 @@ "requires": { "ansi-regex": "^4.1.0" } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + } + }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index ae8258de..4118e42b 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@testdeck/mocha": "^0.1.2", "@types/chai": "^4.1.7", "@types/chai-as-promised": "^7.1.0", "@types/dateformat": "^3.0.0", @@ -38,15 +39,14 @@ "coveralls": "^3.0.9", "madge": "^4.0.1", "mocha": "^7.0.0-esm1", - "mocha-typescript": "^1.1.17", "nyc": "^15.1.0", "source-map-support": "^0.5.16", "stream-buffers": "^3.0.2", "ts-node": "^8.5.4", "tslint": "^5.13.1", - "typedoc": "^0.20.24", - "typedoc-plugin-markdown": "^3.4.5", + "typedoc": "^0.21.2", + "typedoc-plugin-markdown": "^3.10.2", "typemoq": "^2.1.0", - "typescript": "^3.9.7" + "typescript": "^4.1.6" } } diff --git a/src/file.ts b/src/file.ts index 215be589..60af9d86 100644 --- a/src/file.ts +++ b/src/file.ts @@ -468,7 +468,7 @@ export abstract class File { // We need to write out as much as we're replacing, then shuffle the rest to the end // Step 1: Write the number of bytes to replace - this._fileStream.write(data.data, 0, replace); + this._fileStream.write(data, 0, replace); // Step 2: Resize the file to fit all the new bytes const bytesToAdd = data.length - replace; @@ -494,7 +494,7 @@ export abstract class File { // Step 4: Write the remainder of the data this._fileStream.seek(start + replace, SeekOrigin.Begin); - this._fileStream.write(data.data, replace, data.length - replace); + this._fileStream.write(data, replace, data.length - replace); } /** @@ -666,7 +666,7 @@ export abstract class File { this.mode = FileAccessMode.Write; - this._fileStream.write(data.data, 0, data.length); + this._fileStream.write(data, 0, data.length); } // #endregion diff --git a/src/stream.ts b/src/stream.ts index 2781105a..054403bb 100644 --- a/src/stream.ts +++ b/src/stream.ts @@ -1,6 +1,7 @@ import * as fs from "fs"; import {Guards} from "./utils"; +import {ByteVector} from "./byteVector"; export enum SeekOrigin { Begin, @@ -64,7 +65,7 @@ export interface IStream { * bytes to the current stream * @param length Maximum number of bytes to write */ - write(buffer: fs.BinaryData, bufferOffset: number, length: number): number; + write(buffer: Uint8Array | ByteVector, bufferOffset: number, length: number): number; } /** @@ -164,7 +165,12 @@ export class Stream implements IStream { } /** @inheritDoc */ - public write(buffer: fs.BinaryData, bufferOffset: number, length: number): number { + public write(buffer: Uint8Array | ByteVector, bufferOffset: number, length: number): number { + // Make sure we standardize on a Uint8Array + if (buffer instanceof ByteVector) { + buffer = buffer.data; + } + if (!this._canWrite) { throw new Error("Invalid operation: this stream is a read-only stream"); } diff --git a/test-integration/aac_fileTests.ts b/test-integration/aac_fileTests.ts index 566c2532..122a2b90 100644 --- a/test-integration/aac_fileTests.ts +++ b/test-integration/aac_fileTests.ts @@ -1,13 +1,11 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import TestConstants from "./utilities/testConstants"; import {File} from "../src"; import {StandardFileTests} from "./utilities/standardFileTests"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Aac_FileTests { diff --git a/test-integration/aiff_fileTests.ts b/test-integration/aiff_fileTests.ts index 454344ae..df3860b8 100644 --- a/test-integration/aiff_fileTests.ts +++ b/test-integration/aiff_fileTests.ts @@ -1,10 +1,10 @@ import * as Chai from "chai"; -import TestConstants from "./utilities/testConstants"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {File, ReadStyle} from "../src"; import {StandardFileTests} from "./utilities/standardFileTests"; import ExtendedFileTests from "./utilities/extendedFileTests"; +import TestConstants from "./utilities/testConstants"; const assert = Chai.assert; diff --git a/test-integration/ape_fileTests.ts b/test-integration/ape_fileTests.ts index b417024e..06231c34 100644 --- a/test-integration/ape_fileTests.ts +++ b/test-integration/ape_fileTests.ts @@ -1,6 +1,5 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ExtendedFileTests from "./utilities/extendedFileTests"; import TestConstants from "./utilities/testConstants"; @@ -8,7 +7,6 @@ import {File} from "../src"; import {StandardFileTests} from "./utilities/standardFileTests"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Ape_FileTests { diff --git a/test-integration/asf_fileTests.ts b/test-integration/asf_fileTests.ts index cc9666eb..949ed084 100644 --- a/test-integration/asf_fileTests.ts +++ b/test-integration/asf_fileTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ExtendedFileTests from "./utilities/extendedFileTests"; import TestConstants from "./utilities/testConstants"; diff --git a/test-integration/avi_fileTests.ts b/test-integration/avi_fileTests.ts index 5eaf1c96..1aeb0878 100644 --- a/test-integration/avi_fileTests.ts +++ b/test-integration/avi_fileTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import TestConstants from "./utilities/testConstants"; import {File, MediaTypes, ReadStyle, TagTypes} from "../src"; diff --git a/test-integration/id3v1_fileTests.ts b/test-integration/id3v1_fileTests.ts index 8e132a6f..116e632c 100644 --- a/test-integration/id3v1_fileTests.ts +++ b/test-integration/id3v1_fileTests.ts @@ -1,12 +1,11 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; + import TestConstants from "./utilities/testConstants"; import {File, ReadStyle} from "../src"; import {StandardFileTests} from "./utilities/standardFileTests"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v1_FileTests { diff --git a/test-integration/id3v24_fileTests.ts b/test-integration/id3v24_fileTests.ts index 58906e78..7081f7f3 100644 --- a/test-integration/id3v24_fileTests.ts +++ b/test-integration/id3v24_fileTests.ts @@ -1,13 +1,11 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import TestConstants from "./utilities/testConstants"; import {File, Id3v2FrameIdentifiers, Id3v2Tag, ReadStyle, TagTypes} from "../src"; import {StandardFileTests, TestTagLevel} from "./utilities/standardFileTests"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v24_FileTests { diff --git a/test-integration/id3v2_fileTests.ts b/test-integration/id3v2_fileTests.ts index 7ba0136b..fc8f66ce 100644 --- a/test-integration/id3v2_fileTests.ts +++ b/test-integration/id3v2_fileTests.ts @@ -1,7 +1,6 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as fs from "fs"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ExtendedFileTests from "./utilities/extendedFileTests"; import TestConstants from "./utilities/testConstants"; @@ -10,7 +9,6 @@ import {File, Id3v2FrameIdentifiers, Id3v2Tag, TagTypes} from "../src"; import {StandardFileTests} from "./utilities/standardFileTests"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_FileTests { diff --git a/test-integration/mpeg_fileTest.ts b/test-integration/mpeg_fileTest.ts index 6c92821d..26103f8e 100644 --- a/test-integration/mpeg_fileTest.ts +++ b/test-integration/mpeg_fileTest.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import TestConstants from "./utilities/testConstants"; import {File, ReadStyle} from "../src"; diff --git a/test-integration/wav_fileTest.ts b/test-integration/wav_fileTest.ts index 72a22208..8694b05c 100644 --- a/test-integration/wav_fileTest.ts +++ b/test-integration/wav_fileTest.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import TestConstants from "./utilities/testConstants"; import {File, MediaTypes, PictureType, ReadStyle} from "../src"; diff --git a/test-unit/aac/aacAudioHeaderTests.ts b/test-unit/aac/aacAudioHeaderTests.ts index fbd499e1..cc613c01 100644 --- a/test-unit/aac/aacAudioHeaderTests.ts +++ b/test-unit/aac/aacAudioHeaderTests.ts @@ -1,15 +1,15 @@ import * as Chai from "chai"; import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; -import {Testers} from "../utilities/testers"; -import TestFile from "../utilities/testFile"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import AacAudioHeader from "../../src/aac/aacAudioHeader"; import Mpeg4AudioTypes from "../../src/mpeg4/mpeg4AudioTypes"; +import TestFile from "../utilities/testFile"; import {ByteVector} from "../../src/byteVector"; import {File} from "../../src/file"; import {MediaTypes} from "../../src/iCodec"; +import {Testers} from "../utilities/testers"; // Setup Chai Chai.use(ChaiAsPromised); @@ -18,7 +18,8 @@ const assert = Chai.assert; // Test constants const sampleHeaderBytes = ByteVector.fromByteArray(new Uint8Array([0xFF, 0xF5, 0x55, 0x55, 0x55, 0x55, 0x55])); -@suite class Aac_AudioHeaderTests { +@suite +class Aac_AudioHeaderTests { @test public constructor_invalidData() { // Arrange diff --git a/test-unit/aac/aacFileTests.ts b/test-unit/aac/aacFileTests.ts deleted file mode 100644 index d766424a..00000000 --- a/test-unit/aac/aacFileTests.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import * as TypeMoq from "typemoq"; -import {suite, test} from "mocha-typescript"; - -import AacFile from "../../src/aac/aacFile"; - -@suite class Aac_FileTests { - -} diff --git a/test-unit/aiff/aiffStreamHeaderTests.ts b/test-unit/aiff/aiffStreamHeaderTests.ts index 0b2cfbd9..fe3fc703 100644 --- a/test-unit/aiff/aiffStreamHeaderTests.ts +++ b/test-unit/aiff/aiffStreamHeaderTests.ts @@ -1,6 +1,6 @@ import * as Chai from "chai"; +import {suite, test} from "@testdeck/mocha"; import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; import AiffStreamHeader from "../../src/aiff/aiffStreamHeader"; import {ByteVector} from "../../src/byteVector"; diff --git a/test-unit/ape/apeFileTests.ts b/test-unit/ape/apeFileTests.ts deleted file mode 100644 index fd723347..00000000 --- a/test-unit/ape/apeFileTests.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import * as TypeMoq from "typemoq"; -import {suite, test} from "mocha-typescript"; - -import ApeFile from "../../src/ape/apeFile"; - -@suite class Ape_FileTests { - -} diff --git a/test-unit/ape/apeStreamHeaderTests.ts b/test-unit/ape/apeStreamHeaderTests.ts index 0397588c..344ce482 100644 --- a/test-unit/ape/apeStreamHeaderTests.ts +++ b/test-unit/ape/apeStreamHeaderTests.ts @@ -1,14 +1,12 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {ApeCompressionLevel, ApeStreamHeader} from "../../src/ape/apeStreamHeader"; import {ByteVector} from "../../src/byteVector"; import {MediaTypes} from "../../src/iCodec"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Ape_StreamHeaderTests { diff --git a/test-unit/ape/apeTagFooterTests.ts b/test-unit/ape/apeTagFooterTests.ts index b82a31db..165c8345 100644 --- a/test-unit/ape/apeTagFooterTests.ts +++ b/test-unit/ape/apeTagFooterTests.ts @@ -1,14 +1,12 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import PropertyTests from "../utilities/propertyTests"; import {ApeTagFooter, ApeTagFooterFlags} from "../../src/ape/apeTagFooter"; import {ByteVector, StringType} from "../../src/byteVector"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; const _sampleData = ByteVector.concatenate( diff --git a/test-unit/ape/apeTagItemTests.ts b/test-unit/ape/apeTagItemTests.ts index b9832d8a..e08d3810 100644 --- a/test-unit/ape/apeTagItemTests.ts +++ b/test-unit/ape/apeTagItemTests.ts @@ -1,13 +1,11 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {ApeTagItem, ApeTagItemType} from "../../src/ape/apeTagItem"; import {ByteVector, StringType} from "../../src/byteVector"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Ape_TagItemTest_ConstructorTests { diff --git a/test-unit/ape/apeTagTests.ts b/test-unit/ape/apeTagTests.ts index b7e65243..0da18a6c 100644 --- a/test-unit/ape/apeTagTests.ts +++ b/test-unit/ape/apeTagTests.ts @@ -1,21 +1,19 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; -import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import TestFile from "../utilities/testFile"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ApeTag from "../../src/ape/apeTag"; +import PropertyTests from "../utilities/propertyTests"; +import TestFile from "../utilities/testFile"; import {ApeTagFooter, ApeTagFooterFlags} from "../../src/ape/apeTagFooter"; import {ApeTagItem, ApeTagItemType} from "../../src/ape/apeTagItem"; import {ByteVector} from "../../src/byteVector"; import {File} from "../../src/file"; import {IPicture, PictureType} from "../../src/iPicture"; import {TagTypes} from "../../src/tag"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; function getTestTagFooter(flags: ApeTagFooterFlags, itemCount: number, itemPlusFooter: number): ByteVector { diff --git a/test-unit/asf/asfTagTests.ts b/test-unit/asf/asfTagTests.ts index 5e294388..72f31283 100644 --- a/test-unit/asf/asfTagTests.ts +++ b/test-unit/asf/asfTagTests.ts @@ -1,6 +1,6 @@ import * as Chai from "chai"; +import {suite, test} from "@testdeck/mocha"; import {Mock} from "typemoq"; -import {suite, test} from "mocha-typescript"; import AsfTag from "../../src/asf/AsfTag"; import BaseObject from "../../src/asf/objects/baseObject"; diff --git a/test-unit/asf/contentDescriptionObjectTests.ts b/test-unit/asf/contentDescriptionObjectTests.ts index 000a8221..7ddef17f 100644 --- a/test-unit/asf/contentDescriptionObjectTests.ts +++ b/test-unit/asf/contentDescriptionObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ContentDescriptionObject from "../../src/asf/objects/contentDescriptionObject"; import ObjectTests from "./objectTests"; diff --git a/test-unit/asf/descriptorBaseTests.ts b/test-unit/asf/descriptorBaseTests.ts index 99d28cae..6d94b920 100644 --- a/test-unit/asf/descriptorBaseTests.ts +++ b/test-unit/asf/descriptorBaseTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import UuidWrapper from "../../src/uuidWrapper"; import {ByteVector} from "../../src/byteVector"; diff --git a/test-unit/asf/extendedContentDescriptionObjectTests.ts b/test-unit/asf/extendedContentDescriptionObjectTests.ts index 482501ac..da119fc8 100644 --- a/test-unit/asf/extendedContentDescriptionObjectTests.ts +++ b/test-unit/asf/extendedContentDescriptionObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ObjectTests from "./objectTests"; import UuidWrapper from "../../src/uuidWrapper"; diff --git a/test-unit/asf/filePropertiesObjectTests.ts b/test-unit/asf/filePropertiesObjectTests.ts index 333d3eca..734594ed 100644 --- a/test-unit/asf/filePropertiesObjectTests.ts +++ b/test-unit/asf/filePropertiesObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import FilePropertiesObject from "../../src/asf/objects/filePropertiesObject"; import ObjectTests from "./objectTests"; diff --git a/test-unit/asf/headerExtensionObjectTests.ts b/test-unit/asf/headerExtensionObjectTests.ts index 1db2f484..2ba71f0c 100644 --- a/test-unit/asf/headerExtensionObjectTests.ts +++ b/test-unit/asf/headerExtensionObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import BaseObject from "../../src/asf/objects/baseObject"; import ContentDescriptionObject from "../../src/asf/objects/contentDescriptionObject"; diff --git a/test-unit/asf/headerObjectTests.ts b/test-unit/asf/headerObjectTests.ts index c70f7653..7a7a572c 100644 --- a/test-unit/asf/headerObjectTests.ts +++ b/test-unit/asf/headerObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import BaseObject from "../../src/asf/objects/baseObject"; import ContentDescriptionObject from "../../src/asf/objects/contentDescriptionObject"; diff --git a/test-unit/asf/metadataLibraryObjectTests.ts b/test-unit/asf/metadataLibraryObjectTests.ts index 914b8558..6f7846da 100644 --- a/test-unit/asf/metadataLibraryObjectTests.ts +++ b/test-unit/asf/metadataLibraryObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ObjectTests from "./objectTests"; import TestFile from "../utilities/testFile"; diff --git a/test-unit/asf/objectTests.ts b/test-unit/asf/objectTests.ts index a828ccb5..c0cdea7b 100644 --- a/test-unit/asf/objectTests.ts +++ b/test-unit/asf/objectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {test} from "mocha-typescript"; +import {test} from "@testdeck/mocha"; import TestFile from "../utilities/testFile"; import UuidWrapper from "../../src/uuidWrapper"; diff --git a/test-unit/asf/paddingObjectTests.ts b/test-unit/asf/paddingObjectTests.ts index 4879b603..a95e251b 100644 --- a/test-unit/asf/paddingObjectTests.ts +++ b/test-unit/asf/paddingObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ObjectTests from "./objectTests"; import PaddingObject from "../../src/asf/objects/PaddingObject"; diff --git a/test-unit/asf/streamPropertiesObjectTests.ts b/test-unit/asf/streamPropertiesObjectTests.ts index 1787682a..165e1eaf 100644 --- a/test-unit/asf/streamPropertiesObjectTests.ts +++ b/test-unit/asf/streamPropertiesObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ObjectTests from "./objectTests"; import RiffBitmapInfoHeader from "../../src/riff/riffBitmapInfoHeader"; diff --git a/test-unit/asf/unknownObjectTests.ts b/test-unit/asf/unknownObjectTests.ts index 03b22cd1..9e9ccca2 100644 --- a/test-unit/asf/unknownObjectTests.ts +++ b/test-unit/asf/unknownObjectTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import ObjectTests from "./objectTests"; import TestFile from "../utilities/testFile"; diff --git a/test-unit/byteVectorConstructorTests.ts b/test-unit/byteVectorConstructorTests.ts index b5dd457a..19749b6c 100644 --- a/test-unit/byteVectorConstructorTests.ts +++ b/test-unit/byteVectorConstructorTests.ts @@ -2,14 +2,14 @@ import * as Chai from "chai"; import * as ChaiAsPromised from "chai-as-promised"; import * as StreamBuffers from "stream-buffers"; import * as TypeMoq from "typemoq"; +import {suite, test} from "@testdeck/mocha"; + import TestConstants from "./testConstants"; -import {Testers} from "./utilities/testers"; import TestStream from "./utilities/testStream"; -import {suite, test} from "mocha-typescript"; - import {ByteVector, StringType} from "../src/byteVector"; import {IFileAbstraction} from "../src/fileAbstraction"; import {IStream} from "../src/stream"; +import {Testers} from "./utilities/testers"; const AB2B = require("arraybuffer-to-buffer"); diff --git a/test-unit/byteVectorConversionTests.ts b/test-unit/byteVectorConversionTests.ts index 7706f633..990f2248 100644 --- a/test-unit/byteVectorConversionTests.ts +++ b/test-unit/byteVectorConversionTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import TestConstants from "./testConstants"; import {ByteVector, StringType} from "../src/byteVector"; diff --git a/test-unit/byteVectorStaticMethodTests.ts b/test-unit/byteVectorStaticMethodTests.ts index 6909b9a7..50aa7d51 100644 --- a/test-unit/byteVectorStaticMethodTests.ts +++ b/test-unit/byteVectorStaticMethodTests.ts @@ -1,12 +1,10 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {Testers} from "./utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {ByteVector} from "../src/byteVector"; +import {Testers} from "./utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class ByteVector_StaticMethodTests { diff --git a/test-unit/byteVectorVoidMethodTests.ts b/test-unit/byteVectorVoidMethodTests.ts index bdc00188..38837c2b 100644 --- a/test-unit/byteVectorVoidMethodTests.ts +++ b/test-unit/byteVectorVoidMethodTests.ts @@ -1,12 +1,10 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {Testers} from "./utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {ByteVector} from "../src/byteVector"; +import {Testers} from "./utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class ByteVector_VoidMethodTests { diff --git a/test-unit/fileAbstractionTests.ts b/test-unit/fileAbstractionTests.ts index 408b67be..a18fe244 100644 --- a/test-unit/fileAbstractionTests.ts +++ b/test-unit/fileAbstractionTests.ts @@ -1,15 +1,13 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; -import TestConstants from "./testConstants"; -import {Testers} from "./utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import TestConstants from "./testConstants"; import {LocalFileAbstraction} from "../src/fileAbstraction"; import {IStream} from "../src/stream"; +import {Testers} from "./utilities/testers"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class LocalFileAbstractionTests { diff --git a/test-unit/fileTests.ts b/test-unit/fileTests.ts index 9c6475be..4413e035 100644 --- a/test-unit/fileTests.ts +++ b/test-unit/fileTests.ts @@ -1,21 +1,20 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; + +import {suite, test} from "@testdeck/mocha"; + +import Properties from "../src/properties"; import PropertyTests from "./utilities/propertyTests"; import TestConstants from "./testConstants"; -import {Testers} from "./utilities/testers"; import TestStream from "./utilities/testStream"; -import {suite, test} from "mocha-typescript"; - -import Properties from "../src/properties"; +import {ByteVector} from "../src/byteVector"; import {File, FileAccessMode, FileTypeConstructor, FileTypeResolver, ReadStyle} from "../src/file"; import {IFileAbstraction} from "../src/fileAbstraction"; -import {Tag, TagTypes} from "../src/tag"; import {IStream} from "../src/stream"; -import {ByteVector} from "../src/byteVector"; +import {Tag, TagTypes} from "../src/tag"; +import {Testers} from "./utilities/testers"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class FileTests { diff --git a/test-unit/id3v1/id3v1TagTests.ts b/test-unit/id3v1/id3v1TagTests.ts index ed343b8a..40eb2399 100644 --- a/test-unit/id3v1/id3v1TagTests.ts +++ b/test-unit/id3v1/id3v1TagTests.ts @@ -1,11 +1,9 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import Id3v1Tag from "../../src/id3v1/id3v1Tag"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v1TagTests { diff --git a/test-unit/id3v2/attachmentsFrameTests.ts b/test-unit/id3v2/attachmentsFrameTests.ts index eed5e396..c1aa073e 100644 --- a/test-unit/id3v2/attachmentsFrameTests.ts +++ b/test-unit/id3v2/attachmentsFrameTests.ts @@ -1,6 +1,6 @@ import * as Chai from "chai"; import * as TypeMoq from "typemoq"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import AttachmentFrame from "../../src/id3v2/frames/attachmentFrame"; import FrameConstructorTests from "./frameConstructorTests"; diff --git a/test-unit/id3v2/commentsFrameTests.ts b/test-unit/id3v2/commentsFrameTests.ts index 72de85bd..da1ebb2f 100644 --- a/test-unit/id3v2/commentsFrameTests.ts +++ b/test-unit/id3v2/commentsFrameTests.ts @@ -1,11 +1,10 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import PropertyTests from "../utilities/propertyTests"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import CommentsFrame from "../../src/id3v2/frames/commentsFrame"; +import FrameConstructorTests from "./frameConstructorTests"; import Id3v2Settings from "../../src/id3v2/id3v2Settings"; +import PropertyTests from "../utilities/propertyTests"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; @@ -13,7 +12,6 @@ import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {Testers} from "../utilities/testers"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; function getTestFrame(): CommentsFrame { diff --git a/test-unit/id3v2/eventTimeCodeFrameTests.ts b/test-unit/id3v2/eventTimeCodeFrameTests.ts index 2a9b2338..032d4a85 100644 --- a/test-unit/id3v2/eventTimeCodeFrameTests.ts +++ b/test-unit/id3v2/eventTimeCodeFrameTests.ts @@ -1,19 +1,17 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; +import {suite, test} from "@testdeck/mocha"; + import FrameConstructorTests from "./frameConstructorTests"; import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; - import {ByteVector} from "../../src/byteVector"; import {EventTimeCode, EventTimeCodeFrame} from "../../src/id3v2/frames/eventTimeCodeFrame"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameFlags, Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; import {EventType, TimestampFormat} from "../../src/id3v2/utilTypes"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_EventTimeCodeTests { diff --git a/test-unit/id3v2/frameConstructorTests.ts b/test-unit/id3v2/frameConstructorTests.ts index dba407a7..b0103301 100644 --- a/test-unit/id3v2/frameConstructorTests.ts +++ b/test-unit/id3v2/frameConstructorTests.ts @@ -1,10 +1,10 @@ -import {Testers} from "../utilities/testers"; -import {test} from "mocha-typescript"; +import {test} from "@testdeck/mocha"; import {ByteVector} from "../../src/byteVector"; import {Frame} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; export default abstract class FrameConstructorTests { diff --git a/test-unit/id3v2/frameFactoryTests.ts b/test-unit/id3v2/frameFactoryTests.ts index 8579f455..ba292371 100644 --- a/test-unit/id3v2/frameFactoryTests.ts +++ b/test-unit/id3v2/frameFactoryTests.ts @@ -1,8 +1,6 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; -import TestFile from "../utilities/testFile"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import CommentsFrame from "../../src/id3v2/frames/commentsFrame"; import FrameFactory, {FrameCreator} from "../../src/id3v2/frames/frameFactory"; @@ -10,6 +8,7 @@ import PlayCountFrame from "../../src/id3v2/frames/playCountFrame"; import PopularimeterFrame from "../../src/id3v2/frames/popularimeterFrame"; import PrivateFrame from "../../src/id3v2/frames/privateFrame"; import TermsOfUseFrame from "../../src/id3v2/frames/termsOfUseFrame"; +import TestFile from "../utilities/testFile"; import UniqueFileIdentifierFrame from "../../src/id3v2/frames/uniqueFileIdentifierFrame"; import UnsynchronizedLyricsFrame from "../../src/id3v2/frames/unsynchronizedLyricsFrame"; import {ByteVector, StringType} from "../../src/byteVector"; @@ -25,7 +24,6 @@ import {UrlLinkFrame, UserUrlLinkFrame} from "../../src/id3v2/frames/urlLinkFram import {SynchronizedTextType, TimestampFormat} from "../../src/id3v2/utilTypes"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class FrameFactoryTests { diff --git a/test-unit/id3v2/frameIdentifiersTests.ts b/test-unit/id3v2/frameIdentifiersTests.ts index 876c7a4c..e97a241b 100644 --- a/test-unit/id3v2/frameIdentifiersTests.ts +++ b/test-unit/id3v2/frameIdentifiersTests.ts @@ -1,12 +1,10 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {ByteVector} from "../../src/byteVector"; import {FrameIdentifier, FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class FrameIdentifierTests { diff --git a/test-unit/id3v2/frameTests.ts b/test-unit/id3v2/frameTests.ts index a301f189..6f012cb7 100644 --- a/test-unit/id3v2/frameTests.ts +++ b/test-unit/id3v2/frameTests.ts @@ -1,6 +1,5 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import PropertyTests from "../utilities/propertyTests"; import SyncData from "../../src/id3v2/syncData"; @@ -10,7 +9,6 @@ import {Id3v2FrameFlags, Id3v2FrameHeader} from "../../src/id3v2/frames/frameHea import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; class TestFrame extends Frame { diff --git a/test-unit/id3v2/id3v2TagTests.ts b/test-unit/id3v2/id3v2TagTests.ts index 5cf1d7eb..3320613c 100644 --- a/test-unit/id3v2/id3v2TagTests.ts +++ b/test-unit/id3v2/id3v2TagTests.ts @@ -1,7 +1,6 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import Id3v2Tag from "../../src/id3v2/id3v2Tag"; import SyncData from "../../src/id3v2/syncData"; @@ -26,7 +25,6 @@ import Id3v2TagFooter from "../../src/id3v2/id3v2TagFooter"; import {Id3v2FrameFlags} from "../../src/id3v2/frames/frameHeader"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; function getTestTagHeader(version: number, flags: Id3v2TagHeaderFlags, tagSize: number): ByteVector { diff --git a/test-unit/id3v2/musicCdIdentifierFrameTests.ts b/test-unit/id3v2/musicCdIdentifierFrameTests.ts index 08a9d919..89a6a6c8 100644 --- a/test-unit/id3v2/musicCdIdentifierFrameTests.ts +++ b/test-unit/id3v2/musicCdIdentifierFrameTests.ts @@ -1,17 +1,15 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import PropertyTests from "../utilities/propertyTests"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import MusicCdIdentifierFrame from "../../src/id3v2/frames/musicCdIdentifierFrame"; +import PropertyTests from "../utilities/propertyTests"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_MusicCdIdentifierFrameTests extends FrameConstructorTests { diff --git a/test-unit/id3v2/playCountFrameTests.ts b/test-unit/id3v2/playCountFrameTests.ts index 0e428d35..ddf1ce5e 100644 --- a/test-unit/id3v2/playCountFrameTests.ts +++ b/test-unit/id3v2/playCountFrameTests.ts @@ -1,17 +1,15 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import PropertyTests from "../utilities/propertyTests"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import PlayCountFrame from "../../src/id3v2/frames/playCountFrame"; +import PropertyTests from "../utilities/propertyTests"; import {ByteVector} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_PlayCountFrame_ConstructorTests extends FrameConstructorTests { diff --git a/test-unit/id3v2/popularimeterFrameTests.ts b/test-unit/id3v2/popularimeterFrameTests.ts index 521c7288..81465abc 100644 --- a/test-unit/id3v2/popularimeterFrameTests.ts +++ b/test-unit/id3v2/popularimeterFrameTests.ts @@ -1,18 +1,16 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import PopularimeterFrame from "../../src/id3v2/frames/popularimeterFrame"; +import PropertyTests from "../utilities/propertyTests"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_PopularimeterFrame_ConstructorTests extends FrameConstructorTests { diff --git a/test-unit/id3v2/privateFrameTests.ts b/test-unit/id3v2/privateFrameTests.ts index 8fdf7fef..b4569954 100644 --- a/test-unit/id3v2/privateFrameTests.ts +++ b/test-unit/id3v2/privateFrameTests.ts @@ -1,6 +1,5 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import FrameConstructorTests from "./frameConstructorTests"; import PropertyTests from "../utilities/propertyTests"; @@ -11,7 +10,6 @@ import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_PrivateFrame_ConstructorTests extends FrameConstructorTests { diff --git a/test-unit/id3v2/relativeVolumeFrameTests.ts b/test-unit/id3v2/relativeVolumeFrameTests.ts index 575fbbdb..a2bd9429 100644 --- a/test-unit/id3v2/relativeVolumeFrameTests.ts +++ b/test-unit/id3v2/relativeVolumeFrameTests.ts @@ -1,18 +1,16 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; +import {suite, test} from "@testdeck/mocha"; + import ConstructorTests from "./frameConstructorTests"; import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; - import {ChannelData, ChannelType, RelativeVolumeFrame} from "../../src/id3v2/frames/relativeVolumeFrame"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_RelativeVolumeChannelData { diff --git a/test-unit/id3v2/syncDataTests.ts b/test-unit/id3v2/syncDataTests.ts index 3a7dd8c8..797901bc 100644 --- a/test-unit/id3v2/syncDataTests.ts +++ b/test-unit/id3v2/syncDataTests.ts @@ -1,14 +1,12 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import SyncData from "../../src/id3v2/syncData"; import TestConstants from "../testConstants"; import {ByteVector} from "../../src/byteVector"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_SyncDataTests { diff --git a/test-unit/id3v2/synchronizedLyricsFrameTests.ts b/test-unit/id3v2/synchronizedLyricsFrameTests.ts index f9247dca..f72cf19e 100644 --- a/test-unit/id3v2/synchronizedLyricsFrameTests.ts +++ b/test-unit/id3v2/synchronizedLyricsFrameTests.ts @@ -1,20 +1,19 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import Id3v2Settings from "../../src/id3v2/id3v2Settings"; +import PropertyTests from "../utilities/propertyTests"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; import {SynchronizedLyricsFrame, SynchronizedText} from "../../src/id3v2/frames/synchronizedLyricsFrame"; +import {Testers} from "../utilities/testers"; import {SynchronizedTextType, TimestampFormat} from "../../src/id3v2/utilTypes"; + // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_SynchronizedTextTests { diff --git a/test-unit/id3v2/tagExtendedHeaderTests.ts b/test-unit/id3v2/tagExtendedHeaderTests.ts index c71e677d..8eec1f99 100644 --- a/test-unit/id3v2/tagExtendedHeaderTests.ts +++ b/test-unit/id3v2/tagExtendedHeaderTests.ts @@ -1,13 +1,11 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import Id3v2ExtendedHeader from "../../src/id3v2/id3v2ExtendedHeader"; import {ByteVector} from "../../src/byteVector"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_TagExtendedHeaderTests { diff --git a/test-unit/id3v2/tagFooterTests.ts b/test-unit/id3v2/tagFooterTests.ts index 83781527..dd2c9c55 100644 --- a/test-unit/id3v2/tagFooterTests.ts +++ b/test-unit/id3v2/tagFooterTests.ts @@ -1,16 +1,14 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import TestConstants from "../testConstants"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import TestConstants from "../testConstants"; import Id3v2TagFooter from "../../src/id3v2/id3v2TagFooter"; import Id3v2Settings from "../../src/id3v2/id3v2Settings"; import {ByteVector} from "../../src/byteVector"; import {Id3v2TagHeaderFlags} from "../../src/id3v2/id3v2TagHeader"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; const getTestFooter = (majorVersion: number, minorVersion: number, flags: Id3v2TagHeaderFlags): Id3v2TagFooter => { diff --git a/test-unit/id3v2/tagHeaderTests.ts b/test-unit/id3v2/tagHeaderTests.ts index 6736cf4c..e5f6afab 100644 --- a/test-unit/id3v2/tagHeaderTests.ts +++ b/test-unit/id3v2/tagHeaderTests.ts @@ -1,15 +1,13 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import TestConstants from "../testConstants"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import Id3v2Settings from "../../src/id3v2/id3v2Settings"; +import TestConstants from "../testConstants"; import {ByteVector} from "../../src/byteVector"; import {Id3v2TagHeader, Id3v2TagHeaderFlags} from "../../src/id3v2/id3v2TagHeader"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; const getTestHeader = (majorVersion: number, minorVersion: number, flags: Id3v2TagHeaderFlags): Id3v2TagHeader => { diff --git a/test-unit/id3v2/termsOfUseFrameTests.ts b/test-unit/id3v2/termsOfUseFrameTests.ts index 983d1839..febd4096 100644 --- a/test-unit/id3v2/termsOfUseFrameTests.ts +++ b/test-unit/id3v2/termsOfUseFrameTests.ts @@ -1,10 +1,9 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import PropertyTests from "../utilities/propertyTests"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import Id3v2Settings from "../../src/id3v2/id3v2Settings"; +import PropertyTests from "../utilities/propertyTests"; import TermsOfUseFrame from "../../src/id3v2/frames/termsOfUseFrame"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; @@ -12,7 +11,6 @@ import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_TermsOfUseFrame_ConstructorTests extends FrameConstructorTests { diff --git a/test-unit/id3v2/textInformationFrameTests.ts b/test-unit/id3v2/textInformationFrameTests.ts index ac27d210..a33edf57 100644 --- a/test-unit/id3v2/textInformationFrameTests.ts +++ b/test-unit/id3v2/textInformationFrameTests.ts @@ -1,19 +1,17 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import Id3v2Settings from "../../src/id3v2/id3v2Settings"; +import PropertyTests from "../utilities/propertyTests"; import {TextInformationFrame} from "../../src/id3v2/frames/textInformationFrame"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifier, FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; function getTestFrame(): TextInformationFrame { diff --git a/test-unit/id3v2/uniqueFileIdentifierFrameTests.ts b/test-unit/id3v2/uniqueFileIdentifierFrameTests.ts index 8136a851..1234a1d1 100644 --- a/test-unit/id3v2/uniqueFileIdentifierFrameTests.ts +++ b/test-unit/id3v2/uniqueFileIdentifierFrameTests.ts @@ -1,18 +1,16 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; +import {suite, test} from "@testdeck/mocha"; + import FrameConstructorTests from "./frameConstructorTests"; import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; - import UniqueFileIdentifierFrame from "../../src/id3v2/frames/uniqueFileIdentifierFrame"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; // Test constants diff --git a/test-unit/id3v2/unknownFrameTests.ts b/test-unit/id3v2/unknownFrameTests.ts index 72f5863a..1ae4d340 100644 --- a/test-unit/id3v2/unknownFrameTests.ts +++ b/test-unit/id3v2/unknownFrameTests.ts @@ -1,17 +1,15 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import UnknownFrame from "../../src/id3v2/frames/unknownFrame"; import {ByteVector} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifier, FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Id3v2_UnknownFrame_ConstructorTests extends FrameConstructorTests { diff --git a/test-unit/id3v2/unsynchronizedLyricsFrameTests.ts b/test-unit/id3v2/unsynchronizedLyricsFrameTests.ts index 71dad87d..eb63448e 100644 --- a/test-unit/id3v2/unsynchronizedLyricsFrameTests.ts +++ b/test-unit/id3v2/unsynchronizedLyricsFrameTests.ts @@ -1,18 +1,16 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; +import {suite, test} from "@testdeck/mocha"; + import FrameConstructorTests from "./frameConstructorTests"; import PropertyTests from "../utilities/propertyTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; - import UnsynchronizedLyricsFrame from "../../src/id3v2/frames/unsynchronizedLyricsFrame"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; const getTestFrameData = (): ByteVector => { diff --git a/test-unit/id3v2/urlLinkFrameTests.ts b/test-unit/id3v2/urlLinkFrameTests.ts index ea107514..38a75570 100644 --- a/test-unit/id3v2/urlLinkFrameTests.ts +++ b/test-unit/id3v2/urlLinkFrameTests.ts @@ -1,19 +1,17 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; +import {suite, test} from "@testdeck/mocha"; + import FrameConstructorTests from "./frameConstructorTests"; import PropertyTests from "../utilities/propertyTests"; import TestConstants from "../testConstants"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; - import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifier, FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; import {UrlLinkFrame} from "../../src/id3v2/frames/urlLinkFrame"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; const getTestFrameData = (): ByteVector => { diff --git a/test-unit/id3v2/userTextInformationFrameTests.ts b/test-unit/id3v2/userTextInformationFrameTests.ts index ec7ee09a..849484e2 100644 --- a/test-unit/id3v2/userTextInformationFrameTests.ts +++ b/test-unit/id3v2/userTextInformationFrameTests.ts @@ -1,18 +1,16 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import Id3v2Settings from "../../src/id3v2/id3v2Settings"; import {UserTextInformationFrame} from "../../src/id3v2/frames/textInformationFrame"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; function getTestFrame(): UserTextInformationFrame { diff --git a/test-unit/id3v2/userUrlLinkFrameTests.ts b/test-unit/id3v2/userUrlLinkFrameTests.ts index d5ca6c4b..24ec72b4 100644 --- a/test-unit/id3v2/userUrlLinkFrameTests.ts +++ b/test-unit/id3v2/userUrlLinkFrameTests.ts @@ -1,17 +1,15 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import FrameConstructorTests from "./frameConstructorTests"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; +import FrameConstructorTests from "./frameConstructorTests"; import {ByteVector, StringType} from "../../src/byteVector"; import {Frame, FrameClassType} from "../../src/id3v2/frames/frame"; import {Id3v2FrameHeader} from "../../src/id3v2/frames/frameHeader"; import {FrameIdentifiers} from "../../src/id3v2/frameIdentifiers"; +import {Testers} from "../utilities/testers"; import {UserUrlLinkFrame} from "../../src/id3v2/frames/urlLinkFrame"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; const getTestFrameData = (): ByteVector => { diff --git a/test-unit/mpeg/mpegAudioHeaderTests.ts b/test-unit/mpeg/mpegAudioHeaderTests.ts index cb8833f1..6b0b9be5 100644 --- a/test-unit/mpeg/mpegAudioHeaderTests.ts +++ b/test-unit/mpeg/mpegAudioHeaderTests.ts @@ -1,20 +1,18 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; -import TestFile from "../utilities/testFile"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import MpegAudioHeader from "../../src/mpeg/mpegAudioHeader"; +import TestFile from "../utilities/testFile"; import VbriHeader from "../../src/mpeg/vbriHeader"; import XingHeader from "../../src/mpeg/xingHeader"; import {ByteVector} from "../../src/byteVector"; import {File} from "../../src/file"; import {MediaTypes} from "../../src/iCodec"; import {ChannelMode, MpegVersion} from "../../src/mpeg/mpegEnums"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Mpeg_AudioHeader_ConstructorTests { @@ -50,8 +48,12 @@ const assert = Chai.assert; @test public fromInfo_invalidArguments() { // Act/Assert - Testers.testSafeUint((v: number) => { MpegAudioHeader.fromInfo(v, 123, XingHeader.unknown, VbriHeader.unknown); }); - Testers.testSafeUint((v: number) => { MpegAudioHeader.fromInfo(123, v, XingHeader.unknown, VbriHeader.unknown); }); + Testers.testSafeUint((v: number) => { + MpegAudioHeader.fromInfo(v, 123, XingHeader.unknown, VbriHeader.unknown); + }); + Testers.testSafeUint((v: number) => { + MpegAudioHeader.fromInfo(123, v, XingHeader.unknown, VbriHeader.unknown); + }); Testers.testTruthy((v: XingHeader) => { MpegAudioHeader.fromInfo(123, 123, v, VbriHeader.unknown); }); Testers.testTruthy((v: VbriHeader) => { MpegAudioHeader.fromInfo(123, 123, XingHeader.unknown, v); }); } diff --git a/test-unit/mpeg/mpegVideoHeaderTests.ts b/test-unit/mpeg/mpegVideoHeaderTests.ts index 1e938779..837f4b7d 100644 --- a/test-unit/mpeg/mpegVideoHeaderTests.ts +++ b/test-unit/mpeg/mpegVideoHeaderTests.ts @@ -1,13 +1,13 @@ import * as Chai from "chai"; import * as TypeMoq from "typemoq"; -import TestFile from "../utilities/testFile"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import MpegVideoHeader from "../../src/mpeg/mpegVideoHeader"; +import TestFile from "../utilities/testFile"; import {ByteVector} from "../../src/byteVector"; import {File} from "../../src/file"; import {MediaTypes} from "../../src/iCodec"; +import {Testers} from "../utilities/testers"; // Setup Chai const assert = Chai.assert; diff --git a/test-unit/mpeg/vbriHeaderTests.ts b/test-unit/mpeg/vbriHeaderTests.ts index b391c6ed..6534cb06 100644 --- a/test-unit/mpeg/vbriHeaderTests.ts +++ b/test-unit/mpeg/vbriHeaderTests.ts @@ -1,13 +1,11 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import VbriHeader from "../../src/mpeg/vbriHeader"; import {ByteVector} from "../../src/byteVector"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Mpeg_XingHeaderTests { diff --git a/test-unit/mpeg/xingHeaderTests.ts b/test-unit/mpeg/xingHeaderTests.ts index d85fcd01..6d697c45 100644 --- a/test-unit/mpeg/xingHeaderTests.ts +++ b/test-unit/mpeg/xingHeaderTests.ts @@ -1,14 +1,12 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {Testers} from "../utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import XingHeader from "../../src/mpeg/xingHeader"; import {ByteVector} from "../../src/byteVector"; import {ChannelMode, MpegVersion} from "../../src/mpeg/mpegEnums"; +import {Testers} from "../utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Mpeg_XingHeaderTests { diff --git a/test-unit/pictureLazyTests.ts b/test-unit/pictureLazyTests.ts index 4920156f..08734a7e 100644 --- a/test-unit/pictureLazyTests.ts +++ b/test-unit/pictureLazyTests.ts @@ -1,17 +1,15 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; import * as TypeMoq from "typemoq"; -import TestStream from "./utilities/testStream"; -import {Testers} from "./utilities/testers"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import PictureLazy from "../src/pictureLazy"; +import TestStream from "./utilities/testStream"; import {IFileAbstraction} from "../src/fileAbstraction"; import {ByteVector, StringType} from "../src/byteVector"; import {PictureType} from "../src/iPicture"; +import {Testers} from "./utilities/testers"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class PictureLazy_Tests { diff --git a/test-unit/pictureTests.ts b/test-unit/pictureTests.ts index 925f3b53..f5d880df 100644 --- a/test-unit/pictureTests.ts +++ b/test-unit/pictureTests.ts @@ -1,12 +1,10 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import Picture from "../src/picture"; import {ByteVector, StringType} from "../src/byteVector"; // Setup chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; @suite class Picture_StaticMethodTests { diff --git a/test-unit/riff/aviHeaderListTests.ts b/test-unit/riff/aviHeaderListTests.ts index b7ab4cb9..2fd81bac 100644 --- a/test-unit/riff/aviHeaderListTests.ts +++ b/test-unit/riff/aviHeaderListTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import RiffList from "../../src/riff/riffList"; import TestFile from "../utilities/testFile"; diff --git a/test-unit/riff/aviStreamHeaderTests.ts b/test-unit/riff/aviStreamHeaderTests.ts index 5057c970..6b53848b 100644 --- a/test-unit/riff/aviStreamHeaderTests.ts +++ b/test-unit/riff/aviStreamHeaderTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {AviStreamHeader} from "../../src/riff/aviStreamHeader"; import {ByteVector} from "../../src/byteVector"; diff --git a/test-unit/riff/aviStreamTests.ts b/test-unit/riff/aviStreamTests.ts index 9de0b0b8..be98e4da 100644 --- a/test-unit/riff/aviStreamTests.ts +++ b/test-unit/riff/aviStreamTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {AviStream} from "../../src/riff/aviStream"; import {ByteVector} from "../../src/byteVector"; import {Testers} from "../utilities/testers"; diff --git a/test-unit/riff/divxTagTests.ts b/test-unit/riff/divxTagTests.ts index 050470dc..6cc186d8 100644 --- a/test-unit/riff/divxTagTests.ts +++ b/test-unit/riff/divxTagTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {Mock} from "typemoq"; import DivxTag from "../../src/riff/divxTag"; diff --git a/test-unit/riff/infoTagTests.ts b/test-unit/riff/infoTagTests.ts index 5a6a70a2..0ebe3aae 100644 --- a/test-unit/riff/infoTagTests.ts +++ b/test-unit/riff/infoTagTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {Mock} from "typemoq"; import InfoTag from "../../src/riff/infoTag"; diff --git a/test-unit/riff/movieIdTagTests.ts b/test-unit/riff/movieIdTagTests.ts index cc88ede8..c3547c5e 100644 --- a/test-unit/riff/movieIdTagTests.ts +++ b/test-unit/riff/movieIdTagTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {Mock} from "typemoq"; import MovieIdTag from "../../src/riff/movieIdTag"; diff --git a/test-unit/riff/riffBitmapInfoHeaderTests.ts b/test-unit/riff/riffBitmapInfoHeaderTests.ts index b028f41c..f8d5ce76 100644 --- a/test-unit/riff/riffBitmapInfoHeaderTests.ts +++ b/test-unit/riff/riffBitmapInfoHeaderTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import RiffBitmapInfoHeader from "../../src/riff/riffBitmapInfoHeader"; import {ByteVector} from "../../src/byteVector"; diff --git a/test-unit/riff/riffListTests.ts b/test-unit/riff/riffListTests.ts index 6216ae07..32f02fcf 100644 --- a/test-unit/riff/riffListTests.ts +++ b/test-unit/riff/riffListTests.ts @@ -1,5 +1,5 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; +import {suite, test} from "@testdeck/mocha"; import {Mock} from "typemoq"; import RiffList from "../../src/riff/riffList"; diff --git a/test-unit/riff/riffWaveFormatExTests.ts b/test-unit/riff/riffWaveFormatExTests.ts index 0aa6d86a..32dbb28a 100644 --- a/test-unit/riff/riffWaveFormatExTests.ts +++ b/test-unit/riff/riffWaveFormatExTests.ts @@ -1,10 +1,10 @@ import * as Chai from "chai"; -import {suite, test} from "mocha-typescript"; -import {Testers} from "../utilities/testers"; -import {ByteVector} from "../../src/byteVector"; +import {suite, test} from "@testdeck/mocha"; import RiffWaveFormatEx from "../../src/riff/riffWaveFormatEx"; +import {ByteVector} from "../../src/byteVector"; import {MediaTypes} from "../../src/iCodec"; +import {Testers} from "../utilities/testers"; // Setup chai const assert = Chai.assert; diff --git a/test-unit/streamTest.ts b/test-unit/streamTest.ts index 32f67a87..40927cde 100644 --- a/test-unit/streamTest.ts +++ b/test-unit/streamTest.ts @@ -1,13 +1,13 @@ import * as Chai from "chai"; import * as ChaiAsPromised from "chai-as-promised"; import * as fs from "fs"; +import {suite, test} from "@testdeck/mocha"; + import PropertyTests from "./utilities/propertyTests"; import TestConstants from "./testConstants"; -import {Testers} from "./utilities/testers"; -import {suite, test} from "mocha-typescript"; - import {ByteVector} from "../src/byteVector"; import {SeekOrigin, Stream} from "../src/stream"; +import {Testers} from "./utilities/testers"; // Setup chai Chai.use(ChaiAsPromised); diff --git a/test-unit/utilities/propertyTests.ts b/test-unit/utilities/propertyTests.ts index fefed4bb..3fc7cb8e 100644 --- a/test-unit/utilities/propertyTests.ts +++ b/test-unit/utilities/propertyTests.ts @@ -1,8 +1,6 @@ import * as Chai from "chai"; -import * as ChaiAsPromised from "chai-as-promised"; // Setup Chai -Chai.use(ChaiAsPromised); const assert = Chai.assert; export default class PropertyTests { diff --git a/test-unit/utilities/testStream.ts b/test-unit/utilities/testStream.ts index 58806218..19e1fb02 100644 --- a/test-unit/utilities/testStream.ts +++ b/test-unit/utilities/testStream.ts @@ -1,4 +1,3 @@ -import * as fs from "fs"; import {ByteVector} from "../../src/byteVector"; import {IStream, SeekOrigin} from "../../src/stream"; @@ -70,12 +69,16 @@ export default class TestStream implements IStream { this._position = Math.max(this.length, this._position); } - public write(buffer: fs.BinaryData, bufferOffset: number, length: number): number { + public write(buffer: ByteVector | Uint8Array, bufferOffset: number, length: number): number { + if (buffer instanceof ByteVector) { + buffer = buffer.data; + } + if (!this._isWritable) { throw new Error("Invalid operation: this stream is a read-only stream"); } - const bytesToWrite = ByteVector.fromByteArray(AB2B(buffer.buffer.slice(bufferOffset, length))); + const bytesToWrite = ByteVector.fromByteArray(AB2B(buffer.slice(bufferOffset, length))); if (this._position < this._data.length) { this._data.removeRange(this._position, bytesToWrite.length); } From 9024216171d70a18117db85608d82345f808b0e4 Mon Sep 17 00:00:00 2001 From: Benjamin Russell Date: Sun, 4 Jul 2021 17:12:19 -0500 Subject: [PATCH 09/10] Fix test scripts to run properly --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4118e42b..169fa9d2 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "generate-docs": "typedoc --tsconfig tsconfig.json", "madge": "node node_modules/madge/bin/cli.js --warning --circular --extensions ts ./", "publish-coverage": "nyc report --reporter=text-lcov | coveralls", - "test-unit": "mocha test-unit", - "test-unit-with-coverage": "nyc mocha test-unit" + "test-unit": "mocha test-unit --ui bdd", + "test-unit-with-coverage": "nyc mocha test-unit --ui bdd" }, "engines": { "node": ">=12.16.1" From 59f798685db4d6cb8940b77b07096ee673696201 Mon Sep 17 00:00:00 2001 From: Benjamin Russell Date: Mon, 5 Jul 2021 00:15:55 -0500 Subject: [PATCH 10/10] The stuff I need to do before a release --- README.md | 3 + docs/README.md | 3 + docs/classes/aacfile.md | 628 ++-- docs/classes/aifffile.md | 571 ++-- docs/classes/apefile.md | 628 ++-- docs/classes/apetag.md | 1328 +++++---- docs/classes/asfcontentdescriptionobject.md | 218 +- docs/classes/asfcontentdescriptor.md | 198 +- .../asfextendedcontentdescriptionobject.md | 184 +- docs/classes/asffile.md | 561 ++-- docs/classes/asffilepropertiesobject.md | 174 +- docs/classes/asfheaderextensionobject.md | 128 +- docs/classes/asfheaderobject.md | 152 +- docs/classes/asfmetadatadescriptor.md | 214 +- docs/classes/asfmetadatalibraryobject.md | 196 +- docs/classes/asfpaddingobject.md | 144 +- docs/classes/asfstreampropertiesobject.md | 156 +- docs/classes/asftag.md | 1482 ++++++---- docs/classes/asfunknownobject.md | 126 +- docs/classes/aviaudiostream.md | 138 + docs/classes/avistream.md | 121 + docs/classes/avistreamheader.md | 282 ++ docs/classes/avivideostream.md | 138 + docs/classes/bytevector.md | 940 +++--- docs/classes/combinedtag.md | 1207 ++++---- docs/classes/corruptfileerror.md | 99 +- docs/classes/divxtag.md | 2270 +++++++++++++++ docs/classes/file.md | 426 +-- docs/classes/id3v1tag.md | 1180 +++++--- docs/classes/id3v2attachmentframe.md | 493 ++-- docs/classes/id3v2commentsframe.md | 427 +-- docs/classes/id3v2eventtimecode.md | 76 +- docs/classes/id3v2eventtimecodeframe.md | 329 ++- docs/classes/id3v2extendedheader.md | 48 +- docs/classes/id3v2frame.md | 230 +- docs/classes/id3v2frameheader.md | 138 +- docs/classes/id3v2frameidentifier.md | 52 +- docs/classes/id3v2musiccdidentifierframe.md | 285 +- docs/classes/id3v2playcountframe.md | 295 +- docs/classes/id3v2popularimeterframe.md | 359 ++- docs/classes/id3v2privateframe.md | 325 ++- docs/classes/id3v2relativevolumeframe.md | 407 +-- .../id3v2relativevolumeframechanneldata.md | 108 +- docs/classes/id3v2settings.md | 176 +- docs/classes/id3v2synchronized.md | 449 +-- docs/classes/id3v2synchronizedlyricsframe.md | 60 +- docs/classes/id3v2tag.md | 1444 ++++++---- docs/classes/id3v2tagfooter.md | 134 +- docs/classes/id3v2tagheader.md | 120 +- docs/classes/id3v2termsofuseframe.md | 383 ++- docs/classes/id3v2textinformationframe.md | 377 ++- .../classes/id3v2uniquefileidentifierframe.md | 327 ++- docs/classes/id3v2unknownframe.md | 287 +- docs/classes/id3v2unsynchronizedframe.md | 427 +-- docs/classes/id3v2urllinkframe.md | 375 ++- docs/classes/id3v2usertextinformationframe.md | 455 +-- docs/classes/id3v2userurllinkframe.md | 449 +-- docs/classes/infotag.md | 2443 ++++++++++++++++ docs/classes/localfileabstraction.md | 62 +- docs/classes/movieidtag.md | 2535 +++++++++++++++++ docs/classes/mpegaudiofile.md | 620 ++-- docs/classes/mpegaudioheader.md | 206 +- docs/classes/mpegfile.md | 626 ++-- docs/classes/mpegvbriheader.md | 58 +- docs/classes/mpegvideoheader.md | 86 +- docs/classes/mpegxingheader.md | 72 +- docs/classes/notimplementederror.md | 105 +- docs/classes/picture.md | 140 +- docs/classes/picturelazy.md | 214 +- docs/classes/properties.md | 150 +- docs/classes/riffbitmapinfoheader.md | 255 ++ docs/classes/rifffile.md | 837 ++++++ docs/classes/rifflist.md | 308 ++ docs/classes/rifflisttag.md | 2530 ++++++++++++++++ docs/classes/riffwaveformatex.md | 225 ++ docs/classes/tag.md | 1090 ++++--- docs/enums/asfobjectdatatype.md | 16 +- docs/enums/avistreamtype.md | 44 + docs/enums/fileaccessmode.md | 6 +- docs/enums/id3v2eventtype.md | 50 +- docs/enums/id3v2frameclasstype.md | 34 +- docs/enums/id3v2frameflags.md | 18 +- .../id3v2relativevolumeframechanneltype.md | 18 +- docs/enums/id3v2synchronizedtexttype.md | 18 +- docs/enums/id3v2tagheaderflags.md | 10 +- docs/enums/id3v2timestampformat.md | 6 +- docs/enums/mediatypes.md | 12 +- docs/enums/mpegaudiochannelmode.md | 8 +- docs/enums/mpegversion.md | 8 +- docs/enums/picturetype.md | 44 +- docs/enums/readstyle.md | 6 +- docs/enums/stringtype.md | 10 +- docs/enums/tagtypes.md | 40 +- docs/interfaces/iaudiocodec.md | 32 +- docs/interfaces/icodec.md | 14 +- docs/interfaces/ilosslessaudiocodec.md | 45 +- docs/interfaces/iphotocodec.md | 30 +- docs/interfaces/ipicture.md | 20 +- docs/interfaces/ivideocodec.md | 31 +- docs/modules.md | 89 +- package.json | 2 +- src/asf/objects/descriptorBase.ts | 2 +- src/riff/aviStream.ts | 2 +- src/riff/aviStreamHeader.ts | 4 +- src/riff/riffFile.ts | 4 +- test-unit/aac/aacAudioHeaderTests.ts | 2 +- test-unit/aiff/aiffStreamHeaderTests.ts | 4 +- test-unit/ape/apeStreamHeaderTests.ts | 8 +- test-unit/ape/apeTagFooterTests.ts | 6 +- test-unit/ape/apeTagTests.ts | 10 +- test-unit/asf/asfTagTests.ts | 12 +- test-unit/asf/headerExtensionObjectTests.ts | 12 +- test-unit/asf/headerObjectTests.ts | 34 +- test-unit/byteVectorConstructorTests.ts | 146 +- test-unit/byteVectorConversionTests.ts | 18 +- test-unit/byteVectorVoidMethodTests.ts | 20 +- test-unit/id3v2/attachmentsFrameTests.ts | 22 +- test-unit/id3v2/commentsFrameTests.ts | 30 +- test-unit/id3v2/eventTimeCodeFrameTests.ts | 24 +- test-unit/id3v2/frameFactoryTests.ts | 56 +- test-unit/id3v2/frameIdentifiersTests.ts | 2 +- test-unit/id3v2/frameTests.ts | 2 +- test-unit/id3v2/id3v2TagTests.ts | 2 +- .../id3v2/musicCdIdentifierFrameTests.ts | 16 +- test-unit/id3v2/privateFrameTests.ts | 20 +- test-unit/id3v2/relativeVolumeFrameTests.ts | 10 +- .../id3v2/synchronizedLyricsFrameTests.ts | 16 +- test-unit/id3v2/tagFooterTests.ts | 16 +- test-unit/id3v2/tagHeaderTests.ts | 22 +- test-unit/id3v2/termsOfUseFrameTests.ts | 10 +- test-unit/id3v2/textInformationFrameTests.ts | 41 +- .../id3v2/uniqueFileIdentifierFrameTests.ts | 24 +- test-unit/id3v2/unknownFrameTests.ts | 12 +- .../id3v2/unsynchronizedLyricsFrameTests.ts | 12 +- test-unit/id3v2/urlLinkFrameTests.ts | 22 +- .../id3v2/userTextInformationFrameTests.ts | 10 +- test-unit/mpeg/mpegAudioHeaderTests.ts | 12 +- test-unit/mpeg/mpegVideoHeaderTests.ts | 6 +- test-unit/pictureLazyTests.ts | 16 +- test-unit/riff/aviHeaderListTests.ts | 2 +- test-unit/riff/divxTagTests.ts | 10 +- test-unit/riff/riffListTests.ts | 6 +- test-unit/streamTest.ts | 28 +- 143 files changed, 27112 insertions(+), 9724 deletions(-) create mode 100644 docs/classes/aviaudiostream.md create mode 100644 docs/classes/avistream.md create mode 100644 docs/classes/avistreamheader.md create mode 100644 docs/classes/avivideostream.md create mode 100644 docs/classes/divxtag.md create mode 100644 docs/classes/infotag.md create mode 100644 docs/classes/movieidtag.md create mode 100644 docs/classes/riffbitmapinfoheader.md create mode 100644 docs/classes/rifffile.md create mode 100644 docs/classes/rifflist.md create mode 100644 docs/classes/rifflisttag.md create mode 100644 docs/classes/riffwaveformatex.md create mode 100644 docs/enums/avistreamtype.md diff --git a/README.md b/README.md index 55475800..24bd5285 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,10 @@ improved on the original TagLib, hence why this project exists. ## Supported Tagging Formats * [APE](http://wiki.hydrogenaud.io/index.php?title=APE_key): `AAC`, `APE`, `M2A`, `MP1`, `MP2`, `MP3` * [ASF](https://docs.microsoft.com/en-us/windows/win32/wmformat/overview-of-the-asf-format): `ASF`, `WMA`, `WMV` +* DIVX: `AVI`, `DIVX` * [ID3v1](https://id3.org/ID3v1): `AAC`, `M2A`, `MP1`, `MP2`, `MP3` * [ID3v2](https://id3.org/Developer%20Information): `AAC`, `AIF`, `AIFF`, `M2A`, `MP1`, `MP2`, `MP3` +* [RIFF Info](https://www.exiftool.org/TagNames/RIFF.html#Info): `AVI`, `DIVX`, `WAV` * ... More coming soon ## Supported File Formats @@ -28,6 +30,7 @@ improved on the original TagLib, hence why this project exists. * MPEG-1/2 Audio: `M2A`, `MP1`, `MP2`, `MP3` * MPEG-1/2 Video: `M2V`, `MPE`, `MPEG`, `MPG`, `MPV2` * Monkey's Audio: `APE` +* Resource Interchange File Format (RIFF): `AVI`, `DIVX`, `WAV` * ... More coming soon ## Installation diff --git a/docs/README.md b/docs/README.md index bfd0a155..3a796d8a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -19,8 +19,10 @@ improved on the original TagLib, hence why this project exists. ## Supported Tagging Formats * [APE](http://wiki.hydrogenaud.io/index.php?title=APE_key): `AAC`, `APE`, `M2A`, `MP1`, `MP2`, `MP3` * [ASF](https://docs.microsoft.com/en-us/windows/win32/wmformat/overview-of-the-asf-format): `ASF`, `WMA`, `WMV` +* DIVX: `AVI`, `DIVX` * [ID3v1](https://id3.org/ID3v1): `AAC`, `M2A`, `MP1`, `MP2`, `MP3` * [ID3v2](https://id3.org/Developer%20Information): `AAC`, `AIF`, `AIFF`, `M2A`, `MP1`, `MP2`, `MP3` +* [RIFF Info](https://www.exiftool.org/TagNames/RIFF.html#Info): `AVI`, `DIVX`, `WAV` * ... More coming soon ## Supported File Formats @@ -30,6 +32,7 @@ improved on the original TagLib, hence why this project exists. * MPEG-1/2 Audio: `M2A`, `MP1`, `MP2`, `MP3` * MPEG-1/2 Video: `M2V`, `MPE`, `MPEG`, `MPG`, `MPV2` * Monkey's Audio: `APE` +* Resource Interchange File Format (RIFF): `AVI`, `DIVX`, `WAV` * ... More coming soon ## Installation diff --git a/docs/classes/aacfile.md b/docs/classes/aacfile.md index 8aefaf5d..deab00ae 100644 --- a/docs/classes/aacfile.md +++ b/docs/classes/aacfile.md @@ -11,9 +11,9 @@ This class extends [File](file.md) to provide tagging and properties for ADTS AA ## Hierarchy -* *NonContainerFile* +- `NonContainerFile` - ↳ **AacFile** + ↳ **`AacFile`** ## Table of contents @@ -31,7 +31,6 @@ This class extends [File](file.md) to provide tagging and properties for ADTS AA ### Accessors -- [bufferSize](aacfile.md#buffersize) - [corruptionReasons](aacfile.md#corruptionreasons) - [endTag](aacfile.md#endtag) - [fileAbstraction](aacfile.md#fileabstraction) @@ -49,6 +48,7 @@ This class extends [File](file.md) to provide tagging and properties for ADTS AA - [tag](aacfile.md#tag) - [tagTypes](aacfile.md#tagtypes) - [tagTypesOnDisk](aacfile.md#tagtypesondisk) +- [bufferSize](aacfile.md#buffersize) ### Methods @@ -80,309 +80,387 @@ This class extends [File](file.md) to provide tagging and properties for ADTS AA ### constructor -\+ **new AacFile**(`file`: *string* \| IFileAbstraction, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*AacFile*](aacfile.md) +• **new AacFile**(`file`, `propertiesStyle`) -**`inheritdoc`** +**`inheritdoc`** -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`file` | *string* \| IFileAbstraction | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `file` | `string` \| `IFileAbstraction` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*AacFile*](aacfile.md) +#### Overrides + +NonContainerFile.constructor ## Properties ### \_fileAbstraction -• `Protected` **\_fileAbstraction**: IFileAbstraction +• `Protected` **\_fileAbstraction**: `IFileAbstraction` + +#### Inherited from + +NonContainerFile.\_fileAbstraction ___ ### \_fileStream -• `Protected` **\_fileStream**: IStream +• `Protected` **\_fileStream**: `IStream` + +#### Inherited from + +NonContainerFile.\_fileStream ___ ### \_invariantEndPosition -• `Protected` **\_invariantEndPosition**: *number*= -1 +• `Protected` **\_invariantEndPosition**: `number` = `-1` + +#### Inherited from + +NonContainerFile.\_invariantEndPosition ___ ### \_invariantStartPosition -• `Protected` **\_invariantStartPosition**: *number*= -1 - -___ +• `Protected` **\_invariantStartPosition**: `number` = `-1` -### \_tagTypesOnDisk +#### Inherited from -• `Protected` **\_tagTypesOnDisk**: [*TagTypes*](../enums/tagtypes.md) +NonContainerFile.\_invariantStartPosition -## Accessors +___ -### bufferSize +### \_tagTypesOnDisk -• **bufferSize**(): *number* +• `Protected` **\_tagTypesOnDisk**: [`TagTypes`](../enums/tagtypes.md) -Gets the buffer size to use when reading large blocks of data +#### Inherited from -**Returns:** *number* +NonContainerFile.\_tagTypesOnDisk -___ +## Accessors ### corruptionReasons -• **corruptionReasons**(): *string*[] +• `get` **corruptionReasons**(): `string`[] Reasons for which this file is marked as corrupt. -**Returns:** *string*[] +#### Returns + +`string`[] ___ ### endTag -• **endTag**(): *default* +• `Protected` `get` **endTag**(): `default` Gets the collection of tags appearing at the end of the file. -**Returns:** *default* +#### Returns + +`default` ___ ### fileAbstraction -• **fileAbstraction**(): IFileAbstraction +• `get` **fileAbstraction**(): `IFileAbstraction` Gets the {@link IFileAbstraction} representing the file. -**Returns:** IFileAbstraction +#### Returns + +`IFileAbstraction` ___ ### invariantEndPosition -• **invariantEndPosition**(): *number* +• `get` **invariantEndPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance ends. If the value could not be determined, `-1` is returned; -**Returns:** *number* +#### Returns + +`number` ___ ### invariantStartPosition -• **invariantStartPosition**(): *number* +• `get` **invariantStartPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance begins. If the value could not be determined, `-1` is returned. -**Returns:** *number* +#### Returns + +`number` ___ ### isPossiblyCorrupt -• **isPossiblyCorrupt**(): *boolean* +• `get` **isPossiblyCorrupt**(): `boolean` Indicates whether or not this file may be corrupt. Files with unknown corruptions should not be written. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isWritable -• **isWritable**(): *boolean* +• `get` **isWritable**(): `boolean` Indicates whether or not tags can be written back to the current file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### length -• **length**(): *number* +• `get` **length**(): `number` Gets the length of the file represented by the current instance. Value will be 0 if the file is not open for reading; -**Returns:** *number* +#### Returns + +`number` ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets the MimeType of the file as determined during creation of the instance. -**Returns:** *string* +#### Returns + +`string` ___ ### mode -• **mode**(): [*FileAccessMode*](../enums/fileaccessmode.md) +• `get` **mode**(): [`FileAccessMode`](../enums/fileaccessmode.md) Gets the file access mode in use by the current instance. -**Returns:** [*FileAccessMode*](../enums/fileaccessmode.md) +#### Returns + +[`FileAccessMode`](../enums/fileaccessmode.md) -• **mode**(`val`: [*FileAccessMode*](../enums/fileaccessmode.md)): *void* +• `set` **mode**(`val`): `void` Sets the file access mode in use by the current instance. Changing the value will cause the stream currently in use to be closed, except when a change is made from [FileAccessMode.Write](../enums/fileaccessmode.md#write) to [FileAccessMode.Read](../enums/fileaccessmode.md#read) which has no effect. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`val` | [*FileAccessMode*](../enums/fileaccessmode.md) | File access mode to change to | +| Name | Type | Description | +| :------ | :------ | :------ | +| `val` | [`FileAccessMode`](../enums/fileaccessmode.md) | File access mode to change to | -**Returns:** *void* +#### Returns + +`void` ___ ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the file as stored in its file abstraction. -**Returns:** *string* +#### Returns + +`string` ___ ### position -• **position**(): *number* +• `get` **position**(): `number` Gets the seek position in the internal stream used by the current instance. Value will be 0 if the file is not open for reading -**Returns:** *number* +#### Returns + +`number` ___ ### properties -• **properties**(): [*Properties*](properties.md) +• `get` **properties**(): [`Properties`](properties.md) Gets the media properties of the file represented by the current instance. -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) ___ ### startTag -• **startTag**(): *default* +• `Protected` `get` **startTag**(): `default` Gets the collection of tags appearing at the start of the file. -**Returns:** *default* +#### Returns + +`default` ___ ### tag -• **tag**(): *default* +• `get` **tag**(): `default` Gets an abstract representation of all tags stored in the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### tagTypesOnDisk -• **tagTypesOnDisk**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypesOnDisk**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the physical file represented by the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### bufferSize + +• `Static` `get` **bufferSize**(): `number` + +Gets the buffer size to use when reading large blocks of data + +#### Returns + +`number` ## Methods ### dispose -▸ **dispose**(): *void* +▸ **dispose**(): `void` Dispose the current instance. Equivalent to setting the mode to closed. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.dispose ___ ### find -▸ **find**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `before?`: [*ByteVector*](bytevector.md)): *number* +▸ **find**(`pattern`, `startPosition?`, `before?`): `number` Searches forward through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` is not provided or `startPosition` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be smaller than the | +| `startPosition` | `number` | `0` | Seek position to start searching. Must be positive, safe integer. | +| `before?` | [`ByteVector`](bytevector.md) | `undefined` | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be smaller than the | -`startPosition` | *number* | 0 | Seek position to start searching. Must be positive, safe integer. | -`before?` | [*ByteVector*](bytevector.md) | - | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | +#### Returns -**Returns:** *number* +`number` Index at which the value was found. If not found, `-1` is returned. +#### Inherited from + +NonContainerFile.find + ___ ### getTag -▸ **getTag**(`type`: [*TagTypes*](../enums/tagtypes.md), `create`: *boolean*): [*Tag*](tag.md) +▸ **getTag**(`type`, `create`): [`Tag`](tag.md) Gets a tag of a specified type from the current instance, optionally creating a new tag if possible. If a [Id3v2Tag](id3v2tag.md) is added to the current instance, it will be placed at the start of the file. On the other hand, [Id3v1Tag](id3v1tag.md) and [ApeTag](apetag.md) will be added to the end of the file. All other tag types will be ignored. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`TagTypes`](../enums/tagtypes.md) | Type of tag to read | +| `create` | `boolean` | Whether or not to create a tag if one is not found | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*TagTypes*](../enums/tagtypes.md) | Type of tag to read | -`create` | *boolean* | Whether or not to create a tag if one is not found | +#### Returns -**Returns:** [*Tag*](tag.md) +[`Tag`](tag.md) Tag Tag that was found in or added to the current instance. If no matching tag was found and none was created, `undefined` is returned. +#### Overrides + +NonContainerFile.getTag + ___ ### insert -▸ **insert**(`data`: [*ByteVector*](bytevector.md), `start`: *number*, `replace?`: *number*): *void* +▸ **insert**(`data`, `start`, `replace?`): `void` Inserts a specified block of data into the file represented by the current instance, at a specified location, replacing a specified number of bytes. @@ -390,70 +468,94 @@ specified location, replacing a specified number of bytes. **`throws`** Error Thrown when: 1) data is falsey, 2) start is not a safe, positive number, or 3) replace is not a safe, positive number -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | `undefined` | Data to insert into the file. | +| `start` | `number` | `undefined` | Index into the file at which to insert the data. Must be safe positive integer. | +| `replace` | `number` | `0` | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | + +#### Returns + +`void` -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | - | Data to insert into the file. | -`start` | *number* | - | Index into the file at which to insert the data. Must be safe positive integer. | -`replace` | *number* | 0 | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | +#### Inherited from -**Returns:** *void* +NonContainerFile.insert ___ ### markAsCorrupt -▸ **markAsCorrupt**(`reason`: *string*): *void* +▸ **markAsCorrupt**(`reason`): `void` Mark the current instance as corrupt. NOTE: Not intended to be used outside of this library. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`reason` | *string* | Reason why this file is considered to be corrupt | +| Name | Type | Description | +| :------ | :------ | :------ | +| `reason` | `string` | Reason why this file is considered to be corrupt | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.markAsCorrupt ___ ### preSave -▸ `Protected`**preSave**(): *void* +▸ `Protected` **preSave**(): `void` Prepares to save the file. This must be called at the beginning of every File.save() method. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.preSave ___ ### rFind -▸ **rFind**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `after?`: [*ByteVector*](bytevector.md)): *number* +▸ **rFind**(`pattern`, `startPosition?`, `after?`): `number` Searched backwards through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` was not provided or if `startPosition` is not a safe, positive integer. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be shorter than the [bufferSize](aacfile.md#buffersize) | -`startPosition` | *number* | 0 | Seek position from which to start searching. | -`after?` | [*ByteVector*](bytevector.md) | - | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be shorter than the [bufferSize](aacfile.md#buffersize) | +| `startPosition` | `number` | `0` | Seek position from which to start searching. | +| `after?` | [`ByteVector`](bytevector.md) | `undefined` | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | -**Returns:** *number* +#### Returns + +`number` Index at which the value wa found. If not found, `-1` is returned. +#### Inherited from + +NonContainerFile.rFind + ___ ### readBlock -▸ **readBlock**(`length`: *number*): [*ByteVector*](bytevector.md) +▸ **readBlock**(`length`): [`ByteVector`](bytevector.md) Reads a specified number of bytes at the current seek position from the current position. This method reads the block of data at the current seek position. To change the seek @@ -461,153 +563,207 @@ position, use [File.seek](file.md#seek). **`throws`** Error Thrown when `length` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to read. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to read. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Object containing the data read from the current instance. +#### Inherited from + +NonContainerFile.readBlock + ___ ### readEnd -▸ `Protected`**readEnd**(`_end`: *number*, `_propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **readEnd**(`_end`, `_propertiesStyle`): `void` + +**`inheritdoc`** + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `_end` | `number` | +| `_propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**`inheritdoc`** +#### Returns -#### Parameters: +`void` -Name | Type | ------- | ------ | -`_end` | *number* | -`_propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +#### Overrides -**Returns:** *void* +NonContainerFile.readEnd ___ ### readProperties -▸ `Protected`**readProperties**(`start`: *number*, `end`: *number*, `_propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*Properties*](properties.md) +▸ `Protected` **readProperties**(`start`, `end`, `_propertiesStyle`): [`Properties`](properties.md) -**`inheritdoc`** +**`inheritdoc`** -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`start` | *number* | -`end` | *number* | -`_propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `start` | `number` | +| `end` | `number` | +| `_propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) + +#### Overrides + +NonContainerFile.readProperties ___ ### readStart -▸ `Protected`**readStart**(`start`: *number*, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **readStart**(`start`, `propertiesStyle`): `void` + +**`inheritdoc`** -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `start` | `number` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -Name | Type | ------- | ------ | -`start` | *number* | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +#### Returns -**Returns:** *void* +`void` + +#### Overrides + +NonContainerFile.readStart ___ ### removeBlock -▸ **removeBlock**(`start`: *number*, `length`: *number*): *void* +▸ **removeBlock**(`start`, `length`): `void` Removes a specified block of data from the file represented by the current instance. **`throws`** Error thrown if 1) start is not a safe, positive integer or 2) length must be a safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `start` | `number` | Index into the file at which to remove data. Must be safe, positive integer. | +| `length` | `number` | Number of bytes to remove. Must be a safe integer. | -Name | Type | Description | ------- | ------ | ------ | -`start` | *number* | Index into the file at which to remove data. Must be safe, positive integer. | -`length` | *number* | Number of bytes to remove. Must be a safe integer. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.removeBlock ___ ### removeTags -▸ **removeTags**(`types`: [*TagTypes*](../enums/tagtypes.md)): *void* +▸ **removeTags**(`types`): `void` + +**`inheritdoc`** + +#### Parameters -**`inheritdoc`** +| Name | Type | +| :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`types` | [*TagTypes*](../enums/tagtypes.md) | +`void` -**Returns:** *void* +#### Inherited from + +NonContainerFile.removeTags ___ ### save -▸ **save**(): *void* +▸ **save**(): `void` + +**`inheritdoc`** + +#### Returns -**`inheritdoc`** +`void` -**Returns:** *void* +#### Inherited from + +NonContainerFile.save ___ ### seek -▸ **seek**(`offset`: *number*, `origin?`: SeekOrigin): *void* +▸ **seek**(`offset`, `origin?`): `void` Moves the read/write pointer to a specified offset in the current instance, relative to a specified origin. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `offset` | `number` | Byte offset to seek to. Must be a safe, positive integer. | +| `origin` | `SeekOrigin` | Origin from which to seek | + +#### Returns + +`void` -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`offset` | *number* | - | Byte offset to seek to. Must be a safe, positive integer. | -`origin` | SeekOrigin | ... | Origin from which to seek | +#### Inherited from -**Returns:** *void* +NonContainerFile.seek ___ ### truncate -▸ `Protected`**truncate**(`length`: *number*): *void* +▸ `Protected` **truncate**(`length`): `void` Resizes the current instance to a specific number of bytes. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to resize the file to, must be a safe, positive integer. | + +#### Returns + +`void` -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to resize the file to, must be a safe, positive integer. | +#### Inherited from -**Returns:** *void* +NonContainerFile.truncate ___ ### writeBlock -▸ **writeBlock**(`data`: [*ByteVector*](bytevector.md)): *void* +▸ **writeBlock**(`data`): `void` Writes a block of data to the file represented by the current instance at the current seek position. This will overwrite any existing data at the seek position and append new data to @@ -615,119 +771,161 @@ the file if writing past the current end. **`throws`** Error Thrown when `data` is not provided. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing data to the current instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing data to the current instance. | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.writeBlock ___ ### addFileType -▸ `Static`**addFileType**(`mimeType`: *string*, `constructor`: [*FileTypeConstructor*](../modules.md#filetypeconstructor), `override?`: *boolean*): *void* +▸ `Static` **addFileType**(`mimeType`, `constructor`, `override?`): `void` Registers the constructor for a subclass of [File](file.md) with the MimeType it is associated with. Optionally, the MimeType can be forcefully overridden if it was already registered. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mimeType` | `string` | `undefined` | MimeType to register this subclass constructor to. | +| `constructor` | [`FileTypeConstructor`](../modules.md#filetypeconstructor) | `undefined` | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | +| `override` | `boolean` | `false` | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mimeType` | *string* | - | MimeType to register this subclass constructor to. | -`constructor` | [*FileTypeConstructor*](../modules.md#filetypeconstructor) | - | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | -`override` | *boolean* | false | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.addFileType ___ ### addFileTypeResolver -▸ `Static`**addFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **addFileTypeResolver**(`resolver`): `void` Registers a [FileTypeResolver](../modules.md#filetyperesolver) to the front of the list of file type resolvers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | -Name | Type | Description | ------- | ------ | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.addFileTypeResolver ___ ### createFromAbstraction -▸ `Static`**createFromAbstraction**(`abstraction`: IFileAbstraction, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromAbstraction**(`abstraction`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of a [File](file.md) subclass for a specified file abstraction, MimeType, and property read style. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`abstraction` | IFileAbstraction | - | Object to use when reading/writing from the current instance. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | Object to use when reading/writing from the current instance. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | -**Returns:** [*File*](file.md) +#### Returns + +[`File`](file.md) New instance of [File](file.md) as read from the specified abstraction. +#### Inherited from + +NonContainerFile.createFromAbstraction + ___ ### createFromPath -▸ `Static`**createFromPath**(`filePath`: *string*, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromPath**(`filePath`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of [File](file.md) subclass for a specified file path, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to read/write. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`filePath` | *string* | - | Path to the file to read/write. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified path. +#### Inherited from + +NonContainerFile.createFromPath + ___ ### removeFileType -▸ `Static`**removeFileType**(`mimeType`: *string*): *void* +▸ `Static` **removeFileType**(`mimeType`): `void` Used for removing a file type constructor during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `mimeType` | `string` | + +#### Returns + +`void` -Name | Type | ------- | ------ | -`mimeType` | *string* | +#### Inherited from -**Returns:** *void* +NonContainerFile.removeFileType ___ ### removeFileTypeResolver -▸ `Static`**removeFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **removeFileTypeResolver**(`resolver`): `void` Used for removing a file type resolver during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | + +#### Returns + +`void` -Name | Type | ------- | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | +#### Inherited from -**Returns:** *void* +NonContainerFile.removeFileTypeResolver diff --git a/docs/classes/aifffile.md b/docs/classes/aifffile.md index a66ccc44..262e12d6 100644 --- a/docs/classes/aifffile.md +++ b/docs/classes/aifffile.md @@ -4,9 +4,9 @@ ## Hierarchy -* [*File*](file.md) +- [`File`](file.md) - ↳ **AiffFile** + ↳ **`AiffFile`** ## Table of contents @@ -29,7 +29,6 @@ ### Accessors -- [bufferSize](aifffile.md#buffersize) - [corruptionReasons](aifffile.md#corruptionreasons) - [fileAbstraction](aifffile.md#fileabstraction) - [invariantEndPosition](aifffile.md#invariantendposition) @@ -45,6 +44,7 @@ - [tag](aifffile.md#tag) - [tagTypes](aifffile.md#tagtypes) - [tagTypesOnDisk](aifffile.md#tagtypesondisk) +- [bufferSize](aifffile.md#buffersize) ### Methods @@ -73,67 +73,77 @@ ### constructor -\+ **new AiffFile**(`file`: *string* \| IFileAbstraction, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*AiffFile*](aifffile.md) +• **new AiffFile**(`file`, `propertiesStyle`) Constructs and initializes a new instance of [AiffFile](aifffile.md) for a specified file abstraction and specified read style. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`file` | *string* \| IFileAbstraction | File abstraction to use when reading and writing to the file | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | Level of accuracy to read the media properties, or [ReadStyle.None](../enums/readstyle.md#none) to ignore the properties | +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | `string` \| `IFileAbstraction` | File abstraction to use when reading and writing to the file | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Level of accuracy to read the media properties, or [ReadStyle.None](../enums/readstyle.md#none) to ignore the properties | -**Returns:** [*AiffFile*](aifffile.md) +#### Overrides -Inherited from: [File](file.md) +[File](file.md).[constructor](file.md#constructor) ## Properties ### \_fileAbstraction -• `Protected` **\_fileAbstraction**: IFileAbstraction +• `Protected` **\_fileAbstraction**: `IFileAbstraction` + +#### Inherited from -Inherited from: [File](file.md).[_fileAbstraction](file.md#_fileabstraction) +[File](file.md).[_fileAbstraction](file.md#_fileabstraction) ___ ### \_fileStream -• `Protected` **\_fileStream**: IStream +• `Protected` **\_fileStream**: `IStream` -Inherited from: [File](file.md).[_fileStream](file.md#_filestream) +#### Inherited from + +[File](file.md).[_fileStream](file.md#_filestream) ___ ### \_invariantEndPosition -• `Protected` **\_invariantEndPosition**: *number*= -1 +• `Protected` **\_invariantEndPosition**: `number` = `-1` + +#### Inherited from -Inherited from: [File](file.md).[_invariantEndPosition](file.md#_invariantendposition) +[File](file.md).[_invariantEndPosition](file.md#_invariantendposition) ___ ### \_invariantStartPosition -• `Protected` **\_invariantStartPosition**: *number*= -1 +• `Protected` **\_invariantStartPosition**: `number` = `-1` + +#### Inherited from -Inherited from: [File](file.md).[_invariantStartPosition](file.md#_invariantstartposition) +[File](file.md).[_invariantStartPosition](file.md#_invariantstartposition) ___ ### \_tagTypesOnDisk -• `Protected` **\_tagTypesOnDisk**: [*TagTypes*](../enums/tagtypes.md) +• `Protected` **\_tagTypesOnDisk**: [`TagTypes`](../enums/tagtypes.md) -Inherited from: [File](file.md).[_tagTypesOnDisk](file.md#_tagtypesondisk) +#### Inherited from + +[File](file.md).[_tagTypesOnDisk](file.md#_tagtypesondisk) ___ ### aiffFormType -▪ `Readonly` `Static` **aiffFormType**: [*ByteVector*](bytevector.md) +▪ `Static` `Readonly` **aiffFormType**: [`ByteVector`](bytevector.md) Identifier used to recognize an AIFF form type. @@ -141,7 +151,7 @@ ___ ### commIdentifier -▪ `Readonly` `Static` **commIdentifier**: [*ByteVector*](bytevector.md) +▪ `Static` `Readonly` **commIdentifier**: [`ByteVector`](bytevector.md) Identifier used to recognize an AIFF common chunk. @@ -149,7 +159,7 @@ ___ ### fileIdentifier -▪ `Readonly` `Static` **fileIdentifier**: [*ByteVector*](bytevector.md) +▪ `Static` `Readonly` **fileIdentifier**: [`ByteVector`](bytevector.md) Identifier used to recognize an AIFF file. @@ -157,7 +167,7 @@ ___ ### id3Identifier -▪ `Readonly` `Static` **id3Identifier**: [*ByteVector*](bytevector.md) +▪ `Static` `Readonly` **id3Identifier**: [`ByteVector`](bytevector.md) Identifier used to recognize an AIFF ID3 chunk. @@ -165,254 +175,306 @@ ___ ### soundIdentifier -▪ `Readonly` `Static` **soundIdentifier**: [*ByteVector*](bytevector.md) +▪ `Static` `Readonly` **soundIdentifier**: [`ByteVector`](bytevector.md) Identifier used to recognize an AIFF sound data chunk. ## Accessors -### bufferSize - -• **bufferSize**(): *number* - -Gets the buffer size to use when reading large blocks of data - -**Returns:** *number* - -___ - ### corruptionReasons -• **corruptionReasons**(): *string*[] +• `get` **corruptionReasons**(): `string`[] Reasons for which this file is marked as corrupt. -**Returns:** *string*[] +#### Returns + +`string`[] ___ ### fileAbstraction -• **fileAbstraction**(): IFileAbstraction +• `get` **fileAbstraction**(): `IFileAbstraction` Gets the {@link IFileAbstraction} representing the file. -**Returns:** IFileAbstraction +#### Returns + +`IFileAbstraction` ___ ### invariantEndPosition -• **invariantEndPosition**(): *number* +• `get` **invariantEndPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance ends. If the value could not be determined, `-1` is returned; -**Returns:** *number* +#### Returns + +`number` ___ ### invariantStartPosition -• **invariantStartPosition**(): *number* +• `get` **invariantStartPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance begins. If the value could not be determined, `-1` is returned. -**Returns:** *number* +#### Returns + +`number` ___ ### isPossiblyCorrupt -• **isPossiblyCorrupt**(): *boolean* +• `get` **isPossiblyCorrupt**(): `boolean` Indicates whether or not this file may be corrupt. Files with unknown corruptions should not be written. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isWritable -• **isWritable**(): *boolean* +• `get` **isWritable**(): `boolean` Indicates whether or not tags can be written back to the current file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### length -• **length**(): *number* +• `get` **length**(): `number` Gets the length of the file represented by the current instance. Value will be 0 if the file is not open for reading; -**Returns:** *number* +#### Returns + +`number` ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets the MimeType of the file as determined during creation of the instance. -**Returns:** *string* +#### Returns + +`string` ___ ### mode -• **mode**(): [*FileAccessMode*](../enums/fileaccessmode.md) +• `get` **mode**(): [`FileAccessMode`](../enums/fileaccessmode.md) Gets the file access mode in use by the current instance. -**Returns:** [*FileAccessMode*](../enums/fileaccessmode.md) +#### Returns + +[`FileAccessMode`](../enums/fileaccessmode.md) -• **mode**(`val`: [*FileAccessMode*](../enums/fileaccessmode.md)): *void* +• `set` **mode**(`val`): `void` Sets the file access mode in use by the current instance. Changing the value will cause the stream currently in use to be closed, except when a change is made from [FileAccessMode.Write](../enums/fileaccessmode.md#write) to [FileAccessMode.Read](../enums/fileaccessmode.md#read) which has no effect. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`val` | [*FileAccessMode*](../enums/fileaccessmode.md) | File access mode to change to | +| Name | Type | Description | +| :------ | :------ | :------ | +| `val` | [`FileAccessMode`](../enums/fileaccessmode.md) | File access mode to change to | -**Returns:** *void* +#### Returns + +`void` ___ ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the file as stored in its file abstraction. -**Returns:** *string* +#### Returns + +`string` ___ ### position -• **position**(): *number* +• `get` **position**(): `number` Gets the seek position in the internal stream used by the current instance. Value will be 0 if the file is not open for reading -**Returns:** *number* +#### Returns + +`number` ___ ### properties -• **properties**(): [*Properties*](properties.md) +• `get` **properties**(): [`Properties`](properties.md) Gets the media properties of the file represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** [*Properties*](properties.md) +[`Properties`](properties.md) ___ ### tag -• **tag**(): [*Tag*](tag.md) +• `get` **tag**(): [`Tag`](tag.md) Gets an abstract representation of all tags stored in the current instance. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** [*Tag*](tag.md) +[`Tag`](tag.md) ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### tagTypesOnDisk -• **tagTypesOnDisk**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypesOnDisk**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the physical file represented by the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### bufferSize + +• `Static` `get` **bufferSize**(): `number` + +Gets the buffer size to use when reading large blocks of data + +#### Returns + +`number` ## Methods ### dispose -▸ **dispose**(): *void* +▸ **dispose**(): `void` Dispose the current instance. Equivalent to setting the mode to closed. -**Returns:** *void* +#### Returns + +`void` -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[dispose](file.md#dispose) ___ ### find -▸ **find**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `before?`: [*ByteVector*](bytevector.md)): *number* +▸ **find**(`pattern`, `startPosition?`, `before?`): `number` Searches forward through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` is not provided or `startPosition` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be smaller than the | +| `startPosition` | `number` | `0` | Seek position to start searching. Must be positive, safe integer. | +| `before?` | [`ByteVector`](bytevector.md) | `undefined` | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be smaller than the | -`startPosition` | *number* | 0 | Seek position to start searching. Must be positive, safe integer. | -`before?` | [*ByteVector*](bytevector.md) | - | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | +#### Returns -**Returns:** *number* +`number` Index at which the value was found. If not found, `-1` is returned. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[find](file.md#find) ___ ### getTag -▸ **getTag**(`type`: [*TagTypes*](../enums/tagtypes.md), `create`: *boolean*): [*Tag*](tag.md) +▸ **getTag**(`type`, `create`): [`Tag`](tag.md) + +Gets a tag of the specified type from the current instance, optionally creating a new tag if +possible. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`TagTypes`](../enums/tagtypes.md) | Type of tag to read. | +| `create` | `boolean` | Whether or not to try and create the tag if one is not found. `true` does not guarantee the tag will be created. For example, trying to create an ID3v2 tag on an OGG Vorbis file will always fail. | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`type` | [*TagTypes*](../enums/tagtypes.md) | -`create` | *boolean* | +[`Tag`](tag.md) -**Returns:** [*Tag*](tag.md) +Tag object containing the tag that was found in or added to the current instance. + If no matching tag was found and none was created, `undefined` is returned. It is safe + to assume that if `undefined` is not returned, the returned tag can be cast to the + appropriate type. -Overrides: [File](file.md) +#### Overrides + +[File](file.md).[getTag](file.md#gettag) ___ ### insert -▸ **insert**(`data`: [*ByteVector*](bytevector.md), `start`: *number*, `replace?`: *number*): *void* +▸ **insert**(`data`, `start`, `replace?`): `void` Inserts a specified block of data into the file represented by the current instance, at a specified location, replacing a specified number of bytes. @@ -420,78 +482,94 @@ specified location, replacing a specified number of bytes. **`throws`** Error Thrown when: 1) data is falsey, 2) start is not a safe, positive number, or 3) replace is not a safe, positive number -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | `undefined` | Data to insert into the file. | +| `start` | `number` | `undefined` | Index into the file at which to insert the data. Must be safe positive integer. | +| `replace` | `number` | `0` | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | + +#### Returns -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | - | Data to insert into the file. | -`start` | *number* | - | Index into the file at which to insert the data. Must be safe positive integer. | -`replace` | *number* | 0 | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[insert](file.md#insert) ___ ### markAsCorrupt -▸ **markAsCorrupt**(`reason`: *string*): *void* +▸ **markAsCorrupt**(`reason`): `void` Mark the current instance as corrupt. NOTE: Not intended to be used outside of this library. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `reason` | `string` | Reason why this file is considered to be corrupt | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`reason` | *string* | Reason why this file is considered to be corrupt | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[markAsCorrupt](file.md#markascorrupt) ___ ### preSave -▸ `Protected`**preSave**(): *void* +▸ `Protected` **preSave**(): `void` Prepares to save the file. This must be called at the beginning of every File.save() method. -**Returns:** *void* +#### Returns -Inherited from: [File](file.md) +`void` + +#### Inherited from + +[File](file.md).[preSave](file.md#presave) ___ ### rFind -▸ **rFind**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `after?`: [*ByteVector*](bytevector.md)): *number* +▸ **rFind**(`pattern`, `startPosition?`, `after?`): `number` Searched backwards through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` was not provided or if `startPosition` is not a safe, positive integer. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be shorter than the [bufferSize](aifffile.md#buffersize) | +| `startPosition` | `number` | `0` | Seek position from which to start searching. | +| `after?` | [`ByteVector`](bytevector.md) | `undefined` | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be shorter than the [bufferSize](aifffile.md#buffersize) | -`startPosition` | *number* | 0 | Seek position from which to start searching. | -`after?` | [*ByteVector*](bytevector.md) | - | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | +#### Returns -**Returns:** *number* +`number` Index at which the value wa found. If not found, `-1` is returned. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[rFind](file.md#rfind) ___ ### readBlock -▸ **readBlock**(`length`: *number*): [*ByteVector*](bytevector.md) +▸ **readBlock**(`length`): [`ByteVector`](bytevector.md) Reads a specified number of bytes at the current seek position from the current position. This method reads the block of data at the current seek position. To change the seek @@ -499,113 +577,138 @@ position, use [File.seek](file.md#seek). **`throws`** Error Thrown when `length` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to read. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to read. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Object containing the data read from the current instance. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[readBlock](file.md#readblock) ___ ### removeBlock -▸ **removeBlock**(`start`: *number*, `length`: *number*): *void* +▸ **removeBlock**(`start`, `length`): `void` Removes a specified block of data from the file represented by the current instance. **`throws`** Error thrown if 1) start is not a safe, positive integer or 2) length must be a safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `start` | `number` | Index into the file at which to remove data. Must be safe, positive integer. | +| `length` | `number` | Number of bytes to remove. Must be a safe integer. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`start` | *number* | Index into the file at which to remove data. Must be safe, positive integer. | -`length` | *number* | Number of bytes to remove. Must be a safe integer. | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[removeBlock](file.md#removeblock) ___ ### removeTags -▸ **removeTags**(`types`: [*TagTypes*](../enums/tagtypes.md)): *void* +▸ **removeTags**(`types`): `void` + +Removes a set of tag types from the current instance. In order to remove all tags from a +file, pass [TagTypes.AllTags](../enums/tagtypes.md#alltags) as `types` + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | Bitwise combined [TagTypes](../enums/tagtypes.md) value containing the tag types to be removed from the file | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`types` | [*TagTypes*](../enums/tagtypes.md) | +`void` -**Returns:** *void* +#### Overrides -Overrides: [File](file.md) +[File](file.md).[removeTags](file.md#removetags) ___ ### save -▸ **save**(): *void* +▸ **save**(): `void` -**`inheritdoc`** +Saves the changes made in the current instance to the file it represents. -**Returns:** *void* +#### Returns -Overrides: [File](file.md) +`void` + +#### Overrides + +[File](file.md).[save](file.md#save) ___ ### seek -▸ **seek**(`offset`: *number*, `origin?`: SeekOrigin): *void* +▸ **seek**(`offset`, `origin?`): `void` Moves the read/write pointer to a specified offset in the current instance, relative to a specified origin. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `offset` | `number` | Byte offset to seek to. Must be a safe, positive integer. | +| `origin` | `SeekOrigin` | Origin from which to seek | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`offset` | *number* | - | Byte offset to seek to. Must be a safe, positive integer. | -`origin` | SeekOrigin | ... | Origin from which to seek | +#### Returns -**Returns:** *void* +`void` -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[seek](file.md#seek) ___ ### truncate -▸ `Protected`**truncate**(`length`: *number*): *void* +▸ `Protected` **truncate**(`length`): `void` Resizes the current instance to a specific number of bytes. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to resize the file to, must be a safe, positive integer. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to resize the file to, must be a safe, positive integer. | +#### Returns -**Returns:** *void* +`void` -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[truncate](file.md#truncate) ___ ### writeBlock -▸ **writeBlock**(`data`: [*ByteVector*](bytevector.md)): *void* +▸ **writeBlock**(`data`): `void` Writes a block of data to the file represented by the current instance at the current seek position. This will overwrite any existing data at the seek position and append new data to @@ -613,133 +716,161 @@ the file if writing past the current end. **`throws`** Error Thrown when `data` is not provided. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing data to the current instance. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing data to the current instance. | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[writeBlock](file.md#writeblock) ___ ### addFileType -▸ `Static`**addFileType**(`mimeType`: *string*, `constructor`: [*FileTypeConstructor*](../modules.md#filetypeconstructor), `override?`: *boolean*): *void* +▸ `Static` **addFileType**(`mimeType`, `constructor`, `override?`): `void` Registers the constructor for a subclass of [File](file.md) with the MimeType it is associated with. Optionally, the MimeType can be forcefully overridden if it was already registered. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mimeType` | `string` | `undefined` | MimeType to register this subclass constructor to. | +| `constructor` | [`FileTypeConstructor`](../modules.md#filetypeconstructor) | `undefined` | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | +| `override` | `boolean` | `false` | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | + +#### Returns -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mimeType` | *string* | - | MimeType to register this subclass constructor to. | -`constructor` | [*FileTypeConstructor*](../modules.md#filetypeconstructor) | - | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | -`override` | *boolean* | false | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[addFileType](file.md#addfiletype) ___ ### addFileTypeResolver -▸ `Static`**addFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **addFileTypeResolver**(`resolver`): `void` Registers a [FileTypeResolver](../modules.md#filetyperesolver) to the front of the list of file type resolvers. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | +| Name | Type | Description | +| :------ | :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | -**Returns:** *void* +#### Returns -Inherited from: [File](file.md) +`void` + +#### Inherited from + +[File](file.md).[addFileTypeResolver](file.md#addfiletyperesolver) ___ ### createFromAbstraction -▸ `Static`**createFromAbstraction**(`abstraction`: IFileAbstraction, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromAbstraction**(`abstraction`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of a [File](file.md) subclass for a specified file abstraction, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | Object to use when reading/writing from the current instance. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`abstraction` | IFileAbstraction | - | Object to use when reading/writing from the current instance. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified abstraction. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[createFromAbstraction](file.md#createfromabstraction) ___ ### createFromPath -▸ `Static`**createFromPath**(`filePath`: *string*, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromPath**(`filePath`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of [File](file.md) subclass for a specified file path, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to read/write. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`filePath` | *string* | - | Path to the file to read/write. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified path. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[createFromPath](file.md#createfrompath) ___ ### removeFileType -▸ `Static`**removeFileType**(`mimeType`: *string*): *void* +▸ `Static` **removeFileType**(`mimeType`): `void` Used for removing a file type constructor during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `mimeType` | `string` | + +#### Returns -Name | Type | ------- | ------ | -`mimeType` | *string* | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[removeFileType](file.md#removefiletype) ___ ### removeFileTypeResolver -▸ `Static`**removeFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **removeFileTypeResolver**(`resolver`): `void` Used for removing a file type resolver during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | + +#### Returns -Name | Type | ------- | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[removeFileTypeResolver](file.md#removefiletyperesolver) diff --git a/docs/classes/apefile.md b/docs/classes/apefile.md index 2885e055..85da5cca 100644 --- a/docs/classes/apefile.md +++ b/docs/classes/apefile.md @@ -9,9 +9,9 @@ using the following method: `file.removeTags(file.tagTypes & ~file.tagTypesOnDis ## Hierarchy -* *NonContainerFile* +- `NonContainerFile` - ↳ **ApeFile** + ↳ **`ApeFile`** ## Table of contents @@ -29,7 +29,6 @@ using the following method: `file.removeTags(file.tagTypes & ~file.tagTypesOnDis ### Accessors -- [bufferSize](apefile.md#buffersize) - [corruptionReasons](apefile.md#corruptionreasons) - [endTag](apefile.md#endtag) - [fileAbstraction](apefile.md#fileabstraction) @@ -47,6 +46,7 @@ using the following method: `file.removeTags(file.tagTypes & ~file.tagTypesOnDis - [tag](apefile.md#tag) - [tagTypes](apefile.md#tagtypes) - [tagTypesOnDisk](apefile.md#tagtypesondisk) +- [bufferSize](apefile.md#buffersize) ### Methods @@ -78,309 +78,387 @@ using the following method: `file.removeTags(file.tagTypes & ~file.tagTypesOnDis ### constructor -\+ **new ApeFile**(`file`: *string* \| IFileAbstraction, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*ApeFile*](apefile.md) +• **new ApeFile**(`file`, `propertiesStyle`) -**`inheritdoc`** +**`inheritdoc`** -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`file` | *string* \| IFileAbstraction | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `file` | `string` \| `IFileAbstraction` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*ApeFile*](apefile.md) +#### Overrides + +NonContainerFile.constructor ## Properties ### \_fileAbstraction -• `Protected` **\_fileAbstraction**: IFileAbstraction +• `Protected` **\_fileAbstraction**: `IFileAbstraction` + +#### Inherited from + +NonContainerFile.\_fileAbstraction ___ ### \_fileStream -• `Protected` **\_fileStream**: IStream +• `Protected` **\_fileStream**: `IStream` + +#### Inherited from + +NonContainerFile.\_fileStream ___ ### \_invariantEndPosition -• `Protected` **\_invariantEndPosition**: *number*= -1 +• `Protected` **\_invariantEndPosition**: `number` = `-1` + +#### Inherited from + +NonContainerFile.\_invariantEndPosition ___ ### \_invariantStartPosition -• `Protected` **\_invariantStartPosition**: *number*= -1 - -___ +• `Protected` **\_invariantStartPosition**: `number` = `-1` -### \_tagTypesOnDisk +#### Inherited from -• `Protected` **\_tagTypesOnDisk**: [*TagTypes*](../enums/tagtypes.md) +NonContainerFile.\_invariantStartPosition -## Accessors +___ -### bufferSize +### \_tagTypesOnDisk -• **bufferSize**(): *number* +• `Protected` **\_tagTypesOnDisk**: [`TagTypes`](../enums/tagtypes.md) -Gets the buffer size to use when reading large blocks of data +#### Inherited from -**Returns:** *number* +NonContainerFile.\_tagTypesOnDisk -___ +## Accessors ### corruptionReasons -• **corruptionReasons**(): *string*[] +• `get` **corruptionReasons**(): `string`[] Reasons for which this file is marked as corrupt. -**Returns:** *string*[] +#### Returns + +`string`[] ___ ### endTag -• **endTag**(): *default* +• `Protected` `get` **endTag**(): `default` Gets the collection of tags appearing at the end of the file. -**Returns:** *default* +#### Returns + +`default` ___ ### fileAbstraction -• **fileAbstraction**(): IFileAbstraction +• `get` **fileAbstraction**(): `IFileAbstraction` Gets the {@link IFileAbstraction} representing the file. -**Returns:** IFileAbstraction +#### Returns + +`IFileAbstraction` ___ ### invariantEndPosition -• **invariantEndPosition**(): *number* +• `get` **invariantEndPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance ends. If the value could not be determined, `-1` is returned; -**Returns:** *number* +#### Returns + +`number` ___ ### invariantStartPosition -• **invariantStartPosition**(): *number* +• `get` **invariantStartPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance begins. If the value could not be determined, `-1` is returned. -**Returns:** *number* +#### Returns + +`number` ___ ### isPossiblyCorrupt -• **isPossiblyCorrupt**(): *boolean* +• `get` **isPossiblyCorrupt**(): `boolean` Indicates whether or not this file may be corrupt. Files with unknown corruptions should not be written. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isWritable -• **isWritable**(): *boolean* +• `get` **isWritable**(): `boolean` Indicates whether or not tags can be written back to the current file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### length -• **length**(): *number* +• `get` **length**(): `number` Gets the length of the file represented by the current instance. Value will be 0 if the file is not open for reading; -**Returns:** *number* +#### Returns + +`number` ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets the MimeType of the file as determined during creation of the instance. -**Returns:** *string* +#### Returns + +`string` ___ ### mode -• **mode**(): [*FileAccessMode*](../enums/fileaccessmode.md) +• `get` **mode**(): [`FileAccessMode`](../enums/fileaccessmode.md) Gets the file access mode in use by the current instance. -**Returns:** [*FileAccessMode*](../enums/fileaccessmode.md) +#### Returns + +[`FileAccessMode`](../enums/fileaccessmode.md) -• **mode**(`val`: [*FileAccessMode*](../enums/fileaccessmode.md)): *void* +• `set` **mode**(`val`): `void` Sets the file access mode in use by the current instance. Changing the value will cause the stream currently in use to be closed, except when a change is made from [FileAccessMode.Write](../enums/fileaccessmode.md#write) to [FileAccessMode.Read](../enums/fileaccessmode.md#read) which has no effect. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`val` | [*FileAccessMode*](../enums/fileaccessmode.md) | File access mode to change to | +| Name | Type | Description | +| :------ | :------ | :------ | +| `val` | [`FileAccessMode`](../enums/fileaccessmode.md) | File access mode to change to | -**Returns:** *void* +#### Returns + +`void` ___ ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the file as stored in its file abstraction. -**Returns:** *string* +#### Returns + +`string` ___ ### position -• **position**(): *number* +• `get` **position**(): `number` Gets the seek position in the internal stream used by the current instance. Value will be 0 if the file is not open for reading -**Returns:** *number* +#### Returns + +`number` ___ ### properties -• **properties**(): [*Properties*](properties.md) +• `get` **properties**(): [`Properties`](properties.md) Gets the media properties of the file represented by the current instance. -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) ___ ### startTag -• **startTag**(): *default* +• `Protected` `get` **startTag**(): `default` Gets the collection of tags appearing at the start of the file. -**Returns:** *default* +#### Returns + +`default` ___ ### tag -• **tag**(): *default* +• `get` **tag**(): `default` Gets an abstract representation of all tags stored in the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### tagTypesOnDisk -• **tagTypesOnDisk**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypesOnDisk**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the physical file represented by the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### bufferSize + +• `Static` `get` **bufferSize**(): `number` + +Gets the buffer size to use when reading large blocks of data + +#### Returns + +`number` ## Methods ### dispose -▸ **dispose**(): *void* +▸ **dispose**(): `void` Dispose the current instance. Equivalent to setting the mode to closed. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.dispose ___ ### find -▸ **find**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `before?`: [*ByteVector*](bytevector.md)): *number* +▸ **find**(`pattern`, `startPosition?`, `before?`): `number` Searches forward through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` is not provided or `startPosition` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be smaller than the | +| `startPosition` | `number` | `0` | Seek position to start searching. Must be positive, safe integer. | +| `before?` | [`ByteVector`](bytevector.md) | `undefined` | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be smaller than the | -`startPosition` | *number* | 0 | Seek position to start searching. Must be positive, safe integer. | -`before?` | [*ByteVector*](bytevector.md) | - | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | +#### Returns -**Returns:** *number* +`number` Index at which the value was found. If not found, `-1` is returned. +#### Inherited from + +NonContainerFile.find + ___ ### getTag -▸ **getTag**(`type`: [*TagTypes*](../enums/tagtypes.md), `create`: *boolean*): [*Tag*](tag.md) +▸ **getTag**(`type`, `create`): [`Tag`](tag.md) Gets a tag of a specified type from the current instance, optionally creating a new tag if possible. If an [Id3v2Tag](id3v2tag.md) is added to the current instance, it will be placed at the start of the file. On the other hand, [Id3v1Tag](id3v1tag.md) and [ApeTag](apetag.md) will be added to the end of the file. All other tag types will be ignored. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`TagTypes`](../enums/tagtypes.md) | Type of tag to create | +| `create` | `boolean` | Whether or not to create a tag if one is not found | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*TagTypes*](../enums/tagtypes.md) | Type of tag to create | -`create` | *boolean* | Whether or not to create a tag if one is not found | +#### Returns -**Returns:** [*Tag*](tag.md) +[`Tag`](tag.md) Tag Tag that was found in or added to the current instance. If no matching tag was found and none was created, `undefined` is returned. +#### Overrides + +NonContainerFile.getTag + ___ ### insert -▸ **insert**(`data`: [*ByteVector*](bytevector.md), `start`: *number*, `replace?`: *number*): *void* +▸ **insert**(`data`, `start`, `replace?`): `void` Inserts a specified block of data into the file represented by the current instance, at a specified location, replacing a specified number of bytes. @@ -388,70 +466,94 @@ specified location, replacing a specified number of bytes. **`throws`** Error Thrown when: 1) data is falsey, 2) start is not a safe, positive number, or 3) replace is not a safe, positive number -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | `undefined` | Data to insert into the file. | +| `start` | `number` | `undefined` | Index into the file at which to insert the data. Must be safe positive integer. | +| `replace` | `number` | `0` | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | + +#### Returns + +`void` -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | - | Data to insert into the file. | -`start` | *number* | - | Index into the file at which to insert the data. Must be safe positive integer. | -`replace` | *number* | 0 | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | +#### Inherited from -**Returns:** *void* +NonContainerFile.insert ___ ### markAsCorrupt -▸ **markAsCorrupt**(`reason`: *string*): *void* +▸ **markAsCorrupt**(`reason`): `void` Mark the current instance as corrupt. NOTE: Not intended to be used outside of this library. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`reason` | *string* | Reason why this file is considered to be corrupt | +| Name | Type | Description | +| :------ | :------ | :------ | +| `reason` | `string` | Reason why this file is considered to be corrupt | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.markAsCorrupt ___ ### preSave -▸ `Protected`**preSave**(): *void* +▸ `Protected` **preSave**(): `void` Prepares to save the file. This must be called at the beginning of every File.save() method. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.preSave ___ ### rFind -▸ **rFind**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `after?`: [*ByteVector*](bytevector.md)): *number* +▸ **rFind**(`pattern`, `startPosition?`, `after?`): `number` Searched backwards through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` was not provided or if `startPosition` is not a safe, positive integer. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be shorter than the [bufferSize](apefile.md#buffersize) | -`startPosition` | *number* | 0 | Seek position from which to start searching. | -`after?` | [*ByteVector*](bytevector.md) | - | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be shorter than the [bufferSize](apefile.md#buffersize) | +| `startPosition` | `number` | `0` | Seek position from which to start searching. | +| `after?` | [`ByteVector`](bytevector.md) | `undefined` | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | -**Returns:** *number* +#### Returns + +`number` Index at which the value wa found. If not found, `-1` is returned. +#### Inherited from + +NonContainerFile.rFind + ___ ### readBlock -▸ **readBlock**(`length`: *number*): [*ByteVector*](bytevector.md) +▸ **readBlock**(`length`): [`ByteVector`](bytevector.md) Reads a specified number of bytes at the current seek position from the current position. This method reads the block of data at the current seek position. To change the seek @@ -459,153 +561,207 @@ position, use [File.seek](file.md#seek). **`throws`** Error Thrown when `length` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to read. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to read. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Object containing the data read from the current instance. +#### Inherited from + +NonContainerFile.readBlock + ___ ### readEnd -▸ `Protected`**readEnd**(`_end`: *number*, `_propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **readEnd**(`_end`, `_propertiesStyle`): `void` + +**`inheritdoc`** + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `_end` | `number` | +| `_propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**`inheritdoc`** +#### Returns -#### Parameters: +`void` -Name | Type | ------- | ------ | -`_end` | *number* | -`_propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +#### Overrides -**Returns:** *void* +NonContainerFile.readEnd ___ ### readProperties -▸ `Protected`**readProperties**(`start`: *number*, `end`: *number*, `_propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*Properties*](properties.md) +▸ `Protected` **readProperties**(`start`, `end`, `_propertiesStyle`): [`Properties`](properties.md) -**`inheritdoc`** +**`inheritdoc`** -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`start` | *number* | -`end` | *number* | -`_propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `start` | `number` | +| `end` | `number` | +| `_propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) + +#### Overrides + +NonContainerFile.readProperties ___ ### readStart -▸ `Protected`**readStart**(`start`: *number*, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **readStart**(`start`, `propertiesStyle`): `void` + +**`inheritdoc`** -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `start` | `number` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -Name | Type | ------- | ------ | -`start` | *number* | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +#### Returns -**Returns:** *void* +`void` + +#### Overrides + +NonContainerFile.readStart ___ ### removeBlock -▸ **removeBlock**(`start`: *number*, `length`: *number*): *void* +▸ **removeBlock**(`start`, `length`): `void` Removes a specified block of data from the file represented by the current instance. **`throws`** Error thrown if 1) start is not a safe, positive integer or 2) length must be a safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `start` | `number` | Index into the file at which to remove data. Must be safe, positive integer. | +| `length` | `number` | Number of bytes to remove. Must be a safe integer. | -Name | Type | Description | ------- | ------ | ------ | -`start` | *number* | Index into the file at which to remove data. Must be safe, positive integer. | -`length` | *number* | Number of bytes to remove. Must be a safe integer. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.removeBlock ___ ### removeTags -▸ **removeTags**(`types`: [*TagTypes*](../enums/tagtypes.md)): *void* +▸ **removeTags**(`types`): `void` + +**`inheritdoc`** + +#### Parameters -**`inheritdoc`** +| Name | Type | +| :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`types` | [*TagTypes*](../enums/tagtypes.md) | +`void` -**Returns:** *void* +#### Inherited from + +NonContainerFile.removeTags ___ ### save -▸ **save**(): *void* +▸ **save**(): `void` + +**`inheritdoc`** + +#### Returns -**`inheritdoc`** +`void` -**Returns:** *void* +#### Inherited from + +NonContainerFile.save ___ ### seek -▸ **seek**(`offset`: *number*, `origin?`: SeekOrigin): *void* +▸ **seek**(`offset`, `origin?`): `void` Moves the read/write pointer to a specified offset in the current instance, relative to a specified origin. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `offset` | `number` | Byte offset to seek to. Must be a safe, positive integer. | +| `origin` | `SeekOrigin` | Origin from which to seek | + +#### Returns + +`void` -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`offset` | *number* | - | Byte offset to seek to. Must be a safe, positive integer. | -`origin` | SeekOrigin | ... | Origin from which to seek | +#### Inherited from -**Returns:** *void* +NonContainerFile.seek ___ ### truncate -▸ `Protected`**truncate**(`length`: *number*): *void* +▸ `Protected` **truncate**(`length`): `void` Resizes the current instance to a specific number of bytes. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to resize the file to, must be a safe, positive integer. | + +#### Returns + +`void` -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to resize the file to, must be a safe, positive integer. | +#### Inherited from -**Returns:** *void* +NonContainerFile.truncate ___ ### writeBlock -▸ **writeBlock**(`data`: [*ByteVector*](bytevector.md)): *void* +▸ **writeBlock**(`data`): `void` Writes a block of data to the file represented by the current instance at the current seek position. This will overwrite any existing data at the seek position and append new data to @@ -613,119 +769,161 @@ the file if writing past the current end. **`throws`** Error Thrown when `data` is not provided. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing data to the current instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing data to the current instance. | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.writeBlock ___ ### addFileType -▸ `Static`**addFileType**(`mimeType`: *string*, `constructor`: [*FileTypeConstructor*](../modules.md#filetypeconstructor), `override?`: *boolean*): *void* +▸ `Static` **addFileType**(`mimeType`, `constructor`, `override?`): `void` Registers the constructor for a subclass of [File](file.md) with the MimeType it is associated with. Optionally, the MimeType can be forcefully overridden if it was already registered. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mimeType` | `string` | `undefined` | MimeType to register this subclass constructor to. | +| `constructor` | [`FileTypeConstructor`](../modules.md#filetypeconstructor) | `undefined` | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | +| `override` | `boolean` | `false` | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mimeType` | *string* | - | MimeType to register this subclass constructor to. | -`constructor` | [*FileTypeConstructor*](../modules.md#filetypeconstructor) | - | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | -`override` | *boolean* | false | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.addFileType ___ ### addFileTypeResolver -▸ `Static`**addFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **addFileTypeResolver**(`resolver`): `void` Registers a [FileTypeResolver](../modules.md#filetyperesolver) to the front of the list of file type resolvers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | -Name | Type | Description | ------- | ------ | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.addFileTypeResolver ___ ### createFromAbstraction -▸ `Static`**createFromAbstraction**(`abstraction`: IFileAbstraction, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromAbstraction**(`abstraction`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of a [File](file.md) subclass for a specified file abstraction, MimeType, and property read style. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`abstraction` | IFileAbstraction | - | Object to use when reading/writing from the current instance. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | Object to use when reading/writing from the current instance. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | -**Returns:** [*File*](file.md) +#### Returns + +[`File`](file.md) New instance of [File](file.md) as read from the specified abstraction. +#### Inherited from + +NonContainerFile.createFromAbstraction + ___ ### createFromPath -▸ `Static`**createFromPath**(`filePath`: *string*, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromPath**(`filePath`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of [File](file.md) subclass for a specified file path, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to read/write. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`filePath` | *string* | - | Path to the file to read/write. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified path. +#### Inherited from + +NonContainerFile.createFromPath + ___ ### removeFileType -▸ `Static`**removeFileType**(`mimeType`: *string*): *void* +▸ `Static` **removeFileType**(`mimeType`): `void` Used for removing a file type constructor during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `mimeType` | `string` | + +#### Returns + +`void` -Name | Type | ------- | ------ | -`mimeType` | *string* | +#### Inherited from -**Returns:** *void* +NonContainerFile.removeFileType ___ ### removeFileTypeResolver -▸ `Static`**removeFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **removeFileTypeResolver**(`resolver`): `void` Used for removing a file type resolver during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | + +#### Returns + +`void` -Name | Type | ------- | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | +#### Inherited from -**Returns:** *void* +NonContainerFile.removeFileTypeResolver diff --git a/docs/classes/apetag.md b/docs/classes/apetag.md index 47a8575c..115a573d 100644 --- a/docs/classes/apetag.md +++ b/docs/classes/apetag.md @@ -6,9 +6,9 @@ Provides a representation of an APEv2 tag which can be read from and written to ## Hierarchy -* [*Tag*](tag.md) +- [`Tag`](tag.md) - ↳ **ApeTag** + ↳ **`ApeTag`** ## Table of contents @@ -103,32 +103,36 @@ Provides a representation of an APEv2 tag which can be read from and written to ### album -• **album**(): *string* +• `get` **album**(): `string` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. **`inheritdoc`** Album item -**Returns:** *string* +#### Returns + +`string` Album of the media represented by the current instance or `undefined` if no value is present -• **album**(`value`: *string*): *void* +• `set` **album**(`value`): `void` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. **`inheritdoc`** Album item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Album of the media represented by the current instance or `undefined` if no value is present @@ -137,37 +141,41 @@ ___ ### albumArtists -• **albumArtists**(): *string*[] +• `get` **albumArtists**(): `string`[] Gets the band or artist who is credited credited in the creation of the entire album or collection containing the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** This property is implemented using the "Album Artist" item and "AlbumArtist" as a backup if it exists. -**Returns:** *string*[] +#### Returns + +`string`[] Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present -• **albumArtists**(`value`: *string*[]): *void* +• `set` **albumArtists**(`value`): `void` Gets the band or artist who is credited credited in the creation of the entire album or collection containing the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** Will be stored in "Album Artist" primarily. If "AlbumArtist" exists, value will also be stored there for compatibility. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is @@ -177,33 +185,37 @@ ___ ### albumArtistsSort -• **albumArtistsSort**(): *string*[] +• `get` **albumArtistsSort**(): `string`[] Gets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. **`inheritdoc`** AlbumArtistSort item -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. -• **albumArtistsSort**(`value`: *string*[]): *void* +• `set` **albumArtistsSort**(`value`): `void` Gets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. **`inheritdoc`** AlbumArtistSort item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty @@ -213,30 +225,34 @@ ___ ### albumSort -• **albumSort**(): *string* +• `get` **albumSort**(): `string` Gets the sortable name of the album title of the media represented by the current instance. **`inheritdoc`** AlbumSort item -**Returns:** *string* +#### Returns + +`string` Sortable name for the album title of the media or `undefined` if the value is not present -• **albumSort**(`value`: *string*): *void* +• `set` **albumSort**(`value`): `void` Gets the sortable name of the album title of the media represented by the current instance. **`inheritdoc`** AlbumSort item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Sortable name for the album title of the media or `undefined` if the value is not present @@ -245,30 +261,34 @@ ___ ### amazonId -• **amazonId**(): *string* +• `get` **amazonId**(): `string` Gets the Amazon ID of the media represented by the current instance. **`inheritdoc`** ASIN item -**Returns:** *string* +#### Returns + +`string` Amazon ID of the media represented by the current instance or `undefined` if no value is present -• **amazonId**(`value`: *string*): *void* +• `set` **amazonId**(`value`): `void` Gets the Amazon ID of the media represented by the current instance. **`inheritdoc`** ASIN item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Amazon ID of the media represented by the current instance or `undefined` if no value is present @@ -277,32 +297,36 @@ ___ ### beatsPerMinute -• **beatsPerMinute**(): *number* +• `get` **beatsPerMinute**(): `number` Gets the number of beats per minute in the audio of the media represented by the current instance. **`inheritdoc`** BPM item -**Returns:** *number* +#### Returns + +`number` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified -• **beatsPerMinute**(`value`: *number*): *void* +• `set` **beatsPerMinute**(`value`): `void` Gets the number of beats per minute in the audio of the media represented by the current instance. **`inheritdoc`** BPM item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified @@ -311,30 +335,34 @@ ___ ### comment -• **comment**(): *string* +• `get` **comment**(): `string` Gets a user comment on the media represented by the current instance. **`inheritdoc`** Comment item -**Returns:** *string* +#### Returns + +`string` User comments on the media represented by the current instance or `undefined` if the value is not present -• **comment**(`value`: *string*): *void* +• `set` **comment**(`value`): `void` Gets a user comment on the media represented by the current instance. **`inheritdoc`** Comment item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` User comments on the media represented by the current instance or `undefined` if the value is not present @@ -343,30 +371,34 @@ ___ ### composers -• **composers**(): *string*[] +• `get` **composers**(): `string`[] Gets the composers of the media represented by the current instance. **`inheritdoc`** Composer item -**Returns:** *string*[] +#### Returns + +`string`[] Composers of the media represented by the current instance of an empty array if no value is present. -• **composers**(`value`: *string*[]): *void* +• `set` **composers**(`value`): `void` Gets the composers of the media represented by the current instance. **`inheritdoc`** Composer item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Composers of the media represented by the current instance of an empty array if no value is present. @@ -375,30 +407,34 @@ ___ ### composersSort -• **composersSort**(): *string*[] +• `get` **composersSort**(): `string`[] Gets the sortable names of the composers of the media represented by the current instance. **`inheritdoc`** ComposerSort item -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. -• **composersSort**(`value`: *string*[]): *void* +• `set` **composersSort**(`value`): `void` Gets the sortable names of the composers of the media represented by the current instance. **`inheritdoc`** ComposerSort -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. @@ -407,30 +443,34 @@ ___ ### conductor -• **conductor**(): *string* +• `get` **conductor**(): `string` Gets the conductor or director of the media represented by the current instance. **`inheritdoc`** Conductor item -**Returns:** *string* +#### Returns + +`string` Conductor or director of the media represented by the current instance or `undefined` if no value present. -• **conductor**(`value`: *string*): *void* +• `set` **conductor**(`value`): `void` Gets the conductor or director of the media represented by the current instance. **`inheritdoc`** Conductor item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Conductor or director of the media represented by the current instance or `undefined` if no value present. @@ -439,30 +479,34 @@ ___ ### copyright -• **copyright**(): *string* +• `get` **copyright**(): `string` Gets the copyright information for the media represented by the current instance. **`inheritdoc`** Copyright item -**Returns:** *string* +#### Returns + +`string` Copyright information for the media represented by the current instance or `undefined` if no value is present. -• **copyright**(`value`: *string*): *void* +• `set` **copyright**(`value`): `void` Gets the copyright information for the media represented by the current instance. **`inheritdoc`** Copyright item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Copyright information for the media represented by the current instance or `undefined` if no value is present. @@ -471,29 +515,33 @@ ___ ### dateTagged -• **dateTagged**(): Date +• `get` **dateTagged**(): `Date` Gets the date and time at which the tag has been written. **`inheritdoc`** DateTagged item -**Returns:** Date +#### Returns + +`Date` Date/time at which the tag has been written, or `undefined` if no value is present -• **dateTagged**(`value`: Date): *void* +• `set` **dateTagged**(`value`): `void` Gets the date and time at which the tag has been written. **`inheritdoc`** DateTagged item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | Date | +| Name | Type | +| :------ | :------ | +| `value` | `Date` | -**Returns:** *void* +#### Returns + +`void` Date/time at which the tag has been written, or `undefined` if no value is present @@ -501,7 +549,7 @@ ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but @@ -509,12 +557,14 @@ generally no spoliers. This should give the impression of what to expect in the **`inheritdoc`** Description item -**Returns:** *string* +#### Returns + +`string` Description of the media represented by the current instance or `undefined` if no value is present -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Gets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but @@ -522,13 +572,15 @@ generally no spoliers. This should give the impression of what to expect in the **`inheritdoc`** Description item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Description of the media represented by the current instance or `undefined` if no value is present @@ -537,32 +589,36 @@ ___ ### disc -• **disc**(): *number* +• `get` **disc**(): `number` Gets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. **`inheritdoc`** Disc item numerator -**Returns:** *number* +#### Returns + +`number` Number of the disc or season of the media represented by the current instance in a boxed set. -• **disc**(`value`: *number*): *void* +• `set` **disc**(`value`): `void` Gets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. **`inheritdoc`** Disc item numerator -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Number of the disc or season of the media represented by the current instance in a boxed set. @@ -571,32 +627,36 @@ ___ ### discCount -• **discCount**(): *number* +• `get` **discCount**(): `number` Gets the number of discs or seasons in the boxed set containing the media represented by the current instance. **`inheritdoc`** Disc item denominator -**Returns:** *number* +#### Returns + +`number` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. -• **discCount**(`value`: *number*): *void* +• `set` **discCount**(`value`): `void` Gets the number of discs or seasons in the boxed set containing the media represented by the current instance. **`inheritdoc`** Disc item denominator -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. @@ -605,100 +665,118 @@ ___ ### firstAlbumArtist -• **firstAlbumArtist**(): *string* +• `get` **firstAlbumArtist**(): `string` Gets the the first value contained in [albumArtists](apetag.md#albumartists). -**Returns:** *string* +#### Returns + +`string` ___ ### firstAlbumArtistSort -• **firstAlbumArtistSort**(): *string* +• `get` **firstAlbumArtistSort**(): `string` Gets the first value contained in [albumArtistsSort](apetag.md#albumartistssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposer -• **firstComposer**(): *string* +• `get` **firstComposer**(): `string` Gets the first value contained in [composers](apetag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposerSort -• **firstComposerSort**(): *string* +• `get` **firstComposerSort**(): `string` Gets the first value contained in [composersSort](apetag.md#composerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstGenre -• **firstGenre**(): *string* +• `get` **firstGenre**(): `string` Gets the first value contained in [genres](apetag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformer -• **firstPerformer**(): *string* +• `get` **firstPerformer**(): `string` Gets the first value contained in [performers](apetag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformerSort -• **firstPerformerSort**(): *string* +• `get` **firstPerformerSort**(): `string` Gets the first value contained in [performersSort](apetag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### genres -• **genres**(): *string*[] +• `get` **genres**(): `string`[] Gets the genres of the media represented by the current instance. **`inheritdoc`** Genre item -**Returns:** *string*[] +#### Returns + +`string`[] Genres of the media represented by the current instance or an empty array if no value is present. -• **genres**(`value`: *string*[]): *void* +• `set` **genres**(`value`): `void` Gets the genres of the media represented by the current instance. **`inheritdoc`** Genre item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Genres of the media represented by the current instance or an empty array if no value is present. @@ -707,30 +785,34 @@ ___ ### grouping -• **grouping**(): *string* +• `get` **grouping**(): `string` Gets the grouping on the album which the media in the current instance belongs to. **`inheritdoc`** Grouping item -**Returns:** *string* +#### Returns + +`string` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. -• **grouping**(`value`: *string*): *void* +• `set` **grouping**(`value`): `void` Gets the grouping on the album which the media in the current instance belongs to. **`inheritdoc`** Grouping item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. @@ -739,25 +821,29 @@ ___ ### initialKey -• **initialKey**(): *string* +• `get` **initialKey**(): `string` Gets the initial key of the track. -**Returns:** *string* +#### Returns + +`string` Initial key of the track or `undefined` if no value is set -• **initialKey**(`value`: *string*): *void* +• `set` **initialKey**(`value`): `void` Sets the initial key of the track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Initial key of the track or `undefined` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Initial key of the track or `undefined` if no value is set | -**Returns:** *void* +#### Returns + +`void` Initial key of the track or `undefined` if no value is set @@ -765,13 +851,15 @@ ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Gets whether or not the current instance is empty. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** *boolean* +`boolean` `true` if the current instance does not contain any values. `false` otherwise @@ -779,47 +867,55 @@ ___ ### isHeaderPresent -• **isHeaderPresent**(): *boolean* +• `get` **isHeaderPresent**(): `boolean` Gets whether or not the current instance has a header when rendered. -**Returns:** *boolean* +#### Returns -• **isHeaderPresent**(`value`: *boolean*): *void* +`boolean` + +• `set` **isHeaderPresent**(`value`): `void` Sets whether or not the current instance has a header when rendered. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `boolean` | -Name | Type | ------- | ------ | -`value` | *boolean* | +#### Returns -**Returns:** *void* +`void` ___ ### isrc -• **isrc**(): *string* +• `get` **isrc**(): `string` Gets the ISRC (International Standard Recording Code) of the track. -**Returns:** *string* +#### Returns + +`string` the ISRC of the track or `undefined` if no value is set -• **isrc**(`value`: *string*): *void* +• `set` **isrc**(`value`): `void` Sets the ISRC (International Standard Recording Code) of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | the ISRC of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | the ISRC of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` the ISRC of the track or `undefined` if no value is set @@ -827,90 +923,106 @@ ___ ### items -• **items**(): *ApeTagItem*[] +• `get` **items**(): `ApeTagItem`[] Gets all items stored in the current instance -**Returns:** *ApeTagItem*[] +#### Returns + +`ApeTagItem`[] ___ ### joinedAlbumArtists -• **joinedAlbumArtists**(): *string* +• `get` **joinedAlbumArtists**(): `string` Gets a semicolon and space separated string containing the values in [albumArtists](apetag.md#albumartists) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedComposers -• **joinedComposers**(): *string* +• `get` **joinedComposers**(): `string` Gets a semicolon and space separated string containing the values in [composers](apetag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedGenres -• **joinedGenres**(): *string* +• `get` **joinedGenres**(): `string` Gets a semicolon and space separated string containing the values in [genres](apetag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformers -• **joinedPerformers**(): *string* +• `get` **joinedPerformers**(): `string` Gets a semicolon and space separated string containing the values in [performers](apetag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformersSort -• **joinedPerformersSort**(): *string* +• `get` **joinedPerformersSort**(): `string` Gets a semicolon and space separated string containing the values in [performersSort](apetag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### lyrics -• **lyrics**(): *string* +• `get` **lyrics**(): `string` Gets the lyrics or script of the media represented by the current instance. **`inheritdoc`** Lyrics item -**Returns:** *string* +#### Returns + +`string` Lyrics or script of the media represented by the current instance or `undefined` if no value is present -• **lyrics**(`value`: *string*): *void* +• `set` **lyrics**(`value`): `void` Gets the lyrics or script of the media represented by the current instance. **`inheritdoc`** Lyrics item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Lyrics or script of the media represented by the current instance or `undefined` if no value is present @@ -919,30 +1031,34 @@ ___ ### musicBrainzArtistId -• **musicBrainzArtistId**(): *string* +• `get` **musicBrainzArtistId**(): `string` Gets the MusicBrainz artist ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ARTISTID item -**Returns:** *string* +#### Returns + +`string` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzArtistId**(`value`: *string*): *void* +• `set` **musicBrainzArtistId**(`value`): `void` Gets the MusicBrainz artist ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ARTISTID item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present @@ -951,30 +1067,34 @@ ___ ### musicBrainzDiscId -• **musicBrainzDiscId**(): *string* +• `get` **musicBrainzDiscId**(): `string` Gets the MusicBrainz disc ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_DISCID item -**Returns:** *string* +#### Returns + +`string` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzDiscId**(`value`: *string*): *void* +• `set` **musicBrainzDiscId**(`value`): `void` Gets the MusicBrainz disc ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_DISCID item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present @@ -983,30 +1103,34 @@ ___ ### musicBrainzReleaseArtistId -• **musicBrainzReleaseArtistId**(): *string* +• `get` **musicBrainzReleaseArtistId**(): `string` Gets the MusicBrainz release artist ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ARTISTID item -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseArtistId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseArtistId**(`value`): `void` Gets the MusicBrainz release artist ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ARTISTID item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present @@ -1015,30 +1139,34 @@ ___ ### musicBrainzReleaseCountry -• **musicBrainzReleaseCountry**(): *string* +• `get` **musicBrainzReleaseCountry**(): `string` Gets the MusicBrainz release country of the media represented by the current instance. **`inheritdoc`** RELEASECOUNTRY item -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseCountry**(`value`: *string*): *void* +• `set` **musicBrainzReleaseCountry**(`value`): `void` Gets the MusicBrainz release country of the media represented by the current instance. **`inheritdoc`** RELEASECOUNTRY item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present @@ -1047,30 +1175,34 @@ ___ ### musicBrainzReleaseGroupId -• **musicBrainzReleaseGroupId**(): *string* +• `get` **musicBrainzReleaseGroupId**(): `string` Gets the MusicBrainz release group ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_RELEASEGROUPID item -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseGroupId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseGroupId**(`value`): `void` Gets the MusicBrainz release group ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_RELEASEGROUPID item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present @@ -1079,30 +1211,34 @@ ___ ### musicBrainzReleaseId -• **musicBrainzReleaseId**(): *string* +• `get` **musicBrainzReleaseId**(): `string` Gets the MusicBrainz release ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ALBUMID item -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseId**(`value`): `void` Gets the MusicBrainz release ID of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ALBUMID item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present @@ -1111,30 +1247,34 @@ ___ ### musicBrainzReleaseStatus -• **musicBrainzReleaseStatus**(): *string* +• `get` **musicBrainzReleaseStatus**(): `string` Gets the MusicBrainz release status of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ALBUMSTATUS item -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseStatus**(`value`: *string*): *void* +• `set` **musicBrainzReleaseStatus**(`value`): `void` Gets the MusicBrainz release status of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ALBUMSTATUS item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present @@ -1143,30 +1283,34 @@ ___ ### musicBrainzReleaseType -• **musicBrainzReleaseType**(): *string* +• `get` **musicBrainzReleaseType**(): `string` Gets the MusicBrainz release type of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ALBUMTYPE item -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseType**(`value`: *string*): *void* +• `set` **musicBrainzReleaseType**(`value`): `void` Gets the MusicBrainz release type of the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_ALBUMTYPE item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present @@ -1175,32 +1319,36 @@ ___ ### musicBrainzTrackId -• **musicBrainzTrackId**(): *string* +• `get` **musicBrainzTrackId**(): `string` Gets the MusicBrainz track ID of the media represented by the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_TRACKID item -**Returns:** *string* +#### Returns + +`string` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzTrackId**(`value`: *string*): *void* +• `set` **musicBrainzTrackId**(`value`): `void` Gets the MusicBrainz track ID of the media represented by the media represented by the current instance. **`inheritdoc`** MUSICBRAINZ_TRACKID item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present @@ -1209,30 +1357,34 @@ ___ ### musicIpId -• **musicIpId**(): *string* +• `get` **musicIpId**(): `string` Gets the MusicIP PUID of the media represented by the current instance. **`inheritdoc`** MUSICIP_PUID item -**Returns:** *string* +#### Returns + +`string` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present -• **musicIpId**(`value`: *string*): *void* +• `set` **musicIpId**(`value`): `void` Gets the MusicIP PUID of the media represented by the current instance. **`inheritdoc`** MUSICIP_PUID item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present @@ -1241,30 +1393,34 @@ ___ ### performers -• **performers**(): *string*[] +• `get` **performers**(): `string`[] Gets the performers or artists who performed in the media described by the current instance. **`inheritdoc`** Artist item -**Returns:** *string*[] +#### Returns + +`string`[] Performers who performed in the media described by the current instance or an empty array if no value is present. -• **performers**(`value`: *string*[]): *void* +• `set` **performers**(`value`): `void` Gets the performers or artists who performed in the media described by the current instance. **`inheritdoc`** Artist item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Performers who performed in the media described by the current instance or an empty array if no value is present. @@ -1273,7 +1429,7 @@ ___ ### performersRole -• **performersRole**(): *string*[] +• `get` **performersRole**(): `string`[] Gets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](apetag.md#performers) array (for each person, correspond one/more @@ -1282,12 +1438,14 @@ example: "Bass; Backing Vocals; Vibraphone". **`inheritdoc`** PerformersRole item -**Returns:** *string*[] +#### Returns + +`string`[] Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. -• **performersRole**(`value`: *string*[]): *void* +• `set` **performersRole**(`value`): `void` Gets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](apetag.md#performers) array (for each person, correspond one/more @@ -1296,13 +1454,15 @@ example: "Bass; Backing Vocals; Vibraphone". **`inheritdoc`** PerformersRole item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. @@ -1311,32 +1471,36 @@ ___ ### performersSort -• **performersSort**(): *string*[] +• `get` **performersSort**(): `string`[] Gets the sortable names of the performers or artists who performed in the media described by the current instance. **`inheritdoc`** ArtistSort item -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. -• **performersSort**(`value`: *string*[]): *void* +• `set` **performersSort**(`value`): `void` Gets the sortable names of the performers or artists who performed in the media described by the current instance. **`inheritdoc`** ArtistSort item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. @@ -1345,30 +1509,34 @@ ___ ### pictures -• **pictures**(): [*IPicture*](../interfaces/ipicture.md)[] +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] Gets a collection of pictures associated with the media represented by the current instance. **`inheritdoc`** Cover Art items -**Returns:** [*IPicture*](../interfaces/ipicture.md)[] +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. -• **pictures**(`value`: [*IPicture*](../interfaces/ipicture.md)[]): *void* +• `set` **pictures**(`value`): `void` Gets a collection of pictures associated with the media represented by the current instance. **`inheritdoc`** Cover Art items -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | -Name | Type | ------- | ------ | -`value` | [*IPicture*](../interfaces/ipicture.md)[] | +#### Returns -**Returns:** *void* +`void` Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. @@ -1377,25 +1545,29 @@ ___ ### publisher -• **publisher**(): *string* +• `get` **publisher**(): `string` Gets the publisher of the track. -**Returns:** *string* +#### Returns + +`string` Publisher of the track or `undefined` if no value is set -• **publisher**(`value`: *string*): *void* +• `set` **publisher**(`value`): `void` Sets the publisher of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Publisher of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Publisher of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` Publisher of the track or `undefined` if no value is set @@ -1403,25 +1575,29 @@ ___ ### remixedBy -• **remixedBy**(): *string* +• `get` **remixedBy**(): `string` Gets the remixer of the track. -**Returns:** *string* +#### Returns + +`string` Remixer of the track or `undefined` if no value is set -• **remixedBy**(`value`: *string*): *void* +• `set` **remixedBy**(`value`): `void` Sets the remixer of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Remixer of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Remixer of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` Remixer of the track or `undefined` if no value is set @@ -1429,29 +1605,33 @@ ___ ### replayGainAlbumGain -• **replayGainAlbumGain**(): *number* +• `get` **replayGainAlbumGain**(): `number` Gets the ReplayGain album gain in dB. **`inheritdoc`** REPLAYGAIN_ALBUM_GAIN item -**Returns:** *number* +#### Returns + +`number` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainAlbumGain**(`value`: *number*): *void* +• `set` **replayGainAlbumGain**(`value`): `void` Gets the ReplayGain album gain in dB. **`inheritdoc`** REPLAYGAIN_ALBUM_GAIN item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1459,29 +1639,33 @@ ___ ### replayGainAlbumPeak -• **replayGainAlbumPeak**(): *number* +• `get` **replayGainAlbumPeak**(): `number` Gets the ReplayGain album peak sample. **`inheritdoc`** REPLAYGAIN_ALBUM_PEAK item -**Returns:** *number* +#### Returns + +`number` Album peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainAlbumPeak**(`value`: *number*): *void* +• `set` **replayGainAlbumPeak**(`value`): `void` Gets the ReplayGain album peak sample. **`inheritdoc`** REPLAYGAIN_ALBUM_PEAK item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Album peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1489,29 +1673,33 @@ ___ ### replayGainTrackGain -• **replayGainTrackGain**(): *number* +• `get` **replayGainTrackGain**(): `number` Gets the ReplayGain track gain in dB. **`inheritdoc`** REPLAYGAIN_TRACK_GAIN item -**Returns:** *number* +#### Returns + +`number` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainTrackGain**(`value`: *number*): *void* +• `set` **replayGainTrackGain**(`value`): `void` Gets the ReplayGain track gain in dB. **`inheritdoc`** REPLAYGAIN_TRACK_GAIN item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1519,29 +1707,33 @@ ___ ### replayGainTrackPeak -• **replayGainTrackPeak**(): *number* +• `get` **replayGainTrackPeak**(): `number` Gets the ReplayGain track peak sample. **`inheritdoc`** REPLAYGAIN_TRACK_PEAK item -**Returns:** *number* +#### Returns + +`number` Track peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainTrackPeak**(`value`: *number*): *void* +• `set` **replayGainTrackPeak**(`value`): `void` Gets the ReplayGain track peak sample. **`inheritdoc`** REPLAYGAIN_TRACK_PEAK item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Track peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1549,30 +1741,34 @@ ___ ### subtitle -• **subtitle**(): *string* +• `get` **subtitle**(): `string` Gets a description, one-line. It represents the tagline of the vide/music. **`inheritdoc`** Subtitle item -**Returns:** *string* +#### Returns + +`string` Subtitle of the media represented by the current instance or `undefined` if no value is present -• **subtitle**(`value`: *string*): *void* +• `set` **subtitle**(`value`): `void` Gets a description, one-line. It represents the tagline of the vide/music. **`inheritdoc`** Subtitle -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Subtitle of the media represented by the current instance or `undefined` if no value is present @@ -1581,43 +1777,49 @@ ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. A bit wise combined [TagTypes](../enums/tagtypes.md) containing the tag types contained in the current instance. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** [*TagTypes*](../enums/tagtypes.md) +[`TagTypes`](../enums/tagtypes.md) ___ ### title -• **title**(): *string* +• `get` **title**(): `string` Gets the title for the media described by the current instance. **`inheritdoc`** Title item -**Returns:** *string* +#### Returns + +`string` Title of the media described by the current instance or `undefined` if no value is present. -• **title**(`value`: *string*): *void* +• `set` **title**(`value`): `void` Gets the title for the media described by the current instance. **`inheritdoc`** Title item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Title of the media described by the current instance or `undefined` if no value is present. @@ -1626,30 +1828,34 @@ ___ ### titleSort -• **titleSort**(): *string* +• `get` **titleSort**(): `string` Gets the sortable name for the title of the media described by the current instance. **`inheritdoc`** TitleSort item -**Returns:** *string* +#### Returns + +`string` Sortable name of the media described by the current instance or `undefined` if no value is present -• **titleSort**(`value`: *string*): *void* +• `set` **titleSort**(`value`): `void` Gets the sortable name for the title of the media described by the current instance. **`inheritdoc`** TitleSort item -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Sortable name of the media described by the current instance or `undefined` if no value is present @@ -1658,32 +1864,36 @@ ___ ### track -• **track**(): *number* +• `get` **track**(): `number` Gets the position of the media represented by the current instance in its containing album or season (for a series). **`inheritdoc`** Track item numerator -**Returns:** *number* +#### Returns + +`number` Position of the media represented by the current instance in its containing album or `0` if not specified. -• **track**(`value`: *number*): *void* +• `set` **track**(`value`): `void` Gets the position of the media represented by the current instance in its containing album or season (for a series). **`inheritdoc`** Track item numerator -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Position of the media represented by the current instance in its containing album or `0` if not specified. @@ -1692,32 +1902,36 @@ ___ ### trackCount -• **trackCount**(): *number* +• `get` **trackCount**(): `number` Gets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. **`inheritdoc`** Track item denominator -**Returns:** *number* +#### Returns + +`number` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. -• **trackCount**(`value`: *number*): *void* +• `set` **trackCount**(`value`): `void` Gets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. **`inheritdoc`** Track item denominator -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. @@ -1726,30 +1940,34 @@ ___ ### year -• **year**(): *number* +• `get` **year**(): `number` Gets the year that the media represented by the current instance was recorded. **`inheritdoc`** Year item -**Returns:** *number* +#### Returns + +`number` Year that the media represented by the current instance was created or `0` if no value is present. -• **year**(`value`: *number*): *void* +• `set` **year**(`value`): `void` Gets the year that the media represented by the current instance was recorded. **`inheritdoc`** Year item -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Year that the media represented by the current instance was created or `0` if no value is present. @@ -1758,81 +1976,105 @@ Year that the media represented by the current instance was created or `0` if no ### appendStringValue -▸ **appendStringValue**(`key`: *string*, `value`: *string*): *void* +▸ **appendStringValue**(`key`, `value`): `void` Adds a single value to the contents of an item. Creates a new item if one does not exist. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `key` | `string` | Key to use to lookup to item to add `value` to | +| `value` | `string` | Values to add to item identified by `key` | -Name | Type | Description | ------- | ------ | ------ | -`key` | *string* | Key to use to lookup to item to add `value` to | -`value` | *string* | Values to add to item identified by `key` | +#### Returns -**Returns:** *void* +`void` ___ ### appendStringValues -▸ **appendStringValues**(`key`: *string*, `values`: *string*[]): *void* +▸ **appendStringValues**(`key`, `values`): `void` Adds a lists of strings to the values stored in a specified item. Creates a new item if one does not already exist. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`key` | *string* | Key to use to lookup the item | -`values` | *string*[] | Values to add to the item | +| Name | Type | Description | +| :------ | :------ | :------ | +| `key` | `string` | Key to use to lookup the item | +| `values` | `string`[] | Values to add to the item | -**Returns:** *void* +#### Returns + +`void` ___ ### clear -▸ **clear**(): *void* +▸ **clear**(): `void` + +Clears all values stored in the current instance. -**`inheritdoc`** +**`remarks`** The clearing procedure is format specific and should clear all values. -**Returns:** *void* +#### Returns -Overrides: [Tag](tag.md) +`void` + +#### Overrides + +[Tag](tag.md).[clear](tag.md#clear) ___ ### copyTo -▸ **copyTo**(`target`: [*Tag*](tag.md), `overwrite`: *boolean*): *void* +▸ **copyTo**(`target`, `overwrite`): `void` + +Copies the values from the current instance to another [Tag](tag.md), optionally overwriting + existing values. + +**`remarks`** This method only copies the most basic values when copying between different tag + formats. However, if `target` is of the same type as the current instance, + more advanced copying may be done. For example if both `this` and `target` are + [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`target` | [*Tag*](tag.md) | -`overwrite` | *boolean* | +| Name | Type | +| :------ | :------ | +| `target` | [`Tag`](tag.md) | +| `overwrite` | `boolean` | -**Returns:** *void* +#### Returns -Overrides: [Tag](tag.md) +`void` + +#### Overrides + +[Tag](tag.md).[copyTo](tag.md#copyto) ___ ### getItem -▸ **getItem**(`key`: *string*): *ApeTagItem* +▸ **getItem**(`key`): `ApeTagItem` Gets an item from the current instance identified by `key`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`key` | *string* | Identifier for the item to get | +| Name | Type | Description | +| :------ | :------ | :------ | +| `key` | `string` | Identifier for the item to get | -**Returns:** *ApeTagItem* +#### Returns + +`ApeTagItem` ApeTagItem Item specified by `key` if it exists, undefined is returned otherwise @@ -1841,17 +2083,19 @@ ___ ### hasItem -▸ **hasItem**(`key`: *string*): *boolean* +▸ **hasItem**(`key`): `boolean` Determines if any items with the specified `key` exist in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `key` | `string` | Identifier for looking up a matching item | -Name | Type | Description | ------- | ------ | ------ | -`key` | *string* | Identifier for looking up a matching item | +#### Returns -**Returns:** *boolean* +`boolean` boolean `true` if an item with the specified key exists, `false` otherwise @@ -1859,27 +2103,31 @@ ___ ### removeItem -▸ **removeItem**(`key`: *string*): *void* +▸ **removeItem**(`key`): `void` Removes all items from the current instance with the specified `key`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`key` | *string* | Identifier of the items to remove. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `key` | `string` | Identifier of the items to remove. | -**Returns:** *void* +#### Returns + +`void` ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) Renders the current instance as a raw APEv2 tag. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ByteVector Bytes that represent the current instance @@ -1887,37 +2135,43 @@ ___ ### setInfoTag -▸ **setInfoTag**(): *void* +▸ **setInfoTag**(): `void` Set the tags that represent the tagger software (node-taglib-sharp) itself. **`remarks`** This is typically a method to call just before saving a tag. -**Returns:** *void* +#### Returns + +`void` -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[setInfoTag](tag.md#setinfotag) ___ ### setItem -▸ **setItem**(`item`: *ApeTagItem*): *void* +▸ **setItem**(`item`): `void` Adds an item to the current instance, replacing an existing one with the same key. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `item` | `ApeTagItem` | Item to add to the current instance | -Name | Type | Description | ------- | ------ | ------ | -`item` | *ApeTagItem* | Item to add to the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### setNumericValue -▸ **setNumericValue**(`key`: *string*, `numerator`: *number*, `denominator`: *number*): *void* +▸ **setNumericValue**(`key`, `numerator`, `denominator`): `void` Stores a number in a specified item. If both `numerator` and `denominator` are provided the item will be set to `numerator/denominator`. If @@ -1925,157 +2179,181 @@ neither `numerator` nor `denominator` are provided, the item will be removed from this tag. A new item is created if one with the specified `key` does not exist. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`key` | *string* | Identifier for the item to set the item | -`numerator` | *number* | Whole number of top half of the fraction if `denominator` is provided | -`denominator` | *number* | Bottom half of the fraction to store. Can be `undefined` if only `numerator` is needed. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `key` | `string` | Identifier for the item to set the item | +| `numerator` | `number` | Whole number of top half of the fraction if `denominator` is provided | +| `denominator` | `number` | Bottom half of the fraction to store. Can be `undefined` if only `numerator` is needed. | -**Returns:** *void* +#### Returns + +`void` ___ ### setStringValue -▸ **setStringValue**(`key`: *string*, `value`: *string*): *void* +▸ **setStringValue**(`key`, `value`): `void` Stores a string in the item specified by `key`. This will replace the contents of the specified item. If `value` is falsy, the item will be removed. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `key` | `string` | Item to set the value of | +| `value` | `string` | String to store in the item. If falsy, the specified item will be removed | -Name | Type | Description | ------- | ------ | ------ | -`key` | *string* | Item to set the value of | -`value` | *string* | String to store in the item. If falsy, the specified item will be removed | +#### Returns -**Returns:** *void* +`void` ___ ### setStringValues -▸ **setStringValues**(`key`: *string*, `values`: *string*[]): *void* +▸ **setStringValues**(`key`, `values`): `void` Stores a list of strings in the item specified by `key`. This will replace the contents of the specified item. If `value` is falsy or empty, the item will be removed -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`key` | *string* | Item to set the value of | -`values` | *string*[] | String to store in the item. If falsy or empty, the specified item will be removed | +| Name | Type | Description | +| :------ | :------ | :------ | +| `key` | `string` | Item to set the value of | +| `values` | `string`[] | String to store in the item. If falsy or empty, the specified item will be removed | -**Returns:** *void* +#### Returns + +`void` ___ ### firstInGroup -▸ `Protected` `Static`**firstInGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **firstInGroup**(`group`): `string` Gets the first string in an array. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of strings to get the first string from. | +#### Returns -**Returns:** *string* +`string` First string contained in `group` or `undefined` if the array is `undefined` or empty -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[firstInGroup](tag.md#firstingroup) ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*ApeTag*](apetag.md) +▸ `Static` **fromData**(`data`): [`ApeTag`](apetag.md) Constructs and initializes a new instance by reading the contents of a raw tag in a specified [ByteVector](bytevector.md) object. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Object containing the raw tag | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Object containing the raw tag | +#### Returns -**Returns:** [*ApeTag*](apetag.md) +[`ApeTag`](apetag.md) ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*ApeTag*](apetag.md) +▸ `Static` **fromEmpty**(): [`ApeTag`](apetag.md) Constructs an empty APEv2 tag. -**Returns:** [*ApeTag*](apetag.md) +#### Returns + +[`ApeTag`](apetag.md) ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*ApeTag*](apetag.md) +▸ `Static` **fromFile**(`file`, `position`): [`ApeTag`](apetag.md) Constructs a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File to read the tag from | +| `position` | `number` | Position where the tag starts | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File to read the tag from | -`position` | *number* | Position where the tag starts | +#### Returns -**Returns:** [*ApeTag*](apetag.md) +[`ApeTag`](apetag.md) ___ ### isFalsyOrLikeEmpty -▸ `Protected` `Static`**isFalsyOrLikeEmpty**(`value`: *string* \| *string*[]): *boolean* +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` Checks if a value is falsy or empty. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* \| *string*[] | Object to check | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | -**Returns:** *boolean* +#### Returns + +`boolean` If `value` is a string, `true` is returned if the value is falsy or all whitespace, `false` is returned otherwise. If `value` is an array of strings, the array must be falsy or all elements must be falsy or whitespace to return `true`. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[isFalsyOrLikeEmpty](tag.md#isfalsyorlikeempty) ___ ### joinGroup -▸ `Protected` `Static`**joinGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **joinGroup**(`group`): `string` Joins an array of string into a single, semicolon and space separated string. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of string to join | +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | -**Returns:** *string* +#### Returns + +`string` A semicolon and space separated string containing the values from `group` or undefined if the array is `undefined` or empty. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[joinGroup](tag.md#joingroup) diff --git a/docs/classes/asfcontentdescriptionobject.md b/docs/classes/asfcontentdescriptionobject.md index e243ee74..da6b65a0 100644 --- a/docs/classes/asfcontentdescriptionobject.md +++ b/docs/classes/asfcontentdescriptionobject.md @@ -8,9 +8,9 @@ information such as title, author, copyright, description, rating information. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfContentDescriptionObject** + ↳ **`AsfContentDescriptionObject`** ## Table of contents @@ -39,25 +39,29 @@ information such as title, author, copyright, description, rating information. ### author -• **author**(): *string* +• `get` **author**(): `string` Gets the author of the media described by the current instance. -**Returns:** *string* +#### Returns + +`string` Author of the media or `undefined` if it is not set. -• **author**(`value`: *string*): *void* +• `set` **author**(`value`): `void` Sets the author of the media described by the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Author of the media or `undefined` if it is not set. @@ -65,25 +69,29 @@ ___ ### copyright -• **copyright**(): *string* +• `get` **copyright**(): `string` Gets the copyright information of the media described by the current instance. -**Returns:** *string* +#### Returns + +`string` Copyright information of the media or `undefined` if it is not set. -• **copyright**(`value`: *string*): *void* +• `set` **copyright**(`value`): `void` Sets the copyright information of the media described by the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Copyright information of the media or `undefined` if it is not set. @@ -91,25 +99,29 @@ ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets the description of the media described by the current instance. -**Returns:** *string* +#### Returns + +`string` Description of the media or `undefined` if it is not set. -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets the description of the media described by the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Description of the media or `undefined` if it is not set. @@ -117,21 +129,25 @@ ___ ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Gets whether or not the current instance is empty. -**Returns:** *boolean* +#### Returns + +`boolean` `true` if all the values are cleared. Otherwise `false` is returned. @@ -139,45 +155,53 @@ ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** ObjectType +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### rating -• **rating**(): *string* +• `get` **rating**(): `string` Gets the rating of the media described by the current instance. -**Returns:** *string* +#### Returns + +`string` Rating of the media or `undefined` if it is not set. -• **rating**(`value`: *string*): *void* +• `set` **rating**(`value`): `void` Sets the rating of the media described by the current instance. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Rating of the media or `undefined` if it is not set. @@ -185,25 +209,29 @@ ___ ### title -• **title**(): *string* +• `get` **title**(): `string` Gets the title of the media described by the current instance. -**Returns:** *string* +#### Returns + +`string` Title of the media or `undefined` if it is not set. -• **title**(`value`: *string*): *void* +• `set` **title**(`value`): `void` Sets the title of the media described by the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Title of the media or `undefined` if it is not set. @@ -211,84 +239,112 @@ Title of the media or `undefined` if it is not set. ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +BaseObject.initializeFromGuid ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) + +#### Overrides + +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from + +BaseObject.renderInternal ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*AsfContentDescriptionObject*](asfcontentdescriptionobject.md) +▸ `Static` **fromEmpty**(): [`AsfContentDescriptionObject`](asfcontentdescriptionobject.md) + +#### Returns -**Returns:** [*AsfContentDescriptionObject*](asfcontentdescriptionobject.md) +[`AsfContentDescriptionObject`](asfcontentdescriptionobject.md) ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfContentDescriptionObject*](asfcontentdescriptionobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfContentDescriptionObject`](asfcontentdescriptionobject.md) + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `file` | [`File`](file.md) | +| `position` | `number` | -Name | Type | ------- | ------ | -`file` | [*File*](file.md) | -`position` | *number* | +#### Returns -**Returns:** [*AsfContentDescriptionObject*](asfcontentdescriptionobject.md) +[`AsfContentDescriptionObject`](asfcontentdescriptionobject.md) diff --git a/docs/classes/asfcontentdescriptor.md b/docs/classes/asfcontentdescriptor.md index 27525622..09d39740 100644 --- a/docs/classes/asfcontentdescriptor.md +++ b/docs/classes/asfcontentdescriptor.md @@ -11,9 +11,9 @@ This class provides a representation of an ASF content descriptor to be used in ## Hierarchy -* *DescriptorBase* +- `DescriptorBase` - ↳ **AsfContentDescriptor** + ↳ **`AsfContentDescriptor`** ## Table of contents @@ -55,217 +55,315 @@ This class provides a representation of an ASF content descriptor to be used in ### constructor -\+ **new AsfContentDescriptor**(`name`: *string*, `type`: [*AsfObjectDataType*](../enums/asfobjectdatatype.md), `value`: DescriptorValue): [*AsfContentDescriptor*](asfcontentdescriptor.md) +• **new AsfContentDescriptor**(`name`, `type`, `value`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`name` | *string* | -`type` | [*AsfObjectDataType*](../enums/asfobjectdatatype.md) | -`value` | DescriptorValue | +| Name | Type | +| :------ | :------ | +| `name` | `string` | +| `type` | [`AsfObjectDataType`](../enums/asfobjectdatatype.md) | +| `value` | `DescriptorValue` | -**Returns:** [*AsfContentDescriptor*](asfcontentdescriptor.md) +#### Overrides + +DescriptorBase.constructor ## Properties ### \_boolValue -• `Protected` `Readonly` **\_boolValue**: *boolean* +• `Protected` `Readonly` **\_boolValue**: `boolean` + +#### Inherited from + +DescriptorBase.\_boolValue ___ ### \_byteValue -• `Protected` `Readonly` **\_byteValue**: [*ByteVector*](bytevector.md) +• `Protected` `Readonly` **\_byteValue**: [`ByteVector`](bytevector.md) + +#### Inherited from + +DescriptorBase.\_byteValue ___ ### \_dWordValue -• `Protected` `Readonly` **\_dWordValue**: *number* +• `Protected` `Readonly` **\_dWordValue**: `number` + +#### Inherited from + +DescriptorBase.\_dWordValue ___ ### \_guidValue -• `Protected` `Readonly` **\_guidValue**: *default* +• `Protected` `Readonly` **\_guidValue**: `default` + +#### Inherited from + +DescriptorBase.\_guidValue ___ ### \_name -• `Protected` `Readonly` **\_name**: *string* +• `Protected` `Readonly` **\_name**: `string` + +#### Inherited from + +DescriptorBase.\_name ___ ### \_qWordValue -• `Protected` `Readonly` **\_qWordValue**: *bigint* +• `Protected` `Readonly` **\_qWordValue**: `bigint` + +#### Inherited from + +DescriptorBase.\_qWordValue ___ ### \_stringValue -• `Protected` `Readonly` **\_stringValue**: *string* +• `Protected` `Readonly` **\_stringValue**: `string` + +#### Inherited from + +DescriptorBase.\_stringValue ___ ### \_type -• `Protected` `Readonly` **\_type**: [*AsfObjectDataType*](../enums/asfobjectdatatype.md) +• `Protected` `Readonly` **\_type**: [`AsfObjectDataType`](../enums/asfobjectdatatype.md) + +#### Inherited from + +DescriptorBase.\_type ___ ### \_wordValue -• `Protected` `Readonly` **\_wordValue**: *number* +• `Protected` `Readonly` **\_wordValue**: `number` + +#### Inherited from + +DescriptorBase.\_wordValue ## Accessors ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the current instance. -**Returns:** *string* +#### Returns + +`string` ___ ### type -• **type**(): [*AsfObjectDataType*](../enums/asfobjectdatatype.md) +• `get` **type**(): [`AsfObjectDataType`](../enums/asfobjectdatatype.md) Gets the type of data contained in the current instance. -**Returns:** [*AsfObjectDataType*](../enums/asfobjectdatatype.md) +#### Returns + +[`AsfObjectDataType`](../enums/asfobjectdatatype.md) ## Methods ### getBool -▸ **getBool**(): *boolean* +▸ **getBool**(): `boolean` Gets the boolean value of the current instance. -**Returns:** *boolean* +#### Returns + +`boolean` boolean Boolean value of the current instance is returned if [type](asfcontentdescriptor.md#type) is {@link DataType.Bool}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getBool + ___ ### getBytes -▸ **getBytes**(): [*ByteVector*](bytevector.md) +▸ **getBytes**(): [`ByteVector`](bytevector.md) Gets the binary contents of the current instance. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ByteVector Byte contents of the current instance, if [type](asfcontentdescriptor.md#type) is {@link DataType.Bytes}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getBytes + ___ ### getGuid -▸ **getGuid**(): *default* +▸ **getGuid**(): `default` Gets the guid contents of the current instance. -**Returns:** *default* +#### Returns + +`default` UuidWrapper GUID contents of the current instance, if [type](asfcontentdescriptor.md#type) is {@link DataType.Guid}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getGuid + ___ ### getString -▸ **getString**(): *string* +▸ **getString**(): `string` Gets the string contents of the current instance. -**Returns:** *string* +#### Returns + +`string` string String contents of the current instance if [type](asfcontentdescriptor.md#type) is {@link DataType.Unicode}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getString + ___ ### getUint -▸ **getUint**(): *number* +▸ **getUint**(): `number` Gets the 32-bit double word contents of the current instance. -**Returns:** *number* +#### Returns + +`number` number Double word contents of the current instance, if [type](asfcontentdescriptor.md#type) is {@link DataType.DWord}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getUint + ___ ### getUlong -▸ **getUlong**(): *bigint* +▸ **getUlong**(): `bigint` Gets the 64-bit quad word contents of the current instance. -**Returns:** *bigint* +#### Returns + +`bigint` bigint Quad word contents of the current instance, if [type](asfcontentdescriptor.md#type) is {@link DataType.QWord}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getUlong + ___ ### getUshort -▸ **getUshort**(): *number* +▸ **getUshort**(): `number` Gets the 16-bit word contents of the current instance. -**Returns:** *number* +#### Returns + +`number` number Word contents of the current instance, if [type](asfcontentdescriptor.md#type) is {@link DataType.Word}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getUshort + ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Overrides + +DescriptorBase.render ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** *string* +`string` + +#### Inherited from + +DescriptorBase.toString ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md)): [*AsfContentDescriptor*](asfcontentdescriptor.md) +▸ `Static` **fromFile**(`file`): [`AsfContentDescriptor`](asfcontentdescriptor.md) Instantiates a new instance by reading in the contents from a file. -**`internal`** +**`internal`** + +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | The file to read the raw ASF description record from | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | The file to read the raw ASF description record from | +#### Returns -**Returns:** [*AsfContentDescriptor*](asfcontentdescriptor.md) +[`AsfContentDescriptor`](asfcontentdescriptor.md) diff --git a/docs/classes/asfextendedcontentdescriptionobject.md b/docs/classes/asfextendedcontentdescriptionobject.md index 72e0f9c0..a56e9ae6 100644 --- a/docs/classes/asfextendedcontentdescriptionobject.md +++ b/docs/classes/asfextendedcontentdescriptionobject.md @@ -7,9 +7,9 @@ read from and written to disk. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfExtendedContentDescriptionObject** + ↳ **`AsfExtendedContentDescriptionObject`** ## Table of contents @@ -38,31 +38,37 @@ read from and written to disk. ### descriptors -• **descriptors**(): [*AsfContentDescriptor*](asfcontentdescriptor.md)[] +• `get` **descriptors**(): [`AsfContentDescriptor`](asfcontentdescriptor.md)[] Gets all descriptors stored in the current instance. -**Returns:** [*AsfContentDescriptor*](asfcontentdescriptor.md)[] +#### Returns + +[`AsfContentDescriptor`](asfcontentdescriptor.md)[] ___ ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Gets whether or not the current instance contains any records. -**Returns:** *boolean* +#### Returns + +`boolean` boolean `true` if the current instance does not contain any records, `false` otherwise. @@ -71,139 +77,173 @@ ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` -**`inheritdoc`** +**`inheritdoc`** -**Returns:** ObjectType +#### Returns + +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ## Methods ### addDescriptor -▸ **addDescriptor**(`descriptor`: [*AsfContentDescriptor*](asfcontentdescriptor.md)): *void* +▸ **addDescriptor**(`descriptor`): `void` Adds a descriptor to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `descriptor` | [`AsfContentDescriptor`](asfcontentdescriptor.md) | Record to add to the current instance | -Name | Type | Description | ------- | ------ | ------ | -`descriptor` | [*AsfContentDescriptor*](asfcontentdescriptor.md) | Record to add to the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### getDescriptors -▸ **getDescriptors**(...`names`: *string*[]): [*AsfContentDescriptor*](asfcontentdescriptor.md)[] +▸ **getDescriptors**(...`names`): [`AsfContentDescriptor`](asfcontentdescriptor.md)[] Gets all descriptors with a name matching one of the provided collection of names the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`...names` | *string*[] | List of names of the records to return | +| Name | Type | Description | +| :------ | :------ | :------ | +| `...names` | `string`[] | List of names of the records to return | -**Returns:** [*AsfContentDescriptor*](asfcontentdescriptor.md)[] +#### Returns + +[`AsfContentDescriptor`](asfcontentdescriptor.md)[] ___ ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +`void` -**Returns:** *void* +#### Inherited from + +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +`void` -**Returns:** *void* +#### Inherited from + +BaseObject.initializeFromGuid ___ ### removeDescriptors -▸ **removeDescriptors**(`name`: *string*): *void* +▸ **removeDescriptors**(`name`): `void` Removes all descriptors with a given name from the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `name` | `string` | Name of the descriptor to be removed | -Name | Type | Description | ------- | ------ | ------ | -`name` | *string* | Name of the descriptor to be removed | +#### Returns -**Returns:** *void* +`void` ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Overrides + +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +BaseObject.renderInternal ___ ### setDescriptors -▸ **setDescriptors**(`name`: *string*, ...`descriptors`: [*AsfContentDescriptor*](asfcontentdescriptor.md)[]): *void* +▸ **setDescriptors**(`name`, ...`descriptors`): `void` Sets a collection of descriptors for a given name, removing the existing matching records. @@ -212,39 +252,45 @@ Sets a collection of descriptors for a given name, removing the existing matchin one provided as an argument, which is only used for removing existing values and determining where to position the new descriptors. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `name` | `string` | Name of the descriptors to be added/removed | +| `...descriptors` | [`AsfContentDescriptor`](asfcontentdescriptor.md)[] | Descriptors to add to the new instance | -Name | Type | Description | ------- | ------ | ------ | -`name` | *string* | Name of the descriptors to be added/removed | -`...descriptors` | [*AsfContentDescriptor*](asfcontentdescriptor.md)[] | Descriptors to add to the new instance | +#### Returns -**Returns:** *void* +`void` ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*AsfExtendedContentDescriptionObject*](asfextendedcontentdescriptionobject.md) +▸ `Static` **fromEmpty**(): [`AsfExtendedContentDescriptionObject`](asfextendedcontentdescriptionobject.md) Constructs and initializes a new, empty extended content description object. -**Returns:** [*AsfExtendedContentDescriptionObject*](asfextendedcontentdescriptionobject.md) +#### Returns + +[`AsfExtendedContentDescriptionObject`](asfextendedcontentdescriptionobject.md) ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfExtendedContentDescriptionObject*](asfextendedcontentdescriptionobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfExtendedContentDescriptionObject`](asfextendedcontentdescriptionobject.md) Constructs and initializes a new instance that is read in from the provided file at the provided position. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File to read the instance from. Must not be falsey | +| `position` | `number` | Position in the file where the instance begins. Must be a positive, safe integer. | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File to read the instance from. Must not be falsey | -`position` | *number* | Position in the file where the instance begins. Must be a positive, safe integer. | +#### Returns -**Returns:** [*AsfExtendedContentDescriptionObject*](asfextendedcontentdescriptionobject.md) +[`AsfExtendedContentDescriptionObject`](asfextendedcontentdescriptionobject.md) diff --git a/docs/classes/asffile.md b/docs/classes/asffile.md index 87388fab..67123e9c 100644 --- a/docs/classes/asffile.md +++ b/docs/classes/asffile.md @@ -6,9 +6,9 @@ This class provides tagging and properties support for Microsoft's ASF files. ## Hierarchy -* [*File*](file.md) +- [`File`](file.md) - ↳ **AsfFile** + ↳ **`AsfFile`** ## Table of contents @@ -26,7 +26,6 @@ This class provides tagging and properties support for Microsoft's ASF files. ### Accessors -- [bufferSize](asffile.md#buffersize) - [corruptionReasons](asffile.md#corruptionreasons) - [fileAbstraction](asffile.md#fileabstraction) - [invariantEndPosition](asffile.md#invariantendposition) @@ -42,6 +41,7 @@ This class provides tagging and properties support for Microsoft's ASF files. - [tag](asffile.md#tag) - [tagTypes](asffile.md#tagtypes) - [tagTypesOnDisk](asffile.md#tagtypesondisk) +- [bufferSize](asffile.md#buffersize) ### Methods @@ -70,303 +70,365 @@ This class provides tagging and properties support for Microsoft's ASF files. ### constructor -\+ **new AsfFile**(`file`: *string* \| IFileAbstraction, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*AsfFile*](asffile.md) +• **new AsfFile**(`file`, `propertiesStyle`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`file` | *string* \| IFileAbstraction | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `file` | `string` \| `IFileAbstraction` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*AsfFile*](asffile.md) +#### Overrides -Inherited from: [File](file.md) +[File](file.md).[constructor](file.md#constructor) ## Properties ### \_fileAbstraction -• `Protected` **\_fileAbstraction**: IFileAbstraction +• `Protected` **\_fileAbstraction**: `IFileAbstraction` + +#### Inherited from -Inherited from: [File](file.md).[_fileAbstraction](file.md#_fileabstraction) +[File](file.md).[_fileAbstraction](file.md#_fileabstraction) ___ ### \_fileStream -• `Protected` **\_fileStream**: IStream +• `Protected` **\_fileStream**: `IStream` -Inherited from: [File](file.md).[_fileStream](file.md#_filestream) +#### Inherited from + +[File](file.md).[_fileStream](file.md#_filestream) ___ ### \_invariantEndPosition -• `Protected` **\_invariantEndPosition**: *number*= -1 +• `Protected` **\_invariantEndPosition**: `number` = `-1` + +#### Inherited from -Inherited from: [File](file.md).[_invariantEndPosition](file.md#_invariantendposition) +[File](file.md).[_invariantEndPosition](file.md#_invariantendposition) ___ ### \_invariantStartPosition -• `Protected` **\_invariantStartPosition**: *number*= -1 +• `Protected` **\_invariantStartPosition**: `number` = `-1` + +#### Inherited from -Inherited from: [File](file.md).[_invariantStartPosition](file.md#_invariantstartposition) +[File](file.md).[_invariantStartPosition](file.md#_invariantstartposition) ___ ### \_tagTypesOnDisk -• `Protected` **\_tagTypesOnDisk**: [*TagTypes*](../enums/tagtypes.md) +• `Protected` **\_tagTypesOnDisk**: [`TagTypes`](../enums/tagtypes.md) -Inherited from: [File](file.md).[_tagTypesOnDisk](file.md#_tagtypesondisk) +#### Inherited from -## Accessors - -### bufferSize +[File](file.md).[_tagTypesOnDisk](file.md#_tagtypesondisk) -• **bufferSize**(): *number* - -Gets the buffer size to use when reading large blocks of data - -**Returns:** *number* - -___ +## Accessors ### corruptionReasons -• **corruptionReasons**(): *string*[] +• `get` **corruptionReasons**(): `string`[] Reasons for which this file is marked as corrupt. -**Returns:** *string*[] +#### Returns + +`string`[] ___ ### fileAbstraction -• **fileAbstraction**(): IFileAbstraction +• `get` **fileAbstraction**(): `IFileAbstraction` Gets the {@link IFileAbstraction} representing the file. -**Returns:** IFileAbstraction +#### Returns + +`IFileAbstraction` ___ ### invariantEndPosition -• **invariantEndPosition**(): *number* +• `get` **invariantEndPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance ends. If the value could not be determined, `-1` is returned; -**Returns:** *number* +#### Returns + +`number` ___ ### invariantStartPosition -• **invariantStartPosition**(): *number* +• `get` **invariantStartPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance begins. If the value could not be determined, `-1` is returned. -**Returns:** *number* +#### Returns + +`number` ___ ### isPossiblyCorrupt -• **isPossiblyCorrupt**(): *boolean* +• `get` **isPossiblyCorrupt**(): `boolean` Indicates whether or not this file may be corrupt. Files with unknown corruptions should not be written. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isWritable -• **isWritable**(): *boolean* +• `get` **isWritable**(): `boolean` Indicates whether or not tags can be written back to the current file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### length -• **length**(): *number* +• `get` **length**(): `number` Gets the length of the file represented by the current instance. Value will be 0 if the file is not open for reading; -**Returns:** *number* +#### Returns + +`number` ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets the MimeType of the file as determined during creation of the instance. -**Returns:** *string* +#### Returns + +`string` ___ ### mode -• **mode**(): [*FileAccessMode*](../enums/fileaccessmode.md) +• `get` **mode**(): [`FileAccessMode`](../enums/fileaccessmode.md) Gets the file access mode in use by the current instance. -**Returns:** [*FileAccessMode*](../enums/fileaccessmode.md) +#### Returns + +[`FileAccessMode`](../enums/fileaccessmode.md) -• **mode**(`val`: [*FileAccessMode*](../enums/fileaccessmode.md)): *void* +• `set` **mode**(`val`): `void` Sets the file access mode in use by the current instance. Changing the value will cause the stream currently in use to be closed, except when a change is made from [FileAccessMode.Write](../enums/fileaccessmode.md#write) to [FileAccessMode.Read](../enums/fileaccessmode.md#read) which has no effect. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`val` | [*FileAccessMode*](../enums/fileaccessmode.md) | File access mode to change to | +| Name | Type | Description | +| :------ | :------ | :------ | +| `val` | [`FileAccessMode`](../enums/fileaccessmode.md) | File access mode to change to | -**Returns:** *void* +#### Returns + +`void` ___ ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the file as stored in its file abstraction. -**Returns:** *string* +#### Returns + +`string` ___ ### position -• **position**(): *number* +• `get` **position**(): `number` Gets the seek position in the internal stream used by the current instance. Value will be 0 if the file is not open for reading -**Returns:** *number* +#### Returns + +`number` ___ ### properties -• **properties**(): [*Properties*](properties.md) +• `get` **properties**(): [`Properties`](properties.md) Gets the media properties of the file represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** [*Properties*](properties.md) +[`Properties`](properties.md) ___ ### tag -• **tag**(): [*AsfTag*](asftag.md) +• `get` **tag**(): [`AsfTag`](asftag.md) Gets an abstract representation of all tags stored in the current instance. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** [*AsfTag*](asftag.md) +[`AsfTag`](asftag.md) ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### tagTypesOnDisk -• **tagTypesOnDisk**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypesOnDisk**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the physical file represented by the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### bufferSize + +• `Static` `get` **bufferSize**(): `number` + +Gets the buffer size to use when reading large blocks of data + +#### Returns + +`number` ## Methods ### dispose -▸ **dispose**(): *void* +▸ **dispose**(): `void` Dispose the current instance. Equivalent to setting the mode to closed. -**Returns:** *void* +#### Returns + +`void` -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[dispose](file.md#dispose) ___ ### find -▸ **find**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `before?`: [*ByteVector*](bytevector.md)): *number* +▸ **find**(`pattern`, `startPosition?`, `before?`): `number` Searches forward through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` is not provided or `startPosition` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be smaller than the | +| `startPosition` | `number` | `0` | Seek position to start searching. Must be positive, safe integer. | +| `before?` | [`ByteVector`](bytevector.md) | `undefined` | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be smaller than the | -`startPosition` | *number* | 0 | Seek position to start searching. Must be positive, safe integer. | -`before?` | [*ByteVector*](bytevector.md) | - | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | +#### Returns -**Returns:** *number* +`number` Index at which the value was found. If not found, `-1` is returned. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[find](file.md#find) ___ ### getTag -▸ **getTag**(`type`: [*TagTypes*](../enums/tagtypes.md), `_create`: *boolean*): [*Tag*](tag.md) +▸ **getTag**(`type`, `_create`): [`Tag`](tag.md) + +Gets a tag of the specified type from the current instance, optionally creating a new tag if +possible. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`TagTypes`](../enums/tagtypes.md) | Type of tag to read. | +| `_create` | `boolean` | Whether or not to try and create the tag if one is not found. `true` does not guarantee the tag will be created. For example, trying to create an ID3v2 tag on an OGG Vorbis file will always fail. | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`type` | [*TagTypes*](../enums/tagtypes.md) | -`_create` | *boolean* | +[`Tag`](tag.md) -**Returns:** [*Tag*](tag.md) +Tag object containing the tag that was found in or added to the current instance. + If no matching tag was found and none was created, `undefined` is returned. It is safe + to assume that if `undefined` is not returned, the returned tag can be cast to the + appropriate type. -Overrides: [File](file.md) +#### Overrides + +[File](file.md).[getTag](file.md#gettag) ___ ### insert -▸ **insert**(`data`: [*ByteVector*](bytevector.md), `start`: *number*, `replace?`: *number*): *void* +▸ **insert**(`data`, `start`, `replace?`): `void` Inserts a specified block of data into the file represented by the current instance, at a specified location, replacing a specified number of bytes. @@ -374,78 +436,94 @@ specified location, replacing a specified number of bytes. **`throws`** Error Thrown when: 1) data is falsey, 2) start is not a safe, positive number, or 3) replace is not a safe, positive number -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | `undefined` | Data to insert into the file. | +| `start` | `number` | `undefined` | Index into the file at which to insert the data. Must be safe positive integer. | +| `replace` | `number` | `0` | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | + +#### Returns -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | - | Data to insert into the file. | -`start` | *number* | - | Index into the file at which to insert the data. Must be safe positive integer. | -`replace` | *number* | 0 | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[insert](file.md#insert) ___ ### markAsCorrupt -▸ **markAsCorrupt**(`reason`: *string*): *void* +▸ **markAsCorrupt**(`reason`): `void` Mark the current instance as corrupt. NOTE: Not intended to be used outside of this library. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `reason` | `string` | Reason why this file is considered to be corrupt | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`reason` | *string* | Reason why this file is considered to be corrupt | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[markAsCorrupt](file.md#markascorrupt) ___ ### preSave -▸ `Protected`**preSave**(): *void* +▸ `Protected` **preSave**(): `void` Prepares to save the file. This must be called at the beginning of every File.save() method. -**Returns:** *void* +#### Returns -Inherited from: [File](file.md) +`void` + +#### Inherited from + +[File](file.md).[preSave](file.md#presave) ___ ### rFind -▸ **rFind**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `after?`: [*ByteVector*](bytevector.md)): *number* +▸ **rFind**(`pattern`, `startPosition?`, `after?`): `number` Searched backwards through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` was not provided or if `startPosition` is not a safe, positive integer. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be shorter than the [bufferSize](asffile.md#buffersize) | +| `startPosition` | `number` | `0` | Seek position from which to start searching. | +| `after?` | [`ByteVector`](bytevector.md) | `undefined` | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be shorter than the [bufferSize](asffile.md#buffersize) | -`startPosition` | *number* | 0 | Seek position from which to start searching. | -`after?` | [*ByteVector*](bytevector.md) | - | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | +#### Returns -**Returns:** *number* +`number` Index at which the value wa found. If not found, `-1` is returned. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[rFind](file.md#rfind) ___ ### readBlock -▸ **readBlock**(`length`: *number*): [*ByteVector*](bytevector.md) +▸ **readBlock**(`length`): [`ByteVector`](bytevector.md) Reads a specified number of bytes at the current seek position from the current position. This method reads the block of data at the current seek position. To change the seek @@ -453,113 +531,138 @@ position, use [File.seek](file.md#seek). **`throws`** Error Thrown when `length` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to read. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to read. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Object containing the data read from the current instance. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[readBlock](file.md#readblock) ___ ### removeBlock -▸ **removeBlock**(`start`: *number*, `length`: *number*): *void* +▸ **removeBlock**(`start`, `length`): `void` Removes a specified block of data from the file represented by the current instance. **`throws`** Error thrown if 1) start is not a safe, positive integer or 2) length must be a safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `start` | `number` | Index into the file at which to remove data. Must be safe, positive integer. | +| `length` | `number` | Number of bytes to remove. Must be a safe integer. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`start` | *number* | Index into the file at which to remove data. Must be safe, positive integer. | -`length` | *number* | Number of bytes to remove. Must be a safe integer. | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[removeBlock](file.md#removeblock) ___ ### removeTags -▸ **removeTags**(`types`: [*TagTypes*](../enums/tagtypes.md)): *void* +▸ **removeTags**(`types`): `void` + +Removes a set of tag types from the current instance. In order to remove all tags from a +file, pass [TagTypes.AllTags](../enums/tagtypes.md#alltags) as `types` + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | Bitwise combined [TagTypes](../enums/tagtypes.md) value containing the tag types to be removed from the file | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`types` | [*TagTypes*](../enums/tagtypes.md) | +`void` -**Returns:** *void* +#### Overrides -Overrides: [File](file.md) +[File](file.md).[removeTags](file.md#removetags) ___ ### save -▸ **save**(): *void* +▸ **save**(): `void` -**`inheritdoc`** +Saves the changes made in the current instance to the file it represents. -**Returns:** *void* +#### Returns -Overrides: [File](file.md) +`void` + +#### Overrides + +[File](file.md).[save](file.md#save) ___ ### seek -▸ **seek**(`offset`: *number*, `origin?`: SeekOrigin): *void* +▸ **seek**(`offset`, `origin?`): `void` Moves the read/write pointer to a specified offset in the current instance, relative to a specified origin. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `offset` | `number` | Byte offset to seek to. Must be a safe, positive integer. | +| `origin` | `SeekOrigin` | Origin from which to seek | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`offset` | *number* | - | Byte offset to seek to. Must be a safe, positive integer. | -`origin` | SeekOrigin | ... | Origin from which to seek | +#### Returns -**Returns:** *void* +`void` -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[seek](file.md#seek) ___ ### truncate -▸ `Protected`**truncate**(`length`: *number*): *void* +▸ `Protected` **truncate**(`length`): `void` Resizes the current instance to a specific number of bytes. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to resize the file to, must be a safe, positive integer. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to resize the file to, must be a safe, positive integer. | +#### Returns -**Returns:** *void* +`void` -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[truncate](file.md#truncate) ___ ### writeBlock -▸ **writeBlock**(`data`: [*ByteVector*](bytevector.md)): *void* +▸ **writeBlock**(`data`): `void` Writes a block of data to the file represented by the current instance at the current seek position. This will overwrite any existing data at the seek position and append new data to @@ -567,133 +670,161 @@ the file if writing past the current end. **`throws`** Error Thrown when `data` is not provided. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing data to the current instance. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing data to the current instance. | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[writeBlock](file.md#writeblock) ___ ### addFileType -▸ `Static`**addFileType**(`mimeType`: *string*, `constructor`: [*FileTypeConstructor*](../modules.md#filetypeconstructor), `override?`: *boolean*): *void* +▸ `Static` **addFileType**(`mimeType`, `constructor`, `override?`): `void` Registers the constructor for a subclass of [File](file.md) with the MimeType it is associated with. Optionally, the MimeType can be forcefully overridden if it was already registered. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mimeType` | `string` | `undefined` | MimeType to register this subclass constructor to. | +| `constructor` | [`FileTypeConstructor`](../modules.md#filetypeconstructor) | `undefined` | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | +| `override` | `boolean` | `false` | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | + +#### Returns -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mimeType` | *string* | - | MimeType to register this subclass constructor to. | -`constructor` | [*FileTypeConstructor*](../modules.md#filetypeconstructor) | - | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | -`override` | *boolean* | false | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[addFileType](file.md#addfiletype) ___ ### addFileTypeResolver -▸ `Static`**addFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **addFileTypeResolver**(`resolver`): `void` Registers a [FileTypeResolver](../modules.md#filetyperesolver) to the front of the list of file type resolvers. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | +| Name | Type | Description | +| :------ | :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | -**Returns:** *void* +#### Returns -Inherited from: [File](file.md) +`void` + +#### Inherited from + +[File](file.md).[addFileTypeResolver](file.md#addfiletyperesolver) ___ ### createFromAbstraction -▸ `Static`**createFromAbstraction**(`abstraction`: IFileAbstraction, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromAbstraction**(`abstraction`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of a [File](file.md) subclass for a specified file abstraction, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | Object to use when reading/writing from the current instance. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`abstraction` | IFileAbstraction | - | Object to use when reading/writing from the current instance. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified abstraction. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[createFromAbstraction](file.md#createfromabstraction) ___ ### createFromPath -▸ `Static`**createFromPath**(`filePath`: *string*, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromPath**(`filePath`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of [File](file.md) subclass for a specified file path, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to read/write. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`filePath` | *string* | - | Path to the file to read/write. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified path. -Inherited from: [File](file.md) +#### Inherited from + +[File](file.md).[createFromPath](file.md#createfrompath) ___ ### removeFileType -▸ `Static`**removeFileType**(`mimeType`: *string*): *void* +▸ `Static` **removeFileType**(`mimeType`): `void` Used for removing a file type constructor during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `mimeType` | `string` | + +#### Returns -Name | Type | ------- | ------ | -`mimeType` | *string* | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[removeFileType](file.md#removefiletype) ___ ### removeFileTypeResolver -▸ `Static`**removeFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **removeFileTypeResolver**(`resolver`): `void` Used for removing a file type resolver during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | + +#### Returns -Name | Type | ------- | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [File](file.md) +[File](file.md).[removeFileTypeResolver](file.md#removefiletyperesolver) diff --git a/docs/classes/asffilepropertiesobject.md b/docs/classes/asffilepropertiesobject.md index 8d7e62cb..32a288b5 100644 --- a/docs/classes/asffilepropertiesobject.md +++ b/docs/classes/asffilepropertiesobject.md @@ -8,9 +8,9 @@ found within the Data object. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfFilePropertiesObject** + ↳ **`AsfFilePropertiesObject`** ## Table of contents @@ -43,48 +43,56 @@ found within the Data object. ### creationDate -• **creationDate**(): Date +• `get` **creationDate**(): `Date` Gets the creation date of the file described by the current instance. -**Returns:** Date +#### Returns + +`Date` ___ ### dataPacketsCount -• **dataPacketsCount**(): *bigint* +• `get` **dataPacketsCount**(): `bigint` Gets the number of packets in the data section of the file represented by the current instance. -**Returns:** *bigint* +#### Returns + +`bigint` ___ ### fileId -• **fileId**(): *default* +• `get` **fileId**(): `default` Gets the GUID for the file described by the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### fileSize -• **fileSize**(): *bigint* +• `get` **fileSize**(): `bigint` Gets the total size of the file described by the current instance in bytes. -**Returns:** *bigint* +#### Returns + +`bigint` ___ ### flags -• **flags**(): *number* +• `get` **flags**(): `number` Gets whether the file described by the current instance is broadcast or seekable. @@ -104,176 +112,222 @@ Gets whether the file described by the current instance is broadcast or seekable size. It can also be seekable if the file has an audio stream and a video stream with a matching simple index object. -**Returns:** *number* +#### Returns + +`number` ___ ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### maximumBitrate -• **maximumBitrate**(): *number* +• `get` **maximumBitrate**(): `number` Gets the maximum instantaneous bit rate, in bits per second, for the file described by the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### maximumDataPacketSize -• **maximumDataPacketSize**(): *number* +• `get` **maximumDataPacketSize**(): `number` Gets the maximum packet size, in bytes, for the file described by the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### minimumDataPacketSize -• **minimumDataPacketSize**(): *number* +• `get` **minimumDataPacketSize**(): `number` Gets the minimum packet size, in bytes, for the file described by the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` -**`inheritdoc`** +**`inheritdoc`** -**Returns:** ObjectType +#### Returns + +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### playDurationMilliseconds -• **playDurationMilliseconds**(): *number* +• `get` **playDurationMilliseconds**(): `number` Get the time needed to play the file described by the current instance in milliseconds. -**Returns:** *number* +#### Returns + +`number` ___ ### prerollMilliseconds -• **prerollMilliseconds**(): *number* +• `get` **prerollMilliseconds**(): `number` Gets the amount of time, in milliseconds, to buffer data before playing the file described by the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### sendDurationMilliseconds -• **sendDurationMilliseconds**(): *number* +• `get` **sendDurationMilliseconds**(): `number` Get the time needed to send the file described by the current instance in milliseconds. A packet's "send time" is the time when the packet should be delivered over the network, it is not the presentation of the packet. -**Returns:** *number* +#### Returns + +`number` ## Methods ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +BaseObject.initializeFromGuid ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Overrides + +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +BaseObject.renderInternal ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfFilePropertiesObject*](asffilepropertiesobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfFilePropertiesObject`](asffilepropertiesobject.md) + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `file` | [`File`](file.md) | +| `position` | `number` | -Name | Type | ------- | ------ | -`file` | [*File*](file.md) | -`position` | *number* | +#### Returns -**Returns:** [*AsfFilePropertiesObject*](asffilepropertiesobject.md) +[`AsfFilePropertiesObject`](asffilepropertiesobject.md) diff --git a/docs/classes/asfheaderextensionobject.md b/docs/classes/asfheaderextensionobject.md index ff59756a..49edb1e9 100644 --- a/docs/classes/asfheaderextensionobject.md +++ b/docs/classes/asfheaderextensionobject.md @@ -7,9 +7,9 @@ object which can be read from and written to disk. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfHeaderExtensionObject** + ↳ **`AsfHeaderExtensionObject`** ## Table of contents @@ -33,7 +33,7 @@ object which can be read from and written to disk. ### children -• **children**(): *default*[] +• `get` **children**(): `default`[] Gets the child ASF objects contained in the current instance. @@ -43,131 +43,167 @@ Gets the child ASF objects contained in the current instance. Only certain objects are valid inside a header extension object. Any objects that are not valid or not supported are read as {@link UnknownObject}. -**Returns:** *default*[] +#### Returns + +`default`[] ___ ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** ObjectType +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ## Methods ### addUniqueObject -▸ **addUniqueObject**(`obj`: *default*): *void* +▸ **addUniqueObject**(`obj`): `void` Adds a unique child object to the current instance, replacing an existing child if present. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `obj` | `default` | Object to add to the current instance | -Name | Type | Description | ------- | ------ | ------ | -`obj` | *default* | Object to add to the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +BaseObject.initializeFromGuid ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** + +#### Returns + +[`ByteVector`](bytevector.md) -**`inheritdoc`** +#### Overrides -**Returns:** [*ByteVector*](bytevector.md) +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) + +#### Inherited from + +BaseObject.renderInternal ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfHeaderExtensionObject*](asfheaderextensionobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfHeaderExtensionObject`](asfheaderextensionobject.md) Constructs and initialized a new instance by reading the contents from a specified position in the provided file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File containing contents that will be read into the new instance | +| `position` | `number` | Position in the file where the instance begins | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File containing contents that will be read into the new instance | -`position` | *number* | Position in the file where the instance begins | +#### Returns -**Returns:** [*AsfHeaderExtensionObject*](asfheaderextensionobject.md) +[`AsfHeaderExtensionObject`](asfheaderextensionobject.md) diff --git a/docs/classes/asfheaderobject.md b/docs/classes/asfheaderobject.md index 4e216527..10fc0263 100644 --- a/docs/classes/asfheaderobject.md +++ b/docs/classes/asfheaderobject.md @@ -7,9 +7,9 @@ to disk. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfHeaderObject** + ↳ **`AsfHeaderObject`** ## Table of contents @@ -37,7 +37,7 @@ to disk. ### children -• **children**(): *default*[] +• `get` **children**(): `default`[] Gets that child objects of this instance. @@ -47,17 +47,21 @@ Gets that child objects of this instance. Only certain objects are valid inside a header object. Any objects that are not valid or not supported are read as {@link UnknownObject}. -**Returns:** *default*[] +#### Returns + +`default`[] ___ ### extension -• **extension**(): [*AsfHeaderExtensionObject*](asfheaderextensionobject.md) +• `get` **extension**(): [`AsfHeaderExtensionObject`](asfheaderextensionobject.md) Gets the header extension object contained in the current instance. -**Returns:** [*AsfHeaderExtensionObject*](asfheaderextensionobject.md) +#### Returns + +[`AsfHeaderExtensionObject`](asfheaderextensionobject.md) HeaderExtensionObject Header extension contained in this instance, if it exists. `undefined` is returned if it doesn't exist @@ -66,21 +70,25 @@ ___ ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### hasContentDescriptors -• **hasContentDescriptors**(): *boolean* +• `get` **hasContentDescriptors**(): `boolean` Gets whether or not the current instance contains either type of content descriptors. -**Returns:** *boolean* +#### Returns + +`boolean` boolean `true` if a content description object or extended content description object exists in this instance. `false` otherwise @@ -89,135 +97,171 @@ ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** ObjectType +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### properties -• **properties**(): [*Properties*](properties.md) +• `get` **properties**(): [`Properties`](properties.md) Get the media properties contained within the current instance. -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) ## Methods ### addUniqueObject -▸ **addUniqueObject**(`obj`: *default*): *void* +▸ **addUniqueObject**(`obj`): `void` Adds a unique child object to the current instance, replacing an existing child if present. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `obj` | `default` | Object to add to the current instance | -Name | Type | Description | ------- | ------ | ------ | -`obj` | *default* | Object to add to the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | + +#### Returns + +`void` -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +#### Inherited from -**Returns:** *void* +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +BaseObject.initializeFromGuid ___ ### removeContentDescriptor -▸ **removeContentDescriptor**(): *void* +▸ **removeContentDescriptor**(): `void` Removes the content description objects from the current instance. -**Returns:** *void* +#### Returns + +`void` ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** + +#### Returns -**`inheritdoc`** +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Overrides + +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from + +BaseObject.renderInternal ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfHeaderObject*](asfheaderobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfHeaderObject`](asfheaderobject.md) Constructs and initializes a new instance by reading the contents from a specified position in the provided file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File containing contents that will be read into the new instance | +| `position` | `number` | Position in the file where the instance begins | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File containing contents that will be read into the new instance | -`position` | *number* | Position in the file where the instance begins | +#### Returns -**Returns:** [*AsfHeaderObject*](asfheaderobject.md) +[`AsfHeaderObject`](asfheaderobject.md) diff --git a/docs/classes/asfmetadatadescriptor.md b/docs/classes/asfmetadatadescriptor.md index 4680fda6..71d7fd23 100644 --- a/docs/classes/asfmetadatadescriptor.md +++ b/docs/classes/asfmetadatadescriptor.md @@ -11,9 +11,9 @@ MetadataLibraryObject. ## Hierarchy -* *DescriptorBase* +- `DescriptorBase` - ↳ **AsfMetadataDescriptor** + ↳ **`AsfMetadataDescriptor`** ## Table of contents @@ -57,239 +57,341 @@ MetadataLibraryObject. ### constructor -\+ **new AsfMetadataDescriptor**(`languageListIndex`: *number*, `streamNumber`: *number*, `name`: *string*, `type`: [*AsfObjectDataType*](../enums/asfobjectdatatype.md), `value`: DescriptorValue): [*AsfMetadataDescriptor*](asfmetadatadescriptor.md) +• **new AsfMetadataDescriptor**(`languageListIndex`, `streamNumber`, `name`, `type`, `value`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`languageListIndex` | *number* | -`streamNumber` | *number* | -`name` | *string* | -`type` | [*AsfObjectDataType*](../enums/asfobjectdatatype.md) | -`value` | DescriptorValue | +| Name | Type | +| :------ | :------ | +| `languageListIndex` | `number` | +| `streamNumber` | `number` | +| `name` | `string` | +| `type` | [`AsfObjectDataType`](../enums/asfobjectdatatype.md) | +| `value` | `DescriptorValue` | -**Returns:** [*AsfMetadataDescriptor*](asfmetadatadescriptor.md) +#### Overrides + +DescriptorBase.constructor ## Properties ### \_boolValue -• `Protected` `Readonly` **\_boolValue**: *boolean* +• `Protected` `Readonly` **\_boolValue**: `boolean` + +#### Inherited from + +DescriptorBase.\_boolValue ___ ### \_byteValue -• `Protected` `Readonly` **\_byteValue**: [*ByteVector*](bytevector.md) +• `Protected` `Readonly` **\_byteValue**: [`ByteVector`](bytevector.md) + +#### Inherited from + +DescriptorBase.\_byteValue ___ ### \_dWordValue -• `Protected` `Readonly` **\_dWordValue**: *number* +• `Protected` `Readonly` **\_dWordValue**: `number` + +#### Inherited from + +DescriptorBase.\_dWordValue ___ ### \_guidValue -• `Protected` `Readonly` **\_guidValue**: *default* +• `Protected` `Readonly` **\_guidValue**: `default` + +#### Inherited from + +DescriptorBase.\_guidValue ___ ### \_name -• `Protected` `Readonly` **\_name**: *string* +• `Protected` `Readonly` **\_name**: `string` + +#### Inherited from + +DescriptorBase.\_name ___ ### \_qWordValue -• `Protected` `Readonly` **\_qWordValue**: *bigint* +• `Protected` `Readonly` **\_qWordValue**: `bigint` + +#### Inherited from + +DescriptorBase.\_qWordValue ___ ### \_stringValue -• `Protected` `Readonly` **\_stringValue**: *string* +• `Protected` `Readonly` **\_stringValue**: `string` + +#### Inherited from + +DescriptorBase.\_stringValue ___ ### \_type -• `Protected` `Readonly` **\_type**: [*AsfObjectDataType*](../enums/asfobjectdatatype.md) +• `Protected` `Readonly` **\_type**: [`AsfObjectDataType`](../enums/asfobjectdatatype.md) + +#### Inherited from + +DescriptorBase.\_type ___ ### \_wordValue -• `Protected` `Readonly` **\_wordValue**: *number* +• `Protected` `Readonly` **\_wordValue**: `number` + +#### Inherited from + +DescriptorBase.\_wordValue ## Accessors ### languageListIndex -• **languageListIndex**(): *number* +• `get` **languageListIndex**(): `number` Gets the index of the language associated with the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the current instance. -**Returns:** *string* +#### Returns + +`string` ___ ### streamNumber -• **streamNumber**(): *number* +• `get` **streamNumber**(): `number` Gets the index of the stream associated with the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### type -• **type**(): [*AsfObjectDataType*](../enums/asfobjectdatatype.md) +• `get` **type**(): [`AsfObjectDataType`](../enums/asfobjectdatatype.md) Gets the type of data contained in the current instance. -**Returns:** [*AsfObjectDataType*](../enums/asfobjectdatatype.md) +#### Returns + +[`AsfObjectDataType`](../enums/asfobjectdatatype.md) ## Methods ### getBool -▸ **getBool**(): *boolean* +▸ **getBool**(): `boolean` Gets the boolean value of the current instance. -**Returns:** *boolean* +#### Returns + +`boolean` boolean Boolean value of the current instance is returned if [type](asfmetadatadescriptor.md#type) is {@link DataType.Bool}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getBool + ___ ### getBytes -▸ **getBytes**(): [*ByteVector*](bytevector.md) +▸ **getBytes**(): [`ByteVector`](bytevector.md) Gets the binary contents of the current instance. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ByteVector Byte contents of the current instance, if [type](asfmetadatadescriptor.md#type) is {@link DataType.Bytes}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getBytes + ___ ### getGuid -▸ **getGuid**(): *default* +▸ **getGuid**(): `default` Gets the guid contents of the current instance. -**Returns:** *default* +#### Returns + +`default` UuidWrapper GUID contents of the current instance, if [type](asfmetadatadescriptor.md#type) is {@link DataType.Guid}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getGuid + ___ ### getString -▸ **getString**(): *string* +▸ **getString**(): `string` Gets the string contents of the current instance. -**Returns:** *string* +#### Returns + +`string` string String contents of the current instance if [type](asfmetadatadescriptor.md#type) is {@link DataType.Unicode}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getString + ___ ### getUint -▸ **getUint**(): *number* +▸ **getUint**(): `number` Gets the 32-bit double word contents of the current instance. -**Returns:** *number* +#### Returns + +`number` number Double word contents of the current instance, if [type](asfmetadatadescriptor.md#type) is {@link DataType.DWord}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getUint + ___ ### getUlong -▸ **getUlong**(): *bigint* +▸ **getUlong**(): `bigint` Gets the 64-bit quad word contents of the current instance. -**Returns:** *bigint* +#### Returns + +`bigint` bigint Quad word contents of the current instance, if [type](asfmetadatadescriptor.md#type) is {@link DataType.QWord}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getUlong + ___ ### getUshort -▸ **getUshort**(): *number* +▸ **getUshort**(): `number` Gets the 16-bit word contents of the current instance. -**Returns:** *number* +#### Returns + +`number` number Word contents of the current instance, if [type](asfmetadatadescriptor.md#type) is {@link DataType.Word}. `undefined` is returned otherwise. +#### Inherited from + +DescriptorBase.getUshort + ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Overrides + +DescriptorBase.render ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** *string* +`string` + +#### Inherited from + +DescriptorBase.toString ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md)): [*AsfMetadataDescriptor*](asfmetadatadescriptor.md) +▸ `Static` **fromFile**(`file`): [`AsfMetadataDescriptor`](asfmetadatadescriptor.md) Instantiates a new instance by reading in the contents from a file. -**`internal`** +**`internal`** + +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | The file to read the raw ASF description record from | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | The file to read the raw ASF description record from | +#### Returns -**Returns:** [*AsfMetadataDescriptor*](asfmetadatadescriptor.md) +[`AsfMetadataDescriptor`](asfmetadatadescriptor.md) diff --git a/docs/classes/asfmetadatalibraryobject.md b/docs/classes/asfmetadatalibraryobject.md index 87604ced..a694c6c8 100644 --- a/docs/classes/asfmetadatalibraryobject.md +++ b/docs/classes/asfmetadatalibraryobject.md @@ -7,9 +7,9 @@ and written to disk. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfMetadataLibraryObject** + ↳ **`AsfMetadataLibraryObject`** ## Table of contents @@ -38,21 +38,25 @@ and written to disk. ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Gets whether or not the current instance contains any records. -**Returns:** *boolean* +#### Returns + +`boolean` boolean `true` if the current instance does not contain any records, `false` otherwise. @@ -61,153 +65,189 @@ ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** ObjectType +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### records -• **records**(): [*AsfMetadataDescriptor*](asfmetadatadescriptor.md)[] +• `get` **records**(): [`AsfMetadataDescriptor`](asfmetadatadescriptor.md)[] Gets all records stored in the current instance. -**Returns:** [*AsfMetadataDescriptor*](asfmetadatadescriptor.md)[] +#### Returns + +[`AsfMetadataDescriptor`](asfmetadatadescriptor.md)[] ## Methods ### addRecord -▸ **addRecord**(`record`: [*AsfMetadataDescriptor*](asfmetadatadescriptor.md)): *void* +▸ **addRecord**(`record`): `void` Adds a record to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `record` | [`AsfMetadataDescriptor`](asfmetadatadescriptor.md) | Record to add to the current instance | -Name | Type | Description | ------- | ------ | ------ | -`record` | [*AsfMetadataDescriptor*](asfmetadatadescriptor.md) | Record to add to the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### getRecords -▸ **getRecords**(`languageListIndex`: *number*, `streamNumber`: *number*, ...`names`: *string*[]): [*AsfMetadataDescriptor*](asfmetadatadescriptor.md)[] +▸ **getRecords**(`languageListIndex`, `streamNumber`, ...`names`): [`AsfMetadataDescriptor`](asfmetadatadescriptor.md)[] Gets all records with a given language, stream, and any of a collection of names from the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`languageListIndex` | *number* | Index of the desired language in the language list | -`streamNumber` | *number* | Index of the stream in the file the desired records applies to | -`...names` | *string*[] | List of names of the records to return | +| Name | Type | Description | +| :------ | :------ | :------ | +| `languageListIndex` | `number` | Index of the desired language in the language list | +| `streamNumber` | `number` | Index of the stream in the file the desired records applies to | +| `...names` | `string`[] | List of names of the records to return | -**Returns:** [*AsfMetadataDescriptor*](asfmetadatadescriptor.md)[] +#### Returns + +[`AsfMetadataDescriptor`](asfmetadatadescriptor.md)[] ___ ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +`void` -**Returns:** *void* +#### Inherited from + +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +`void` -**Returns:** *void* +#### Inherited from + +BaseObject.initializeFromGuid ___ ### removeRecords -▸ **removeRecords**(`languageListIndex`: *number*, `streamNumber`: *number*, `name`: *string*): *void* +▸ **removeRecords**(`languageListIndex`, `streamNumber`, `name`): `void` Removes all records with a given language, stream, and name from the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `languageListIndex` | `number` | Language list index of the records to be removed | +| `streamNumber` | `number` | Index of the stream in the file the desired records to remove | +| `name` | `string` | Name of the records to remove | -Name | Type | Description | ------- | ------ | ------ | -`languageListIndex` | *number* | Language list index of the records to be removed | -`streamNumber` | *number* | Index of the stream in the file the desired records to remove | -`name` | *string* | Name of the records to remove | +#### Returns -**Returns:** *void* +`void` ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Overrides + +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +BaseObject.renderInternal ___ ### setRecords -▸ **setRecords**(`languageListIndex`: *number*, `streamNumber`: *number*, `name`: *string*, ...`records`: [*AsfMetadataDescriptor*](asfmetadatadescriptor.md)[]): *void* +▸ **setRecords**(`languageListIndex`, `streamNumber`, `name`, ...`records`): `void` Sets a collection of records for a given language, language, ane name, removing the existing records that match. @@ -218,38 +258,44 @@ records that match. arguments are only used for removing existing values and determining where to position the new records. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `languageListIndex` | `number` | Index of the desired language in the language list | +| `streamNumber` | `number` | Index of the stream in the file the desired records applies to | +| `name` | `string` | Names of the records to remove | +| `...records` | [`AsfMetadataDescriptor`](asfmetadatadescriptor.md)[] | Records to insert into the current instance | -Name | Type | Description | ------- | ------ | ------ | -`languageListIndex` | *number* | Index of the desired language in the language list | -`streamNumber` | *number* | Index of the stream in the file the desired records applies to | -`name` | *string* | Names of the records to remove | -`...records` | [*AsfMetadataDescriptor*](asfmetadatadescriptor.md)[] | Records to insert into the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*AsfMetadataLibraryObject*](asfmetadatalibraryobject.md) +▸ `Static` **fromEmpty**(): [`AsfMetadataLibraryObject`](asfmetadatalibraryobject.md) Constructs and initializes a new instance that does not contain any records. -**Returns:** [*AsfMetadataLibraryObject*](asfmetadatalibraryobject.md) +#### Returns + +[`AsfMetadataLibraryObject`](asfmetadatalibraryobject.md) ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfMetadataLibraryObject*](asfmetadatalibraryobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfMetadataLibraryObject`](asfmetadatalibraryobject.md) + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `file` | [`File`](file.md) | +| `position` | `number` | -Name | Type | ------- | ------ | -`file` | [*File*](file.md) | -`position` | *number* | +#### Returns -**Returns:** [*AsfMetadataLibraryObject*](asfmetadatalibraryobject.md) +[`AsfMetadataLibraryObject`](asfmetadatalibraryobject.md) diff --git a/docs/classes/asfpaddingobject.md b/docs/classes/asfpaddingobject.md index d270deba..34342a6f 100644 --- a/docs/classes/asfpaddingobject.md +++ b/docs/classes/asfpaddingobject.md @@ -7,9 +7,9 @@ written to disk. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfPaddingObject** + ↳ **`AsfPaddingObject`** ## Table of contents @@ -37,154 +37,192 @@ written to disk. ### HEADER\_LENGTH -▪ `Readonly` `Static` **HEADER\_LENGTH**: *24*= 24 +▪ `Static` `Readonly` **HEADER\_LENGTH**: ``24`` ## Accessors ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** ObjectType +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the number of bytes the current instance will take up on disk. Note: this does *not* include the header for the object. -**Returns:** *number* +#### Returns -• **size**(`value`: *number*): *void* +`number` + +• `set` **size**(`value`): `void` Sets the number of padding bytes the current instance will contain. Note: this does *not* include the header for the object. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Size of the current instance in bytes, must be a safe, positive integer. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Size of the current instance in bytes, must be a safe, positive integer. | +#### Returns -**Returns:** *void* +`void` ## Methods ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +`void` -**Returns:** *void* +#### Inherited from + +BaseObject.initializeFromGuid ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** + +#### Returns -**`inheritdoc`** +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Overrides + +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +BaseObject.renderInternal ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfPaddingObject*](asfpaddingobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfPaddingObject`](asfpaddingobject.md) Constructs and initializes a new instance by reading it from a file. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File to read the padding object from | -`position` | *number* | Index into the file where the padding object starts from | +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File to read the padding object from | +| `position` | `number` | Index into the file where the padding object starts from | -**Returns:** [*AsfPaddingObject*](asfpaddingobject.md) +#### Returns + +[`AsfPaddingObject`](asfpaddingobject.md) ___ ### fromSize -▸ `Static`**fromSize**(`size`: *number*): [*AsfPaddingObject*](asfpaddingobject.md) +▸ `Static` **fromSize**(`size`): [`AsfPaddingObject`](asfpaddingobject.md) Constructs and initializes a new instance with a fixed size. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `size` | `number` | Number of padding bytes to store in the object not including the size of the header | -Name | Type | Description | ------- | ------ | ------ | -`size` | *number* | Number of padding bytes to store in the object not including the size of the header | +#### Returns -**Returns:** [*AsfPaddingObject*](asfpaddingobject.md) +[`AsfPaddingObject`](asfpaddingobject.md) diff --git a/docs/classes/asfstreampropertiesobject.md b/docs/classes/asfstreampropertiesobject.md index 3f273230..848b1775 100644 --- a/docs/classes/asfstreampropertiesobject.md +++ b/docs/classes/asfstreampropertiesobject.md @@ -7,9 +7,9 @@ written to disk. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfStreamPropertiesObject** + ↳ **`AsfStreamPropertiesObject`** ## Table of contents @@ -39,37 +39,43 @@ written to disk. ### codec -• **codec**(): [*ICodec*](../interfaces/icodec.md) +• `get` **codec**(): [`ICodec`](../interfaces/icodec.md) Gets the codec information contained in the current instance. -**Returns:** [*ICodec*](../interfaces/icodec.md) +#### Returns + +[`ICodec`](../interfaces/icodec.md) ___ ### errorCorrectionData -• **errorCorrectionData**(): [*ByteVector*](bytevector.md) +• `get` **errorCorrectionData**(): [`ByteVector`](bytevector.md) Gets the error correction data contained in the current instance. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### errorCorrectionType -• **errorCorrectionType**(): *default* +• `get` **errorCorrectionType**(): `default` Gets the error correction type GUID of the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### flags -• **flags**(): *number* +• `get` **flags**(): `number` Gets the flags that apply to the current instance. @@ -79,157 +85,199 @@ Gets the flags that apply to the current instance. * Reserved - 8 bits * Encrypted content flag - 1 bit -**Returns:** *number* +#### Returns + +`number` ___ ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** ObjectType +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### streamNumber -• **streamNumber**(): *number* +• `get` **streamNumber**(): `number` Gets the stream number for the current instance. Zero is invalid. -**Returns:** *number* +#### Returns + +`number` ___ ### streamType -• **streamType**(): *default* +• `get` **streamType**(): `default` Gets the stream type GUID of the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### timeOffsetMilliseconds -• **timeOffsetMilliseconds**(): *number* +• `get` **timeOffsetMilliseconds**(): `number` Gets the time offset at which the stream described by the current instance begins. -**Returns:** *number* +#### Returns + +`number` ___ ### typeSpecificData -• **typeSpecificData**(): [*ByteVector*](bytevector.md) +• `get` **typeSpecificData**(): [`ByteVector`](bytevector.md) Gets the type specific data contained in the current instance. **`remarks`** The parsed version of this data is available in [codec](asfstreampropertiesobject.md#codec). -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ## Methods ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +BaseObject.initializeFromGuid ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Overrides + +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +BaseObject.renderInternal ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfStreamPropertiesObject*](asfstreampropertiesobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfStreamPropertiesObject`](asfstreampropertiesobject.md) Constructs and initializes a new instance by reading contents from a specified position in the provided file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File from which the contents of the new instance will be read | +| `position` | `number` | Index into the file where the stream properties object begins | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File from which the contents of the new instance will be read | -`position` | *number* | Index into the file where the stream properties object begins | +#### Returns -**Returns:** [*AsfStreamPropertiesObject*](asfstreampropertiesobject.md) +[`AsfStreamPropertiesObject`](asfstreampropertiesobject.md) diff --git a/docs/classes/asftag.md b/docs/classes/asftag.md index 3d0762d5..11d5f1fa 100644 --- a/docs/classes/asftag.md +++ b/docs/classes/asftag.md @@ -7,9 +7,9 @@ and written to disk. ## Hierarchy -* [*Tag*](tag.md) +- [`Tag`](tag.md) - ↳ **AsfTag** + ↳ **`AsfTag`** ## Table of contents @@ -106,38 +106,42 @@ and written to disk. ### album -• **album**(): *string* +• `get` **album**(): `string` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/AlbumTitle` or `Album` descriptors https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-albumtitle -**Returns:** *string* +#### Returns + +`string` Album of the media represented by the current instance or `undefined` if no value is present -• **album**(`value`: *string*): *void* +• `set` **album**(`value`): `void` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/AlbumTitle` or `Album` descriptors https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-albumtitle -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Album of the media represented by the current instance or `undefined` if no value is present @@ -146,37 +150,41 @@ ___ ### albumArtists -• **albumArtists**(): *string*[] +• `get` **albumArtists**(): `string`[] Gets the band or artist who is credited credited in the creation of the entire album or collection containing the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/AlbumArtist` or `AlbumArtist` descriptors -**Returns:** *string*[] +#### Returns + +`string`[] Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present -• **albumArtists**(`value`: *string*[]): *void* +• `set` **albumArtists**(`value`): `void` Gets the band or artist who is credited credited in the creation of the entire album or collection containing the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/AlbumArtist` or `AlbumArtist` descriptors -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is @@ -186,39 +194,43 @@ ___ ### albumArtistsSort -• **albumArtistsSort**(): *string*[] +• `get` **albumArtistsSort**(): `string`[] Gets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/AlbumArtistSortOrder` descriptor http://msdn.microsoft.com/en-us/library/aa386866(VS.85).aspx -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. -• **albumArtistsSort**(`value`: *string*[]): *void* +• `set` **albumArtistsSort**(`value`): `void` Gets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/AlbumArtistSortOrder` descriptor http://msdn.microsoft.com/en-us/library/aa386866(VS.85).aspx -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty @@ -228,34 +240,38 @@ ___ ### albumSort -• **albumSort**(): *string* +• `get` **albumSort**(): `string` Gets the sortable name of the album title of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/AlbumSortOrder` descriptors -**Returns:** *string* +#### Returns + +`string` Sortable name for the album title of the media or `undefined` if the value is not present -• **albumSort**(`value`: *string*): *void* +• `set` **albumSort**(`value`): `void` Gets the sortable name of the album title of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/AlbumSortOrder` descriptors -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Sortable name for the album title of the media or `undefined` if the value is not present @@ -264,32 +280,36 @@ ___ ### amazonId -• **amazonId**(): *string* +• `get` **amazonId**(): `string` Gets the Amazon ID of the media represented by the current instance. **`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely identify the particular track or album in the Amazon catalog. -**Returns:** *string* +#### Returns + +`string` Amazon ID of the media represented by the current instance or `undefined` if no value is present -• **amazonId**(`value`: *string*): *void* +• `set` **amazonId**(`value`): `void` Sets the Amazon ID of the media represented by the current instance. **`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely identify the particular track or album in the Amazon catalog. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Amazon ID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Amazon ID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` Amazon ID of the media represented by the current instance or `undefined` if no value is present @@ -298,38 +318,42 @@ ___ ### beatsPerMinute -• **beatsPerMinute**(): *number* +• `get` **beatsPerMinute**(): `number` Gets the number of beats per minute in the audio of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/BeatsPerMinute` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-beatsperminute -**Returns:** *number* +#### Returns + +`number` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified -• **beatsPerMinute**(`value`: *number*): *void* +• `set` **beatsPerMinute**(`value`): `void` Gets the number of beats per minute in the audio of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/BeatsPerMinute` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-beatsperminute -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified @@ -338,40 +362,44 @@ ___ ### comment -• **comment**(): *string* +• `get` **comment**(): `string` Gets a user comment on the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Text` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-text It should be noted that many applications store comments in the field read by [description](asftag.md#description). -**Returns:** *string* +#### Returns + +`string` User comments on the media represented by the current instance or `undefined` if the value is not present -• **comment**(`value`: *string*): *void* +• `set` **comment**(`value`): `void` Gets a user comment on the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Text` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-text It should be noted that many applications store comments in the field read by [description](asftag.md#description). -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` User comments on the media represented by the current instance or `undefined` if the value is not present @@ -380,36 +408,40 @@ ___ ### composers -• **composers**(): *string*[] +• `get` **composers**(): `string`[] Gets the composers of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Composer` or `Composer` descriptors https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-composer -**Returns:** *string*[] +#### Returns + +`string`[] Composers of the media represented by the current instance of an empty array if no value is present. -• **composers**(`value`: *string*[]): *void* +• `set` **composers**(`value`): `void` Gets the composers of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Composer` or `Composer` descriptors https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-composer -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Composers of the media represented by the current instance of an empty array if no value is present. @@ -418,7 +450,7 @@ ___ ### composersSort -• **composersSort**(): *string*[] +• `get` **composersSort**(): `string`[] Gets the sortable names of the composers of the media represented by the current instance. @@ -427,12 +459,14 @@ Gets the sortable names of the composers of the media represented by the current **`remarks`** This field is typically optional but aids in the sorting of compilations or albums with multiple composers. -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. -• **composersSort**(`value`: *string*[]): *void* +• `set` **composersSort**(`value`): `void` Sets the sortable names of the composers of the media represented by the current instance. @@ -441,13 +475,15 @@ Sets the sortable names of the composers of the media represented by the current **`remarks`** This field is typically optional but aids in the sorting of compilations or albums with multiple composers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. @@ -456,36 +492,40 @@ ___ ### conductor -• **conductor**(): *string* +• `get` **conductor**(): `string` Gets the conductor or director of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Conductor` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-conductor -**Returns:** *string* +#### Returns + +`string` Conductor or director of the media represented by the current instance or `undefined` if no value present. -• **conductor**(`value`: *string*): *void* +• `set` **conductor**(`value`): `void` Gets the conductor or director of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Conductor` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-conductor -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Conductor or director of the media represented by the current instance or `undefined` if no value present. @@ -494,44 +534,50 @@ ___ ### contentDescriptionObject -• **contentDescriptionObject**(): [*AsfContentDescriptionObject*](asfcontentdescriptionobject.md) +• `get` **contentDescriptionObject**(): [`AsfContentDescriptionObject`](asfcontentdescriptionobject.md) Gets the ASF content description object used by the current instance. -**Returns:** [*AsfContentDescriptionObject*](asfcontentdescriptionobject.md) +#### Returns + +[`AsfContentDescriptionObject`](asfcontentdescriptionobject.md) ___ ### copyright -• **copyright**(): *string* +• `get` **copyright**(): `string` Gets the copyright information for the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via {@link ContentDescriptionObject.copyright} -**Returns:** *string* +#### Returns + +`string` Copyright information for the media represented by the current instance or `undefined` if no value is present. -• **copyright**(`value`: *string*): *void* +• `set` **copyright**(`value`): `void` Gets the copyright information for the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via {@link ContentDescriptionObject.copyright} -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Copyright information for the media represented by the current instance or `undefined` if no value is present. @@ -540,25 +586,29 @@ ___ ### dateTagged -• **dateTagged**(): Date +• `get` **dateTagged**(): `Date` Gets the date and time at which the tag has been written. -**Returns:** Date +#### Returns + +`Date` Date/time at which the tag has been written, or `undefined` if no value is present -• **dateTagged**(`value`: Date): *void* +• `set` **dateTagged**(`value`): `void` Sets the date and time at which the tag has been written. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `Date` | Date/time at which the tag has been written, or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | Date | Date/time at which the tag has been written, or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Date/time at which the tag has been written, or `undefined` if no value is present @@ -566,40 +616,44 @@ ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but generally no spoliers. This should give the impression of what to expect in the media. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via {@link ContentDescriptor.description} Some applications will use this field for storing comments. -**Returns:** *string* +#### Returns + +`string` Description of the media represented by the current instance or `undefined` if no value is present -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Gets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but generally no spoliers. This should give the impression of what to expect in the media. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via {@link ContentDescriptor.description} Some applications will use this field for storing comments. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Description of the media represented by the current instance or `undefined` if no value is present @@ -608,38 +662,42 @@ ___ ### disc -• **disc**(): *number* +• `get` **disc**(): `number` Gets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/PartOfSet` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-partofset -**Returns:** *number* +#### Returns + +`number` Number of the disc or season of the media represented by the current instance in a boxed set. -• **disc**(`value`: *number*): *void* +• `set` **disc**(`value`): `void` Gets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/PartOfSet` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-partofset -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Number of the disc or season of the media represented by the current instance in a boxed set. @@ -648,38 +706,42 @@ ___ ### discCount -• **discCount**(): *number* +• `get` **discCount**(): `number` Gets the number of discs or seasons in the boxed set containing the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/PartOfSet` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-partofset -**Returns:** *number* +#### Returns + +`number` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. -• **discCount**(`value`: *number*): *void* +• `set` **discCount**(`value`): `void` Gets the number of discs or seasons in the boxed set containing the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/PartOfSet` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-partofset -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. @@ -688,118 +750,138 @@ ___ ### extendedContentDescriptionObject -• **extendedContentDescriptionObject**(): [*AsfExtendedContentDescriptionObject*](asfextendedcontentdescriptionobject.md) +• `get` **extendedContentDescriptionObject**(): [`AsfExtendedContentDescriptionObject`](asfextendedcontentdescriptionobject.md) Gets the ASF extended content description used by the current instance. -**Returns:** [*AsfExtendedContentDescriptionObject*](asfextendedcontentdescriptionobject.md) +#### Returns + +[`AsfExtendedContentDescriptionObject`](asfextendedcontentdescriptionobject.md) ___ ### firstAlbumArtist -• **firstAlbumArtist**(): *string* +• `get` **firstAlbumArtist**(): `string` Gets the the first value contained in [albumArtists](asftag.md#albumartists). -**Returns:** *string* +#### Returns + +`string` ___ ### firstAlbumArtistSort -• **firstAlbumArtistSort**(): *string* +• `get` **firstAlbumArtistSort**(): `string` Gets the first value contained in [albumArtistsSort](asftag.md#albumartistssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposer -• **firstComposer**(): *string* +• `get` **firstComposer**(): `string` Gets the first value contained in [composers](asftag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposerSort -• **firstComposerSort**(): *string* +• `get` **firstComposerSort**(): `string` Gets the first value contained in [composersSort](asftag.md#composerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstGenre -• **firstGenre**(): *string* +• `get` **firstGenre**(): `string` Gets the first value contained in [genres](asftag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformer -• **firstPerformer**(): *string* +• `get` **firstPerformer**(): `string` Gets the first value contained in [performers](asftag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformerSort -• **firstPerformerSort**(): *string* +• `get` **firstPerformerSort**(): `string` Gets the first value contained in [performersSort](asftag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### genres -• **genres**(): *string*[] +• `get` **genres**(): `string`[] Gets the genres of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Genre`, `WM/GenreID`, or `Genre` descriptors https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-genre https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-genreid -**Returns:** *string*[] +#### Returns + +`string`[] Genres of the media represented by the current instance or an empty array if no value is present. -• **genres**(`value`: *string*[]): *void* +• `set` **genres**(`value`): `void` Gets the genres of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Genre`, `WM/GenreID`, or `Genre` descriptors https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-genre https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-genreid -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Genres of the media represented by the current instance or an empty array if no value is present. @@ -808,36 +890,40 @@ ___ ### grouping -• **grouping**(): *string* +• `get` **grouping**(): `string` Gets the grouping on the album which the media in the current instance belongs to. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/ContentGroupDescription` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-contentgroupdescription -**Returns:** *string* +#### Returns + +`string` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. -• **grouping**(`value`: *string*): *void* +• `set` **grouping**(`value`): `void` Gets the grouping on the album which the media in the current instance belongs to. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/ContentGroupDescription` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-contentgroupdescription -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. @@ -846,25 +932,29 @@ ___ ### initialKey -• **initialKey**(): *string* +• `get` **initialKey**(): `string` Gets the initial key of the track. -**Returns:** *string* +#### Returns + +`string` Initial key of the track or `undefined` if no value is set -• **initialKey**(`value`: *string*): *void* +• `set` **initialKey**(`value`): `void` Sets the initial key of the track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Initial key of the track or `undefined` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Initial key of the track or `undefined` if no value is set | -**Returns:** *void* +#### Returns + +`void` Initial key of the track or `undefined` if no value is set @@ -872,13 +962,15 @@ ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Gets whether or not the current instance is empty. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** *boolean* +`boolean` `true` if the current instance does not contain any values. `false` otherwise @@ -886,25 +978,29 @@ ___ ### isrc -• **isrc**(): *string* +• `get` **isrc**(): `string` Gets the ISRC (International Standard Recording Code) of the track. -**Returns:** *string* +#### Returns + +`string` the ISRC of the track or `undefined` if no value is set -• **isrc**(`value`: *string*): *void* +• `set` **isrc**(`value`): `void` Sets the ISRC (International Standard Recording Code) of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | the ISRC of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | the ISRC of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` the ISRC of the track or `undefined` if no value is set @@ -912,86 +1008,100 @@ ___ ### joinedAlbumArtists -• **joinedAlbumArtists**(): *string* +• `get` **joinedAlbumArtists**(): `string` Gets a semicolon and space separated string containing the values in [albumArtists](asftag.md#albumartists) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedComposers -• **joinedComposers**(): *string* +• `get` **joinedComposers**(): `string` Gets a semicolon and space separated string containing the values in [composers](asftag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedGenres -• **joinedGenres**(): *string* +• `get` **joinedGenres**(): `string` Gets a semicolon and space separated string containing the values in [genres](asftag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformers -• **joinedPerformers**(): *string* +• `get` **joinedPerformers**(): `string` Gets a semicolon and space separated string containing the values in [performers](asftag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformersSort -• **joinedPerformersSort**(): *string* +• `get` **joinedPerformersSort**(): `string` Gets a semicolon and space separated string containing the values in [performersSort](asftag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### lyrics -• **lyrics**(): *string* +• `get` **lyrics**(): `string` Gets the lyrics or script of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Lyrics` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-lyrics -**Returns:** *string* +#### Returns + +`string` Lyrics or script of the media represented by the current instance or `undefined` if no value is present -• **lyrics**(`value`: *string*): *void* +• `set` **lyrics**(`value`): `void` Gets the lyrics or script of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Lyrics` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-lyrics -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Lyrics or script of the media represented by the current instance or `undefined` if no value is present @@ -1000,70 +1110,80 @@ ___ ### metadataLibraryObject -• **metadataLibraryObject**(): [*AsfMetadataLibraryObject*](asfmetadatalibraryobject.md) +• `get` **metadataLibraryObject**(): [`AsfMetadataLibraryObject`](asfmetadatalibraryobject.md) Gets the ASF metadata library object used by the current instance. -**Returns:** [*AsfMetadataLibraryObject*](asfmetadatalibraryobject.md) +#### Returns + +[`AsfMetadataLibraryObject`](asfmetadatalibraryobject.md) ___ ### musicBrainzAlbumArtistId -• **musicBrainzAlbumArtistId**(): *string* +• `get` **musicBrainzAlbumArtistId**(): `string` -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Artist Id` descriptor -**Returns:** *string* +#### Returns + +`string` -• **musicBrainzAlbumArtistId**(`value`: *string*): *void* +• `set` **musicBrainzAlbumArtistId**(`value`): `void` -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Artist Id` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### musicBrainzArtistId -• **musicBrainzArtistId**(): *string* +• `get` **musicBrainzArtistId**(): `string` Gets the MusicBrainz artist ID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Artist Id` descriptor -**Returns:** *string* +#### Returns + +`string` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzArtistId**(`value`: *string*): *void* +• `set` **musicBrainzArtistId**(`value`): `void` Gets the MusicBrainz artist ID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Artist Id` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present @@ -1072,34 +1192,38 @@ ___ ### musicBrainzDiscId -• **musicBrainzDiscId**(): *string* +• `get` **musicBrainzDiscId**(): `string` Gets the MusicBrainz disc ID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Disc Id` descriptor -**Returns:** *string* +#### Returns + +`string` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzDiscId**(`value`: *string*): *void* +• `set` **musicBrainzDiscId**(`value`): `void` Gets the MusicBrainz disc ID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Disc Id` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present @@ -1108,32 +1232,36 @@ ___ ### musicBrainzReleaseArtistId -• **musicBrainzReleaseArtistId**(): *string* +• `get` **musicBrainzReleaseArtistId**(): `string` Gets the MusicBrainz release artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely identify a particular album artist credited with the album. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseArtistId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseArtistId**(`value`): `void` Sets the MusicBrainz release artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely identify a particular album artist credited with the album. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present @@ -1142,34 +1270,38 @@ ___ ### musicBrainzReleaseCountry -• **musicBrainzReleaseCountry**(): *string* +• `get` **musicBrainzReleaseCountry**(): `string` Gets the MusicBrainz release country of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Release Country` descriptor -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseCountry**(`value`: *string*): *void* +• `set` **musicBrainzReleaseCountry**(`value`): `void` Gets the MusicBrainz release country of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Release Country` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present @@ -1178,34 +1310,38 @@ ___ ### musicBrainzReleaseGroupId -• **musicBrainzReleaseGroupId**(): *string* +• `get` **musicBrainzReleaseGroupId**(): `string` Gets the MusicBrainz release group ID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Release Group Id` descriptor -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseGroupId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseGroupId**(`value`): `void` Gets the MusicBrainz release group ID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Release Group Id` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present @@ -1214,34 +1350,38 @@ ___ ### musicBrainzReleaseId -• **musicBrainzReleaseId**(): *string* +• `get` **musicBrainzReleaseId**(): `string` Gets the MusicBrainz release ID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Id` descriptor -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseId**(`value`): `void` Gets the MusicBrainz release ID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Id` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present @@ -1250,34 +1390,38 @@ ___ ### musicBrainzReleaseStatus -• **musicBrainzReleaseStatus**(): *string* +• `get` **musicBrainzReleaseStatus**(): `string` Gets the MusicBrainz release status of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Status` descriptor -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseStatus**(`value`: *string*): *void* +• `set` **musicBrainzReleaseStatus**(`value`): `void` Gets the MusicBrainz release status of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Status` descriptor -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present @@ -1286,34 +1430,38 @@ ___ ### musicBrainzReleaseType -• **musicBrainzReleaseType**(): *string* +• `get` **musicBrainzReleaseType**(): `string` Gets the MusicBrainz release type of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Type` descriptor -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseType**(`value`: *string*): *void* +• `set` **musicBrainzReleaseType**(`value`): `void` Gets the MusicBrainz release type of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Album Type` descriptor -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present @@ -1322,36 +1470,40 @@ ___ ### musicBrainzTrackId -• **musicBrainzTrackId**(): *string* +• `get` **musicBrainzTrackId**(): `string` Gets the MusicBrainz track ID of the media represented by the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Track Id` descriptor -**Returns:** *string* +#### Returns + +`string` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzTrackId**(`value`: *string*): *void* +• `set` **musicBrainzTrackId**(`value`): `void` Gets the MusicBrainz track ID of the media represented by the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicBrainz/Track Id` descriptor -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present @@ -1360,34 +1512,38 @@ ___ ### musicIpId -• **musicIpId**(): *string* +• `get` **musicIpId**(): `string` Gets the MusicIP PUID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicIP/PUID` descriptor -**Returns:** *string* +#### Returns + +`string` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present -• **musicIpId**(`value`: *string*): *void* +• `set` **musicIpId**(`value`): `void` Gets the MusicIP PUID of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `MusicIP/PUID` descriptor -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present @@ -1396,34 +1552,38 @@ ___ ### performers -• **performers**(): *string*[] +• `get` **performers**(): `string`[] Gets the performers or artists who performed in the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via {@link ContentDescriptor.author} -**Returns:** *string*[] +#### Returns + +`string`[] Performers who performed in the media described by the current instance or an empty array if no value is present. -• **performers**(`value`: *string*[]): *void* +• `set` **performers**(`value`): `void` Gets the performers or artists who performed in the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via {@link ContentDescriptor.author} -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Performers who performed in the media described by the current instance or an empty array if no value is present. @@ -1432,7 +1592,7 @@ ___ ### performersRole -• **performersRole**(): *string*[] +• `get` **performersRole**(): `string`[] Gets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](asftag.md#performers) array (for each person, correspond one/more @@ -1443,12 +1603,14 @@ example: "Bass; Backing Vocals; Vibraphone". in the [performersRole](asftag.md#performersrole) array is `undefined` to maintain the relationship between `performers[i]` and `performersRole[i]`. -**Returns:** *string*[] +#### Returns + +`string`[] Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. -• **performersRole**(`value`: *string*[]): *void* +• `set` **performersRole**(`value`): `void` Sets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](asftag.md#performers) array (for each person, correspond one/more @@ -1459,13 +1621,15 @@ example: "Bass; Backing Vocals; Vibraphone". in the [performersRole](asftag.md#performersrole) array is `undefined` to maintain the relationship between `performers[i]` and `performersRole[i]`. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. @@ -1474,38 +1638,42 @@ ___ ### performersSort -• **performersSort**(): *string*[] +• `get` **performersSort**(): `string`[] Gets the sortable names of the performers or artists who performed in the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via "WM/ArtistSortOrder" descriptor http://msdn.microsoft.com/en-us/library/aa386866(VS.85).aspx -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. -• **performersSort**(`value`: *string*[]): *void* +• `set` **performersSort**(`value`): `void` Gets the sortable names of the performers or artists who performed in the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via "WM/ArtistSortOrder" descriptor http://msdn.microsoft.com/en-us/library/aa386866(VS.85).aspx -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. @@ -1514,37 +1682,41 @@ ___ ### pictures -• **pictures**(): [*IPicture*](../interfaces/ipicture.md)[] +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] Gets a collection of pictures associated with the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via the `WM/Picture` content descriptor and description record. https://docs.microsoft.com/en-us/windows/win32/wmformat/wmpicture Modifications to the returned array will not stored. -**Returns:** [*IPicture*](../interfaces/ipicture.md)[] +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. -• **pictures**(`value`: [*IPicture*](../interfaces/ipicture.md)[]): *void* +• `set` **pictures**(`value`): `void` Gets a collection of pictures associated with the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via the `WM/Picture` content descriptor and description record. https://docs.microsoft.com/en-us/windows/win32/wmformat/wmpicture -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | -Name | Type | ------- | ------ | -`value` | [*IPicture*](../interfaces/ipicture.md)[] | +#### Returns -**Returns:** *void* +`void` Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. @@ -1553,25 +1725,29 @@ ___ ### publisher -• **publisher**(): *string* +• `get` **publisher**(): `string` Gets the publisher of the track. -**Returns:** *string* +#### Returns + +`string` Publisher of the track or `undefined` if no value is set -• **publisher**(`value`: *string*): *void* +• `set` **publisher**(`value`): `void` Sets the publisher of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Publisher of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Publisher of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` Publisher of the track or `undefined` if no value is set @@ -1579,25 +1755,29 @@ ___ ### remixedBy -• **remixedBy**(): *string* +• `get` **remixedBy**(): `string` Gets the remixer of the track. -**Returns:** *string* +#### Returns + +`string` Remixer of the track or `undefined` if no value is set -• **remixedBy**(`value`: *string*): *void* +• `set` **remixedBy**(`value`): `void` Sets the remixer of the track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Remixer of the track or `undefined` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Remixer of the track or `undefined` if no value is set | -**Returns:** *void* +#### Returns + +`void` Remixer of the track or `undefined` if no value is set @@ -1605,33 +1785,37 @@ ___ ### replayGainAlbumGain -• **replayGainAlbumGain**(): *number* +• `get` **replayGainAlbumGain**(): `number` Gets the ReplayGain album gain in dB. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `ReplayGain/Album` descriptor -**Returns:** *number* +#### Returns + +`number` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainAlbumGain**(`value`: *number*): *void* +• `set` **replayGainAlbumGain**(`value`): `void` Gets the ReplayGain album gain in dB. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `ReplayGain/Album` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1639,33 +1823,37 @@ ___ ### replayGainAlbumPeak -• **replayGainAlbumPeak**(): *number* +• `get` **replayGainAlbumPeak**(): `number` Gets the ReplayGain album peak sample. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `ReplayGain/Album Peak` descriptor -**Returns:** *number* +#### Returns + +`number` Album peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainAlbumPeak**(`value`: *number*): *void* +• `set` **replayGainAlbumPeak**(`value`): `void` Gets the ReplayGain album peak sample. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `ReplayGain/Album Peak` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Album peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1673,33 +1861,37 @@ ___ ### replayGainTrackGain -• **replayGainTrackGain**(): *number* +• `get` **replayGainTrackGain**(): `number` Gets the ReplayGain track gain in dB. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `ReplayGain/Track` descriptor -**Returns:** *number* +#### Returns + +`number` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainTrackGain**(`value`: *number*): *void* +• `set` **replayGainTrackGain**(`value`): `void` Gets the ReplayGain track gain in dB. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `ReplayGain/Track` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1707,33 +1899,37 @@ ___ ### replayGainTrackPeak -• **replayGainTrackPeak**(): *number* +• `get` **replayGainTrackPeak**(): `number` Gets the ReplayGain track peak sample. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `ReplayGain/Track Peak` descriptor -**Returns:** *number* +#### Returns + +`number` Track peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainTrackPeak**(`value`: *number*): *void* +• `set` **replayGainTrackPeak**(`value`): `void` Gets the ReplayGain track peak sample. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `ReplayGain/Track Peak` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Track peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1741,36 +1937,40 @@ ___ ### subtitle -• **subtitle**(): *string* +• `get` **subtitle**(): `string` Gets a description, one-line. It represents the tagline of the vide/music. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/SubTitle` descriptor https://msdn.microsoft.com/en-us/library/windows/desktop/dd757997(v=vs.85).aspx -**Returns:** *string* +#### Returns + +`string` Subtitle of the media represented by the current instance or `undefined` if no value is present -• **subtitle**(`value`: *string*): *void* +• `set` **subtitle**(`value`): `void` Gets a description, one-line. It represents the tagline of the vide/music. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/SubTitle` descriptor https://msdn.microsoft.com/en-us/library/windows/desktop/dd757997(v=vs.85).aspx -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Subtitle of the media represented by the current instance or `undefined` if no value is present @@ -1779,45 +1979,51 @@ ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. A bit wise combined [TagTypes](../enums/tagtypes.md) containing the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### title -• **title**(): *string* +• `get` **title**(): `string` Gets the title for the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via content description object -**Returns:** *string* +#### Returns + +`string` Title of the media described by the current instance or `undefined` if no value is present. -• **title**(`value`: *string*): *void* +• `set` **title**(`value`): `void` Gets the title for the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via content description object -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Title of the media described by the current instance or `undefined` if no value is present. @@ -1826,36 +2032,40 @@ ___ ### titleSort -• **titleSort**(): *string* +• `get` **titleSort**(): `string` Gets the sortable name for the title of the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via "WM/TitleSortOrder" http://msdn.microsoft.com/en-us/library/aa386866(VS.85).aspx -**Returns:** *string* +#### Returns + +`string` Sortable name of the media described by the current instance or `undefined` if no value is present -• **titleSort**(`value`: *string*): *void* +• `set` **titleSort**(`value`): `void` Gets the sortable name for the title of the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via "WM/TitleSortOrder" http://msdn.microsoft.com/en-us/library/aa386866(VS.85).aspx -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Sortable name of the media described by the current instance or `undefined` if no value is present @@ -1864,38 +2074,42 @@ ___ ### track -• **track**(): *number* +• `get` **track**(): `number` Gets the position of the media represented by the current instance in its containing album or season (for a series). -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/TrackNumber` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-tracknumber -**Returns:** *number* +#### Returns + +`number` Position of the media represented by the current instance in its containing album or `0` if not specified. -• **track**(`value`: *number*): *void* +• `set` **track**(`value`): `void` Gets the position of the media represented by the current instance in its containing album or season (for a series). -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/TrackNumber` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-tracknumber -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Position of the media represented by the current instance in its containing album or `0` if not specified. @@ -1904,36 +2118,40 @@ ___ ### trackCount -• **trackCount**(): *number* +• `get` **trackCount**(): `number` Gets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `TrackTotal` descriptor -**Returns:** *number* +#### Returns + +`number` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. -• **trackCount**(`value`: *number*): *void* +• `set` **trackCount**(`value`): `void` Gets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `TrackTotal` descriptor -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. @@ -1942,36 +2160,40 @@ ___ ### year -• **year**(): *number* +• `get` **year**(): `number` Gets the year that the media represented by the current instance was recorded. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Year` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-year -**Returns:** *number* +#### Returns + +`number` Year that the media represented by the current instance was created or `0` if no value is present. -• **year**(`value`: *number*): *void* +• `set` **year**(`value`): `void` Gets the year that the media represented by the current instance was recorded. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** via `WM/Year` descriptor https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-year -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Year that the media represented by the current instance was created or `0` if no value is present. @@ -1980,35 +2202,43 @@ Year that the media represented by the current instance was created or `0` if no ### addDescriptor -▸ **addDescriptor**(`descriptor`: [*AsfContentDescriptor*](asfcontentdescriptor.md)): *void* +▸ **addDescriptor**(`descriptor`): `void` Adds a descriptor to the current instance's extended content description object. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `descriptor` | [`AsfContentDescriptor`](asfcontentdescriptor.md) | Content descriptor to add to the current instance. Must be truthy | -Name | Type | Description | ------- | ------ | ------ | -`descriptor` | [*AsfContentDescriptor*](asfcontentdescriptor.md) | Content descriptor to add to the current instance. Must be truthy | +#### Returns -**Returns:** *void* +`void` ___ ### clear -▸ **clear**(): *void* +▸ **clear**(): `void` -**`inheritdoc`** +Clears all values stored in the current instance. -**Returns:** *void* +**`remarks`** The clearing procedure is format specific and should clear all values. -Overrides: [Tag](tag.md) +#### Returns + +`void` + +#### Overrides + +[Tag](tag.md).[clear](tag.md#clear) ___ ### copyTo -▸ **copyTo**(`target`: [*Tag*](tag.md), `overwrite`: *boolean*): *void* +▸ **copyTo**(`target`, `overwrite`): `void` Copies the values from the current instance to another [Tag](tag.md), optionally overwriting existing values. @@ -2018,33 +2248,39 @@ Copies the values from the current instance to another [Tag](tag.md), optionally more advanced copying may be done. For example if both `this` and `target` are [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | -Name | Type | Description | ------- | ------ | ------ | -`target` | [*Tag*](tag.md) | Target tag to copy values to | -`overwrite` | *boolean* | Whether or not to copy values over existing ones | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[copyTo](tag.md#copyto) ___ ### getDescriptorString -▸ **getDescriptorString**(...`names`: *string*[]): *string* +▸ **getDescriptorString**(...`names`): `string` Gets the string contained in a specific descriptor from the extended content description object in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `...names` | `string`[] | Names of the descriptors to look for | -Name | Type | Description | ------- | ------ | ------ | -`...names` | *string*[] | Names of the descriptors to look for | +#### Returns -**Returns:** *string* +`string` string The contents of the first descriptor found who's name is in the provided collection of descriptor names @@ -2053,18 +2289,20 @@ ___ ### getDescriptorStrings -▸ **getDescriptorStrings**(...`names`: *string*[]): *string*[] +▸ **getDescriptorStrings**(...`names`): `string`[] Gets the strings contained in a specific descriptor from the extended content description object in the current instance, as split by `;`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`...names` | *string*[] | Names of the descriptors to look for | +| Name | Type | Description | +| :------ | :------ | :------ | +| `...names` | `string`[] | Names of the descriptors to look for | -**Returns:** *string*[] +#### Returns + +`string`[] string The contents of the first descriptor found who's name is in the provided collection of descriptor names, split by `;` @@ -2073,75 +2311,83 @@ ___ ### getDescriptorUint -▸ **getDescriptorUint**(...`names`: *string*[]): *number* +▸ **getDescriptorUint**(...`names`): `number` + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `...names` | `string`[] | -Name | Type | ------- | ------ | -`...names` | *string*[] | +#### Returns -**Returns:** *number* +`number` ___ ### getDescriptors -▸ **getDescriptors**(...`names`: *string*[]): [*AsfContentDescriptor*](asfcontentdescriptor.md)[] +▸ **getDescriptors**(...`names`): [`AsfContentDescriptor`](asfcontentdescriptor.md)[] Gets all descriptors in the extended description object with names matching any of the names in the provided collection of names. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`...names` | *string*[] | Collection of names to search the extended description object for | +| Name | Type | Description | +| :------ | :------ | :------ | +| `...names` | `string`[] | Collection of names to search the extended description object for | -**Returns:** [*AsfContentDescriptor*](asfcontentdescriptor.md)[] +#### Returns + +[`AsfContentDescriptor`](asfcontentdescriptor.md)[] ___ ### removeDescriptors -▸ **removeDescriptors**(`name`: *string*): *void* +▸ **removeDescriptors**(`name`): `void` Removes all descriptors with a specified name from the extended content description object in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `name` | `string` | Name of the descriptor to remove rom the current instance | -Name | Type | Description | ------- | ------ | ------ | -`name` | *string* | Name of the descriptor to remove rom the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### setDescriptorString -▸ **setDescriptorString**(`value`: *string*, ...`names`: *string*[]): *void* +▸ **setDescriptorString**(`value`, ...`names`): `void` Sets the string for a collection of descriptors in the current instance. **`remarks`** The value will be stored in the first value in `names` and the rest of the descriptors with the matching names will be cleared. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Value to store or `undefined` to clear the value | +| `...names` | `string`[] | Names in which the value would be expected. For example, "WM/AlbumTitle" and "Album" | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Value to store or `undefined` to clear the value | -`...names` | *string*[] | Names in which the value would be expected. For example, "WM/AlbumTitle" and "Album" | +#### Returns -**Returns:** *void* +`void` ___ ### setDescriptorStrings -▸ **setDescriptorStrings**(`value`: *string*[], ...`names`: *string*[]): *void* +▸ **setDescriptorStrings**(`value`, ...`names`): `void` Sets the strings for a collection of descriptors in the current instance. The strings will be stored as a single string, joined together with `; `. @@ -2149,20 +2395,22 @@ be stored as a single string, joined together with `; `. **`remarks`** The value will be stored in the first value in `names` and the rest of the descriptors with the matching names will be cleared. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Value to store or `undefined` to clear the value | -`...names` | *string*[] | Names in which the value would be expected. For example, "WM/AlbumTitle" and "Album" | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Value to store or `undefined` to clear the value | +| `...names` | `string`[] | Names in which the value would be expected. For example, "WM/AlbumTitle" and "Album" | -**Returns:** *void* +#### Returns + +`void` ___ ### setDescriptors -▸ **setDescriptors**(`name`: *string*, ...`descriptors`: [*AsfContentDescriptor*](asfcontentdescriptor.md)[]): *void* +▸ **setDescriptors**(`name`, ...`descriptors`): `void` Sets a collection of descriptors in the extended content description object for a given name, removing the existing matching records. @@ -2172,148 +2420,174 @@ name, removing the existing matching records. one provided as an argument, which is only used for removing existing values and determining where to position the new descriptors. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `name` | `string` | Name of the descriptors to be added/removed | +| `...descriptors` | [`AsfContentDescriptor`](asfcontentdescriptor.md)[] | Descriptors to add to the new instance | -Name | Type | Description | ------- | ------ | ------ | -`name` | *string* | Name of the descriptors to be added/removed | -`...descriptors` | [*AsfContentDescriptor*](asfcontentdescriptor.md)[] | Descriptors to add to the new instance | +#### Returns -**Returns:** *void* +`void` ___ ### setInfoTag -▸ **setInfoTag**(): *void* +▸ **setInfoTag**(): `void` Set the tags that represent the tagger software (node-taglib-sharp) itself. **`remarks`** This is typically a method to call just before saving a tag. -**Returns:** *void* +#### Returns -Inherited from: [Tag](tag.md) +`void` + +#### Inherited from + +[Tag](tag.md).[setInfoTag](tag.md#setinfotag) ___ ### firstInGroup -▸ `Protected` `Static`**firstInGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **firstInGroup**(`group`): `string` Gets the first string in an array. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of strings to get the first string from. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | -**Returns:** *string* +#### Returns + +`string` First string contained in `group` or `undefined` if the array is `undefined` or empty -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[firstInGroup](tag.md#firstingroup) ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*AsfTag*](asftag.md) +▸ `Static` **fromEmpty**(): [`AsfTag`](asftag.md) Constructs and initializes a new, empty instance. -**Returns:** [*AsfTag*](asftag.md) +#### Returns + +[`AsfTag`](asftag.md) ___ ### fromHeader -▸ `Static`**fromHeader**(`header`: [*AsfHeaderObject*](asfheaderobject.md)): [*AsfTag*](asftag.md) +▸ `Static` **fromHeader**(`header`): [`AsfTag`](asftag.md) Constructs and initializes a new instance using the children of a {@link HeaderObject} object. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `header` | [`AsfHeaderObject`](asfheaderobject.md) | Header object whose children will be used to populate the new instance | -Name | Type | Description | ------- | ------ | ------ | -`header` | [*AsfHeaderObject*](asfheaderobject.md) | Header object whose children will be used to populate the new instance | +#### Returns -**Returns:** [*AsfTag*](asftag.md) +[`AsfTag`](asftag.md) ___ ### isFalsyOrLikeEmpty -▸ `Protected` `Static`**isFalsyOrLikeEmpty**(`value`: *string* \| *string*[]): *boolean* +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` Checks if a value is falsy or empty. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* \| *string*[] | Object to check | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | -**Returns:** *boolean* +#### Returns + +`boolean` If `value` is a string, `true` is returned if the value is falsy or all whitespace, `false` is returned otherwise. If `value` is an array of strings, the array must be falsy or all elements must be falsy or whitespace to return `true`. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[isFalsyOrLikeEmpty](tag.md#isfalsyorlikeempty) ___ ### joinGroup -▸ `Protected` `Static`**joinGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **joinGroup**(`group`): `string` Joins an array of string into a single, semicolon and space separated string. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of string to join | +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | -**Returns:** *string* +#### Returns + +`string` A semicolon and space separated string containing the values from `group` or undefined if the array is `undefined` or empty. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[joinGroup](tag.md#joingroup) ___ ### pictureFromData -▸ `Static`**pictureFromData**(`data`: [*ByteVector*](bytevector.md)): [*Picture*](picture.md) +▸ `Static` **pictureFromData**(`data`): [`Picture`](picture.md) -**`internal`** +**`internal`** -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | -**Returns:** [*Picture*](picture.md) +#### Returns + +[`Picture`](picture.md) ___ ### pictureToData -▸ `Static`**pictureToData**(`picture`: [*IPicture*](../interfaces/ipicture.md)): [*ByteVector*](bytevector.md) +▸ `Static` **pictureToData**(`picture`): [`ByteVector`](bytevector.md) + +**`internal`** -**`internal`** +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `picture` | [`IPicture`](../interfaces/ipicture.md) | -Name | Type | ------- | ------ | -`picture` | [*IPicture*](../interfaces/ipicture.md) | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) diff --git a/docs/classes/asfunknownobject.md b/docs/classes/asfunknownobject.md index 9a939db2..e34a8f3c 100644 --- a/docs/classes/asfunknownobject.md +++ b/docs/classes/asfunknownobject.md @@ -7,9 +7,9 @@ be read from and written to disk. ## Hierarchy -* *BaseObject* +- `BaseObject` - ↳ **AsfUnknownObject** + ↳ **`AsfUnknownObject`** ## Table of contents @@ -32,128 +32,164 @@ be read from and written to disk. ### data -• **data**(): [*ByteVector*](bytevector.md) +• `get` **data**(): [`ByteVector`](bytevector.md) Gets the data contained in the current instance. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -• **data**(`value`: [*ByteVector*](bytevector.md)): *void* +[`ByteVector`](bytevector.md) + +• `set` **data**(`value`): `void` Sets the data contained in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`ByteVector`](bytevector.md) | Data to store in the current instance. Must be truthy. | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*ByteVector*](bytevector.md) | Data to store in the current instance. Must be truthy. | +#### Returns -**Returns:** *void* +`void` ___ ### guid -• **guid**(): *default* +• `get` **guid**(): `default` Gets the GUID that identifies the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### objectType -• **objectType**(): ObjectType +• `get` **objectType**(): `ObjectType` -**Returns:** ObjectType +#### Returns + +`ObjectType` ___ ### originalSize -• **originalSize**(): *number* +• `get` **originalSize**(): `number` Gets the original size of the current instance. -**Returns:** *number* +#### Returns + +`number` ## Methods ### initializeFromFile -▸ `Protected`**initializeFromFile**(`file`: [*File*](file.md), `position`: *number*): *void* +▸ `Protected` **initializeFromFile**(`file`, `position`): `void` Initializes a new instance by reading the contents from a specified position in a specified file. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File which contains the details of the new instance to create | -`position` | *number* | Position in `file` where the object begins | +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File which contains the details of the new instance to create | +| `position` | `number` | Position in `file` where the object begins | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +BaseObject.initializeFromFile ___ ### initializeFromGuid -▸ `Protected`**initializeFromGuid**(`guid`: *default*): *void* +▸ `Protected` **initializeFromGuid**(`guid`): `void` Initializes a new instance with a specified GUID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `guid` | `default` | GUID to use for the new instance. | -Name | Type | Description | ------- | ------ | ------ | -`guid` | *default* | GUID to use for the new instance. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +BaseObject.initializeFromGuid ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +**`inheritdoc`** + +#### Returns + +[`ByteVector`](bytevector.md) -**`inheritdoc`** +#### Overrides -**Returns:** [*ByteVector*](bytevector.md) +BaseObject.render ___ ### renderInternal -▸ `Protected`**renderInternal**(`data`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Protected` **renderInternal**(`data`): [`ByteVector`](bytevector.md) Renders the current instance as a raw ASF object containing the specified data. **`remarks`** Child classes implementing {@see render()} should render their contents and then send the data through this method to produce the final output. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to store in the rendered version of the current instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to store in the rendered version of the current instance. | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) + +#### Inherited from + +BaseObject.renderInternal ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*AsfUnknownObject*](asfunknownobject.md) +▸ `Static` **fromFile**(`file`, `position`): [`AsfUnknownObject`](asfunknownobject.md) Constructs and initializes a new instance by reading the contents from a specified file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File from which the contents of the new instance will be read | +| `position` | `number` | Index into the file where the object begins | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File from which the contents of the new instance will be read | -`position` | *number* | Index into the file where the object begins | +#### Returns -**Returns:** [*AsfUnknownObject*](asfunknownobject.md) +[`AsfUnknownObject`](asfunknownobject.md) diff --git a/docs/classes/aviaudiostream.md b/docs/classes/aviaudiostream.md new file mode 100644 index 00000000..474c6c7a --- /dev/null +++ b/docs/classes/aviaudiostream.md @@ -0,0 +1,138 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / AviAudioStream + +# Class: AviAudioStream + +Representation of an AVI audio stream to support reading audio stream data. + +## Hierarchy + +- [`AviStream`](avistream.md) + + ↳ **`AviAudioStream`** + +## Table of contents + +### Constructors + +- [constructor](aviaudiostream.md#constructor) + +### Properties + +- [\_codec](aviaudiostream.md#_codec) +- [\_header](aviaudiostream.md#_header) + +### Accessors + +- [codec](aviaudiostream.md#codec) +- [header](aviaudiostream.md#header) + +### Methods + +- [parseItem](aviaudiostream.md#parseitem) +- [parseStreamList](aviaudiostream.md#parsestreamlist) + +## Constructors + +### constructor + +• **new AviAudioStream**(`header`) + +Constructs and initializes a new instance with a specified stream header. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `header` | [`AviStreamHeader`](avistreamheader.md) | Header that defines the stream | + +#### Overrides + +[AviStream](avistream.md).[constructor](avistream.md#constructor) + +## Properties + +### \_codec + +• `Protected` **\_codec**: [`ICodec`](../interfaces/icodec.md) + +#### Inherited from + +[AviStream](avistream.md).[_codec](avistream.md#_codec) + +___ + +### \_header + +• `Protected` `Readonly` **\_header**: [`AviStreamHeader`](avistreamheader.md) + +#### Inherited from + +[AviStream](avistream.md).[_header](avistream.md#_header) + +## Accessors + +### codec + +• `get` **codec**(): [`ICodec`](../interfaces/icodec.md) + +Gets the codec information for this stream. + +#### Returns + +[`ICodec`](../interfaces/icodec.md) + +___ + +### header + +• `get` **header**(): [`AviStreamHeader`](avistreamheader.md) + +Gets the header for this stream. + +#### Returns + +[`AviStreamHeader`](avistreamheader.md) + +## Methods + +### parseItem + +▸ `Protected` **parseItem**(`id`, `data`, `start`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `id` | `string` | +| `data` | [`ByteVector`](bytevector.md) | +| `start` | `number` | + +#### Returns + +`void` + +#### Overrides + +[AviStream](avistream.md).[parseItem](avistream.md#parseitem) + +___ + +### parseStreamList + +▸ `Static` **parseStreamList**(`data`): [`AviStream`](avistream.md) + +Parses a raw AVI stream list and returns the stream information + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | + +#### Returns + +[`AviStream`](avistream.md) + +#### Inherited from + +[AviStream](avistream.md).[parseStreamList](avistream.md#parsestreamlist) diff --git a/docs/classes/avistream.md b/docs/classes/avistream.md new file mode 100644 index 00000000..7b46ba90 --- /dev/null +++ b/docs/classes/avistream.md @@ -0,0 +1,121 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / AviStream + +# Class: AviStream + +Base class representing a stream in an AVI file. Provides basic support for parsing a raw AVI +stream list. + +## Hierarchy + +- **`AviStream`** + + ↳ [`AviAudioStream`](aviaudiostream.md) + + ↳ [`AviVideoStream`](avivideostream.md) + +## Table of contents + +### Constructors + +- [constructor](avistream.md#constructor) + +### Properties + +- [\_codec](avistream.md#_codec) +- [\_header](avistream.md#_header) + +### Accessors + +- [codec](avistream.md#codec) +- [header](avistream.md#header) + +### Methods + +- [parseItem](avistream.md#parseitem) +- [parseStreamList](avistream.md#parsestreamlist) + +## Constructors + +### constructor + +• `Protected` **new AviStream**(`header`) + +Constructs and initializes a new instance with a specified stream header. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `header` | [`AviStreamHeader`](avistreamheader.md) | The stream's header | + +## Properties + +### \_codec + +• `Protected` **\_codec**: [`ICodec`](../interfaces/icodec.md) + +___ + +### \_header + +• `Protected` `Readonly` **\_header**: [`AviStreamHeader`](avistreamheader.md) + +## Accessors + +### codec + +• `get` **codec**(): [`ICodec`](../interfaces/icodec.md) + +Gets the codec information for this stream. + +#### Returns + +[`ICodec`](../interfaces/icodec.md) + +___ + +### header + +• `get` **header**(): [`AviStreamHeader`](avistreamheader.md) + +Gets the header for this stream. + +#### Returns + +[`AviStreamHeader`](avistreamheader.md) + +## Methods + +### parseItem + +▸ `Protected` `Abstract` **parseItem**(`id`, `data`, `start`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `id` | `string` | +| `data` | [`ByteVector`](bytevector.md) | +| `start` | `number` | + +#### Returns + +`void` + +___ + +### parseStreamList + +▸ `Static` **parseStreamList**(`data`): [`AviStream`](avistream.md) + +Parses a raw AVI stream list and returns the stream information + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | + +#### Returns + +[`AviStream`](avistream.md) diff --git a/docs/classes/avistreamheader.md b/docs/classes/avistreamheader.md new file mode 100644 index 00000000..64887f8a --- /dev/null +++ b/docs/classes/avistreamheader.md @@ -0,0 +1,282 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / AviStreamHeader + +# Class: AviStreamHeader + +Contains information about one stream in an AVI file. + +**`link`** https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/avifmt/ns-avifmt-avistreamheader + +## Table of contents + +### Constructors + +- [constructor](avistreamheader.md#constructor) + +### Accessors + +- [bottom](avistreamheader.md#bottom) +- [flags](avistreamheader.md#flags) +- [handler](avistreamheader.md#handler) +- [initialFrames](avistreamheader.md#initialframes) +- [language](avistreamheader.md#language) +- [left](avistreamheader.md#left) +- [length](avistreamheader.md#length) +- [priority](avistreamheader.md#priority) +- [quality](avistreamheader.md#quality) +- [rate](avistreamheader.md#rate) +- [right](avistreamheader.md#right) +- [sampleSize](avistreamheader.md#samplesize) +- [scale](avistreamheader.md#scale) +- [start](avistreamheader.md#start) +- [suggestedSampleSize](avistreamheader.md#suggestedsamplesize) +- [top](avistreamheader.md#top) +- [type](avistreamheader.md#type) + +## Constructors + +### constructor + +• **new AviStreamHeader**(`data`, `offset`) + +Constructs and initializes a new instance by reading the raw structure from a specified +position in the provided data. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data that contains the raw stream header | +| `offset` | `number` | Position into `data` where the stream header begins | + +## Accessors + +### bottom + +• `get` **bottom**(): `number` + +Gets the offset from the bottom of the main movie rectangle where this stream should be +positioned. + +#### Returns + +`number` + +___ + +### flags + +• `get` **flags**(): `number` + +Gets any flags for the data stream. + +#### Returns + +`number` + +___ + +### handler + +• `get` **handler**(): `number` + +Gets an optional FOURCC that identifies a specific data handler. The data handler is the +preferred handler for the stream. For audio/video streams, this specifies the codec for +decoding the stream. + +#### Returns + +`number` + +___ + +### initialFrames + +• `get` **initialFrames**(): `number` + +Gets how far audio data is skewed ahead of the video frames in an interleaved file. This +value generally 0 for non-interleaved files. + +#### Returns + +`number` + +___ + +### language + +• `get` **language**(): `number` + +Gets the language tag for the stream. + +#### Returns + +`number` + +___ + +### left + +• `get` **left**(): `number` + +Gets the offset from the left of the main movie rectangle where this stream should be +positioned. + +#### Returns + +`number` + +___ + +### length + +• `get` **length**(): `number` + +Gets the length of the stream. The units are defined by `rate` and `scale` in the main file +header. + +#### Returns + +`number` + +___ + +### priority + +• `get` **priority**(): `number` + +Gets the priority of a stream type. For example, in a file with multiple audio streams, +the one with the highest priority might be the default stream. + +#### Returns + +`number` + +___ + +### quality + +• `get` **quality**(): `number` + +Gets an indicator of the quality of the data in the stream. Quality is represented as a +number between `0` and `10000`. -1 indicates the default quality values should be used. + +**`remarks`** For compressed data, this typically represents the value of the quality parameter + passed to the compression software. + +#### Returns + +`number` + +___ + +### rate + +• `get` **rate**(): `number` + +Used with {@see scale} to specify the time scale that this stream will use. + +**`remarks`** Dividing {@see rate} by this gives the number of samples per second. For video + streams, this is the frame rate. For audio streams, this rate corresponds to the time + needed to play {@see RiffWaveFormatEx.blockAlign} bytes of audio. For PCM audio this is + just the sample rate. + +#### Returns + +`number` + +___ + +### right + +• `get` **right**(): `number` + +Gets the offset from the right of the main movie rectangle where this stream should be +positioned. + +#### Returns + +`number` + +___ + +### sampleSize + +• `get` **sampleSize**(): `number` + +Gets the size of a single sample of data. If the sample size varies, this will be `0`. + +#### Returns + +`number` + +___ + +### scale + +• `get` **scale**(): `number` + +Used with {@see rate} to specify the time scale that this stream will use. + +**`remarks`** Dividing {@see rate} by this gives the number of samples per second. For video + streams, this is the frame rate. For audio streams, this rate corresponds to the time + needed to play `nBlockAlign` bytes of audio. For PCM audio is just the sample rate. + +#### Returns + +`number` + +___ + +### start + +• `get` **start**(): `number` + +Gets the starting time for this stream. The units are defined by `rate` and `scale` in the +main file header. + +**`remarks`** Usually this is zero, but it can specify a delay time for a stream that does not + start concurrently with the file. + +#### Returns + +`number` + +___ + +### suggestedSampleSize + +• `get` **suggestedSampleSize**(): `number` + +Gets how large of a buffer should be used to read this stream. + +**`remarks`** Typically, this contains a value corresponding to the largest chunk present in the + stream. + +#### Returns + +`number` + +___ + +### top + +• `get` **top**(): `number` + +Gets the offset from the top of the main movie rectangle where this stream should be +positioned. + +#### Returns + +`number` + +___ + +### type + +• `get` **type**(): [`AviStreamType`](../enums/avistreamtype.md) + +Gets a FOURCC that species the type of data contained in the stream. + +#### Returns + +[`AviStreamType`](../enums/avistreamtype.md) diff --git a/docs/classes/avivideostream.md b/docs/classes/avivideostream.md new file mode 100644 index 00000000..a0bb17e0 --- /dev/null +++ b/docs/classes/avivideostream.md @@ -0,0 +1,138 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / AviVideoStream + +# Class: AviVideoStream + +Representation of an AVI video stream to support reading video stream data. + +## Hierarchy + +- [`AviStream`](avistream.md) + + ↳ **`AviVideoStream`** + +## Table of contents + +### Constructors + +- [constructor](avivideostream.md#constructor) + +### Properties + +- [\_codec](avivideostream.md#_codec) +- [\_header](avivideostream.md#_header) + +### Accessors + +- [codec](avivideostream.md#codec) +- [header](avivideostream.md#header) + +### Methods + +- [parseItem](avivideostream.md#parseitem) +- [parseStreamList](avivideostream.md#parsestreamlist) + +## Constructors + +### constructor + +• **new AviVideoStream**(`header`) + +Constructs and initializes a new instance with a specified stream header. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `header` | [`AviStreamHeader`](avistreamheader.md) | Header that defines the stream | + +#### Overrides + +[AviStream](avistream.md).[constructor](avistream.md#constructor) + +## Properties + +### \_codec + +• `Protected` **\_codec**: [`ICodec`](../interfaces/icodec.md) + +#### Inherited from + +[AviStream](avistream.md).[_codec](avistream.md#_codec) + +___ + +### \_header + +• `Protected` `Readonly` **\_header**: [`AviStreamHeader`](avistreamheader.md) + +#### Inherited from + +[AviStream](avistream.md).[_header](avistream.md#_header) + +## Accessors + +### codec + +• `get` **codec**(): [`ICodec`](../interfaces/icodec.md) + +Gets the codec information for this stream. + +#### Returns + +[`ICodec`](../interfaces/icodec.md) + +___ + +### header + +• `get` **header**(): [`AviStreamHeader`](avistreamheader.md) + +Gets the header for this stream. + +#### Returns + +[`AviStreamHeader`](avistreamheader.md) + +## Methods + +### parseItem + +▸ `Protected` **parseItem**(`id`, `data`, `start`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `id` | `string` | +| `data` | [`ByteVector`](bytevector.md) | +| `start` | `number` | + +#### Returns + +`void` + +#### Overrides + +[AviStream](avistream.md).[parseItem](avistream.md#parseitem) + +___ + +### parseStreamList + +▸ `Static` **parseStreamList**(`data`): [`AviStream`](avistream.md) + +Parses a raw AVI stream list and returns the stream information + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | + +#### Returns + +[`AviStream`](avistream.md) + +#### Inherited from + +[AviStream](avistream.md).[parseStreamList](avistream.md#parsestreamlist) diff --git a/docs/classes/bytevector.md b/docs/classes/bytevector.md index 80b667a6..283c921a 100644 --- a/docs/classes/bytevector.md +++ b/docs/classes/bytevector.md @@ -2,10 +2,6 @@ # Class: ByteVector -## Hierarchy - -* **ByteVector** - ## Table of contents ### Accessors @@ -20,7 +16,7 @@ ### Methods -- [[Symbol.iterator]](bytevector.md#[symbol.iterator]) +- [[iterator]](bytevector.md#[iterator]) - [addByte](bytevector.md#addbyte) - [addByteArray](bytevector.md#addbytearray) - [addByteVector](bytevector.md#addbytevector) @@ -82,219 +78,253 @@ ### checksum -• **checksum**(): *number* +• `get` **checksum**(): `number` + +#### Returns -**Returns:** *number* +`number` ___ ### data -• **data**(): *Uint8Array* +• `get` **data**(): `Uint8Array` Array of bytes currently stored in the current instance -**Returns:** *Uint8Array* +#### Returns + +`Uint8Array` ___ ### hashCode -• **hashCode**(): *number* +• `get` **hashCode**(): `number` + +#### Returns -**Returns:** *number* +`number` ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Whether or not the current instance has 0 bytes stored -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isReadOnly -• **isReadOnly**(): *boolean* +• `get` **isReadOnly**(): `boolean` Whether or not the current instance is readonly. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### length -• **length**(): *number* +• `get` **length**(): `number` Number of bytes currently in this ByteVector -**Returns:** *number* +#### Returns + +`number` ___ ### lastUtf16Encoding -• `Static`**lastUtf16Encoding**(): *string* +• `Static` `get` **lastUtf16Encoding**(): `string` + +#### Returns -**Returns:** *string* +`string` -• `Static`**lastUtf16Encoding**(`encoding`: *string*): *void* +• `Static` `set` **lastUtf16Encoding**(`encoding`): `void` -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`encoding` | *string* | +| Name | Type | +| :------ | :------ | +| `encoding` | `string` | -**Returns:** *void* +#### Returns + +`void` ## Methods -### [Symbol.iterator] +### [iterator] + +▸ **[iterator]**(): `Iterator`<`number`, `any`, `undefined`\> -▸ **[Symbol.iterator]**(): *Iterator*<*number*, *any*, *undefined*\> +#### Returns -**Returns:** *Iterator*<*number*, *any*, *undefined*\> +`Iterator`<`number`, `any`, `undefined`\> ___ ### addByte -▸ **addByte**(`byte`: *number*): *void* +▸ **addByte**(`byte`): `void` Adds a single byte to the end of the [ByteVector](bytevector.md) -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`byte` | *number* | Value to add to the end of the ByteVector. Must be positive 8-bit integer. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `byte` | `number` | Value to add to the end of the ByteVector. Must be positive 8-bit integer. | -**Returns:** *void* +#### Returns + +`void` ___ ### addByteArray -▸ **addByteArray**(`data`: *Uint8Array*): *void* +▸ **addByteArray**(`data`): `void` Adds an array of bytes to the end of the [ByteVector](bytevector.md) -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | `Uint8Array` | Array of bytes to add to the end of the ByteVector | -Name | Type | Description | ------- | ------ | ------ | -`data` | *Uint8Array* | Array of bytes to add to the end of the ByteVector | +#### Returns -**Returns:** *void* +`void` ___ ### addByteVector -▸ **addByteVector**(`data`: [*ByteVector*](bytevector.md)): *void* +▸ **addByteVector**(`data`): `void` Adds a [ByteVector](bytevector.md) to the end of this ByteVector -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector to add to the end of this ByteVector | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector to add to the end of this ByteVector | -**Returns:** *void* +#### Returns + +`void` ___ ### clear -▸ **clear**(): *void* +▸ **clear**(): `void` Removes all elements from this [ByteVector](bytevector.md) **`remarks`** NOTE: This method replaces the internal byte array with a new one. Any existing references to [ByteVector.data](bytevector.md#data) will remain unchanged. -**Returns:** *void* +#### Returns + +`void` ___ ### compareTo -▸ **compareTo**(`other`: [*ByteVector*](bytevector.md)): *number* +▸ **compareTo**(`other`): `number` Compares this byte vector to a different byte vector. Returns a numeric value -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`other` | [*ByteVector*](bytevector.md) | ByteVector to compare to this byte vector | +| Name | Type | Description | +| :------ | :------ | :------ | +| `other` | [`ByteVector`](bytevector.md) | ByteVector to compare to this byte vector | -**Returns:** *number* +#### Returns + +`number` ___ ### containsAt -▸ **containsAt**(`pattern`: [*ByteVector*](bytevector.md), `offset?`: *number*, `patternOffset?`: *number*, `patternLength?`: *number*): *boolean* +▸ **containsAt**(`pattern`, `offset?`, `patternOffset?`, `patternLength?`): `boolean` Determines if `pattern` exists at a certain `offset` in this byte vector. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | ByteVector to search for at in this byte vector | +| `offset` | `number` | `0` | Position in this byte vector to search for the pattern. If omitted, defaults to `0` | +| `patternOffset` | `number` | `0` | Position in `pattern` to begin matching. If omitted, defaults to `0` | +| `patternLength` | `number` | `undefined` | Bytes of `pattern` to match. If omitted, defaults to all bytes in the pattern minus the offset | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | ByteVector to search for at in this byte vector | -`offset` | *number* | 0 | Position in this byte vector to search for the pattern. If omitted, defaults to `0` | -`patternOffset` | *number* | 0 | Position in `pattern` to begin matching. If omitted, defaults to `0` | -`patternLength` | *number* | ... | Bytes of `pattern` to match. If omitted, defaults to all bytes in the pattern minus the offset | +#### Returns -**Returns:** *boolean* +`boolean` ___ ### endsWith -▸ **endsWith**(`pattern`: [*ByteVector*](bytevector.md)): *boolean* +▸ **endsWith**(`pattern`): `boolean` Determines whether or not this byte vector ends with the provided `pattern`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | ByteVector to look for at the end of this byte vector | +| Name | Type | Description | +| :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | ByteVector to look for at the end of this byte vector | -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### endsWithPartialMatch -▸ **endsWithPartialMatch**(`pattern`: [*ByteVector*](bytevector.md)): *number* +▸ **endsWithPartialMatch**(`pattern`): `number` Determines whether or not this byte vector ends with a part of the `pattern`. NOTE: if this byte vector ends with `pattern` perfectly, it must end with n-1 or less bytes -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | ByteVector to look for at the end of this byte vector | -Name | Type | Description | ------- | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | ByteVector to look for at the end of this byte vector | +#### Returns -**Returns:** *number* +`number` ___ ### find -▸ **find**(`pattern`: [*ByteVector*](bytevector.md), `offset?`: *number*, `byteAlign?`: *number*): *number* +▸ **find**(`pattern`, `offset?`, `byteAlign?`): `number` Searches this instance for the `pattern`. Returns the index of the first instance of the pattern, or `-1` if it was not found. Providing a `byteAlign` requires the @@ -303,47 +333,53 @@ Example: searching "abcd" for "ab" with byteAlign 1 will return 0. Searching "ab "ab" with byteAlign 2 will return 1. Searching "00ab" for "ab" with byteAlign 2 will return 2. Searching "0abc" with byteAlign 2 will return -1. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern of bytes to search this instance for | +| `offset` | `number` | `0` | Optional, offset into this instance to start searching | +| `byteAlign` | `number` | `1` | Optional, byte alignment the pattern much align to | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern of bytes to search this instance for | -`offset` | *number* | 0 | Optional, offset into this instance to start searching | -`byteAlign` | *number* | 1 | Optional, byte alignment the pattern much align to | +#### Returns -**Returns:** *number* +`number` ___ ### get -▸ **get**(`index`: *number*): *number* +▸ **get**(`index`): `number` Gets the byte at the given `index` -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`index` | *number* | Index into the byte vector to return | +| Name | Type | Description | +| :------ | :------ | :------ | +| `index` | `number` | Index into the byte vector to return | -**Returns:** *number* +#### Returns + +`number` ___ ### indexOf -▸ **indexOf**(`item`: *number*): *number* +▸ **indexOf**(`item`): `number` Gets the index of the first occurrence of the specified value. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `item` | `number` | A byte to find within the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`item` | *number* | A byte to find within the current instance. | +#### Returns -**Returns:** *number* +`number` An integer containing the first index at which the value was found, or -1 if it was not found/ @@ -352,79 +388,87 @@ ___ ### insertByte -▸ **insertByte**(`index`: *number*, `byte`: *number*): *void* +▸ **insertByte**(`index`, `byte`): `void` Inserts a single byte at the given index of this [ByteVector](bytevector.md), increasing the length of the ByteVector by one. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`index` | *number* | Index into this ByteVector at which the value will be inserted. | -`byte` | *number* | Value to insert into the ByteVector. Must be a positive integer <=0xFF | +| Name | Type | Description | +| :------ | :------ | :------ | +| `index` | `number` | Index into this ByteVector at which the value will be inserted. | +| `byte` | `number` | Value to insert into the ByteVector. Must be a positive integer <=0xFF | -**Returns:** *void* +#### Returns + +`void` ___ ### insertByteArray -▸ **insertByteArray**(`index`: *number*, `other`: *Uint8Array*): *void* +▸ **insertByteArray**(`index`, `other`): `void` Inserts an array of bytes into this [ByteVector](bytevector.md) at the given index, increasing the length of this ByteVector by the length of the byte array. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `index` | `number` | Index into this ByteVector at which the bytes will be inserted. | +| `other` | `Uint8Array` | Array of bytes to insert into the ByteVector. | -Name | Type | Description | ------- | ------ | ------ | -`index` | *number* | Index into this ByteVector at which the bytes will be inserted. | -`other` | *Uint8Array* | Array of bytes to insert into the ByteVector. | +#### Returns -**Returns:** *void* +`void` ___ ### insertByteVector -▸ **insertByteVector**(`index`: *number*, `other`: [*ByteVector*](bytevector.md)): *void* +▸ **insertByteVector**(`index`, `other`): `void` Inserts another ByteVector into this [ByteVector](bytevector.md) at the given index, increasing the length of this ByteVector by the length of the ByteVector. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`index` | *number* | Index into this ByteVector at which the ByteVector will be inserted. | -`other` | [*ByteVector*](bytevector.md) | ByteVector to insert into this ByteVector. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `index` | `number` | Index into this ByteVector at which the ByteVector will be inserted. | +| `other` | [`ByteVector`](bytevector.md) | ByteVector to insert into this ByteVector. | -**Returns:** *void* +#### Returns + +`void` ___ ### mid -▸ **mid**(`startIndex`: *number*, `length?`: *number*): [*ByteVector*](bytevector.md) +▸ **mid**(`startIndex`, `length?`): [`ByteVector`](bytevector.md) Returns a subarray of the current instance. This operation returns a new instance and does not alter the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `startIndex` | `number` | Index into the array to begin | +| `length` | `number` | Number of elements from the array to include. If omitted, defaults to the remainder of the array | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`startIndex` | *number* | - | Index into the array to begin | -`length` | *number* | ... | Number of elements from the array to include. If omitted, defaults to the remainder of the array | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### rFind -▸ **rFind**(`pattern`: [*ByteVector*](bytevector.md), `offset?`: *number*, `byteAlign?`: *number*): *number* +▸ **rFind**(`pattern`, `offset?`, `byteAlign?`): `number` Finds a byte vector by searching from the end of this instance and working towards the beginning of this instance. Returns the index of the first instance of the pattern, or `-1` @@ -434,103 +478,115 @@ Example: searching "abcd" for "ab" with byteAlign 1 will return 0. Searching "ab "ab" with byteAlign 2 will return 1. Searching "00ab" for "ab" with byteAlign 2 will return 2. Searching "0abc" with byteAlign 2 will return -1. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern of bytes to search this instance for | -`offset` | *number* | 0 | Optional, offset into this instance to start searching | -`byteAlign` | *number* | 1 | Optional, byte alignment the pattern much align to | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern of bytes to search this instance for | +| `offset` | `number` | `0` | Optional, offset into this instance to start searching | +| `byteAlign` | `number` | `1` | Optional, byte alignment the pattern much align to | -**Returns:** *number* +#### Returns + +`number` ___ ### removeAtIndex -▸ **removeAtIndex**(`index`: *number*): *void* +▸ **removeAtIndex**(`index`): `void` Removes a single byte from this {@ByteVector} -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `index` | `number` | Index that will be removed from the ByteVector | -Name | Type | Description | ------- | ------ | ------ | -`index` | *number* | Index that will be removed from the ByteVector | +#### Returns -**Returns:** *void* +`void` ___ ### removeRange -▸ **removeRange**(`index`: *number*, `count`: *number*): *void* +▸ **removeRange**(`index`, `count`): `void` Removes a range of bytes from this {@ByteVector} -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`index` | *number* | Index into this ByteVector where the range to remove begins | -`count` | *number* | Number of bytes to remove from this ByteVector | +| Name | Type | Description | +| :------ | :------ | :------ | +| `index` | `number` | Index into this ByteVector where the range to remove begins | +| `count` | `number` | Number of bytes to remove from this ByteVector | -**Returns:** *void* +#### Returns + +`void` ___ ### resize -▸ **resize**(`size`: *number*, `padding?`: *number*): [*ByteVector*](bytevector.md) +▸ **resize**(`size`, `padding?`): [`ByteVector`](bytevector.md) Resizes this instance to the length specified in `size`. If the desired size is longer than the current length, it will be filled with the byte value in `padding`. If the desired size is shorter than the current length, bytes will be removed. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `size` | `number` | `undefined` | Length of the byte vector after resizing. Must be unsigned 32-bit integer | +| `padding` | `number` | `0x0` | Byte to fill any excess space created after resizing | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`size` | *number* | - | Length of the byte vector after resizing. Must be unsigned 32-bit integer | -`padding` | *number* | 0x0 | Byte to fill any excess space created after resizing | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### set -▸ **set**(`index`: *number*, `value`: *number*): *void* +▸ **set**(`index`, `value`): `void` Sets the value at a specified index -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`index` | *number* | Index to set the value of | -`value` | *number* | Value to set at the index. Must be a valid integer betweenInclusive 0x0 and 0xff | +| Name | Type | Description | +| :------ | :------ | :------ | +| `index` | `number` | Index to set the value of | +| `value` | `number` | Value to set at the index. Must be a valid integer betweenInclusive 0x0 and 0xff | -**Returns:** *void* +#### Returns + +`void` ___ ### split -▸ **split**(`separator`: [*ByteVector*](bytevector.md), `byteAlign?`: *number*, `max?`: *number*): [*ByteVector*](bytevector.md)[] +▸ **split**(`separator`, `byteAlign?`, `max?`): [`ByteVector`](bytevector.md)[] Splits this byte vector into a list of byte vectors using a separator -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `separator` | [`ByteVector`](bytevector.md) | `undefined` | Object to use to split this byte vector | +| `byteAlign` | `number` | `1` | Byte align to use when splitting. in order to split when a pattern is encountered, the index at which it is found must be divisible by this value. | +| `max` | `number` | `0` | Maximum number of objects to return or 0 to not limit the number. If that number is reached, the last value will contain the remainder of the file even if it contains more instances of `separator`. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`separator` | [*ByteVector*](bytevector.md) | - | Object to use to split this byte vector | -`byteAlign` | *number* | 1 | Byte align to use when splitting. in order to split when a pattern is encountered, the index at which it is found must be divisible by this value. | -`max` | *number* | 0 | Maximum number of objects to return or 0 to not limit the number. If that number is reached, the last value will contain the remainder of the file even if it contains more instances of `separator`. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md)[] +[`ByteVector`](bytevector.md)[] ByteVector[] The split contents of the current instance @@ -538,17 +594,19 @@ ___ ### startsWith -▸ **startsWith**(`pattern`: [*ByteVector*](bytevector.md)): *boolean* +▸ **startsWith**(`pattern`): `boolean` Checks whether or not a pattern appears at the beginning of the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | ByteVector containing the pattern to check for in the current instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | ByteVector containing the pattern to check for in the current instance. | -**Returns:** *boolean* +#### Returns + +`boolean` `true` if the pattern was found at the beginning of the current instance, `false` otherwise. @@ -557,20 +615,22 @@ ___ ### toDouble -▸ **toDouble**(`mostSignificantByteFirst?`: *boolean*): *number* +▸ **toDouble**(`mostSignificantByteFirst?`): `number` Converts the first eight bytes of the current instance to a double-precision floating-point value. **`throws`** Error If there are less than eight bytes in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true` the most significant byte appears first (big endian format). | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mostSignificantByteFirst` | *boolean* | true | If `true` the most significant byte appears first (big endian format). | +#### Returns -**Returns:** *number* +`number` A double value containing the value read from the current instance. @@ -578,20 +638,22 @@ ___ ### toFloat -▸ **toFloat**(`mostSignificantByteFirst?`: *boolean*): *number* +▸ **toFloat**(`mostSignificantByteFirst?`): `number` Converts the first four bytes of the current instance to a single-precision floating-point value. **`throws`** Error If there are less than four bytes in the current instance -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mostSignificantByteFirst` | *boolean* | true | If `true` the most significant byte appears first (big endian format). | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true` the most significant byte appears first (big endian format). | -**Returns:** *number* +#### Returns + +`number` A float value containing the value read from the current instance. @@ -599,18 +661,20 @@ ___ ### toInt -▸ **toInt**(`mostSignificantByteFirst?`: *boolean*): *number* +▸ **toInt**(`mostSignificantByteFirst?`): `number` Converts the first four bytes of the current instance to a signed integer. If the current instance is less than four bytes, the most significant bytes will be filled with 0x00. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true` the most significant byte appears first (big endian format) | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mostSignificantByteFirst` | *boolean* | true | If `true` the most significant byte appears first (big endian format) | +#### Returns -**Returns:** *number* +`number` A signed integer value containing the value read from the current instance @@ -618,18 +682,20 @@ ___ ### toLong -▸ **toLong**(`mostSignificantByteFirst?`: *boolean*): *bigint* +▸ **toLong**(`mostSignificantByteFirst?`): `bigint` Converts the first eight bytes of the current instance to a signed long. If the current instance is less than eight bytes, the most significant bytes will be filled with 0x00. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true` the most significant byte appears first (big endian format) | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mostSignificantByteFirst` | *boolean* | true | If `true` the most significant byte appears first (big endian format) | +#### Returns -**Returns:** *bigint* +`bigint` A signed long value containing the value read from the current instance, represented as a BigInt due to JavaScript's 52-bit integer limitation. @@ -638,18 +704,20 @@ ___ ### toShort -▸ **toShort**(`mostSignificantByteFirst?`: *boolean*): *number* +▸ **toShort**(`mostSignificantByteFirst?`): `number` Converts the first two bytes of the current instance to a signed short. If the current instance is less than two bytes, the most significant bytes will be filled with 0x00. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mostSignificantByteFirst` | *boolean* | true | If `true` the most significant byte appears first (big endian format) | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true` the most significant byte appears first (big endian format) | -**Returns:** *number* +#### Returns + +`number` A signed short value containing the value read from the current instance @@ -657,19 +725,21 @@ ___ ### toString -▸ **toString**(`count?`: *number*, `type?`: [*StringType*](../enums/stringtype.md), `offset?`: *number*): *string* +▸ **toString**(`count?`, `type?`, `offset?`): `string` Converts a portion of the current instance to a string using a specified encoding -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `count` | `number` | `undefined` | Integer value specifying the number of *bytes* to convert. | +| `type` | [`StringType`](../enums/stringtype.md) | `undefined` | Value indicating the encoding to use when converting to a string. | +| `offset` | `number` | `0` | Value specifying the index into the current instance at which to start converting. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`count` | *number* | ... | Integer value specifying the number of *bytes* to convert. | -`type` | [*StringType*](../enums/stringtype.md) | ... | Value indicating the encoding to use when converting to a string. | -`offset` | *number* | 0 | Value specifying the index into the current instance at which to start converting. | +#### Returns -**Returns:** *string* +`string` string String containing the converted bytes @@ -677,7 +747,7 @@ ___ ### toStrings -▸ **toStrings**(`type`: [*StringType*](../enums/stringtype.md), `offset`: *number*, `count?`: *number*): *string*[] +▸ **toStrings**(`type`, `offset`, `count?`): `string`[] Converts the current instance into an array of strings starting at the specified offset and using the specified encoding, assuming the values are `null` separated and limiting it to a @@ -686,15 +756,17 @@ specified number of items. **`remarks`** I'm not actually sure if this works as defined, but it behaves the same as the original .NET implementation, so that's good enough for now. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | - | A [StringType](../enums/stringtype.md) value indicating the encoding to use when converting | -`offset` | *number* | - | Value specifying the index into the current instance at which to start converting. | -`count` | *number* | ... | Value specifying a limit to the number of strings to create. Once the limit has been reached, the last string will be filled by the remainder of the data | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | A [StringType](../enums/stringtype.md) value indicating the encoding to use when converting | +| `offset` | `number` | Value specifying the index into the current instance at which to start converting. | +| `count` | `number` | Value specifying a limit to the number of strings to create. Once the limit has been reached, the last string will be filled by the remainder of the data | -**Returns:** *string*[] +#### Returns + +`string`[] string[] Array of strings containing the converted text. @@ -702,18 +774,20 @@ ___ ### toUInt -▸ **toUInt**(`mostSignificantByteFirst?`: *boolean*): *number* +▸ **toUInt**(`mostSignificantByteFirst?`): `number` Converts the first four bytes of the current instance to an unsigned integer. If the current instance is less than four bytes, the most significant bytes will be filled with 0x00. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true` the most significant byte appears first (big endian format) | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mostSignificantByteFirst` | *boolean* | true | If `true` the most significant byte appears first (big endian format) | +#### Returns -**Returns:** *number* +`number` An unsigned integer value containing the value read from the current instance @@ -721,18 +795,20 @@ ___ ### toULong -▸ **toULong**(`mostSignificantByteFirst?`: *boolean*): *bigint* +▸ **toULong**(`mostSignificantByteFirst?`): `bigint` Converts the first eight bytes of the current instance to an unsigned long. If the current instance is less than eight bytes, the most significant bytes will be filled with 0x00. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mostSignificantByteFirst` | *boolean* | true | If `true` the most significant byte appears first (big endian format) | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true` the most significant byte appears first (big endian format) | -**Returns:** *bigint* +#### Returns + +`bigint` An unsigned short value containing the value read from the current instance, represented as a BigInt due to JavaScript's 32-bit integer limitation @@ -741,18 +817,20 @@ ___ ### toUShort -▸ **toUShort**(`mostSignificantByteFirst?`: *boolean*): *number* +▸ **toUShort**(`mostSignificantByteFirst?`): `number` Converts the first two bytes of the current instance to an unsigned short. If the current instance is less than two bytes, the most significant bytes will be filled with 0x00. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true` the most significant byte appears first (big endian format) | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mostSignificantByteFirst` | *boolean* | true | If `true` the most significant byte appears first (big endian format) | +#### Returns -**Returns:** *number* +`number` An unsigned short value containing the value read from the current instance @@ -760,40 +838,44 @@ ___ ### add -▸ `Static`**add**(`first`: [*ByteVector*](bytevector.md), `second`: [*ByteVector*](bytevector.md)): [*ByteVector*](bytevector.md) +▸ `Static` **add**(`first`, `second`): [`ByteVector`](bytevector.md) Creates a new [ByteVector](bytevector.md) that contains the contents of `first` concatenated with `second`. This operation can be thought of as `first + second`. Note: Regardless of the value of [ByteVector.isReadOnly](bytevector.md#isreadonly), the created ByteVector will always be read/write. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`first` | [*ByteVector*](bytevector.md) | ByteVector to which `second` will be added | -`second` | [*ByteVector*](bytevector.md) | ByteVector which will be added to `first` | +| Name | Type | Description | +| :------ | :------ | :------ | +| `first` | [`ByteVector`](bytevector.md) | ByteVector to which `second` will be added | +| `second` | [`ByteVector`](bytevector.md) | ByteVector which will be added to `first` | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### concatenate -▸ `Static`**concatenate**(...`vectors`: (*number* \| [*ByteVector*](bytevector.md) \| *Uint8Array*)[]): [*ByteVector*](bytevector.md) +▸ `Static` **concatenate**(...`vectors`): [`ByteVector`](bytevector.md) Creates a [ByteVector](bytevector.md) from a collection of bytes, byte arrays, and byte vectors. This method is better to use when a known quantity of byte vectors will be concatenated together, since doing multiple calls to [ByteVector.addByteVector](bytevector.md#addbytevector) results in the entire byte vector being copied for each call. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `...vectors` | (`number` \| [`ByteVector`](bytevector.md) \| `Uint8Array`)[] | ByteVectors, byte arrays, or straight bytes to concatenate together into a new [ByteVector](bytevector.md) | -Name | Type | Description | ------- | ------ | ------ | -`...vectors` | (*number* \| [*ByteVector*](bytevector.md) \| *Uint8Array*)[] | ByteVectors, byte arrays, or straight bytes to concatenate together into a new [ByteVector](bytevector.md) | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Single byte vector with the contents of the byte vectors in `vectors` concatenated together @@ -802,388 +884,432 @@ ___ ### empty -▸ `Static`**empty**(): [*ByteVector*](bytevector.md) +▸ `Static` **empty**(): [`ByteVector`](bytevector.md) Creates an empty [ByteVector](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### equal -▸ `Static`**equal**(`first`: [*ByteVector*](bytevector.md), `second`: [*ByteVector*](bytevector.md)): *boolean* +▸ `Static` **equal**(`first`, `second`): `boolean` Returns `true` if the contents of the two [ByteVector](bytevector.md)s are identical, returns `false` otherwise -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `first` | [`ByteVector`](bytevector.md) | ByteVector to compare with `second` | +| `second` | [`ByteVector`](bytevector.md) | ByteVector to compare with `first` | -Name | Type | Description | ------- | ------ | ------ | -`first` | [*ByteVector*](bytevector.md) | ByteVector to compare with `second` | -`second` | [*ByteVector*](bytevector.md) | ByteVector to compare with `first` | +#### Returns -**Returns:** *boolean* +`boolean` ___ ### fromByteArray -▸ `Static`**fromByteArray**(`data`: *Uint8Array*, `length?`: *number*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromByteArray**(`data`, `length?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a [ByteVector](bytevector.md) from a Uint8Array -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`data` | *Uint8Array* | - | Uint8Array of the bytes to put in the ByteVector | -`length` | *number* | ... | Number of bytes to read | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | `Uint8Array` | `undefined` | Uint8Array of the bytes to put in the ByteVector | +| `length` | `number` | `undefined` | Number of bytes to read | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromByteVector -▸ `Static`**fromByteVector**(`original`: [*ByteVector*](bytevector.md), `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromByteVector**(`original`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a [ByteVector](bytevector.md) as a copy of another ByteVector. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `original` | [`ByteVector`](bytevector.md) | `undefined` | Data from this ByteVector will be copied into the new one | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`original` | [*ByteVector*](bytevector.md) | - | Data from this ByteVector will be copied into the new one | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### fromFileAbstraction -▸ `Static`**fromFileAbstraction**(`abstraction`: IFileAbstraction, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromFileAbstraction**(`abstraction`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a new instance by reading in the contents of a specified file abstraction. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`abstraction` | IFileAbstraction | - | File abstraction to read | -`isReadOnly` | *boolean* | false | Whether or not the resulting ByteVector is readonly | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | `undefined` | File abstraction to read | +| `isReadOnly` | `boolean` | `false` | Whether or not the resulting ByteVector is readonly | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromInt -▸ `Static`**fromInt**(`value`: *number*, `mostSignificantByteFirst?`: *boolean*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromInt**(`value`, `mostSignificantByteFirst?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a 4 byte [ByteVector](bytevector.md) with a signed 32-bit integer as the data -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `value` | `number` | `undefined` | Signed 32-bit integer to use as the data. Must be a safe integer, storable in 4 bytes, cannot be a floating point number. | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`value` | *number* | - | Signed 32-bit integer to use as the data. Must be a safe integer, storable in 4 bytes, cannot be a floating point number. | -`mostSignificantByteFirst` | *boolean* | true | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### fromInternalStream -▸ `Static`**fromInternalStream**(`stream`: IStream, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromInternalStream**(`stream`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a ByteVector using the contents of an TagLibSharp-node stream as the contents. This method reads from the current offset of the stream, not the beginning of the stream -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`stream` | IStream | - | TagLibSharp-node internal stream object | -`isReadOnly` | *boolean* | false | Whether or not the byte vector is readonly | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `stream` | `IStream` | `undefined` | TagLibSharp-node internal stream object | +| `isReadOnly` | `boolean` | `false` | Whether or not the byte vector is readonly | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromLong -▸ `Static`**fromLong**(`value`: *number* \| *bigint*, `mostSignificantByteFirst?`: *boolean*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromLong**(`value`, `mostSignificantByteFirst?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates an 8 byte [ByteVector](bytevector.md) with a signed 64-bit integer as the data -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `value` | `number` \| `bigint` | `undefined` | Signed 64-bit integer to use as the data. If using a `bigint`, it must fit within 8 bytes. If using a `number`, it must be a safe integer. | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`value` | *number* \| *bigint* | - | Signed 64-bit integer to use as the data. If using a `bigint`, it must fit within 8 bytes. If using a `number`, it must be a safe integer. | -`mostSignificantByteFirst` | *boolean* | true | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### fromPath -▸ `Static`**fromPath**(`path`: *string*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromPath**(`path`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a [ByteVector](bytevector.md) using the contents of a file as the data -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`path` | *string* | - | Path to the file to store in the ByteVector | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `path` | `string` | `undefined` | Path to the file to store in the ByteVector | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromShort -▸ `Static`**fromShort**(`value`: *number*, `mostSignificantByteFirst?`: *boolean*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromShort**(`value`, `mostSignificantByteFirst?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a 2 byte [ByteVector](bytevector.md) with a signed 16-bit integer as the data -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `value` | `number` | `undefined` | Signed 16-bit integer to use as the data. Must be a safe integer, storable in 2 bytes, cannot be a floating point number. | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`value` | *number* | - | Signed 16-bit integer to use as the data. Must be a safe integer, storable in 2 bytes, cannot be a floating point number. | -`mostSignificantByteFirst` | *boolean* | true | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### fromSize -▸ `Static`**fromSize**(`size`: *number*, `fill?`: *number*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromSize**(`size`, `fill?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a [ByteVector](bytevector.md) of a given length with a given value for all the elements -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`size` | *number* | - | Length of the ByteVector. Must be a positive safe integer, cannot be a float | -`fill` | *number* | 0x0 | Byte value to initialize all elements to. Must be a positive 8-bit integer, cannot be floating point | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `size` | `number` | `undefined` | Length of the ByteVector. Must be a positive safe integer, cannot be a float | +| `fill` | `number` | `0x0` | Byte value to initialize all elements to. Must be a positive 8-bit integer, cannot be floating point | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromStream -▸ `Static`**fromStream**(`readStream`: *ReadableStream*, `isReadOnly?`: *boolean*): *Promise*<[*ByteVector*](bytevector.md)\> +▸ `Static` **fromStream**(`readStream`, `isReadOnly?`): `Promise`<[`ByteVector`](bytevector.md)\> Creates [ByteVector](bytevector.md) with the contents of a stream as the data. The stream will be read to the end before the ByteVector is returned. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `readStream` | `ReadableStream` | `undefined` | Readable stream that will be read in entirety. | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`readStream` | *ReadableStream* | - | Readable stream that will be read in entirety. | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +#### Returns -**Returns:** *Promise*<[*ByteVector*](bytevector.md)\> +`Promise`<[`ByteVector`](bytevector.md)\> ___ ### fromString -▸ `Static`**fromString**(`text`: *string*, `type?`: [*StringType*](../enums/stringtype.md), `length?`: *number*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromString**(`text`, `type?`, `length?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates [ByteVector](bytevector.md) with the byte representation of a string as the data. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`text` | *string* | - | String to store in the ByteVector | -`type` | [*StringType*](../enums/stringtype.md) | ... | StringType to use to encode the string. If [StringType.UTF16](../enums/stringtype.md#utf16) is used, the string will be encoded as UTF16-LE. | -`length` | *number* | ... | Number of characters from the string to store in the ByteVector. Must be a positive 32-bit integer. | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `text` | `string` | `undefined` | String to store in the ByteVector | +| `type` | [`StringType`](../enums/stringtype.md) | `undefined` | StringType to use to encode the string. If [StringType.UTF16](../enums/stringtype.md#utf16) is used, the string will be encoded as UTF16-LE. | +| `length` | `number` | `undefined` | Number of characters from the string to store in the ByteVector. Must be a positive 32-bit integer. | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromUInt -▸ `Static`**fromUInt**(`value`: *number*, `mostSignificantByteFirst?`: *boolean*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromUInt**(`value`, `mostSignificantByteFirst?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a 4 byte [ByteVector](bytevector.md) with a positive 32-bit integer as the data -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `value` | `number` | `undefined` | Positive 32-bit integer to use as the data. Must be a positive safe integer, storable in 4 bytes, cannot be a floating point number. | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`value` | *number* | - | Positive 32-bit integer to use as the data. Must be a positive safe integer, storable in 4 bytes, cannot be a floating point number. | -`mostSignificantByteFirst` | *boolean* | true | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### fromULong -▸ `Static`**fromULong**(`value`: *number* \| *bigint*, `mostSignificantByteFirst?`: *boolean*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromULong**(`value`, `mostSignificantByteFirst?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates an 8 byte [ByteVector](bytevector.md) with a positive 64-bit integer as the data -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`value` | *number* \| *bigint* | - | Positive 64-bit integer to use as the data. If using a `bigint` it must fit within 8 bytes. If using a `number` it must be a safe, positive integer. | -`mostSignificantByteFirst` | *boolean* | true | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `value` | `number` \| `bigint` | `undefined` | Positive 64-bit integer to use as the data. If using a `bigint` it must fit within 8 bytes. If using a `number` it must be a safe, positive integer. | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromUShort -▸ `Static`**fromUShort**(`value`: *number*, `mostSignificantByteFirst?`: *boolean*, `isReadOnly?`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Static` **fromUShort**(`value`, `mostSignificantByteFirst?`, `isReadOnly?`): [`ByteVector`](bytevector.md) Creates a 2 byte [ByteVector](bytevector.md) with a positive 32-bit integer as the data -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `value` | `number` | `undefined` | Positive 16-bit integer to use as the data. Must be a positive safe integer, storable in 2 bytes, cannot be a floating point number. | +| `mostSignificantByteFirst` | `boolean` | `true` | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | +| `isReadOnly` | `boolean` | `false` | If `true` then the ByteVector will be read only | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`value` | *number* | - | Positive 16-bit integer to use as the data. Must be a positive safe integer, storable in 2 bytes, cannot be a floating point number. | -`mostSignificantByteFirst` | *boolean* | true | If `true`, `value` will be stored in big endian format. If `false`, `value` will be stored in little endian format | -`isReadOnly` | *boolean* | false | If `true` then the ByteVector will be read only | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### getTextDelimiter -▸ `Static`**getTextDelimiter**(`type`: [*StringType*](../enums/stringtype.md)): [*ByteVector*](bytevector.md) +▸ `Static` **getTextDelimiter**(`type`): [`ByteVector`](bytevector.md) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`type` | [*StringType*](../enums/stringtype.md) | +| Name | Type | +| :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### greaterThan -▸ `Static`**greaterThan**(`first`: [*ByteVector*](bytevector.md), `second`: [*ByteVector*](bytevector.md)): *boolean* +▸ `Static` **greaterThan**(`first`, `second`): `boolean` Returns `true` if `first` is greater than `second`. This is true if `first` is longer than `second` or if the first element in `first` that is different than the element at the same position in `second` is greater than. Returns `false` if the two [ByteVector](bytevector.md)s are identical. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `first` | [`ByteVector`](bytevector.md) | ByteVector to compare with `second` | +| `second` | [`ByteVector`](bytevector.md) | ByteVector to compare with `first` | -Name | Type | Description | ------- | ------ | ------ | -`first` | [*ByteVector*](bytevector.md) | ByteVector to compare with `second` | -`second` | [*ByteVector*](bytevector.md) | ByteVector to compare with `first` | +#### Returns -**Returns:** *boolean* +`boolean` ___ ### greaterThanEqual -▸ `Static`**greaterThanEqual**(`first`: [*ByteVector*](bytevector.md), `second`: [*ByteVector*](bytevector.md)): *boolean* +▸ `Static` **greaterThanEqual**(`first`, `second`): `boolean` Returns `true` if `first` is greater than `second`. This is true if `first` is longer than `second` or if the first element in `first` that is different than the element at the same position in `second` is greater than. Returns `true` if the two [ByteVector](bytevector.md)s are identical. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`first` | [*ByteVector*](bytevector.md) | ByteVector to compare with `second` | -`second` | [*ByteVector*](bytevector.md) | ByteVector to compare with `first` | +| Name | Type | Description | +| :------ | :------ | :------ | +| `first` | [`ByteVector`](bytevector.md) | ByteVector to compare with `second` | +| `second` | [`ByteVector`](bytevector.md) | ByteVector to compare with `first` | -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### lessThan -▸ `Static`**lessThan**(`first`: [*ByteVector*](bytevector.md), `second`: [*ByteVector*](bytevector.md)): *boolean* +▸ `Static` **lessThan**(`first`, `second`): `boolean` Returns `true` if `first` is less than `second`. This is true if `first` is shorter than `second` or if the first element in `first` that is different than the element at the same position in `second` is less than. Returns `false` if the two [ByteVector](bytevector.md)s are identical. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `first` | [`ByteVector`](bytevector.md) | ByteVector to compare with `second` | +| `second` | [`ByteVector`](bytevector.md) | ByteVector to compare with `first` | -Name | Type | Description | ------- | ------ | ------ | -`first` | [*ByteVector*](bytevector.md) | ByteVector to compare with `second` | -`second` | [*ByteVector*](bytevector.md) | ByteVector to compare with `first` | +#### Returns -**Returns:** *boolean* +`boolean` ___ ### lessThanEqual -▸ `Static`**lessThanEqual**(`first`: [*ByteVector*](bytevector.md), `second`: [*ByteVector*](bytevector.md)): *boolean* +▸ `Static` **lessThanEqual**(`first`, `second`): `boolean` Returns `true` if `first` is less than `second`. This is true if `first` is shorter than `second` or if the first element in `first` that is different than the element at the same position in `second` is less than. Returns `true` if the two [ByteVector](bytevector.md)s are identical. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`first` | [*ByteVector*](bytevector.md) | ByteVector to compare with `second` | -`second` | [*ByteVector*](bytevector.md) | ByteVector to compare with `first` | +| Name | Type | Description | +| :------ | :------ | :------ | +| `first` | [`ByteVector`](bytevector.md) | ByteVector to compare with `second` | +| `second` | [`ByteVector`](bytevector.md) | ByteVector to compare with `first` | -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### notEqual -▸ `Static`**notEqual**(`first`: [*ByteVector*](bytevector.md), `second`: [*ByteVector*](bytevector.md)): *boolean* +▸ `Static` **notEqual**(`first`, `second`): `boolean` Returns `false` if the contents of the two [ByteVector](bytevector.md)s are identical, returns `true` otherwise -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `first` | [`ByteVector`](bytevector.md) | ByteVector to compare with `second` | +| `second` | [`ByteVector`](bytevector.md) | ByteVector to compare with `first` | -Name | Type | Description | ------- | ------ | ------ | -`first` | [*ByteVector*](bytevector.md) | ByteVector to compare with `second` | -`second` | [*ByteVector*](bytevector.md) | ByteVector to compare with `first` | +#### Returns -**Returns:** *boolean* +`boolean` diff --git a/docs/classes/combinedtag.md b/docs/classes/combinedtag.md index 805c9572..d72f0c62 100644 --- a/docs/classes/combinedtag.md +++ b/docs/classes/combinedtag.md @@ -4,9 +4,9 @@ ## Hierarchy -* [*Tag*](tag.md) +- [`Tag`](tag.md) - ↳ **CombinedTag** + ↳ **`CombinedTag`** ## Table of contents @@ -100,323 +100,371 @@ ### constructor -\+ **new CombinedTag**(`tags?`: [*Tag*](tag.md)[]): [*CombinedTag*](combinedtag.md) +• **new CombinedTag**(`tags?`) Constructs and initializes a new instance of [CombinedTag](combinedtag.md). -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`tags?` | [*Tag*](tag.md)[] | Optionally, a list of tags to combine in the new instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `tags?` | [`Tag`](tag.md)[] | Optionally, a list of tags to combine in the new instance. | -**Returns:** [*CombinedTag*](combinedtag.md) +#### Overrides -Inherited from: [Tag](tag.md) +[Tag](tag.md).[constructor](tag.md#constructor) ## Properties ### \_tags -• `Protected` **\_tags**: [*Tag*](tag.md)[] +• `Protected` **\_tags**: [`Tag`](tag.md)[] ## Accessors ### album -• **album**(): *string* +• `get` **album**(): `string` Gets the album title for the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **album**(`val`: *string*): *void* +`string` + +• `set` **album**(`val`): `void` Sets the album title for the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### albumArtists -• **albumArtists**(): *string*[] +• `get` **albumArtists**(): `string`[] Gets the band or artist is credited in the creation of the entire album or collection containing the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string*[] +#### Returns -• **albumArtists**(`val`: *string*[]): *void* +`string`[] + +• `set` **albumArtists**(`val`): `void` Sets the band or artist is credited in the creation of the entire album or collection containing the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string`[] | -Name | Type | ------- | ------ | -`val` | *string*[] | +#### Returns -**Returns:** *void* +`void` ___ ### albumArtistsSort -• **albumArtistsSort**(): *string*[] +• `get` **albumArtistsSort**(): `string`[] Gets the band or artist is credited in the creation of the entire album or collection containing the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string*[] +#### Returns -• **albumArtistsSort**(`val`: *string*[]): *void* +`string`[] + +• `set` **albumArtistsSort**(`val`): `void` Sets the band or artist is credited in the creation of the entire album or collection containing the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string`[] | -Name | Type | ------- | ------ | -`val` | *string*[] | +#### Returns -**Returns:** *void* +`void` ___ ### albumSort -• **albumSort**(): *string* +• `get` **albumSort**(): `string` Gets the album title for sorting the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **albumSort**(`val`: *string*): *void* +`string` + +• `set` **albumSort**(`val`): `void` Sets the album title for sorting the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### amazonId -• **amazonId**(): *string* +• `get` **amazonId**(): `string` Gets the Amazon ID. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **amazonId**(`val`: *string*): *void* +`string` + +• `set` **amazonId**(`val`): `void` Sets the Amazon ID. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### beatsPerMinute -• **beatsPerMinute**(): *number* +• `get` **beatsPerMinute**(): `number` Gets the number of beats per minute of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns -• **beatsPerMinute**(`val`: *number*): *void* +`number` + +• `set` **beatsPerMinute**(`val`): `void` Sets the number of beats per minute of the media represented by the current instance. Must be a positive integer positive integer. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `number` | -Name | Type | ------- | ------ | -`val` | *number* | +#### Returns -**Returns:** *void* +`void` ___ ### comment -• **comment**(): *string* +• `get` **comment**(): `string` Gets a user comment for the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **comment**(`val`: *string*): *void* +`string` + +• `set` **comment**(`val`): `void` Sets a user comment for the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### composers -• **composers**(): *string*[] +• `get` **composers**(): `string`[] Gets the composers of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string*[] +#### Returns -• **composers**(`val`: *string*[]): *void* +`string`[] + +• `set` **composers**(`val`): `void` Sets the composers of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string`[] | -Name | Type | ------- | ------ | -`val` | *string*[] | +#### Returns -**Returns:** *void* +`void` ___ ### composersSort -• **composersSort**(): *string*[] +• `get` **composersSort**(): `string`[] Gets the composers of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string*[] +#### Returns -• **composersSort**(`val`: *string*[]): *void* +`string`[] + +• `set` **composersSort**(`val`): `void` Sets the composers of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string`[] | -Name | Type | ------- | ------ | -`val` | *string*[] | +#### Returns -**Returns:** *void* +`void` ___ ### conductor -• **conductor**(): *string* +• `get` **conductor**(): `string` Gets the conductor or director of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **conductor**(`val`: *string*): *void* +`string` + +• `set` **conductor**(`val`): `void` Sets the conductor or director of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### copyright -• **copyright**(): *string* +• `get` **copyright**(): `string` Gets the copyright information of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **copyright**(`val`: *string*): *void* +`string` + +• `set` **copyright**(`val`): `void` Sets the copyright information of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### dateTagged -• **dateTagged**(): Date +• `get` **dateTagged**(): `Date` Gets the date at which the tag has been written. Returns the first non-null/non-undefined value from the child tags. -**Returns:** Date +#### Returns -• **dateTagged**(`val`: Date): *void* +`Date` + +• `set` **dateTagged**(`val`): `void` Sets the date at which the tag has been written -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `Date` | -Name | Type | ------- | ------ | -`val` | Date | +#### Returns -**Returns:** *void* +`void` ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets the description for the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. @@ -425,595 +473,697 @@ Returns the first non-null/non-undefined value from the child tags. 2", this could be "After visiting 2015, Marty McFly must repeat his visit to 1955 to prevent disastrous changes to 1985...without interfering with his first trip". -**Returns:** *string* +#### Returns -• **description**(`val`: *string*): *void* +`string` + +• `set` **description**(`val`): `void` Sets the description for the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### disc -• **disc**(): *number* +• `get` **disc**(): `number` Gets the number of the disc containing the media represented by the current instance in a boxed set. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns -• **disc**(`val`: *number*): *void* +`number` + +• `set` **disc**(`val`): `void` Sets the number of the disc containing the media represented by the current instance in a boxed set. Must be a positive integer positive integer. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `number` | -Name | Type | ------- | ------ | -`val` | *number* | +#### Returns -**Returns:** *void* +`void` ___ ### discCount -• **discCount**(): *number* +• `get` **discCount**(): `number` Gets the number of the discs in the boxed set containing the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns -• **discCount**(`val`: *number*): *void* +`number` + +• `set` **discCount**(`val`): `void` Sets the number of the discs in the boxed set containing the media represented by the current instance. Must be a positive integer positive integer. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `number` | -Name | Type | ------- | ------ | -`val` | *number* | +#### Returns -**Returns:** *void* +`void` ___ ### firstAlbumArtist -• **firstAlbumArtist**(): *string* +• `get` **firstAlbumArtist**(): `string` Gets the the first value contained in [albumArtists](combinedtag.md#albumartists). -**Returns:** *string* +#### Returns + +`string` ___ ### firstAlbumArtistSort -• **firstAlbumArtistSort**(): *string* +• `get` **firstAlbumArtistSort**(): `string` Gets the first value contained in [albumArtistsSort](combinedtag.md#albumartistssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposer -• **firstComposer**(): *string* +• `get` **firstComposer**(): `string` Gets the first value contained in [composers](combinedtag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposerSort -• **firstComposerSort**(): *string* +• `get` **firstComposerSort**(): `string` Gets the first value contained in [composersSort](combinedtag.md#composerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstGenre -• **firstGenre**(): *string* +• `get` **firstGenre**(): `string` Gets the first value contained in [genres](combinedtag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformer -• **firstPerformer**(): *string* +• `get` **firstPerformer**(): `string` Gets the first value contained in [performers](combinedtag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformerSort -• **firstPerformerSort**(): *string* +• `get` **firstPerformerSort**(): `string` Gets the first value contained in [performersSort](combinedtag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### genres -• **genres**(): *string*[] +• `get` **genres**(): `string`[] Gets the album genres of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string*[] +#### Returns + +`string`[] -• **genres**(`val`: *string*[]): *void* +• `set` **genres**(`val`): `void` Sets the album genres of the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string*[] | +| Name | Type | +| :------ | :------ | +| `val` | `string`[] | -**Returns:** *void* +#### Returns + +`void` ___ ### grouping -• **grouping**(): *string* +• `get` **grouping**(): `string` Gets the grouping on the album which the media in the current instance belongs to. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **grouping**(`val`: *string*): *void* +• `set` **grouping**(`val`): `void` Sets the grouping on the album which the media in the current instance belongs to. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### initialKey -• **initialKey**(): *string* +• `get` **initialKey**(): `string` Gets the initial key of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **initialKey**(`val`: *string*): *void* +• `set` **initialKey**(`val`): `void` Sets the initial key of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Whether or not the current instance is empty. If all child tags are empty, `true` is returned, `false` otherwise. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isrc -• **isrc**(): *string* +• `get` **isrc**(): `string` Gets the ISRC (International Standard Recording Code) of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **isrc**(`val`: *string*): *void* +`string` + +• `set` **isrc**(`val`): `void` Sets the ISRC (International Standard Recording Code) of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### joinedAlbumArtists -• **joinedAlbumArtists**(): *string* +• `get` **joinedAlbumArtists**(): `string` Gets a semicolon and space separated string containing the values in [albumArtists](combinedtag.md#albumartists) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedComposers -• **joinedComposers**(): *string* +• `get` **joinedComposers**(): `string` Gets a semicolon and space separated string containing the values in [composers](combinedtag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedGenres -• **joinedGenres**(): *string* +• `get` **joinedGenres**(): `string` Gets a semicolon and space separated string containing the values in [genres](combinedtag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformers -• **joinedPerformers**(): *string* +• `get` **joinedPerformers**(): `string` Gets a semicolon and space separated string containing the values in [performers](combinedtag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformersSort -• **joinedPerformersSort**(): *string* +• `get` **joinedPerformersSort**(): `string` Gets a semicolon and space separated string containing the values in [performersSort](combinedtag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### lyrics -• **lyrics**(): *string* +• `get` **lyrics**(): `string` Gets the lyrics or script of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **lyrics**(`val`: *string*): *void* +• `set` **lyrics**(`val`): `void` Sets the lyrics or script of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### musicBrainzArtistId -• **musicBrainzArtistId**(): *string* +• `get` **musicBrainzArtistId**(): `string` Gets the MusicBrainz artist ID. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **musicBrainzArtistId**(`val`: *string*): *void* +• `set` **musicBrainzArtistId**(`val`): `void` Sets the MusicBrainz artist ID. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### musicBrainzDiscId -• **musicBrainzDiscId**(): *string* +• `get` **musicBrainzDiscId**(): `string` Gets the MusicBrainz disc ID. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **musicBrainzDiscId**(`val`: *string*): *void* +• `set` **musicBrainzDiscId**(`val`): `void` Sets the MusicBrainz disc ID. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### musicBrainzReleaseArtistId -• **musicBrainzReleaseArtistId**(): *string* +• `get` **musicBrainzReleaseArtistId**(): `string` Gets the MusicBrainz release artist ID. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **musicBrainzReleaseArtistId**(`val`: *string*): *void* +• `set` **musicBrainzReleaseArtistId**(`val`): `void` Sets the MusicBrainz release artist ID. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### musicBrainzReleaseCountry -• **musicBrainzReleaseCountry**(): *string* +• `get` **musicBrainzReleaseCountry**(): `string` Gets the MusicBrainz release country. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **musicBrainzReleaseCountry**(`val`: *string*): *void* +• `set` **musicBrainzReleaseCountry**(`val`): `void` Sets the MusicBrainz release country. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### musicBrainzReleaseGroupId -• **musicBrainzReleaseGroupId**(): *string* +• `get` **musicBrainzReleaseGroupId**(): `string` Gets the MusicBrainz release group ID. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **musicBrainzReleaseGroupId**(`val`: *string*): *void* +• `set` **musicBrainzReleaseGroupId**(`val`): `void` Sets the MusicBrainz release group ID. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### musicBrainzReleaseId -• **musicBrainzReleaseId**(): *string* +• `get` **musicBrainzReleaseId**(): `string` Gets the MusicBrainz release ID. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **musicBrainzReleaseId**(`val`: *string*): *void* +`string` + +• `set` **musicBrainzReleaseId**(`val`): `void` Sets the MusicBrainz release ID. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### musicBrainzReleaseStatus -• **musicBrainzReleaseStatus**(): *string* +• `get` **musicBrainzReleaseStatus**(): `string` Gets the MusicBrainz release status. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **musicBrainzReleaseStatus**(`val`: *string*): *void* +`string` + +• `set` **musicBrainzReleaseStatus**(`val`): `void` Sets the MusicBrainz release status. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### musicBrainzReleaseType -• **musicBrainzReleaseType**(): *string* +• `get` **musicBrainzReleaseType**(): `string` Gets the MusicBrainz release type. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **musicBrainzReleaseType**(`val`: *string*): *void* +`string` + +• `set` **musicBrainzReleaseType**(`val`): `void` Sets the MusicBrainz release type. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### musicBrainzTrackId -• **musicBrainzTrackId**(): *string* +• `get` **musicBrainzTrackId**(): `string` Gets the MusicBrainz track ID. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **musicBrainzTrackId**(`val`: *string*): *void* +`string` + +• `set` **musicBrainzTrackId**(`val`): `void` Sets the MusicBrainz track ID. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### musicIpId -• **musicIpId**(): *string* +• `get` **musicIpId**(): `string` Gets the MusicIP PUID. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **musicIpId**(`val`: *string*): *void* +`string` + +• `set` **musicIpId**(`val`): `void` Sets the MusicIP PUID. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### performers -• **performers**(): *string*[] +• `get` **performers**(): `string`[] Gets the performers or artists who performed in the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string*[] +#### Returns -• **performers**(`val`: *string*[]): *void* +`string`[] + +• `set` **performers**(`val`): `void` Sets the performers in the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string`[] | -Name | Type | ------- | ------ | -`val` | *string*[] | +#### Returns -**Returns:** *void* +`void` ___ ### performersRole -• **performersRole**(): *string*[] +• `get` **performersRole**(): `string`[] Gets the characters for a video media, or instruments played for music media. This should match the [performers](combinedtag.md#performers) array (for each person correspond one/more role). Several roles @@ -1026,218 +1176,254 @@ Returns the first non-null/non-undefined value from the child tags. It is highly important to match each role to the performers. This means that a role may be `null\undefined` to keep a match betweenInclusive performers[i] and performersRole[i]. -**Returns:** *string*[] +#### Returns -• **performersRole**(`val`: *string*[]): *void* +`string`[] + +• `set` **performersRole**(`val`): `void` Sets the characters in a video media, or instruments played for music media. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string`[] | -Name | Type | ------- | ------ | -`val` | *string*[] | +#### Returns -**Returns:** *void* +`void` ___ ### performersSort -• **performersSort**(): *string*[] +• `get` **performersSort**(): `string`[] Gets the performers or artists who performed in the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string*[] +#### Returns -• **performersSort**(`val`: *string*[]): *void* +`string`[] + +• `set` **performersSort**(`val`): `void` Sets the performers in the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string`[] | -Name | Type | ------- | ------ | -`val` | *string*[] | +#### Returns -**Returns:** *void* +`void` ___ ### pictures -• **pictures**(): [*IPicture*](../interfaces/ipicture.md)[] +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] Gets a collection of pictures associated with the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** [*IPicture*](../interfaces/ipicture.md)[] +#### Returns -• **pictures**(`val`: [*IPicture*](../interfaces/ipicture.md)[]): *void* +[`IPicture`](../interfaces/ipicture.md)[] + +• `set` **pictures**(`val`): `void` Sets the collection of pictures associated with the current media. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | [`IPicture`](../interfaces/ipicture.md)[] | -Name | Type | ------- | ------ | -`val` | [*IPicture*](../interfaces/ipicture.md)[] | +#### Returns -**Returns:** *void* +`void` ___ ### publisher -• **publisher**(): *string* +• `get` **publisher**(): `string` Gets the publisher of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **publisher**(`val`: *string*): *void* +`string` + +• `set` **publisher**(`val`): `void` Sets the publisher of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### remixedBy -• **remixedBy**(): *string* +• `get` **remixedBy**(): `string` Gets the remixer of the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns -• **remixedBy**(`val`: *string*): *void* +`string` + +• `set` **remixedBy**(`val`): `void` Sets the remixer of the media represented by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### replayGainAlbumGain -• **replayGainAlbumGain**(): *number* +• `get` **replayGainAlbumGain**(): `number` Gets the ReplayGain album gain in dB. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns -• **replayGainAlbumGain**(`val`: *number*): *void* +`number` + +• `set` **replayGainAlbumGain**(`val`): `void` Sets the ReplayGain album gain in dB. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `number` | -Name | Type | ------- | ------ | -`val` | *number* | +#### Returns -**Returns:** *void* +`void` ___ ### replayGainAlbumPeak -• **replayGainAlbumPeak**(): *number* +• `get` **replayGainAlbumPeak**(): `number` Gets the ReplayGain album peak sample. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns -• **replayGainAlbumPeak**(`val`: *number*): *void* +`number` + +• `set` **replayGainAlbumPeak**(`val`): `void` Sets the ReplayGain album peak sample. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `number` | -Name | Type | ------- | ------ | -`val` | *number* | +#### Returns -**Returns:** *void* +`void` ___ ### replayGainTrackGain -• **replayGainTrackGain**(): *number* +• `get` **replayGainTrackGain**(): `number` Gets the ReplayGain track gain in dB. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns -• **replayGainTrackGain**(`val`: *number*): *void* +`number` + +• `set` **replayGainTrackGain**(`val`): `void` Sets the ReplayGain track gain in dB. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `number` | -Name | Type | ------- | ------ | -`val` | *number* | +#### Returns -**Returns:** *void* +`void` ___ ### replayGainTrackPeak -• **replayGainTrackPeak**(): *number* +• `get` **replayGainTrackPeak**(): `number` Gets the ReplayGain track peak sample. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns -• **replayGainTrackPeak**(`val`: *number*): *void* +`number` + +• `set` **replayGainTrackPeak**(`val`): `void` Sets the ReplayGain track peak sample. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `number` | -Name | Type | ------- | ------ | -`val` | *number* | +#### Returns -**Returns:** *void* +`void` ___ ### subtitle -• **subtitle**(): *string* +• `get` **subtitle**(): `string` Gets the subtitle for the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. @@ -1246,30 +1432,36 @@ Returns the first non-null/non-undefined value from the child tags. the title on the front cover of the media. Example: for "Back to the Future", this would be "It's About Time". -**Returns:** *string* +#### Returns -• **subtitle**(`val`: *string*): *void* +`string` + +• `set` **subtitle**(`val`): `void` Sets the subtitle for the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `val` | `string` | -Name | Type | ------- | ------ | -`val` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) TagTypes Bitwise combined tag types contained in all child tags. @@ -1277,188 +1469,221 @@ ___ ### tags -• **tags**(): [*Tag*](tag.md)[] +• `get` **tags**(): [`Tag`](tag.md)[] Gets the tags combined in the current instance. -**Returns:** [*Tag*](tag.md)[] +#### Returns + +[`Tag`](tag.md)[] -• **tags**(`tags`: [*Tag*](tag.md)[]): *void* +• `set` **tags**(`tags`): `void` Sets the child tags to combine in the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`tags` | [*Tag*](tag.md)[] | Array of tags to combine | +| Name | Type | Description | +| :------ | :------ | :------ | +| `tags` | [`Tag`](tag.md)[] | Array of tags to combine | -**Returns:** *void* +#### Returns + +`void` ___ ### title -• **title**(): *string* +• `get` **title**(): `string` Gets the title for the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **title**(`val`: *string*): *void* +• `set` **title**(`val`): `void` Sets the title for the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### titleSort -• **titleSort**(): *string* +• `get` **titleSort**(): `string` Gets the title used for sorting the media described by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *string* +#### Returns + +`string` -• **titleSort**(`val`: *string*): *void* +• `set` **titleSort**(`val`): `void` Sets the title used for sorting the media described by the current instance. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *string* | +| Name | Type | +| :------ | :------ | +| `val` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### track -• **track**(): *number* +• `get` **track**(): `number` Gets the position of the media represented by the current instance in its containing album. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns + +`number` -• **track**(`val`: *number*): *void* +• `set` **track**(`val`): `void` Sets the position of the media represented by the current instance in its containing album. Must be a positive integer positive integer. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *number* | +| Name | Type | +| :------ | :------ | +| `val` | `number` | -**Returns:** *void* +#### Returns + +`void` ___ ### trackCount -• **trackCount**(): *number* +• `get` **trackCount**(): `number` Gets the number of tracks in the album containing the media represented by the current instance. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns + +`number` -• **trackCount**(`val`: *number*): *void* +• `set` **trackCount**(`val`): `void` Sets the number of tracks in the album containing the media represented by the current instance. Must be a positive integer positive integer. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *number* | +| Name | Type | +| :------ | :------ | +| `val` | `number` | -**Returns:** *void* +#### Returns + +`void` ___ ### year -• **year**(): *number* +• `get` **year**(): `number` Gets the year that the media represented by the current instance was recorded. Returns the first non-null/non-undefined value from the child tags. -**Returns:** *number* +#### Returns + +`number` -• **year**(`val`: *number*): *void* +• `set` **year**(`val`): `void` Sets the year that the media represented by the current instance was recorded. Must be a positive integer. Sets the value on all child tags -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`val` | *number* | +| Name | Type | +| :------ | :------ | +| `val` | `number` | -**Returns:** *void* +#### Returns + +`void` ## Methods ### addTagInternal -▸ `Protected`**addTagInternal**(`tag`: [*Tag*](tag.md)): *void* +▸ `Protected` **addTagInternal**(`tag`): `void` + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `tag` | [`Tag`](tag.md) | -Name | Type | ------- | ------ | -`tag` | [*Tag*](tag.md) | +#### Returns -**Returns:** *void* +`void` ___ ### clear -▸ **clear**(): *void* +▸ **clear**(): `void` + +Clears all values stored in the current instance. + +**`remarks`** The clearing procedure is format specific and should clear all values. -**`inheritdoc`** -Clears all child tags. +#### Returns -**Returns:** *void* +`void` -Overrides: [Tag](tag.md) +#### Overrides + +[Tag](tag.md).[clear](tag.md#clear) ___ ### clearTags -▸ `Protected`**clearTags**(): *void* +▸ `Protected` **clearTags**(): `void` + +#### Returns -**Returns:** *void* +`void` ___ ### copyTo -▸ **copyTo**(`target`: [*Tag*](tag.md), `overwrite`: *boolean*): *void* +▸ **copyTo**(`target`, `overwrite`): `void` Copies the values from the current instance to another [Tag](tag.md), optionally overwriting existing values. @@ -1468,136 +1693,162 @@ Copies the values from the current instance to another [Tag](tag.md), optionally more advanced copying may be done. For example if both `this` and `target` are [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`target` | [*Tag*](tag.md) | Target tag to copy values to | -`overwrite` | *boolean* | Whether or not to copy values over existing ones | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [Tag](tag.md) +[Tag](tag.md).[copyTo](tag.md#copyto) ___ ### insertTag -▸ `Protected`**insertTag**(`index`: *number*, `tag`: [*Tag*](tag.md)): *void* +▸ `Protected` **insertTag**(`index`, `tag`): `void` -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`index` | *number* | -`tag` | [*Tag*](tag.md) | +| Name | Type | +| :------ | :------ | +| `index` | `number` | +| `tag` | [`Tag`](tag.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### removeTag -▸ `Protected`**removeTag**(`tag`: [*Tag*](tag.md)): *void* +▸ `Protected` **removeTag**(`tag`): `void` + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `tag` | [`Tag`](tag.md) | -Name | Type | ------- | ------ | -`tag` | [*Tag*](tag.md) | +#### Returns -**Returns:** *void* +`void` ___ ### setInfoTag -▸ **setInfoTag**(): *void* +▸ **setInfoTag**(): `void` Set the tags that represent the tagger software (node-taglib-sharp) itself. **`remarks`** This is typically a method to call just before saving a tag. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from -Inherited from: [Tag](tag.md) +[Tag](tag.md).[setInfoTag](tag.md#setinfotag) ___ ### setTags -▸ **setTags**(...`tags`: [*Tag*](tag.md)[]): *void* +▸ **setTags**(...`tags`): `void` Sets the child tags to combine in the current instance -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`...tags` | [*Tag*](tag.md)[] | Tags to combine, falsy tags will be ignored | +| Name | Type | Description | +| :------ | :------ | :------ | +| `...tags` | [`Tag`](tag.md)[] | Tags to combine, falsy tags will be ignored | -**Returns:** *void* +#### Returns + +`void` ___ ### firstInGroup -▸ `Protected` `Static`**firstInGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **firstInGroup**(`group`): `string` Gets the first string in an array. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of strings to get the first string from. | +#### Returns -**Returns:** *string* +`string` First string contained in `group` or `undefined` if the array is `undefined` or empty -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[firstInGroup](tag.md#firstingroup) ___ ### isFalsyOrLikeEmpty -▸ `Protected` `Static`**isFalsyOrLikeEmpty**(`value`: *string* \| *string*[]): *boolean* +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` Checks if a value is falsy or empty. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* \| *string*[] | Object to check | +#### Returns -**Returns:** *boolean* +`boolean` If `value` is a string, `true` is returned if the value is falsy or all whitespace, `false` is returned otherwise. If `value` is an array of strings, the array must be falsy or all elements must be falsy or whitespace to return `true`. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[isFalsyOrLikeEmpty](tag.md#isfalsyorlikeempty) ___ ### joinGroup -▸ `Protected` `Static`**joinGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **joinGroup**(`group`): `string` Joins an array of string into a single, semicolon and space separated string. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of string to join | +#### Returns -**Returns:** *string* +`string` A semicolon and space separated string containing the values from `group` or undefined if the array is `undefined` or empty. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[joinGroup](tag.md#joingroup) diff --git a/docs/classes/corruptfileerror.md b/docs/classes/corruptfileerror.md index 74235382..3c64575a 100644 --- a/docs/classes/corruptfileerror.md +++ b/docs/classes/corruptfileerror.md @@ -4,9 +4,9 @@ ## Hierarchy -* *Error* +- `Error` - ↳ **CorruptFileError** + ↳ **`CorruptFileError`** ## Table of contents @@ -32,83 +32,126 @@ ### constructor -\+ **new CorruptFileError**(`msg?`: *string*): [*CorruptFileError*](corruptfileerror.md) +• **new CorruptFileError**(`msg?`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`msg?` | *string* | +| Name | Type | +| :------ | :------ | +| `msg?` | `string` | -**Returns:** [*CorruptFileError*](corruptfileerror.md) +#### Overrides + +Error.constructor ## Properties ### isCorruptFileError -• `Readonly` **isCorruptFileError**: *boolean*= true +• `Readonly` **isCorruptFileError**: `boolean` = `true` ___ ### message -• **message**: *string* +• **message**: `string` + +#### Inherited from + +Error.message ___ ### name -• **name**: *string* +• **name**: `string` + +#### Inherited from + +Error.name ___ ### stack -• `Optional` **stack**: *string* +• `Optional` **stack**: `string` + +#### Inherited from + +Error.stack ___ ### prepareStackTrace -▪ `Optional` `Static` **prepareStackTrace**: (`err`: Error, `stackTraces`: CallSite[]) => *any* +▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any` + +#### Type declaration + +▸ (`err`, `stackTraces`): `any` Optional override for formatting stack traces -**`see`** https://github.com/v8/v8/wiki/Stack%20Trace%20API#customizing-stack-traces +##### Parameters + +| Name | Type | +| :------ | :------ | +| `err` | `Error` | +| `stackTraces` | `CallSite`[] | + +##### Returns + +`any` + +#### Inherited from + +Error.prepareStackTrace ___ ### stackTraceLimit -▪ `Static` **stackTraceLimit**: *number* +▪ `Static` **stackTraceLimit**: `number` + +#### Inherited from + +Error.stackTraceLimit ## Methods ### captureStackTrace -▸ `Static`**captureStackTrace**(`targetObject`: Object, `constructorOpt?`: Function): *void* +▸ `Static` **captureStackTrace**(`targetObject`, `constructorOpt?`): `void` Create .stack property on a target object -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `targetObject` | `object` | +| `constructorOpt?` | `Function` | + +#### Returns -Name | Type | ------- | ------ | -`targetObject` | Object | -`constructorOpt?` | Function | +`void` -**Returns:** *void* +#### Inherited from + +Error.captureStackTrace ___ ### errorIs -▸ `Static`**errorIs**(`e`: Error): *boolean* +▸ `Static` **errorIs**(`e`): `boolean` + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `e` | `Error` | -Name | Type | ------- | ------ | -`e` | Error | +#### Returns -**Returns:** *boolean* +`boolean` diff --git a/docs/classes/divxtag.md b/docs/classes/divxtag.md new file mode 100644 index 00000000..8a194e62 --- /dev/null +++ b/docs/classes/divxtag.md @@ -0,0 +1,2270 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / DivxTag + +# Class: DivxTag + +## Hierarchy + +- [`Tag`](tag.md) + + ↳ **`DivxTag`** + +## Table of contents + +### Properties + +- [FILE\_IDENTIFIER](divxtag.md#file_identifier) +- [SIZE](divxtag.md#size) + +### Accessors + +- [album](divxtag.md#album) +- [albumArtists](divxtag.md#albumartists) +- [albumArtistsSort](divxtag.md#albumartistssort) +- [albumSort](divxtag.md#albumsort) +- [amazonId](divxtag.md#amazonid) +- [beatsPerMinute](divxtag.md#beatsperminute) +- [comment](divxtag.md#comment) +- [composers](divxtag.md#composers) +- [composersSort](divxtag.md#composerssort) +- [conductor](divxtag.md#conductor) +- [copyright](divxtag.md#copyright) +- [dateTagged](divxtag.md#datetagged) +- [description](divxtag.md#description) +- [disc](divxtag.md#disc) +- [discCount](divxtag.md#disccount) +- [firstAlbumArtist](divxtag.md#firstalbumartist) +- [firstAlbumArtistSort](divxtag.md#firstalbumartistsort) +- [firstComposer](divxtag.md#firstcomposer) +- [firstComposerSort](divxtag.md#firstcomposersort) +- [firstGenre](divxtag.md#firstgenre) +- [firstPerformer](divxtag.md#firstperformer) +- [firstPerformerSort](divxtag.md#firstperformersort) +- [genres](divxtag.md#genres) +- [grouping](divxtag.md#grouping) +- [initialKey](divxtag.md#initialkey) +- [isEmpty](divxtag.md#isempty) +- [isrc](divxtag.md#isrc) +- [joinedAlbumArtists](divxtag.md#joinedalbumartists) +- [joinedComposers](divxtag.md#joinedcomposers) +- [joinedGenres](divxtag.md#joinedgenres) +- [joinedPerformers](divxtag.md#joinedperformers) +- [joinedPerformersSort](divxtag.md#joinedperformerssort) +- [lyrics](divxtag.md#lyrics) +- [musicBrainzArtistId](divxtag.md#musicbrainzartistid) +- [musicBrainzDiscId](divxtag.md#musicbrainzdiscid) +- [musicBrainzReleaseArtistId](divxtag.md#musicbrainzreleaseartistid) +- [musicBrainzReleaseCountry](divxtag.md#musicbrainzreleasecountry) +- [musicBrainzReleaseGroupId](divxtag.md#musicbrainzreleasegroupid) +- [musicBrainzReleaseId](divxtag.md#musicbrainzreleaseid) +- [musicBrainzReleaseStatus](divxtag.md#musicbrainzreleasestatus) +- [musicBrainzReleaseType](divxtag.md#musicbrainzreleasetype) +- [musicBrainzTrackId](divxtag.md#musicbrainztrackid) +- [musicIpId](divxtag.md#musicipid) +- [performers](divxtag.md#performers) +- [performersRole](divxtag.md#performersrole) +- [performersSort](divxtag.md#performerssort) +- [pictures](divxtag.md#pictures) +- [publisher](divxtag.md#publisher) +- [remixedBy](divxtag.md#remixedby) +- [replayGainAlbumGain](divxtag.md#replaygainalbumgain) +- [replayGainAlbumPeak](divxtag.md#replaygainalbumpeak) +- [replayGainTrackGain](divxtag.md#replaygaintrackgain) +- [replayGainTrackPeak](divxtag.md#replaygaintrackpeak) +- [subtitle](divxtag.md#subtitle) +- [tagTypes](divxtag.md#tagtypes) +- [title](divxtag.md#title) +- [titleSort](divxtag.md#titlesort) +- [track](divxtag.md#track) +- [trackCount](divxtag.md#trackcount) +- [year](divxtag.md#year) + +### Methods + +- [clear](divxtag.md#clear) +- [copyTo](divxtag.md#copyto) +- [render](divxtag.md#render) +- [setInfoTag](divxtag.md#setinfotag) +- [firstInGroup](divxtag.md#firstingroup) +- [fromData](divxtag.md#fromdata) +- [fromEmpty](divxtag.md#fromempty) +- [fromFile](divxtag.md#fromfile) +- [isFalsyOrLikeEmpty](divxtag.md#isfalsyorlikeempty) +- [joinGroup](divxtag.md#joingroup) + +## Properties + +### FILE\_IDENTIFIER + +▪ `Static` `Readonly` **FILE\_IDENTIFIER**: [`ByteVector`](bytevector.md) + +Identifier used to recognize DivX tags. + +___ + +### SIZE + +▪ `Static` `Readonly` **SIZE**: ``128`` + +Size of a DivX tag in bytes. + +## Accessors + +### album + +• `get` **album**(): `string` + +Gets the album of the media represented by the current instance. For video media, this +represents the collection the video belongs to. + +**`remarks`** This field represents the name of the album the media belongs to. In the case of a + boxed set, it should be the name of the entire set rather than the individual disc. In + the case of a series, this should be the name of the series, rather than the season of a + series. + For example, "Kintsugi" (an album by Death Cab for Cutie), "The Complete Red Green Show" + (a boxed set of TV episodes), or "Shark Tank" (a series with several seasons). + +#### Returns + +`string` + +Album of the media represented by the current instance or `undefined` if no value + is present + +• `set` **album**(`value`): `void` + +Sets the album of the media represented by the current instance. For video media, this +represents the collection the video belongs to. + +**`remarks`** This field represents the name of the album the media belongs to. In the case of a + boxed set, it should be the name of the entire set rather than the individual disc. In + the case of a series, this should be the name of the series, rather than the season of a + series. + For example, "Kintsugi" (an album by Death Cab for Cutie), "The Complete Red Green Show" + (a boxed set of TV episodes), or "Shark Tank" (a series with several seasons). + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Album of the media represented by the current instance or `undefined` if no value + is present + +___ + +### albumArtists + +• `get` **albumArtists**(): `string`[] + +Gets the band or artist who is credited credited in the creation of the entire album or +collection containing the media described by the current instance. + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple artist. For example, if an album has several artists, sorting by artist + will split up albums by the same artist. Having a single album artist for an entire + album solves this problem. + As this value is to be used as a sorting key, it should be used with less variation + than [performers](divxtag.md#performers). Where performers can be broken into multiple artists, it is + best to stick to a single name. Eg, "Super8 & Tab" + +#### Returns + +`string`[] + +Band or artist credited with the creation of the entire album or collection + containing the media described by the current instance or an empty array if no value is + present + +• `set` **albumArtists**(`value`): `void` + +Sets the bands or artists who is credited credited in the creation of the entire album or +collection containing the media described by the current instance. + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple artist. For example, if an album has several artists, sorting by artist + will split up albums by the same artist. Having a single album artist for an entire + album solves this problem. + As this value is to be used as a sorting key, it should be used with less variation + than [performers](divxtag.md#performers). Where performers can be broken into multiple artists, it is + best to stick to a single name. Eg, "Super8 & Tab" + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present | + +#### Returns + +`void` + +Band or artist credited with the creation of the entire album or collection + containing the media described by the current instance or an empty array if no value is + present + +___ + +### albumArtistsSort + +• `get` **albumArtistsSort**(): `string`[] + +Gets the sortable names of the bands/artists who are credited with creating the entire +album or collection containing the media described by the current instance. + +**`see`** albumArtists + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last by last name. For example "Ben Folds" might be sorted as + "Folds, Ben". + As this value is to be used as a sorting key, it should be used with less variation than + [performers](divxtag.md#performers). Where [performers](divxtag.md#performers) can be broken into multiple performers, it is + best to stick to a single album artist. Eg, "Van Buuren, Armin" + +#### Returns + +`string`[] + +Sortable names for the bands/artists are credited with the creation of the entire + album or collection containing the media described by the current instance, or an empty + array if no value is present. + +• `set` **albumArtistsSort**(`value`): `void` + +Sets the sortable names of the bands/artists who are credited with creating the entire +album or collection containing the media described by the current instance. + +**`see`** albumArtists + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last by last name. For example "Ben Folds" might be sorted as + "Folds, Ben". + As this value is to be used as a sorting key, it should be used with less variation than + [performers](divxtag.md#performers). Where [performers](divxtag.md#performers) can be broken into multiple performers, it is + best to stick to a single album artist. Eg, "Van Buuren, Armin" + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the bands/artists are credited with the creation of the entire + album or collection containing the media described by the current instance, or an empty + array if no value is present. + +___ + +### albumSort + +• `get` **albumSort**(): `string` + +Gets the sortable name of the album title of the media represented by the current instance. + +**`see`** album + +**`remarks`** This field is typically optional but aids in sort of compilations or albums with + similar titles. + +#### Returns + +`string` + +Sortable name for the album title of the media or `undefined` if the value is not + present + +• `set` **albumSort**(`value`): `void` + +Sets the sortable name of the album title of the media represented by the current instance. + +**`see`** album + +**`remarks`** This field is typically optional but aids in sort of compilations or albums with + similar titles. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name for the album title of the media or `undefined` if the value is not present | + +#### Returns + +`void` + +Sortable name for the album title of the media or `undefined` if the value is not + present + +___ + +### amazonId + +• `get` **amazonId**(): `string` + +Gets the Amazon ID of the media represented by the current instance. + +**`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely + identify the particular track or album in the Amazon catalog. + +#### Returns + +`string` + +Amazon ID of the media represented by the current instance or `undefined` if no + value is present + +• `set` **amazonId**(`value`): `void` + +Sets the Amazon ID of the media represented by the current instance. + +**`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely + identify the particular track or album in the Amazon catalog. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Amazon ID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Amazon ID of the media represented by the current instance or `undefined` if no + value is present + +___ + +### beatsPerMinute + +• `get` **beatsPerMinute**(): `number` + +Gets the number of beats per minute in the audio of the media represented by the current +instance. + +**`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be + calculated from the audio or pulled from a database. + +#### Returns + +`number` + +Beats per minute of the audio in the media represented by the current instance, or + `0` if not specified + +• `set` **beatsPerMinute**(`value`): `void` + +Sets the number of beats per minute in the audio of the media represented by the current +instance. + +**`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be + calculated from the audio or pulled from a database. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Beats per minute of the audio in the media represented by the current instance, or `0` if not specified | + +#### Returns + +`void` + +Beats per minute of the audio in the media represented by the current instance, or + `0` if not specified + +___ + +### comment + +• `get` **comment**(): `string` + +Gets a user comment on the media represented by the current instance. + +**`inheritdoc`** + +#### Returns + +`string` + +User comments on the media represented by the current instance or `undefined` if + the value is not present + +• `set` **comment**(`value`): `void` + +Gets a user comment on the media represented by the current instance. + +**`inheritdoc`** + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +User comments on the media represented by the current instance or `undefined` if + the value is not present + +___ + +### composers + +• `get` **composers**(): `string`[] + +Gets the composers of the media represented by the current instance. + +**`remarks`** This field represents the composers, song writers, script writers, or persons who + claim authorship of the media. + +#### Returns + +`string`[] + +Composers of the media represented by the current instance of an empty array if no + value is present. + +• `set` **composers**(`value`): `void` + +Sets the composers of the media represented by the current instance. + +**`remarks`** This field represents the composers, song writers, script writers, or persons who + claim authorship of the media. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Composers of the media represented by the current instance of an empty array if no value is present. | + +#### Returns + +`void` + +Composers of the media represented by the current instance of an empty array if no + value is present. + +___ + +### composersSort + +• `get` **composersSort**(): `string`[] + +Gets the sortable names of the composers of the media represented by the current instance. + +**`see`** composers + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple composers. + +#### Returns + +`string`[] + +Sortable names for the composers of the media represented by the current instance + or an empty array if no value is present. + +• `set` **composersSort**(`value`): `void` + +Sets the sortable names of the composers of the media represented by the current instance. + +**`see`** composers + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple composers. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the composers of the media represented by the current instance + or an empty array if no value is present. + +___ + +### conductor + +• `get` **conductor**(): `string` + +Gets the conductor or director of the media represented by the current instance. + +**`remarks`** This field is most useful for organizing classical music and movies. + +#### Returns + +`string` + +Conductor or director of the media represented by the current instance or + `undefined` if no value present. + +• `set` **conductor**(`value`): `void` + +Sets the conductor or director of the media represented by the current instance. + +**`remarks`** This field is most useful for organizing classical music and movies. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Conductor or director of the media represented by the current instance or `undefined` if no value present. | + +#### Returns + +`void` + +Conductor or director of the media represented by the current instance or + `undefined` if no value present. + +___ + +### copyright + +• `get` **copyright**(): `string` + +Gets the copyright information for the media represented by the current instance. + +**`remarks`** This field should be used for storing copyright information. It may be useful to show + this information somewhere in the program while the media is playing. + Players should not support editing this field, but media creation tools should + definitely allow modification. + +#### Returns + +`string` + +Copyright information for the media represented by the current instance or + `undefined` if no value is present. + +• `set` **copyright**(`value`): `void` + +Sets the copyright information for the media represented by the current instance. + +**`remarks`** This field should be used for storing copyright information. It may be useful to show + this information somewhere in the program while the media is playing. + Players should not support editing this field, but media creation tools should + definitely allow modification. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Copyright information for the media represented by the current instance or `undefined` if no value is present. | + +#### Returns + +`void` + +Copyright information for the media represented by the current instance or + `undefined` if no value is present. + +___ + +### dateTagged + +• `get` **dateTagged**(): `Date` + +Gets the date and time at which the tag has been written. + +#### Returns + +`Date` + +Date/time at which the tag has been written, or `undefined` if no value is present + +• `set` **dateTagged**(`value`): `void` + +Sets the date and time at which the tag has been written. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `Date` | Date/time at which the tag has been written, or `undefined` if no value is present | + +#### Returns + +`void` + +Date/time at which the tag has been written, or `undefined` if no value is present + +___ + +### description + +• `get` **description**(): `string` + +Gets a short description of the media. For music, this could be the comment that the artist +made of his/her work. For a video, this should be a short summary of the story/plot, but +generally no spoliers. This should give the impression of what to expect in the media. + +**`remarks`** This is especially relevant for a movie. For example, for "Fear and Loathing in Las + Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las + Vegas for a series of psychedelic escapades." + +#### Returns + +`string` + +Description of the media represented by the current instance or `undefined` if no + value is present + +• `set` **description**(`value`): `void` + +Sets a short description of the media. For music, this could be the comment that the artist +made of his/her work. For a video, this should be a short summary of the story/plot, but +generally no spoliers. This should give the impression of what to expect in the media. + +**`remarks`** This is especially relevant for a movie. For example, for "Fear and Loathing in Las + Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las + Vegas for a series of psychedelic escapades." + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Description of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Description of the media represented by the current instance or `undefined` if no + value is present + +___ + +### disc + +• `get` **disc**(): `number` + +Gets the number of the disc containing the media represented by the current instance in the +boxed set. For a series, this represents the season number. + +**`remarks`** This value should be the same as the number that appears on the disc. For example, if + the disc is the first of three, the value should be `1`. It should be no more than + [discCount](divxtag.md#disccount) if [discCount](divxtag.md#disccount) is non-zero. + +#### Returns + +`number` + +Number of the disc or season of the media represented by the current instance in a + boxed set. + +• `set` **disc**(`value`): `void` + +Sets the number of the disc containing the media represented by the current instance in the +boxed set. For a series, this represents the season number. + +**`remarks`** This value should be the same as the number that appears on the disc. For example, if + the disc is the first of three, the value should be `1`. It should be no more than + [discCount](divxtag.md#disccount) if [discCount](divxtag.md#disccount) is non-zero. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of the disc or season of the media represented by the current instance in a boxed set. | + +#### Returns + +`void` + +Number of the disc or season of the media represented by the current instance in a + boxed set. + +___ + +### discCount + +• `get` **discCount**(): `number` + +Gets the number of discs or seasons in the boxed set containing the media represented by the +current instance. + +**`remarks`** If non-zero, this should be at least equal to [disc](divxtag.md#disc). If [disc](divxtag.md#disc) is zero, + this value should also be zero. + +#### Returns + +`number` + +Number of discs or seasons in the boxed set containing the media represented by the + current instance or `0` if not specified. + +• `set` **discCount**(`value`): `void` + +Sets the number of discs or seasons in the boxed set containing the media represented by the +current instance. + +**`remarks`** If non-zero, this should be at least equal to [disc](divxtag.md#disc). If [disc](divxtag.md#disc) is zero, + this value should also be zero. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. | + +#### Returns + +`void` + +Number of discs or seasons in the boxed set containing the media represented by the + current instance or `0` if not specified. + +___ + +### firstAlbumArtist + +• `get` **firstAlbumArtist**(): `string` + +Gets the the first value contained in [albumArtists](divxtag.md#albumartists). + +#### Returns + +`string` + +___ + +### firstAlbumArtistSort + +• `get` **firstAlbumArtistSort**(): `string` + +Gets the first value contained in [albumArtistsSort](divxtag.md#albumartistssort) + +#### Returns + +`string` + +___ + +### firstComposer + +• `get` **firstComposer**(): `string` + +Gets the first value contained in [composers](divxtag.md#composers) + +#### Returns + +`string` + +___ + +### firstComposerSort + +• `get` **firstComposerSort**(): `string` + +Gets the first value contained in [composersSort](divxtag.md#composerssort) + +#### Returns + +`string` + +___ + +### firstGenre + +• `get` **firstGenre**(): `string` + +Gets the first value contained in [genres](divxtag.md#genres) + +#### Returns + +`string` + +___ + +### firstPerformer + +• `get` **firstPerformer**(): `string` + +Gets the first value contained in [performers](divxtag.md#performers) + +#### Returns + +`string` + +___ + +### firstPerformerSort + +• `get` **firstPerformerSort**(): `string` + +Gets the first value contained in [performersSort](divxtag.md#performerssort) + +#### Returns + +`string` + +___ + +### genres + +• `get` **genres**(): `string`[] + +Gets the genres of the media represented by the current instance. + +**`inheritdoc`** + +**`remarks`** Genre is stored as an numeric genre. This is translated into the human- + readable genre. + +#### Returns + +`string`[] + +Genres of the media represented by the current instance or an empty array if no + value is present. + +• `set` **genres**(`value`): `void` + +Gets the genres of the media represented by the current instance. + +**`inheritdoc`** + +**`remarks`** Genre is stored as an numeric genre, so only video genres are supported. Only + one genre can be stored. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | + +#### Returns + +`void` + +Genres of the media represented by the current instance or an empty array if no + value is present. + +___ + +### grouping + +• `get` **grouping**(): `string` + +Gets the grouping on the album which the media in the current instance belongs to. + +**`remarks`** This field contains a non-physical group to which the track belongs. In classical + music this could be a movement. It could also be parts of a series like "Introduction", + "Closing Remarks", etc. + +#### Returns + +`string` + +Grouping on the album which the media in the current instance belongs to or + `undefined` if no value is present. + +• `set` **grouping**(`value`): `void` + +Sets the grouping on the album which the media in the current instance belongs to. + +**`remarks`** This field contains a non-physical group to which the track belongs. In classical + music this could be a movement. It could also be parts of a series like "Introduction", + "Closing Remarks", etc. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. | + +#### Returns + +`void` + +Grouping on the album which the media in the current instance belongs to or + `undefined` if no value is present. + +___ + +### initialKey + +• `get` **initialKey**(): `string` + +Gets the initial key of the track. + +#### Returns + +`string` + +Initial key of the track or `undefined` if no value is set + +• `set` **initialKey**(`value`): `void` + +Sets the initial key of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Initial key of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Initial key of the track or `undefined` if no value is set + +___ + +### isEmpty + +• `get` **isEmpty**(): `boolean` + +Gets whether or not the current instance is empty. + +**`remarks`** In the default implementation, this checks the values supported by [Tag](tag.md), but it + may be extended by child classes to support other values. + +#### Returns + +`boolean` + +`true` if the current instance does not contain any values. `false` otherwise + +___ + +### isrc + +• `get` **isrc**(): `string` + +Gets the ISRC (International Standard Recording Code) of the track. + +#### Returns + +`string` + +the ISRC of the track or `undefined` if no value is set + +• `set` **isrc**(`value`): `void` + +Sets the ISRC (International Standard Recording Code) of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | the ISRC of the track or `undefined` if no value is set | + +#### Returns + +`void` + +the ISRC of the track or `undefined` if no value is set + +___ + +### joinedAlbumArtists + +• `get` **joinedAlbumArtists**(): `string` + +Gets a semicolon and space separated string containing the values in [albumArtists](divxtag.md#albumartists) + +#### Returns + +`string` + +___ + +### joinedComposers + +• `get` **joinedComposers**(): `string` + +Gets a semicolon and space separated string containing the values in [composers](divxtag.md#composers) + +#### Returns + +`string` + +___ + +### joinedGenres + +• `get` **joinedGenres**(): `string` + +Gets a semicolon and space separated string containing the values in [genres](divxtag.md#genres) + +#### Returns + +`string` + +___ + +### joinedPerformers + +• `get` **joinedPerformers**(): `string` + +Gets a semicolon and space separated string containing the values in [performers](divxtag.md#performers) + +#### Returns + +`string` + +___ + +### joinedPerformersSort + +• `get` **joinedPerformersSort**(): `string` + +Gets a semicolon and space separated string containing the values in [performersSort](divxtag.md#performerssort) + +#### Returns + +`string` + +___ + +### lyrics + +• `get` **lyrics**(): `string` + +Gets the lyrics or script of the media represented by the current instance. + +**`remarks`** This field contains a plain text representation of the lyrics or scripts with line + breaks and whitespace being the only formatting marks. + Some formats support more advanced lyrics, like synchronized lyrics, but those must be + accessed using format-specific implementations. + +#### Returns + +`string` + +Lyrics or script of the media represented by the current instance or `undefined` if + no value is present + +• `set` **lyrics**(`value`): `void` + +Sets the lyrics or script of the media represented by the current instance. + +**`remarks`** This field contains a plain text representation of the lyrics or scripts with line + breaks and whitespace being the only formatting marks. + Some formats support more advanced lyrics, like synchronized lyrics, but those must be + accessed using format-specific implementations. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Lyrics or script of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Lyrics or script of the media represented by the current instance or `undefined` if + no value is present + +___ + +### musicBrainzArtistId + +• `get` **musicBrainzArtistId**(): `string` + +Gets the MusicBrainz artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a + particular artist of the track. + +#### Returns + +`string` + +MusicBrainz ArtistID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzArtistId**(`value`): `void` + +Sets the MusicBrainz artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a + particular artist of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ArtistID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzDiscId + +• `get` **musicBrainzDiscId**(): `string` + +Gets the MusicBrainz disc ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the + particular released media associated with this track. + +#### Returns + +`string` + +MusicBrainz DiscID of the media represented by the current instance or `undefined` + if no value is present + +• `set` **musicBrainzDiscId**(`value`): `void` + +Sets the MusicBrainz disc ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the + particular released media associated with this track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz DiscID of the media represented by the current instance or `undefined` + if no value is present + +___ + +### musicBrainzReleaseArtistId + +• `get` **musicBrainzReleaseArtistId**(): `string` + +Gets the MusicBrainz release artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely + identify a particular album artist credited with the album. + +#### Returns + +`string` + +MusicBrainz ReleaseArtistID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseArtistId**(`value`): `void` + +Sets the MusicBrainz release artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely + identify a particular album artist credited with the album. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseArtistID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseCountry + +• `get` **musicBrainzReleaseCountry**(): `string` + +Gets the MusicBrainz release country of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseCountry which describes the country in + which an album was released. Note that the release country of an album is not + necessarily the country in which it was produced. The label itself will typically be + more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on + it will likely be a UK release. + +#### Returns + +`string` + +MusicBrainz ReleaseCountry of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseCountry**(`value`): `void` + +Sets the MusicBrainz release country of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseCountry which describes the country in + which an album was released. Note that the release country of an album is not + necessarily the country in which it was produced. The label itself will typically be + more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on + it will likely be a UK release. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseCountry of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseGroupId + +• `get` **musicBrainzReleaseGroupId**(): `string` + +Gets the MusicBrainz release group ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify + a particular release group to which this track belongs. + +#### Returns + +`string` + +MusicBrainz ReleaseGroupID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseGroupId**(`value`): `void` + +Sets the MusicBrainz release group ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify + a particular release group to which this track belongs. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseGroupID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseId + +• `get` **musicBrainzReleaseId**(): `string` + +Gets the MusicBrainz release ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a + particular release to which this track belongs. + +#### Returns + +`string` + +MusicBrainz ReleaseID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseId**(`value`): `void` + +Sets the MusicBrainz release ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a + particular release to which this track belongs. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseStatus + +• `get` **musicBrainzReleaseStatus**(): `string` + +Gets the MusicBrainz release status of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a + release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. + +#### Returns + +`string` + +MusicBrainz ReleaseStatus of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseStatus**(`value`): `void` + +Sets the MusicBrainz release status of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a + release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseStatus of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseType + +• `get` **musicBrainzReleaseType**(): `string` + +Gets the MusicBrainz release type of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseType that describes what kind of release + a release is. Common types are: `Single`, `Album`, `EP`, `Compilation`, `Soundtrack, + `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought + must be given when using this field to decide if a particular track "is a compilation". + +#### Returns + +`string` + +MusicBrainz ReleaseType of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseType**(`value`): `void` + +Sets the MusicBrainz release type of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseType that describes what kind of release + a release is. Common types are: `Single`, `Album`, `EP`, `Compilation`, `Soundtrack, + `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought + must be given when using this field to decide if a particular track "is a compilation". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseType of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzTrackId + +• `get` **musicBrainzTrackId**(): `string` + +Gets the MusicBrainz track ID of the media represented by the media represented by the +current instance. + +**`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a + particular track. + +#### Returns + +`string` + +MusicBrainz TrackID of the media represented by the current instance or `undefined` + if no value is present + +• `set` **musicBrainzTrackId**(`value`): `void` + +Sets the MusicBrainz track ID of the media represented by the media represented by the +current instance. + +**`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a + particular track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz TrackID of the media represented by the current instance or `undefined` + if no value is present + +___ + +### musicIpId + +• `get` **musicIpId**(): `string` + +Gets the MusicIP PUID of the media represented by the current instance. + +**`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It + identifies wht this track "sounds like". + +#### Returns + +`string` + +MusicIP PUID of the media represented by the current instance or `undefined` if no + value is present + +• `set` **musicIpId**(`value`): `void` + +Sets the MusicIP PUID of the media represented by the current instance. + +**`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It + identifies wht this track "sounds like". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicIP PUID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicIP PUID of the media represented by the current instance or `undefined` if no + value is present + +___ + +### performers + +• `get` **performers**(): `string`[] + +Gets the performers or artists who performed in the media described by the current instance. + +**`inheritdoc`** + +#### Returns + +`string`[] + +Performers who performed in the media described by the current instance or an empty + array if no value is present. + +• `set` **performers**(`value`): `void` + +Gets the performers or artists who performed in the media described by the current instance. + +**`inheritdoc`** + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | + +#### Returns + +`void` + +Performers who performed in the media described by the current instance or an empty + array if no value is present. + +___ + +### performersRole + +• `get` **performersRole**(): `string`[] + +Gets the characters portrayed by an actor for a video or instruments played by a musician +for music. This must match the [performers](divxtag.md#performers) array (for each person, correspond one/more +role). Several roles for the same artist/actor can be separated with semicolons. For +example: "Bass; Backing Vocals; Vibraphone". + +**`remarks`** It is highly important to match each role to the performers. This means that an entry + in the [performersRole](divxtag.md#performersrole) array is `undefined` to maintain the relationship between + `performers[i]` and `performersRole[i]`. + +#### Returns + +`string`[] + +Array containing the roles played by the performers in the media described by the + current instance, or an empty array if no value is present. + +• `set` **performersRole**(`value`): `void` + +Sets the characters portrayed by an actor for a video or instruments played by a musician +for music. This must match the [performers](divxtag.md#performers) array (for each person, correspond one/more +role). Several roles for the same artist/actor can be separated with semicolons. For +example: "Bass; Backing Vocals; Vibraphone". + +**`remarks`** It is highly important to match each role to the performers. This means that an entry + in the [performersRole](divxtag.md#performersrole) array is `undefined` to maintain the relationship between + `performers[i]` and `performersRole[i]`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Array containing the roles played by the performers in the media described by the + current instance, or an empty array if no value is present. + +___ + +### performersSort + +• `get` **performersSort**(): `string`[] + +Gets the sortable names of the performers or artists who performed in the media described by +the current instance. + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last name. For example, "The Pillows" might be sorted as + "Pillows, The". + +**`see`** performers + +#### Returns + +`string`[] + +Sortable names for the performers who performed in the media described by the + current instance, or an empty array if no value is present. + +• `set` **performersSort**(`value`): `void` + +Gets the sortable names of the performers or artists who performed in the media described by +the current instance. + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last name. For example, "The Pillows" might be sorted as + "Pillows, The". + +**`see`** performers + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the performers who performed in the media described by the + current instance, or an empty array if no value is present. + +___ + +### pictures + +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] + +Gets a collection of pictures associated with the media represented by the current instance. + +**`remarks`** Typically, this value is used to store an album cover or icon to use for the file, but + it is capable of holding any type of image or file, including pictures of the band, the + recording studio, the concert, etc. + +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] + +Array containing a collection of pictures associated with the media represented by + the current instance or an empty array if no pictures are present. + +• `set` **pictures**(`value`): `void` + +Sets a collection of pictures associated with the media represented by the current instance. + +**`remarks`** Typically, this value is used to store an album cover or icon to use for the file, but + it is capable of holding any type of image or file, including pictures of the band, the + recording studio, the concert, etc. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. | + +#### Returns + +`void` + +Array containing a collection of pictures associated with the media represented by + the current instance or an empty array if no pictures are present. + +___ + +### publisher + +• `get` **publisher**(): `string` + +Gets the publisher of the track. + +#### Returns + +`string` + +Publisher of the track or `undefined` if no value is set + +• `set` **publisher**(`value`): `void` + +Sets the publisher of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Publisher of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Publisher of the track or `undefined` if no value is set + +___ + +### remixedBy + +• `get` **remixedBy**(): `string` + +Gets the remixer of the track. + +#### Returns + +`string` + +Remixer of the track or `undefined` if no value is set + +• `set` **remixedBy**(`value`): `void` + +Sets the remixer of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Remixer of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Remixer of the track or `undefined` if no value is set + +___ + +### replayGainAlbumGain + +• `get` **replayGainAlbumGain**(): `number` + +Gets the ReplayGain album gain in dB. + +#### Returns + +`number` + +Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set + +• `set` **replayGainAlbumGain**(`value`): `void` + +Sets the ReplayGain album gain in dB. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set | + +#### Returns + +`void` + +Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set + +___ + +### replayGainAlbumPeak + +• `get` **replayGainAlbumPeak**(): `number` + +Gets the ReplayGain album peak sample. + +#### Returns + +`number` + +Album peak as per the ReplayGain specifications, or `NaN` if no value is set + +• `set` **replayGainAlbumPeak**(`value`): `void` + +Sets the ReplayGain album peak sample. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album peak as per the ReplayGain specifications, or `NaN` if no value is set | + +#### Returns + +`void` + +Album peak as per the ReplayGain specifications, or `NaN` if no value is set + +___ + +### replayGainTrackGain + +• `get` **replayGainTrackGain**(): `number` + +Gets the ReplayGain track gain in dB. + +#### Returns + +`number` + +Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set + +• `set` **replayGainTrackGain**(`value`): `void` + +Sets the ReplayGain track gain in dB. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set | + +#### Returns + +`void` + +Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set + +___ + +### replayGainTrackPeak + +• `get` **replayGainTrackPeak**(): `number` + +Gets the ReplayGain track peak sample. + +#### Returns + +`number` + +Track peak as per the ReplayGain specifications, or `NaN` if no value is set + +• `set` **replayGainTrackPeak**(`value`): `void` + +Sets the ReplayGain track peak sample. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track peak as per the ReplayGain specifications, or `NaN` if no value is set | + +#### Returns + +`void` + +Track peak as per the ReplayGain specifications, or `NaN` if no value is set + +___ + +### subtitle + +• `get` **subtitle**(): `string` + +Gets a description, one-line. It represents the tagline of the vide/music. + +**`remarks`** This field gives a nice/short precision to the title, which is typically below the + title on the front cover of the media. For example for "Ocean's 13", this would be + "Revenge is a funny thing". + +#### Returns + +`string` + +Subtitle of the media represented by the current instance or `undefined` if no + value is present + +• `set` **subtitle**(`value`): `void` + +Sets a description, one-line. It represents the tagline of the vide/music. + +**`remarks`** This field gives a nice/short precision to the title, which is typically below the + title on the front cover of the media. For example for "Ocean's 13", this would be + "Revenge is a funny thing". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Subtitle of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Subtitle of the media represented by the current instance or `undefined` if no + value is present + +___ + +### tagTypes + +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) + +Gets the tag types contained in the current instance. A bit wise combined [TagTypes](../enums/tagtypes.md) +containing the tag types contained in the current instance. + +**`inheritdoc`** + +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### title + +• `get` **title**(): `string` + +Gets the title for the media described by the current instance. + +**`inheritdoc`** + +#### Returns + +`string` + +Title of the media described by the current instance or `undefined` if no value is + present. + +• `set` **title**(`value`): `void` + +Gets the title for the media described by the current instance. + +**`inheritdoc`** + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +Title of the media described by the current instance or `undefined` if no value is + present. + +___ + +### titleSort + +• `get` **titleSort**(): `string` + +Gets the sortable name for the title of the media described by the current instance. + +**`remarks`** Possibly used to sort compilations or episodic content. + +#### Returns + +`string` + +Sortable name of the media described by the current instance or `undefined` if no + value is present + +• `set` **titleSort**(`value`): `void` + +Sets the sortable name for the title of the media described by the current instance. + +**`remarks`** Possibly used to sort compilations or episodic content. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name of the media described by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Sortable name of the media described by the current instance or `undefined` if no + value is present + +___ + +### track + +• `get` **track**(): `number` + +Gets the position of the media represented by the current instance in its containing album +or season (for a series). + +**`remarks`** This value should be the same as is listed on the album cover and no more than + [trackCount](divxtag.md#trackcount), if [trackCount](divxtag.md#trackcount) is non-zero. + Most tagging formats store this as a string. To help sorting, a two-digit zero-padded + value is used in the resulting tag. + For a series, this property represents the episodes in a season of the series. + +#### Returns + +`number` + +Position of the media represented by the current instance in its containing album + or `0` if not specified. + +• `set` **track**(`value`): `void` + +Sets the position of the media represented by the current instance in its containing album +or season (for a series). + +**`remarks`** This value should be the same as is listed on the album cover and no more than + [trackCount](divxtag.md#trackcount), if [trackCount](divxtag.md#trackcount) is non-zero. + Most tagging formats store this as a string. To help sorting, a two-digit zero-padded + value is used in the resulting tag. + For a series, this property represents the episodes in a season of the series. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Position of the media represented by the current instance in its containing album or `0` if not specified. | + +#### Returns + +`void` + +Position of the media represented by the current instance in its containing album + or `0` if not specified. + +___ + +### trackCount + +• `get` **trackCount**(): `number` + +Gets the number of tracks in the album or the number of episodes in a series of the media +represented by the current instance. + +**`remarks`** If non-zero, this value should be equal to or greater than [track](divxtag.md#track). If + [track](divxtag.md#track) is `0`, this value should also be `0`. + +#### Returns + +`number` + +Number of tracks in the album or number of episodes in a series of the media + represented by the current instance or `0` if not specified. + +• `set` **trackCount**(`value`): `void` + +Sets the number of tracks in the album or the number of episodes in a series of the media +represented by the current instance. + +**`remarks`** If non-zero, this value should be equal to or greater than [track](divxtag.md#track). If + [track](divxtag.md#track) is `0`, this value should also be `0`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. | + +#### Returns + +`void` + +Number of tracks in the album or number of episodes in a series of the media + represented by the current instance or `0` if not specified. + +___ + +### year + +• `get` **year**(): `number` + +Gets the year that the media represented by the current instance was recorded. + +**`inheritdoc`** + +#### Returns + +`number` + +Year that the media represented by the current instance was created or `0` if no + value is present. + +• `set` **year**(`value`): `void` + +Gets the year that the media represented by the current instance was recorded. + +**`inheritdoc`** + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | + +#### Returns + +`void` + +Year that the media represented by the current instance was created or `0` if no + value is present. + +## Methods + +### clear + +▸ **clear**(): `void` + +Clears all values stored in the current instance. + +**`remarks`** The clearing procedure is format specific and should clear all values. + +#### Returns + +`void` + +#### Overrides + +[Tag](tag.md).[clear](tag.md#clear) + +___ + +### copyTo + +▸ **copyTo**(`target`, `overwrite`): `void` + +Copies the values from the current instance to another [Tag](tag.md), optionally overwriting + existing values. + +**`remarks`** This method only copies the most basic values when copying between different tag + formats. However, if `target` is of the same type as the current instance, + more advanced copying may be done. For example if both `this` and `target` are + [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | + +#### Returns + +`void` + +#### Inherited from + +[Tag](tag.md).[copyTo](tag.md#copyto) + +___ + +### render + +▸ **render**(): [`ByteVector`](bytevector.md) + +Renders the current instance as a raw DivX tag. + +#### Returns + +[`ByteVector`](bytevector.md) + +___ + +### setInfoTag + +▸ **setInfoTag**(): `void` + +Set the tags that represent the tagger software (node-taglib-sharp) itself. + +**`remarks`** This is typically a method to call just before saving a tag. + +#### Returns + +`void` + +#### Inherited from + +[Tag](tag.md).[setInfoTag](tag.md#setinfotag) + +___ + +### firstInGroup + +▸ `Static` `Protected` **firstInGroup**(`group`): `string` + +Gets the first string in an array. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | + +#### Returns + +`string` + +First string contained in `group` or `undefined` if the array is + `undefined` or empty + +#### Inherited from + +[Tag](tag.md).[firstInGroup](tag.md#firstingroup) + +___ + +### fromData + +▸ `Static` **fromData**(`data`): [`DivxTag`](divxtag.md) + +Constructs and initializes a new instance by reading the raw tag data stored in a specified +[ByteVector](bytevector.md) object. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | [ByteVector](bytevector.md) that contains the raw tag data | + +#### Returns + +[`DivxTag`](divxtag.md) + +___ + +### fromEmpty + +▸ `Static` **fromEmpty**(): [`DivxTag`](divxtag.md) + +Constructs and initializes a new instance with no contents. + +#### Returns + +[`DivxTag`](divxtag.md) + +___ + +### fromFile + +▸ `Static` **fromFile**(`file`, `position`): [`DivxTag`](divxtag.md) + +Constructs and initializes a new instance by reading the contents of the tag from a +specified position in the provided file. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File containing the tag | +| `position` | `number` | Index into the file where the tag starts. Must be a safe, unsigned integer | + +#### Returns + +[`DivxTag`](divxtag.md) + +___ + +### isFalsyOrLikeEmpty + +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` + +Checks if a value is falsy or empty. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | + +#### Returns + +`boolean` + +If `value` is a string, `true` is returned if the value is falsy or all + whitespace, `false` is returned otherwise. If `value` is an array of strings, + the array must be falsy or all elements must be falsy or whitespace to return `true`. + +#### Inherited from + +[Tag](tag.md).[isFalsyOrLikeEmpty](tag.md#isfalsyorlikeempty) + +___ + +### joinGroup + +▸ `Static` `Protected` **joinGroup**(`group`): `string` + +Joins an array of string into a single, semicolon and space separated string. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | + +#### Returns + +`string` + +A semicolon and space separated string containing the values from `group` + or undefined if the array is `undefined` or empty. + +#### Inherited from + +[Tag](tag.md).[joinGroup](tag.md#joingroup) diff --git a/docs/classes/file.md b/docs/classes/file.md index 0a4e08fe..53b0e8df 100644 --- a/docs/classes/file.md +++ b/docs/classes/file.md @@ -14,11 +14,13 @@ accessing basic tagging and media properties. ## Hierarchy -* **File** +- **`File`** - ↳ [*AiffFile*](aifffile.md) + ↳ [`AiffFile`](aifffile.md) - ↳ [*AsfFile*](asffile.md) + ↳ [`AsfFile`](asffile.md) + + ↳ [`RiffFile`](rifffile.md) ## Table of contents @@ -80,190 +82,214 @@ accessing basic tagging and media properties. ### constructor -\+ `Protected`**new File**(`file`: *string* \| IFileAbstraction): [*File*](file.md) - -#### Parameters: +• `Protected` **new File**(`file`) -Name | Type | ------- | ------ | -`file` | *string* \| IFileAbstraction | +#### Parameters -**Returns:** [*File*](file.md) +| Name | Type | +| :------ | :------ | +| `file` | `string` \| `IFileAbstraction` | ## Properties ### \_fileAbstraction -• `Protected` **\_fileAbstraction**: IFileAbstraction +• `Protected` **\_fileAbstraction**: `IFileAbstraction` ___ ### \_fileStream -• `Protected` **\_fileStream**: IStream +• `Protected` **\_fileStream**: `IStream` ___ ### \_invariantEndPosition -• `Protected` **\_invariantEndPosition**: *number*= -1 +• `Protected` **\_invariantEndPosition**: `number` = `-1` ___ ### \_invariantStartPosition -• `Protected` **\_invariantStartPosition**: *number*= -1 +• `Protected` **\_invariantStartPosition**: `number` = `-1` ___ ### \_tagTypesOnDisk -• `Protected` **\_tagTypesOnDisk**: [*TagTypes*](../enums/tagtypes.md) +• `Protected` **\_tagTypesOnDisk**: [`TagTypes`](../enums/tagtypes.md) ## Accessors ### corruptionReasons -• **corruptionReasons**(): *string*[] +• `get` **corruptionReasons**(): `string`[] Reasons for which this file is marked as corrupt. -**Returns:** *string*[] +#### Returns + +`string`[] ___ ### fileAbstraction -• **fileAbstraction**(): IFileAbstraction +• `get` **fileAbstraction**(): `IFileAbstraction` Gets the {@link IFileAbstraction} representing the file. -**Returns:** IFileAbstraction +#### Returns + +`IFileAbstraction` ___ ### invariantEndPosition -• **invariantEndPosition**(): *number* +• `get` **invariantEndPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance ends. If the value could not be determined, `-1` is returned; -**Returns:** *number* +#### Returns + +`number` ___ ### invariantStartPosition -• **invariantStartPosition**(): *number* +• `get` **invariantStartPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance begins. If the value could not be determined, `-1` is returned. -**Returns:** *number* +#### Returns + +`number` ___ ### isPossiblyCorrupt -• **isPossiblyCorrupt**(): *boolean* +• `get` **isPossiblyCorrupt**(): `boolean` Indicates whether or not this file may be corrupt. Files with unknown corruptions should not be written. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isWritable -• **isWritable**(): *boolean* +• `get` **isWritable**(): `boolean` Indicates whether or not tags can be written back to the current file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### length -• **length**(): *number* +• `get` **length**(): `number` Gets the length of the file represented by the current instance. Value will be 0 if the file is not open for reading; -**Returns:** *number* +#### Returns + +`number` ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets the MimeType of the file as determined during creation of the instance. -**Returns:** *string* +#### Returns + +`string` ___ ### mode -• **mode**(): [*FileAccessMode*](../enums/fileaccessmode.md) +• `get` **mode**(): [`FileAccessMode`](../enums/fileaccessmode.md) Gets the file access mode in use by the current instance. -**Returns:** [*FileAccessMode*](../enums/fileaccessmode.md) +#### Returns -• **mode**(`val`: [*FileAccessMode*](../enums/fileaccessmode.md)): *void* +[`FileAccessMode`](../enums/fileaccessmode.md) + +• `set` **mode**(`val`): `void` Sets the file access mode in use by the current instance. Changing the value will cause the stream currently in use to be closed, except when a change is made from [FileAccessMode.Write](../enums/fileaccessmode.md#write) to [FileAccessMode.Read](../enums/fileaccessmode.md#read) which has no effect. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `val` | [`FileAccessMode`](../enums/fileaccessmode.md) | File access mode to change to | -Name | Type | Description | ------- | ------ | ------ | -`val` | [*FileAccessMode*](../enums/fileaccessmode.md) | File access mode to change to | +#### Returns -**Returns:** *void* +`void` ___ ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the file as stored in its file abstraction. -**Returns:** *string* +#### Returns + +`string` ___ ### position -• **position**(): *number* +• `get` **position**(): `number` Gets the seek position in the internal stream used by the current instance. Value will be 0 if the file is not open for reading -**Returns:** *number* +#### Returns + +`number` ___ ### properties -• **properties**(): [*Properties*](properties.md) +• `Abstract` `get` **properties**(): [`Properties`](properties.md) Gets the media properties of the file represented by the current instance. -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) ___ ### tag -• **tag**(): [*Tag*](tag.md) +• `Abstract` `get` **tag**(): [`Tag`](tag.md) Gets an abstract representation of all tags stored in the current instance. @@ -271,68 +297,80 @@ Gets an abstract representation of all tags stored in the current instance. features of a file. To access or add a specific type of tag in the file, use [File.getTag](file.md#gettag). -**Returns:** [*Tag*](tag.md) +#### Returns + +[`Tag`](tag.md) ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### tagTypesOnDisk -• **tagTypesOnDisk**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypesOnDisk**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the physical file represented by the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### bufferSize -• `Static`**bufferSize**(): *number* +• `Static` `get` **bufferSize**(): `number` Gets the buffer size to use when reading large blocks of data -**Returns:** *number* +#### Returns + +`number` ## Methods ### dispose -▸ **dispose**(): *void* +▸ **dispose**(): `void` Dispose the current instance. Equivalent to setting the mode to closed. -**Returns:** *void* +#### Returns + +`void` ___ ### find -▸ **find**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `before?`: [*ByteVector*](bytevector.md)): *number* +▸ **find**(`pattern`, `startPosition?`, `before?`): `number` Searches forward through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` is not provided or `startPosition` is not a positive, safe integer. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be smaller than the | -`startPosition` | *number* | 0 | Seek position to start searching. Must be positive, safe integer. | -`before?` | [*ByteVector*](bytevector.md) | - | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be smaller than the | +| `startPosition` | `number` | `0` | Seek position to start searching. Must be positive, safe integer. | +| `before?` | [`ByteVector`](bytevector.md) | `undefined` | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | -**Returns:** *number* +#### Returns + +`number` Index at which the value was found. If not found, `-1` is returned. @@ -340,7 +378,7 @@ ___ ### getTag -▸ `Abstract`**getTag**(`types`: [*TagTypes*](../enums/tagtypes.md), `create`: *boolean*): [*Tag*](tag.md) +▸ `Abstract` **getTag**(`types`, `create`): [`Tag`](tag.md) Gets a tag of the specified type from the current instance, optionally creating a new tag if possible. @@ -356,14 +394,16 @@ possible. if (ape) { ().setValue("MOOD", moods); } ``` -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | Type of tag to read. | +| `create` | `boolean` | Whether or not to try and create the tag if one is not found. `true` does not guarantee the tag will be created. For example, trying to create an ID3v2 tag on an OGG Vorbis file will always fail. | -Name | Type | Description | ------- | ------ | ------ | -`types` | [*TagTypes*](../enums/tagtypes.md) | Type of tag to read. | -`create` | *boolean* | Whether or not to try and create the tag if one is not found. `true` does not guarantee the tag will be created. For example, trying to create an ID3v2 tag on an OGG Vorbis file will always fail. | +#### Returns -**Returns:** [*Tag*](tag.md) +[`Tag`](tag.md) Tag object containing the tag that was found in or added to the current instance. If no matching tag was found and none was created, `undefined` is returned. It is safe @@ -374,7 +414,7 @@ ___ ### insert -▸ **insert**(`data`: [*ByteVector*](bytevector.md), `start`: *number*, `replace?`: *number*): *void* +▸ **insert**(`data`, `start`, `replace?`): `void` Inserts a specified block of data into the file represented by the current instance, at a specified location, replacing a specified number of bytes. @@ -382,62 +422,70 @@ specified location, replacing a specified number of bytes. **`throws`** Error Thrown when: 1) data is falsey, 2) start is not a safe, positive number, or 3) replace is not a safe, positive number -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | `undefined` | Data to insert into the file. | +| `start` | `number` | `undefined` | Index into the file at which to insert the data. Must be safe positive integer. | +| `replace` | `number` | `0` | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | - | Data to insert into the file. | -`start` | *number* | - | Index into the file at which to insert the data. Must be safe positive integer. | -`replace` | *number* | 0 | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | +#### Returns -**Returns:** *void* +`void` ___ ### markAsCorrupt -▸ **markAsCorrupt**(`reason`: *string*): *void* +▸ **markAsCorrupt**(`reason`): `void` Mark the current instance as corrupt. NOTE: Not intended to be used outside of this library. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`reason` | *string* | Reason why this file is considered to be corrupt | +| Name | Type | Description | +| :------ | :------ | :------ | +| `reason` | `string` | Reason why this file is considered to be corrupt | -**Returns:** *void* +#### Returns + +`void` ___ ### preSave -▸ `Protected`**preSave**(): *void* +▸ `Protected` **preSave**(): `void` Prepares to save the file. This must be called at the beginning of every File.save() method. -**Returns:** *void* +#### Returns + +`void` ___ ### rFind -▸ **rFind**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `after?`: [*ByteVector*](bytevector.md)): *number* +▸ **rFind**(`pattern`, `startPosition?`, `after?`): `number` Searched backwards through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` was not provided or if `startPosition` is not a safe, positive integer. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be shorter than the [bufferSize](file.md#buffersize) | -`startPosition` | *number* | 0 | Seek position from which to start searching. | -`after?` | [*ByteVector*](bytevector.md) | - | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be shorter than the [bufferSize](file.md#buffersize) | +| `startPosition` | `number` | `0` | Seek position from which to start searching. | +| `after?` | [`ByteVector`](bytevector.md) | `undefined` | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | -**Returns:** *number* +#### Returns + +`number` Index at which the value wa found. If not found, `-1` is returned. @@ -445,7 +493,7 @@ ___ ### readBlock -▸ **readBlock**(`length`: *number*): [*ByteVector*](bytevector.md) +▸ **readBlock**(`length`): [`ByteVector`](bytevector.md) Reads a specified number of bytes at the current seek position from the current position. This method reads the block of data at the current seek position. To change the seek @@ -453,13 +501,15 @@ position, use [File.seek](file.md#seek). **`throws`** Error Thrown when `length` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to read. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to read. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Object containing the data read from the current instance. @@ -467,88 +517,98 @@ ___ ### removeBlock -▸ **removeBlock**(`start`: *number*, `length`: *number*): *void* +▸ **removeBlock**(`start`, `length`): `void` Removes a specified block of data from the file represented by the current instance. **`throws`** Error thrown if 1) start is not a safe, positive integer or 2) length must be a safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `start` | `number` | Index into the file at which to remove data. Must be safe, positive integer. | +| `length` | `number` | Number of bytes to remove. Must be a safe integer. | -Name | Type | Description | ------- | ------ | ------ | -`start` | *number* | Index into the file at which to remove data. Must be safe, positive integer. | -`length` | *number* | Number of bytes to remove. Must be a safe integer. | +#### Returns -**Returns:** *void* +`void` ___ ### removeTags -▸ `Abstract`**removeTags**(`types`: [*TagTypes*](../enums/tagtypes.md)): *void* +▸ `Abstract` **removeTags**(`types`): `void` Removes a set of tag types from the current instance. In order to remove all tags from a file, pass [TagTypes.AllTags](../enums/tagtypes.md#alltags) as `types` -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`types` | [*TagTypes*](../enums/tagtypes.md) | Bitwise combined [TagTypes](../enums/tagtypes.md) value containing the tag types to be removed from the file | +| Name | Type | Description | +| :------ | :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | Bitwise combined [TagTypes](../enums/tagtypes.md) value containing the tag types to be removed from the file | -**Returns:** *void* +#### Returns + +`void` ___ ### save -▸ `Abstract`**save**(): *void* +▸ `Abstract` **save**(): `void` Saves the changes made in the current instance to the file it represents. -**Returns:** *void* +#### Returns + +`void` ___ ### seek -▸ **seek**(`offset`: *number*, `origin?`: SeekOrigin): *void* +▸ **seek**(`offset`, `origin?`): `void` Moves the read/write pointer to a specified offset in the current instance, relative to a specified origin. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`offset` | *number* | - | Byte offset to seek to. Must be a safe, positive integer. | -`origin` | SeekOrigin | ... | Origin from which to seek | +| Name | Type | Description | +| :------ | :------ | :------ | +| `offset` | `number` | Byte offset to seek to. Must be a safe, positive integer. | +| `origin` | `SeekOrigin` | Origin from which to seek | -**Returns:** *void* +#### Returns + +`void` ___ ### truncate -▸ `Protected`**truncate**(`length`: *number*): *void* +▸ `Protected` **truncate**(`length`): `void` Resizes the current instance to a specific number of bytes. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to resize the file to, must be a safe, positive integer. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to resize the file to, must be a safe, positive integer. | +#### Returns -**Returns:** *void* +`void` ___ ### writeBlock -▸ **writeBlock**(`data`: [*ByteVector*](bytevector.md)): *void* +▸ **writeBlock**(`data`): `void` Writes a block of data to the file represented by the current instance at the current seek position. This will overwrite any existing data at the seek position and append new data to @@ -556,67 +616,75 @@ the file if writing past the current end. **`throws`** Error Thrown when `data` is not provided. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing data to the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing data to the current instance. | +#### Returns -**Returns:** *void* +`void` ___ ### addFileType -▸ `Static`**addFileType**(`mimeType`: *string*, `constructor`: [*FileTypeConstructor*](../modules.md#filetypeconstructor), `override?`: *boolean*): *void* +▸ `Static` **addFileType**(`mimeType`, `constructor`, `override?`): `void` Registers the constructor for a subclass of [File](file.md) with the MimeType it is associated with. Optionally, the MimeType can be forcefully overridden if it was already registered. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mimeType` | *string* | - | MimeType to register this subclass constructor to. | -`constructor` | [*FileTypeConstructor*](../modules.md#filetypeconstructor) | - | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | -`override` | *boolean* | false | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mimeType` | `string` | `undefined` | MimeType to register this subclass constructor to. | +| `constructor` | [`FileTypeConstructor`](../modules.md#filetypeconstructor) | `undefined` | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | +| `override` | `boolean` | `false` | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | -**Returns:** *void* +#### Returns + +`void` ___ ### addFileTypeResolver -▸ `Static`**addFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **addFileTypeResolver**(`resolver`): `void` Registers a [FileTypeResolver](../modules.md#filetyperesolver) to the front of the list of file type resolvers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | -Name | Type | Description | ------- | ------ | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | +#### Returns -**Returns:** *void* +`void` ___ ### createFromAbstraction -▸ `Static`**createFromAbstraction**(`abstraction`: IFileAbstraction, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromAbstraction**(`abstraction`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of a [File](file.md) subclass for a specified file abstraction, MimeType, and property read style. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`abstraction` | IFileAbstraction | - | Object to use when reading/writing from the current instance. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | Object to use when reading/writing from the current instance. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | -**Returns:** [*File*](file.md) +#### Returns + +[`File`](file.md) New instance of [File](file.md) as read from the specified abstraction. @@ -624,20 +692,22 @@ ___ ### createFromPath -▸ `Static`**createFromPath**(`filePath`: *string*, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromPath**(`filePath`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of [File](file.md) subclass for a specified file path, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to read/write. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`filePath` | *string* | - | Path to the file to read/write. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified path. @@ -645,30 +715,34 @@ ___ ### removeFileType -▸ `Static`**removeFileType**(`mimeType`: *string*): *void* +▸ `Static` **removeFileType**(`mimeType`): `void` Used for removing a file type constructor during unit testing -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`mimeType` | *string* | +| Name | Type | +| :------ | :------ | +| `mimeType` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### removeFileTypeResolver -▸ `Static`**removeFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **removeFileTypeResolver**(`resolver`): `void` Used for removing a file type resolver during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | -Name | Type | ------- | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/classes/id3v1tag.md b/docs/classes/id3v1tag.md index ea739684..4bda2774 100644 --- a/docs/classes/id3v1tag.md +++ b/docs/classes/id3v1tag.md @@ -6,9 +6,9 @@ Extends [Tag](tag.md) to provide support for reading and writing tags stored in ## Hierarchy -* [*Tag*](tag.md) +- [`Tag`](tag.md) - ↳ **Id3v1Tag** + ↳ **`Id3v1Tag`** ## Table of contents @@ -97,7 +97,7 @@ Extends [Tag](tag.md) to provide support for reading and writing tags stored in ### fileIdentifier -▪ `Readonly` `Static` **fileIdentifier**: [*ByteVector*](bytevector.md) +▪ `Static` `Readonly` **fileIdentifier**: [`ByteVector`](bytevector.md) Identifier used to recognize an ID3v1 tag. @@ -105,7 +105,7 @@ ___ ### size -▪ `Readonly` `Static` **size**: *128*= 128 +▪ `Static` `Readonly` **size**: ``128`` Size of an ID3v1 tag. @@ -113,35 +113,39 @@ Size of an ID3v1 tag. ### album -• **album**(): *string* +• `get` **album**(): `string` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. -**`inheritdoc`** +**`inheritdoc`** -**Returns:** *string* +#### Returns + +`string` Album of the media represented by the current instance or `undefined` if no value is present -• **album**(`value`: *string*): *void* +• `set` **album**(`value`): `void` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** When stored on disk, only the first 30 bytes of the latin-1 encoded value will be stored. This may result in data loss. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Album of the media represented by the current instance or `undefined` if no value is present @@ -150,7 +154,7 @@ ___ ### albumArtists -• **albumArtists**(): *string*[] +• `get` **albumArtists**(): `string`[] Gets the band or artist who is credited credited in the creation of the entire album or collection containing the media described by the current instance. @@ -163,13 +167,15 @@ collection containing the media described by the current instance. than [performers](id3v1tag.md#performers). Where performers can be broken into multiple artists, it is best to stick to a single name. Eg, "Super8 & Tab" -**Returns:** *string*[] +#### Returns + +`string`[] Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present -• **albumArtists**(`value`: *string*[]): *void* +• `set` **albumArtists**(`value`): `void` Sets the bands or artists who is credited credited in the creation of the entire album or collection containing the media described by the current instance. @@ -182,13 +188,15 @@ collection containing the media described by the current instance. than [performers](id3v1tag.md#performers). Where performers can be broken into multiple artists, it is best to stick to a single name. Eg, "Super8 & Tab" -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present | +#### Returns -**Returns:** *void* +`void` Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is @@ -198,7 +206,7 @@ ___ ### albumArtistsSort -• **albumArtistsSort**(): *string*[] +• `get` **albumArtistsSort**(): `string`[] Gets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. @@ -212,13 +220,15 @@ album or collection containing the media described by the current instance. [performers](id3v1tag.md#performers). Where [performers](id3v1tag.md#performers) can be broken into multiple performers, it is best to stick to a single album artist. Eg, "Van Buuren, Armin" -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. -• **albumArtistsSort**(`value`: *string*[]): *void* +• `set` **albumArtistsSort**(`value`): `void` Sets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. @@ -232,13 +242,15 @@ album or collection containing the media described by the current instance. [performers](id3v1tag.md#performers). Where [performers](id3v1tag.md#performers) can be broken into multiple performers, it is best to stick to a single album artist. Eg, "Van Buuren, Armin" -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty @@ -248,7 +260,7 @@ ___ ### albumSort -• **albumSort**(): *string* +• `get` **albumSort**(): `string` Gets the sortable name of the album title of the media represented by the current instance. @@ -257,12 +269,14 @@ Gets the sortable name of the album title of the media represented by the curren **`remarks`** This field is typically optional but aids in sort of compilations or albums with similar titles. -**Returns:** *string* +#### Returns + +`string` Sortable name for the album title of the media or `undefined` if the value is not present -• **albumSort**(`value`: *string*): *void* +• `set` **albumSort**(`value`): `void` Sets the sortable name of the album title of the media represented by the current instance. @@ -271,13 +285,15 @@ Sets the sortable name of the album title of the media represented by the curren **`remarks`** This field is typically optional but aids in sort of compilations or albums with similar titles. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name for the album title of the media or `undefined` if the value is not present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Sortable name for the album title of the media or `undefined` if the value is not present | +#### Returns -**Returns:** *void* +`void` Sortable name for the album title of the media or `undefined` if the value is not present @@ -286,32 +302,36 @@ ___ ### amazonId -• **amazonId**(): *string* +• `get` **amazonId**(): `string` Gets the Amazon ID of the media represented by the current instance. **`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely identify the particular track or album in the Amazon catalog. -**Returns:** *string* +#### Returns + +`string` Amazon ID of the media represented by the current instance or `undefined` if no value is present -• **amazonId**(`value`: *string*): *void* +• `set` **amazonId**(`value`): `void` Sets the Amazon ID of the media represented by the current instance. **`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely identify the particular track or album in the Amazon catalog. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Amazon ID of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Amazon ID of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Amazon ID of the media represented by the current instance or `undefined` if no value is present @@ -320,7 +340,7 @@ ___ ### beatsPerMinute -• **beatsPerMinute**(): *number* +• `get` **beatsPerMinute**(): `number` Gets the number of beats per minute in the audio of the media represented by the current instance. @@ -328,12 +348,14 @@ instance. **`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be calculated from the audio or pulled from a database. -**Returns:** *number* +#### Returns + +`number` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified -• **beatsPerMinute**(`value`: *number*): *void* +• `set` **beatsPerMinute**(`value`): `void` Sets the number of beats per minute in the audio of the media represented by the current instance. @@ -341,13 +363,15 @@ instance. **`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be calculated from the audio or pulled from a database. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Beats per minute of the audio in the media represented by the current instance, or `0` if not specified | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Beats per minute of the audio in the media represented by the current instance, or `0` if not specified | +#### Returns -**Returns:** *void* +`void` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified @@ -356,33 +380,37 @@ ___ ### comment -• **comment**(): *string* +• `get` **comment**(): `string` Gets a user comment on the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** -**Returns:** *string* +#### Returns + +`string` User comments on the media represented by the current instance or `undefined` if the value is not present -• **comment**(`value`: *string*): *void* +• `set` **comment**(`value`): `void` Gets a user comment on the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** When stored on disk, only the first 28 bytes of the latin-1 encoded value will be stored. This may result in lost data. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` User comments on the media represented by the current instance or `undefined` if the value is not present @@ -391,32 +419,36 @@ ___ ### composers -• **composers**(): *string*[] +• `get` **composers**(): `string`[] Gets the composers of the media represented by the current instance. **`remarks`** This field represents the composers, song writers, script writers, or persons who claim authorship of the media. -**Returns:** *string*[] +#### Returns + +`string`[] Composers of the media represented by the current instance of an empty array if no value is present. -• **composers**(`value`: *string*[]): *void* +• `set` **composers**(`value`): `void` Sets the composers of the media represented by the current instance. **`remarks`** This field represents the composers, song writers, script writers, or persons who claim authorship of the media. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Composers of the media represented by the current instance of an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Composers of the media represented by the current instance of an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Composers of the media represented by the current instance of an empty array if no value is present. @@ -425,7 +457,7 @@ ___ ### composersSort -• **composersSort**(): *string*[] +• `get` **composersSort**(): `string`[] Gets the sortable names of the composers of the media represented by the current instance. @@ -434,12 +466,14 @@ Gets the sortable names of the composers of the media represented by the current **`remarks`** This field is typically optional but aids in the sorting of compilations or albums with multiple composers. -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. -• **composersSort**(`value`: *string*[]): *void* +• `set` **composersSort**(`value`): `void` Sets the sortable names of the composers of the media represented by the current instance. @@ -448,13 +482,15 @@ Sets the sortable names of the composers of the media represented by the current **`remarks`** This field is typically optional but aids in the sorting of compilations or albums with multiple composers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. @@ -463,30 +499,34 @@ ___ ### conductor -• **conductor**(): *string* +• `get` **conductor**(): `string` Gets the conductor or director of the media represented by the current instance. **`remarks`** This field is most useful for organizing classical music and movies. -**Returns:** *string* +#### Returns + +`string` Conductor or director of the media represented by the current instance or `undefined` if no value present. -• **conductor**(`value`: *string*): *void* +• `set` **conductor**(`value`): `void` Sets the conductor or director of the media represented by the current instance. **`remarks`** This field is most useful for organizing classical music and movies. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Conductor or director of the media represented by the current instance or `undefined` if no value present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Conductor or director of the media represented by the current instance or `undefined` if no value present. | +#### Returns -**Returns:** *void* +`void` Conductor or director of the media represented by the current instance or `undefined` if no value present. @@ -495,7 +535,7 @@ ___ ### copyright -• **copyright**(): *string* +• `get` **copyright**(): `string` Gets the copyright information for the media represented by the current instance. @@ -504,12 +544,14 @@ Gets the copyright information for the media represented by the current instance Players should not support editing this field, but media creation tools should definitely allow modification. -**Returns:** *string* +#### Returns + +`string` Copyright information for the media represented by the current instance or `undefined` if no value is present. -• **copyright**(`value`: *string*): *void* +• `set` **copyright**(`value`): `void` Sets the copyright information for the media represented by the current instance. @@ -518,13 +560,15 @@ Sets the copyright information for the media represented by the current instance Players should not support editing this field, but media creation tools should definitely allow modification. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Copyright information for the media represented by the current instance or `undefined` if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Copyright information for the media represented by the current instance or `undefined` if no value is present. | +#### Returns -**Returns:** *void* +`void` Copyright information for the media represented by the current instance or `undefined` if no value is present. @@ -533,25 +577,29 @@ ___ ### dateTagged -• **dateTagged**(): Date +• `get` **dateTagged**(): `Date` Gets the date and time at which the tag has been written. -**Returns:** Date +#### Returns + +`Date` Date/time at which the tag has been written, or `undefined` if no value is present -• **dateTagged**(`value`: Date): *void* +• `set` **dateTagged**(`value`): `void` Sets the date and time at which the tag has been written. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `Date` | Date/time at which the tag has been written, or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | Date | Date/time at which the tag has been written, or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Date/time at which the tag has been written, or `undefined` if no value is present @@ -559,7 +607,7 @@ ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but @@ -569,12 +617,14 @@ generally no spoliers. This should give the impression of what to expect in the Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las Vegas for a series of psychedelic escapades." -**Returns:** *string* +#### Returns + +`string` Description of the media represented by the current instance or `undefined` if no value is present -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but @@ -584,13 +634,15 @@ generally no spoliers. This should give the impression of what to expect in the Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las Vegas for a series of psychedelic escapades." -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Description of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Description of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Description of the media represented by the current instance or `undefined` if no value is present @@ -599,7 +651,7 @@ ___ ### disc -• **disc**(): *number* +• `get` **disc**(): `number` Gets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. @@ -608,12 +660,14 @@ boxed set. For a series, this represents the season number. the disc is the first of three, the value should be `1`. It should be no more than [discCount](id3v1tag.md#disccount) if [discCount](id3v1tag.md#disccount) is non-zero. -**Returns:** *number* +#### Returns + +`number` Number of the disc or season of the media represented by the current instance in a boxed set. -• **disc**(`value`: *number*): *void* +• `set` **disc**(`value`): `void` Sets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. @@ -622,13 +676,15 @@ boxed set. For a series, this represents the season number. the disc is the first of three, the value should be `1`. It should be no more than [discCount](id3v1tag.md#disccount) if [discCount](id3v1tag.md#disccount) is non-zero. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of the disc or season of the media represented by the current instance in a boxed set. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Number of the disc or season of the media represented by the current instance in a boxed set. | +#### Returns -**Returns:** *void* +`void` Number of the disc or season of the media represented by the current instance in a boxed set. @@ -637,7 +693,7 @@ ___ ### discCount -• **discCount**(): *number* +• `get` **discCount**(): `number` Gets the number of discs or seasons in the boxed set containing the media represented by the current instance. @@ -645,12 +701,14 @@ current instance. **`remarks`** If non-zero, this should be at least equal to [disc](id3v1tag.md#disc). If [disc](id3v1tag.md#disc) is zero, this value should also be zero. -**Returns:** *number* +#### Returns + +`number` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. -• **discCount**(`value`: *number*): *void* +• `set` **discCount**(`value`): `void` Sets the number of discs or seasons in the boxed set containing the media represented by the current instance. @@ -658,13 +716,15 @@ current instance. **`remarks`** If non-zero, this should be at least equal to [disc](id3v1tag.md#disc). If [disc](id3v1tag.md#disc) is zero, this value should also be zero. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. | +#### Returns -**Returns:** *void* +`void` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. @@ -673,103 +733,121 @@ ___ ### firstAlbumArtist -• **firstAlbumArtist**(): *string* +• `get` **firstAlbumArtist**(): `string` Gets the the first value contained in [albumArtists](id3v1tag.md#albumartists). -**Returns:** *string* +#### Returns + +`string` ___ ### firstAlbumArtistSort -• **firstAlbumArtistSort**(): *string* +• `get` **firstAlbumArtistSort**(): `string` Gets the first value contained in [albumArtistsSort](id3v1tag.md#albumartistssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposer -• **firstComposer**(): *string* +• `get` **firstComposer**(): `string` Gets the first value contained in [composers](id3v1tag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposerSort -• **firstComposerSort**(): *string* +• `get` **firstComposerSort**(): `string` Gets the first value contained in [composersSort](id3v1tag.md#composerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstGenre -• **firstGenre**(): *string* +• `get` **firstGenre**(): `string` Gets the first value contained in [genres](id3v1tag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformer -• **firstPerformer**(): *string* +• `get` **firstPerformer**(): `string` Gets the first value contained in [performers](id3v1tag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformerSort -• **firstPerformerSort**(): *string* +• `get` **firstPerformerSort**(): `string` Gets the first value contained in [performersSort](id3v1tag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### genres -• **genres**(): *string*[] +• `get` **genres**(): `string`[] Gets the genres of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** -**Returns:** *string*[] +#### Returns + +`string`[] Genres of the media represented by the current instance or an empty array if no value is present. -• **genres**(`value`: *string*[]): *void* +• `set` **genres**(`value`): `void` Gets the genres of the media represented by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** Only first genre will be stored and only if it is an exact match for a value in the list of audio genres. All other values will result in the property being cleared. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Genres of the media represented by the current instance or an empty array if no value is present. @@ -778,7 +856,7 @@ ___ ### grouping -• **grouping**(): *string* +• `get` **grouping**(): `string` Gets the grouping on the album which the media in the current instance belongs to. @@ -786,12 +864,14 @@ Gets the grouping on the album which the media in the current instance belongs t music this could be a movement. It could also be parts of a series like "Introduction", "Closing Remarks", etc. -**Returns:** *string* +#### Returns + +`string` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. -• **grouping**(`value`: *string*): *void* +• `set` **grouping**(`value`): `void` Sets the grouping on the album which the media in the current instance belongs to. @@ -799,13 +879,15 @@ Sets the grouping on the album which the media in the current instance belongs t music this could be a movement. It could also be parts of a series like "Introduction", "Closing Remarks", etc. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. | +#### Returns -**Returns:** *void* +`void` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. @@ -814,25 +896,29 @@ ___ ### initialKey -• **initialKey**(): *string* +• `get` **initialKey**(): `string` Gets the initial key of the track. -**Returns:** *string* +#### Returns + +`string` Initial key of the track or `undefined` if no value is set -• **initialKey**(`value`: *string*): *void* +• `set` **initialKey**(`value`): `void` Sets the initial key of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Initial key of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Initial key of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` Initial key of the track or `undefined` if no value is set @@ -840,14 +926,16 @@ ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Gets whether or not the current instance is empty. **`remarks`** In the default implementation, this checks the values supported by [Tag](tag.md), but it may be extended by child classes to support other values. -**Returns:** *boolean* +#### Returns + +`boolean` `true` if the current instance does not contain any values. `false` otherwise @@ -855,25 +943,29 @@ ___ ### isrc -• **isrc**(): *string* +• `get` **isrc**(): `string` Gets the ISRC (International Standard Recording Code) of the track. -**Returns:** *string* +#### Returns + +`string` the ISRC of the track or `undefined` if no value is set -• **isrc**(`value`: *string*): *void* +• `set` **isrc**(`value`): `void` Sets the ISRC (International Standard Recording Code) of the track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | the ISRC of the track or `undefined` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | the ISRC of the track or `undefined` if no value is set | -**Returns:** *void* +#### Returns + +`void` the ISRC of the track or `undefined` if no value is set @@ -881,57 +973,67 @@ ___ ### joinedAlbumArtists -• **joinedAlbumArtists**(): *string* +• `get` **joinedAlbumArtists**(): `string` Gets a semicolon and space separated string containing the values in [albumArtists](id3v1tag.md#albumartists) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedComposers -• **joinedComposers**(): *string* +• `get` **joinedComposers**(): `string` Gets a semicolon and space separated string containing the values in [composers](id3v1tag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedGenres -• **joinedGenres**(): *string* +• `get` **joinedGenres**(): `string` Gets a semicolon and space separated string containing the values in [genres](id3v1tag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformers -• **joinedPerformers**(): *string* +• `get` **joinedPerformers**(): `string` Gets a semicolon and space separated string containing the values in [performers](id3v1tag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformersSort -• **joinedPerformersSort**(): *string* +• `get` **joinedPerformersSort**(): `string` Gets a semicolon and space separated string containing the values in [performersSort](id3v1tag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### lyrics -• **lyrics**(): *string* +• `get` **lyrics**(): `string` Gets the lyrics or script of the media represented by the current instance. @@ -940,12 +1042,14 @@ Gets the lyrics or script of the media represented by the current instance. Some formats support more advanced lyrics, like synchronized lyrics, but those must be accessed using format-specific implementations. -**Returns:** *string* +#### Returns + +`string` Lyrics or script of the media represented by the current instance or `undefined` if no value is present -• **lyrics**(`value`: *string*): *void* +• `set` **lyrics**(`value`): `void` Sets the lyrics or script of the media represented by the current instance. @@ -954,13 +1058,15 @@ Sets the lyrics or script of the media represented by the current instance. Some formats support more advanced lyrics, like synchronized lyrics, but those must be accessed using format-specific implementations. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Lyrics or script of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Lyrics or script of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Lyrics or script of the media represented by the current instance or `undefined` if no value is present @@ -969,32 +1075,36 @@ ___ ### musicBrainzArtistId -• **musicBrainzArtistId**(): *string* +• `get` **musicBrainzArtistId**(): `string` Gets the MusicBrainz artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a particular artist of the track. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzArtistId**(`value`: *string*): *void* +• `set` **musicBrainzArtistId**(`value`): `void` Sets the MusicBrainz artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a particular artist of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present @@ -1003,32 +1113,36 @@ ___ ### musicBrainzDiscId -• **musicBrainzDiscId**(): *string* +• `get` **musicBrainzDiscId**(): `string` Gets the MusicBrainz disc ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the particular released media associated with this track. -**Returns:** *string* +#### Returns + +`string` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzDiscId**(`value`: *string*): *void* +• `set` **musicBrainzDiscId**(`value`): `void` Sets the MusicBrainz disc ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the particular released media associated with this track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present @@ -1037,32 +1151,36 @@ ___ ### musicBrainzReleaseArtistId -• **musicBrainzReleaseArtistId**(): *string* +• `get` **musicBrainzReleaseArtistId**(): `string` Gets the MusicBrainz release artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely identify a particular album artist credited with the album. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseArtistId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseArtistId**(`value`): `void` Sets the MusicBrainz release artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely identify a particular album artist credited with the album. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present @@ -1071,7 +1189,7 @@ ___ ### musicBrainzReleaseCountry -• **musicBrainzReleaseCountry**(): *string* +• `get` **musicBrainzReleaseCountry**(): `string` Gets the MusicBrainz release country of the media represented by the current instance. @@ -1081,12 +1199,14 @@ Gets the MusicBrainz release country of the media represented by the current ins more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on it will likely be a UK release. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseCountry**(`value`: *string*): *void* +• `set` **musicBrainzReleaseCountry**(`value`): `void` Sets the MusicBrainz release country of the media represented by the current instance. @@ -1096,13 +1216,15 @@ Sets the MusicBrainz release country of the media represented by the current ins more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on it will likely be a UK release. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present @@ -1111,32 +1233,36 @@ ___ ### musicBrainzReleaseGroupId -• **musicBrainzReleaseGroupId**(): *string* +• `get` **musicBrainzReleaseGroupId**(): `string` Gets the MusicBrainz release group ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify a particular release group to which this track belongs. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseGroupId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseGroupId**(`value`): `void` Sets the MusicBrainz release group ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify a particular release group to which this track belongs. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present @@ -1145,32 +1271,36 @@ ___ ### musicBrainzReleaseId -• **musicBrainzReleaseId**(): *string* +• `get` **musicBrainzReleaseId**(): `string` Gets the MusicBrainz release ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a particular release to which this track belongs. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseId**(`value`): `void` Sets the MusicBrainz release ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a particular release to which this track belongs. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present @@ -1179,32 +1309,36 @@ ___ ### musicBrainzReleaseStatus -• **musicBrainzReleaseStatus**(): *string* +• `get` **musicBrainzReleaseStatus**(): `string` Gets the MusicBrainz release status of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseStatus**(`value`: *string*): *void* +• `set` **musicBrainzReleaseStatus**(`value`): `void` Sets the MusicBrainz release status of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present @@ -1213,7 +1347,7 @@ ___ ### musicBrainzReleaseType -• **musicBrainzReleaseType**(): *string* +• `get` **musicBrainzReleaseType**(): `string` Gets the MusicBrainz release type of the media represented by the current instance. @@ -1222,12 +1356,14 @@ Gets the MusicBrainz release type of the media represented by the current instan `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought must be given when using this field to decide if a particular track "is a compilation". -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseType**(`value`: *string*): *void* +• `set` **musicBrainzReleaseType**(`value`): `void` Sets the MusicBrainz release type of the media represented by the current instance. @@ -1236,13 +1372,15 @@ Sets the MusicBrainz release type of the media represented by the current instan `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought must be given when using this field to decide if a particular track "is a compilation". -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present @@ -1251,7 +1389,7 @@ ___ ### musicBrainzTrackId -• **musicBrainzTrackId**(): *string* +• `get` **musicBrainzTrackId**(): `string` Gets the MusicBrainz track ID of the media represented by the media represented by the current instance. @@ -1259,12 +1397,14 @@ current instance. **`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a particular track. -**Returns:** *string* +#### Returns + +`string` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzTrackId**(`value`: *string*): *void* +• `set` **musicBrainzTrackId**(`value`): `void` Sets the MusicBrainz track ID of the media represented by the media represented by the current instance. @@ -1272,13 +1412,15 @@ current instance. **`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a particular track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present @@ -1287,32 +1429,36 @@ ___ ### musicIpId -• **musicIpId**(): *string* +• `get` **musicIpId**(): `string` Gets the MusicIP PUID of the media represented by the current instance. **`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It identifies wht this track "sounds like". -**Returns:** *string* +#### Returns + +`string` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present -• **musicIpId**(`value`: *string*): *void* +• `set` **musicIpId**(`value`): `void` Sets the MusicIP PUID of the media represented by the current instance. **`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It identifies wht this track "sounds like". -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicIP PUID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicIP PUID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present @@ -1321,34 +1467,38 @@ ___ ### performers -• **performers**(): *string*[] +• `get` **performers**(): `string`[] Gets the performers or artists who performed in the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** *string*[] +`string`[] Performers who performed in the media described by the current instance or an empty array if no value is present. -• **performers**(`value`: *string*[]): *void* +• `set` **performers**(`value`): `void` Gets the performers or artists who performed in the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** When stored on disk, only the first 30 bytes of the latin-1 encoded value will be stored, minus a byte for each additional performer (ie, two performers will only have 29 bytes and three performers will only have 28 bytes). This may result in data loss. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Performers who performed in the media described by the current instance or an empty array if no value is present. @@ -1357,7 +1507,7 @@ ___ ### performersRole -• **performersRole**(): *string*[] +• `get` **performersRole**(): `string`[] Gets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](id3v1tag.md#performers) array (for each person, correspond one/more @@ -1368,12 +1518,14 @@ example: "Bass; Backing Vocals; Vibraphone". in the [performersRole](id3v1tag.md#performersrole) array is `undefined` to maintain the relationship between `performers[i]` and `performersRole[i]`. -**Returns:** *string*[] +#### Returns + +`string`[] Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. -• **performersRole**(`value`: *string*[]): *void* +• `set` **performersRole**(`value`): `void` Sets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](id3v1tag.md#performers) array (for each person, correspond one/more @@ -1384,13 +1536,15 @@ example: "Bass; Backing Vocals; Vibraphone". in the [performersRole](id3v1tag.md#performersrole) array is `undefined` to maintain the relationship between `performers[i]` and `performersRole[i]`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | -**Returns:** *void* +#### Returns + +`void` Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. @@ -1399,7 +1553,7 @@ ___ ### performersSort -• **performersSort**(): *string*[] +• `get` **performersSort**(): `string`[] Gets the sortable names of the performers or artists who performed in the media described by the current instance. @@ -1410,12 +1564,14 @@ the current instance. **`see`** performers -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. -• **performersSort**(`value`: *string*[]): *void* +• `set` **performersSort**(`value`): `void` Gets the sortable names of the performers or artists who performed in the media described by the current instance. @@ -1426,13 +1582,15 @@ the current instance. **`see`** performers -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. | -**Returns:** *void* +#### Returns + +`void` Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. @@ -1441,7 +1599,7 @@ ___ ### pictures -• **pictures**(): [*IPicture*](../interfaces/ipicture.md)[] +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] Gets a collection of pictures associated with the media represented by the current instance. @@ -1449,12 +1607,14 @@ Gets a collection of pictures associated with the media represented by the curre it is capable of holding any type of image or file, including pictures of the band, the recording studio, the concert, etc. -**Returns:** [*IPicture*](../interfaces/ipicture.md)[] +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. -• **pictures**(`value`: [*IPicture*](../interfaces/ipicture.md)[]): *void* +• `set` **pictures**(`value`): `void` Sets a collection of pictures associated with the media represented by the current instance. @@ -1462,13 +1622,15 @@ Sets a collection of pictures associated with the media represented by the curre it is capable of holding any type of image or file, including pictures of the band, the recording studio, the concert, etc. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | [*IPicture*](../interfaces/ipicture.md)[] | Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. | -**Returns:** *void* +#### Returns + +`void` Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. @@ -1477,25 +1639,29 @@ ___ ### publisher -• **publisher**(): *string* +• `get` **publisher**(): `string` Gets the publisher of the track. -**Returns:** *string* +#### Returns + +`string` Publisher of the track or `undefined` if no value is set -• **publisher**(`value`: *string*): *void* +• `set` **publisher**(`value`): `void` Sets the publisher of the track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Publisher of the track or `undefined` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Publisher of the track or `undefined` if no value is set | -**Returns:** *void* +#### Returns + +`void` Publisher of the track or `undefined` if no value is set @@ -1503,25 +1669,29 @@ ___ ### remixedBy -• **remixedBy**(): *string* +• `get` **remixedBy**(): `string` Gets the remixer of the track. -**Returns:** *string* +#### Returns + +`string` Remixer of the track or `undefined` if no value is set -• **remixedBy**(`value`: *string*): *void* +• `set` **remixedBy**(`value`): `void` Sets the remixer of the track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Remixer of the track or `undefined` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Remixer of the track or `undefined` if no value is set | -**Returns:** *void* +#### Returns + +`void` Remixer of the track or `undefined` if no value is set @@ -1529,25 +1699,29 @@ ___ ### replayGainAlbumGain -• **replayGainAlbumGain**(): *number* +• `get` **replayGainAlbumGain**(): `number` Gets the ReplayGain album gain in dB. -**Returns:** *number* +#### Returns + +`number` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainAlbumGain**(`value`: *number*): *void* +• `set` **replayGainAlbumGain**(`value`): `void` Sets the ReplayGain album gain in dB. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set | -**Returns:** *void* +#### Returns + +`void` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1555,25 +1729,29 @@ ___ ### replayGainAlbumPeak -• **replayGainAlbumPeak**(): *number* +• `get` **replayGainAlbumPeak**(): `number` Gets the ReplayGain album peak sample. -**Returns:** *number* +#### Returns + +`number` Album peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainAlbumPeak**(`value`: *number*): *void* +• `set` **replayGainAlbumPeak**(`value`): `void` Sets the ReplayGain album peak sample. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Album peak as per the ReplayGain specifications, or `NaN` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album peak as per the ReplayGain specifications, or `NaN` if no value is set | -**Returns:** *void* +#### Returns + +`void` Album peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1581,25 +1759,29 @@ ___ ### replayGainTrackGain -• **replayGainTrackGain**(): *number* +• `get` **replayGainTrackGain**(): `number` Gets the ReplayGain track gain in dB. -**Returns:** *number* +#### Returns + +`number` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainTrackGain**(`value`: *number*): *void* +• `set` **replayGainTrackGain**(`value`): `void` Sets the ReplayGain track gain in dB. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set | -**Returns:** *void* +#### Returns + +`void` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1607,25 +1789,29 @@ ___ ### replayGainTrackPeak -• **replayGainTrackPeak**(): *number* +• `get` **replayGainTrackPeak**(): `number` Gets the ReplayGain track peak sample. -**Returns:** *number* +#### Returns + +`number` Track peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainTrackPeak**(`value`: *number*): *void* +• `set` **replayGainTrackPeak**(`value`): `void` Sets the ReplayGain track peak sample. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track peak as per the ReplayGain specifications, or `NaN` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Track peak as per the ReplayGain specifications, or `NaN` if no value is set | +#### Returns -**Returns:** *void* +`void` Track peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1633,7 +1819,7 @@ ___ ### subtitle -• **subtitle**(): *string* +• `get` **subtitle**(): `string` Gets a description, one-line. It represents the tagline of the vide/music. @@ -1641,12 +1827,14 @@ Gets a description, one-line. It represents the tagline of the vide/music. title on the front cover of the media. For example for "Ocean's 13", this would be "Revenge is a funny thing". -**Returns:** *string* +#### Returns + +`string` Subtitle of the media represented by the current instance or `undefined` if no value is present -• **subtitle**(`value`: *string*): *void* +• `set` **subtitle**(`value`): `void` Sets a description, one-line. It represents the tagline of the vide/music. @@ -1654,13 +1842,15 @@ Sets a description, one-line. It represents the tagline of the vide/music. title on the front cover of the media. For example for "Ocean's 13", this would be "Revenge is a funny thing". -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Subtitle of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Subtitle of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Subtitle of the media represented by the current instance or `undefined` if no value is present @@ -1669,44 +1859,50 @@ ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. A bit wise combined [TagTypes](../enums/tagtypes.md) containing the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### title -• **title**(): *string* +• `get` **title**(): `string` Gets the title for the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** *string* +`string` Title of the media described by the current instance or `undefined` if no value is present. -• **title**(`value`: *string*): *void* +• `set` **title**(`value`): `void` Gets the title for the media described by the current instance. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** When stored on disk, only the first 30 bytes of the latin-1 encoded value will be stored. This may result in lost data. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Title of the media described by the current instance or `undefined` if no value is present. @@ -1715,30 +1911,34 @@ ___ ### titleSort -• **titleSort**(): *string* +• `get` **titleSort**(): `string` Gets the sortable name for the title of the media described by the current instance. **`remarks`** Possibly used to sort compilations or episodic content. -**Returns:** *string* +#### Returns + +`string` Sortable name of the media described by the current instance or `undefined` if no value is present -• **titleSort**(`value`: *string*): *void* +• `set` **titleSort**(`value`): `void` Sets the sortable name for the title of the media described by the current instance. **`remarks`** Possibly used to sort compilations or episodic content. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Sortable name of the media described by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name of the media described by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` Sortable name of the media described by the current instance or `undefined` if no value is present @@ -1747,35 +1947,39 @@ ___ ### track -• **track**(): *number* +• `get` **track**(): `number` Gets the position of the media represented by the current instance in its containing album or season (for a series). -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** *number* +`number` Position of the media represented by the current instance in its containing album or `0` if not specified. -• **track**(`value`: *number*): *void* +• `set` **track**(`value`): `void` Gets the position of the media represented by the current instance in its containing album or season (for a series). -**`inheritdoc`** +**`inheritdoc`** **`remarks`** Only values betweenInclusive 1 and 255 will be stored. All other values will result in the property being zeroed. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Position of the media represented by the current instance in its containing album or `0` if not specified. @@ -1784,7 +1988,7 @@ ___ ### trackCount -• **trackCount**(): *number* +• `get` **trackCount**(): `number` Gets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. @@ -1792,12 +1996,14 @@ represented by the current instance. **`remarks`** If non-zero, this value should be equal to or greater than [track](id3v1tag.md#track). If [track](id3v1tag.md#track) is `0`, this value should also be `0`. -**Returns:** *number* +#### Returns + +`number` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. -• **trackCount**(`value`: *number*): *void* +• `set` **trackCount**(`value`): `void` Sets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. @@ -1805,13 +2011,15 @@ represented by the current instance. **`remarks`** If non-zero, this value should be equal to or greater than [track](id3v1tag.md#track). If [track](id3v1tag.md#track) is `0`, this value should also be `0`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. | -**Returns:** *void* +#### Returns + +`void` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. @@ -1820,33 +2028,37 @@ ___ ### year -• **year**(): *number* +• `get` **year**(): `number` Gets the year that the media represented by the current instance was recorded. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** *number* +`number` Year that the media represented by the current instance was created or `0` if no value is present. -• **year**(`value`: *number*): *void* +• `set` **year**(`value`): `void` Gets the year that the media represented by the current instance was recorded. -**`inheritdoc`** +**`inheritdoc`** **`remarks`** Only values betweenInclusive 1 and 9999 will be stored. All other values will result in the property being zeroed. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Year that the media represented by the current instance was created or `0` if no value is present. @@ -1855,19 +2067,25 @@ Year that the media represented by the current instance was created or `0` if no ### clear -▸ **clear**(): *void* +▸ **clear**(): `void` + +Clears all values stored in the current instance. + +**`remarks`** The clearing procedure is format specific and should clear all values. -**`inheritdoc`** +#### Returns -**Returns:** *void* +`void` -Overrides: [Tag](tag.md) +#### Overrides + +[Tag](tag.md).[clear](tag.md#clear) ___ ### copyTo -▸ **copyTo**(`target`: [*Tag*](tag.md), `overwrite`: *boolean*): *void* +▸ **copyTo**(`target`, `overwrite`): `void` Copies the values from the current instance to another [Tag](tag.md), optionally overwriting existing values. @@ -1877,140 +2095,168 @@ Copies the values from the current instance to another [Tag](tag.md), optionally more advanced copying may be done. For example if both `this` and `target` are [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | -Name | Type | Description | ------- | ------ | ------ | -`target` | [*Tag*](tag.md) | Target tag to copy values to | -`overwrite` | *boolean* | Whether or not to copy values over existing ones | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[copyTo](tag.md#copyto) ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) Renders the current instance as a raw ID3v1 tag. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### setInfoTag -▸ **setInfoTag**(): *void* +▸ **setInfoTag**(): `void` Set the tags that represent the tagger software (node-taglib-sharp) itself. **`remarks`** This is typically a method to call just before saving a tag. -**Returns:** *void* +#### Returns -Inherited from: [Tag](tag.md) +`void` + +#### Inherited from + +[Tag](tag.md).[setInfoTag](tag.md#setinfotag) ___ ### firstInGroup -▸ `Protected` `Static`**firstInGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **firstInGroup**(`group`): `string` Gets the first string in an array. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of strings to get the first string from. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | -**Returns:** *string* +#### Returns + +`string` First string contained in `group` or `undefined` if the array is `undefined` or empty -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[firstInGroup](tag.md#firstingroup) ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*Id3v1Tag*](id3v1tag.md) +▸ `Static` **fromData**(`data`): [`Id3v1Tag`](id3v1tag.md) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | -**Returns:** [*Id3v1Tag*](id3v1tag.md) +#### Returns + +[`Id3v1Tag`](id3v1tag.md) ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*Id3v1Tag*](id3v1tag.md) +▸ `Static` **fromEmpty**(): [`Id3v1Tag`](id3v1tag.md) Constructs and initializes a new instance of [Id3v1Tag](id3v1tag.md) with no contents. -**Returns:** [*Id3v1Tag*](id3v1tag.md) +#### Returns + +[`Id3v1Tag`](id3v1tag.md) ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*): [*Id3v1Tag*](id3v1tag.md) +▸ `Static` **fromFile**(`file`, `position`): [`Id3v1Tag`](id3v1tag.md) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`file` | [*File*](file.md) | -`position` | *number* | +| Name | Type | +| :------ | :------ | +| `file` | [`File`](file.md) | +| `position` | `number` | -**Returns:** [*Id3v1Tag*](id3v1tag.md) +#### Returns + +[`Id3v1Tag`](id3v1tag.md) ___ ### isFalsyOrLikeEmpty -▸ `Protected` `Static`**isFalsyOrLikeEmpty**(`value`: *string* \| *string*[]): *boolean* +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` Checks if a value is falsy or empty. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* \| *string*[] | Object to check | +#### Returns -**Returns:** *boolean* +`boolean` If `value` is a string, `true` is returned if the value is falsy or all whitespace, `false` is returned otherwise. If `value` is an array of strings, the array must be falsy or all elements must be falsy or whitespace to return `true`. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[isFalsyOrLikeEmpty](tag.md#isfalsyorlikeempty) ___ ### joinGroup -▸ `Protected` `Static`**joinGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **joinGroup**(`group`): `string` Joins an array of string into a single, semicolon and space separated string. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of string to join | +#### Returns -**Returns:** *string* +`string` A semicolon and space separated string containing the values from `group` or undefined if the array is `undefined` or empty. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[joinGroup](tag.md#joingroup) diff --git a/docs/classes/id3v2attachmentframe.md b/docs/classes/id3v2attachmentframe.md index 734e9ef8..157000e3 100644 --- a/docs/classes/id3v2attachmentframe.md +++ b/docs/classes/id3v2attachmentframe.md @@ -4,13 +4,13 @@ ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2AttachmentFrame** + ↳ **`Id3v2AttachmentFrame`** ## Implements -* [*IPicture*](../interfaces/ipicture.md) +- [`IPicture`](../interfaces/ipicture.md) ## Table of contents @@ -53,87 +53,109 @@ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### data -• **data**(): [*ByteVector*](bytevector.md) +• `get` **data**(): [`ByteVector`](bytevector.md) Gets the image data stored in the current instance. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) -Implementation of: [IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) +#### Implementation of -• **data**(`value`: [*ByteVector*](bytevector.md)): *void* +[IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) + +• `set` **data**(`value`): `void` Sets the image data stored in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`ByteVector`](bytevector.md) | -Name | Type | ------- | ------ | -`value` | [*ByteVector*](bytevector.md) | +#### Returns -**Returns:** *void* +`void` -Implementation of: [IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets the description stored in the current instance. -**Returns:** *string* +#### Returns + +`string` + +#### Implementation of -Implementation of: [IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) +[IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets the description stored in the current instance. There should only be one frame with a matching description and type per tag. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns -Implementation of: [IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) +`void` + +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) ___ ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -142,71 +164,87 @@ ___ ### filename -• **filename**(): *string* +• `get` **filename**(): `string` Gets a filename of the picture stored in the current instance. -**Returns:** *string* +#### Returns -Implementation of: [IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) +`string` -• **filename**(`value`: *string*): *void* +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) + +• `set` **filename**(`value`): `void` Sets a filename of the picture stored in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` -Implementation of: [IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2attachmentframe.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -214,26 +252,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -242,249 +284,310 @@ ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets the MimeType of the picture stored in the current instance. -**Returns:** *string* +#### Returns -Implementation of: [IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) +`string` -• **mimeType**(`value`: *string*): *void* +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) + +• `set` **mimeType**(`value`): `void` Sets the MimeType of the picture stored in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MimeType of the picture stored in the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MimeType of the picture stored in the current instance. | +#### Returns -**Returns:** *void* +`void` -Implementation of: [IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when storing the current instance. **`value`** Text encoding to use when storing the current instance. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when storing the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | [*StringType*](../enums/stringtype.md) | Text encoding to use when storing the current instance. This encoding is overridden when rendering if [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true` or the render version does not support it. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | Text encoding to use when storing the current instance. This encoding is overridden when rendering if [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true` or the render version does not support it. | -**Returns:** *void* +#### Returns + +`void` ___ ### type -• **type**(): [*PictureType*](../enums/picturetype.md) +• `get` **type**(): [`PictureType`](../enums/picturetype.md) Gets the object type stored in the current instance. -**Returns:** [*PictureType*](../enums/picturetype.md) +#### Returns + +[`PictureType`](../enums/picturetype.md) -Implementation of: [IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) +#### Implementation of -• **type**(`value`: [*PictureType*](../enums/picturetype.md)): *void* +[IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) + +• `set` **type**(`value`): `void` Sets the object type stored in the current instance. For General Object Frame, use [PictureType.NotAPicture](../enums/picturetype.md#notapicture). Other types will make it a Picture Frame. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`PictureType`](../enums/picturetype.md) | -Name | Type | ------- | ------ | -`value` | [*PictureType*](../enums/picturetype.md) | +#### Returns -**Returns:** *void* +`void` -Implementation of: [IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. + +#### Returns -**`inheritdoc`** +[`Id3v2Frame`](id3v2frame.md) -**Returns:** [*Id3v2Frame*](id3v2frame.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | +| `version` | `number` | -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`version` | *number* | +#### Returns -**Returns:** *void* +`void` -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) -#### Parameters: +Renders the values in the current instance into field data for a specified version. -Name | Type | ------- | ------ | -`version` | *number* | +#### Parameters -**Returns:** [*ByteVector*](bytevector.md) +| Name | Type | +| :------ | :------ | +| `version` | `number` | -Overrides: [Id3v2Frame](id3v2frame.md) +#### Returns + +[`ByteVector`](bytevector.md) + +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` + +#### Returns -**Returns:** *string* +`string` ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2AttachmentFrame*](id3v2attachmentframe.md)[], `description?`: *string*, `type?`: [*PictureType*](../enums/picturetype.md)): [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +▸ `Static` **find**(`frames`, `description?`, `type?`): [`Id3v2AttachmentFrame`](id3v2attachmentframe.md) Get a specified attachment frame from the specified tag, optionally creating it if it does not exist. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2AttachmentFrame`](id3v2attachmentframe.md)[] | List of attachment frames to search | +| `description?` | `string` | Description to match | +| `type` | [`PictureType`](../enums/picturetype.md) | Picture type to match | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`frames` | [*Id3v2AttachmentFrame*](id3v2attachmentframe.md)[] | - | List of attachment frames to search | -`description?` | *string* | - | Description to match | -`type` | [*PictureType*](../enums/picturetype.md) | ... | Picture type to match | +#### Returns -**Returns:** [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +[`Id3v2AttachmentFrame`](id3v2attachmentframe.md) Matching frame or `undefined` if a match wasn't found and `create` is `false` @@ -493,51 +596,55 @@ ___ ### fromFile -▸ `Static`**fromFile**(`file`: IFileAbstraction, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `frameStart`: *number*, `size`: *number*, `version`: *number*): [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +▸ `Static` **fromFile**(`file`, `header`, `frameStart`, `size`, `version`): [`Id3v2AttachmentFrame`](id3v2attachmentframe.md) Constructs and initializes a new attachment frame by populating it with the contents of a section of a file. This constructor is only meant to be used internally. All loading is done lazily. -**`internal`** +**`internal`** + +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | `IFileAbstraction` | File to load frame data from | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | ID3v2 frame header that defines the frame | +| `frameStart` | `number` | Index into the file where the frame starts | +| `size` | `number` | Length of the frame data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`file` | IFileAbstraction | File to load frame data from | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | ID3v2 frame header that defines the frame | -`frameStart` | *number* | Index into the file where the frame starts | -`size` | *number* | Length of the frame data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +[`Id3v2AttachmentFrame`](id3v2attachmentframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2AttachmentFrame`](id3v2attachmentframe.md) Constructs and initializes a new attachment frame by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing the raw representation of the new frame | -`offset` | *number* | Index into `data` where the frame actually begins | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `offset` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing the raw representation of the new frame | +| `offset` | `number` | Index into `data` where the frame actually begins | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `offset` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +#### Returns + +[`Id3v2AttachmentFrame`](id3v2attachmentframe.md) ___ ### fromPicture -▸ `Static`**fromPicture**(`picture`: [*IPicture*](../interfaces/ipicture.md)): [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +▸ `Static` **fromPicture**(`picture`): [`Id3v2AttachmentFrame`](id3v2attachmentframe.md) Constructs and initializes a new attachment frame by populating it with the contents of another [IPicture](../interfaces/ipicture.md) object. @@ -547,28 +654,32 @@ another [IPicture](../interfaces/ipicture.md) object. Additionally, see [Tag.pictures](tag.md#pictures) provides a generic way of getting and setting attachments which is preferable to format specific code. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `picture` | [`IPicture`](../interfaces/ipicture.md) | Value to use in the new instance. | -Name | Type | Description | ------- | ------ | ------ | -`picture` | [*IPicture*](../interfaces/ipicture.md) | Value to use in the new instance. | +#### Returns -**Returns:** [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +[`Id3v2AttachmentFrame`](id3v2attachmentframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2AttachmentFrame`](id3v2attachmentframe.md) Constructs and initializes a new attachment frame by reading its raw data in a specified Id3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector starting with the raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector starting with the raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with. | +#### Returns -**Returns:** [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) +[`Id3v2AttachmentFrame`](id3v2attachmentframe.md) diff --git a/docs/classes/id3v2commentsframe.md b/docs/classes/id3v2commentsframe.md index 92e1ed9f..665df4d5 100644 --- a/docs/classes/id3v2commentsframe.md +++ b/docs/classes/id3v2commentsframe.md @@ -11,9 +11,9 @@ version you are specifying. ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2CommentsFrame** + ↳ **`Id3v2CommentsFrame`** ## Table of contents @@ -55,58 +55,68 @@ version you are specifying. ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### description -• **description**(): *string* +• `get` **description**(): `string` Gets the description stored in the current instance, or empty string if not set. -**Returns:** *string* +#### Returns + +`string` -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets the description stored in the current instance. There should only be one frame with a matching description and ISO-639-2 language code per tag. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Description of the instance | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Description of the instance | +#### Returns -**Returns:** *void* +`void` ___ ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -115,45 +125,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2commentsframe.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -161,26 +179,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -189,197 +211,244 @@ ___ ### language -• **language**(): *string* +• `get` **language**(): `string` Gets the ISO-639-2 language code stored in the current instance or 'XXX' if not set -**Returns:** *string* +#### Returns -• **language**(`value`: *string*): *void* +`string` + +• `set` **language**(`value`): `void` Sets the ISO-639-2 language code stored in the current instance -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Language code to store | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Language code to store | +#### Returns -**Returns:** *void* +`void` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### text -• **text**(): *string* +• `get` **text**(): `string` Gets the comment text stored in the current instance, or empty string if not set. -**Returns:** *string* +#### Returns -• **text**(`value`: *string*): *void* +`string` + +• `set` **text**(`value`): `void` Sets the comment text stored in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Comment text to store | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Comment text to store | +#### Returns -**Returns:** *void* +`void` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when storing the current instance. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +[`StringType`](../enums/stringtype.md) + +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when storing the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | Text encoding to use when storing the current instance | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*StringType*](../enums/stringtype.md) | Text encoding to use when storing the current instance | +#### Returns -**Returns:** *void* +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2Frame*](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | +| `_version` | `number` | -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +#### Returns -**Returns:** *void* +`void` -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `version` | `number` | -Name | Type | ------- | ------ | -`version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` Gets a string representation of the current instance. -**Returns:** *string* +#### Returns + +`string` string String with the comment text @@ -387,42 +456,48 @@ ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2CommentsFrame*](id3v2commentsframe.md)[], `description`: *string*, `language?`: *string*): [*Id3v2CommentsFrame*](id3v2commentsframe.md) +▸ `Static` **find**(`frames`, `description`, `language?`): [`Id3v2CommentsFrame`](id3v2commentsframe.md) Gets a comment frame that matched the provided parameters from the list of frames -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2CommentsFrame`](id3v2commentsframe.md)[] | Frames to search for best matching frame | +| `description` | `string` | Description of the comments frame to match | +| `language?` | `string` | Optional, ISO-639-2 language code to match | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2CommentsFrame*](id3v2commentsframe.md)[] | Frames to search for best matching frame | -`description` | *string* | Description of the comments frame to match | -`language?` | *string* | Optional, ISO-639-2 language code to match | +#### Returns -**Returns:** [*Id3v2CommentsFrame*](id3v2commentsframe.md) +[`Id3v2CommentsFrame`](id3v2commentsframe.md) CommentsFrame Object containing the matching frame or `undefined` if a match was not found @@ -431,19 +506,21 @@ ___ ### findAll -▸ `Static`**findAll**(`frames`: [*Id3v2CommentsFrame*](id3v2commentsframe.md)[], `description`: *string*, `language?`: *string*): [*Id3v2CommentsFrame*](id3v2commentsframe.md)[] +▸ `Static` **findAll**(`frames`, `description`, `language?`): [`Id3v2CommentsFrame`](id3v2commentsframe.md)[] Gets all comment frames that match the provided parameters from the list of frames -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2CommentsFrame*](id3v2commentsframe.md)[] | Frames to search | -`description` | *string* | Description of the comments frame to match | -`language?` | *string* | Optional, ISO-639-2 language code to match | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2CommentsFrame`](id3v2commentsframe.md)[] | Frames to search | +| `description` | `string` | Description of the comments frame to match | +| `language?` | `string` | Optional, ISO-639-2 language code to match | -**Returns:** [*Id3v2CommentsFrame*](id3v2commentsframe.md)[] +#### Returns + +[`Id3v2CommentsFrame`](id3v2commentsframe.md)[] CommentsFrame[] Array of comments frames that match the provided parameters or an empty array if none were found @@ -452,7 +529,7 @@ ___ ### findPreferred -▸ `Static`**findPreferred**(`frames`: [*Id3v2CommentsFrame*](id3v2commentsframe.md)[], `description`: *string*, `language?`: *string*): [*Id3v2CommentsFrame*](id3v2commentsframe.md) +▸ `Static` **findPreferred**(`frames`, `description`, `language?`): [`Id3v2CommentsFrame`](id3v2commentsframe.md) Gets a specified comments frame from the specified tag, trying to match the description and language but accepting an incomplete match. @@ -462,68 +539,76 @@ The method tries matching with the following order of precedence: * The first frame with a matching description * The first frame -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2CommentsFrame`](id3v2commentsframe.md)[] | Frames to search for best matching frame | +| `description` | `string` | Description to match | +| `language?` | `string` | ISO-639-2 language code to match | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2CommentsFrame*](id3v2commentsframe.md)[] | Frames to search for best matching frame | -`description` | *string* | Description to match | -`language?` | *string* | ISO-639-2 language code to match | +#### Returns -**Returns:** [*Id3v2CommentsFrame*](id3v2commentsframe.md) +[`Id3v2CommentsFrame`](id3v2commentsframe.md) ___ ### fromDescription -▸ `Static`**fromDescription**(`description`: *string*, `language?`: *string*, `encoding?`: [*StringType*](../enums/stringtype.md)): [*Id3v2CommentsFrame*](id3v2commentsframe.md) +▸ `Static` **fromDescription**(`description`, `language?`, `encoding?`): [`Id3v2CommentsFrame`](id3v2commentsframe.md) Constructs and initializes a new CommentsFrame from a description -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `description` | `string` | Description of the new frame | +| `language?` | `string` | Optional, ISO-639-2 language code for the new frame | +| `encoding` | [`StringType`](../enums/stringtype.md) | Optional, text encoding to use when rendering the new frame | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`description` | *string* | - | Description of the new frame | -`language?` | *string* | - | Optional, ISO-639-2 language code for the new frame | -`encoding` | [*StringType*](../enums/stringtype.md) | ... | Optional, text encoding to use when rendering the new frame | +#### Returns -**Returns:** [*Id3v2CommentsFrame*](id3v2commentsframe.md) +[`Id3v2CommentsFrame`](id3v2commentsframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2CommentsFrame*](id3v2commentsframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2CommentsFrame`](id3v2commentsframe.md) Constructs and initializes a new CommentsFrame by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2CommentsFrame*](id3v2commentsframe.md) +#### Returns + +[`Id3v2CommentsFrame`](id3v2commentsframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2CommentsFrame*](id3v2commentsframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2CommentsFrame`](id3v2commentsframe.md) Constructs and initializes a new CommentsFrame by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2CommentsFrame*](id3v2commentsframe.md) +[`Id3v2CommentsFrame`](id3v2commentsframe.md) diff --git a/docs/classes/id3v2eventtimecode.md b/docs/classes/id3v2eventtimecode.md index 1ab163f2..df09bf32 100644 --- a/docs/classes/id3v2eventtimecode.md +++ b/docs/classes/id3v2eventtimecode.md @@ -2,10 +2,6 @@ # Class: Id3v2EventTimeCode -## Hierarchy - -* **Id3v2EventTimeCode** - ## Table of contents ### Constructors @@ -27,75 +23,87 @@ ### constructor -\+ **new Id3v2EventTimeCode**(`eventType`: [*Id3v2EventType*](../enums/id3v2eventtype.md), `time`: *number*): [*Id3v2EventTimeCode*](id3v2eventtimecode.md) - -#### Parameters: +• **new Id3v2EventTimeCode**(`eventType`, `time`) -Name | Type | ------- | ------ | -`eventType` | [*Id3v2EventType*](../enums/id3v2eventtype.md) | -`time` | *number* | +#### Parameters -**Returns:** [*Id3v2EventTimeCode*](id3v2eventtimecode.md) +| Name | Type | +| :------ | :------ | +| `eventType` | [`Id3v2EventType`](../enums/id3v2eventtype.md) | +| `time` | `number` | ## Accessors ### eventType -• **eventType**(): [*Id3v2EventType*](../enums/id3v2eventtype.md) +• `get` **eventType**(): [`Id3v2EventType`](../enums/id3v2eventtype.md) + +#### Returns + +[`Id3v2EventType`](../enums/id3v2eventtype.md) -**Returns:** [*Id3v2EventType*](../enums/id3v2eventtype.md) +• `set` **eventType**(`value`): `void` -• **eventType**(`value`: [*Id3v2EventType*](../enums/id3v2eventtype.md)): *void* +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2EventType`](../enums/id3v2eventtype.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2EventType*](../enums/id3v2eventtype.md) | +#### Returns -**Returns:** *void* +`void` ___ ### time -• **time**(): *number* +• `get` **time**(): `number` -**Returns:** *number* +#### Returns -• **time**(`value`: *number*): *void* +`number` -#### Parameters: +• `set` **time**(`value`): `void` -Name | Type | ------- | ------ | -`value` | *number* | +#### Parameters -**Returns:** *void* +| Name | Type | +| :------ | :------ | +| `value` | `number` | + +#### Returns + +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2EventTimeCode*](id3v2eventtimecode.md) +▸ **clone**(): [`Id3v2EventTimeCode`](id3v2eventtimecode.md) Creates a copy of this instance -**Returns:** [*Id3v2EventTimeCode*](id3v2eventtimecode.md) +#### Returns + +[`Id3v2EventTimeCode`](id3v2eventtimecode.md) ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*Id3v2EventTimeCode*](id3v2eventtimecode.md) +▸ `Static` **fromEmpty**(): [`Id3v2EventTimeCode`](id3v2eventtimecode.md) + +#### Returns -**Returns:** [*Id3v2EventTimeCode*](id3v2eventtimecode.md) +[`Id3v2EventTimeCode`](id3v2eventtimecode.md) diff --git a/docs/classes/id3v2eventtimecodeframe.md b/docs/classes/id3v2eventtimecodeframe.md index a42b7235..ce64c236 100644 --- a/docs/classes/id3v2eventtimecodeframe.md +++ b/docs/classes/id3v2eventtimecodeframe.md @@ -4,9 +4,9 @@ ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2EventTimeCodeFrame** + ↳ **`Id3v2EventTimeCodeFrame`** ## Table of contents @@ -43,34 +43,40 @@ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -79,68 +85,80 @@ ___ ### events -• **events**(): [*Id3v2EventTimeCode*](id3v2eventtimecode.md)[] +• `get` **events**(): [`Id3v2EventTimeCode`](id3v2eventtimecode.md)[] Gets the event this frame contains. Each {@link EventTimeCode} represents a single event at a certain point in time. -**Returns:** [*Id3v2EventTimeCode*](id3v2eventtimecode.md)[] +#### Returns + +[`Id3v2EventTimeCode`](id3v2eventtimecode.md)[] -• **events**(`value`: [*Id3v2EventTimeCode*](id3v2eventtimecode.md)[]): *void* +• `set` **events**(`value`): `void` Sets the event this frame contains -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2EventTimeCode*](id3v2eventtimecode.md)[] | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2EventTimeCode`](id3v2eventtimecode.md)[] | -**Returns:** *void* +#### Returns + +`void` ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2eventtimecodeframe.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -148,26 +166,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -176,231 +198,276 @@ ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### timestampFormat -• **timestampFormat**(): [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md) +• `get` **timestampFormat**(): [`Id3v2TimestampFormat`](../enums/id3v2timestampformat.md) Gets the format of timestamps in this frame instance -**Returns:** [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md) +#### Returns -• **timestampFormat**(`value`: [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md)): *void* +[`Id3v2TimestampFormat`](../enums/id3v2timestampformat.md) + +• `set` **timestampFormat**(`value`): `void` Sets the format of timestamps in this frame instance -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2TimestampFormat`](../enums/id3v2timestampformat.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md) | +#### Returns -**Returns:** *void* +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. + +#### Returns -**`inheritdoc`** +[`Id3v2Frame`](id3v2frame.md) -**Returns:** [*Id3v2Frame*](id3v2frame.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +`void` -**Returns:** *void* +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`_version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`_version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `_version` | `number` | ID3v2 version the field data is to be encoded in. | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`_version` | *number* | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -**Returns:** *void* +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +`void` + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) +▸ `Static` **fromEmpty**(): [`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) Constructs and initializes a new instance without contents -**Returns:** [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) +#### Returns + +[`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) +[`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -**Returns:** [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) +#### Returns + +[`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) ___ ### fromTimestampFormat -▸ `Static`**fromTimestampFormat**(`timestampFormat`: [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md)): [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) +▸ `Static` **fromTimestampFormat**(`timestampFormat`): [`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) Constructs and initializes a timestamp format set -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `timestampFormat` | [`Id3v2TimestampFormat`](../enums/id3v2timestampformat.md) | Timestamp format for the event codes stored in this frame | -Name | Type | Description | ------- | ------ | ------ | -`timestampFormat` | [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md) | Timestamp format for the event codes stored in this frame | +#### Returns -**Returns:** [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) +[`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) diff --git a/docs/classes/id3v2extendedheader.md b/docs/classes/id3v2extendedheader.md index fe5dd3c5..608ce141 100644 --- a/docs/classes/id3v2extendedheader.md +++ b/docs/classes/id3v2extendedheader.md @@ -2,10 +2,6 @@ # Class: Id3v2ExtendedHeader -## Hierarchy - -* **Id3v2ExtendedHeader** - ## Table of contents ### Accessors @@ -22,50 +18,58 @@ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the data on disk in bytes. -**Returns:** *number* +#### Returns + +`number` ## Methods ### parse -▸ `Protected`**parse**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): *void* +▸ `Protected` **parse**(`data`, `version`): `void` -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`version` | *number* | +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | +| `version` | `number` | -**Returns:** *void* +#### Returns + +`void` ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2ExtendedHeader*](id3v2extendedheader.md) +▸ `Static` **fromData**(`data`, `version`): [`Id3v2ExtendedHeader`](id3v2extendedheader.md) Constructs and initializes a new instance by reading the raw contents. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw extended header structure | +| `version` | `number` | ID3v2 version. Must be an unsigned 8-bit integer. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw extended header structure | -`version` | *number* | ID3v2 version. Must be an unsigned 8-bit integer. | +#### Returns -**Returns:** [*Id3v2ExtendedHeader*](id3v2extendedheader.md) +[`Id3v2ExtendedHeader`](id3v2extendedheader.md) ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*Id3v2ExtendedHeader*](id3v2extendedheader.md) +▸ `Static` **fromEmpty**(): [`Id3v2ExtendedHeader`](id3v2extendedheader.md) Constructs and initializes a new instance with no contents. -**Returns:** [*Id3v2ExtendedHeader*](id3v2extendedheader.md) +#### Returns + +[`Id3v2ExtendedHeader`](id3v2extendedheader.md) diff --git a/docs/classes/id3v2frame.md b/docs/classes/id3v2frame.md index 811c6bd8..bcae862c 100644 --- a/docs/classes/id3v2frame.md +++ b/docs/classes/id3v2frame.md @@ -4,37 +4,37 @@ ## Hierarchy -* **Id3v2Frame** +- **`Id3v2Frame`** - ↳ [*Id3v2AttachmentFrame*](id3v2attachmentframe.md) + ↳ [`Id3v2AttachmentFrame`](id3v2attachmentframe.md) - ↳ [*Id3v2CommentsFrame*](id3v2commentsframe.md) + ↳ [`Id3v2CommentsFrame`](id3v2commentsframe.md) - ↳ [*Id3v2EventTimeCodeFrame*](id3v2eventtimecodeframe.md) + ↳ [`Id3v2EventTimeCodeFrame`](id3v2eventtimecodeframe.md) - ↳ [*Id3v2MusicCdIdentifierFrame*](id3v2musiccdidentifierframe.md) + ↳ [`Id3v2MusicCdIdentifierFrame`](id3v2musiccdidentifierframe.md) - ↳ [*Id3v2PlayCountFrame*](id3v2playcountframe.md) + ↳ [`Id3v2PlayCountFrame`](id3v2playcountframe.md) - ↳ [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) + ↳ [`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) - ↳ [*Id3v2PrivateFrame*](id3v2privateframe.md) + ↳ [`Id3v2PrivateFrame`](id3v2privateframe.md) - ↳ [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) + ↳ [`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) - ↳ [*Id3v2Synchronized*](id3v2synchronized.md) + ↳ [`Id3v2Synchronized`](id3v2synchronized.md) - ↳ [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) + ↳ [`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) - ↳ [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) + ↳ [`Id3v2TextInformationFrame`](id3v2textinformationframe.md) - ↳ [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) + ↳ [`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) - ↳ [*Id3v2UnknownFrame*](id3v2unknownframe.md) + ↳ [`Id3v2UnknownFrame`](id3v2unknownframe.md) - ↳ [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) + ↳ [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) - ↳ [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) + ↳ [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) ## Table of contents @@ -69,46 +69,48 @@ ### constructor -\+ `Protected`**new Id3v2Frame**(`header`: [*Id3v2FrameHeader*](id3v2frameheader.md)): [*Id3v2Frame*](id3v2frame.md) +• `Protected` **new Id3v2Frame**(`header`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | - -**Returns:** [*Id3v2Frame*](id3v2frame.md) +| Name | Type | +| :------ | :------ | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | ## Properties ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -117,43 +119,51 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) + +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2frame.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `Abstract` `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +#### Returns + +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -161,26 +171,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -189,133 +203,149 @@ ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ## Methods ### clone -▸ `Abstract`**clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ `Abstract` **clone**(): [`Id3v2Frame`](id3v2frame.md) Creates a deep copy of the current instance. This method is implemented by rendering the current instance as an ID3v2.4 frame and using the frame factory to create a new frame. As such, this method should be overridden by child classes. -**Returns:** [*Id3v2Frame*](id3v2frame.md) +#### Returns + +[`Id3v2Frame`](id3v2frame.md) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### parseFields -▸ `Protected` `Abstract`**parseFields**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): *void* +▸ `Protected` `Abstract` **parseFields**(`data`, `version`): `void` Populates the values in this frame by parsing its field data in a specified version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `version` | `number` | ID3v2 version the field data is encoded in | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Extracted field data | -`version` | *number* | ID3v2 version the field data is encoded in | +#### Returns -**Returns:** *void* +`void` ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### renderFields -▸ `Protected` `Abstract`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` `Abstract` **renderFields**(`version`): [`ByteVector`](bytevector.md) Renders the values in the current instance into field data for a specified version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | ID3v2 version the field data is to be encoded in. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -**Returns:** *void* +#### Returns + +`void` ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by diff --git a/docs/classes/id3v2frameheader.md b/docs/classes/id3v2frameheader.md index b3c9e3d7..41fda88b 100644 --- a/docs/classes/id3v2frameheader.md +++ b/docs/classes/id3v2frameheader.md @@ -2,10 +2,6 @@ # Class: Id3v2FrameHeader -## Hierarchy - -* **Id3v2FrameHeader** - ## Table of contents ### Constructors @@ -29,147 +25,165 @@ ### constructor -\+ **new Id3v2FrameHeader**(`id`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md), `flags?`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md), `frameSize?`: *number*): [*Id3v2FrameHeader*](id3v2frameheader.md) +• **new Id3v2FrameHeader**(`id`, `flags?`, `frameSize?`) Constructs and initializes a new instance by processing the data for the frame header. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`id` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | - | Identifier of the frame | -`flags` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | ... | Flags to assign to the frame (if omitted, defaults to [Id3v2FrameFlags.None](../enums/id3v2frameflags.md#none)) | -`frameSize` | *number* | 0 | Size of the frame in bytes, excluding the size of the header (if omitted, defaults to 0) | - -**Returns:** [*Id3v2FrameHeader*](id3v2frameheader.md) +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `id` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | `undefined` | Identifier of the frame | +| `flags` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | `undefined` | Flags to assign to the frame (if omitted, defaults to [Id3v2FrameFlags.None](../enums/id3v2frameflags.md#none)) | +| `frameSize` | `number` | `0` | Size of the frame in bytes, excluding the size of the header (if omitted, defaults to 0) | ## Accessors ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the flags applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the identifier of the frame described by the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) -• **frameId**(`value`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): *void* +• `set` **frameId**(`value`): `void` Sets the identifier of the frame described by the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameSize -• **frameSize**(): *number* +• `get` **frameSize**(): `number` Gets the size of the frame described by the current instance, minus the header. -**Returns:** *number* +#### Returns -• **frameSize**(`value`: *number*): *void* +`number` + +• `set` **frameSize**(`value`): `void` Sets the size of the frame described by the current instance, minus the header. Must be a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` ## Methods ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2FrameHeader*](id3v2frameheader.md) +▸ `Static` **fromData**(`data`, `version`): [`Id3v2FrameHeader`](id3v2frameheader.md) Constructs and initializes a new instance of [Id3v2FrameHeader](id3v2frameheader.md) by reading it from raw header data of a specified version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw data to build the new instance from. If the data size is smaller than the size of a full header, the data is just treated as a frame identifier and the remaining values are zeroed. | -`version` | *number* | ID3v2 version with which the data in `data` was encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw data to build the new instance from. If the data size is smaller than the size of a full header, the data is just treated as a frame identifier and the remaining values are zeroed. | +| `version` | `number` | ID3v2 version with which the data in `data` was encoded. | -**Returns:** [*Id3v2FrameHeader*](id3v2frameheader.md) +#### Returns + +[`Id3v2FrameHeader`](id3v2frameheader.md) ___ ### fromFrameIdentifier -▸ `Static`**fromFrameIdentifier**(`id`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): [*Id3v2FrameHeader*](id3v2frameheader.md) +▸ `Static` **fromFrameIdentifier**(`id`): [`Id3v2FrameHeader`](id3v2frameheader.md) + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `id` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | -Name | Type | ------- | ------ | -`id` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | +#### Returns -**Returns:** [*Id3v2FrameHeader*](id3v2frameheader.md) +[`Id3v2FrameHeader`](id3v2frameheader.md) ___ ### getSize -▸ `Static`**getSize**(`version`: *number*): *6* \| *10* +▸ `Static` **getSize**(`version`): ``6`` \| ``10`` Gets the size of a header for a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to get the size for. Must be a positive integer < 256 | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to get the size for. Must be a positive integer < 256 | +#### Returns -**Returns:** *6* \| *10* +``6`` \| ``10`` diff --git a/docs/classes/id3v2frameidentifier.md b/docs/classes/id3v2frameidentifier.md index 1f857ffd..d321bc16 100644 --- a/docs/classes/id3v2frameidentifier.md +++ b/docs/classes/id3v2frameidentifier.md @@ -17,10 +17,6 @@ frame identifiers are statically created and reused. This allows usage of the `===` to compare instances because they should always be the same. -## Hierarchy - -* **Id3v2FrameIdentifier** - ## Table of contents ### Constructors @@ -41,52 +37,58 @@ ### constructor -\+ **new Id3v2FrameIdentifier**(`v4`: *string*, `v3`: *string*, `v2`: *string*): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• **new Id3v2FrameIdentifier**(`v4`, `v3`, `v2`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`v4` | *string* | -`v3` | *string* | -`v2` | *string* | - -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +| Name | Type | +| :------ | :------ | +| `v4` | `string` | +| `v3` | `string` | +| `v2` | `string` | ## Accessors ### isTextFrame -• **isTextFrame**(): *boolean* +• `get` **isTextFrame**(): `boolean` + +#### Returns -**Returns:** *boolean* +`boolean` ___ ### isUrlFrame -• **isUrlFrame**(): *boolean* +• `get` **isUrlFrame**(): `boolean` -**Returns:** *boolean* +#### Returns + +`boolean` ## Methods ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `version` | `number` | -Name | Type | ------- | ------ | -`version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` + +#### Returns -**Returns:** *string* +`string` diff --git a/docs/classes/id3v2musiccdidentifierframe.md b/docs/classes/id3v2musiccdidentifierframe.md index cc14a290..93f3d927 100644 --- a/docs/classes/id3v2musiccdidentifierframe.md +++ b/docs/classes/id3v2musiccdidentifierframe.md @@ -8,9 +8,9 @@ CD. It is primarily used for track information lookup through web sources like C ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2MusicCdIdentifierFrame** + ↳ **`Id3v2MusicCdIdentifierFrame`** ## Table of contents @@ -44,56 +44,66 @@ CD. It is primarily used for track information lookup through web sources like C ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### data -• **data**(): [*ByteVector*](bytevector.md) +• `get` **data**(): [`ByteVector`](bytevector.md) Gets the identifier data stored in the current instance -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) -• **data**(`value`: [*ByteVector*](bytevector.md)): *void* +• `set` **data**(`value`): `void` Sets the identifier data stored in the current instance -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | [*ByteVector*](bytevector.md) | ByteVector containing the identifier stored in the current instance | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`ByteVector`](bytevector.md) | ByteVector containing the identifier stored in the current instance | -**Returns:** *void* +#### Returns + +`void` ___ ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -102,45 +112,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2musiccdidentifierframe.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) -**`inheritdoc`** +**`inheritdoc`** -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +#### Returns + +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -148,26 +166,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -176,183 +198,220 @@ ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. + +#### Returns -**`inheritdoc`** +[`Id3v2Frame`](id3v2frame.md) -**Returns:** [*Id3v2Frame*](id3v2frame.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `version`): `void` Populates the values in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing the extracted field data. | +| `version` | `number` | Ignored. | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing the extracted field data. | -`version` | *number* | Ignored. | +`void` -**Returns:** *void* +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) Renders the value in current instance into field data. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Ignored. | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Ignored. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2MusicCdIdentifierFrame*](id3v2musiccdidentifierframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2MusicCdIdentifierFrame`](id3v2musiccdidentifierframe.md) Constructs and initializes a new instance of MusicCdIdentifier frame by reading its raw data in a specified ID3v2 version starting at a specified offset. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame. | +| `offset` | `number` | Offset into `data` where the frame actually begins. Must be a positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `offset` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame. | -`offset` | *number* | Offset into `data` where the frame actually begins. Must be a positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `offset` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2MusicCdIdentifierFrame*](id3v2musiccdidentifierframe.md) +[`Id3v2MusicCdIdentifierFrame`](id3v2musiccdidentifierframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2MusicCdIdentifierFrame*](id3v2musiccdidentifierframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2MusicCdIdentifierFrame`](id3v2musiccdidentifierframe.md) Constructs and initializes a new instance of MusicCdIdentifierFrame by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector object starting with the raw representation of the new frame | +| `version` | `number` | The ID3v2 version the raw frame is encoded in. Must be positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector object starting with the raw representation of the new frame | -`version` | *number* | The ID3v2 version the raw frame is encoded in. Must be positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2MusicCdIdentifierFrame*](id3v2musiccdidentifierframe.md) +[`Id3v2MusicCdIdentifierFrame`](id3v2musiccdidentifierframe.md) diff --git a/docs/classes/id3v2playcountframe.md b/docs/classes/id3v2playcountframe.md index 0911b4f2..3537a9a3 100644 --- a/docs/classes/id3v2playcountframe.md +++ b/docs/classes/id3v2playcountframe.md @@ -6,9 +6,9 @@ This class extends {@link Frame} implementing support for ID3v2 play count (PCNT ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2PlayCountFrame** + ↳ **`Id3v2PlayCountFrame`** ## Table of contents @@ -43,34 +43,40 @@ This class extends {@link Frame} implementing support for ID3v2 play count (PCNT ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -79,45 +85,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2playcountframe.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -125,26 +139,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -153,215 +171,258 @@ ___ ### playCount -• **playCount**(): *bigint* +• `get` **playCount**(): `bigint` Gets the play count of the current instance. -**Returns:** *bigint* +#### Returns + +`bigint` -• **playCount**(`value`: *bigint*): *void* +• `set` **playCount**(`value`): `void` Sets the play count of the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *bigint* | Number of times this track has been played | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `bigint` | Number of times this track has been played | -**Returns:** *void* +#### Returns + +`void` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) -**`inheritdoc`** +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**Returns:** [*Id3v2Frame*](id3v2frame.md) +#### Returns -Overrides: [Id3v2Frame](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) + +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +#### Returns -**Returns:** *void* +`void` -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`_version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`_version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `_version` | `number` | ID3v2 version the field data is to be encoded in. | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`_version` | *number* | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -**Returns:** *void* +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +`void` + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*Id3v2PlayCountFrame*](id3v2playcountframe.md) +▸ `Static` **fromEmpty**(): [`Id3v2PlayCountFrame`](id3v2playcountframe.md) Constructs and initializes a new instance with a count of zero -**Returns:** [*Id3v2PlayCountFrame*](id3v2playcountframe.md) +#### Returns + +[`Id3v2PlayCountFrame`](id3v2playcountframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2PlayCountFrame*](id3v2playcountframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2PlayCountFrame`](id3v2playcountframe.md) Constructs and initializes a new instance of frame by reading its raw data in a specified ID3v2 version starting at a specified offset. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame. | +| `offset` | `number` | Offset into `data` where the frame actually begins. Must be a positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `offset` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame. | -`offset` | *number* | Offset into `data` where the frame actually begins. Must be a positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `offset` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2PlayCountFrame*](id3v2playcountframe.md) +[`Id3v2PlayCountFrame`](id3v2playcountframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2PlayCountFrame*](id3v2playcountframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2PlayCountFrame`](id3v2playcountframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector starting with the raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded in, must be a positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector starting with the raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded in, must be a positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2PlayCountFrame*](id3v2playcountframe.md) +[`Id3v2PlayCountFrame`](id3v2playcountframe.md) diff --git a/docs/classes/id3v2popularimeterframe.md b/docs/classes/id3v2popularimeterframe.md index 637acf50..6e7bdb3b 100644 --- a/docs/classes/id3v2popularimeterframe.md +++ b/docs/classes/id3v2popularimeterframe.md @@ -6,9 +6,9 @@ This class extends {@link Frame} implementing support for ID3v2 popularimeter (P ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2PopularimeterFrame** + ↳ **`Id3v2PopularimeterFrame`** ## Table of contents @@ -46,34 +46,40 @@ This class extends {@link Frame} implementing support for ID3v2 popularimeter (P ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -82,45 +88,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) + +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2popularimeterframe.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) -**`inheritdoc`** +**`inheritdoc`** -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +#### Returns + +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -128,26 +142,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -156,231 +174,278 @@ ___ ### playCount -• **playCount**(): *bigint* +• `get` **playCount**(): `bigint` Gets the play count of the current instance -**Returns:** *bigint* +#### Returns -• **playCount**(`value`: *bigint*): *void* +`bigint` + +• `set` **playCount**(`value`): `void` Sets the play count of the current instance -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `bigint` | Play count of the current instance | -Name | Type | Description | ------- | ------ | ------ | -`value` | *bigint* | Play count of the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### rating -• **rating**(): *number* +• `get` **rating**(): `number` Gets the rating of the current instance -**Returns:** *number* +#### Returns -• **rating**(`value`: *number*): *void* +`number` + +• `set` **rating**(`value`): `void` Sets the rating of the current instance -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Rating of the current instance, must be a 8-bit unsigned integer. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Rating of the current instance, must be a 8-bit unsigned integer. | +#### Returns -**Returns:** *void* +`void` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### user -• **user**(): *string* +• `get` **user**(): `string` Gets the email address of the user to whom the current instance belongs -**Returns:** *string* +#### Returns + +`string` -• **user**(`value`: *string*): *void* +• `set` **user**(`value`): `void` Sets the email address of the user to whom the current instance belongs -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2Frame*](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +`void` -**Returns:** *void* +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`_version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`_version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `_version` | `number` | ID3v2 version the field data is to be encoded in. | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`_version` | *number* | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -**Returns:** *void* +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +`void` + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md)[], `user`: *string*): [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) +▸ `Static` **find**(`frames`, `user`): [`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) Gets a popularimeter frame from a specified tag that matches the given parameters -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md)[] | List of frames to search | -`user` | *string* | User email to use to match the frame in the `tag` | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md)[] | List of frames to search | +| `user` | `string` | User email to use to match the frame in the `tag` | -**Returns:** [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) +#### Returns + +[`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) PopularimeterFrame Frame containing the matching user or `undefined` if a match was not found @@ -389,53 +454,59 @@ ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) +[`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -**Returns:** [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) +#### Returns + +[`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) ___ ### fromUser -▸ `Static`**fromUser**(`user`: *string*): [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) +▸ `Static` **fromUser**(`user`): [`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) Constructs and initializes a new instance for a specified user with a rating and play count of zero. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `user` | `string` | Email of the user that gave the rating | -Name | Type | Description | ------- | ------ | ------ | -`user` | *string* | Email of the user that gave the rating | +#### Returns -**Returns:** [*Id3v2PopularimeterFrame*](id3v2popularimeterframe.md) +[`Id3v2PopularimeterFrame`](id3v2popularimeterframe.md) diff --git a/docs/classes/id3v2privateframe.md b/docs/classes/id3v2privateframe.md index 908ea5e2..67e8c964 100644 --- a/docs/classes/id3v2privateframe.md +++ b/docs/classes/id3v2privateframe.md @@ -8,9 +8,9 @@ should not be stored in another frame type. ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2PrivateFrame** + ↳ **`Id3v2PrivateFrame`** ## Table of contents @@ -47,34 +47,40 @@ should not be stored in another frame type. ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -83,45 +89,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2privateframe.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -129,26 +143,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -157,199 +175,240 @@ ___ ### owner -• **owner**(): *string* +• `get` **owner**(): `string` Gets the owner of the current instance. There should only be one frame with a given owner per tag. -**Returns:** *string* +#### Returns + +`string` ___ ### privateData -• **privateData**(): [*ByteVector*](bytevector.md) +• `get` **privateData**(): [`ByteVector`](bytevector.md) Gets the private data stored in the current instance. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -• **privateData**(`value`: [*ByteVector*](bytevector.md)): *void* +[`ByteVector`](bytevector.md) + +• `set` **privateData**(`value`): `void` Sets the private data stored in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`ByteVector`](bytevector.md) | Private data to store in the current instance | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*ByteVector*](bytevector.md) | Private data to store in the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2Frame*](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +#### Returns -**Returns:** *void* +`void` -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -Name | Type | ------- | ------ | -`version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2PrivateFrame*](id3v2privateframe.md)[], `owner`: *string*): [*Id3v2PrivateFrame*](id3v2privateframe.md) +▸ `Static` **find**(`frames`, `owner`): [`Id3v2PrivateFrame`](id3v2privateframe.md) Get a specified private frame from the list of private frames that matches the provided parameters. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2PrivateFrame`](id3v2privateframe.md)[] | List of frames to search | +| `owner` | `string` | Owner to match when searching | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2PrivateFrame*](id3v2privateframe.md)[] | List of frames to search | -`owner` | *string* | Owner to match when searching | +#### Returns -**Returns:** [*Id3v2PrivateFrame*](id3v2privateframe.md) +[`Id3v2PrivateFrame`](id3v2privateframe.md) PrivateFrame Matching frame or `undefined` if a match was not found @@ -357,52 +416,58 @@ ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2PrivateFrame*](id3v2privateframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2PrivateFrame`](id3v2privateframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2PrivateFrame*](id3v2privateframe.md) +#### Returns + +[`Id3v2PrivateFrame`](id3v2privateframe.md) ___ ### fromOwner -▸ `Static`**fromOwner**(`owner`: *string*): [*Id3v2PrivateFrame*](id3v2privateframe.md) +▸ `Static` **fromOwner**(`owner`): [`Id3v2PrivateFrame`](id3v2privateframe.md) Constructs and initializes a new instance with the provided owner -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `owner` | `string` | Owner of the private frame | -Name | Type | Description | ------- | ------ | ------ | -`owner` | *string* | Owner of the private frame | +#### Returns -**Returns:** [*Id3v2PrivateFrame*](id3v2privateframe.md) +[`Id3v2PrivateFrame`](id3v2privateframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2PrivateFrame*](id3v2privateframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2PrivateFrame`](id3v2privateframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2PrivateFrame*](id3v2privateframe.md) +[`Id3v2PrivateFrame`](id3v2privateframe.md) diff --git a/docs/classes/id3v2relativevolumeframe.md b/docs/classes/id3v2relativevolumeframe.md index 8edd1244..9fe3f00f 100644 --- a/docs/classes/id3v2relativevolumeframe.md +++ b/docs/classes/id3v2relativevolumeframe.md @@ -4,9 +4,9 @@ ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2RelativeVolumeFrame** + ↳ **`Id3v2RelativeVolumeFrame`** ## Table of contents @@ -50,44 +50,52 @@ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### channels -• **channels**(): [*Id3v2RelativeVolumeFrameChannelData*](id3v2relativevolumeframechanneldata.md)[] +• `get` **channels**(): [`Id3v2RelativeVolumeFrameChannelData`](id3v2relativevolumeframechanneldata.md)[] Gets the channels in the current instance that have a value -**Returns:** [*Id3v2RelativeVolumeFrameChannelData*](id3v2relativevolumeframechanneldata.md)[] +#### Returns + +[`Id3v2RelativeVolumeFrameChannelData`](id3v2relativevolumeframechanneldata.md)[] ___ ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -96,45 +104,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2relativevolumeframe.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -142,26 +158,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -170,106 +190,127 @@ ___ ### identification -• **identification**(): *string* +• `get` **identification**(): `string` Gets the identification used for the current instance -**Returns:** *string* +#### Returns + +`string` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2Frame*](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### getPeakBits -▸ **getPeakBits**(`type`: [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md)): *number* +▸ **getPeakBits**(`type`): `number` Gets the number of bits used to encode the peak volume -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to get the value for | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to get the value for | +#### Returns -**Returns:** *number* +`number` ___ ### getPeakVolume -▸ **getPeakVolume**(`type`: [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md)): *bigint* +▸ **getPeakVolume**(`type`): `bigint` Gets the peak volume for a specified channel -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to get the value for | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to get the value for | -**Returns:** *bigint* +#### Returns + +`bigint` ___ ### getVolumeAdjustment -▸ **getVolumeAdjustment**(`type`: [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md)): *number* +▸ **getVolumeAdjustment**(`type`): `number` Gets the volume adjustment for the specified channel. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to get the value for | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to get the value for | +#### Returns -**Returns:** *number* +`number` number Volume adjustment for the channel, can be betweenInclusive -64 and +64 decibels @@ -277,179 +318,209 @@ ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` -**`inheritdoc`** +Populates the values in this frame by parsing its field data in a specified version. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -**Returns:** *void* +#### Returns -Overrides: [Id3v2Frame](id3v2frame.md) +`void` + +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`_version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`_version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `_version` | `number` | ID3v2 version the field data is to be encoded in. | -Name | Type | ------- | ------ | -`_version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### setPeakBits -▸ **setPeakBits**(`type`: [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md), `value`: *number*): *void* +▸ **setPeakBits**(`type`, `value`): `void` Sets the number of bits used to encode peak volume for a specified channel. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to set the value for | +| `value` | `number` | Peak volume | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to set the value for | -`value` | *number* | Peak volume | +#### Returns -**Returns:** *void* +`void` ___ ### setPeakVolume -▸ **setPeakVolume**(`type`: [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md), `value`: *bigint*): *void* +▸ **setPeakVolume**(`type`, `value`): `void` Sets the peak volume for a specified channel. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to set the value for | -`value` | *bigint* | Peak volume | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to set the value for | +| `value` | `bigint` | Peak volume | -**Returns:** *void* +#### Returns + +`void` ___ ### setVolumeAdjustment -▸ **setVolumeAdjustment**(`type`: [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md), `value`: *number*): *void* +▸ **setVolumeAdjustment**(`type`, `value`): `void` Sets the volume adjustment in decibels for the specified channel. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to set the value for | +| `value` | `number` | Volume adjustment in decibels. Must be betweenInclusive -64 and +64 | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) | Which channel to set the value for | -`value` | *number* | Volume adjustment in decibels. Must be betweenInclusive -64 and +64 | +#### Returns -**Returns:** *void* +`void` ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` Creates a text description of the current instance -**Returns:** *string* +#### Returns + +`string` ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md)[], `identification`: *string*): [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) +▸ `Static` **find**(`frames`, `identification`): [`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) Gets a specified volume adjustment frame from the list of relative volume frames -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md)[] | List of frames to search | -`identification` | *string* | Identification to match | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md)[] | List of frames to search | +| `identification` | `string` | Identification to match | -**Returns:** [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) +#### Returns + +[`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) RelativeVolumeFrame Frame containing the matching user or `undefined` if a match was not found @@ -458,52 +529,58 @@ ___ ### fromIdentification -▸ `Static`**fromIdentification**(`identification`: *string*): [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) +▸ `Static` **fromIdentification**(`identification`): [`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) Constructs and initializes a new instance with a specified identifier -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `identification` | `string` | Identification ot use for the new frame | -Name | Type | Description | ------- | ------ | ------ | -`identification` | *string* | Identification ot use for the new frame | +#### Returns -**Returns:** [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) +[`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version starting a specified offset. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | Offset into `data` where the frame actually begins. Must be a positive, 32-bit integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `offset` in `data` | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | Offset into `data` where the frame actually begins. Must be a positive, 32-bit integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `offset` in `data` | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) +#### Returns + +[`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the frame is encoded with. Must be a positive 8-bit integer. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the frame is encoded with. Must be a positive 8-bit integer. | +#### Returns -**Returns:** [*Id3v2RelativeVolumeFrame*](id3v2relativevolumeframe.md) +[`Id3v2RelativeVolumeFrame`](id3v2relativevolumeframe.md) diff --git a/docs/classes/id3v2relativevolumeframechanneldata.md b/docs/classes/id3v2relativevolumeframechanneldata.md index 388377cb..c7bc4418 100644 --- a/docs/classes/id3v2relativevolumeframechanneldata.md +++ b/docs/classes/id3v2relativevolumeframechanneldata.md @@ -2,10 +2,6 @@ # Class: Id3v2RelativeVolumeFrameChannelData -## Hierarchy - -* **Id3v2RelativeVolumeFrameChannelData** - ## Table of contents ### Constructors @@ -29,121 +25,139 @@ ### constructor -\+ **new Id3v2RelativeVolumeFrameChannelData**(`channel`: [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md)): [*Id3v2RelativeVolumeFrameChannelData*](id3v2relativevolumeframechanneldata.md) +• **new Id3v2RelativeVolumeFrameChannelData**(`channel`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`channel` | [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) | - -**Returns:** [*Id3v2RelativeVolumeFrameChannelData*](id3v2relativevolumeframechanneldata.md) +| Name | Type | +| :------ | :------ | +| `channel` | [`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) | ## Accessors ### channelType -• **channelType**(): [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) +• `get` **channelType**(): [`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) + +#### Returns -**Returns:** [*Id3v2RelativeVolumeFrameChannelType*](../enums/id3v2relativevolumeframechanneltype.md) +[`Id3v2RelativeVolumeFrameChannelType`](../enums/id3v2relativevolumeframechanneltype.md) ___ ### isSet -• **isSet**(): *boolean* +• `get` **isSet**(): `boolean` -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### peakBits -• **peakBits**(): *number* +• `get` **peakBits**(): `number` Number of bits used to express the peak volume. -**Returns:** *number* +#### Returns + +`number` -• **peakBits**(`value`: *number*): *void* +• `set` **peakBits**(`value`): `void` Number of bits used to express the peak volume. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Bits used to express the peak volume. Must be an integer betweenInclusive 1 and 64 | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Bits used to express the peak volume. Must be an integer betweenInclusive 1 and 64 | +#### Returns -**Returns:** *void* +`void` ___ ### peakVolume -• **peakVolume**(): *bigint* +• `get` **peakVolume**(): `bigint` Value of the peak sample in the file. It's unclear exactly how this works, but the ID3v2.4 documentation explains this value as betweenInclusive 0 and 255 - but can be expressed using any number of bits ([peakBits](id3v2relativevolumeframechanneldata.md#peakbits)). -**Returns:** *bigint* +#### Returns -• **peakVolume**(`value`: *bigint*): *void* +`bigint` + +• `set` **peakVolume**(`value`): `void` Value of the peak sample in the file. It's unclear exactly how this works, but the ID3v2.4 documentation explains this value as betweenInclusive 0 and 255 - but can be expressed using any number of bits ([peakBits](id3v2relativevolumeframechanneldata.md#peakbits)). -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `bigint` | Peak volume value. Must fit in the number of bits set in [peakBits](id3v2relativevolumeframechanneldata.md#peakbits) | -Name | Type | Description | ------- | ------ | ------ | -`value` | *bigint* | Peak volume value. Must fit in the number of bits set in [peakBits](id3v2relativevolumeframechanneldata.md#peakbits) | +#### Returns -**Returns:** *void* +`void` ___ ### volumeAdjustment -• **volumeAdjustment**(): *number* +• `get` **volumeAdjustment**(): `number` Volume adjustment of the track in dB. -**Returns:** *number* +#### Returns + +`number` -• **volumeAdjustment**(`value`: *number*): *void* +• `set` **volumeAdjustment**(`value`): `void` Volume adjustment of the track in dB. This value is expressed as a fixed-precision value betweenInclusive -64 and 64. Don't worry about the math, we'll do it for you. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Volume adjustment. Must be between -64 and 64, inclusive. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Volume adjustment. Must be between -64 and 64, inclusive. | -**Returns:** *void* +#### Returns + +`void` ## Methods ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### fromData -▸ `Static`**fromData**(`bytes`: [*ByteVector*](bytevector.md)): [*Id3v2RelativeVolumeFrameChannelData*](id3v2relativevolumeframechanneldata.md) +▸ `Static` **fromData**(`bytes`): [`Id3v2RelativeVolumeFrameChannelData`](id3v2relativevolumeframechanneldata.md) + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `bytes` | [`ByteVector`](bytevector.md) | -Name | Type | ------- | ------ | -`bytes` | [*ByteVector*](bytevector.md) | +#### Returns -**Returns:** [*Id3v2RelativeVolumeFrameChannelData*](id3v2relativevolumeframechanneldata.md) +[`Id3v2RelativeVolumeFrameChannelData`](id3v2relativevolumeframechanneldata.md) diff --git a/docs/classes/id3v2settings.md b/docs/classes/id3v2settings.md index b24cf5ed..891a9c24 100644 --- a/docs/classes/id3v2settings.md +++ b/docs/classes/id3v2settings.md @@ -2,10 +2,6 @@ # Class: Id3v2Settings -## Hierarchy - -* **Id3v2Settings** - ## Table of contents ### Accessors @@ -25,121 +21,141 @@ ### defaultEncoding -• `Static`**defaultEncoding**(): [*StringType*](../enums/stringtype.md) +• `Static` `get` **defaultEncoding**(): [`StringType`](../enums/stringtype.md) Gets the encoding to use when creating new frames. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) -• `Static`**defaultEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +• `Static` `set` **defaultEncoding**(`value`): `void` Sets the encoding to use when creating new frames. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | [*StringType*](../enums/stringtype.md) | Encoding to use when creating new frames | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | Encoding to use when creating new frames | -**Returns:** *void* +#### Returns + +`void` ___ ### defaultVersion -• `Static`**defaultVersion**(): *number* +• `Static` `get` **defaultVersion**(): `number` Gets the default version to use when creating new tags. If [forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true` then all tags will be rendered with this version. -**Returns:** *number* +#### Returns + +`number` -• `Static`**defaultVersion**(`value`: *number*): *void* +• `Static` `set` **defaultVersion**(`value`): `void` Sets the default version to use when creating new tags. If [forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true` then all tags will be rendered with this version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | ID3v2 version to use. Must be 2, 3, or 4. The default for this library is 3 | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | ID3v2 version to use. Must be 2, 3, or 4. The default for this library is 3 | -**Returns:** *void* +#### Returns + +`void` ___ ### footerSize -• `Static`**footerSize**(): *number* +• `Static` `get` **footerSize**(): `number` Size of an ID3v2 footer in bytes -**Returns:** *number* +#### Returns + +`number` ___ ### forceDefaultEncoding -• `Static`**forceDefaultEncoding**(): *boolean* +• `Static` `get` **forceDefaultEncoding**(): `boolean` Gets whether or not to render all frames with the default encoding rather than their original encoding. -**Returns:** *boolean* +#### Returns + +`boolean` -• `Static`**forceDefaultEncoding**(`value`: *boolean*): *void* +• `Static` `set` **forceDefaultEncoding**(`value`): `void` Sets whether or not to render all frames with the default encoding rather than their original encoding. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *boolean* | If `true` frames will be rendered using [defaultEncoding](id3v2settings.md#defaultencoding) rather than their original encoding. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `boolean` | If `true` frames will be rendered using [defaultEncoding](id3v2settings.md#defaultencoding) rather than their original encoding. | -**Returns:** *void* +#### Returns + +`void` ___ ### forceDefaultVersion -• `Static`**forceDefaultVersion**(): *boolean* +• `Static` `get` **forceDefaultVersion**(): `boolean` Gets whether or not to save all tags in the default version rather than their original version. -**Returns:** *boolean* +#### Returns + +`boolean` -• `Static`**forceDefaultVersion**(`value`: *boolean*): *void* +• `Static` `set` **forceDefaultVersion**(`value`): `void` Sets whether or not to save all tags in the default version rather than their original version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *boolean* | If `true`, tags will be saved in the version defined in [defaultVersion](id3v2settings.md#defaultversion) rather than their original format, with the exception of tags with footers which will always be saved in version 4 | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `boolean` | If `true`, tags will be saved in the version defined in [defaultVersion](id3v2settings.md#defaultversion) rather than their original format, with the exception of tags with footers which will always be saved in version 4 | -**Returns:** *void* +#### Returns + +`void` ___ ### headerSize -• `Static`**headerSize**(): *number* +• `Static` `get` **headerSize**(): `number` Size of an ID3v2 header in bytes -**Returns:** *number* +#### Returns + +`number` ___ ### strictFrameForVersion -• `Static`**strictFrameForVersion**(): *boolean* +• `Static` `get` **strictFrameForVersion**(): `boolean` Gets whether or not attempting to write a frame that is unsupported in the desired version will throw an error. @@ -147,9 +163,11 @@ If `true` writing a frame that is not supported in the desired version will thro during the render process. If `false` if a frame is not supported in the desired version it will be omitted from rendering and no error will be thrown. -**Returns:** *boolean* +#### Returns + +`boolean` -• `Static`**strictFrameForVersion**(`value`: *boolean*): *void* +• `Static` `set` **strictFrameForVersion**(`value`): `void` Sets whether or not attempting to write a frame that is unsupported in the desired version will throw an error. @@ -157,19 +175,21 @@ If `true` writing a frame that is not supported in the desired version will thro during the render process. If `false` if a frame is not supported in the desired version it will be omitted from rendering and no error will be thrown. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *boolean* | +| Name | Type | +| :------ | :------ | +| `value` | `boolean` | -**Returns:** *void* +#### Returns + +`void` ___ ### useNonStandardV2V3GenreSeparators -• `Static`**useNonStandardV2V3GenreSeparators**(): *boolean* +• `Static` `get` **useNonStandardV2V3GenreSeparators**(): `boolean` Gets whether or not to use non-standard genre separators on ID3v2.2 and ID3v2.4. If `true`, the TCO/TCON frame value will be separated by `;` and/or `/`, empty values will @@ -182,9 +202,11 @@ standard, escaped numeric genres). maintain compatibility, this functionality is preserved, but can be disabled by setting [useNonStandardV2V3GenreSeparators](id3v2settings.md#usenonstandardv2v3genreseparators) to `false`. -**Returns:** *boolean* +#### Returns + +`boolean` -• `Static`**useNonStandardV2V3GenreSeparators**(`value`: *boolean*): *void* +• `Static` `set` **useNonStandardV2V3GenreSeparators**(`value`): `void` Sets whether or not to use non-standard genre separators on ID3v2.2 and ID3v2.3. If `true`, the TCO/TCON frame value will be separated by `;` and/or `/`, empty values will @@ -197,19 +219,21 @@ standard, escaped numeric genres). maintain compatibility, this functionality is preserved, but can be disabled by setting [useNonStandardV2V3GenreSeparators](id3v2settings.md#usenonstandardv2v3genreseparators) to `false`. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *boolean* | +| Name | Type | +| :------ | :------ | +| `value` | `boolean` | -**Returns:** *void* +#### Returns + +`void` ___ ### useNonStandardV2V3NumericGenres -• `Static`**useNonStandardV2V3NumericGenres**(): *boolean* +• `Static` `get` **useNonStandardV2V3NumericGenres**(): `boolean` Gets whether or not to use non-standard numeric genre parsing on ID3v2.2 and ID3v2.3. If `true`, a purely numeric TCO/TCON frame value will attempt to be parsed as a numeric genre. @@ -221,9 +245,11 @@ If `false`, the TCO/TCON frame value will be returned without parsing purely num compatibility, this functionality is preserved, but can be disabled by setting [useNonStandardV2V3NumericGenres](id3v2settings.md#usenonstandardv2v3numericgenres) to `false`. -**Returns:** *boolean* +#### Returns + +`boolean` -• `Static`**useNonStandardV2V3NumericGenres**(`value`: *boolean*): *void* +• `Static` `set` **useNonStandardV2V3NumericGenres**(`value`): `void` Sets whether or not to use non-standard numeric genre parsing on ID3v2.2 and ID3v2.3. If `true`, a purely numeric TCO/TCON frame value will attempt to be parsed as a numeric genre. @@ -235,38 +261,44 @@ If `false`, the TCO/TCON frame value will be returned without parsing purely num compatibility, this functionality is preserved, but can be disabled by setting [useNonStandardV2V3NumericGenres](id3v2settings.md#usenonstandardv2v3numericgenres) to `false`. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `boolean` | -Name | Type | ------- | ------ | -`value` | *boolean* | +#### Returns -**Returns:** *void* +`void` ___ ### useNumericGenres -• `Static`**useNumericGenres**(): *boolean* +• `Static` `get` **useNumericGenres**(): `boolean` Gets whether or not to use ID3v1 style numeric genres when possible. If `true`, the library will try looking up the numeric genre code when storing the value. for ID3v2.2 and ID3v2.3 "Rock" would be stored as "(17)" and for ID3v2.4, it would be stored as "17". -**Returns:** *boolean* +#### Returns -• `Static`**useNumericGenres**(`value`: *boolean*): *void* +`boolean` + +• `Static` `set` **useNumericGenres**(`value`): `void` Sets whether or not to use ID3v1 style numeric genres when possible. If `true`, the library will try looking up the numeric genre code when storing the value. for ID3v2.2 and ID3v2.3 "Rock" would be stored as "(17)" and for ID3v2.4, it would be stored as "17". -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `boolean` | Whether or not to use genres with numeric values when values when possible | -Name | Type | Description | ------- | ------ | ------ | -`value` | *boolean* | Whether or not to use genres with numeric values when values when possible | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/classes/id3v2synchronized.md b/docs/classes/id3v2synchronized.md index 69013eab..57f7f24b 100644 --- a/docs/classes/id3v2synchronized.md +++ b/docs/classes/id3v2synchronized.md @@ -7,9 +7,9 @@ frames. ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2Synchronized** + ↳ **`Id3v2Synchronized`** ## Table of contents @@ -51,58 +51,68 @@ frames. ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### description -• **description**(): *string* +• `get` **description**(): `string` Gets the description of the current instance. -**Returns:** *string* +#### Returns + +`string` -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets the description of the current instance. There should only be one frame with a matching description, type, and ISO-639-2 language code per tag. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Description to store | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Description to store | +#### Returns -**Returns:** *void* +`void` ___ ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -111,67 +121,79 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2synchronized.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### format -• **format**(): [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md) +• `get` **format**(): [`Id3v2TimestampFormat`](../enums/id3v2timestampformat.md) Gets the timestamp format used by the current instance. -**Returns:** [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md) +#### Returns + +[`Id3v2TimestampFormat`](../enums/id3v2timestampformat.md) -• **format**(`value`: [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md)): *void* +• `set` **format**(`value`): `void` Sets the timestamp format used by the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`Id3v2TimestampFormat`](../enums/id3v2timestampformat.md) | Timestamp format to use | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*Id3v2TimestampFormat*](../enums/id3v2timestampformat.md) | Timestamp format to use | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) -**`inheritdoc`** +**`inheritdoc`** -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +#### Returns + +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -179,26 +201,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -207,259 +233,310 @@ ___ ### language -• **language**(): *string* +• `get` **language**(): `string` Gets the ISO-639-2 language code stored in the current instance -**Returns:** *string* +#### Returns + +`string` -• **language**(`value`: *string*): *void* +• `set` **language**(`value`): `void` Sets the ISO-639-2 language code stored in the current instance. There should only be one frame with a matching description, type, and ISO-639-2 language code per tag. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | ISO-639-2 language code stored in the current instance | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | ISO-639-2 language code stored in the current instance | -**Returns:** *void* +#### Returns + +`void` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### text -• **text**(): [*Id3v2SynchronizedLyricsFrame*](id3v2synchronizedlyricsframe.md)[] +• `get` **text**(): [`Id3v2SynchronizedLyricsFrame`](id3v2synchronizedlyricsframe.md)[] Gets the text contained in the current instance -**Returns:** [*Id3v2SynchronizedLyricsFrame*](id3v2synchronizedlyricsframe.md)[] +#### Returns -• **text**(`value`: [*Id3v2SynchronizedLyricsFrame*](id3v2synchronizedlyricsframe.md)[]): *void* +[`Id3v2SynchronizedLyricsFrame`](id3v2synchronizedlyricsframe.md)[] + +• `set` **text**(`value`): `void` Sets the text contained in the current instance -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`Id3v2SynchronizedLyricsFrame`](id3v2synchronizedlyricsframe.md)[] | Text contained in the current instance | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*Id3v2SynchronizedLyricsFrame*](id3v2synchronizedlyricsframe.md)[] | Text contained in the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when storing the current instance -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when storing the current instance. This encoding is overridden when rendering if [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true` or the render version does not support it. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | [*StringType*](../enums/stringtype.md) | Text encoding to use when storing the current instance | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | Text encoding to use when storing the current instance | -**Returns:** *void* +#### Returns + +`void` ___ ### textType -• **textType**(): [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md) +• `get` **textType**(): [`Id3v2SynchronizedTextType`](../enums/id3v2synchronizedtexttype.md) Gets the type of text contained in the current instance -**Returns:** [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md) +#### Returns + +[`Id3v2SynchronizedTextType`](../enums/id3v2synchronizedtexttype.md) -• **textType**(`value`: [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md)): *void* +• `set` **textType**(`value`): `void` Sets the type of text contained in the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md) | Type of the synchronized text | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`Id3v2SynchronizedTextType`](../enums/id3v2synchronizedtexttype.md) | Type of the synchronized text | -**Returns:** *void* +#### Returns + +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. + +#### Returns -**`inheritdoc`** +[`Id3v2Frame`](id3v2frame.md) -**Returns:** [*Id3v2Frame*](id3v2frame.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` -**`inheritdoc`** +Populates the values in this frame by parsing its field data in a specified version. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -**Returns:** *void* +#### Returns -Overrides: [Id3v2Frame](id3v2frame.md) +`void` + +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -Name | Type | ------- | ------ | -`version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2Synchronized*](id3v2synchronized.md)[], `description`: *string*, `textType`: [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md), `language?`: *string*): [*Id3v2Synchronized*](id3v2synchronized.md) +▸ `Static` **find**(`frames`, `description`, `textType`, `language?`): [`Id3v2Synchronized`](id3v2synchronized.md) Gets a specified lyrics frame from a list of synchronized lyrics frames -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2Synchronized*](id3v2synchronized.md)[] | List of frames to search | -`description` | *string* | Description to match | -`textType` | [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md) | Text type to match | -`language?` | *string* | Optionally, ISO-639-2 language code to match | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2Synchronized`](id3v2synchronized.md)[] | List of frames to search | +| `description` | `string` | Description to match | +| `textType` | [`Id3v2SynchronizedTextType`](../enums/id3v2synchronizedtexttype.md) | Text type to match | +| `language?` | `string` | Optionally, ISO-639-2 language code to match | -**Returns:** [*Id3v2Synchronized*](id3v2synchronized.md) +#### Returns + +[`Id3v2Synchronized`](id3v2synchronized.md) SynchronizedLyricsFrame Frame containing the matching user, `undefined` if a match was not found @@ -468,7 +545,7 @@ ___ ### findPreferred -▸ `Static`**findPreferred**(`frames`: [*Id3v2Synchronized*](id3v2synchronized.md)[], `description`: *string*, `language`: *string*, `textType`: [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md)): [*Id3v2Synchronized*](id3v2synchronized.md) +▸ `Static` **findPreferred**(`frames`, `description`, `language`, `textType`): [`Id3v2Synchronized`](id3v2synchronized.md) Gets a synchronized lyrics frame from the specified list, trying to match the description and language but accepting an incomplete match. @@ -480,16 +557,18 @@ This method tries matching with the following order of precedence: * The first frame with a matching type. * The first frame. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2Synchronized`](id3v2synchronized.md)[] | List of frames to search for the best match | +| `description` | `string` | Description to match | +| `language` | `string` | ISO-639-2 language code to match | +| `textType` | [`Id3v2SynchronizedTextType`](../enums/id3v2synchronizedtexttype.md) | Text type to match | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2Synchronized*](id3v2synchronized.md)[] | List of frames to search for the best match | -`description` | *string* | Description to match | -`language` | *string* | ISO-639-2 language code to match | -`textType` | [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md) | Text type to match | +#### Returns -**Returns:** [*Id3v2Synchronized*](id3v2synchronized.md) +[`Id3v2Synchronized`](id3v2synchronized.md) SynchronizedLyricsFrame The matching frame or `undefined` if a match was not found @@ -497,56 +576,62 @@ ___ ### fromInfo -▸ `Static`**fromInfo**(`description`: *string*, `language`: *string*, `textType`: [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md), `encoding?`: [*StringType*](../enums/stringtype.md)): [*Id3v2Synchronized*](id3v2synchronized.md) +▸ `Static` **fromInfo**(`description`, `language`, `textType`, `encoding?`): [`Id3v2Synchronized`](id3v2synchronized.md) Constructs and initializes a new instance with a specified description, ISO-639-2 language code, text type, and text encoding. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `description` | `string` | Description of the synchronized lyrics frame | +| `language` | `string` | ISO-639-2 language code of the new instance | +| `textType` | [`Id3v2SynchronizedTextType`](../enums/id3v2synchronizedtexttype.md) | Type of the text to store in the new instance | +| `encoding` | [`StringType`](../enums/stringtype.md) | Encoding to use when rendering text in this new instance | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`description` | *string* | - | Description of the synchronized lyrics frame | -`language` | *string* | - | ISO-639-2 language code of the new instance | -`textType` | [*Id3v2SynchronizedTextType*](../enums/id3v2synchronizedtexttype.md) | - | Type of the text to store in the new instance | -`encoding` | [*StringType*](../enums/stringtype.md) | ... | Encoding to use when rendering text in this new instance | +#### Returns -**Returns:** [*Id3v2Synchronized*](id3v2synchronized.md) +[`Id3v2Synchronized`](id3v2synchronized.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2Synchronized*](id3v2synchronized.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2Synchronized`](id3v2synchronized.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 format. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new instance | -`offset` | *number* | Offset into `data` where the frame begins. Must be unsigned, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `offset` in `data` | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new instance | +| `offset` | `number` | Offset into `data` where the frame begins. Must be unsigned, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `offset` in `data` | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2Synchronized*](id3v2synchronized.md) +#### Returns + +[`Id3v2Synchronized`](id3v2synchronized.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2Synchronized*](id3v2synchronized.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2Synchronized`](id3v2synchronized.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 format. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new instance | +| `version` | `number` | ID3v2 version the raw frame is encoded with. Must be unsigned 8-bit integer. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new instance | -`version` | *number* | ID3v2 version the raw frame is encoded with. Must be unsigned 8-bit integer. | +#### Returns -**Returns:** [*Id3v2Synchronized*](id3v2synchronized.md) +[`Id3v2Synchronized`](id3v2synchronized.md) diff --git a/docs/classes/id3v2synchronizedlyricsframe.md b/docs/classes/id3v2synchronizedlyricsframe.md index a39409dd..1635936b 100644 --- a/docs/classes/id3v2synchronizedlyricsframe.md +++ b/docs/classes/id3v2synchronizedlyricsframe.md @@ -4,10 +4,6 @@ This structure contains a single entry in a [SynchronizedLyricsFrame](../enums/id3v2frameclasstype.md#synchronizedlyricsframe) object. -## Hierarchy - -* **Id3v2SynchronizedLyricsFrame** - ## Table of contents ### Constructors @@ -31,24 +27,22 @@ This structure contains a single entry in a [SynchronizedLyricsFrame](../enums/i ### constructor -\+ **new Id3v2SynchronizedLyricsFrame**(`time`: *number*, `text`: *string*): [*Id3v2SynchronizedLyricsFrame*](id3v2synchronizedlyricsframe.md) +• **new Id3v2SynchronizedLyricsFrame**(`time`, `text`) Constructs and initializes a new instance with a specified time and text. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`time` | *number* | Offset into the media that owns this element when this element should be displayed. See {@link TimestampFormat} for possible values. | -`text` | *string* | Text for the point in time | - -**Returns:** [*Id3v2SynchronizedLyricsFrame*](id3v2synchronizedlyricsframe.md) +| Name | Type | Description | +| :------ | :------ | :------ | +| `time` | `number` | Offset into the media that owns this element when this element should be displayed. See {@link TimestampFormat} for possible values. | +| `text` | `string` | Text for the point in time | ## Properties ### text -• **text**: *string* +• **text**: `string` Text for the point in time represented by the current instance. @@ -56,46 +50,54 @@ Text for the point in time represented by the current instance. ### time -• **time**(): *number* +• `get` **time**(): `number` Gets time offset of the current instance. The specific format this text element is defined in {@link SynchronizedLyricsFrame.format} of the frame that owns this element. -**Returns:** *number* +#### Returns + +`number` -• **time**(`value`: *number*): *void* +• `set` **time**(`value`): `void` Sets time offset of the current instance. The specific format this text element is defined in {@link SynchronizedLyricsFrame.format} of the frame that owns this element. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Offset of the current instance, must be a safe | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Offset of the current instance, must be a safe | -**Returns:** *void* +#### Returns + +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2SynchronizedLyricsFrame*](id3v2synchronizedlyricsframe.md) +▸ **clone**(): [`Id3v2SynchronizedLyricsFrame`](id3v2synchronizedlyricsframe.md) Creates a copy of this instance. -**Returns:** [*Id3v2SynchronizedLyricsFrame*](id3v2synchronizedlyricsframe.md) +#### Returns + +[`Id3v2SynchronizedLyricsFrame`](id3v2synchronizedlyricsframe.md) ___ ### render -▸ **render**(`encoding`: [*StringType*](../enums/stringtype.md)): [*ByteVector*](bytevector.md) +▸ **render**(`encoding`): [`ByteVector`](bytevector.md) + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `encoding` | [`StringType`](../enums/stringtype.md) | -Name | Type | ------- | ------ | -`encoding` | [*StringType*](../enums/stringtype.md) | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) diff --git a/docs/classes/id3v2tag.md b/docs/classes/id3v2tag.md index 2b16ce7f..dc1eea01 100644 --- a/docs/classes/id3v2tag.md +++ b/docs/classes/id3v2tag.md @@ -4,9 +4,9 @@ ## Hierarchy -* [*Tag*](tag.md) +- [`Tag`](tag.md) - ↳ **Id3v2Tag** + ↳ **`Id3v2Tag`** ## Table of contents @@ -106,32 +106,36 @@ ### album -• **album**(): *string* +• `get` **album**(): `string` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. **`inheritdoc`** TALB frame -**Returns:** *string* +#### Returns + +`string` Album of the media represented by the current instance or `undefined` if no value is present -• **album**(`value`: *string*): *void* +• `set` **album**(`value`): `void` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. **`inheritdoc`** TALB frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Album of the media represented by the current instance or `undefined` if no value is present @@ -140,33 +144,37 @@ ___ ### albumArtists -• **albumArtists**(): *string*[] +• `get` **albumArtists**(): `string`[] Gets the band or artist who is credited credited in the creation of the entire album or collection containing the media described by the current instance. **`inheritdoc`** TSO2 frame -**Returns:** *string*[] +#### Returns + +`string`[] Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present -• **albumArtists**(`value`: *string*[]): *void* +• `set` **albumArtists**(`value`): `void` Gets the band or artist who is credited credited in the creation of the entire album or collection containing the media described by the current instance. **`inheritdoc`** TSO2 frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is @@ -176,33 +184,37 @@ ___ ### albumArtistsSort -• **albumArtistsSort**(): *string*[] +• `get` **albumArtistsSort**(): `string`[] Gets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. **`inheritdoc`** TPE2 frame -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. -• **albumArtistsSort**(`value`: *string*[]): *void* +• `set` **albumArtistsSort**(`value`): `void` Gets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. **`inheritdoc`** TPE2 frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty @@ -212,30 +224,34 @@ ___ ### albumSort -• **albumSort**(): *string* +• `get` **albumSort**(): `string` Gets the sortable name of the album title of the media represented by the current instance. **`inheritdoc`** TSOA frame -**Returns:** *string* +#### Returns + +`string` Sortable name for the album title of the media or `undefined` if the value is not present -• **albumSort**(`value`: *string*): *void* +• `set` **albumSort**(`value`): `void` Gets the sortable name of the album title of the media represented by the current instance. **`inheritdoc`** TSOA frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Sortable name for the album title of the media or `undefined` if the value is not present @@ -244,30 +260,34 @@ ___ ### amazonId -• **amazonId**(): *string* +• `get` **amazonId**(): `string` Gets the Amazon ID of the media represented by the current instance. **`inheritdoc`** TXXX:ASIN -**Returns:** *string* +#### Returns + +`string` Amazon ID of the media represented by the current instance or `undefined` if no value is present -• **amazonId**(`value`: *string*): *void* +• `set` **amazonId**(`value`): `void` Gets the Amazon ID of the media represented by the current instance. **`inheritdoc`** TXXX:ASIN -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Amazon ID of the media represented by the current instance or `undefined` if no value is present @@ -276,32 +296,36 @@ ___ ### beatsPerMinute -• **beatsPerMinute**(): *number* +• `get` **beatsPerMinute**(): `number` Gets the number of beats per minute in the audio of the media represented by the current instance. **`inheritdoc`** TBPM frame -**Returns:** *number* +#### Returns + +`number` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified -• **beatsPerMinute**(`value`: *number*): *void* +• `set` **beatsPerMinute**(`value`): `void` Gets the number of beats per minute in the audio of the media represented by the current instance. **`inheritdoc`** TBPM frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified @@ -310,30 +334,34 @@ ___ ### comment -• **comment**(): *string* +• `get` **comment**(): `string` Gets a user comment on the media represented by the current instance. **`inheritdoc`** COMM frame -**Returns:** *string* +#### Returns + +`string` User comments on the media represented by the current instance or `undefined` if the value is not present -• **comment**(`value`: *string*): *void* +• `set` **comment**(`value`): `void` Gets a user comment on the media represented by the current instance. **`inheritdoc`** COMM frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` User comments on the media represented by the current instance or `undefined` if the value is not present @@ -342,30 +370,34 @@ ___ ### composers -• **composers**(): *string*[] +• `get` **composers**(): `string`[] Gets the composers of the media represented by the current instance. **`inheritdoc`** TCOM frame -**Returns:** *string*[] +#### Returns + +`string`[] Composers of the media represented by the current instance of an empty array if no value is present. -• **composers**(`value`: *string*[]): *void* +• `set` **composers**(`value`): `void` Gets the composers of the media represented by the current instance. **`inheritdoc`** TCOM frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Composers of the media represented by the current instance of an empty array if no value is present. @@ -374,30 +406,34 @@ ___ ### composersSort -• **composersSort**(): *string*[] +• `get` **composersSort**(): `string`[] Gets the sortable names of the composers of the media represented by the current instance. **`inheritdoc`** TSOC frame -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. -• **composersSort**(`value`: *string*[]): *void* +• `set` **composersSort**(`value`): `void` Gets the sortable names of the composers of the media represented by the current instance. **`inheritdoc`** TSOC frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. @@ -406,30 +442,34 @@ ___ ### conductor -• **conductor**(): *string* +• `get` **conductor**(): `string` Gets the conductor or director of the media represented by the current instance. **`inheritdoc`** TPE3 frame -**Returns:** *string* +#### Returns + +`string` Conductor or director of the media represented by the current instance or `undefined` if no value present. -• **conductor**(`value`: *string*): *void* +• `set` **conductor**(`value`): `void` Gets the conductor or director of the media represented by the current instance. **`inheritdoc`** TPE3 frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Conductor or director of the media represented by the current instance or `undefined` if no value present. @@ -438,30 +478,34 @@ ___ ### copyright -• **copyright**(): *string* +• `get` **copyright**(): `string` Gets the copyright information for the media represented by the current instance. **`inheritdoc`** TCOP frame -**Returns:** *string* +#### Returns + +`string` Copyright information for the media represented by the current instance or `undefined` if no value is present. -• **copyright**(`value`: *string*): *void* +• `set` **copyright**(`value`): `void` Gets the copyright information for the media represented by the current instance. **`inheritdoc`** TCOP frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Copyright information for the media represented by the current instance or `undefined` if no value is present. @@ -470,29 +514,33 @@ ___ ### dateTagged -• **dateTagged**(): Date +• `get` **dateTagged**(): `Date` Gets the date and time at which the tag has been written. **`inheritdoc`** TDTG frame -**Returns:** Date +#### Returns + +`Date` Date/time at which the tag has been written, or `undefined` if no value is present -• **dateTagged**(`value`: Date): *void* +• `set` **dateTagged**(`value`): `void` Gets the date and time at which the tag has been written. **`inheritdoc`** TDTG frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | Date | +| Name | Type | +| :------ | :------ | +| `value` | `Date` | -**Returns:** *void* +#### Returns + +`void` Date/time at which the tag has been written, or `undefined` if no value is present @@ -500,7 +548,7 @@ ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but @@ -508,12 +556,14 @@ generally no spoliers. This should give the impression of what to expect in the **`inheritdoc`** user text frame "description" -**Returns:** *string* +#### Returns + +`string` Description of the media represented by the current instance or `undefined` if no value is present -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Gets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but @@ -521,13 +571,15 @@ generally no spoliers. This should give the impression of what to expect in the **`inheritdoc`** user text frame "description" -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Description of the media represented by the current instance or `undefined` if no value is present @@ -536,32 +588,36 @@ ___ ### disc -• **disc**(): *number* +• `get` **disc**(): `number` Gets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. **`inheritdoc`** TPOS frame -**Returns:** *number* +#### Returns + +`number` Number of the disc or season of the media represented by the current instance in a boxed set. -• **disc**(`value`: *number*): *void* +• `set` **disc**(`value`): `void` Gets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. **`inheritdoc`** TPOS frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Number of the disc or season of the media represented by the current instance in a boxed set. @@ -570,32 +626,36 @@ ___ ### discCount -• **discCount**(): *number* +• `get` **discCount**(): `number` Gets the number of discs or seasons in the boxed set containing the media represented by the current instance. **`inheritdoc`** TPOS frame -**Returns:** *number* +#### Returns + +`number` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. -• **discCount**(`value`: *number*): *void* +• `set` **discCount**(`value`): `void` Gets the number of discs or seasons in the boxed set containing the media represented by the current instance. **`inheritdoc`** TPOS frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. @@ -604,132 +664,156 @@ ___ ### firstAlbumArtist -• **firstAlbumArtist**(): *string* +• `get` **firstAlbumArtist**(): `string` Gets the the first value contained in [albumArtists](id3v2tag.md#albumartists). -**Returns:** *string* +#### Returns + +`string` ___ ### firstAlbumArtistSort -• **firstAlbumArtistSort**(): *string* +• `get` **firstAlbumArtistSort**(): `string` Gets the first value contained in [albumArtistsSort](id3v2tag.md#albumartistssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposer -• **firstComposer**(): *string* +• `get` **firstComposer**(): `string` Gets the first value contained in [composers](id3v2tag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposerSort -• **firstComposerSort**(): *string* +• `get` **firstComposerSort**(): `string` Gets the first value contained in [composersSort](id3v2tag.md#composerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstGenre -• **firstGenre**(): *string* +• `get` **firstGenre**(): `string` Gets the first value contained in [genres](id3v2tag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformer -• **firstPerformer**(): *string* +• `get` **firstPerformer**(): `string` Gets the first value contained in [performers](id3v2tag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformerSort -• **firstPerformerSort**(): *string* +• `get` **firstPerformerSort**(): `string` Gets the first value contained in [performersSort](id3v2tag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### flags -• **flags**(): [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) +• `get` **flags**(): [`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) Gets the header flags applied to the current instance. -**Returns:** [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) +#### Returns + +[`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) -• **flags**(`value`: [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the header flags applied to the current instance -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) | Bitwise combined [Id3v2TagHeaderFlags](../enums/id3v2tagheaderflags.md) value containing flags applied to the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) | Bitwise combined [Id3v2TagHeaderFlags](../enums/id3v2tagheaderflags.md) value containing flags applied to the current instance. | +#### Returns -**Returns:** *void* +`void` ___ ### frames -• **frames**(): [*Id3v2Frame*](id3v2frame.md)[] +• `get` **frames**(): [`Id3v2Frame`](id3v2frame.md)[] Gets all frames contained in the current instance. -**Returns:** [*Id3v2Frame*](id3v2frame.md)[] +#### Returns + +[`Id3v2Frame`](id3v2frame.md)[] ___ ### genres -• **genres**(): *string*[] +• `get` **genres**(): `string`[] Gets the genres of the media represented by the current instance. **`inheritdoc`** TCON frame -**Returns:** *string*[] +#### Returns + +`string`[] Genres of the media represented by the current instance or an empty array if no value is present. -• **genres**(`value`: *string*[]): *void* +• `set` **genres**(`value`): `void` Gets the genres of the media represented by the current instance. **`inheritdoc`** TCON frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Genres of the media represented by the current instance or an empty array if no value is present. @@ -738,30 +822,34 @@ ___ ### grouping -• **grouping**(): *string* +• `get` **grouping**(): `string` Gets the grouping on the album which the media in the current instance belongs to. **`inheritdoc`** TIT1 frame -**Returns:** *string* +#### Returns + +`string` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. -• **grouping**(`value`: *string*): *void* +• `set` **grouping**(`value`): `void` Gets the grouping on the album which the media in the current instance belongs to. **`inheritdoc`** TIT1 frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. @@ -770,29 +858,33 @@ ___ ### initialKey -• **initialKey**(): *string* +• `get` **initialKey**(): `string` Gets the initial key of the track. **`inheritdoc`** TKEY frame -**Returns:** *string* +#### Returns + +`string` Initial key of the track or `undefined` if no value is set -• **initialKey**(`value`: *string*): *void* +• `set` **initialKey**(`value`): `void` Gets the initial key of the track. **`inheritdoc`** TKEY frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Initial key of the track or `undefined` if no value is set @@ -800,39 +892,45 @@ ___ ### isCompilation -• **isCompilation**(): *boolean* +• `get` **isCompilation**(): `boolean` Gets whether or not the album described by the current instance is a compilation. This property is implemented using the TCMP Text Information Frame to provide support for a feature of the Apple iPod and iTunes products. -**Returns:** *boolean* +#### Returns + +`boolean` -• **isCompilation**(`value`: *boolean*): *void* +• `set` **isCompilation**(`value`): `void` Gets whether or not the album described by the current instance is a compilation. This property is implemented using the TCMP Text Information Frame to provide support for a feature of the Apple iPod and iTunes products. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `boolean` | Whether or not the album described by the current instance is a compilation | -Name | Type | Description | ------- | ------ | ------ | -`value` | *boolean* | Whether or not the album described by the current instance is a compilation | +#### Returns -**Returns:** *void* +`void` ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Gets whether or not the current instance is empty. -**`inheritdoc`** +**`inheritdoc`** -**Returns:** *boolean* +#### Returns + +`boolean` `true` if the current instance does not contain any values. `false` otherwise @@ -840,29 +938,33 @@ ___ ### isrc -• **isrc**(): *string* +• `get` **isrc**(): `string` Gets the ISRC (International Standard Recording Code) of the track. **`inheritdoc`** TSRC frame -**Returns:** *string* +#### Returns + +`string` the ISRC of the track or `undefined` if no value is set -• **isrc**(`value`: *string*): *void* +• `set` **isrc**(`value`): `void` Gets the ISRC (International Standard Recording Code) of the track. **`inheritdoc`** TSRC frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` the ISRC of the track or `undefined` if no value is set @@ -870,80 +972,94 @@ ___ ### joinedAlbumArtists -• **joinedAlbumArtists**(): *string* +• `get` **joinedAlbumArtists**(): `string` Gets a semicolon and space separated string containing the values in [albumArtists](id3v2tag.md#albumartists) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedComposers -• **joinedComposers**(): *string* +• `get` **joinedComposers**(): `string` Gets a semicolon and space separated string containing the values in [composers](id3v2tag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedGenres -• **joinedGenres**(): *string* +• `get` **joinedGenres**(): `string` Gets a semicolon and space separated string containing the values in [genres](id3v2tag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformers -• **joinedPerformers**(): *string* +• `get` **joinedPerformers**(): `string` Gets a semicolon and space separated string containing the values in [performers](id3v2tag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformersSort -• **joinedPerformersSort**(): *string* +• `get` **joinedPerformersSort**(): `string` Gets a semicolon and space separated string containing the values in [performersSort](id3v2tag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### lyrics -• **lyrics**(): *string* +• `get` **lyrics**(): `string` Gets the lyrics or script of the media represented by the current instance. **`inheritdoc`** USLT frame -**Returns:** *string* +#### Returns + +`string` Lyrics or script of the media represented by the current instance or `undefined` if no value is present -• **lyrics**(`value`: *string*): *void* +• `set` **lyrics**(`value`): `void` Gets the lyrics or script of the media represented by the current instance. **`inheritdoc`** USLT frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Lyrics or script of the media represented by the current instance or `undefined` if no value is present @@ -952,30 +1068,34 @@ ___ ### musicBrainzArtistId -• **musicBrainzArtistId**(): *string* +• `get` **musicBrainzArtistId**(): `string` Gets the MusicBrainz artist ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Artist Id frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzArtistId**(`value`: *string*): *void* +• `set` **musicBrainzArtistId**(`value`): `void` Gets the MusicBrainz artist ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Artist Id frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present @@ -984,30 +1104,34 @@ ___ ### musicBrainzDiscId -• **musicBrainzDiscId**(): *string* +• `get` **musicBrainzDiscId**(): `string` Gets the MusicBrainz disc ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Disc Id frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzDiscId**(`value`: *string*): *void* +• `set` **musicBrainzDiscId**(`value`): `void` Gets the MusicBrainz disc ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Disc Id frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present @@ -1016,30 +1140,34 @@ ___ ### musicBrainzReleaseArtistId -• **musicBrainzReleaseArtistId**(): *string* +• `get` **musicBrainzReleaseArtistId**(): `string` Gets the MusicBrainz release artist ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Artist Id frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseArtistId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseArtistId**(`value`): `void` Gets the MusicBrainz release artist ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Artist Id frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present @@ -1048,30 +1176,34 @@ ___ ### musicBrainzReleaseCountry -• **musicBrainzReleaseCountry**(): *string* +• `get` **musicBrainzReleaseCountry**(): `string` Gets the MusicBrainz release country of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Release Country frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseCountry**(`value`: *string*): *void* +• `set` **musicBrainzReleaseCountry**(`value`): `void` Gets the MusicBrainz release country of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Release Country frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present @@ -1080,30 +1212,34 @@ ___ ### musicBrainzReleaseGroupId -• **musicBrainzReleaseGroupId**(): *string* +• `get` **musicBrainzReleaseGroupId**(): `string` Gets the MusicBrainz release group ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Release Group Id frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseGroupId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseGroupId**(`value`): `void` Gets the MusicBrainz release group ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Release Group Id frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present @@ -1112,30 +1248,34 @@ ___ ### musicBrainzReleaseId -• **musicBrainzReleaseId**(): *string* +• `get` **musicBrainzReleaseId**(): `string` Gets the MusicBrainz release ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Id frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseId**(`value`): `void` Gets the MusicBrainz release ID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Id frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present @@ -1144,30 +1284,34 @@ ___ ### musicBrainzReleaseStatus -• **musicBrainzReleaseStatus**(): *string* +• `get` **musicBrainzReleaseStatus**(): `string` Gets the MusicBrainz release status of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Status frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseStatus**(`value`: *string*): *void* +• `set` **musicBrainzReleaseStatus**(`value`): `void` Gets the MusicBrainz release status of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Status frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present @@ -1176,30 +1320,34 @@ ___ ### musicBrainzReleaseType -• **musicBrainzReleaseType**(): *string* +• `get` **musicBrainzReleaseType**(): `string` Gets the MusicBrainz release type of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Type frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseType**(`value`: *string*): *void* +• `set` **musicBrainzReleaseType**(`value`): `void` Gets the MusicBrainz release type of the media represented by the current instance. **`inheritdoc`** TXXX:MusicBrainz Album Type frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present @@ -1208,32 +1356,36 @@ ___ ### musicBrainzTrackId -• **musicBrainzTrackId**(): *string* +• `get` **musicBrainzTrackId**(): `string` Gets the MusicBrainz track ID of the media represented by the media represented by the current instance. **`inheritdoc`** UFID:http://musicbrainz.org frame -**Returns:** *string* +#### Returns + +`string` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzTrackId**(`value`: *string*): *void* +• `set` **musicBrainzTrackId**(`value`): `void` Gets the MusicBrainz track ID of the media represented by the media represented by the current instance. **`inheritdoc`** UFID:http://musicbrainz.org frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present @@ -1242,30 +1394,34 @@ ___ ### musicIpId -• **musicIpId**(): *string* +• `get` **musicIpId**(): `string` Gets the MusicIP PUID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicIP PUID frame -**Returns:** *string* +#### Returns + +`string` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present -• **musicIpId**(`value`: *string*): *void* +• `set` **musicIpId**(`value`): `void` Gets the MusicIP PUID of the media represented by the current instance. **`inheritdoc`** TXXX:MusicIP PUID frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present @@ -1274,30 +1430,34 @@ ___ ### performers -• **performers**(): *string*[] +• `get` **performers**(): `string`[] Gets the performers or artists who performed in the media described by the current instance. **`inheritdoc`** TPE1 frame -**Returns:** *string*[] +#### Returns + +`string`[] Performers who performed in the media described by the current instance or an empty array if no value is present. -• **performers**(`value`: *string*[]): *void* +• `set` **performers**(`value`): `void` Gets the performers or artists who performed in the media described by the current instance. **`inheritdoc`** TPE1 frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Performers who performed in the media described by the current instance or an empty array if no value is present. @@ -1306,7 +1466,7 @@ ___ ### performersRole -• **performersRole**(): *string*[] +• `get` **performersRole**(): `string`[] Gets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](id3v2tag.md#performers) array (for each person, correspond one/more @@ -1315,12 +1475,14 @@ example: "Bass; Backing Vocals; Vibraphone". **`inheritdoc`** TMCL frame -**Returns:** *string*[] +#### Returns + +`string`[] Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. -• **performersRole**(`value`: *string*[]): *void* +• `set` **performersRole**(`value`): `void` Gets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](id3v2tag.md#performers) array (for each person, correspond one/more @@ -1329,13 +1491,15 @@ example: "Bass; Backing Vocals; Vibraphone". **`inheritdoc`** TMCL frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. @@ -1344,32 +1508,36 @@ ___ ### performersSort -• **performersSort**(): *string*[] +• `get` **performersSort**(): `string`[] Gets the sortable names of the performers or artists who performed in the media described by the current instance. **`inheritdoc`** TSOP frame -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. -• **performersSort**(`value`: *string*[]): *void* +• `set` **performersSort**(`value`): `void` Gets the sortable names of the performers or artists who performed in the media described by the current instance. **`inheritdoc`** TSOP frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. @@ -1378,30 +1546,34 @@ ___ ### pictures -• **pictures**(): [*IPicture*](../interfaces/ipicture.md)[] +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] Gets a collection of pictures associated with the media represented by the current instance. **`inheritdoc`** APIC frame -**Returns:** [*IPicture*](../interfaces/ipicture.md)[] +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. -• **pictures**(`value`: [*IPicture*](../interfaces/ipicture.md)[]): *void* +• `set` **pictures**(`value`): `void` Gets a collection of pictures associated with the media represented by the current instance. **`inheritdoc`** APIC frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | -Name | Type | ------- | ------ | -`value` | [*IPicture*](../interfaces/ipicture.md)[] | +#### Returns -**Returns:** *void* +`void` Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. @@ -1410,29 +1582,33 @@ ___ ### publisher -• **publisher**(): *string* +• `get` **publisher**(): `string` Gets the publisher of the track. **`inheritdoc`** TPUB frame -**Returns:** *string* +#### Returns + +`string` Publisher of the track or `undefined` if no value is set -• **publisher**(`value`: *string*): *void* +• `set` **publisher**(`value`): `void` Gets the publisher of the track. **`inheritdoc`** TPUB frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Publisher of the track or `undefined` if no value is set @@ -1440,29 +1616,33 @@ ___ ### remixedBy -• **remixedBy**(): *string* +• `get` **remixedBy**(): `string` Gets the remixer of the track. **`inheritdoc`** TPE4 frame -**Returns:** *string* +#### Returns + +`string` Remixer of the track or `undefined` if no value is set -• **remixedBy**(`value`: *string*): *void* +• `set` **remixedBy**(`value`): `void` Gets the remixer of the track. **`inheritdoc`** TPE4 frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` Remixer of the track or `undefined` if no value is set @@ -1470,29 +1650,33 @@ ___ ### replayGainAlbumGain -• **replayGainAlbumGain**(): *number* +• `get` **replayGainAlbumGain**(): `number` Gets the ReplayGain album gain in dB. **`inheritdoc`** TXXX:REPLAYGAIN_ALBUM_GAIN frame -**Returns:** *number* +#### Returns + +`number` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainAlbumGain**(`value`: *number*): *void* +• `set` **replayGainAlbumGain**(`value`): `void` Gets the ReplayGain album gain in dB. **`inheritdoc`** TXXX:REPLAYGAIN_ALBUM_GAIN frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1500,29 +1684,33 @@ ___ ### replayGainAlbumPeak -• **replayGainAlbumPeak**(): *number* +• `get` **replayGainAlbumPeak**(): `number` Gets the ReplayGain album peak sample. **`inheritdoc`** TXXX:REPLAYGAIN_ALBUM_PEAK frame -**Returns:** *number* +#### Returns + +`number` Album peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainAlbumPeak**(`value`: *number*): *void* +• `set` **replayGainAlbumPeak**(`value`): `void` Gets the ReplayGain album peak sample. **`inheritdoc`** TXXX:REPLAYGAIN_ALBUM_PEAK frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Album peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1530,29 +1718,33 @@ ___ ### replayGainTrackGain -• **replayGainTrackGain**(): *number* +• `get` **replayGainTrackGain**(): `number` Gets the ReplayGain track gain in dB. **`inheritdoc`** TXXX:REPLAY_GAIN_TRACK_GAIN frame -**Returns:** *number* +#### Returns + +`number` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainTrackGain**(`value`: *number*): *void* +• `set` **replayGainTrackGain**(`value`): `void` Gets the ReplayGain track gain in dB. **`inheritdoc`** TXXX:REPLAY_GAIN_TRACK_GAIN frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1560,29 +1752,33 @@ ___ ### replayGainTrackPeak -• **replayGainTrackPeak**(): *number* +• `get` **replayGainTrackPeak**(): `number` Gets the ReplayGain track peak sample. **`inheritdoc`** TXXX:REPLAYGAIN_TRACK_PEAK frame -**Returns:** *number* +#### Returns + +`number` Track peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainTrackPeak**(`value`: *number*): *void* +• `set` **replayGainTrackPeak**(`value`): `void` Gets the ReplayGain track peak sample. **`inheritdoc`** TXXX:REPLAYGAIN_TRACK_PEAK frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Track peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1590,30 +1786,34 @@ ___ ### subtitle -• **subtitle**(): *string* +• `get` **subtitle**(): `string` Gets a description, one-line. It represents the tagline of the vide/music. **`inheritdoc`** TIT3 frame -**Returns:** *string* +#### Returns + +`string` Subtitle of the media represented by the current instance or `undefined` if no value is present -• **subtitle**(`value`: *string*): *void* +• `set` **subtitle**(`value`): `void` Gets a description, one-line. It represents the tagline of the vide/music. **`inheritdoc`** TIT3 frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Subtitle of the media represented by the current instance or `undefined` if no value is present @@ -1622,43 +1822,49 @@ ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. A bit wise combined [TagTypes](../enums/tagtypes.md) containing the tag types contained in the current instance. -**`inheritdoc`** +**`inheritdoc`** + +#### Returns -**Returns:** [*TagTypes*](../enums/tagtypes.md) +[`TagTypes`](../enums/tagtypes.md) ___ ### title -• **title**(): *string* +• `get` **title**(): `string` Gets the title for the media described by the current instance. **`inheritdoc`** TIT2 frame -**Returns:** *string* +#### Returns + +`string` Title of the media described by the current instance or `undefined` if no value is present. -• **title**(`value`: *string*): *void* +• `set` **title**(`value`): `void` Gets the title for the media described by the current instance. **`inheritdoc`** TIT2 frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Title of the media described by the current instance or `undefined` if no value is present. @@ -1667,30 +1873,34 @@ ___ ### titleSort -• **titleSort**(): *string* +• `get` **titleSort**(): `string` Gets the sortable name for the title of the media described by the current instance. **`inheritdoc`** TSOT frame -**Returns:** *string* +#### Returns + +`string` Sortable name of the media described by the current instance or `undefined` if no value is present -• **titleSort**(`value`: *string*): *void* +• `set` **titleSort**(`value`): `void` Gets the sortable name for the title of the media described by the current instance. **`inheritdoc`** TSOT frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` Sortable name of the media described by the current instance or `undefined` if no value is present @@ -1699,32 +1909,36 @@ ___ ### track -• **track**(): *number* +• `get` **track**(): `number` Gets the position of the media represented by the current instance in its containing album or season (for a series). **`inheritdoc`** TRCK frame -**Returns:** *number* +#### Returns + +`number` Position of the media represented by the current instance in its containing album or `0` if not specified. -• **track**(`value`: *number*): *void* +• `set` **track**(`value`): `void` Gets the position of the media represented by the current instance in its containing album or season (for a series). **`inheritdoc`** TRCK frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Position of the media represented by the current instance in its containing album or `0` if not specified. @@ -1733,32 +1947,36 @@ ___ ### trackCount -• **trackCount**(): *number* +• `get` **trackCount**(): `number` Gets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. **`inheritdoc`** TRCK frame -**Returns:** *number* +#### Returns + +`number` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. -• **trackCount**(`value`: *number*): *void* +• `set` **trackCount**(`value`): `void` Gets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. **`inheritdoc`** TRCK frame -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. @@ -1767,56 +1985,64 @@ ___ ### version -• **version**(): *number* +• `get` **version**(): `number` Gets the ID3v2 version for the current instance. -**Returns:** *number* +#### Returns + +`number` -• **version**(`value`: *number*): *void* +• `set` **version**(`value`): `void` Sets the ID3v2 version for the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | ID3v2 version for the current instance. Must be 2, 3, or 4. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | ID3v2 version for the current instance. Must be 2, 3, or 4. | +#### Returns -**Returns:** *void* +`void` ___ ### year -• **year**(): *number* +• `get` **year**(): `number` Gets the year that the media represented by the current instance was recorded. -**`inheritdoc`** +**`inheritdoc`** If a TDRC frame exists, the year will be read from that. If a TDRC frame doesn't exist and a TYER or TYE frame exists, the year will be read from that. Failing both cases, 0 will be returned. -**Returns:** *number* +#### Returns + +`number` Year that the media represented by the current instance was created or `0` if no value is present. -• **year**(`value`: *number*): *void* +• `set` **year**(`value`): `void` Gets the year that the media represented by the current instance was recorded. -**`inheritdoc`** +**`inheritdoc`** NOTE: values >9999 will remove the frame -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | -Name | Type | ------- | ------ | -`value` | *number* | +#### Returns -**Returns:** *void* +`void` Year that the media represented by the current instance was created or `0` if no value is present. @@ -1825,97 +2051,121 @@ ___ ### language -• `Static`**language**(): *string* +• `Static` `get` **language**(): `string` Gets the ISO-639-2 language code to use when searching for and storing language specific values. -**Returns:** *string* +#### Returns -• `Static`**language**(`value`: *string*): *void* +`string` + +• `Static` `set` **language**(`value`): `void` Gets the ISO-639-2 language code to use when searching for and storing language specific values. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | ISO-639-2 language code to use. If the language is unknown `" "` is the appropriate filler | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | ISO-639-2 language code to use. If the language is unknown `" "` is the appropriate filler | +#### Returns -**Returns:** *void* +`void` ## Methods ### addFrame -▸ **addFrame**(`frame`: [*Id3v2Frame*](id3v2frame.md)): *void* +▸ **addFrame**(`frame`): `void` Adds a frame to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frame` | [*Id3v2Frame*](id3v2frame.md) | Frame to add to the current instance | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frame` | [`Id3v2Frame`](id3v2frame.md) | Frame to add to the current instance | -**Returns:** *void* +#### Returns + +`void` ___ ### clear -▸ **clear**(): *void* +▸ **clear**(): `void` + +Clears all values stored in the current instance. -**`inheritdoc`** +**`remarks`** The clearing procedure is format specific and should clear all values. -**Returns:** *void* +#### Returns -Overrides: [Tag](tag.md) +`void` + +#### Overrides + +[Tag](tag.md).[clear](tag.md#clear) ___ ### copyTo -▸ **copyTo**(`target`: [*Tag*](tag.md), `overwrite`: *boolean*): *void* +▸ **copyTo**(`target`, `overwrite`): `void` + +Copies the values from the current instance to another [Tag](tag.md), optionally overwriting + existing values. + +**`remarks`** This method only copies the most basic values when copying between different tag + formats. However, if `target` is of the same type as the current instance, + more advanced copying may be done. For example if both `this` and `target` are + [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`target` | [*Tag*](tag.md) | -`overwrite` | *boolean* | +`void` -**Returns:** *void* +#### Overrides -Overrides: [Tag](tag.md) +[Tag](tag.md).[copyTo](tag.md#copyto) ___ ### getFramesByClassType -▸ **getFramesByClassType**(`type`: [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md)): TFrame[] +▸ **getFramesByClassType**<`TFrame`\>(`type`): `TFrame`[] Gets all frames with a specific frame class type. NOTE: This diverges from the .NET implementation due to the inability to do type checking like in .NET (ie `x is y`). Instead type guards are added to each frame class which provides the same functionality. -#### Type parameters: +#### Type parameters -Name | Type | ------- | ------ | -`TFrame` | [*Id3v2Frame*](id3v2frame.md) | +| Name | Type | +| :------ | :------ | +| `TFrame` | extends [`Id3v2Frame`](id3v2frame.md)<`TFrame`\> | -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) | Class type of the frame to find | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) | Class type of the frame to find | -**Returns:** TFrame[] +#### Returns + +`TFrame`[] TFrame[] Array of frames with the specified class type @@ -1923,7 +2173,7 @@ ___ ### getFramesByIdentifier -▸ **getFramesByIdentifier**(`type`: [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md), `ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): TFrame[] +▸ **getFramesByIdentifier**<`TFrame`\>(`type`, `ident`): `TFrame`[] Gets a list of frames with the specified identifier contained in the current instance. NOTE: This implementation deviates a bit from the original .NET implementation due to the @@ -1931,20 +2181,22 @@ inability to do `x is y` comparison by types in typescript without type guards. `type` is the type guard for differentiating frame types. If all frames are needed use [frames](id3v2tag.md#frames). -#### Type parameters: +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `TFrame` | extends [`Id3v2Frame`](id3v2frame.md)<`TFrame`\> | -Name | Type | ------- | ------ | -`TFrame` | [*Id3v2Frame*](id3v2frame.md) | +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) | Type of frame to return | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Identifier of the frame | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) | Type of frame to return | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Identifier of the frame | +#### Returns -**Returns:** TFrame[] +`TFrame`[] TFrame[] Array of frames with the desired frame identifier @@ -1952,18 +2204,20 @@ ___ ### getTextAsString -▸ **getTextAsString**(`ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): *string* +▸ **getTextAsString**(`ident`): `string` Gets the text value from a specified text information frame (or URL frame if that was specified). -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Frame identifier of the text information frame to get the value from | +| Name | Type | Description | +| :------ | :------ | :------ | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Frame identifier of the text information frame to get the value from | -**Returns:** *string* +#### Returns + +`string` string Text of the specified frame, or `undefined` if no value was found @@ -1971,72 +2225,80 @@ ___ ### parse -▸ `Protected`**parse**(`data`: [*ByteVector*](bytevector.md), `file`: [*File*](file.md), `position`: *number*, `style`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **parse**(`data`, `file`, `position`, `style`): `void` + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | +| `file` | [`File`](file.md) | +| `position` | `number` | +| `style` | [`ReadStyle`](../enums/readstyle.md) | -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`file` | [*File*](file.md) | -`position` | *number* | -`style` | [*ReadStyle*](../enums/readstyle.md) | +#### Returns -**Returns:** *void* +`void` ___ ### read -▸ `Protected`**read**(`file`: [*File*](file.md), `position`: *number*, `style`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **read**(`file`, `position`, `style`): `void` -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`file` | [*File*](file.md) | -`position` | *number* | -`style` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `file` | [`File`](file.md) | +| `position` | `number` | +| `style` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### removeFrame -▸ **removeFrame**(`frame`: [*Id3v2Frame*](id3v2frame.md)): *void* +▸ **removeFrame**(`frame`): `void` Removes a specified frame from the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frame` | [`Id3v2Frame`](id3v2frame.md) | Object to remove from the current instance | -Name | Type | Description | ------- | ------ | ------ | -`frame` | [*Id3v2Frame*](id3v2frame.md) | Object to remove from the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### removeFrames -▸ **removeFrames**(`ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): *void* +▸ **removeFrames**(`ident`): `void` Removes all frames with a specified identifier from the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Identifier of the frames to remove | -Name | Type | Description | ------- | ------ | ------ | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Identifier of the frames to remove | +#### Returns -**Returns:** *void* +`void` ___ ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) Renders the current instance as a raw ID3v2 tag. By default, tags will be rendered in the version they were loaded in and new tags using the @@ -2044,7 +2306,9 @@ version specified by [defaultVersion](id3v2settings.md#defaultversion). If [forc tags will be rendered using that version, except for tags with footers which must be in version 4. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ByteVector The rendered tag. @@ -2052,110 +2316,126 @@ ___ ### replaceFrame -▸ **replaceFrame**(`oldFrame`: [*Id3v2Frame*](id3v2frame.md), `newFrame`: [*Id3v2Frame*](id3v2frame.md)): *void* +▸ **replaceFrame**(`oldFrame`, `newFrame`): `void` Replaces an existing frame with a new one in the list contained in the current instance, or adds a new one if the existing one is not contained. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `oldFrame` | [`Id3v2Frame`](id3v2frame.md) | Object to be replaced | +| `newFrame` | [`Id3v2Frame`](id3v2frame.md) | Object to replace `oldFrame` with | -Name | Type | Description | ------- | ------ | ------ | -`oldFrame` | [*Id3v2Frame*](id3v2frame.md) | Object to be replaced | -`newFrame` | [*Id3v2Frame*](id3v2frame.md) | Object to replace `oldFrame` with | +#### Returns -**Returns:** *void* +`void` ___ ### setInfoTag -▸ **setInfoTag**(): *void* +▸ **setInfoTag**(): `void` Set the tags that represent the tagger software (node-taglib-sharp) itself. **`remarks`** This is typically a method to call just before saving a tag. -**Returns:** *void* +#### Returns -Inherited from: [Tag](tag.md) +`void` + +#### Inherited from + +[Tag](tag.md).[setInfoTag](tag.md#setinfotag) ___ ### setNumberFrame -▸ **setNumberFrame**(`ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md), `numerator`: *number*, `denominator`: *number*, `minPlaces?`: *number*): *void* +▸ **setNumberFrame**(`ident`, `numerator`, `denominator`, `minPlaces?`): `void` Sets the numerical values for a specified text information frame. If both `numerator` and `denominator` are `0`, the frame will be removed from the tag. If `denominator` is zero, `numerator` will be stored by itself. Otherwise the values will be stored as `{numerator}/{denominator}`. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | - | Identity of the frame to set | -`numerator` | *number* | - | Value containing the top half of the fraction, or the number if `denominator` is zero | -`denominator` | *number* | - | Value containing the bottom half of the fraction | -`minPlaces` | *number* | 1 | Minimum number of digits to use to display the `numerator`, if the numerator has less than this number of digits, it will be filled with leading zeroes. | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | `undefined` | Identity of the frame to set | +| `numerator` | `number` | `undefined` | Value containing the top half of the fraction, or the number if `denominator` is zero | +| `denominator` | `number` | `undefined` | Value containing the bottom half of the fraction | +| `minPlaces` | `number` | `1` | Minimum number of digits to use to display the `numerator`, if the numerator has less than this number of digits, it will be filled with leading zeroes. | -**Returns:** *void* +#### Returns + +`void` ___ ### setTextFrame -▸ **setTextFrame**(`ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md), ...`text`: *string*[]): *void* +▸ **setTextFrame**(`ident`, ...`text`): `void` Sets the text for a specified text information frame. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Identifier of the frame to set the data for | +| `...text` | `string`[] | Text to set for the specified frame or `undefined`/`null`/`""` to remove all frames with that identifier. | -Name | Type | Description | ------- | ------ | ------ | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Identifier of the frame to set the data for | -`...text` | *string*[] | Text to set for the specified frame or `undefined`/`null`/`""` to remove all frames with that identifier. | +#### Returns -**Returns:** *void* +`void` ___ ### firstInGroup -▸ `Protected` `Static`**firstInGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **firstInGroup**(`group`): `string` Gets the first string in an array. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of strings to get the first string from. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | -**Returns:** *string* +#### Returns + +`string` First string contained in `group` or `undefined` if the array is `undefined` or empty -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[firstInGroup](tag.md#firstingroup) ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*Id3v2Tag*](id3v2tag.md) +▸ `Static` **fromData**(`data`): [`Id3v2Tag`](id3v2tag.md) Constructs and initializes a new Tag by reading the contents from a specified [ByteVector](bytevector.md) object. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Tag data to read into a tag object | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Tag data to read into a tag object | +#### Returns -**Returns:** [*Id3v2Tag*](id3v2tag.md) +[`Id3v2Tag`](id3v2tag.md) Id3v2Tag Tag with the data from the byte vector read into it @@ -2163,28 +2443,32 @@ ___ ### fromEmpty -▸ `Static`**fromEmpty**(): [*Id3v2Tag*](id3v2tag.md) +▸ `Static` **fromEmpty**(): [`Id3v2Tag`](id3v2tag.md) -**Returns:** [*Id3v2Tag*](id3v2tag.md) +#### Returns + +[`Id3v2Tag`](id3v2tag.md) ___ ### fromFile -▸ `Static`**fromFile**(`file`: [*File*](file.md), `position`: *number*, `style`: [*ReadStyle*](../enums/readstyle.md)): [*Id3v2Tag*](id3v2tag.md) +▸ `Static` **fromFile**(`file`, `position`, `style`): [`Id3v2Tag`](id3v2tag.md) Constructs and initializes a new Tag by reading the contents from a specified position in the provided file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File from which the contents of the new instance is to be read | +| `position` | `number` | Offset into the file where the tag should be read from | +| `style` | [`ReadStyle`](../enums/readstyle.md) | How the data is to be read into the current instance | -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File from which the contents of the new instance is to be read | -`position` | *number* | Offset into the file where the tag should be read from | -`style` | [*ReadStyle*](../enums/readstyle.md) | How the data is to be read into the current instance | +#### Returns -**Returns:** [*Id3v2Tag*](id3v2tag.md) +[`Id3v2Tag`](id3v2tag.md) Id3v2Tag Tag with the data from the file read into it @@ -2192,41 +2476,49 @@ ___ ### isFalsyOrLikeEmpty -▸ `Protected` `Static`**isFalsyOrLikeEmpty**(`value`: *string* \| *string*[]): *boolean* +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` Checks if a value is falsy or empty. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* \| *string*[] | Object to check | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | -**Returns:** *boolean* +#### Returns + +`boolean` If `value` is a string, `true` is returned if the value is falsy or all whitespace, `false` is returned otherwise. If `value` is an array of strings, the array must be falsy or all elements must be falsy or whitespace to return `true`. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[isFalsyOrLikeEmpty](tag.md#isfalsyorlikeempty) ___ ### joinGroup -▸ `Protected` `Static`**joinGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **joinGroup**(`group`): `string` Joins an array of string into a single, semicolon and space separated string. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of string to join | +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | -**Returns:** *string* +#### Returns + +`string` A semicolon and space separated string containing the values from `group` or undefined if the array is `undefined` or empty. -Inherited from: [Tag](tag.md) +#### Inherited from + +[Tag](tag.md).[joinGroup](tag.md#joingroup) diff --git a/docs/classes/id3v2tagfooter.md b/docs/classes/id3v2tagfooter.md index 35e71b82..3063d030 100644 --- a/docs/classes/id3v2tagfooter.md +++ b/docs/classes/id3v2tagfooter.md @@ -2,10 +2,6 @@ # Class: Id3v2TagFooter -## Hierarchy - -* **Id3v2TagFooter** - ## Table of contents ### Constructors @@ -31,163 +27,187 @@ ### constructor -\+ **new Id3v2TagFooter**(): [*Id3v2TagFooter*](id3v2tagfooter.md) - -**Returns:** [*Id3v2TagFooter*](id3v2tagfooter.md) +• **new Id3v2TagFooter**() ## Accessors ### completeTagSize -• **completeTagSize**(): *number* +• `get` **completeTagSize**(): `number` Gets the complete size of the tag described by the current instance including the header and footer. -**Returns:** *number* +#### Returns + +`number` ___ ### flags -• **flags**(): [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) +• `get` **flags**(): [`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) Gets the flags applied to the current instance. -**Returns:** [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) +#### Returns -• **flags**(`value`: [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md)): *void* +[`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) + +• `set` **flags**(`value`): `void` Sets the flags applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) | Bitwise combined [Id3v2TagHeaderFlags](../enums/id3v2tagheaderflags.md) value containing the flags to apply to the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) | Bitwise combined [Id3v2TagHeaderFlags](../enums/id3v2tagheaderflags.md) value containing the flags to apply to the current instance. | +#### Returns -**Returns:** *void* +`void` ___ ### majorVersion -• **majorVersion**(): *number* +• `get` **majorVersion**(): `number` Sets the major version of the tag described by the current instance. -**Returns:** *number* +#### Returns -• **majorVersion**(`value`: *number*): *void* +`number` + +• `set` **majorVersion**(`value`): `void` Sets the major version of the tag described by the current instance. When the version is set, unsupported header flags will automatically be removed from the tag. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | ID3v2 version if tag described by the current instance. Footers are only supported with version 4, so this value can only be 4. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | ID3v2 version if tag described by the current instance. Footers are only supported with version 4, so this value can only be 4. | +#### Returns -**Returns:** *void* +`void` ___ ### revisionNumber -• **revisionNumber**(): *number* +• `get` **revisionNumber**(): `number` Gets the version revision number of the tag represented by the current instance. -**Returns:** *number* +#### Returns -• **revisionNumber**(`value`: *number*): *void* +`number` + +• `set` **revisionNumber**(`value`): `void` Sets the version revision number of the tag represented by the current instance. This value should always be zero. Non-zero values indicate an experimental or new version of the format which may not be completely understood by the current version of node-taglib-sharp. Some software may refuse to read tags with a non-zero value. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Version revision number of the tag represented by the current instance. Must be an 8-bit unsigned integer. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Version revision number of the tag represented by the current instance. Must be an 8-bit unsigned integer. | +#### Returns -**Returns:** *void* +`void` ___ ### tagSize -• **tagSize**(): *number* +• `get` **tagSize**(): `number` Gets the complete size of the tag described by the current instance, minus the header and footer. -**Returns:** *number* +#### Returns -• **tagSize**(`value`: *number*): *void* +`number` + +• `set` **tagSize**(`value`): `void` Sets the complete size of the tag described by the current instance, minus the header footer. NOTE THIS MUST BE AN 28-BIT UNSIGNED INTEGER. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Size of the tag in bytes. Must be an unsigned 28-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Size of the tag in bytes. Must be an unsigned 28-bit integer | +#### Returns -**Returns:** *void* +`void` ___ ### fileIdentifier -• `Static`**fileIdentifier**(): [*ByteVector*](bytevector.md) +• `Static` `get` **fileIdentifier**(): [`ByteVector`](bytevector.md) Identifier used to recognize an ID3v2 footer. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ## Methods ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) + +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*Id3v2TagFooter*](id3v2tagfooter.md) +▸ `Static` **fromData**(`data`): [`Id3v2TagFooter`](id3v2tagfooter.md) Constructs and initializes a new instance by reading it from raw footer data. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw data to build the instance from | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw data to build the instance from | -**Returns:** [*Id3v2TagFooter*](id3v2tagfooter.md) +#### Returns + +[`Id3v2TagFooter`](id3v2tagfooter.md) ___ ### fromHeader -▸ `Static`**fromHeader**(`header`: [*Id3v2TagHeader*](id3v2tagheader.md)): [*Id3v2TagFooter*](id3v2tagfooter.md) +▸ `Static` **fromHeader**(`header`): [`Id3v2TagFooter`](id3v2tagfooter.md) Constructs and initializes a new footer based on the contents of the header used for the same tag. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `header` | [`Id3v2TagHeader`](id3v2tagheader.md) | Header from which to base the new footer | -Name | Type | Description | ------- | ------ | ------ | -`header` | [*Id3v2TagHeader*](id3v2tagheader.md) | Header from which to base the new footer | +#### Returns -**Returns:** [*Id3v2TagFooter*](id3v2tagfooter.md) +[`Id3v2TagFooter`](id3v2tagfooter.md) diff --git a/docs/classes/id3v2tagheader.md b/docs/classes/id3v2tagheader.md index 0c10572e..d085663f 100644 --- a/docs/classes/id3v2tagheader.md +++ b/docs/classes/id3v2tagheader.md @@ -2,10 +2,6 @@ # Class: Id3v2TagHeader -## Hierarchy - -* **Id3v2TagHeader** - ## Table of contents ### Constructors @@ -30,148 +26,170 @@ ### constructor -\+ **new Id3v2TagHeader**(): [*Id3v2TagHeader*](id3v2tagheader.md) - -**Returns:** [*Id3v2TagHeader*](id3v2tagheader.md) +• **new Id3v2TagHeader**() ## Accessors ### completeTagSize -• **completeTagSize**(): *number* +• `get` **completeTagSize**(): `number` Gets the complete size of the tag described by the current instance including the header and footer. -**Returns:** *number* +#### Returns + +`number` ___ ### flags -• **flags**(): [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) +• `get` **flags**(): [`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) Gets the flags applied to the current instance. -**Returns:** [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) +#### Returns -• **flags**(`value`: [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md)): *void* +[`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) + +• `set` **flags**(`value`): `void` Sets the flags applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`Id3v2TagHeaderFlags`](../enums/id3v2tagheaderflags.md) | Bitwise combined [Id3v2TagHeaderFlags](../enums/id3v2tagheaderflags.md) value containing the flags to apply to the current instance. | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*Id3v2TagHeaderFlags*](../enums/id3v2tagheaderflags.md) | Bitwise combined [Id3v2TagHeaderFlags](../enums/id3v2tagheaderflags.md) value containing the flags to apply to the current instance. | +#### Returns -**Returns:** *void* +`void` ___ ### majorVersion -• **majorVersion**(): *number* +• `get` **majorVersion**(): `number` Gets the major version of the tag described by the current instance. -**Returns:** *number* +#### Returns -• **majorVersion**(`value`: *number*): *void* +`number` + +• `set` **majorVersion**(`value`): `void` Sets the major version of the tag described by the current instance. When the version is set, unsupported header flags will automatically be removed from the tag. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | ID3v2 version of tag. Must be a positive 8-bit integer betweenInclusive 2 and 4. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | ID3v2 version of tag. Must be a positive 8-bit integer betweenInclusive 2 and 4. | +#### Returns -**Returns:** *void* +`void` ___ ### revisionNumber -• **revisionNumber**(): *number* +• `get` **revisionNumber**(): `number` Gets the version revision number of the tag represented by the current instance. -**Returns:** *number* +#### Returns -• **revisionNumber**(`value`: *number*): *void* +`number` + +• `set` **revisionNumber**(`value`): `void` Sets the version revision number of the tag represented by the current instance. This value should always be zero. Non-zero values indicate an experimental or new version of the format which may not be completely understood by the current version of node-taglib-sharp. Some software may refuse to read tags with a non-zero value. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Version revision number of the tag represented by the current instance. Must be an 8-bit unsigned integer. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Version revision number of the tag represented by the current instance. Must be an 8-bit unsigned integer. | +#### Returns -**Returns:** *void* +`void` ___ ### tagSize -• **tagSize**(): *number* +• `get` **tagSize**(): `number` Gets the complete size of the tag described by the current instance, minus the header and footer. -**Returns:** *number* +#### Returns -• **tagSize**(`value`: *number*): *void* +`number` + +• `set` **tagSize**(`value`): `void` Sets the complete size of the tag described by the current instance, minus the header footer. NOTE THIS MUST BE A 28-BIT UNSIGNED INTEGER. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Size of the tag in bytes. Must be an unsigned 28-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Size of the tag in bytes. Must be an unsigned 28-bit integer | +#### Returns -**Returns:** *void* +`void` ___ ### fileIdentifier -• `Static`**fileIdentifier**(): [*ByteVector*](bytevector.md) +• `Static` `get` **fileIdentifier**(): [`ByteVector`](bytevector.md) The identifier used to recognize an ID3v2 header. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ## Methods ### render -▸ **render**(): [*ByteVector*](bytevector.md) +▸ **render**(): [`ByteVector`](bytevector.md) Renders the current instance as a raw ID3v2 header -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*Id3v2TagHeader*](id3v2tagheader.md) +▸ `Static` **fromData**(`data`): [`Id3v2TagHeader`](id3v2tagheader.md) Constructs and initializes a new instance by reading it from the raw header data. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Object containing the raw data to build the new instance from. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Object containing the raw data to build the new instance from. | +#### Returns -**Returns:** [*Id3v2TagHeader*](id3v2tagheader.md) +[`Id3v2TagHeader`](id3v2tagheader.md) diff --git a/docs/classes/id3v2termsofuseframe.md b/docs/classes/id3v2termsofuseframe.md index 94682889..7691d305 100644 --- a/docs/classes/id3v2termsofuseframe.md +++ b/docs/classes/id3v2termsofuseframe.md @@ -4,9 +4,9 @@ ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2TermsOfUseFrame** + ↳ **`Id3v2TermsOfUseFrame`** ## Table of contents @@ -46,34 +46,40 @@ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -82,45 +88,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) + +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2termsofuseframe.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) -**`inheritdoc`** +**`inheritdoc`** -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +#### Returns + +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -128,26 +142,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -156,244 +174,293 @@ ___ ### language -• **language**(): *string* +• `get` **language**(): `string` Gets the ISO-639-2 language code stored in the current instance. -**Returns:** *string* +#### Returns -• **language**(`value`: *string*): *void* +`string` + +• `set` **language**(`value`): `void` Sets the ISO-639-2 language code stored in the current instance. There should only be one frame with a matching ISO-639-2 language code per tag. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### text -• **text**(): *string* +• `get` **text**(): `string` Gets the text of the terms of use -**Returns:** *string* +#### Returns -• **text**(`value`: *string*): *void* +`string` + +• `set` **text**(`value`): `void` Sets the text of the terms of use -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when storing the current instance. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +[`StringType`](../enums/stringtype.md) + +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when storing the current instance. This encoding is overridden when rendering if [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true` or the render version does not support it. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | Text encoding to use when storing the current instance | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*StringType*](../enums/stringtype.md) | Text encoding to use when storing the current instance | +#### Returns -**Returns:** *void* +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. + +#### Returns -**`inheritdoc`** +[`Id3v2Frame`](id3v2frame.md) -**Returns:** [*Id3v2Frame*](id3v2frame.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +#### Returns -**Returns:** *void* +`void` -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -Name | Type | ------- | ------ | -`version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` Returns a string representation of the frame. -**Returns:** *string* +#### Returns + +`string` ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md)[], `language?`: *string*): [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +▸ `Static` **find**(`frames`, `language?`): [`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) Gets a specified terms of use frame from the list of frames -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md)[] | List of frames to search | +| `language?` | `string` | Optionally, the ISO-639-2 language code to match | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md)[] | List of frames to search | -`language?` | *string* | Optionally, the ISO-639-2 language code to match | +#### Returns -**Returns:** [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +[`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) TermsOfUseFrame A matching frame if found or `undefined` if a matching frame was not found @@ -402,19 +469,21 @@ ___ ### findPreferred -▸ `Static`**findPreferred**(`frames`: [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md)[], `language`: *string*): [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +▸ `Static` **findPreferred**(`frames`, `language`): [`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) Gets a specified terms of use frame from the list of frames, trying to match the language but accepting one with a different language if a match was not found. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md)[] | List of frames to search | -`language` | *string* | ISO-639-2 language code to match | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md)[] | List of frames to search | +| `language` | `string` | ISO-639-2 language code to match | -**Returns:** [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +#### Returns + +[`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) TermsOfUseFrame Frame containing the matching frame or `undefined` if a match was not found @@ -423,53 +492,59 @@ ___ ### fromFields -▸ `Static`**fromFields**(`language`: *string*, `textEncoding?`: [*StringType*](../enums/stringtype.md)): [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +▸ `Static` **fromFields**(`language`, `textEncoding?`): [`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) Constructs and initializes a new instance with a specified language. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `language` | `string` | ISO-639-2 language code for the new frame | +| `textEncoding` | [`StringType`](../enums/stringtype.md) | Optional, text encoding to use when rendering the new frame. If not provided defaults to [Id3v2Settings.defaultEncoding](id3v2settings.md#defaultencoding) | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`language` | *string* | - | ISO-639-2 language code for the new frame | -`textEncoding` | [*StringType*](../enums/stringtype.md) | ... | Optional, text encoding to use when rendering the new frame. If not provided defaults to [Id3v2Settings.defaultEncoding](id3v2settings.md#defaultencoding) | +#### Returns -**Returns:** [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +[`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +#### Returns + +[`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2TermsOfUseFrame*](id3v2termsofuseframe.md) +[`Id3v2TermsOfUseFrame`](id3v2termsofuseframe.md) diff --git a/docs/classes/id3v2textinformationframe.md b/docs/classes/id3v2textinformationframe.md index f4131c37..0c929e53 100644 --- a/docs/classes/id3v2textinformationframe.md +++ b/docs/classes/id3v2textinformationframe.md @@ -124,11 +124,11 @@ Nilsson 2000). ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2TextInformationFrame** + ↳ **`Id3v2TextInformationFrame`** - ↳↳ [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) + ↳↳ [`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) ## Table of contents @@ -175,74 +175,80 @@ Nilsson 2000). ### constructor -\+ `Protected`**new Id3v2TextInformationFrame**(`header`: [*Id3v2FrameHeader*](id3v2frameheader.md)): [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +• `Protected` **new Id3v2TextInformationFrame**(`header`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | +| Name | Type | +| :------ | :------ | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | -**Returns:** [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +#### Overrides -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[constructor](id3v2frame.md#constructor) ## Properties ### \_encoding -• `Protected` **\_encoding**: [*StringType*](../enums/stringtype.md) +• `Protected` **\_encoding**: [`StringType`](../enums/stringtype.md) ___ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ___ ### \_rawData -• `Protected` **\_rawData**: [*ByteVector*](bytevector.md) +• `Protected` **\_rawData**: [`ByteVector`](bytevector.md) ___ ### \_rawVersion -• `Protected` **\_rawVersion**: *number* +• `Protected` **\_rawVersion**: `number` ___ ### \_textFields -• `Protected` **\_textFields**: *string*[] +• `Protected` **\_textFields**: `string`[] = `[]` ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -251,45 +257,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) + +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2textinformationframe.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) -**`inheritdoc`** +**`inheritdoc`** -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +#### Returns + +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -297,26 +311,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -325,120 +343,145 @@ ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### text -• **text**(): *string*[] +• `get` **text**(): `string`[] Gets the text contained in the current instance. Note: Modifying the contents of the returned value will not modify the contents of the current instance. The value must be reassigned for the value to change. -**Returns:** *string*[] +#### Returns + +`string`[] -• **text**(`value`: *string*[]): *void* +• `set` **text**(`value`): `void` Sets the text contained in the current instance. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when rendering the current instance. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when rendering the current instance. This value will be overridden if [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true`. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*StringType*](../enums/stringtype.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | -**Returns:** *void* +#### Returns + +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2Frame*](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `version` | `number` | ID3v2 version the field data is encoded in | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`version` | *number* | +`void` -**Returns:** *void* +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### parseRawData -▸ `Protected`**parseRawData**(): *void* +▸ `Protected` **parseRawData**(): `void` Performs the actual parsing of the raw data. Because of the high parsing cost and relatively low usage of the class [parseFields](id3v2textinformationframe.md#parsefields) @@ -446,118 +489,140 @@ only stores the field data so it can be parsed on demand. Whenever a property or called which requires the data, this method is called, and only on the first call does it actually parse the data. -**Returns:** *void* +#### Returns + +`void` ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version to use when encoding the current instance. Must be a positive 8-bit integer. | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | ID3v2 version to use when encoding the current instance. Must be a positive 8-bit integer. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Rendered version of the current instance. -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -Name | Type | ------- | ------ | -`version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` Returns a text representation of the current instance by combining the text with semicolons. -**Returns:** *string* +#### Returns + +`string` ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### findTextInformationFrame -▸ `Static`**findTextInformationFrame**(`frames`: [*Id3v2TextInformationFrame*](id3v2textinformationframe.md)[], `ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +▸ `Static` **findTextInformationFrame**(`frames`, `ident`): [`Id3v2TextInformationFrame`](id3v2textinformationframe.md) Gets a [TextInformationFrame](../enums/id3v2frameclasstype.md#textinformationframe) object of a specified type from a specified type from a list of text information frames. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2TextInformationFrame*](id3v2textinformationframe.md)[] | List of frames to search | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Frame identifier to search for | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2TextInformationFrame`](id3v2textinformationframe.md)[] | List of frames to search | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Frame identifier to search for | -**Returns:** [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +#### Returns + +[`Id3v2TextInformationFrame`](id3v2textinformationframe.md) TextInformationFrame Matching frame if it exists in `tag`, `undefined` if a matching frame was not found @@ -566,53 +631,59 @@ ___ ### fromIdentifier -▸ `Static`**fromIdentifier**(`identifier`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md), `encoding?`: [*StringType*](../enums/stringtype.md)): [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +▸ `Static` **fromIdentifier**(`identifier`, `encoding?`): [`Id3v2TextInformationFrame`](id3v2textinformationframe.md) Constructs and initializes a new instance with a specified identifier -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `identifier` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Byte vector containing the identifier for the frame | +| `encoding` | [`StringType`](../enums/stringtype.md) | Optionally, the encoding to use for the new instance. If omitted, defaults to [Id3v2Settings.defaultEncoding](id3v2settings.md#defaultencoding) | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`identifier` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | - | Byte vector containing the identifier for the frame | -`encoding` | [*StringType*](../enums/stringtype.md) | ... | Optionally, the encoding to use for the new instance. If omitted, defaults to [Id3v2Settings.defaultEncoding](id3v2settings.md#defaultencoding) | +#### Returns -**Returns:** [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +[`Id3v2TextInformationFrame`](id3v2textinformationframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2TextInformationFrame`](id3v2textinformationframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +#### Returns + +[`Id3v2TextInformationFrame`](id3v2textinformationframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2TextInformationFrame`](id3v2textinformationframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +[`Id3v2TextInformationFrame`](id3v2textinformationframe.md) diff --git a/docs/classes/id3v2uniquefileidentifierframe.md b/docs/classes/id3v2uniquefileidentifierframe.md index 0ba8f2c0..f7dd84f6 100644 --- a/docs/classes/id3v2uniquefileidentifierframe.md +++ b/docs/classes/id3v2uniquefileidentifierframe.md @@ -6,9 +6,9 @@ Implements support for ID3v2 Unique File Identifier (UFID) frames. ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2UniqueFileIdentifierFrame** + ↳ **`Id3v2UniqueFileIdentifierFrame`** ## Table of contents @@ -45,34 +45,40 @@ Implements support for ID3v2 Unique File Identifier (UFID) frames. ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -81,45 +87,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2uniquefileidentifierframe.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -127,26 +141,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -155,197 +173,238 @@ ___ ### identifier -• **identifier**(): [*ByteVector*](bytevector.md) +• `get` **identifier**(): [`ByteVector`](bytevector.md) Gets the identifier data stored in the current instance. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) -• **identifier**(`value`: [*ByteVector*](bytevector.md)): *void* +• `set` **identifier**(`value`): `void` Sets the identifier data stored in the current instance. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*ByteVector*](bytevector.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`ByteVector`](bytevector.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### owner -• **owner**(): *string* +• `get` **owner**(): `string` Gets the owner of this unique ID. -**Returns:** *string* +#### Returns + +`string` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2Frame*](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +#### Returns -**Returns:** *void* +`void` -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`_version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`_version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `_version` | `number` | ID3v2 version the field data is to be encoded in. | -Name | Type | ------- | ------ | -`_version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md)[], `owner`: *string*): [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) +▸ `Static` **find**(`frames`, `owner`): [`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) Gets a unique file identifier frame from a list of frames -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md)[] | List of frames to search | +| `owner` | `string` | Owner to match | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md)[] | List of frames to search | -`owner` | *string* | Owner to match | +#### Returns -**Returns:** [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) +[`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) PopularimeterFrame Frame containing the matching user, `undefined` if a match was not found @@ -354,53 +413,59 @@ ___ ### fromData -▸ `Static`**fromData**(`owner`: *string*, `identifier`: [*ByteVector*](bytevector.md)): [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) +▸ `Static` **fromData**(`owner`, `identifier`): [`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) Constructs and initializes a new instance using the provided information -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`owner` | *string* | Owner of the new frame. Should be an email or url to the database where this unique identifier is applicable | -`identifier` | [*ByteVector*](bytevector.md) | Unique identifier to store in the frame. Must be no more than 64 bytes | +| Name | Type | Description | +| :------ | :------ | :------ | +| `owner` | `string` | Owner of the new frame. Should be an email or url to the database where this unique identifier is applicable | +| `identifier` | [`ByteVector`](bytevector.md) | Unique identifier to store in the frame. Must be no more than 64 bytes | -**Returns:** [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) +#### Returns + +[`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) +[`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2UniqueFileIdentifierFrame*](id3v2uniquefileidentifierframe.md) +[`Id3v2UniqueFileIdentifierFrame`](id3v2uniquefileidentifierframe.md) diff --git a/docs/classes/id3v2unknownframe.md b/docs/classes/id3v2unknownframe.md index 57b69ea5..5c21ccfb 100644 --- a/docs/classes/id3v2unknownframe.md +++ b/docs/classes/id3v2unknownframe.md @@ -6,9 +6,9 @@ Fallback type when no other frame class works for a given frame. ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2UnknownFrame** + ↳ **`Id3v2UnknownFrame`** ## Table of contents @@ -43,15 +43,17 @@ Fallback type when no other frame class works for a given frame. ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ___ ### data -• **data**: [*ByteVector*](bytevector.md) +• **data**: [`ByteVector`](bytevector.md) Gets and sets the field data in the current instance @@ -59,26 +61,30 @@ Gets and sets the field data in the current instance ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -87,45 +93,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns + +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2unknownframe.md#render) will throw. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -**Returns:** *void* +#### Returns + +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -133,26 +147,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -161,200 +179,239 @@ ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2Frame*](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` -**`inheritdoc`** +Populates the values in this frame by parsing its field data in a specified version. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -**Returns:** *void* +#### Returns -Overrides: [Id3v2Frame](id3v2frame.md) +`void` + +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`_version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`_version`): [`ByteVector`](bytevector.md) -**`inheritdoc`** +Renders the values in the current instance into field data for a specified version. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`_version` | *number* | +| Name | Type | Description | +| :------ | :------ | :------ | +| `_version` | `number` | ID3v2 version the field data is to be encoded in. | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Overrides: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### fromData -▸ `Static`**fromData**(`identifier`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md), `data?`: [*ByteVector*](bytevector.md)): [*Id3v2UnknownFrame*](id3v2unknownframe.md) +▸ `Static` **fromData**(`identifier`, `data?`): [`Id3v2UnknownFrame`](id3v2unknownframe.md) Constructs and initializes a new instance with a specified type -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`identifier` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | ID3v2 frame identifier | -`data?` | [*ByteVector*](bytevector.md) | Contents of the frame | +| Name | Type | Description | +| :------ | :------ | :------ | +| `identifier` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | ID3v2 frame identifier | +| `data?` | [`ByteVector`](bytevector.md) | Contents of the frame | -**Returns:** [*Id3v2UnknownFrame*](id3v2unknownframe.md) +#### Returns + +[`Id3v2UnknownFrame`](id3v2unknownframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2UnknownFrame*](id3v2unknownframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2UnknownFrame`](id3v2unknownframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2UnknownFrame*](id3v2unknownframe.md) +[`Id3v2UnknownFrame`](id3v2unknownframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2UnknownFrame*](id3v2unknownframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2UnknownFrame`](id3v2unknownframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2UnknownFrame*](id3v2unknownframe.md) +[`Id3v2UnknownFrame`](id3v2unknownframe.md) diff --git a/docs/classes/id3v2unsynchronizedframe.md b/docs/classes/id3v2unsynchronizedframe.md index abd1dc00..b2f8bc4a 100644 --- a/docs/classes/id3v2unsynchronizedframe.md +++ b/docs/classes/id3v2unsynchronizedframe.md @@ -4,9 +4,9 @@ ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2UnsynchronizedFrame** + ↳ **`Id3v2UnsynchronizedFrame`** ## Table of contents @@ -48,57 +48,67 @@ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ## Accessors ### description -• **description**(): *string* +• `get` **description**(): `string` Gets the description of the contents of the current instance. -**Returns:** *string* +#### Returns + +`string` -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets the description of the contents of the current instance. There should only be one frame with a this description and ISO-639-2 code per tag. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -107,45 +117,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) + +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2unsynchronizedframe.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -153,26 +171,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -**Returns:** *void* +#### Returns + +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -181,241 +203,290 @@ ___ ### language -• **language**(): *string* +• `get` **language**(): `string` Gets the ISO-639-2 language code for the contents of this instance. -**Returns:** *string* +#### Returns + +`string` -• **language**(`value`: *string*): *void* +• `set` **language**(`value`): `void` Sets the ISO-639-2 language code for the contents of this instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | -Name | Type | ------- | ------ | -`value` | *string* | +#### Returns -**Returns:** *void* +`void` ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### text -• **text**(): *string* +• `get` **text**(): `string` Gets the text stored in the current instance. -**Returns:** *string* +#### Returns + +`string` -• **text**(`value`: *string*): *void* +• `set` **text**(`value`): `void` Sets the text stored in the current instance. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when storing the current instance. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when storing the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | -Name | Type | ------- | ------ | -`value` | [*StringType*](../enums/stringtype.md) | +#### Returns -**Returns:** *void* +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. + +#### Returns -**`inheritdoc`** +[`Id3v2Frame`](id3v2frame.md) -**Returns:** [*Id3v2Frame*](id3v2frame.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2Frame](id3v2frame.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `_version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `_version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `_version` | `number` | ID3v2 version the field data is encoded in | -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`_version` | *number* | +#### Returns -**Returns:** *void* +`void` -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`version` | *number* | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +`void` -**Returns:** *void* +#### Inherited from -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` -**Returns:** *string* +#### Returns + +`string` ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### find -▸ `Static`**find**(`frames`: [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md)[], `description`: *string*, `language`: *string*): [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +▸ `Static` **find**(`frames`, `description`, `language`): [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) Gets the first unsynchronized lyrics frame from a list of frames that matches the provided parameters. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md)[] | List of frames to search | -`description` | *string* | Description to match | -`language` | *string* | Optionally, ISO-639-2 language code to match | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md)[] | List of frames to search | +| `description` | `string` | Description to match | +| `language` | `string` | Optionally, ISO-639-2 language code to match | -**Returns:** [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +#### Returns + +[`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) UnsynchronizedLyricsFrame Frame that matches provided parameters, `undefined` if a match was not found @@ -424,20 +495,22 @@ ___ ### findAll -▸ `Static`**findAll**(`frames`: [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md)[], `description`: *string*, `language`: *string*): [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md)[] +▸ `Static` **findAll**(`frames`, `description`, `language`): [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md)[] Gets all unsynchronized lyrics frames that match the provided parameters from a list of frames -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md)[] | List of frames to search | +| `description` | `string` | Description to match | +| `language` | `string` | Optionally, ISO-639-2 language code to match | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md)[] | List of frames to search | -`description` | *string* | Description to match | -`language` | *string* | Optionally, ISO-639-2 language code to match | +#### Returns -**Returns:** [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md)[] +[`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md)[] UnsynchronizedLyricsFrame[] List of frames matching provided parameters, empty array if no matches were found @@ -446,7 +519,7 @@ ___ ### findPreferred -▸ `Static`**findPreferred**(`frames`: [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md)[], `description`: *string*, `language`: *string*): [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +▸ `Static` **findPreferred**(`frames`, `description`, `language`): [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) Gets a specified unsynchronized frame from the list of frames, trying to match the description and language but, failing a perfect match, accepting an incomplete match. @@ -456,68 +529,76 @@ The method tries matching with the following order of precedence: * First frame with a matching description * First frame -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md)[] | List of frames to search | -`description` | *string* | Description to match | -`language` | *string* | ISO-639-2 language code to match | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md)[] | List of frames to search | +| `description` | `string` | Description to match | +| `language` | `string` | ISO-639-2 language code to match | -**Returns:** [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +#### Returns + +[`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) ___ ### fromData -▸ `Static`**fromData**(`description`: *string*, `language?`: *string*, `encoding?`: [*StringType*](../enums/stringtype.md)): [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +▸ `Static` **fromData**(`description`, `language?`, `encoding?`): [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) Constructs and initializes a new instance from the provided data -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `description` | `string` | Description of the frame | +| `language?` | `string` | ISO-639-2 language code for the content of the frame | +| `encoding` | [`StringType`](../enums/stringtype.md) | Encoding to use when storing the content of the frame | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`description` | *string* | - | Description of the frame | -`language?` | *string* | - | ISO-639-2 language code for the content of the frame | -`encoding` | [*StringType*](../enums/stringtype.md) | ... | Encoding to use when storing the content of the frame | +#### Returns -**Returns:** [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +[`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +#### Returns + +[`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2UnsynchronizedFrame*](id3v2unsynchronizedframe.md) +[`Id3v2UnsynchronizedFrame`](id3v2unsynchronizedframe.md) diff --git a/docs/classes/id3v2urllinkframe.md b/docs/classes/id3v2urllinkframe.md index 60f9c9a5..567d9959 100644 --- a/docs/classes/id3v2urllinkframe.md +++ b/docs/classes/id3v2urllinkframe.md @@ -30,11 +30,11 @@ specification. ## Hierarchy -* [*Id3v2Frame*](id3v2frame.md) +- [`Id3v2Frame`](id3v2frame.md) - ↳ **Id3v2UrlLinkFrame** + ↳ **`Id3v2UrlLinkFrame`** - ↳↳ [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) + ↳↳ [`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) ## Table of contents @@ -81,74 +81,80 @@ specification. ### constructor -\+ `Protected`**new Id3v2UrlLinkFrame**(`header`: [*Id3v2FrameHeader*](id3v2frameheader.md)): [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +• `Protected` **new Id3v2UrlLinkFrame**(`header`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | +| Name | Type | +| :------ | :------ | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | -**Returns:** [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +#### Overrides -Inherited from: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[constructor](id3v2frame.md#constructor) ## Properties ### \_encoding -• `Protected` **\_encoding**: [*StringType*](../enums/stringtype.md) +• `Protected` **\_encoding**: [`StringType`](../enums/stringtype.md) ___ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) -Inherited from: [Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[_header](id3v2frame.md#_header) ___ ### \_rawData -• `Protected` **\_rawData**: [*ByteVector*](bytevector.md) +• `Protected` **\_rawData**: [`ByteVector`](bytevector.md) ___ ### \_rawVersion -• `Protected` **\_rawVersion**: *number* +• `Protected` **\_rawVersion**: `number` ___ ### \_textFields -• `Protected` **\_textFields**: *string*[] +• `Protected` **\_textFields**: `string`[] = `[]` ## Accessors ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -157,43 +163,51 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) + +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2urllinkframe.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +#### Returns + +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -201,26 +215,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -229,230 +247,277 @@ ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### text -• **text**(): *string*[] +• `get` **text**(): `string`[] Gets the text contained in the current instance. Modifying the contents of the returned value will not modify the contents of the current instance. The value must be reassigned for the value to change. -**Returns:** *string*[] +#### Returns + +`string`[] -• **text**(`value`: *string*[]): *void* +• `set` **text**(`value`): `void` Sets the text contained in the current instance. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string*[] | +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -**Returns:** *void* +#### Returns + +`void` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when rendering the current instance. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when rendering the current instance. NOTE: This value will be overwritten if [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | [*StringType*](../enums/stringtype.md) | | +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | -**Returns:** *void* +#### Returns + +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +▸ **clone**(): [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +[`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[clone](id3v2frame.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[fieldData](id3v2frame.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `version`): `void` + +Populates the values in this frame by parsing its field data in a specified version. + +#### Parameters -**`inheritdoc`** +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `version` | `number` | ID3v2 version the field data is encoded in | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`version` | *number* | +`void` -**Returns:** *void* +#### Overrides -Overrides: [Id3v2Frame](id3v2frame.md) +[Id3v2Frame](id3v2frame.md).[parseFields](id3v2frame.md#parsefields) ___ ### parseRawData -▸ `Protected`**parseRawData**(): *void* +▸ `Protected` **parseRawData**(): `void` -**Returns:** *void* +#### Returns + +`void` ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[render](id3v2frame.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) + +Renders the values in the current instance into field data for a specified version. -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -Name | Type | ------- | ------ | -`version` | *number* | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) -Overrides: [Id3v2Frame](id3v2frame.md) +#### Overrides + +[Id3v2Frame](id3v2frame.md).[renderFields](id3v2frame.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[setData](id3v2frame.md#setdata) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** *string* +`string` ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2Frame](id3v2frame.md) +#### Inherited from + +[Id3v2Frame](id3v2frame.md).[correctEncoding](id3v2frame.md#correctencoding) ___ ### findUrlLinkFrame -▸ `Static`**findUrlLinkFrame**(`frames`: [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md)[], `ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +▸ `Static` **findUrlLinkFrame**(`frames`, `ident`): [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) Gets the first frame that matches the provided type -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md)[] | Object to search in | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Frame identifier to search for | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md)[] | Object to search in | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Frame identifier to search for | -**Returns:** [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +#### Returns + +[`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) UrlLinkFrame Frame containing the matching frameId, `undefined` if a match was not found @@ -461,52 +526,58 @@ ___ ### fromIdentity -▸ `Static`**fromIdentity**(`ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +▸ `Static` **fromIdentity**(`ident`): [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) Constructs and initializes an empty frame with the provided frame identity -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Identity of the frame to construct | -Name | Type | Description | ------- | ------ | ------ | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Identity of the frame to construct | +#### Returns -**Returns:** [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +[`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -**Returns:** [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +#### Returns + +[`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +#### Returns -**Returns:** [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +[`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) diff --git a/docs/classes/id3v2usertextinformationframe.md b/docs/classes/id3v2usertextinformationframe.md index 1cf56df5..675d3630 100644 --- a/docs/classes/id3v2usertextinformationframe.md +++ b/docs/classes/id3v2usertextinformationframe.md @@ -4,9 +4,9 @@ ## Hierarchy -* [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +- [`Id3v2TextInformationFrame`](id3v2textinformationframe.md) - ↳ **Id3v2UserTextInformationFrame** + ↳ **`Id3v2UserTextInformationFrame`** ## Table of contents @@ -52,89 +52,107 @@ ### \_encoding -• `Protected` **\_encoding**: [*StringType*](../enums/stringtype.md) +• `Protected` **\_encoding**: [`StringType`](../enums/stringtype.md) -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md).[_encoding](id3v2textinformationframe.md#_encoding) +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[_encoding](id3v2textinformationframe.md#_encoding) ___ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) + +#### Inherited from -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md).[_header](id3v2textinformationframe.md#_header) +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[_header](id3v2textinformationframe.md#_header) ___ ### \_rawData -• `Protected` **\_rawData**: [*ByteVector*](bytevector.md) +• `Protected` **\_rawData**: [`ByteVector`](bytevector.md) + +#### Inherited from -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md).[_rawData](id3v2textinformationframe.md#_rawdata) +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[_rawData](id3v2textinformationframe.md#_rawdata) ___ ### \_rawVersion -• `Protected` **\_rawVersion**: *number* +• `Protected` **\_rawVersion**: `number` -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md).[_rawVersion](id3v2textinformationframe.md#_rawversion) +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[_rawVersion](id3v2textinformationframe.md#_rawversion) ___ ### \_textFields -• `Protected` **\_textFields**: *string*[] +• `Protected` **\_textFields**: `string`[] = `[]` + +#### Inherited from -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md).[_textFields](id3v2textinformationframe.md#_textfields) +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[_textFields](id3v2textinformationframe.md#_textfields) ## Accessors ### description -• **description**(): *string* +• `get` **description**(): `string` Gets the description stored in the current instance. -**Returns:** *string* +#### Returns + +`string` -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets the description stored in the current instance. There should only be one frame with the specified description per tag. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Description to store in the current instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Description to store in the current instance. | -**Returns:** *void* +#### Returns + +`void` ___ ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -143,43 +161,51 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) + +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2usertextinformationframe.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -187,26 +213,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -215,120 +245,145 @@ ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### text -• **text**(): *string*[] +• `get` **text**(): `string`[] Gets the text contained in the current instance. NOTE: Modifying the contents of the returned value will not modify the contents of the current instance. The value must be reassigned for the value to change. -**Returns:** *string*[] +#### Returns + +`string`[] -• **text**(`value`: *string*[]): *void* +• `set` **text**(`value`): `void` Sets the text contained in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Array of text values to store in the current instance | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Array of text values to store in the current instance | +#### Returns -**Returns:** *void* +`void` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when rendering the current instance. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +[`StringType`](../enums/stringtype.md) + +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when rendering the current instance. This value will be overridden if [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true`. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | -Name | Type | ------- | ------ | -`value` | [*StringType*](../enums/stringtype.md) | +#### Returns -**Returns:** *void* +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2Frame*](id3v2frame.md) +▸ **clone**(): [`Id3v2Frame`](id3v2frame.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2Frame*](id3v2frame.md) +[`Id3v2Frame`](id3v2frame.md) -Overrides: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +#### Overrides + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[clone](id3v2textinformationframe.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[fieldData](id3v2textinformationframe.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `version`): `void` -**`inheritdoc`** +Populates the values in this frame by parsing its field data in a specified version. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`version` | *number* | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `version` | `number` | ID3v2 version the field data is encoded in | -**Returns:** *void* +#### Returns -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +`void` + +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[parseFields](id3v2textinformationframe.md#parsefields) ___ ### parseRawData -▸ `Protected`**parseRawData**(): *void* +▸ `Protected` **parseRawData**(): `void` Performs the actual parsing of the raw data. Because of the high parsing cost and relatively low usage of the class [parseFields](id3v2usertextinformationframe.md#parsefields) @@ -336,145 +391,175 @@ only stores the field data so it can be parsed on demand. Whenever a property or called which requires the data, this method is called, and only on the first call does it actually parse the data. -**Returns:** *void* +#### Returns + +`void` -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[parseRawData](id3v2textinformationframe.md#parserawdata) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version to use when encoding the current instance. Must be a positive 8-bit integer. | -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | ID3v2 version to use when encoding the current instance. Must be a positive 8-bit integer. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Rendered version of the current instance. -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[render](id3v2textinformationframe.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) -**`inheritdoc`** +Renders the values in the current instance into field data for a specified version. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`version` | *number* | +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[renderFields](id3v2textinformationframe.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[setData](id3v2textinformationframe.md#setdata) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` + +Returns a text representation of the current instance by combining the text with semicolons. + +#### Returns -**`inheritdoc`** +`string` -**Returns:** *string* +#### Overrides -Overrides: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[toString](id3v2textinformationframe.md#tostring) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns + +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[correctEncoding](id3v2textinformationframe.md#correctencoding) ___ ### findTextInformationFrame -▸ `Static`**findTextInformationFrame**(`frames`: [*Id3v2TextInformationFrame*](id3v2textinformationframe.md)[], `ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +▸ `Static` **findTextInformationFrame**(`frames`, `ident`): [`Id3v2TextInformationFrame`](id3v2textinformationframe.md) Gets a [TextInformationFrame](../enums/id3v2frameclasstype.md#textinformationframe) object of a specified type from a specified type from a list of text information frames. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2TextInformationFrame`](id3v2textinformationframe.md)[] | List of frames to search | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Frame identifier to search for | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2TextInformationFrame*](id3v2textinformationframe.md)[] | List of frames to search | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Frame identifier to search for | +#### Returns -**Returns:** [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +[`Id3v2TextInformationFrame`](id3v2textinformationframe.md) TextInformationFrame Matching frame if it exists in `tag`, `undefined` if a matching frame was not found -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[findTextInformationFrame](id3v2textinformationframe.md#findtextinformationframe) ___ ### findUserTextInformationFrame -▸ `Static`**findUserTextInformationFrame**(`frames`: [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md)[], `description`: *string*, `caseSensitive?`: *boolean*): [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) +▸ `Static` **findUserTextInformationFrame**(`frames`, `description`, `caseSensitive?`): [`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) Gets a user text information frame from a specified tag -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `frames` | [`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md)[] | `undefined` | Object to search in | +| `description` | `string` | `undefined` | Description to use to match the frame in the `tag` | +| `caseSensitive` | `boolean` | `true` | Whether or not to search for the frame case-sensitively. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`frames` | [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md)[] | - | Object to search in | -`description` | *string* | - | Description to use to match the frame in the `tag` | -`caseSensitive` | *boolean* | true | Whether or not to search for the frame case-sensitively. | +#### Returns -**Returns:** [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) +[`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) UserTextInformationFrame Frame containing the matching user, `undefined` if a match was not found @@ -483,76 +568,90 @@ ___ ### fromDescription -▸ `Static`**fromDescription**(`description`: *string*, `encoding?`: [*StringType*](../enums/stringtype.md)): [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) +▸ `Static` **fromDescription**(`description`, `encoding?`): [`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) Constructs and initializes a new instance with a specified description and text encoding. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `description` | `string` | Description of the new frame | +| `encoding` | [`StringType`](../enums/stringtype.md) | Text encoding to use when rendering the new frame | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`description` | *string* | - | Description of the new frame | -`encoding` | [*StringType*](../enums/stringtype.md) | ... | Text encoding to use when rendering the new frame | +#### Returns -**Returns:** [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) +[`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) ___ ### fromIdentifier -▸ `Static`**fromIdentifier**(`identifier`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md), `encoding?`: [*StringType*](../enums/stringtype.md)): [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +▸ `Static` **fromIdentifier**(`identifier`, `encoding?`): [`Id3v2TextInformationFrame`](id3v2textinformationframe.md) Constructs and initializes a new instance with a specified identifier -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`identifier` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | - | Byte vector containing the identifier for the frame | -`encoding` | [*StringType*](../enums/stringtype.md) | ... | Optionally, the encoding to use for the new instance. If omitted, defaults to [Id3v2Settings.defaultEncoding](id3v2settings.md#defaultencoding) | +| Name | Type | Description | +| :------ | :------ | :------ | +| `identifier` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Byte vector containing the identifier for the frame | +| `encoding` | [`StringType`](../enums/stringtype.md) | Optionally, the encoding to use for the new instance. If omitted, defaults to [Id3v2Settings.defaultEncoding](id3v2settings.md#defaultencoding) | -**Returns:** [*Id3v2TextInformationFrame*](id3v2textinformationframe.md) +#### Returns -Inherited from: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +[`Id3v2TextInformationFrame`](id3v2textinformationframe.md) + +#### Inherited from + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[fromIdentifier](id3v2textinformationframe.md#fromidentifier) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +#### Returns -**Returns:** [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) +[`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) -Overrides: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +#### Overrides + +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[fromOffsetRawData](id3v2textinformationframe.md#fromoffsetrawdata) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +[`Id3v2UserTextInformationFrame`](id3v2usertextinformationframe.md) -**Returns:** [*Id3v2UserTextInformationFrame*](id3v2usertextinformationframe.md) +#### Overrides -Overrides: [Id3v2TextInformationFrame](id3v2textinformationframe.md) +[Id3v2TextInformationFrame](id3v2textinformationframe.md).[fromRawData](id3v2textinformationframe.md#fromrawdata) diff --git a/docs/classes/id3v2userurllinkframe.md b/docs/classes/id3v2userurllinkframe.md index ffac57b6..b810f469 100644 --- a/docs/classes/id3v2userurllinkframe.md +++ b/docs/classes/id3v2userurllinkframe.md @@ -6,9 +6,9 @@ Provides support for ID3v2 User URL Link frames (WXXX). ## Hierarchy -* [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +- [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) - ↳ **Id3v2UserUrlLinkFrame** + ↳ **`Id3v2UserUrlLinkFrame`** ## Table of contents @@ -54,89 +54,107 @@ Provides support for ID3v2 User URL Link frames (WXXX). ### \_encoding -• `Protected` **\_encoding**: [*StringType*](../enums/stringtype.md) +• `Protected` **\_encoding**: [`StringType`](../enums/stringtype.md) -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_encoding](id3v2urllinkframe.md#_encoding) +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_encoding](id3v2urllinkframe.md#_encoding) ___ ### \_header -• `Protected` **\_header**: [*Id3v2FrameHeader*](id3v2frameheader.md) +• `Protected` **\_header**: [`Id3v2FrameHeader`](id3v2frameheader.md) + +#### Inherited from -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_header](id3v2urllinkframe.md#_header) +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_header](id3v2urllinkframe.md#_header) ___ ### \_rawData -• `Protected` **\_rawData**: [*ByteVector*](bytevector.md) +• `Protected` **\_rawData**: [`ByteVector`](bytevector.md) + +#### Inherited from -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_rawData](id3v2urllinkframe.md#_rawdata) +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_rawData](id3v2urllinkframe.md#_rawdata) ___ ### \_rawVersion -• `Protected` **\_rawVersion**: *number* +• `Protected` **\_rawVersion**: `number` -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_rawVersion](id3v2urllinkframe.md#_rawversion) +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_rawVersion](id3v2urllinkframe.md#_rawversion) ___ ### \_textFields -• `Protected` **\_textFields**: *string*[] +• `Protected` **\_textFields**: `string`[] = `[]` + +#### Inherited from -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_textFields](id3v2urllinkframe.md#_textfields) +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[_textFields](id3v2urllinkframe.md#_textfields) ## Accessors ### description -• **description**(): *string* +• `get` **description**(): `string` Gets the description stored in the current instance. -**Returns:** *string* +#### Returns + +`string` -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets the description stored in the current instance. There should only be one frame with a matching description per tag. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns + +`void` ___ ### encryptionId -• **encryptionId**(): *number* +• `get` **encryptionId**(): `number` Gets the encryption ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the encryption identifier for the current instance or `undefined` if not set. -• **encryptionId**(`value`: *number*): *void* +• `set` **encryptionId**(`value`): `void` Sets the encryption ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Value containing the encryption identifier for the current instance. Must be an 8-bit unsigned integer. Setting to `undefined` will remove the encryption header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the encryption identifier for the current instance or `undefined` if not set. @@ -145,45 +163,53 @@ ___ ### flags -• **flags**(): [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +• `get` **flags**(): [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) Gets the frame flags applied to the current instance. -**Returns:** [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) +#### Returns -• **flags**(`value`: [*Id3v2FrameFlags*](../enums/id3v2frameflags.md)): *void* +[`Id3v2FrameFlags`](../enums/id3v2frameflags.md) + +• `set` **flags**(`value`): `void` Sets the frame flags applied to the current instance. If the value includes either [Id3v2FrameFlags.Encryption](../enums/id3v2frameflags.md#encryption) or [Id3v2FrameFlags.Compression](../enums/id3v2frameflags.md#compression), [render](id3v2userurllinkframe.md#render) will throw. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`Id3v2FrameFlags`](../enums/id3v2frameflags.md) | -Name | Type | ------- | ------ | -`value` | [*Id3v2FrameFlags*](../enums/id3v2frameflags.md) | +#### Returns -**Returns:** *void* +`void` ___ ### frameClassType -• **frameClassType**(): [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +• `get` **frameClassType**(): [`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2FrameClassType*](../enums/id3v2frameclasstype.md) +[`Id3v2FrameClassType`](../enums/id3v2frameclasstype.md) ___ ### frameId -• **frameId**(): [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +• `get` **frameId**(): [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) Gets the frame ID for the current instance. -**Returns:** [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) +#### Returns + +[`Id3v2FrameIdentifier`](id3v2frameidentifier.md) FrameIdentifier Object representing of the identifier of the frame @@ -191,26 +217,30 @@ ___ ### groupId -• **groupId**(): *number* +• `get` **groupId**(): `number` Gets the grouping ID applied to the current instance. -**Returns:** *number* +#### Returns + +`number` number Value containing the grouping identifier for the current instance, or `undefined` if not set. -• **groupId**(`value`: *number*): *void* +• `set` **groupId**(`value`): `void` Sets the grouping ID applied to the current instance. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Grouping identifier for the current instance. Must be a 8-bit unsigned integer. Setting to `undefined` will remove the grouping identity header and ID | +#### Returns -**Returns:** *void* +`void` number Value containing the grouping identifier for the current instance, or `undefined` if not set. @@ -219,256 +249,309 @@ ___ ### size -• **size**(): *number* +• `get` **size**(): `number` Gets the size of the current instance as it was last stored on disk. NOTE: This value is not used outside of reading a frame from disk, so newly created frames should not have this value set. -**Returns:** *number* +#### Returns + +`number` ___ ### text -• **text**(): *string*[] +• `get` **text**(): `string`[] Gets the text contained in the current instance. NOTE: Modifying the contents of the returned value will not modify the contents of the current instance. The value must be reassigned for the value to change. -**Returns:** *string*[] +#### Returns + +`string`[] -• **text**(`value`: *string*[]): *void* +• `set` **text**(`value`): `void` Sets the text contained in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | -Name | Type | ------- | ------ | -`value` | *string*[] | +#### Returns -**Returns:** *void* +`void` ___ ### textEncoding -• **textEncoding**(): [*StringType*](../enums/stringtype.md) +• `get` **textEncoding**(): [`StringType`](../enums/stringtype.md) Gets the text encoding to use when rendering the current instance. -**Returns:** [*StringType*](../enums/stringtype.md) +#### Returns -• **textEncoding**(`value`: [*StringType*](../enums/stringtype.md)): *void* +[`StringType`](../enums/stringtype.md) + +• `set` **textEncoding**(`value`): `void` Sets the text encoding to use when rendering the current instance. NOTE: This value will be overwritten if [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) is `true`. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | -Name | Type | Description | ------- | ------ | ------ | -`value` | [*StringType*](../enums/stringtype.md) | | +#### Returns -**Returns:** *void* +`void` ## Methods ### clone -▸ **clone**(): [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +▸ **clone**(): [`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) + +Creates a deep copy of the current instance. +This method is implemented by rendering the current instance as an ID3v2.4 frame and using +the frame factory to create a new frame. As such, this method should be overridden by child +classes. -**`inheritdoc`** +#### Returns -**Returns:** [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +[`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) -Overrides: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +#### Overrides + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[clone](id3v2urllinkframe.md#clone) ___ ### fieldData -▸ `Protected`**fieldData**(`frameData`: [*ByteVector*](bytevector.md), `offset`: *number*, `version`: *number*, `dataIncludesHeader`: *boolean*): [*ByteVector*](bytevector.md) +▸ `Protected` **fieldData**(`frameData`, `offset`, `version`, `dataIncludesHeader`): [`ByteVector`](bytevector.md) Extracts the field data from the raw portion of an ID3v2 frame. This method is necessary for extracting extra data prepended to the frame such the as grouping ID. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frameData` | [`ByteVector`](bytevector.md) | Raw frame data | +| `offset` | `number` | Index at which the data is contained | +| `version` | `number` | Version of the ID3v2 tag the data was originally encoded with | +| `dataIncludesHeader` | `boolean` | `true` if `frameData` includes the header, `false` otherwise | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`frameData` | [*ByteVector*](bytevector.md) | Raw frame data | -`offset` | *number* | Index at which the data is contained | -`version` | *number* | Version of the ID3v2 tag the data was originally encoded with | -`dataIncludesHeader` | *boolean* | `true` if `frameData` includes the header, `false` otherwise | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[fieldData](id3v2urllinkframe.md#fielddata) ___ ### parseFields -▸ `Protected`**parseFields**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): *void* +▸ `Protected` **parseFields**(`data`, `version`): `void` -**`inheritdoc`** +Populates the values in this frame by parsing its field data in a specified version. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`data` | [*ByteVector*](bytevector.md) | -`version` | *number* | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Extracted field data | +| `version` | `number` | ID3v2 version the field data is encoded in | -**Returns:** *void* +#### Returns -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +`void` + +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[parseFields](id3v2urllinkframe.md#parsefields) ___ ### parseRawData -▸ `Protected`**parseRawData**(): *void* +▸ `Protected` **parseRawData**(): `void` + +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[parseRawData](id3v2urllinkframe.md#parserawdata) ___ ### render -▸ **render**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ **render**(`version`): [`ByteVector`](bytevector.md) Renders the current instance, encoded in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | Version of ID3v2 to use when encoding the current instance | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`version` | *number* | Version of ID3v2 to use when encoding the current instance | +[`ByteVector`](bytevector.md) -**Returns:** [*ByteVector*](bytevector.md) +#### Inherited from -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[render](id3v2urllinkframe.md#render) ___ ### renderFields -▸ `Protected`**renderFields**(`version`: *number*): [*ByteVector*](bytevector.md) +▸ `Protected` **renderFields**(`version`): [`ByteVector`](bytevector.md) -**`inheritdoc`** +Renders the values in the current instance into field data for a specified version. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`version` | *number* | +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | `number` | ID3v2 version the field data is to be encoded in. | -**Returns:** [*ByteVector*](bytevector.md) +#### Returns -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +[`ByteVector`](bytevector.md) + +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[renderFields](id3v2urllinkframe.md#renderfields) ___ ### setData -▸ `Protected`**setData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `readHeader`: *boolean*, `version`: *number*): *void* +▸ `Protected` **setData**(`data`, `offset`, `readHeader`, `version`): `void` Populates the current instance by reading the raw frame from disk, optionally reading the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw ID3v2 frame | +| `offset` | `number` | Offset in `data` at which the frame begins. | +| `readHeader` | `boolean` | Whether or not to read the reader into the current instance. | +| `version` | `number` | Version of the ID3v2 tag the data was encoded with | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw ID3v2 frame | -`offset` | *number* | Offset in `data` at which the frame begins. | -`readHeader` | *boolean* | Whether or not to read the reader into the current instance. | -`version` | *number* | Version of the ID3v2 tag the data was encoded with | +#### Returns -**Returns:** *void* +`void` -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[setData](id3v2urllinkframe.md#setdata) ___ ### toString -▸ **toString**(): *string* +▸ **toString**(): `string` + +#### Returns -**`inheritdoc`** +`string` -**Returns:** *string* +#### Overrides -Overrides: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[toString](id3v2urllinkframe.md#tostring) ___ ### correctEncoding -▸ `Protected` `Static`**correctEncoding**(`type`: [*StringType*](../enums/stringtype.md), `version`: *number*): [*StringType*](../enums/stringtype.md) +▸ `Static` `Protected` **correctEncoding**(`type`, `version`): [`StringType`](../enums/stringtype.md) Converts an encoding to be a supported encoding for a specified tag version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`StringType`](../enums/stringtype.md) | Value containing the original encoding | +| `version` | `number` | Value containing the ID3v2 version to be encoded. | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*StringType*](../enums/stringtype.md) | Value containing the original encoding | -`version` | *number* | Value containing the ID3v2 version to be encoded. | +#### Returns -**Returns:** [*StringType*](../enums/stringtype.md) +[`StringType`](../enums/stringtype.md) StringType Value containing the correct encoding to use, based on [Id3v2Settings.forceDefaultEncoding](id3v2settings.md#forcedefaultencoding) and what is supported by `version` -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[correctEncoding](id3v2urllinkframe.md#correctencoding) ___ ### findUrlLinkFrame -▸ `Static`**findUrlLinkFrame**(`frames`: [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md)[], `ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +▸ `Static` **findUrlLinkFrame**(`frames`, `ident`): [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) Gets the first frame that matches the provided type -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md)[] | Object to search in | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Frame identifier to search for | -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md)[] | Object to search in | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Frame identifier to search for | +#### Returns -**Returns:** [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +[`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) UrlLinkFrame Frame containing the matching frameId, `undefined` if a match was not found -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[findUrlLinkFrame](id3v2urllinkframe.md#findurllinkframe) ___ ### findUserUrlLinkFrame -▸ `Static`**findUserUrlLinkFrame**(`frames`: [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md)[], `description`: *string*): [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +▸ `Static` **findUserUrlLinkFrame**(`frames`, `description`): [`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) Gets a frame from a list of frames. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md)[] | List of frames to search | -`description` | *string* | Description of the frame to match | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | [`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md)[] | List of frames to search | +| `description` | `string` | Description of the frame to match | -**Returns:** [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +#### Returns + +[`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) UserUrlLinkFrame Frame containing the matching user, `undefined` if a match was not found @@ -477,75 +560,89 @@ ___ ### fromDescription -▸ `Static`**fromDescription**(`description`: *string*): [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +▸ `Static` **fromDescription**(`description`): [`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) Constructs and initializes a new instance using the provided description as the text of the frame. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `description` | `string` | Description to use as text of the frame. | -Name | Type | Description | ------- | ------ | ------ | -`description` | *string* | Description to use as text of the frame. | +#### Returns -**Returns:** [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +[`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) ___ ### fromIdentity -▸ `Static`**fromIdentity**(`ident`: [*Id3v2FrameIdentifier*](id3v2frameidentifier.md)): [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +▸ `Static` **fromIdentity**(`ident`): [`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) Constructs and initializes an empty frame with the provided frame identity -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `ident` | [`Id3v2FrameIdentifier`](id3v2frameidentifier.md) | Identity of the frame to construct | -Name | Type | Description | ------- | ------ | ------ | -`ident` | [*Id3v2FrameIdentifier*](id3v2frameidentifier.md) | Identity of the frame to construct | +#### Returns -**Returns:** [*Id3v2UrlLinkFrame*](id3v2urllinkframe.md) +[`Id3v2UrlLinkFrame`](id3v2urllinkframe.md) -Inherited from: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +#### Inherited from + +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[fromIdentity](id3v2urllinkframe.md#fromidentity) ___ ### fromOffsetRawData -▸ `Static`**fromOffsetRawData**(`data`: [*ByteVector*](bytevector.md), `offset`: *number*, `header`: [*Id3v2FrameHeader*](id3v2frameheader.md), `version`: *number*): [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +▸ `Static` **fromOffsetRawData**(`data`, `offset`, `header`, `version`): [`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. This method allows for offset reading from the data byte vector. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `offset` | `number` | What offset in `data` the frame actually begins. Must be positive, safe integer | +| `header` | [`Id3v2FrameHeader`](id3v2frameheader.md) | Header of the frame found at `data` in the data | +| `version` | `number` | ID3v2 version the frame was originally encoded with | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`offset` | *number* | What offset in `data` the frame actually begins. Must be positive, safe integer | -`header` | [*Id3v2FrameHeader*](id3v2frameheader.md) | Header of the frame found at `data` in the data | -`version` | *number* | ID3v2 version the frame was originally encoded with | +[`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) -**Returns:** [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +#### Overrides -Overrides: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[fromOffsetRawData](id3v2urllinkframe.md#fromoffsetrawdata) ___ ### fromRawData -▸ `Static`**fromRawData**(`data`: [*ByteVector*](bytevector.md), `version`: *number*): [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +▸ `Static` **fromRawData**(`data`, `version`): [`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) Constructs and initializes a new instance by reading its raw data in a specified ID3v2 version. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw representation of the new frame | +| `version` | `number` | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw representation of the new frame | -`version` | *number* | ID3v2 version the raw frame is encoded with, must be a positive 8-bit integer | +[`Id3v2UserUrlLinkFrame`](id3v2userurllinkframe.md) -**Returns:** [*Id3v2UserUrlLinkFrame*](id3v2userurllinkframe.md) +#### Overrides -Overrides: [Id3v2UrlLinkFrame](id3v2urllinkframe.md) +[Id3v2UrlLinkFrame](id3v2urllinkframe.md).[fromRawData](id3v2urllinkframe.md#fromrawdata) diff --git a/docs/classes/infotag.md b/docs/classes/infotag.md new file mode 100644 index 00000000..c0fffa65 --- /dev/null +++ b/docs/classes/infotag.md @@ -0,0 +1,2443 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / InfoTag + +# Class: InfoTag + +Provides support for reading and writing standard INFO tags. + +## Hierarchy + +- [`RiffListTag`](rifflisttag.md) + + ↳ **`InfoTag`** + +## Table of contents + +### Accessors + +- [album](infotag.md#album) +- [albumArtists](infotag.md#albumartists) +- [albumArtistsSort](infotag.md#albumartistssort) +- [albumSort](infotag.md#albumsort) +- [amazonId](infotag.md#amazonid) +- [beatsPerMinute](infotag.md#beatsperminute) +- [comment](infotag.md#comment) +- [composers](infotag.md#composers) +- [composersSort](infotag.md#composerssort) +- [conductor](infotag.md#conductor) +- [copyright](infotag.md#copyright) +- [dateTagged](infotag.md#datetagged) +- [description](infotag.md#description) +- [disc](infotag.md#disc) +- [discCount](infotag.md#disccount) +- [firstAlbumArtist](infotag.md#firstalbumartist) +- [firstAlbumArtistSort](infotag.md#firstalbumartistsort) +- [firstComposer](infotag.md#firstcomposer) +- [firstComposerSort](infotag.md#firstcomposersort) +- [firstGenre](infotag.md#firstgenre) +- [firstPerformer](infotag.md#firstperformer) +- [firstPerformerSort](infotag.md#firstperformersort) +- [genres](infotag.md#genres) +- [grouping](infotag.md#grouping) +- [initialKey](infotag.md#initialkey) +- [isEmpty](infotag.md#isempty) +- [isrc](infotag.md#isrc) +- [joinedAlbumArtists](infotag.md#joinedalbumartists) +- [joinedComposers](infotag.md#joinedcomposers) +- [joinedGenres](infotag.md#joinedgenres) +- [joinedPerformers](infotag.md#joinedperformers) +- [joinedPerformersSort](infotag.md#joinedperformerssort) +- [lyrics](infotag.md#lyrics) +- [musicBrainzArtistId](infotag.md#musicbrainzartistid) +- [musicBrainzDiscId](infotag.md#musicbrainzdiscid) +- [musicBrainzReleaseArtistId](infotag.md#musicbrainzreleaseartistid) +- [musicBrainzReleaseCountry](infotag.md#musicbrainzreleasecountry) +- [musicBrainzReleaseGroupId](infotag.md#musicbrainzreleasegroupid) +- [musicBrainzReleaseId](infotag.md#musicbrainzreleaseid) +- [musicBrainzReleaseStatus](infotag.md#musicbrainzreleasestatus) +- [musicBrainzReleaseType](infotag.md#musicbrainzreleasetype) +- [musicBrainzTrackId](infotag.md#musicbrainztrackid) +- [musicIpId](infotag.md#musicipid) +- [performers](infotag.md#performers) +- [performersRole](infotag.md#performersrole) +- [performersSort](infotag.md#performerssort) +- [pictures](infotag.md#pictures) +- [publisher](infotag.md#publisher) +- [remixedBy](infotag.md#remixedby) +- [replayGainAlbumGain](infotag.md#replaygainalbumgain) +- [replayGainAlbumPeak](infotag.md#replaygainalbumpeak) +- [replayGainTrackGain](infotag.md#replaygaintrackgain) +- [replayGainTrackPeak](infotag.md#replaygaintrackpeak) +- [stringType](infotag.md#stringtype) +- [subtitle](infotag.md#subtitle) +- [tagTypes](infotag.md#tagtypes) +- [title](infotag.md#title) +- [titleSort](infotag.md#titlesort) +- [track](infotag.md#track) +- [trackCount](infotag.md#trackcount) +- [year](infotag.md#year) + +### Methods + +- [clear](infotag.md#clear) +- [copyTo](infotag.md#copyto) +- [getFirstValueAsString](infotag.md#getfirstvalueasstring) +- [getValueAsUint](infotag.md#getvalueasuint) +- [getValues](infotag.md#getvalues) +- [getValuesAsStrings](infotag.md#getvaluesasstrings) +- [initializeFromData](infotag.md#initializefromdata) +- [initializeFromEmpty](infotag.md#initializefromempty) +- [initializeFromFile](infotag.md#initializefromfile) +- [initializeFromList](infotag.md#initializefromlist) +- [removeValue](infotag.md#removevalue) +- [render](infotag.md#render) +- [renderEnclosed](infotag.md#renderenclosed) +- [renderEnclosedInternal](infotag.md#renderenclosedinternal) +- [setInfoTag](infotag.md#setinfotag) +- [setValueFromUint](infotag.md#setvaluefromuint) +- [setValues](infotag.md#setvalues) +- [setValuesFromStrings](infotag.md#setvaluesfromstrings) +- [firstInGroup](infotag.md#firstingroup) +- [fromData](infotag.md#fromdata) +- [fromEmpty](infotag.md#fromempty) +- [fromFile](infotag.md#fromfile) +- [isFalsyOrLikeEmpty](infotag.md#isfalsyorlikeempty) +- [joinGroup](infotag.md#joingroup) + +## Accessors + +### album + +• `get` **album**(): `string` + +**`inheritdoc`** + +**`remarks`** Implemented via the `DIRC` item. + +#### Returns + +`string` + +• `set` **album**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `DIRC` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +___ + +### albumArtists + +• `get` **albumArtists**(): `string`[] + +**`inheritdoc`** + +**`remarks`** Implemented via the `IART` item. + +#### Returns + +`string`[] + +• `set` **albumArtists**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `IART` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | + +#### Returns + +`void` + +___ + +### albumArtistsSort + +• `get` **albumArtistsSort**(): `string`[] + +Gets the sortable names of the bands/artists who are credited with creating the entire +album or collection containing the media described by the current instance. + +**`see`** albumArtists + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last by last name. For example "Ben Folds" might be sorted as + "Folds, Ben". + As this value is to be used as a sorting key, it should be used with less variation than + [performers](infotag.md#performers). Where [performers](infotag.md#performers) can be broken into multiple performers, it is + best to stick to a single album artist. Eg, "Van Buuren, Armin" + +#### Returns + +`string`[] + +Sortable names for the bands/artists are credited with the creation of the entire + album or collection containing the media described by the current instance, or an empty + array if no value is present. + +• `set` **albumArtistsSort**(`value`): `void` + +Sets the sortable names of the bands/artists who are credited with creating the entire +album or collection containing the media described by the current instance. + +**`see`** albumArtists + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last by last name. For example "Ben Folds" might be sorted as + "Folds, Ben". + As this value is to be used as a sorting key, it should be used with less variation than + [performers](infotag.md#performers). Where [performers](infotag.md#performers) can be broken into multiple performers, it is + best to stick to a single album artist. Eg, "Van Buuren, Armin" + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the bands/artists are credited with the creation of the entire + album or collection containing the media described by the current instance, or an empty + array if no value is present. + +___ + +### albumSort + +• `get` **albumSort**(): `string` + +Gets the sortable name of the album title of the media represented by the current instance. + +**`see`** album + +**`remarks`** This field is typically optional but aids in sort of compilations or albums with + similar titles. + +#### Returns + +`string` + +Sortable name for the album title of the media or `undefined` if the value is not + present + +• `set` **albumSort**(`value`): `void` + +Sets the sortable name of the album title of the media represented by the current instance. + +**`see`** album + +**`remarks`** This field is typically optional but aids in sort of compilations or albums with + similar titles. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name for the album title of the media or `undefined` if the value is not present | + +#### Returns + +`void` + +Sortable name for the album title of the media or `undefined` if the value is not + present + +___ + +### amazonId + +• `get` **amazonId**(): `string` + +Gets the Amazon ID of the media represented by the current instance. + +**`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely + identify the particular track or album in the Amazon catalog. + +#### Returns + +`string` + +Amazon ID of the media represented by the current instance or `undefined` if no + value is present + +• `set` **amazonId**(`value`): `void` + +Sets the Amazon ID of the media represented by the current instance. + +**`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely + identify the particular track or album in the Amazon catalog. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Amazon ID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Amazon ID of the media represented by the current instance or `undefined` if no + value is present + +___ + +### beatsPerMinute + +• `get` **beatsPerMinute**(): `number` + +Gets the number of beats per minute in the audio of the media represented by the current +instance. + +**`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be + calculated from the audio or pulled from a database. + +#### Returns + +`number` + +Beats per minute of the audio in the media represented by the current instance, or + `0` if not specified + +• `set` **beatsPerMinute**(`value`): `void` + +Sets the number of beats per minute in the audio of the media represented by the current +instance. + +**`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be + calculated from the audio or pulled from a database. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Beats per minute of the audio in the media represented by the current instance, or `0` if not specified | + +#### Returns + +`void` + +Beats per minute of the audio in the media represented by the current instance, or + `0` if not specified + +___ + +### comment + +• `get` **comment**(): `string` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ICMT` item. + +#### Returns + +`string` + +• `set` **comment**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ICMT` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +___ + +### composers + +• `get` **composers**(): `string`[] + +**`inheritdoc`** + +**`remarks`** Implemented via the `IWRI` item. + +#### Returns + +`string`[] + +• `set` **composers**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `IWRI` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | + +#### Returns + +`void` + +___ + +### composersSort + +• `get` **composersSort**(): `string`[] + +Gets the sortable names of the composers of the media represented by the current instance. + +**`see`** composers + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple composers. + +#### Returns + +`string`[] + +Sortable names for the composers of the media represented by the current instance + or an empty array if no value is present. + +• `set` **composersSort**(`value`): `void` + +Sets the sortable names of the composers of the media represented by the current instance. + +**`see`** composers + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple composers. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the composers of the media represented by the current instance + or an empty array if no value is present. + +___ + +### conductor + +• `get` **conductor**(): `string` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ICNM` item. + +#### Returns + +`string` + +• `set` **conductor**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ISBJ` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +___ + +### copyright + +• `get` **copyright**(): `string` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ICOP` item. + +#### Returns + +`string` + +• `set` **copyright**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ICOP` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +___ + +### dateTagged + +• `get` **dateTagged**(): `Date` + +Gets the date and time at which the tag has been written. + +#### Returns + +`Date` + +Date/time at which the tag has been written, or `undefined` if no value is present + +• `set` **dateTagged**(`value`): `void` + +Sets the date and time at which the tag has been written. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `Date` | Date/time at which the tag has been written, or `undefined` if no value is present | + +#### Returns + +`void` + +Date/time at which the tag has been written, or `undefined` if no value is present + +___ + +### description + +• `get` **description**(): `string` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ISBJ` item. + +#### Returns + +`string` + +• `set` **description**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ISBJ` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +___ + +### disc + +• `get` **disc**(): `number` + +Gets the number of the disc containing the media represented by the current instance in the +boxed set. For a series, this represents the season number. + +**`remarks`** This value should be the same as the number that appears on the disc. For example, if + the disc is the first of three, the value should be `1`. It should be no more than + [discCount](infotag.md#disccount) if [discCount](infotag.md#disccount) is non-zero. + +#### Returns + +`number` + +Number of the disc or season of the media represented by the current instance in a + boxed set. + +• `set` **disc**(`value`): `void` + +Sets the number of the disc containing the media represented by the current instance in the +boxed set. For a series, this represents the season number. + +**`remarks`** This value should be the same as the number that appears on the disc. For example, if + the disc is the first of three, the value should be `1`. It should be no more than + [discCount](infotag.md#disccount) if [discCount](infotag.md#disccount) is non-zero. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of the disc or season of the media represented by the current instance in a boxed set. | + +#### Returns + +`void` + +Number of the disc or season of the media represented by the current instance in a + boxed set. + +___ + +### discCount + +• `get` **discCount**(): `number` + +Gets the number of discs or seasons in the boxed set containing the media represented by the +current instance. + +**`remarks`** If non-zero, this should be at least equal to [disc](infotag.md#disc). If [disc](infotag.md#disc) is zero, + this value should also be zero. + +#### Returns + +`number` + +Number of discs or seasons in the boxed set containing the media represented by the + current instance or `0` if not specified. + +• `set` **discCount**(`value`): `void` + +Sets the number of discs or seasons in the boxed set containing the media represented by the +current instance. + +**`remarks`** If non-zero, this should be at least equal to [disc](infotag.md#disc). If [disc](infotag.md#disc) is zero, + this value should also be zero. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. | + +#### Returns + +`void` + +Number of discs or seasons in the boxed set containing the media represented by the + current instance or `0` if not specified. + +___ + +### firstAlbumArtist + +• `get` **firstAlbumArtist**(): `string` + +Gets the the first value contained in [albumArtists](infotag.md#albumartists). + +#### Returns + +`string` + +___ + +### firstAlbumArtistSort + +• `get` **firstAlbumArtistSort**(): `string` + +Gets the first value contained in [albumArtistsSort](infotag.md#albumartistssort) + +#### Returns + +`string` + +___ + +### firstComposer + +• `get` **firstComposer**(): `string` + +Gets the first value contained in [composers](infotag.md#composers) + +#### Returns + +`string` + +___ + +### firstComposerSort + +• `get` **firstComposerSort**(): `string` + +Gets the first value contained in [composersSort](infotag.md#composerssort) + +#### Returns + +`string` + +___ + +### firstGenre + +• `get` **firstGenre**(): `string` + +Gets the first value contained in [genres](infotag.md#genres) + +#### Returns + +`string` + +___ + +### firstPerformer + +• `get` **firstPerformer**(): `string` + +Gets the first value contained in [performers](infotag.md#performers) + +#### Returns + +`string` + +___ + +### firstPerformerSort + +• `get` **firstPerformerSort**(): `string` + +Gets the first value contained in [performersSort](infotag.md#performerssort) + +#### Returns + +`string` + +___ + +### genres + +• `get` **genres**(): `string`[] + +**`inheritdoc`** + +**`remarks`** Implemented via the `IGNR` item. + +#### Returns + +`string`[] + +• `set` **genres**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `IGNR` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | + +#### Returns + +`void` + +___ + +### grouping + +• `get` **grouping**(): `string` + +Gets the grouping on the album which the media in the current instance belongs to. + +**`remarks`** This field contains a non-physical group to which the track belongs. In classical + music this could be a movement. It could also be parts of a series like "Introduction", + "Closing Remarks", etc. + +#### Returns + +`string` + +Grouping on the album which the media in the current instance belongs to or + `undefined` if no value is present. + +• `set` **grouping**(`value`): `void` + +Sets the grouping on the album which the media in the current instance belongs to. + +**`remarks`** This field contains a non-physical group to which the track belongs. In classical + music this could be a movement. It could also be parts of a series like "Introduction", + "Closing Remarks", etc. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. | + +#### Returns + +`void` + +Grouping on the album which the media in the current instance belongs to or + `undefined` if no value is present. + +___ + +### initialKey + +• `get` **initialKey**(): `string` + +Gets the initial key of the track. + +#### Returns + +`string` + +Initial key of the track or `undefined` if no value is set + +• `set` **initialKey**(`value`): `void` + +Sets the initial key of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Initial key of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Initial key of the track or `undefined` if no value is set + +___ + +### isEmpty + +• `get` **isEmpty**(): `boolean` + +**`inheritdoc`** + +#### Returns + +`boolean` + +___ + +### isrc + +• `get` **isrc**(): `string` + +Gets the ISRC (International Standard Recording Code) of the track. + +#### Returns + +`string` + +the ISRC of the track or `undefined` if no value is set + +• `set` **isrc**(`value`): `void` + +Sets the ISRC (International Standard Recording Code) of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | the ISRC of the track or `undefined` if no value is set | + +#### Returns + +`void` + +the ISRC of the track or `undefined` if no value is set + +___ + +### joinedAlbumArtists + +• `get` **joinedAlbumArtists**(): `string` + +Gets a semicolon and space separated string containing the values in [albumArtists](infotag.md#albumartists) + +#### Returns + +`string` + +___ + +### joinedComposers + +• `get` **joinedComposers**(): `string` + +Gets a semicolon and space separated string containing the values in [composers](infotag.md#composers) + +#### Returns + +`string` + +___ + +### joinedGenres + +• `get` **joinedGenres**(): `string` + +Gets a semicolon and space separated string containing the values in [genres](infotag.md#genres) + +#### Returns + +`string` + +___ + +### joinedPerformers + +• `get` **joinedPerformers**(): `string` + +Gets a semicolon and space separated string containing the values in [performers](infotag.md#performers) + +#### Returns + +`string` + +___ + +### joinedPerformersSort + +• `get` **joinedPerformersSort**(): `string` + +Gets a semicolon and space separated string containing the values in [performersSort](infotag.md#performerssort) + +#### Returns + +`string` + +___ + +### lyrics + +• `get` **lyrics**(): `string` + +Gets the lyrics or script of the media represented by the current instance. + +**`remarks`** This field contains a plain text representation of the lyrics or scripts with line + breaks and whitespace being the only formatting marks. + Some formats support more advanced lyrics, like synchronized lyrics, but those must be + accessed using format-specific implementations. + +#### Returns + +`string` + +Lyrics or script of the media represented by the current instance or `undefined` if + no value is present + +• `set` **lyrics**(`value`): `void` + +Sets the lyrics or script of the media represented by the current instance. + +**`remarks`** This field contains a plain text representation of the lyrics or scripts with line + breaks and whitespace being the only formatting marks. + Some formats support more advanced lyrics, like synchronized lyrics, but those must be + accessed using format-specific implementations. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Lyrics or script of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Lyrics or script of the media represented by the current instance or `undefined` if + no value is present + +___ + +### musicBrainzArtistId + +• `get` **musicBrainzArtistId**(): `string` + +Gets the MusicBrainz artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a + particular artist of the track. + +#### Returns + +`string` + +MusicBrainz ArtistID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzArtistId**(`value`): `void` + +Sets the MusicBrainz artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a + particular artist of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ArtistID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzDiscId + +• `get` **musicBrainzDiscId**(): `string` + +Gets the MusicBrainz disc ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the + particular released media associated with this track. + +#### Returns + +`string` + +MusicBrainz DiscID of the media represented by the current instance or `undefined` + if no value is present + +• `set` **musicBrainzDiscId**(`value`): `void` + +Sets the MusicBrainz disc ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the + particular released media associated with this track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz DiscID of the media represented by the current instance or `undefined` + if no value is present + +___ + +### musicBrainzReleaseArtistId + +• `get` **musicBrainzReleaseArtistId**(): `string` + +Gets the MusicBrainz release artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely + identify a particular album artist credited with the album. + +#### Returns + +`string` + +MusicBrainz ReleaseArtistID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseArtistId**(`value`): `void` + +Sets the MusicBrainz release artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely + identify a particular album artist credited with the album. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseArtistID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseCountry + +• `get` **musicBrainzReleaseCountry**(): `string` + +Gets the MusicBrainz release country of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseCountry which describes the country in + which an album was released. Note that the release country of an album is not + necessarily the country in which it was produced. The label itself will typically be + more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on + it will likely be a UK release. + +#### Returns + +`string` + +MusicBrainz ReleaseCountry of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseCountry**(`value`): `void` + +Sets the MusicBrainz release country of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseCountry which describes the country in + which an album was released. Note that the release country of an album is not + necessarily the country in which it was produced. The label itself will typically be + more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on + it will likely be a UK release. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseCountry of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseGroupId + +• `get` **musicBrainzReleaseGroupId**(): `string` + +Gets the MusicBrainz release group ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify + a particular release group to which this track belongs. + +#### Returns + +`string` + +MusicBrainz ReleaseGroupID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseGroupId**(`value`): `void` + +Sets the MusicBrainz release group ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify + a particular release group to which this track belongs. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseGroupID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseId + +• `get` **musicBrainzReleaseId**(): `string` + +Gets the MusicBrainz release ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a + particular release to which this track belongs. + +#### Returns + +`string` + +MusicBrainz ReleaseID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseId**(`value`): `void` + +Sets the MusicBrainz release ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a + particular release to which this track belongs. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseStatus + +• `get` **musicBrainzReleaseStatus**(): `string` + +Gets the MusicBrainz release status of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a + release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. + +#### Returns + +`string` + +MusicBrainz ReleaseStatus of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseStatus**(`value`): `void` + +Sets the MusicBrainz release status of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a + release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseStatus of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseType + +• `get` **musicBrainzReleaseType**(): `string` + +Gets the MusicBrainz release type of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseType that describes what kind of release + a release is. Common types are: `Single`, `Album`, `EP`, `Compilation`, `Soundtrack, + `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought + must be given when using this field to decide if a particular track "is a compilation". + +#### Returns + +`string` + +MusicBrainz ReleaseType of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseType**(`value`): `void` + +Sets the MusicBrainz release type of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseType that describes what kind of release + a release is. Common types are: `Single`, `Album`, `EP`, `Compilation`, `Soundtrack, + `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought + must be given when using this field to decide if a particular track "is a compilation". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseType of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzTrackId + +• `get` **musicBrainzTrackId**(): `string` + +Gets the MusicBrainz track ID of the media represented by the media represented by the +current instance. + +**`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a + particular track. + +#### Returns + +`string` + +MusicBrainz TrackID of the media represented by the current instance or `undefined` + if no value is present + +• `set` **musicBrainzTrackId**(`value`): `void` + +Sets the MusicBrainz track ID of the media represented by the media represented by the +current instance. + +**`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a + particular track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz TrackID of the media represented by the current instance or `undefined` + if no value is present + +___ + +### musicIpId + +• `get` **musicIpId**(): `string` + +Gets the MusicIP PUID of the media represented by the current instance. + +**`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It + identifies wht this track "sounds like". + +#### Returns + +`string` + +MusicIP PUID of the media represented by the current instance or `undefined` if no + value is present + +• `set` **musicIpId**(`value`): `void` + +Sets the MusicIP PUID of the media represented by the current instance. + +**`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It + identifies wht this track "sounds like". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicIP PUID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicIP PUID of the media represented by the current instance or `undefined` if no + value is present + +___ + +### performers + +• `get` **performers**(): `string`[] + +**`inheritdoc`** + +**`remarks`** Implemented via the `ISTR` item. + +#### Returns + +`string`[] + +• `set` **performers**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ISTR` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | + +#### Returns + +`void` + +___ + +### performersRole + +• `get` **performersRole**(): `string`[] + +Gets the characters portrayed by an actor for a video or instruments played by a musician +for music. This must match the [performers](infotag.md#performers) array (for each person, correspond one/more +role). Several roles for the same artist/actor can be separated with semicolons. For +example: "Bass; Backing Vocals; Vibraphone". + +**`remarks`** It is highly important to match each role to the performers. This means that an entry + in the [performersRole](infotag.md#performersrole) array is `undefined` to maintain the relationship between + `performers[i]` and `performersRole[i]`. + +#### Returns + +`string`[] + +Array containing the roles played by the performers in the media described by the + current instance, or an empty array if no value is present. + +• `set` **performersRole**(`value`): `void` + +Sets the characters portrayed by an actor for a video or instruments played by a musician +for music. This must match the [performers](infotag.md#performers) array (for each person, correspond one/more +role). Several roles for the same artist/actor can be separated with semicolons. For +example: "Bass; Backing Vocals; Vibraphone". + +**`remarks`** It is highly important to match each role to the performers. This means that an entry + in the [performersRole](infotag.md#performersrole) array is `undefined` to maintain the relationship between + `performers[i]` and `performersRole[i]`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Array containing the roles played by the performers in the media described by the + current instance, or an empty array if no value is present. + +___ + +### performersSort + +• `get` **performersSort**(): `string`[] + +Gets the sortable names of the performers or artists who performed in the media described by +the current instance. + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last name. For example, "The Pillows" might be sorted as + "Pillows, The". + +**`see`** performers + +#### Returns + +`string`[] + +Sortable names for the performers who performed in the media described by the + current instance, or an empty array if no value is present. + +• `set` **performersSort**(`value`): `void` + +Gets the sortable names of the performers or artists who performed in the media described by +the current instance. + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last name. For example, "The Pillows" might be sorted as + "Pillows, The". + +**`see`** performers + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the performers who performed in the media described by the + current instance, or an empty array if no value is present. + +___ + +### pictures + +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] + +Gets a collection of pictures associated with the media represented by the current instance. + +**`remarks`** Typically, this value is used to store an album cover or icon to use for the file, but + it is capable of holding any type of image or file, including pictures of the band, the + recording studio, the concert, etc. + +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] + +Array containing a collection of pictures associated with the media represented by + the current instance or an empty array if no pictures are present. + +• `set` **pictures**(`value`): `void` + +Sets a collection of pictures associated with the media represented by the current instance. + +**`remarks`** Typically, this value is used to store an album cover or icon to use for the file, but + it is capable of holding any type of image or file, including pictures of the band, the + recording studio, the concert, etc. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. | + +#### Returns + +`void` + +Array containing a collection of pictures associated with the media represented by + the current instance or an empty array if no pictures are present. + +___ + +### publisher + +• `get` **publisher**(): `string` + +Gets the publisher of the track. + +#### Returns + +`string` + +Publisher of the track or `undefined` if no value is set + +• `set` **publisher**(`value`): `void` + +Sets the publisher of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Publisher of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Publisher of the track or `undefined` if no value is set + +___ + +### remixedBy + +• `get` **remixedBy**(): `string` + +Gets the remixer of the track. + +#### Returns + +`string` + +Remixer of the track or `undefined` if no value is set + +• `set` **remixedBy**(`value`): `void` + +Sets the remixer of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Remixer of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Remixer of the track or `undefined` if no value is set + +___ + +### replayGainAlbumGain + +• `get` **replayGainAlbumGain**(): `number` + +Gets the ReplayGain album gain in dB. + +#### Returns + +`number` + +Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set + +• `set` **replayGainAlbumGain**(`value`): `void` + +Sets the ReplayGain album gain in dB. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set | + +#### Returns + +`void` + +Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set + +___ + +### replayGainAlbumPeak + +• `get` **replayGainAlbumPeak**(): `number` + +Gets the ReplayGain album peak sample. + +#### Returns + +`number` + +Album peak as per the ReplayGain specifications, or `NaN` if no value is set + +• `set` **replayGainAlbumPeak**(`value`): `void` + +Sets the ReplayGain album peak sample. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album peak as per the ReplayGain specifications, or `NaN` if no value is set | + +#### Returns + +`void` + +Album peak as per the ReplayGain specifications, or `NaN` if no value is set + +___ + +### replayGainTrackGain + +• `get` **replayGainTrackGain**(): `number` + +Gets the ReplayGain track gain in dB. + +#### Returns + +`number` + +Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set + +• `set` **replayGainTrackGain**(`value`): `void` + +Sets the ReplayGain track gain in dB. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set | + +#### Returns + +`void` + +Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set + +___ + +### replayGainTrackPeak + +• `get` **replayGainTrackPeak**(): `number` + +Gets the ReplayGain track peak sample. + +#### Returns + +`number` + +Track peak as per the ReplayGain specifications, or `NaN` if no value is set + +• `set` **replayGainTrackPeak**(`value`): `void` + +Sets the ReplayGain track peak sample. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track peak as per the ReplayGain specifications, or `NaN` if no value is set | + +#### Returns + +`void` + +Track peak as per the ReplayGain specifications, or `NaN` if no value is set + +___ + +### stringType + +• `get` **stringType**(): [`StringType`](../enums/stringtype.md) + +Gets the type of string used for parsing and rendering the contents of this tag. + +#### Returns + +[`StringType`](../enums/stringtype.md) + +• `set` **stringType**(`value`): `void` + +Sets the type of string used for parsing and rendering the contents of this tag. + +**`remarks`** The value must be `StringType.Latin1` or `StringType.UTF8`. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | + +#### Returns + +`void` + +___ + +### subtitle + +• `get` **subtitle**(): `string` + +Gets a description, one-line. It represents the tagline of the vide/music. + +**`remarks`** This field gives a nice/short precision to the title, which is typically below the + title on the front cover of the media. For example for "Ocean's 13", this would be + "Revenge is a funny thing". + +#### Returns + +`string` + +Subtitle of the media represented by the current instance or `undefined` if no + value is present + +• `set` **subtitle**(`value`): `void` + +Sets a description, one-line. It represents the tagline of the vide/music. + +**`remarks`** This field gives a nice/short precision to the title, which is typically below the + title on the front cover of the media. For example for "Ocean's 13", this would be + "Revenge is a funny thing". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Subtitle of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Subtitle of the media represented by the current instance or `undefined` if no + value is present + +___ + +### tagTypes + +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) + +**`inheritdoc`** + +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### title + +• `get` **title**(): `string` + +**`inheritdoc`** + +**`remarks`** Implemented via the `INAM` item. + +#### Returns + +`string` + +• `set` **title**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `INAM` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +___ + +### titleSort + +• `get` **titleSort**(): `string` + +Gets the sortable name for the title of the media described by the current instance. + +**`remarks`** Possibly used to sort compilations or episodic content. + +#### Returns + +`string` + +Sortable name of the media described by the current instance or `undefined` if no + value is present + +• `set` **titleSort**(`value`): `void` + +Sets the sortable name for the title of the media described by the current instance. + +**`remarks`** Possibly used to sort compilations or episodic content. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name of the media described by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Sortable name of the media described by the current instance or `undefined` if no + value is present + +___ + +### track + +• `get` **track**(): `number` + +**`inheritdoc`** + +**`remarks`** Implemented via the `IPRT` item. + +#### Returns + +`number` + +• `set` **track**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `IPRT` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | + +#### Returns + +`void` + +___ + +### trackCount + +• `get` **trackCount**(): `number` + +**`inheritdoc`** + +**`remarks`** Implemented via the `IFRM` item. + +#### Returns + +`number` + +• `set` **trackCount**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `IFRM` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | + +#### Returns + +`void` + +___ + +### year + +• `get` **year**(): `number` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ICRD` item. + +#### Returns + +`number` + +• `set` **year**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `ICRD` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | + +#### Returns + +`void` + +## Methods + +### clear + +▸ **clear**(): `void` + +Clears all values stored in the current instance. + +**`remarks`** The clearing procedure is format specific and should clear all values. + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[clear](rifflisttag.md#clear) + +___ + +### copyTo + +▸ **copyTo**(`target`, `overwrite`): `void` + +Copies the values from the current instance to another [Tag](tag.md), optionally overwriting + existing values. + +**`remarks`** This method only copies the most basic values when copying between different tag + formats. However, if `target` is of the same type as the current instance, + more advanced copying may be done. For example if both `this` and `target` are + [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[copyTo](rifflisttag.md#copyto) + +___ + +### getFirstValueAsString + +▸ `Protected` **getFirstValueAsString**(`id`): `string` + +Gets the first non-falsy string for the specified ID. If the item is not found, `undefined` +is returned. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to lookup in the list. | + +#### Returns + +`string` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[getFirstValueAsString](rifflisttag.md#getfirstvalueasstring) + +___ + +### getValueAsUint + +▸ **getValueAsUint**(`id`): `number` + +Gets the value for a specified item in the current instance as an unsigned integer. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item for which to get the value | + +#### Returns + +`number` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[getValueAsUint](rifflisttag.md#getvalueasuint) + +___ + +### getValues + +▸ **getValues**(`id`): [`ByteVector`](bytevector.md)[] + +Gets the values for a specified item in the current instance. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values | + +#### Returns + +[`ByteVector`](bytevector.md)[] + +#### Inherited from + +[RiffListTag](rifflisttag.md).[getValues](rifflisttag.md#getvalues) + +___ + +### getValuesAsStrings + +▸ **getValuesAsStrings**(`id`): `string`[] + +Gets the values for a specified item in the current instance as strings. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values | + +#### Returns + +`string`[] + +#### Inherited from + +[RiffListTag](rifflisttag.md).[getValuesAsStrings](rifflisttag.md#getvaluesasstrings) + +___ + +### initializeFromData + +▸ `Protected` **initializeFromData**(`data`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[initializeFromData](rifflisttag.md#initializefromdata) + +___ + +### initializeFromEmpty + +▸ `Protected` **initializeFromEmpty**(): `void` + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[initializeFromEmpty](rifflisttag.md#initializefromempty) + +___ + +### initializeFromFile + +▸ `Protected` **initializeFromFile**(`file`, `position`, `length`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `file` | [`File`](file.md) | +| `position` | `number` | +| `length` | `number` | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[initializeFromFile](rifflisttag.md#initializefromfile) + +___ + +### initializeFromList + +▸ `Protected` **initializeFromList**(`fields`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `fields` | [`RiffList`](rifflist.md) | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[initializeFromList](rifflisttag.md#initializefromlist) + +___ + +### removeValue + +▸ **removeValue**(`id`): `void` + +Removed the item with the specified ID from the current instance. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to remove | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[removeValue](rifflisttag.md#removevalue) + +___ + +### render + +▸ **render**(): [`ByteVector`](bytevector.md) + +Renders the current instance as a raw RIFF list. + +#### Returns + +[`ByteVector`](bytevector.md) + +#### Inherited from + +[RiffListTag](rifflisttag.md).[render](rifflisttag.md#render) + +___ + +### renderEnclosed + +▸ **renderEnclosed**(): [`ByteVector`](bytevector.md) + +Renders the current instance enclosed in the appropriate item. + +#### Returns + +[`ByteVector`](bytevector.md) + +#### Overrides + +[RiffListTag](rifflisttag.md).[renderEnclosed](rifflisttag.md#renderenclosed) + +___ + +### renderEnclosedInternal + +▸ `Protected` **renderEnclosedInternal**(`id`): [`ByteVector`](bytevector.md) + +Renders the current instance enclosed in an item with a specified ID. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to enclose the current instance in when rendering | + +#### Returns + +[`ByteVector`](bytevector.md) + +#### Inherited from + +[RiffListTag](rifflisttag.md).[renderEnclosedInternal](rifflisttag.md#renderenclosedinternal) + +___ + +### setInfoTag + +▸ **setInfoTag**(): `void` + +Set the tags that represent the tagger software (node-taglib-sharp) itself. + +**`remarks`** This is typically a method to call just before saving a tag. + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[setInfoTag](rifflisttag.md#setinfotag) + +___ + +### setValueFromUint + +▸ **setValueFromUint**(`id`, `value`): `void` + +Sets the value for a specified item in the current instance using an unsigned integer. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `value` | `number` | Value to store in the specified item, must be an unsigned 32-bit integer | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[setValueFromUint](rifflisttag.md#setvaluefromuint) + +___ + +### setValues + +▸ **setValues**(`id`, ...`values`): `void` + +Sets the value for a specified item in the current instance + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `...values` | [`ByteVector`](bytevector.md)[] | Values to store in the specified item | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[setValues](rifflisttag.md#setvalues) + +___ + +### setValuesFromStrings + +▸ **setValuesFromStrings**(`id`, ...`values`): `void` + +Sets the value for a specified item in the current instance using a list of strings. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `...values` | `string`[] | Values to store in the specified item | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[setValuesFromStrings](rifflisttag.md#setvaluesfromstrings) + +___ + +### firstInGroup + +▸ `Static` `Protected` **firstInGroup**(`group`): `string` + +Gets the first string in an array. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | + +#### Returns + +`string` + +First string contained in `group` or `undefined` if the array is + `undefined` or empty + +#### Inherited from + +[RiffListTag](rifflisttag.md).[firstInGroup](rifflisttag.md#firstingroup) + +___ + +### fromData + +▸ `Static` **fromData**(`data`): [`InfoTag`](infotag.md) + +Constructs and initializes a new instance by reading the contents of a raw RIFF list stored +in a [ByteVector](bytevector.md) object. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Object containing the raw RIFF list | + +#### Returns + +[`InfoTag`](infotag.md) + +___ + +### fromEmpty + +▸ `Static` **fromEmpty**(): [`InfoTag`](infotag.md) + +Constructs and initializes a new, empty instance. + +#### Returns + +[`InfoTag`](infotag.md) + +___ + +### fromFile + +▸ `Static` **fromFile**(`file`, `position`, `length`): [`InfoTag`](infotag.md) + +Constructs and initializes a new instance by reading the contents of a raw RIFF list stored +a file. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File containing the raw RIFF list | +| `position` | `number` | Index into the file where the RIFF list begins. Must be a safe, unsigned int | +| `length` | `number` | Number of bytes to read | + +#### Returns + +[`InfoTag`](infotag.md) + +___ + +### isFalsyOrLikeEmpty + +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` + +Checks if a value is falsy or empty. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | + +#### Returns + +`boolean` + +If `value` is a string, `true` is returned if the value is falsy or all + whitespace, `false` is returned otherwise. If `value` is an array of strings, + the array must be falsy or all elements must be falsy or whitespace to return `true`. + +#### Inherited from + +[RiffListTag](rifflisttag.md).[isFalsyOrLikeEmpty](rifflisttag.md#isfalsyorlikeempty) + +___ + +### joinGroup + +▸ `Static` `Protected` **joinGroup**(`group`): `string` + +Joins an array of string into a single, semicolon and space separated string. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | + +#### Returns + +`string` + +A semicolon and space separated string containing the values from `group` + or undefined if the array is `undefined` or empty. + +#### Inherited from + +[RiffListTag](rifflisttag.md).[joinGroup](rifflisttag.md#joingroup) diff --git a/docs/classes/localfileabstraction.md b/docs/classes/localfileabstraction.md index 559d9993..6a42a7d7 100644 --- a/docs/classes/localfileabstraction.md +++ b/docs/classes/localfileabstraction.md @@ -6,13 +6,9 @@ This class implements {@link IFileAbstraction} to provide support for accessing standard file. This class is used as the standard file abstraction throughout the library. -## Hierarchy - -* **LocalFileAbstraction** - ## Implements -* *IFileAbstraction* +- `IFileAbstraction` ## Table of contents @@ -34,62 +30,72 @@ This class is used as the standard file abstraction throughout the library. ### constructor -\+ **new LocalFileAbstraction**(`path`: *string*): [*LocalFileAbstraction*](localfileabstraction.md) +• **new LocalFileAbstraction**(`path`) Constructs and initializes a new instance from a specified path in the local file system **`throws`** Error Thrown if `path` is falsy -#### Parameters: - -Name | Type | Description | ------- | ------ | ------ | -`path` | *string* | Path of the file to use in the new instance | +#### Parameters -**Returns:** [*LocalFileAbstraction*](localfileabstraction.md) +| Name | Type | Description | +| :------ | :------ | :------ | +| `path` | `string` | Path of the file to use in the new instance | ## Accessors ### name -• **name**(): *string* +• `get` **name**(): `string` -**`inheritdoc`** +**`inheritdoc`** -**Returns:** *string* +#### Returns + +`string` ___ ### readStream -• **readStream**(): IStream +• `get` **readStream**(): `IStream` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** IStream +`IStream` ___ ### writeStream -• **writeStream**(): IStream +• `get` **writeStream**(): `IStream` -**`inheritdoc`** +**`inheritdoc`** -**Returns:** IStream +#### Returns + +`IStream` ## Methods ### closeStream -▸ **closeStream**(`stream`: IStream): *void* +▸ **closeStream**(`stream`): `void` + +**`inheritdoc`** + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `stream` | `IStream` | -**`inheritdoc`** +#### Returns -#### Parameters: +`void` -Name | Type | ------- | ------ | -`stream` | IStream | +#### Implementation of -**Returns:** *void* +IFileAbstraction.closeStream diff --git a/docs/classes/movieidtag.md b/docs/classes/movieidtag.md new file mode 100644 index 00000000..07a10def --- /dev/null +++ b/docs/classes/movieidtag.md @@ -0,0 +1,2535 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / MovieIdTag + +# Class: MovieIdTag + +Provides support for reading and writing MovieID tags. + +## Hierarchy + +- [`RiffListTag`](rifflisttag.md) + + ↳ **`MovieIdTag`** + +## Table of contents + +### Accessors + +- [album](movieidtag.md#album) +- [albumArtists](movieidtag.md#albumartists) +- [albumArtistsSort](movieidtag.md#albumartistssort) +- [albumSort](movieidtag.md#albumsort) +- [amazonId](movieidtag.md#amazonid) +- [beatsPerMinute](movieidtag.md#beatsperminute) +- [comment](movieidtag.md#comment) +- [composers](movieidtag.md#composers) +- [composersSort](movieidtag.md#composerssort) +- [conductor](movieidtag.md#conductor) +- [copyright](movieidtag.md#copyright) +- [dateTagged](movieidtag.md#datetagged) +- [description](movieidtag.md#description) +- [disc](movieidtag.md#disc) +- [discCount](movieidtag.md#disccount) +- [firstAlbumArtist](movieidtag.md#firstalbumartist) +- [firstAlbumArtistSort](movieidtag.md#firstalbumartistsort) +- [firstComposer](movieidtag.md#firstcomposer) +- [firstComposerSort](movieidtag.md#firstcomposersort) +- [firstGenre](movieidtag.md#firstgenre) +- [firstPerformer](movieidtag.md#firstperformer) +- [firstPerformerSort](movieidtag.md#firstperformersort) +- [genres](movieidtag.md#genres) +- [grouping](movieidtag.md#grouping) +- [initialKey](movieidtag.md#initialkey) +- [isEmpty](movieidtag.md#isempty) +- [isrc](movieidtag.md#isrc) +- [joinedAlbumArtists](movieidtag.md#joinedalbumartists) +- [joinedComposers](movieidtag.md#joinedcomposers) +- [joinedGenres](movieidtag.md#joinedgenres) +- [joinedPerformers](movieidtag.md#joinedperformers) +- [joinedPerformersSort](movieidtag.md#joinedperformerssort) +- [lyrics](movieidtag.md#lyrics) +- [musicBrainzArtistId](movieidtag.md#musicbrainzartistid) +- [musicBrainzDiscId](movieidtag.md#musicbrainzdiscid) +- [musicBrainzReleaseArtistId](movieidtag.md#musicbrainzreleaseartistid) +- [musicBrainzReleaseCountry](movieidtag.md#musicbrainzreleasecountry) +- [musicBrainzReleaseGroupId](movieidtag.md#musicbrainzreleasegroupid) +- [musicBrainzReleaseId](movieidtag.md#musicbrainzreleaseid) +- [musicBrainzReleaseStatus](movieidtag.md#musicbrainzreleasestatus) +- [musicBrainzReleaseType](movieidtag.md#musicbrainzreleasetype) +- [musicBrainzTrackId](movieidtag.md#musicbrainztrackid) +- [musicIpId](movieidtag.md#musicipid) +- [performers](movieidtag.md#performers) +- [performersRole](movieidtag.md#performersrole) +- [performersSort](movieidtag.md#performerssort) +- [pictures](movieidtag.md#pictures) +- [publisher](movieidtag.md#publisher) +- [remixedBy](movieidtag.md#remixedby) +- [replayGainAlbumGain](movieidtag.md#replaygainalbumgain) +- [replayGainAlbumPeak](movieidtag.md#replaygainalbumpeak) +- [replayGainTrackGain](movieidtag.md#replaygaintrackgain) +- [replayGainTrackPeak](movieidtag.md#replaygaintrackpeak) +- [stringType](movieidtag.md#stringtype) +- [subtitle](movieidtag.md#subtitle) +- [tagTypes](movieidtag.md#tagtypes) +- [title](movieidtag.md#title) +- [titleSort](movieidtag.md#titlesort) +- [track](movieidtag.md#track) +- [trackCount](movieidtag.md#trackcount) +- [year](movieidtag.md#year) + +### Methods + +- [clear](movieidtag.md#clear) +- [copyTo](movieidtag.md#copyto) +- [getFirstValueAsString](movieidtag.md#getfirstvalueasstring) +- [getValueAsUint](movieidtag.md#getvalueasuint) +- [getValues](movieidtag.md#getvalues) +- [getValuesAsStrings](movieidtag.md#getvaluesasstrings) +- [initializeFromData](movieidtag.md#initializefromdata) +- [initializeFromEmpty](movieidtag.md#initializefromempty) +- [initializeFromFile](movieidtag.md#initializefromfile) +- [initializeFromList](movieidtag.md#initializefromlist) +- [removeValue](movieidtag.md#removevalue) +- [render](movieidtag.md#render) +- [renderEnclosed](movieidtag.md#renderenclosed) +- [renderEnclosedInternal](movieidtag.md#renderenclosedinternal) +- [setInfoTag](movieidtag.md#setinfotag) +- [setValueFromUint](movieidtag.md#setvaluefromuint) +- [setValues](movieidtag.md#setvalues) +- [setValuesFromStrings](movieidtag.md#setvaluesfromstrings) +- [firstInGroup](movieidtag.md#firstingroup) +- [fromData](movieidtag.md#fromdata) +- [fromEmpty](movieidtag.md#fromempty) +- [fromFile](movieidtag.md#fromfile) +- [isFalsyOrLikeEmpty](movieidtag.md#isfalsyorlikeempty) +- [joinGroup](movieidtag.md#joingroup) + +## Accessors + +### album + +• `get` **album**(): `string` + +Gets the album of the media represented by the current instance. For video media, this +represents the collection the video belongs to. + +**`remarks`** This field represents the name of the album the media belongs to. In the case of a + boxed set, it should be the name of the entire set rather than the individual disc. In + the case of a series, this should be the name of the series, rather than the season of a + series. + For example, "Kintsugi" (an album by Death Cab for Cutie), "The Complete Red Green Show" + (a boxed set of TV episodes), or "Shark Tank" (a series with several seasons). + +#### Returns + +`string` + +Album of the media represented by the current instance or `undefined` if no value + is present + +• `set` **album**(`value`): `void` + +Sets the album of the media represented by the current instance. For video media, this +represents the collection the video belongs to. + +**`remarks`** This field represents the name of the album the media belongs to. In the case of a + boxed set, it should be the name of the entire set rather than the individual disc. In + the case of a series, this should be the name of the series, rather than the season of a + series. + For example, "Kintsugi" (an album by Death Cab for Cutie), "The Complete Red Green Show" + (a boxed set of TV episodes), or "Shark Tank" (a series with several seasons). + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Album of the media represented by the current instance or `undefined` if no value + is present + +___ + +### albumArtists + +• `get` **albumArtists**(): `string`[] + +Gets the band or artist who is credited credited in the creation of the entire album or +collection containing the media described by the current instance. + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple artist. For example, if an album has several artists, sorting by artist + will split up albums by the same artist. Having a single album artist for an entire + album solves this problem. + As this value is to be used as a sorting key, it should be used with less variation + than [performers](movieidtag.md#performers). Where performers can be broken into multiple artists, it is + best to stick to a single name. Eg, "Super8 & Tab" + +#### Returns + +`string`[] + +Band or artist credited with the creation of the entire album or collection + containing the media described by the current instance or an empty array if no value is + present + +• `set` **albumArtists**(`value`): `void` + +Sets the bands or artists who is credited credited in the creation of the entire album or +collection containing the media described by the current instance. + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple artist. For example, if an album has several artists, sorting by artist + will split up albums by the same artist. Having a single album artist for an entire + album solves this problem. + As this value is to be used as a sorting key, it should be used with less variation + than [performers](movieidtag.md#performers). Where performers can be broken into multiple artists, it is + best to stick to a single name. Eg, "Super8 & Tab" + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present | + +#### Returns + +`void` + +Band or artist credited with the creation of the entire album or collection + containing the media described by the current instance or an empty array if no value is + present + +___ + +### albumArtistsSort + +• `get` **albumArtistsSort**(): `string`[] + +Gets the sortable names of the bands/artists who are credited with creating the entire +album or collection containing the media described by the current instance. + +**`see`** albumArtists + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last by last name. For example "Ben Folds" might be sorted as + "Folds, Ben". + As this value is to be used as a sorting key, it should be used with less variation than + [performers](movieidtag.md#performers). Where [performers](movieidtag.md#performers) can be broken into multiple performers, it is + best to stick to a single album artist. Eg, "Van Buuren, Armin" + +#### Returns + +`string`[] + +Sortable names for the bands/artists are credited with the creation of the entire + album or collection containing the media described by the current instance, or an empty + array if no value is present. + +• `set` **albumArtistsSort**(`value`): `void` + +Sets the sortable names of the bands/artists who are credited with creating the entire +album or collection containing the media described by the current instance. + +**`see`** albumArtists + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last by last name. For example "Ben Folds" might be sorted as + "Folds, Ben". + As this value is to be used as a sorting key, it should be used with less variation than + [performers](movieidtag.md#performers). Where [performers](movieidtag.md#performers) can be broken into multiple performers, it is + best to stick to a single album artist. Eg, "Van Buuren, Armin" + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the bands/artists are credited with the creation of the entire + album or collection containing the media described by the current instance, or an empty + array if no value is present. + +___ + +### albumSort + +• `get` **albumSort**(): `string` + +Gets the sortable name of the album title of the media represented by the current instance. + +**`see`** album + +**`remarks`** This field is typically optional but aids in sort of compilations or albums with + similar titles. + +#### Returns + +`string` + +Sortable name for the album title of the media or `undefined` if the value is not + present + +• `set` **albumSort**(`value`): `void` + +Sets the sortable name of the album title of the media represented by the current instance. + +**`see`** album + +**`remarks`** This field is typically optional but aids in sort of compilations or albums with + similar titles. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name for the album title of the media or `undefined` if the value is not present | + +#### Returns + +`void` + +Sortable name for the album title of the media or `undefined` if the value is not + present + +___ + +### amazonId + +• `get` **amazonId**(): `string` + +Gets the Amazon ID of the media represented by the current instance. + +**`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely + identify the particular track or album in the Amazon catalog. + +#### Returns + +`string` + +Amazon ID of the media represented by the current instance or `undefined` if no + value is present + +• `set` **amazonId**(`value`): `void` + +Sets the Amazon ID of the media represented by the current instance. + +**`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely + identify the particular track or album in the Amazon catalog. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Amazon ID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Amazon ID of the media represented by the current instance or `undefined` if no + value is present + +___ + +### beatsPerMinute + +• `get` **beatsPerMinute**(): `number` + +Gets the number of beats per minute in the audio of the media represented by the current +instance. + +**`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be + calculated from the audio or pulled from a database. + +#### Returns + +`number` + +Beats per minute of the audio in the media represented by the current instance, or + `0` if not specified + +• `set` **beatsPerMinute**(`value`): `void` + +Sets the number of beats per minute in the audio of the media represented by the current +instance. + +**`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be + calculated from the audio or pulled from a database. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Beats per minute of the audio in the media represented by the current instance, or `0` if not specified | + +#### Returns + +`void` + +Beats per minute of the audio in the media represented by the current instance, or + `0` if not specified + +___ + +### comment + +• `get` **comment**(): `string` + +**`inheritdoc`** + +**`remarks`** Implemented via the `COMM` item. + +#### Returns + +`string` + +• `set` **comment**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `COMM` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +___ + +### composers + +• `get` **composers**(): `string`[] + +Gets the composers of the media represented by the current instance. + +**`remarks`** This field represents the composers, song writers, script writers, or persons who + claim authorship of the media. + +#### Returns + +`string`[] + +Composers of the media represented by the current instance of an empty array if no + value is present. + +• `set` **composers**(`value`): `void` + +Sets the composers of the media represented by the current instance. + +**`remarks`** This field represents the composers, song writers, script writers, or persons who + claim authorship of the media. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Composers of the media represented by the current instance of an empty array if no value is present. | + +#### Returns + +`void` + +Composers of the media represented by the current instance of an empty array if no + value is present. + +___ + +### composersSort + +• `get` **composersSort**(): `string`[] + +Gets the sortable names of the composers of the media represented by the current instance. + +**`see`** composers + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple composers. + +#### Returns + +`string`[] + +Sortable names for the composers of the media represented by the current instance + or an empty array if no value is present. + +• `set` **composersSort**(`value`): `void` + +Sets the sortable names of the composers of the media represented by the current instance. + +**`see`** composers + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple composers. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the composers of the media represented by the current instance + or an empty array if no value is present. + +___ + +### conductor + +• `get` **conductor**(): `string` + +Gets the conductor or director of the media represented by the current instance. + +**`remarks`** This field is most useful for organizing classical music and movies. + +#### Returns + +`string` + +Conductor or director of the media represented by the current instance or + `undefined` if no value present. + +• `set` **conductor**(`value`): `void` + +Sets the conductor or director of the media represented by the current instance. + +**`remarks`** This field is most useful for organizing classical music and movies. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Conductor or director of the media represented by the current instance or `undefined` if no value present. | + +#### Returns + +`void` + +Conductor or director of the media represented by the current instance or + `undefined` if no value present. + +___ + +### copyright + +• `get` **copyright**(): `string` + +Gets the copyright information for the media represented by the current instance. + +**`remarks`** This field should be used for storing copyright information. It may be useful to show + this information somewhere in the program while the media is playing. + Players should not support editing this field, but media creation tools should + definitely allow modification. + +#### Returns + +`string` + +Copyright information for the media represented by the current instance or + `undefined` if no value is present. + +• `set` **copyright**(`value`): `void` + +Sets the copyright information for the media represented by the current instance. + +**`remarks`** This field should be used for storing copyright information. It may be useful to show + this information somewhere in the program while the media is playing. + Players should not support editing this field, but media creation tools should + definitely allow modification. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Copyright information for the media represented by the current instance or `undefined` if no value is present. | + +#### Returns + +`void` + +Copyright information for the media represented by the current instance or + `undefined` if no value is present. + +___ + +### dateTagged + +• `get` **dateTagged**(): `Date` + +Gets the date and time at which the tag has been written. + +#### Returns + +`Date` + +Date/time at which the tag has been written, or `undefined` if no value is present + +• `set` **dateTagged**(`value`): `void` + +Sets the date and time at which the tag has been written. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `Date` | Date/time at which the tag has been written, or `undefined` if no value is present | + +#### Returns + +`void` + +Date/time at which the tag has been written, or `undefined` if no value is present + +___ + +### description + +• `get` **description**(): `string` + +Gets a short description of the media. For music, this could be the comment that the artist +made of his/her work. For a video, this should be a short summary of the story/plot, but +generally no spoliers. This should give the impression of what to expect in the media. + +**`remarks`** This is especially relevant for a movie. For example, for "Fear and Loathing in Las + Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las + Vegas for a series of psychedelic escapades." + +#### Returns + +`string` + +Description of the media represented by the current instance or `undefined` if no + value is present + +• `set` **description**(`value`): `void` + +Sets a short description of the media. For music, this could be the comment that the artist +made of his/her work. For a video, this should be a short summary of the story/plot, but +generally no spoliers. This should give the impression of what to expect in the media. + +**`remarks`** This is especially relevant for a movie. For example, for "Fear and Loathing in Las + Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las + Vegas for a series of psychedelic escapades." + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Description of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Description of the media represented by the current instance or `undefined` if no + value is present + +___ + +### disc + +• `get` **disc**(): `number` + +Gets the number of the disc containing the media represented by the current instance in the +boxed set. For a series, this represents the season number. + +**`remarks`** This value should be the same as the number that appears on the disc. For example, if + the disc is the first of three, the value should be `1`. It should be no more than + [discCount](movieidtag.md#disccount) if [discCount](movieidtag.md#disccount) is non-zero. + +#### Returns + +`number` + +Number of the disc or season of the media represented by the current instance in a + boxed set. + +• `set` **disc**(`value`): `void` + +Sets the number of the disc containing the media represented by the current instance in the +boxed set. For a series, this represents the season number. + +**`remarks`** This value should be the same as the number that appears on the disc. For example, if + the disc is the first of three, the value should be `1`. It should be no more than + [discCount](movieidtag.md#disccount) if [discCount](movieidtag.md#disccount) is non-zero. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of the disc or season of the media represented by the current instance in a boxed set. | + +#### Returns + +`void` + +Number of the disc or season of the media represented by the current instance in a + boxed set. + +___ + +### discCount + +• `get` **discCount**(): `number` + +Gets the number of discs or seasons in the boxed set containing the media represented by the +current instance. + +**`remarks`** If non-zero, this should be at least equal to [disc](movieidtag.md#disc). If [disc](movieidtag.md#disc) is zero, + this value should also be zero. + +#### Returns + +`number` + +Number of discs or seasons in the boxed set containing the media represented by the + current instance or `0` if not specified. + +• `set` **discCount**(`value`): `void` + +Sets the number of discs or seasons in the boxed set containing the media represented by the +current instance. + +**`remarks`** If non-zero, this should be at least equal to [disc](movieidtag.md#disc). If [disc](movieidtag.md#disc) is zero, + this value should also be zero. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. | + +#### Returns + +`void` + +Number of discs or seasons in the boxed set containing the media represented by the + current instance or `0` if not specified. + +___ + +### firstAlbumArtist + +• `get` **firstAlbumArtist**(): `string` + +Gets the the first value contained in [albumArtists](movieidtag.md#albumartists). + +#### Returns + +`string` + +___ + +### firstAlbumArtistSort + +• `get` **firstAlbumArtistSort**(): `string` + +Gets the first value contained in [albumArtistsSort](movieidtag.md#albumartistssort) + +#### Returns + +`string` + +___ + +### firstComposer + +• `get` **firstComposer**(): `string` + +Gets the first value contained in [composers](movieidtag.md#composers) + +#### Returns + +`string` + +___ + +### firstComposerSort + +• `get` **firstComposerSort**(): `string` + +Gets the first value contained in [composersSort](movieidtag.md#composerssort) + +#### Returns + +`string` + +___ + +### firstGenre + +• `get` **firstGenre**(): `string` + +Gets the first value contained in [genres](movieidtag.md#genres) + +#### Returns + +`string` + +___ + +### firstPerformer + +• `get` **firstPerformer**(): `string` + +Gets the first value contained in [performers](movieidtag.md#performers) + +#### Returns + +`string` + +___ + +### firstPerformerSort + +• `get` **firstPerformerSort**(): `string` + +Gets the first value contained in [performersSort](movieidtag.md#performerssort) + +#### Returns + +`string` + +___ + +### genres + +• `get` **genres**(): `string`[] + +**`inheritdoc`** + +**`remarks`** Implemented via the `GENR` item. + +#### Returns + +`string`[] + +• `set` **genres**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `GENR` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | + +#### Returns + +`void` + +___ + +### grouping + +• `get` **grouping**(): `string` + +Gets the grouping on the album which the media in the current instance belongs to. + +**`remarks`** This field contains a non-physical group to which the track belongs. In classical + music this could be a movement. It could also be parts of a series like "Introduction", + "Closing Remarks", etc. + +#### Returns + +`string` + +Grouping on the album which the media in the current instance belongs to or + `undefined` if no value is present. + +• `set` **grouping**(`value`): `void` + +Sets the grouping on the album which the media in the current instance belongs to. + +**`remarks`** This field contains a non-physical group to which the track belongs. In classical + music this could be a movement. It could also be parts of a series like "Introduction", + "Closing Remarks", etc. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. | + +#### Returns + +`void` + +Grouping on the album which the media in the current instance belongs to or + `undefined` if no value is present. + +___ + +### initialKey + +• `get` **initialKey**(): `string` + +Gets the initial key of the track. + +#### Returns + +`string` + +Initial key of the track or `undefined` if no value is set + +• `set` **initialKey**(`value`): `void` + +Sets the initial key of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Initial key of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Initial key of the track or `undefined` if no value is set + +___ + +### isEmpty + +• `get` **isEmpty**(): `boolean` + +**`inheritdoc`** + +#### Returns + +`boolean` + +___ + +### isrc + +• `get` **isrc**(): `string` + +Gets the ISRC (International Standard Recording Code) of the track. + +#### Returns + +`string` + +the ISRC of the track or `undefined` if no value is set + +• `set` **isrc**(`value`): `void` + +Sets the ISRC (International Standard Recording Code) of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | the ISRC of the track or `undefined` if no value is set | + +#### Returns + +`void` + +the ISRC of the track or `undefined` if no value is set + +___ + +### joinedAlbumArtists + +• `get` **joinedAlbumArtists**(): `string` + +Gets a semicolon and space separated string containing the values in [albumArtists](movieidtag.md#albumartists) + +#### Returns + +`string` + +___ + +### joinedComposers + +• `get` **joinedComposers**(): `string` + +Gets a semicolon and space separated string containing the values in [composers](movieidtag.md#composers) + +#### Returns + +`string` + +___ + +### joinedGenres + +• `get` **joinedGenres**(): `string` + +Gets a semicolon and space separated string containing the values in [genres](movieidtag.md#genres) + +#### Returns + +`string` + +___ + +### joinedPerformers + +• `get` **joinedPerformers**(): `string` + +Gets a semicolon and space separated string containing the values in [performers](movieidtag.md#performers) + +#### Returns + +`string` + +___ + +### joinedPerformersSort + +• `get` **joinedPerformersSort**(): `string` + +Gets a semicolon and space separated string containing the values in [performersSort](movieidtag.md#performerssort) + +#### Returns + +`string` + +___ + +### lyrics + +• `get` **lyrics**(): `string` + +Gets the lyrics or script of the media represented by the current instance. + +**`remarks`** This field contains a plain text representation of the lyrics or scripts with line + breaks and whitespace being the only formatting marks. + Some formats support more advanced lyrics, like synchronized lyrics, but those must be + accessed using format-specific implementations. + +#### Returns + +`string` + +Lyrics or script of the media represented by the current instance or `undefined` if + no value is present + +• `set` **lyrics**(`value`): `void` + +Sets the lyrics or script of the media represented by the current instance. + +**`remarks`** This field contains a plain text representation of the lyrics or scripts with line + breaks and whitespace being the only formatting marks. + Some formats support more advanced lyrics, like synchronized lyrics, but those must be + accessed using format-specific implementations. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Lyrics or script of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Lyrics or script of the media represented by the current instance or `undefined` if + no value is present + +___ + +### musicBrainzArtistId + +• `get` **musicBrainzArtistId**(): `string` + +Gets the MusicBrainz artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a + particular artist of the track. + +#### Returns + +`string` + +MusicBrainz ArtistID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzArtistId**(`value`): `void` + +Sets the MusicBrainz artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a + particular artist of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ArtistID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzDiscId + +• `get` **musicBrainzDiscId**(): `string` + +Gets the MusicBrainz disc ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the + particular released media associated with this track. + +#### Returns + +`string` + +MusicBrainz DiscID of the media represented by the current instance or `undefined` + if no value is present + +• `set` **musicBrainzDiscId**(`value`): `void` + +Sets the MusicBrainz disc ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the + particular released media associated with this track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz DiscID of the media represented by the current instance or `undefined` + if no value is present + +___ + +### musicBrainzReleaseArtistId + +• `get` **musicBrainzReleaseArtistId**(): `string` + +Gets the MusicBrainz release artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely + identify a particular album artist credited with the album. + +#### Returns + +`string` + +MusicBrainz ReleaseArtistID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseArtistId**(`value`): `void` + +Sets the MusicBrainz release artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely + identify a particular album artist credited with the album. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseArtistID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseCountry + +• `get` **musicBrainzReleaseCountry**(): `string` + +Gets the MusicBrainz release country of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseCountry which describes the country in + which an album was released. Note that the release country of an album is not + necessarily the country in which it was produced. The label itself will typically be + more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on + it will likely be a UK release. + +#### Returns + +`string` + +MusicBrainz ReleaseCountry of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseCountry**(`value`): `void` + +Sets the MusicBrainz release country of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseCountry which describes the country in + which an album was released. Note that the release country of an album is not + necessarily the country in which it was produced. The label itself will typically be + more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on + it will likely be a UK release. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseCountry of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseGroupId + +• `get` **musicBrainzReleaseGroupId**(): `string` + +Gets the MusicBrainz release group ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify + a particular release group to which this track belongs. + +#### Returns + +`string` + +MusicBrainz ReleaseGroupID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseGroupId**(`value`): `void` + +Sets the MusicBrainz release group ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify + a particular release group to which this track belongs. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseGroupID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseId + +• `get` **musicBrainzReleaseId**(): `string` + +Gets the MusicBrainz release ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a + particular release to which this track belongs. + +#### Returns + +`string` + +MusicBrainz ReleaseID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseId**(`value`): `void` + +Sets the MusicBrainz release ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a + particular release to which this track belongs. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseStatus + +• `get` **musicBrainzReleaseStatus**(): `string` + +Gets the MusicBrainz release status of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a + release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. + +#### Returns + +`string` + +MusicBrainz ReleaseStatus of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseStatus**(`value`): `void` + +Sets the MusicBrainz release status of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a + release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseStatus of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseType + +• `get` **musicBrainzReleaseType**(): `string` + +Gets the MusicBrainz release type of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseType that describes what kind of release + a release is. Common types are: `Single`, `Album`, `EP`, `Compilation`, `Soundtrack, + `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought + must be given when using this field to decide if a particular track "is a compilation". + +#### Returns + +`string` + +MusicBrainz ReleaseType of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseType**(`value`): `void` + +Sets the MusicBrainz release type of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseType that describes what kind of release + a release is. Common types are: `Single`, `Album`, `EP`, `Compilation`, `Soundtrack, + `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought + must be given when using this field to decide if a particular track "is a compilation". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseType of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzTrackId + +• `get` **musicBrainzTrackId**(): `string` + +Gets the MusicBrainz track ID of the media represented by the media represented by the +current instance. + +**`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a + particular track. + +#### Returns + +`string` + +MusicBrainz TrackID of the media represented by the current instance or `undefined` + if no value is present + +• `set` **musicBrainzTrackId**(`value`): `void` + +Sets the MusicBrainz track ID of the media represented by the media represented by the +current instance. + +**`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a + particular track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz TrackID of the media represented by the current instance or `undefined` + if no value is present + +___ + +### musicIpId + +• `get` **musicIpId**(): `string` + +Gets the MusicIP PUID of the media represented by the current instance. + +**`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It + identifies wht this track "sounds like". + +#### Returns + +`string` + +MusicIP PUID of the media represented by the current instance or `undefined` if no + value is present + +• `set` **musicIpId**(`value`): `void` + +Sets the MusicIP PUID of the media represented by the current instance. + +**`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It + identifies wht this track "sounds like". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicIP PUID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicIP PUID of the media represented by the current instance or `undefined` if no + value is present + +___ + +### performers + +• `get` **performers**(): `string`[] + +**`inheritdoc`** + +**`remarks`** Implemented via the `IART` item. + +#### Returns + +`string`[] + +• `set` **performers**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `IART` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string`[] | + +#### Returns + +`void` + +___ + +### performersRole + +• `get` **performersRole**(): `string`[] + +Gets the characters portrayed by an actor for a video or instruments played by a musician +for music. This must match the [performers](movieidtag.md#performers) array (for each person, correspond one/more +role). Several roles for the same artist/actor can be separated with semicolons. For +example: "Bass; Backing Vocals; Vibraphone". + +**`remarks`** It is highly important to match each role to the performers. This means that an entry + in the [performersRole](movieidtag.md#performersrole) array is `undefined` to maintain the relationship between + `performers[i]` and `performersRole[i]`. + +#### Returns + +`string`[] + +Array containing the roles played by the performers in the media described by the + current instance, or an empty array if no value is present. + +• `set` **performersRole**(`value`): `void` + +Sets the characters portrayed by an actor for a video or instruments played by a musician +for music. This must match the [performers](movieidtag.md#performers) array (for each person, correspond one/more +role). Several roles for the same artist/actor can be separated with semicolons. For +example: "Bass; Backing Vocals; Vibraphone". + +**`remarks`** It is highly important to match each role to the performers. This means that an entry + in the [performersRole](movieidtag.md#performersrole) array is `undefined` to maintain the relationship between + `performers[i]` and `performersRole[i]`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Array containing the roles played by the performers in the media described by the + current instance, or an empty array if no value is present. + +___ + +### performersSort + +• `get` **performersSort**(): `string`[] + +Gets the sortable names of the performers or artists who performed in the media described by +the current instance. + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last name. For example, "The Pillows" might be sorted as + "Pillows, The". + +**`see`** performers + +#### Returns + +`string`[] + +Sortable names for the performers who performed in the media described by the + current instance, or an empty array if no value is present. + +• `set` **performersSort**(`value`): `void` + +Gets the sortable names of the performers or artists who performed in the media described by +the current instance. + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last name. For example, "The Pillows" might be sorted as + "Pillows, The". + +**`see`** performers + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the performers who performed in the media described by the + current instance, or an empty array if no value is present. + +___ + +### pictures + +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] + +Gets a collection of pictures associated with the media represented by the current instance. + +**`remarks`** Typically, this value is used to store an album cover or icon to use for the file, but + it is capable of holding any type of image or file, including pictures of the band, the + recording studio, the concert, etc. + +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] + +Array containing a collection of pictures associated with the media represented by + the current instance or an empty array if no pictures are present. + +• `set` **pictures**(`value`): `void` + +Sets a collection of pictures associated with the media represented by the current instance. + +**`remarks`** Typically, this value is used to store an album cover or icon to use for the file, but + it is capable of holding any type of image or file, including pictures of the band, the + recording studio, the concert, etc. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. | + +#### Returns + +`void` + +Array containing a collection of pictures associated with the media represented by + the current instance or an empty array if no pictures are present. + +___ + +### publisher + +• `get` **publisher**(): `string` + +Gets the publisher of the track. + +#### Returns + +`string` + +Publisher of the track or `undefined` if no value is set + +• `set` **publisher**(`value`): `void` + +Sets the publisher of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Publisher of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Publisher of the track or `undefined` if no value is set + +___ + +### remixedBy + +• `get` **remixedBy**(): `string` + +Gets the remixer of the track. + +#### Returns + +`string` + +Remixer of the track or `undefined` if no value is set + +• `set` **remixedBy**(`value`): `void` + +Sets the remixer of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Remixer of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Remixer of the track or `undefined` if no value is set + +___ + +### replayGainAlbumGain + +• `get` **replayGainAlbumGain**(): `number` + +Gets the ReplayGain album gain in dB. + +#### Returns + +`number` + +Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set + +• `set` **replayGainAlbumGain**(`value`): `void` + +Sets the ReplayGain album gain in dB. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set | + +#### Returns + +`void` + +Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set + +___ + +### replayGainAlbumPeak + +• `get` **replayGainAlbumPeak**(): `number` + +Gets the ReplayGain album peak sample. + +#### Returns + +`number` + +Album peak as per the ReplayGain specifications, or `NaN` if no value is set + +• `set` **replayGainAlbumPeak**(`value`): `void` + +Sets the ReplayGain album peak sample. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album peak as per the ReplayGain specifications, or `NaN` if no value is set | + +#### Returns + +`void` + +Album peak as per the ReplayGain specifications, or `NaN` if no value is set + +___ + +### replayGainTrackGain + +• `get` **replayGainTrackGain**(): `number` + +Gets the ReplayGain track gain in dB. + +#### Returns + +`number` + +Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set + +• `set` **replayGainTrackGain**(`value`): `void` + +Sets the ReplayGain track gain in dB. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set | + +#### Returns + +`void` + +Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set + +___ + +### replayGainTrackPeak + +• `get` **replayGainTrackPeak**(): `number` + +Gets the ReplayGain track peak sample. + +#### Returns + +`number` + +Track peak as per the ReplayGain specifications, or `NaN` if no value is set + +• `set` **replayGainTrackPeak**(`value`): `void` + +Sets the ReplayGain track peak sample. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track peak as per the ReplayGain specifications, or `NaN` if no value is set | + +#### Returns + +`void` + +Track peak as per the ReplayGain specifications, or `NaN` if no value is set + +___ + +### stringType + +• `get` **stringType**(): [`StringType`](../enums/stringtype.md) + +Gets the type of string used for parsing and rendering the contents of this tag. + +#### Returns + +[`StringType`](../enums/stringtype.md) + +• `set` **stringType**(`value`): `void` + +Sets the type of string used for parsing and rendering the contents of this tag. + +**`remarks`** The value must be `StringType.Latin1` or `StringType.UTF8`. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | + +#### Returns + +`void` + +___ + +### subtitle + +• `get` **subtitle**(): `string` + +Gets a description, one-line. It represents the tagline of the vide/music. + +**`remarks`** This field gives a nice/short precision to the title, which is typically below the + title on the front cover of the media. For example for "Ocean's 13", this would be + "Revenge is a funny thing". + +#### Returns + +`string` + +Subtitle of the media represented by the current instance or `undefined` if no + value is present + +• `set` **subtitle**(`value`): `void` + +Sets a description, one-line. It represents the tagline of the vide/music. + +**`remarks`** This field gives a nice/short precision to the title, which is typically below the + title on the front cover of the media. For example for "Ocean's 13", this would be + "Revenge is a funny thing". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Subtitle of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Subtitle of the media represented by the current instance or `undefined` if no + value is present + +___ + +### tagTypes + +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) + +**`inheritdoc`** + +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### title + +• `get` **title**(): `string` + +**`inheritdoc`** + +**`remarks`** Implemented via the `TITL` item. + +#### Returns + +`string` + +• `set` **title**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `TITL` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns + +`void` + +___ + +### titleSort + +• `get` **titleSort**(): `string` + +Gets the sortable name for the title of the media described by the current instance. + +**`remarks`** Possibly used to sort compilations or episodic content. + +#### Returns + +`string` + +Sortable name of the media described by the current instance or `undefined` if no + value is present + +• `set` **titleSort**(`value`): `void` + +Sets the sortable name for the title of the media described by the current instance. + +**`remarks`** Possibly used to sort compilations or episodic content. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name of the media described by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Sortable name of the media described by the current instance or `undefined` if no + value is present + +___ + +### track + +• `get` **track**(): `number` + +**`inheritdoc`** + +**`remarks`** Implemented via the `PRT1` item. + +#### Returns + +`number` + +• `set` **track**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `PRT1` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | + +#### Returns + +`void` + +___ + +### trackCount + +• `get` **trackCount**(): `number` + +**`inheritdoc`** + +**`remarks`** Implemented via the `PRT2` item. + +#### Returns + +`number` + +• `set` **trackCount**(`value`): `void` + +**`inheritdoc`** + +**`remarks`** Implemented via the `PRT2` item. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `number` | + +#### Returns + +`void` + +___ + +### year + +• `get` **year**(): `number` + +Gets the year that the media represented by the current instance was recorded. + +**`remarks`** Years greater than 9999 cannot be stored by most tagging formats and will be cleared + if a higher value is set. Some tagging formats store higher precision dates which will + be truncated when this property is set. Format specific implementations are necessary to + access the higher precision values. + +#### Returns + +`number` + +Year that the media represented by the current instance was created or `0` if no + value is present. + +• `set` **year**(`value`): `void` + +Sets the year that the media represented by the current instance was recorded. + +**`remarks`** Years greater than 9999 cannot be stored by most tagging formats and will be cleared + if a higher value is set. Some tagging formats store higher precision dates which will + be truncated when this property is set. Format specific implementations are necessary to + access the higher precision values. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Year that the media represented by the current instance was created or `0` if no value is present. | + +#### Returns + +`void` + +Year that the media represented by the current instance was created or `0` if no + value is present. + +## Methods + +### clear + +▸ **clear**(): `void` + +Clears all values stored in the current instance. + +**`remarks`** The clearing procedure is format specific and should clear all values. + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[clear](rifflisttag.md#clear) + +___ + +### copyTo + +▸ **copyTo**(`target`, `overwrite`): `void` + +Copies the values from the current instance to another [Tag](tag.md), optionally overwriting + existing values. + +**`remarks`** This method only copies the most basic values when copying between different tag + formats. However, if `target` is of the same type as the current instance, + more advanced copying may be done. For example if both `this` and `target` are + [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[copyTo](rifflisttag.md#copyto) + +___ + +### getFirstValueAsString + +▸ `Protected` **getFirstValueAsString**(`id`): `string` + +Gets the first non-falsy string for the specified ID. If the item is not found, `undefined` +is returned. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to lookup in the list. | + +#### Returns + +`string` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[getFirstValueAsString](rifflisttag.md#getfirstvalueasstring) + +___ + +### getValueAsUint + +▸ **getValueAsUint**(`id`): `number` + +Gets the value for a specified item in the current instance as an unsigned integer. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item for which to get the value | + +#### Returns + +`number` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[getValueAsUint](rifflisttag.md#getvalueasuint) + +___ + +### getValues + +▸ **getValues**(`id`): [`ByteVector`](bytevector.md)[] + +Gets the values for a specified item in the current instance. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values | + +#### Returns + +[`ByteVector`](bytevector.md)[] + +#### Inherited from + +[RiffListTag](rifflisttag.md).[getValues](rifflisttag.md#getvalues) + +___ + +### getValuesAsStrings + +▸ **getValuesAsStrings**(`id`): `string`[] + +Gets the values for a specified item in the current instance as strings. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values | + +#### Returns + +`string`[] + +#### Inherited from + +[RiffListTag](rifflisttag.md).[getValuesAsStrings](rifflisttag.md#getvaluesasstrings) + +___ + +### initializeFromData + +▸ `Protected` **initializeFromData**(`data`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[initializeFromData](rifflisttag.md#initializefromdata) + +___ + +### initializeFromEmpty + +▸ `Protected` **initializeFromEmpty**(): `void` + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[initializeFromEmpty](rifflisttag.md#initializefromempty) + +___ + +### initializeFromFile + +▸ `Protected` **initializeFromFile**(`file`, `position`, `length`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `file` | [`File`](file.md) | +| `position` | `number` | +| `length` | `number` | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[initializeFromFile](rifflisttag.md#initializefromfile) + +___ + +### initializeFromList + +▸ `Protected` **initializeFromList**(`fields`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `fields` | [`RiffList`](rifflist.md) | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[initializeFromList](rifflisttag.md#initializefromlist) + +___ + +### removeValue + +▸ **removeValue**(`id`): `void` + +Removed the item with the specified ID from the current instance. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to remove | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[removeValue](rifflisttag.md#removevalue) + +___ + +### render + +▸ **render**(): [`ByteVector`](bytevector.md) + +Renders the current instance as a raw RIFF list. + +#### Returns + +[`ByteVector`](bytevector.md) + +#### Inherited from + +[RiffListTag](rifflisttag.md).[render](rifflisttag.md#render) + +___ + +### renderEnclosed + +▸ **renderEnclosed**(): [`ByteVector`](bytevector.md) + +Renders the current instance, enclosed in a `MID ` item. + +#### Returns + +[`ByteVector`](bytevector.md) + +#### Overrides + +[RiffListTag](rifflisttag.md).[renderEnclosed](rifflisttag.md#renderenclosed) + +___ + +### renderEnclosedInternal + +▸ `Protected` **renderEnclosedInternal**(`id`): [`ByteVector`](bytevector.md) + +Renders the current instance enclosed in an item with a specified ID. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to enclose the current instance in when rendering | + +#### Returns + +[`ByteVector`](bytevector.md) + +#### Inherited from + +[RiffListTag](rifflisttag.md).[renderEnclosedInternal](rifflisttag.md#renderenclosedinternal) + +___ + +### setInfoTag + +▸ **setInfoTag**(): `void` + +Set the tags that represent the tagger software (node-taglib-sharp) itself. + +**`remarks`** This is typically a method to call just before saving a tag. + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[setInfoTag](rifflisttag.md#setinfotag) + +___ + +### setValueFromUint + +▸ **setValueFromUint**(`id`, `value`): `void` + +Sets the value for a specified item in the current instance using an unsigned integer. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `value` | `number` | Value to store in the specified item, must be an unsigned 32-bit integer | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[setValueFromUint](rifflisttag.md#setvaluefromuint) + +___ + +### setValues + +▸ **setValues**(`id`, ...`values`): `void` + +Sets the value for a specified item in the current instance + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `...values` | [`ByteVector`](bytevector.md)[] | Values to store in the specified item | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[setValues](rifflisttag.md#setvalues) + +___ + +### setValuesFromStrings + +▸ **setValuesFromStrings**(`id`, ...`values`): `void` + +Sets the value for a specified item in the current instance using a list of strings. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `...values` | `string`[] | Values to store in the specified item | + +#### Returns + +`void` + +#### Inherited from + +[RiffListTag](rifflisttag.md).[setValuesFromStrings](rifflisttag.md#setvaluesfromstrings) + +___ + +### firstInGroup + +▸ `Static` `Protected` **firstInGroup**(`group`): `string` + +Gets the first string in an array. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | + +#### Returns + +`string` + +First string contained in `group` or `undefined` if the array is + `undefined` or empty + +#### Inherited from + +[RiffListTag](rifflisttag.md).[firstInGroup](rifflisttag.md#firstingroup) + +___ + +### fromData + +▸ `Static` **fromData**(`data`): [`MovieIdTag`](movieidtag.md) + +Constructs and initializes a new instance by reading the contents of a raw RIFF list stored +in a [ByteVector](bytevector.md) object. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Object containing the raw RIFF list | + +#### Returns + +[`MovieIdTag`](movieidtag.md) + +___ + +### fromEmpty + +▸ `Static` **fromEmpty**(): [`MovieIdTag`](movieidtag.md) + +Constructs and initializes a new, empty instance. + +#### Returns + +[`MovieIdTag`](movieidtag.md) + +___ + +### fromFile + +▸ `Static` **fromFile**(`file`, `position`, `length`): [`MovieIdTag`](movieidtag.md) + +Constructs and initializes a new instance by reading the contents of a raw RIFF list stored +a file. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File containing the raw RIFF list | +| `position` | `number` | Index into the file where the RIFF list begins. Must be a safe, unsigned int | +| `length` | `number` | Number of bytes to read | + +#### Returns + +[`MovieIdTag`](movieidtag.md) + +___ + +### isFalsyOrLikeEmpty + +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` + +Checks if a value is falsy or empty. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | + +#### Returns + +`boolean` + +If `value` is a string, `true` is returned if the value is falsy or all + whitespace, `false` is returned otherwise. If `value` is an array of strings, + the array must be falsy or all elements must be falsy or whitespace to return `true`. + +#### Inherited from + +[RiffListTag](rifflisttag.md).[isFalsyOrLikeEmpty](rifflisttag.md#isfalsyorlikeempty) + +___ + +### joinGroup + +▸ `Static` `Protected` **joinGroup**(`group`): `string` + +Joins an array of string into a single, semicolon and space separated string. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | + +#### Returns + +`string` + +A semicolon and space separated string containing the values from `group` + or undefined if the array is `undefined` or empty. + +#### Inherited from + +[RiffListTag](rifflisttag.md).[joinGroup](rifflisttag.md#joingroup) diff --git a/docs/classes/mpegaudiofile.md b/docs/classes/mpegaudiofile.md index bf69dd29..0ed6980e 100644 --- a/docs/classes/mpegaudiofile.md +++ b/docs/classes/mpegaudiofile.md @@ -12,9 +12,9 @@ MPEG-1, MPEG-2, and MPEG-2.5 audio files. ## Hierarchy -* *NonContainerFile* +- `NonContainerFile` - ↳ **MpegAudioFile** + ↳ **`MpegAudioFile`** ## Table of contents @@ -32,7 +32,6 @@ MPEG-1, MPEG-2, and MPEG-2.5 audio files. ### Accessors -- [bufferSize](mpegaudiofile.md#buffersize) - [corruptionReasons](mpegaudiofile.md#corruptionreasons) - [endTag](mpegaudiofile.md#endtag) - [fileAbstraction](mpegaudiofile.md#fileabstraction) @@ -50,6 +49,7 @@ MPEG-1, MPEG-2, and MPEG-2.5 audio files. - [tag](mpegaudiofile.md#tag) - [tagTypes](mpegaudiofile.md#tagtypes) - [tagTypesOnDisk](mpegaudiofile.md#tagtypesondisk) +- [bufferSize](mpegaudiofile.md#buffersize) ### Methods @@ -81,284 +81,356 @@ MPEG-1, MPEG-2, and MPEG-2.5 audio files. ### constructor -\+ **new MpegAudioFile**(`file`: *string* \| IFileAbstraction, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*MpegAudioFile*](mpegaudiofile.md) +• **new MpegAudioFile**(`file`, `propertiesStyle`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`file` | *string* \| IFileAbstraction | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `file` | `string` \| `IFileAbstraction` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*MpegAudioFile*](mpegaudiofile.md) +#### Overrides + +NonContainerFile.constructor ## Properties ### \_fileAbstraction -• `Protected` **\_fileAbstraction**: IFileAbstraction +• `Protected` **\_fileAbstraction**: `IFileAbstraction` + +#### Inherited from + +NonContainerFile.\_fileAbstraction ___ ### \_fileStream -• `Protected` **\_fileStream**: IStream +• `Protected` **\_fileStream**: `IStream` + +#### Inherited from + +NonContainerFile.\_fileStream ___ ### \_invariantEndPosition -• `Protected` **\_invariantEndPosition**: *number*= -1 +• `Protected` **\_invariantEndPosition**: `number` = `-1` + +#### Inherited from + +NonContainerFile.\_invariantEndPosition ___ ### \_invariantStartPosition -• `Protected` **\_invariantStartPosition**: *number*= -1 - -___ +• `Protected` **\_invariantStartPosition**: `number` = `-1` -### \_tagTypesOnDisk +#### Inherited from -• `Protected` **\_tagTypesOnDisk**: [*TagTypes*](../enums/tagtypes.md) +NonContainerFile.\_invariantStartPosition -## Accessors +___ -### bufferSize +### \_tagTypesOnDisk -• **bufferSize**(): *number* +• `Protected` **\_tagTypesOnDisk**: [`TagTypes`](../enums/tagtypes.md) -Gets the buffer size to use when reading large blocks of data +#### Inherited from -**Returns:** *number* +NonContainerFile.\_tagTypesOnDisk -___ +## Accessors ### corruptionReasons -• **corruptionReasons**(): *string*[] +• `get` **corruptionReasons**(): `string`[] Reasons for which this file is marked as corrupt. -**Returns:** *string*[] +#### Returns + +`string`[] ___ ### endTag -• **endTag**(): *default* +• `Protected` `get` **endTag**(): `default` Gets the collection of tags appearing at the end of the file. -**Returns:** *default* +#### Returns + +`default` ___ ### fileAbstraction -• **fileAbstraction**(): IFileAbstraction +• `get` **fileAbstraction**(): `IFileAbstraction` Gets the {@link IFileAbstraction} representing the file. -**Returns:** IFileAbstraction +#### Returns + +`IFileAbstraction` ___ ### invariantEndPosition -• **invariantEndPosition**(): *number* +• `get` **invariantEndPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance ends. If the value could not be determined, `-1` is returned; -**Returns:** *number* +#### Returns + +`number` ___ ### invariantStartPosition -• **invariantStartPosition**(): *number* +• `get` **invariantStartPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance begins. If the value could not be determined, `-1` is returned. -**Returns:** *number* +#### Returns + +`number` ___ ### isPossiblyCorrupt -• **isPossiblyCorrupt**(): *boolean* +• `get` **isPossiblyCorrupt**(): `boolean` Indicates whether or not this file may be corrupt. Files with unknown corruptions should not be written. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isWritable -• **isWritable**(): *boolean* +• `get` **isWritable**(): `boolean` Indicates whether or not tags can be written back to the current file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### length -• **length**(): *number* +• `get` **length**(): `number` Gets the length of the file represented by the current instance. Value will be 0 if the file is not open for reading; -**Returns:** *number* +#### Returns + +`number` ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets the MimeType of the file as determined during creation of the instance. -**Returns:** *string* +#### Returns + +`string` ___ ### mode -• **mode**(): [*FileAccessMode*](../enums/fileaccessmode.md) +• `get` **mode**(): [`FileAccessMode`](../enums/fileaccessmode.md) Gets the file access mode in use by the current instance. -**Returns:** [*FileAccessMode*](../enums/fileaccessmode.md) +#### Returns + +[`FileAccessMode`](../enums/fileaccessmode.md) -• **mode**(`val`: [*FileAccessMode*](../enums/fileaccessmode.md)): *void* +• `set` **mode**(`val`): `void` Sets the file access mode in use by the current instance. Changing the value will cause the stream currently in use to be closed, except when a change is made from [FileAccessMode.Write](../enums/fileaccessmode.md#write) to [FileAccessMode.Read](../enums/fileaccessmode.md#read) which has no effect. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`val` | [*FileAccessMode*](../enums/fileaccessmode.md) | File access mode to change to | +| Name | Type | Description | +| :------ | :------ | :------ | +| `val` | [`FileAccessMode`](../enums/fileaccessmode.md) | File access mode to change to | -**Returns:** *void* +#### Returns + +`void` ___ ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the file as stored in its file abstraction. -**Returns:** *string* +#### Returns + +`string` ___ ### position -• **position**(): *number* +• `get` **position**(): `number` Gets the seek position in the internal stream used by the current instance. Value will be 0 if the file is not open for reading -**Returns:** *number* +#### Returns + +`number` ___ ### properties -• **properties**(): [*Properties*](properties.md) +• `get` **properties**(): [`Properties`](properties.md) Gets the media properties of the file represented by the current instance. -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) ___ ### startTag -• **startTag**(): *default* +• `Protected` `get` **startTag**(): `default` Gets the collection of tags appearing at the start of the file. -**Returns:** *default* +#### Returns + +`default` ___ ### tag -• **tag**(): *default* +• `get` **tag**(): `default` Gets an abstract representation of all tags stored in the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### tagTypesOnDisk -• **tagTypesOnDisk**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypesOnDisk**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the physical file represented by the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### bufferSize + +• `Static` `get` **bufferSize**(): `number` + +Gets the buffer size to use when reading large blocks of data + +#### Returns + +`number` ## Methods ### dispose -▸ **dispose**(): *void* +▸ **dispose**(): `void` Dispose the current instance. Equivalent to setting the mode to closed. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.dispose ___ ### find -▸ **find**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `before?`: [*ByteVector*](bytevector.md)): *number* +▸ **find**(`pattern`, `startPosition?`, `before?`): `number` Searches forward through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` is not provided or `startPosition` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be smaller than the | +| `startPosition` | `number` | `0` | Seek position to start searching. Must be positive, safe integer. | +| `before?` | [`ByteVector`](bytevector.md) | `undefined` | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be smaller than the | -`startPosition` | *number* | 0 | Seek position to start searching. Must be positive, safe integer. | -`before?` | [*ByteVector*](bytevector.md) | - | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | +#### Returns -**Returns:** *number* +`number` Index at which the value was found. If not found, `-1` is returned. +#### Inherited from + +NonContainerFile.find + ___ ### getTag -▸ **getTag**(`type`: [*TagTypes*](../enums/tagtypes.md), `create`: *boolean*): [*Tag*](tag.md) +▸ **getTag**(`type`, `create`): [`Tag`](tag.md) Gets a tag of a specified type from the current instance, optionally creating a new tag if possible. @@ -366,23 +438,29 @@ If an [Id3v2Tag](id3v2tag.md) is added to the current instance, it will be place the file. On the other hand, [Id3v1Tag](id3v1tag.md) and [ApeTag](apetag.md) will be added to the end of the file. All other tag types will be ignored. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`TagTypes`](../enums/tagtypes.md) | Type of tag to create | +| `create` | `boolean` | Whether or not to try and create the tag if one is not found | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*TagTypes*](../enums/tagtypes.md) | Type of tag to create | -`create` | *boolean* | Whether or not to try and create the tag if one is not found | +#### Returns -**Returns:** [*Tag*](tag.md) +[`Tag`](tag.md) Tag Tag that was found in or added to the current instance. If no matching tag was found and none was created, `undefined` is returned. +#### Overrides + +NonContainerFile.getTag + ___ ### insert -▸ **insert**(`data`: [*ByteVector*](bytevector.md), `start`: *number*, `replace?`: *number*): *void* +▸ **insert**(`data`, `start`, `replace?`): `void` Inserts a specified block of data into the file represented by the current instance, at a specified location, replacing a specified number of bytes. @@ -390,70 +468,94 @@ specified location, replacing a specified number of bytes. **`throws`** Error Thrown when: 1) data is falsey, 2) start is not a safe, positive number, or 3) replace is not a safe, positive number -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | `undefined` | Data to insert into the file. | +| `start` | `number` | `undefined` | Index into the file at which to insert the data. Must be safe positive integer. | +| `replace` | `number` | `0` | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | + +#### Returns + +`void` -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | - | Data to insert into the file. | -`start` | *number* | - | Index into the file at which to insert the data. Must be safe positive integer. | -`replace` | *number* | 0 | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | +#### Inherited from -**Returns:** *void* +NonContainerFile.insert ___ ### markAsCorrupt -▸ **markAsCorrupt**(`reason`: *string*): *void* +▸ **markAsCorrupt**(`reason`): `void` Mark the current instance as corrupt. NOTE: Not intended to be used outside of this library. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`reason` | *string* | Reason why this file is considered to be corrupt | +| Name | Type | Description | +| :------ | :------ | :------ | +| `reason` | `string` | Reason why this file is considered to be corrupt | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.markAsCorrupt ___ ### preSave -▸ `Protected`**preSave**(): *void* +▸ `Protected` **preSave**(): `void` Prepares to save the file. This must be called at the beginning of every File.save() method. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.preSave ___ ### rFind -▸ **rFind**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `after?`: [*ByteVector*](bytevector.md)): *number* +▸ **rFind**(`pattern`, `startPosition?`, `after?`): `number` Searched backwards through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` was not provided or if `startPosition` is not a safe, positive integer. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be shorter than the [bufferSize](mpegaudiofile.md#buffersize) | -`startPosition` | *number* | 0 | Seek position from which to start searching. | -`after?` | [*ByteVector*](bytevector.md) | - | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be shorter than the [bufferSize](mpegaudiofile.md#buffersize) | +| `startPosition` | `number` | `0` | Seek position from which to start searching. | +| `after?` | [`ByteVector`](bytevector.md) | `undefined` | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | -**Returns:** *number* +#### Returns + +`number` Index at which the value wa found. If not found, `-1` is returned. +#### Inherited from + +NonContainerFile.rFind + ___ ### readBlock -▸ **readBlock**(`length`: *number*): [*ByteVector*](bytevector.md) +▸ **readBlock**(`length`): [`ByteVector`](bytevector.md) Reads a specified number of bytes at the current seek position from the current position. This method reads the block of data at the current seek position. To change the seek @@ -461,147 +563,201 @@ position, use [File.seek](file.md#seek). **`throws`** Error Thrown when `length` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to read. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to read. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Object containing the data read from the current instance. +#### Inherited from + +NonContainerFile.readBlock + ___ ### readEnd -▸ `Protected`**readEnd**(`_end`: *number*, `_propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **readEnd**(`_end`, `_propertiesStyle`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `_end` | `number` | +| `_propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | + +#### Returns -#### Parameters: +`void` -Name | Type | ------- | ------ | -`_end` | *number* | -`_propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +#### Overrides -**Returns:** *void* +NonContainerFile.readEnd ___ ### readProperties -▸ `Protected`**readProperties**(`start`: *number*, `end`: *number*, `_propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*Properties*](properties.md) +▸ `Protected` **readProperties**(`start`, `end`, `_propertiesStyle`): [`Properties`](properties.md) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`start` | *number* | -`end` | *number* | -`_propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `start` | `number` | +| `end` | `number` | +| `_propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) + +#### Overrides + +NonContainerFile.readProperties ___ ### readStart -▸ `Protected`**readStart**(`start`: *number*, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **readStart**(`start`, `propertiesStyle`): `void` + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `start` | `number` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -Name | Type | ------- | ------ | -`start` | *number* | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +#### Returns -**Returns:** *void* +`void` + +#### Overrides + +NonContainerFile.readStart ___ ### removeBlock -▸ **removeBlock**(`start`: *number*, `length`: *number*): *void* +▸ **removeBlock**(`start`, `length`): `void` Removes a specified block of data from the file represented by the current instance. **`throws`** Error thrown if 1) start is not a safe, positive integer or 2) length must be a safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `start` | `number` | Index into the file at which to remove data. Must be safe, positive integer. | +| `length` | `number` | Number of bytes to remove. Must be a safe integer. | -Name | Type | Description | ------- | ------ | ------ | -`start` | *number* | Index into the file at which to remove data. Must be safe, positive integer. | -`length` | *number* | Number of bytes to remove. Must be a safe integer. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.removeBlock ___ ### removeTags -▸ **removeTags**(`types`: [*TagTypes*](../enums/tagtypes.md)): *void* +▸ **removeTags**(`types`): `void` + +**`inheritdoc`** + +#### Parameters -**`inheritdoc`** +| Name | Type | +| :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`types` | [*TagTypes*](../enums/tagtypes.md) | +`void` -**Returns:** *void* +#### Inherited from + +NonContainerFile.removeTags ___ ### save -▸ **save**(): *void* +▸ **save**(): `void` + +**`inheritdoc`** + +#### Returns -**`inheritdoc`** +`void` -**Returns:** *void* +#### Inherited from + +NonContainerFile.save ___ ### seek -▸ **seek**(`offset`: *number*, `origin?`: SeekOrigin): *void* +▸ **seek**(`offset`, `origin?`): `void` Moves the read/write pointer to a specified offset in the current instance, relative to a specified origin. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `offset` | `number` | Byte offset to seek to. Must be a safe, positive integer. | +| `origin` | `SeekOrigin` | Origin from which to seek | + +#### Returns + +`void` -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`offset` | *number* | - | Byte offset to seek to. Must be a safe, positive integer. | -`origin` | SeekOrigin | ... | Origin from which to seek | +#### Inherited from -**Returns:** *void* +NonContainerFile.seek ___ ### truncate -▸ `Protected`**truncate**(`length`: *number*): *void* +▸ `Protected` **truncate**(`length`): `void` Resizes the current instance to a specific number of bytes. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to resize the file to, must be a safe, positive integer. | + +#### Returns + +`void` -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to resize the file to, must be a safe, positive integer. | +#### Inherited from -**Returns:** *void* +NonContainerFile.truncate ___ ### writeBlock -▸ **writeBlock**(`data`: [*ByteVector*](bytevector.md)): *void* +▸ **writeBlock**(`data`): `void` Writes a block of data to the file represented by the current instance at the current seek position. This will overwrite any existing data at the seek position and append new data to @@ -609,119 +765,161 @@ the file if writing past the current end. **`throws`** Error Thrown when `data` is not provided. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing data to the current instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing data to the current instance. | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.writeBlock ___ ### addFileType -▸ `Static`**addFileType**(`mimeType`: *string*, `constructor`: [*FileTypeConstructor*](../modules.md#filetypeconstructor), `override?`: *boolean*): *void* +▸ `Static` **addFileType**(`mimeType`, `constructor`, `override?`): `void` Registers the constructor for a subclass of [File](file.md) with the MimeType it is associated with. Optionally, the MimeType can be forcefully overridden if it was already registered. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mimeType` | `string` | `undefined` | MimeType to register this subclass constructor to. | +| `constructor` | [`FileTypeConstructor`](../modules.md#filetypeconstructor) | `undefined` | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | +| `override` | `boolean` | `false` | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mimeType` | *string* | - | MimeType to register this subclass constructor to. | -`constructor` | [*FileTypeConstructor*](../modules.md#filetypeconstructor) | - | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | -`override` | *boolean* | false | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.addFileType ___ ### addFileTypeResolver -▸ `Static`**addFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **addFileTypeResolver**(`resolver`): `void` Registers a [FileTypeResolver](../modules.md#filetyperesolver) to the front of the list of file type resolvers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | -Name | Type | Description | ------- | ------ | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.addFileTypeResolver ___ ### createFromAbstraction -▸ `Static`**createFromAbstraction**(`abstraction`: IFileAbstraction, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromAbstraction**(`abstraction`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of a [File](file.md) subclass for a specified file abstraction, MimeType, and property read style. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`abstraction` | IFileAbstraction | - | Object to use when reading/writing from the current instance. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | Object to use when reading/writing from the current instance. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | -**Returns:** [*File*](file.md) +#### Returns + +[`File`](file.md) New instance of [File](file.md) as read from the specified abstraction. +#### Inherited from + +NonContainerFile.createFromAbstraction + ___ ### createFromPath -▸ `Static`**createFromPath**(`filePath`: *string*, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromPath**(`filePath`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of [File](file.md) subclass for a specified file path, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to read/write. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`filePath` | *string* | - | Path to the file to read/write. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified path. +#### Inherited from + +NonContainerFile.createFromPath + ___ ### removeFileType -▸ `Static`**removeFileType**(`mimeType`: *string*): *void* +▸ `Static` **removeFileType**(`mimeType`): `void` Used for removing a file type constructor during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `mimeType` | `string` | + +#### Returns + +`void` -Name | Type | ------- | ------ | -`mimeType` | *string* | +#### Inherited from -**Returns:** *void* +NonContainerFile.removeFileType ___ ### removeFileTypeResolver -▸ `Static`**removeFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **removeFileTypeResolver**(`resolver`): `void` Used for removing a file type resolver during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | + +#### Returns + +`void` -Name | Type | ------- | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | +#### Inherited from -**Returns:** *void* +NonContainerFile.removeFileTypeResolver diff --git a/docs/classes/mpegaudioheader.md b/docs/classes/mpegaudioheader.md index 4dcaa077..103d84a3 100644 --- a/docs/classes/mpegaudioheader.md +++ b/docs/classes/mpegaudioheader.md @@ -5,13 +5,9 @@ Provides information about an MPEG audio stream. For more information and definition of the header, see http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm -## Hierarchy - -* **MpegAudioHeader** - ## Implements -* [*IAudioCodec*](../interfaces/iaudiocodec.md) +- [`IAudioCodec`](../interfaces/iaudiocodec.md) ## Table of contents @@ -49,262 +45,314 @@ header, see http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm ### Unknown -▪ `Readonly` `Static` **Unknown**: [*MpegAudioHeader*](mpegaudioheader.md) +▪ `Static` `Readonly` **Unknown**: [`MpegAudioHeader`](mpegaudioheader.md) ## Accessors ### audioBitrate -• **audioBitrate**(): *number* +• `get` **audioBitrate**(): `number` Bitrate of the audio in kilobits per second represented by the current instance. -**Returns:** *number* +#### Returns + +`number` + +#### Implementation of -Implementation of: [IAudioCodec](../interfaces/iaudiocodec.md).[audioBitrate](../interfaces/iaudiocodec.md#audiobitrate) +[IAudioCodec](../interfaces/iaudiocodec.md).[audioBitrate](../interfaces/iaudiocodec.md#audiobitrate) ___ ### audioChannels -• **audioChannels**(): *number* +• `get` **audioChannels**(): `number` Number of channels in the audio represented by the current instance. -**Returns:** *number* +#### Returns -Implementation of: [IAudioCodec](../interfaces/iaudiocodec.md).[audioChannels](../interfaces/iaudiocodec.md#audiochannels) +`number` + +#### Implementation of + +[IAudioCodec](../interfaces/iaudiocodec.md).[audioChannels](../interfaces/iaudiocodec.md#audiochannels) ___ ### audioFrameLength -• **audioFrameLength**(): *number* +• `get` **audioFrameLength**(): `number` Gets the length of the frames in the audio represented by the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### audioLayer -• **audioLayer**(): *number* +• `get` **audioLayer**(): `number` Gets the MPEG audio layer used to encode the audio represented by the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### audioSampleRate -• **audioSampleRate**(): *number* +• `get` **audioSampleRate**(): `number` Sample rate of the audio represented by the current instance. -**Returns:** *number* +#### Returns + +`number` -Implementation of: [IAudioCodec](../interfaces/iaudiocodec.md).[audioSampleRate](../interfaces/iaudiocodec.md#audiosamplerate) +#### Implementation of + +[IAudioCodec](../interfaces/iaudiocodec.md).[audioSampleRate](../interfaces/iaudiocodec.md#audiosamplerate) ___ ### channelMode -• **channelMode**(): [*MpegAudioChannelMode*](../enums/mpegaudiochannelmode.md) +• `get` **channelMode**(): [`MpegAudioChannelMode`](../enums/mpegaudiochannelmode.md) Gets the MPEG audio channel mode of the audio represented by the current instance. -**Returns:** [*MpegAudioChannelMode*](../enums/mpegaudiochannelmode.md) +#### Returns + +[`MpegAudioChannelMode`](../enums/mpegaudiochannelmode.md) ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets a text description of the media represented by the current instance. -**Returns:** *string* +#### Returns -Implementation of: [IAudioCodec](../interfaces/iaudiocodec.md).[description](../interfaces/iaudiocodec.md#description) +`string` + +#### Implementation of + +[IAudioCodec](../interfaces/iaudiocodec.md).[description](../interfaces/iaudiocodec.md#description) ___ ### durationMilliseconds -• **durationMilliseconds**(): *number* +• `get` **durationMilliseconds**(): `number` Duration of the media in milliseconds represented by the current instance. -**Returns:** *number* +#### Returns + +`number` -Implementation of: [IAudioCodec](../interfaces/iaudiocodec.md).[durationMilliseconds](../interfaces/iaudiocodec.md#durationmilliseconds) +#### Implementation of + +[IAudioCodec](../interfaces/iaudiocodec.md).[durationMilliseconds](../interfaces/iaudiocodec.md#durationmilliseconds) ___ ### isCopyrighted -• **isCopyrighted**(): *boolean* +• `get` **isCopyrighted**(): `boolean` Whether or not the current audio is copyrighted. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isOriginal -• **isOriginal**(): *boolean* +• `get` **isOriginal**(): `boolean` Whether or not the current audio is original. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isPadded -• **isPadded**(): *boolean* +• `get` **isPadded**(): `boolean` Whether or not the audio represented by the current instance is padded. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isProtected -• **isProtected**(): *boolean* +• `get` **isProtected**(): `boolean` Gets whether the audio represented by the current instance is protected by CRC. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### mediaTypes -• **mediaTypes**(): [*MediaTypes*](../enums/mediatypes.md) +• `get` **mediaTypes**(): [`MediaTypes`](../enums/mediatypes.md) Types of media represented by the current instance, bitwise combined. -**Returns:** [*MediaTypes*](../enums/mediatypes.md) +#### Returns + +[`MediaTypes`](../enums/mediatypes.md) + +#### Implementation of -Implementation of: [IAudioCodec](../interfaces/iaudiocodec.md).[mediaTypes](../interfaces/iaudiocodec.md#mediatypes) +[IAudioCodec](../interfaces/iaudiocodec.md).[mediaTypes](../interfaces/iaudiocodec.md#mediatypes) ___ ### streamLength -• **streamLength**(`value`: *number*): *void* +• `set` **streamLength**(`value`): `void` Sets the length of the audio stream represented by the current instance. If this value has not been set, [durationMilliseconds](mpegaudioheader.md#durationmilliseconds) will return an incorrect value. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *number* | +| Name | Type | +| :------ | :------ | +| `value` | `number` | -**Returns:** *void* +#### Returns + +`void` ___ ### vbriHeader -• **vbriHeader**(): [*MpegVbriHeader*](mpegvbriheader.md) +• `get` **vbriHeader**(): [`MpegVbriHeader`](mpegvbriheader.md) Gets the VBRI header found in the audio. {@link VbriHeader.unknown} is returned if no header was found. -**Returns:** [*MpegVbriHeader*](mpegvbriheader.md) +#### Returns + +[`MpegVbriHeader`](mpegvbriheader.md) ___ ### version -• **version**(): [*MpegVersion*](../enums/mpegversion.md) +• `get` **version**(): [`MpegVersion`](../enums/mpegversion.md) Gets the MPEG version used to encode the audio represented by the current instance. -**Returns:** [*MpegVersion*](../enums/mpegversion.md) +#### Returns + +[`MpegVersion`](../enums/mpegversion.md) ___ ### xingHeader -• **xingHeader**(): [*MpegXingHeader*](mpegxingheader.md) +• `get` **xingHeader**(): [`MpegXingHeader`](mpegxingheader.md) Gets the Xing header found in the audio. {@link XingHeader.unknown} is returned if no header was found. -**Returns:** [*MpegXingHeader*](mpegxingheader.md) +#### Returns + +[`MpegXingHeader`](mpegxingheader.md) ## Methods ### find -▸ `Static`**find**(`file`: [*File*](file.md), `position`: *number*, `length?`: *number*): *object* +▸ `Static` **find**(`file`, `position`, `length?`): `Object` Searches for an audio header in a file starting at a specified position and searching through a specified number of bytes. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`file` | [*File*](file.md) | - | File to search | -`position` | *number* | - | Position in `file` at which to start searching | -`length` | *number* | -1 | Maximum number of bytes to search before giving up. Defaults to `-1` to have no maximum | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `file` | [`File`](file.md) | `undefined` | File to search | +| `position` | `number` | `undefined` | Position in `file` at which to start searching | +| `length` | `number` | `-1` | Maximum number of bytes to search before giving up. Defaults to `-1` to have no maximum | -**Returns:** *object* +#### Returns -Name | Type | ------- | ------ | -`header` | [*MpegAudioHeader*](mpegaudioheader.md) | -`success` | *boolean* | +`Object` * `header` - the header that was found or [MpegAudioHeader.Unknown](mpegaudioheader.md#unknown) if a header was not found * `success` - whether or not a header was found +| Name | Type | +| :------ | :------ | +| `header` | [`MpegAudioHeader`](mpegaudioheader.md) | +| `success` | `boolean` | + ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md), `file`: [*File*](file.md), `position`: *number*): [*MpegAudioHeader*](mpegaudioheader.md) +▸ `Static` **fromData**(`data`, `file`, `position`): [`MpegAudioHeader`](mpegaudioheader.md) Constructs and initializes a new instance by reading its contents from a data [ByteVector](bytevector.md) and its Xing header from the appropriate location in the specified file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | The header data to read | +| `file` | [`File`](file.md) | File to read the Xing/VBRI header from | +| `position` | `number` | Position into `file` where the header begins, must be a positive 8-bit integer. | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | The header data to read | -`file` | [*File*](file.md) | File to read the Xing/VBRI header from | -`position` | *number* | Position into `file` where the header begins, must be a positive 8-bit integer. | +#### Returns -**Returns:** [*MpegAudioHeader*](mpegaudioheader.md) +[`MpegAudioHeader`](mpegaudioheader.md) ___ ### fromInfo -▸ `Static`**fromInfo**(`flags`: *number*, `streamLength`: *number*, `xingHeader`: [*MpegXingHeader*](mpegxingheader.md), `vbriHeader`: [*MpegVbriHeader*](mpegvbriheader.md)): [*MpegAudioHeader*](mpegaudioheader.md) +▸ `Static` **fromInfo**(`flags`, `streamLength`, `xingHeader`, `vbriHeader`): [`MpegAudioHeader`](mpegaudioheader.md) Constructs and initializes a new instance by populating it with specified values. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `flags` | `number` | Flags for the new instance | +| `streamLength` | `number` | Stream length of the new instance | +| `xingHeader` | [`MpegXingHeader`](mpegxingheader.md) | Xing header associated with the new instance | +| `vbriHeader` | [`MpegVbriHeader`](mpegvbriheader.md) | VBRI header associated with the new instance | -Name | Type | Description | ------- | ------ | ------ | -`flags` | *number* | Flags for the new instance | -`streamLength` | *number* | Stream length of the new instance | -`xingHeader` | [*MpegXingHeader*](mpegxingheader.md) | Xing header associated with the new instance | -`vbriHeader` | [*MpegVbriHeader*](mpegvbriheader.md) | VBRI header associated with the new instance | +#### Returns -**Returns:** [*MpegAudioHeader*](mpegaudioheader.md) +[`MpegAudioHeader`](mpegaudioheader.md) diff --git a/docs/classes/mpegfile.md b/docs/classes/mpegfile.md index 27b2b3da..758c4849 100644 --- a/docs/classes/mpegfile.md +++ b/docs/classes/mpegfile.md @@ -12,9 +12,9 @@ MPEG-1, MPEG-2, and MPEG-2.5 video files. ## Hierarchy -* *NonContainerFile* +- `NonContainerFile` - ↳ **MpegFile** + ↳ **`MpegFile`** ## Table of contents @@ -32,7 +32,6 @@ MPEG-1, MPEG-2, and MPEG-2.5 video files. ### Accessors -- [bufferSize](mpegfile.md#buffersize) - [corruptionReasons](mpegfile.md#corruptionreasons) - [endTag](mpegfile.md#endtag) - [fileAbstraction](mpegfile.md#fileabstraction) @@ -50,6 +49,7 @@ MPEG-1, MPEG-2, and MPEG-2.5 video files. - [tag](mpegfile.md#tag) - [tagTypes](mpegfile.md#tagtypes) - [tagTypesOnDisk](mpegfile.md#tagtypesondisk) +- [bufferSize](mpegfile.md#buffersize) ### Methods @@ -81,284 +81,356 @@ MPEG-1, MPEG-2, and MPEG-2.5 video files. ### constructor -\+ **new MpegFile**(`file`: *string* \| IFileAbstraction, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*MpegFile*](mpegfile.md) +• **new MpegFile**(`file`, `propertiesStyle`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`file` | *string* \| IFileAbstraction | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `file` | `string` \| `IFileAbstraction` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*MpegFile*](mpegfile.md) +#### Overrides + +NonContainerFile.constructor ## Properties ### \_fileAbstraction -• `Protected` **\_fileAbstraction**: IFileAbstraction +• `Protected` **\_fileAbstraction**: `IFileAbstraction` + +#### Inherited from + +NonContainerFile.\_fileAbstraction ___ ### \_fileStream -• `Protected` **\_fileStream**: IStream +• `Protected` **\_fileStream**: `IStream` + +#### Inherited from + +NonContainerFile.\_fileStream ___ ### \_invariantEndPosition -• `Protected` **\_invariantEndPosition**: *number*= -1 +• `Protected` **\_invariantEndPosition**: `number` = `-1` + +#### Inherited from + +NonContainerFile.\_invariantEndPosition ___ ### \_invariantStartPosition -• `Protected` **\_invariantStartPosition**: *number*= -1 - -___ +• `Protected` **\_invariantStartPosition**: `number` = `-1` -### \_tagTypesOnDisk +#### Inherited from -• `Protected` **\_tagTypesOnDisk**: [*TagTypes*](../enums/tagtypes.md) +NonContainerFile.\_invariantStartPosition -## Accessors +___ -### bufferSize +### \_tagTypesOnDisk -• **bufferSize**(): *number* +• `Protected` **\_tagTypesOnDisk**: [`TagTypes`](../enums/tagtypes.md) -Gets the buffer size to use when reading large blocks of data +#### Inherited from -**Returns:** *number* +NonContainerFile.\_tagTypesOnDisk -___ +## Accessors ### corruptionReasons -• **corruptionReasons**(): *string*[] +• `get` **corruptionReasons**(): `string`[] Reasons for which this file is marked as corrupt. -**Returns:** *string*[] +#### Returns + +`string`[] ___ ### endTag -• **endTag**(): *default* +• `Protected` `get` **endTag**(): `default` Gets the collection of tags appearing at the end of the file. -**Returns:** *default* +#### Returns + +`default` ___ ### fileAbstraction -• **fileAbstraction**(): IFileAbstraction +• `get` **fileAbstraction**(): `IFileAbstraction` Gets the {@link IFileAbstraction} representing the file. -**Returns:** IFileAbstraction +#### Returns + +`IFileAbstraction` ___ ### invariantEndPosition -• **invariantEndPosition**(): *number* +• `get` **invariantEndPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance ends. If the value could not be determined, `-1` is returned; -**Returns:** *number* +#### Returns + +`number` ___ ### invariantStartPosition -• **invariantStartPosition**(): *number* +• `get` **invariantStartPosition**(): `number` Gets the position at which the invariant (media) portion of the current instance begins. If the value could not be determined, `-1` is returned. -**Returns:** *number* +#### Returns + +`number` ___ ### isPossiblyCorrupt -• **isPossiblyCorrupt**(): *boolean* +• `get` **isPossiblyCorrupt**(): `boolean` Indicates whether or not this file may be corrupt. Files with unknown corruptions should not be written. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### isWritable -• **isWritable**(): *boolean* +• `get` **isWritable**(): `boolean` Indicates whether or not tags can be written back to the current file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### length -• **length**(): *number* +• `get` **length**(): `number` Gets the length of the file represented by the current instance. Value will be 0 if the file is not open for reading; -**Returns:** *number* +#### Returns + +`number` ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets the MimeType of the file as determined during creation of the instance. -**Returns:** *string* +#### Returns + +`string` ___ ### mode -• **mode**(): [*FileAccessMode*](../enums/fileaccessmode.md) +• `get` **mode**(): [`FileAccessMode`](../enums/fileaccessmode.md) Gets the file access mode in use by the current instance. -**Returns:** [*FileAccessMode*](../enums/fileaccessmode.md) +#### Returns + +[`FileAccessMode`](../enums/fileaccessmode.md) -• **mode**(`val`: [*FileAccessMode*](../enums/fileaccessmode.md)): *void* +• `set` **mode**(`val`): `void` Sets the file access mode in use by the current instance. Changing the value will cause the stream currently in use to be closed, except when a change is made from [FileAccessMode.Write](../enums/fileaccessmode.md#write) to [FileAccessMode.Read](../enums/fileaccessmode.md#read) which has no effect. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`val` | [*FileAccessMode*](../enums/fileaccessmode.md) | File access mode to change to | +| Name | Type | Description | +| :------ | :------ | :------ | +| `val` | [`FileAccessMode`](../enums/fileaccessmode.md) | File access mode to change to | -**Returns:** *void* +#### Returns + +`void` ___ ### name -• **name**(): *string* +• `get` **name**(): `string` Gets the name of the file as stored in its file abstraction. -**Returns:** *string* +#### Returns + +`string` ___ ### position -• **position**(): *number* +• `get` **position**(): `number` Gets the seek position in the internal stream used by the current instance. Value will be 0 if the file is not open for reading -**Returns:** *number* +#### Returns + +`number` ___ ### properties -• **properties**(): [*Properties*](properties.md) +• `get` **properties**(): [`Properties`](properties.md) Gets the media properties of the file represented by the current instance. -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) ___ ### startTag -• **startTag**(): *default* +• `Protected` `get` **startTag**(): `default` Gets the collection of tags appearing at the start of the file. -**Returns:** *default* +#### Returns + +`default` ___ ### tag -• **tag**(): *default* +• `get` **tag**(): `default` Gets an abstract representation of all tags stored in the current instance. -**Returns:** *default* +#### Returns + +`default` ___ ### tagTypes -• **tagTypes**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) ___ ### tagTypesOnDisk -• **tagTypesOnDisk**(): [*TagTypes*](../enums/tagtypes.md) +• `get` **tagTypesOnDisk**(): [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the physical file represented by the current instance. -**Returns:** [*TagTypes*](../enums/tagtypes.md) +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### bufferSize + +• `Static` `get` **bufferSize**(): `number` + +Gets the buffer size to use when reading large blocks of data + +#### Returns + +`number` ## Methods ### dispose -▸ **dispose**(): *void* +▸ **dispose**(): `void` Dispose the current instance. Equivalent to setting the mode to closed. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.dispose ___ ### find -▸ **find**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `before?`: [*ByteVector*](bytevector.md)): *number* +▸ **find**(`pattern`, `startPosition?`, `before?`): `number` Searches forward through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` is not provided or `startPosition` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be smaller than the | +| `startPosition` | `number` | `0` | Seek position to start searching. Must be positive, safe integer. | +| `before?` | [`ByteVector`](bytevector.md) | `undefined` | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be smaller than the | -`startPosition` | *number* | 0 | Seek position to start searching. Must be positive, safe integer. | -`before?` | [*ByteVector*](bytevector.md) | - | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | +#### Returns -**Returns:** *number* +`number` Index at which the value was found. If not found, `-1` is returned. +#### Inherited from + +NonContainerFile.find + ___ ### getTag -▸ **getTag**(`type`: [*TagTypes*](../enums/tagtypes.md), `create`: *boolean*): [*Tag*](tag.md) +▸ **getTag**(`type`, `create`): [`Tag`](tag.md) Gets a tag of a specified type from the current instance, optionally creating a new tag if possible. @@ -366,23 +438,29 @@ possible. **`remarks`** [Id3v2Tag](id3v2tag.md), [Id3v1Tag](id3v1tag.md), and [ApeTag](apetag.md) will be added to the end of the file. All other tag types will be ignored as they are unsupported by MPEG files. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`TagTypes`](../enums/tagtypes.md) | Type of tag to read | +| `create` | `boolean` | Whether or not to try and create the tag if one is not found | -Name | Type | Description | ------- | ------ | ------ | -`type` | [*TagTypes*](../enums/tagtypes.md) | Type of tag to read | -`create` | *boolean* | Whether or not to try and create the tag if one is not found | +#### Returns -**Returns:** [*Tag*](tag.md) +[`Tag`](tag.md) Tag Tag that was found in or added to the current instance. If no matching tag was found and none was created, `undefined` is returned. +#### Overrides + +NonContainerFile.getTag + ___ ### insert -▸ **insert**(`data`: [*ByteVector*](bytevector.md), `start`: *number*, `replace?`: *number*): *void* +▸ **insert**(`data`, `start`, `replace?`): `void` Inserts a specified block of data into the file represented by the current instance, at a specified location, replacing a specified number of bytes. @@ -390,70 +468,94 @@ specified location, replacing a specified number of bytes. **`throws`** Error Thrown when: 1) data is falsey, 2) start is not a safe, positive number, or 3) replace is not a safe, positive number -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | `undefined` | Data to insert into the file. | +| `start` | `number` | `undefined` | Index into the file at which to insert the data. Must be safe positive integer. | +| `replace` | `number` | `0` | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | + +#### Returns + +`void` -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | - | Data to insert into the file. | -`start` | *number* | - | Index into the file at which to insert the data. Must be safe positive integer. | -`replace` | *number* | 0 | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | +#### Inherited from -**Returns:** *void* +NonContainerFile.insert ___ ### markAsCorrupt -▸ **markAsCorrupt**(`reason`: *string*): *void* +▸ **markAsCorrupt**(`reason`): `void` Mark the current instance as corrupt. NOTE: Not intended to be used outside of this library. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`reason` | *string* | Reason why this file is considered to be corrupt | +| Name | Type | Description | +| :------ | :------ | :------ | +| `reason` | `string` | Reason why this file is considered to be corrupt | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.markAsCorrupt ___ ### preSave -▸ `Protected`**preSave**(): *void* +▸ `Protected` **preSave**(): `void` Prepares to save the file. This must be called at the beginning of every File.save() method. -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.preSave ___ ### rFind -▸ **rFind**(`pattern`: [*ByteVector*](bytevector.md), `startPosition?`: *number*, `after?`: [*ByteVector*](bytevector.md)): *number* +▸ **rFind**(`pattern`, `startPosition?`, `after?`): `number` Searched backwards through a file for a specified pattern, starting at a specified offset. **`throws`** Error Thrown if `pattern` was not provided or if `startPosition` is not a safe, positive integer. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`pattern` | [*ByteVector*](bytevector.md) | - | Pattern to search for in the current instance. Must be shorter than the [bufferSize](mpegfile.md#buffersize) | -`startPosition` | *number* | 0 | Seek position from which to start searching. | -`after?` | [*ByteVector*](bytevector.md) | - | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be shorter than the [bufferSize](mpegfile.md#buffersize) | +| `startPosition` | `number` | `0` | Seek position from which to start searching. | +| `after?` | [`ByteVector`](bytevector.md) | `undefined` | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | -**Returns:** *number* +#### Returns + +`number` Index at which the value wa found. If not found, `-1` is returned. +#### Inherited from + +NonContainerFile.rFind + ___ ### readBlock -▸ **readBlock**(`length`: *number*): [*ByteVector*](bytevector.md) +▸ **readBlock**(`length`): [`ByteVector`](bytevector.md) Reads a specified number of bytes at the current seek position from the current position. This method reads the block of data at the current seek position. To change the seek @@ -461,153 +563,207 @@ position, use [File.seek](file.md#seek). **`throws`** Error Thrown when `length` is not a positive, safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to read. | -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to read. | +#### Returns -**Returns:** [*ByteVector*](bytevector.md) +[`ByteVector`](bytevector.md) ByteVector Object containing the data read from the current instance. +#### Inherited from + +NonContainerFile.readBlock + ___ ### readEnd -▸ `Protected`**readEnd**(`end`: *number*, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **readEnd**(`end`, `propertiesStyle`): `void` + +**`inheritdoc`** + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `end` | `number` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**`inheritdoc`** +#### Returns -#### Parameters: +`void` -Name | Type | ------- | ------ | -`end` | *number* | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +#### Overrides -**Returns:** *void* +NonContainerFile.readEnd ___ ### readProperties -▸ `Protected`**readProperties**(`_start`: *number*, `_end`: *number*, `_propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): [*Properties*](properties.md) +▸ `Protected` **readProperties**(`_start`, `_end`, `_propertiesStyle`): [`Properties`](properties.md) -**`inheritdoc`** +**`inheritdoc`** -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`_start` | *number* | -`_end` | *number* | -`_propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +| Name | Type | +| :------ | :------ | +| `_start` | `number` | +| `_end` | `number` | +| `_propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -**Returns:** [*Properties*](properties.md) +#### Returns + +[`Properties`](properties.md) + +#### Overrides + +NonContainerFile.readProperties ___ ### readStart -▸ `Protected`**readStart**(`start`: *number*, `propertiesStyle`: [*ReadStyle*](../enums/readstyle.md)): *void* +▸ `Protected` **readStart**(`start`, `propertiesStyle`): `void` + +**`inheritdoc`** -**`inheritdoc`** +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `start` | `number` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | -Name | Type | ------- | ------ | -`start` | *number* | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | +#### Returns -**Returns:** *void* +`void` + +#### Overrides + +NonContainerFile.readStart ___ ### removeBlock -▸ **removeBlock**(`start`: *number*, `length`: *number*): *void* +▸ **removeBlock**(`start`, `length`): `void` Removes a specified block of data from the file represented by the current instance. **`throws`** Error thrown if 1) start is not a safe, positive integer or 2) length must be a safe integer. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `start` | `number` | Index into the file at which to remove data. Must be safe, positive integer. | +| `length` | `number` | Number of bytes to remove. Must be a safe integer. | -Name | Type | Description | ------- | ------ | ------ | -`start` | *number* | Index into the file at which to remove data. Must be safe, positive integer. | -`length` | *number* | Number of bytes to remove. Must be a safe integer. | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.removeBlock ___ ### removeTags -▸ **removeTags**(`types`: [*TagTypes*](../enums/tagtypes.md)): *void* +▸ **removeTags**(`types`): `void` + +**`inheritdoc`** + +#### Parameters -**`inheritdoc`** +| Name | Type | +| :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | -#### Parameters: +#### Returns -Name | Type | ------- | ------ | -`types` | [*TagTypes*](../enums/tagtypes.md) | +`void` -**Returns:** *void* +#### Inherited from + +NonContainerFile.removeTags ___ ### save -▸ **save**(): *void* +▸ **save**(): `void` + +**`inheritdoc`** + +#### Returns -**`inheritdoc`** +`void` -**Returns:** *void* +#### Inherited from + +NonContainerFile.save ___ ### seek -▸ **seek**(`offset`: *number*, `origin?`: SeekOrigin): *void* +▸ **seek**(`offset`, `origin?`): `void` Moves the read/write pointer to a specified offset in the current instance, relative to a specified origin. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `offset` | `number` | Byte offset to seek to. Must be a safe, positive integer. | +| `origin` | `SeekOrigin` | Origin from which to seek | + +#### Returns + +`void` -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`offset` | *number* | - | Byte offset to seek to. Must be a safe, positive integer. | -`origin` | SeekOrigin | ... | Origin from which to seek | +#### Inherited from -**Returns:** *void* +NonContainerFile.seek ___ ### truncate -▸ `Protected`**truncate**(`length`: *number*): *void* +▸ `Protected` **truncate**(`length`): `void` Resizes the current instance to a specific number of bytes. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to resize the file to, must be a safe, positive integer. | + +#### Returns + +`void` -Name | Type | Description | ------- | ------ | ------ | -`length` | *number* | Number of bytes to resize the file to, must be a safe, positive integer. | +#### Inherited from -**Returns:** *void* +NonContainerFile.truncate ___ ### writeBlock -▸ **writeBlock**(`data`: [*ByteVector*](bytevector.md)): *void* +▸ **writeBlock**(`data`): `void` Writes a block of data to the file represented by the current instance at the current seek position. This will overwrite any existing data at the seek position and append new data to @@ -615,119 +771,161 @@ the file if writing past the current end. **`throws`** Error Thrown when `data` is not provided. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector containing data to the current instance. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing data to the current instance. | -**Returns:** *void* +#### Returns + +`void` + +#### Inherited from + +NonContainerFile.writeBlock ___ ### addFileType -▸ `Static`**addFileType**(`mimeType`: *string*, `constructor`: [*FileTypeConstructor*](../modules.md#filetypeconstructor), `override?`: *boolean*): *void* +▸ `Static` **addFileType**(`mimeType`, `constructor`, `override?`): `void` Registers the constructor for a subclass of [File](file.md) with the MimeType it is associated with. Optionally, the MimeType can be forcefully overridden if it was already registered. -#### Parameters: +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mimeType` | `string` | `undefined` | MimeType to register this subclass constructor to. | +| `constructor` | [`FileTypeConstructor`](../modules.md#filetypeconstructor) | `undefined` | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | +| `override` | `boolean` | `false` | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`mimeType` | *string* | - | MimeType to register this subclass constructor to. | -`constructor` | [*FileTypeConstructor*](../modules.md#filetypeconstructor) | - | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | -`override` | *boolean* | false | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.addFileType ___ ### addFileTypeResolver -▸ `Static`**addFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **addFileTypeResolver**(`resolver`): `void` Registers a [FileTypeResolver](../modules.md#filetyperesolver) to the front of the list of file type resolvers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | -Name | Type | Description | ------- | ------ | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +NonContainerFile.addFileTypeResolver ___ ### createFromAbstraction -▸ `Static`**createFromAbstraction**(`abstraction`: IFileAbstraction, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromAbstraction**(`abstraction`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of a [File](file.md) subclass for a specified file abstraction, MimeType, and property read style. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`abstraction` | IFileAbstraction | - | Object to use when reading/writing from the current instance. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | Object to use when reading/writing from the current instance. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | -**Returns:** [*File*](file.md) +#### Returns + +[`File`](file.md) New instance of [File](file.md) as read from the specified abstraction. +#### Inherited from + +NonContainerFile.createFromAbstraction + ___ ### createFromPath -▸ `Static`**createFromPath**(`filePath`: *string*, `mimeType?`: *string*, `propertiesStyle?`: [*ReadStyle*](../enums/readstyle.md)): [*File*](file.md) +▸ `Static` **createFromPath**(`filePath`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) Creates a new instance of [File](file.md) subclass for a specified file path, MimeType, and property read style. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to read/write. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`filePath` | *string* | - | Path to the file to read/write. | -`mimeType?` | *string* | - | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | -`propertiesStyle` | [*ReadStyle*](../enums/readstyle.md) | ... | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | +#### Returns -**Returns:** [*File*](file.md) +[`File`](file.md) New instance of [File](file.md) as read from the specified path. +#### Inherited from + +NonContainerFile.createFromPath + ___ ### removeFileType -▸ `Static`**removeFileType**(`mimeType`: *string*): *void* +▸ `Static` **removeFileType**(`mimeType`): `void` Used for removing a file type constructor during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `mimeType` | `string` | + +#### Returns + +`void` -Name | Type | ------- | ------ | -`mimeType` | *string* | +#### Inherited from -**Returns:** *void* +NonContainerFile.removeFileType ___ ### removeFileTypeResolver -▸ `Static`**removeFileTypeResolver**(`resolver`: [*FileTypeResolver*](../modules.md#filetyperesolver)): *void* +▸ `Static` **removeFileTypeResolver**(`resolver`): `void` Used for removing a file type resolver during unit testing -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | + +#### Returns + +`void` -Name | Type | ------- | ------ | -`resolver` | [*FileTypeResolver*](../modules.md#filetyperesolver) | +#### Inherited from -**Returns:** *void* +NonContainerFile.removeFileTypeResolver diff --git a/docs/classes/mpegvbriheader.md b/docs/classes/mpegvbriheader.md index 3a734248..0da61fc1 100644 --- a/docs/classes/mpegvbriheader.md +++ b/docs/classes/mpegvbriheader.md @@ -4,10 +4,6 @@ Information about a variable bitrate MPEG audio stream encoded by the Fraunhofer encoder -## Hierarchy - -* **MpegVbriHeader** - ## Table of contents ### Properties @@ -31,7 +27,7 @@ Information about a variable bitrate MPEG audio stream encoded by the Fraunhofer ### fileIdentifier -▪ `Readonly` `Static` **fileIdentifier**: [*ByteVector*](bytevector.md) +▪ `Static` `Readonly` **fileIdentifier**: [`ByteVector`](bytevector.md) Identifier that appears in the file to indicate the start of the VBRI header. @@ -39,7 +35,7 @@ ___ ### unknown -▪ `Readonly` `Static` **unknown**: [*MpegVbriHeader*](mpegvbriheader.md) +▪ `Static` `Readonly` **unknown**: [`MpegVbriHeader`](mpegvbriheader.md) An empty and unset VBRI header. @@ -47,7 +43,7 @@ ___ ### vbriHeaderOffset -▪ `Readonly` `Static` **vbriHeaderOffset**: *36*= 0x24 +▪ `Static` `Readonly` **vbriHeaderOffset**: ``36`` Offset at which a VBRI header would appear in an MPEG audio packet. Always 32 bytes after the end of the first MPEG header. @@ -56,61 +52,71 @@ the end of the first MPEG header. ### isPresent -• **isPresent**(): *boolean* +• `get` **isPresent**(): `boolean` Whether or not a physical VBRI header is present in the file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### totalFrames -• **totalFrames**(): *number* +• `get` **totalFrames**(): `number` Gets the total number of frames in the file, as indicated by the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### totalSize -• **totalSize**(): *number* +• `get` **totalSize**(): `number` Gets the total size of the file, as indicated by the current instance. -**Returns:** *number* +#### Returns + +`number` ## Methods ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*MpegVbriHeader*](mpegvbriheader.md) +▸ `Static` **fromData**(`data`): [`MpegVbriHeader`](mpegvbriheader.md) Constructs a new instance from the raw data of the header. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Data to read the VBRI header from | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Data to read the VBRI header from | +#### Returns -**Returns:** [*MpegVbriHeader*](mpegvbriheader.md) +[`MpegVbriHeader`](mpegvbriheader.md) ___ ### fromInfo -▸ `Static`**fromInfo**(`frames`: *number*, `size`: *number*): [*MpegVbriHeader*](mpegvbriheader.md) +▸ `Static` **fromInfo**(`frames`, `size`): [`MpegVbriHeader`](mpegvbriheader.md) Constructs a new instance with a specified frame count and size. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | `number` | Frame count of the audio | +| `size` | `number` | Stream size of the audio | -Name | Type | Description | ------- | ------ | ------ | -`frames` | *number* | Frame count of the audio | -`size` | *number* | Stream size of the audio | +#### Returns -**Returns:** [*MpegVbriHeader*](mpegvbriheader.md) +[`MpegVbriHeader`](mpegvbriheader.md) diff --git a/docs/classes/mpegvideoheader.md b/docs/classes/mpegvideoheader.md index a5e1888b..2394bf0c 100644 --- a/docs/classes/mpegvideoheader.md +++ b/docs/classes/mpegvideoheader.md @@ -4,13 +4,9 @@ Provides information about an MPEG video stream. -## Hierarchy - -* **MpegVideoHeader** - ## Implements -* [*IVideoCodec*](../interfaces/ivideocodec.md) +- [`IVideoCodec`](../interfaces/ivideocodec.md) ## Table of contents @@ -32,98 +28,120 @@ Provides information about an MPEG video stream. ### constructor -\+ **new MpegVideoHeader**(`file`: [*File*](file.md), `position`: *number*): [*MpegVideoHeader*](mpegvideoheader.md) +• **new MpegVideoHeader**(`file`, `position`) Constructs and initializes a new instance of [MpegVideoHeader](mpegvideoheader.md) by reading it from a specified location in a specified file. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`file` | [*File*](file.md) | File to read the header from | -`position` | *number* | Position in `file` at which the header begins | - -**Returns:** [*MpegVideoHeader*](mpegvideoheader.md) +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File to read the header from | +| `position` | `number` | Position in `file` at which the header begins | ## Accessors ### description -• **description**(): *string* +• `get` **description**(): `string` Gets a text description of the media represented by the current instance. -**Returns:** *string* +#### Returns + +`string` -Implementation of: [IVideoCodec](../interfaces/ivideocodec.md).[description](../interfaces/ivideocodec.md#description) +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[description](../interfaces/ivideocodec.md#description) ___ ### durationMilliseconds -• **durationMilliseconds**(): *number* +• `get` **durationMilliseconds**(): `number` Duration of the media in milliseconds represented by the current instance. **`todo:`** Can we calculate the duration? -**Returns:** *number* +#### Returns + +`number` -Implementation of: [IVideoCodec](../interfaces/ivideocodec.md).[durationMilliseconds](../interfaces/ivideocodec.md#durationmilliseconds) +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[durationMilliseconds](../interfaces/ivideocodec.md#durationmilliseconds) ___ ### mediaTypes -• **mediaTypes**(): [*MediaTypes*](../enums/mediatypes.md) +• `get` **mediaTypes**(): [`MediaTypes`](../enums/mediatypes.md) Types of media represented by the current instance, bitwise combined. -**Returns:** [*MediaTypes*](../enums/mediatypes.md) +#### Returns + +[`MediaTypes`](../enums/mediatypes.md) -Implementation of: [IVideoCodec](../interfaces/ivideocodec.md).[mediaTypes](../interfaces/ivideocodec.md#mediatypes) +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[mediaTypes](../interfaces/ivideocodec.md#mediatypes) ___ ### videoBitrate -• **videoBitrate**(): *number* +• `get` **videoBitrate**(): `number` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** *number* +`number` ___ ### videoFrameRate -• **videoFrameRate**(): *number* +• `get` **videoFrameRate**(): `number` -**`inheritdoc`** +**`inheritdoc`** -**Returns:** *number* +#### Returns + +`number` ___ ### videoHeight -• **videoHeight**(): *number* +• `get` **videoHeight**(): `number` Height of the video in pixels represented by the current instance. -**Returns:** *number* +#### Returns + +`number` -Implementation of: [IVideoCodec](../interfaces/ivideocodec.md).[videoHeight](../interfaces/ivideocodec.md#videoheight) +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[videoHeight](../interfaces/ivideocodec.md#videoheight) ___ ### videoWidth -• **videoWidth**(): *number* +• `get` **videoWidth**(): `number` Width of the video in pixels represented by the current instance. -**Returns:** *number* +#### Returns + +`number` + +#### Implementation of -Implementation of: [IVideoCodec](../interfaces/ivideocodec.md).[videoWidth](../interfaces/ivideocodec.md#videowidth) +[IVideoCodec](../interfaces/ivideocodec.md).[videoWidth](../interfaces/ivideocodec.md#videowidth) diff --git a/docs/classes/mpegxingheader.md b/docs/classes/mpegxingheader.md index ce059338..ff9ccac1 100644 --- a/docs/classes/mpegxingheader.md +++ b/docs/classes/mpegxingheader.md @@ -4,10 +4,6 @@ Information about a variable bitrate MPEG audio stream -## Hierarchy - -* **MpegXingHeader** - ## Table of contents ### Properties @@ -31,7 +27,7 @@ Information about a variable bitrate MPEG audio stream ### fileIdentifier -▪ `Readonly` `Static` **fileIdentifier**: [*ByteVector*](bytevector.md) +▪ `Static` `Readonly` **fileIdentifier**: [`ByteVector`](bytevector.md) Identifier that appears in a file to indicate the start of a Xing header. @@ -39,7 +35,7 @@ ___ ### unknown -▪ `Readonly` `Static` **unknown**: [*MpegXingHeader*](mpegxingheader.md) +▪ `Static` `Readonly` **unknown**: [`MpegXingHeader`](mpegxingheader.md) An empty an unset Xing header @@ -47,81 +43,93 @@ An empty an unset Xing header ### isPresent -• **isPresent**(): *boolean* +• `get` **isPresent**(): `boolean` Whether or not a physical VBRI header is present in the file. -**Returns:** *boolean* +#### Returns + +`boolean` ___ ### totalFrames -• **totalFrames**(): *number* +• `get` **totalFrames**(): `number` Gets the total number of frames in the file, as indicated by the current instance. -**Returns:** *number* +#### Returns + +`number` ___ ### totalSize -• **totalSize**(): *number* +• `get` **totalSize**(): `number` Gets the total size of the file, as indicated by the current instance. -**Returns:** *number* +#### Returns + +`number` ## Methods ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*MpegXingHeader*](mpegxingheader.md) +▸ `Static` **fromData**(`data`): [`MpegXingHeader`](mpegxingheader.md) Constructs a new instance by reading its raw contents. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw data of the Xing header | -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw data of the Xing header | +#### Returns -**Returns:** [*MpegXingHeader*](mpegxingheader.md) +[`MpegXingHeader`](mpegxingheader.md) ___ ### fromInfo -▸ `Static`**fromInfo**(`frames`: *number*, `size`: *number*): [*MpegXingHeader*](mpegxingheader.md) +▸ `Static` **fromInfo**(`frames`, `size`): [`MpegXingHeader`](mpegxingheader.md) Constructs a new instance with a specified frame count and size. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`frames` | *number* | Frame count of the audio | -`size` | *number* | Stream size of the audio | +| Name | Type | Description | +| :------ | :------ | :------ | +| `frames` | `number` | Frame count of the audio | +| `size` | `number` | Stream size of the audio | -**Returns:** [*MpegXingHeader*](mpegxingheader.md) +#### Returns + +[`MpegXingHeader`](mpegxingheader.md) ___ ### xingHeaderOffset -▸ `Static`**xingHeaderOffset**(`version`: [*MpegVersion*](../enums/mpegversion.md), `channelModel`: [*MpegAudioChannelMode*](../enums/mpegaudiochannelmode.md)): *number* +▸ `Static` **xingHeaderOffset**(`version`, `channelModel`): `number` Gets the offset at which a Xing header would appear in an MPEG audio packet based on the version and channel mode. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `version` | [`MpegVersion`](../enums/mpegversion.md) | Version of the MPEG audio packet | +| `channelModel` | [`MpegAudioChannelMode`](../enums/mpegaudiochannelmode.md) | Channel mode of the MPEG audio packet | -Name | Type | Description | ------- | ------ | ------ | -`version` | [*MpegVersion*](../enums/mpegversion.md) | Version of the MPEG audio packet | -`channelModel` | [*MpegAudioChannelMode*](../enums/mpegaudiochannelmode.md) | Channel mode of the MPEG audio packet | +#### Returns -**Returns:** *number* +`number` Offset into an MPEG audio packet where the Xing header would appear. diff --git a/docs/classes/notimplementederror.md b/docs/classes/notimplementederror.md index 92b1d36a..149de699 100644 --- a/docs/classes/notimplementederror.md +++ b/docs/classes/notimplementederror.md @@ -4,9 +4,9 @@ ## Hierarchy -* *Error* +- `Error` - ↳ **NotImplementedError** + ↳ **`NotImplementedError`** ## Table of contents @@ -19,8 +19,8 @@ - [isNotImplementedError](notimplementederror.md#isnotimplementederror) - [message](notimplementederror.md#message) - [name](notimplementederror.md#name) -- [prepareStackTrace](notimplementederror.md#preparestacktrace) - [stack](notimplementederror.md#stack) +- [prepareStackTrace](notimplementederror.md#preparestacktrace) - [stackTraceLimit](notimplementederror.md#stacktracelimit) ### Methods @@ -32,83 +32,126 @@ ### constructor -\+ **new NotImplementedError**(`message?`: *string*): [*NotImplementedError*](notimplementederror.md) +• **new NotImplementedError**(`message?`) -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`message?` | *string* | +| Name | Type | +| :------ | :------ | +| `message?` | `string` | -**Returns:** [*NotImplementedError*](notimplementederror.md) +#### Overrides + +Error.constructor ## Properties ### isNotImplementedError -• `Readonly` **isNotImplementedError**: *boolean*= true +• `Readonly` **isNotImplementedError**: `boolean` = `true` ___ ### message -• **message**: *string* +• **message**: `string` + +#### Inherited from + +Error.message ___ ### name -• **name**: *string* +• **name**: `string` + +#### Inherited from + +Error.name + +___ + +### stack + +• `Optional` **stack**: `string` + +#### Inherited from + +Error.stack ___ ### prepareStackTrace -• `Optional` **prepareStackTrace**: (`err`: Error, `stackTraces`: CallSite[]) => *any* +▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any` + +#### Type declaration + +▸ (`err`, `stackTraces`): `any` Optional override for formatting stack traces -**`see`** https://github.com/v8/v8/wiki/Stack%20Trace%20API#customizing-stack-traces +##### Parameters -___ +| Name | Type | +| :------ | :------ | +| `err` | `Error` | +| `stackTraces` | `CallSite`[] | -### stack +##### Returns + +`any` + +#### Inherited from -• `Optional` **stack**: *string* +Error.prepareStackTrace ___ ### stackTraceLimit -• **stackTraceLimit**: *number* +▪ `Static` **stackTraceLimit**: `number` + +#### Inherited from + +Error.stackTraceLimit ## Methods ### captureStackTrace -▸ **captureStackTrace**(`targetObject`: Object, `constructorOpt?`: Function): *void* +▸ `Static` **captureStackTrace**(`targetObject`, `constructorOpt?`): `void` Create .stack property on a target object -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `targetObject` | `object` | +| `constructorOpt?` | `Function` | -Name | Type | ------- | ------ | -`targetObject` | Object | -`constructorOpt?` | Function | +#### Returns -**Returns:** *void* +`void` + +#### Inherited from + +Error.captureStackTrace ___ ### errorIs -▸ `Static`**errorIs**(`e`: Error): *boolean* +▸ `Static` **errorIs**(`e`): `boolean` + +#### Parameters -#### Parameters: +| Name | Type | +| :------ | :------ | +| `e` | `Error` | -Name | Type | ------- | ------ | -`e` | Error | +#### Returns -**Returns:** *boolean* +`boolean` diff --git a/docs/classes/picture.md b/docs/classes/picture.md index d5647c5b..c890308b 100644 --- a/docs/classes/picture.md +++ b/docs/classes/picture.md @@ -4,13 +4,9 @@ This class implements [IPicture](../interfaces/ipicture.md) and provides a mechanism for loading pictures from files. -## Hierarchy - -* **Picture** - ## Implements -* [*IPicture*](../interfaces/ipicture.md) +- [`IPicture`](../interfaces/ipicture.md) ## Table of contents @@ -36,139 +32,159 @@ This class implements [IPicture](../interfaces/ipicture.md) and provides a mecha ### data -• **data**: [*ByteVector*](bytevector.md) +• **data**: [`ByteVector`](bytevector.md) Gets and sets the picture data stored in the current instance. -Implementation of: [IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) ___ ### description -• **description**: *string* +• **description**: `string` Gets and sets a description of the picture stored in the current instance. Optional. -Implementation of: [IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) ___ ### filename -• **filename**: *string* +• **filename**: `string` Gets and sets a filename of the picture stored in the current instance. Optional. -Implementation of: [IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) ___ ### mimeType -• **mimeType**: *string* +• **mimeType**: `string` Gets and sets the mime-type of the picture data stored in the current instance. -Implementation of: [IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) ___ ### type -• **type**: [*PictureType*](../enums/picturetype.md) +• **type**: [`PictureType`](../enums/picturetype.md) Gets and sets the type of the content visible in the picture stored in the current instance. -Implementation of: [IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) ## Methods ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*Picture*](picture.md) +▸ `Static` **fromData**(`data`): [`Picture`](picture.md) Constructs and initializes a new instance from the data provided. The data is processed to discover the type of the picture. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw bytes of the picture to store in the instance. Cannot be falsey | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw bytes of the picture to store in the instance. Cannot be falsey | -**Returns:** [*Picture*](picture.md) +#### Returns + +[`Picture`](picture.md) ___ ### fromFileAbstraction -▸ `Static`**fromFileAbstraction**(`abstraction`: IFileAbstraction): [*Picture*](picture.md) +▸ `Static` **fromFileAbstraction**(`abstraction`): [`Picture`](picture.md) Constructs and initializes a new instance from a file abstraction. The description and type of the file are determined by the name of the abstraction. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | File abstraction to load the picture from. | -Name | Type | Description | ------- | ------ | ------ | -`abstraction` | IFileAbstraction | File abstraction to load the picture from. | +#### Returns -**Returns:** [*Picture*](picture.md) +[`Picture`](picture.md) ___ ### fromFullData -▸ `Static`**fromFullData**(`data`: [*ByteVector*](bytevector.md), `type`: [*PictureType*](../enums/picturetype.md), `mimeType`: *string*, `description`: *string*): [*Picture*](picture.md) +▸ `Static` **fromFullData**(`data`, `type`, `mimeType`, `description`): [`Picture`](picture.md) Constructs a new instance with the data provided. No processing of the data is done. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Raw bytes of the picture to store in the instance. Cannot be falsey | -`type` | [*PictureType*](../enums/picturetype.md) | Type of the picture. Cannot be null or undefined | -`mimeType` | *string* | MimeType of the picture. Cannot be falsey | -`description` | *string* | Description of the picture. Cannot be null or undefined | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Raw bytes of the picture to store in the instance. Cannot be falsey | +| `type` | [`PictureType`](../enums/picturetype.md) | Type of the picture. Cannot be null or undefined | +| `mimeType` | `string` | MimeType of the picture. Cannot be falsey | +| `description` | `string` | Description of the picture. Cannot be null or undefined | -**Returns:** [*Picture*](picture.md) +#### Returns + +[`Picture`](picture.md) ___ ### fromPath -▸ `Static`**fromPath**(`filePath`: *string*): [*Picture*](picture.md) +▸ `Static` **fromPath**(`filePath`): [`Picture`](picture.md) Constructs and initializes a new instance from a file located at the provided path. The type and description of the picture are determined by the extension of the file. The file is loaded completely. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to use to use for the file | -Name | Type | Description | ------- | ------ | ------ | -`filePath` | *string* | Path to the file to use to use for the file | +#### Returns -**Returns:** [*Picture*](picture.md) +[`Picture`](picture.md) ___ ### getExtensionFromData -▸ `Static`**getExtensionFromData**(`data`: [*ByteVector*](bytevector.md)): *string* +▸ `Static` **getExtensionFromData**(`data`): `string` Retrieve a mimetype from raw file data by reading the first few bytes of the file. Less accurate than [getExtensionFromMimeType](picture.md#getextensionfrommimetype) since this is limited to image file types. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | Bytes of the file to read to identify the extension | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Bytes of the file to read to identify the extension | -**Returns:** *string* +#### Returns + +`string` string Extension of the file with dot at the beginning based on the first few bytes of the data. If the extension cannot be determined, `undefined` is returned @@ -177,17 +193,19 @@ ___ ### getExtensionFromMimeType -▸ `Static`**getExtensionFromMimeType**(`mime`: *string*): *string* +▸ `Static` **getExtensionFromMimeType**(`mime`): `string` Gets the file extension for a specific mimetype. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `mime` | `string` | Mimetype to lookup the extension for | -Name | Type | Description | ------- | ------ | ------ | -`mime` | *string* | Mimetype to lookup the extension for | +#### Returns -**Returns:** *string* +`string` string Extension of the file based on the mimetype with a dot at the beginning. If the extension cannot be determined, `undefined` is returned @@ -196,18 +214,20 @@ ___ ### getMimeTypeFromFilename -▸ `Static`**getMimeTypeFromFilename**(`name`: *string*): *string* +▸ `Static` **getMimeTypeFromFilename**(`name`): `string` Gets the mimetype of a file based on its extension. If the mimetype cannot be determined, it is assumed to be a basic binary file. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `name` | `string` | Filename with extension or just the extension of the file | -Name | Type | Description | ------- | ------ | ------ | -`name` | *string* | Filename with extension or just the extension of the file | +#### Returns -**Returns:** *string* +`string` string Mimetype of the file based on the extension. If mimetype cannot be determined, application/octet-stream is returned. diff --git a/docs/classes/picturelazy.md b/docs/classes/picturelazy.md index 13d1f21b..261f1972 100644 --- a/docs/classes/picturelazy.md +++ b/docs/classes/picturelazy.md @@ -7,14 +7,10 @@ Contrary to [Picture](picture.md), a reference to a file where the picture is lo the picture is lazily loaded from the file, meaning that it will be read from the file only when needed. This saves time and memory if the picture loading is not required. -## Hierarchy - -* **PictureLazy** - ## Implements -* [*IPicture*](../interfaces/ipicture.md) -* *ILazy* +- [`IPicture`](../interfaces/ipicture.md) +- `ILazy` ## Table of contents @@ -38,199 +34,253 @@ needed. This saves time and memory if the picture loading is not required. ### data -• **data**(): [*ByteVector*](bytevector.md) +• `get` **data**(): [`ByteVector`](bytevector.md) Gets and sets the picture data stored in the current instance. -**Returns:** [*ByteVector*](bytevector.md) +#### Returns + +[`ByteVector`](bytevector.md) + +#### Implementation of -Implementation of: [IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) +[IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) -• **data**(`value`: [*ByteVector*](bytevector.md)): *void* +• `set` **data**(`value`): `void` Gets and sets the picture data stored in the current instance. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | [*ByteVector*](bytevector.md) | +| Name | Type | +| :------ | :------ | +| `value` | [`ByteVector`](bytevector.md) | -**Returns:** *void* +#### Returns -Implementation of: [IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) +`void` + +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[data](../interfaces/ipicture.md#data) ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets and sets a description of the picture stored in the current instance. Optional. -**Returns:** *string* +#### Returns + +`string` + +#### Implementation of -Implementation of: [IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) +[IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Gets and sets a description of the picture stored in the current instance. Optional. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns -Implementation of: [IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) +`void` + +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[description](../interfaces/ipicture.md#description) ___ ### filename -• **filename**(): *string* +• `get` **filename**(): `string` Gets and sets a filename of the picture stored in the current instance. Optional. -**Returns:** *string* +#### Returns + +`string` + +#### Implementation of -Implementation of: [IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) +[IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) -• **filename**(`value`: *string*): *void* +• `set` **filename**(`value`): `void` Gets and sets a filename of the picture stored in the current instance. Optional. -#### Parameters: +#### Parameters -Name | Type | ------- | ------ | -`value` | *string* | +| Name | Type | +| :------ | :------ | +| `value` | `string` | -**Returns:** *void* +#### Returns -Implementation of: [IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) +`void` + +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[filename](../interfaces/ipicture.md#filename) ___ ### isLoaded -• **isLoaded**(): *boolean* +• `get` **isLoaded**(): `boolean` + +**`inheritdoc`** -**`inheritdoc`** +#### Returns -**Returns:** *boolean* +`boolean` ___ ### mimeType -• **mimeType**(): *string* +• `get` **mimeType**(): `string` Gets and sets the mime-type of the picture data stored in the current instance. -**Returns:** *string* +#### Returns -Implementation of: [IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) +`string` -• **mimeType**(`value`: *string*): *void* +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) + +• `set` **mimeType**(`value`): `void` Gets and sets the mime-type of the picture data stored in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `string` | + +#### Returns -Name | Type | ------- | ------ | -`value` | *string* | +`void` -**Returns:** *void* +#### Implementation of -Implementation of: [IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) +[IPicture](../interfaces/ipicture.md).[mimeType](../interfaces/ipicture.md#mimetype) ___ ### type -• **type**(): [*PictureType*](../enums/picturetype.md) +• `get` **type**(): [`PictureType`](../enums/picturetype.md) Gets and sets the type of the content visible in the picture stored in the current instance. -**Returns:** [*PictureType*](../enums/picturetype.md) +#### Returns -Implementation of: [IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) +[`PictureType`](../enums/picturetype.md) -• **type**(`value`: [*PictureType*](../enums/picturetype.md)): *void* +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) + +• `set` **type**(`value`): `void` Gets and sets the type of the content visible in the picture stored in the current instance. -#### Parameters: +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`PictureType`](../enums/picturetype.md) | -Name | Type | ------- | ------ | -`value` | [*PictureType*](../enums/picturetype.md) | +#### Returns -**Returns:** *void* +`void` -Implementation of: [IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) +#### Implementation of + +[IPicture](../interfaces/ipicture.md).[type](../interfaces/ipicture.md#type) ## Methods ### load -▸ **load**(): *void* +▸ **load**(): `void` + +**`inheritdoc`** + +#### Returns + +`void` -**`inheritdoc`** +#### Implementation of -**Returns:** *void* +ILazy.load ___ ### fromData -▸ `Static`**fromData**(`data`: [*ByteVector*](bytevector.md)): [*PictureLazy*](picturelazy.md) +▸ `Static` **fromData**(`data`): [`PictureLazy`](picturelazy.md) Constructs a new picture using data that's already been read into memory. The content will not be lazily loaded. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`data` | [*ByteVector*](bytevector.md) | ByteVector Object containing picture data | +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector Object containing picture data | -**Returns:** [*PictureLazy*](picturelazy.md) +#### Returns + +[`PictureLazy`](picturelazy.md) ___ ### fromFile -▸ `Static`**fromFile**(`file`: IFileAbstraction, `offset`: *number*, `size?`: *number*): [*PictureLazy*](picturelazy.md) +▸ `Static` **fromFile**(`file`, `offset`, `size?`): [`PictureLazy`](picturelazy.md) Constructs a new instance from a file abstraction. The content will be lazily loaded. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | `IFileAbstraction` | File abstraction containing the file to read | +| `offset` | `number` | Index into the file where the picture is located, must be a 32-bit integer | +| `size?` | `number` | Optionally, size of the picture in bytes. If omitted, all bytes of file will be read when lazily loaded. Must be a 32-bit integer or `undefined` | -Name | Type | Description | ------- | ------ | ------ | -`file` | IFileAbstraction | File abstraction containing the file to read | -`offset` | *number* | Index into the file where the picture is located, must be a 32-bit integer | -`size?` | *number* | Optionally, size of the picture in bytes. If omitted, all bytes of file will be read when lazily loaded. Must be a 32-bit integer or `undefined` | +#### Returns -**Returns:** [*PictureLazy*](picturelazy.md) +[`PictureLazy`](picturelazy.md) ___ ### fromPath -▸ `Static`**fromPath**(`path`: *string*): [*PictureLazy*](picturelazy.md) +▸ `Static` **fromPath**(`path`): [`PictureLazy`](picturelazy.md) Constructs a new instance that will be lazily loaded from the path provided. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `path` | `string` | Path to the file to read | -Name | Type | Description | ------- | ------ | ------ | -`path` | *string* | Path to the file to read | +#### Returns -**Returns:** [*PictureLazy*](picturelazy.md) +[`PictureLazy`](picturelazy.md) diff --git a/docs/classes/properties.md b/docs/classes/properties.md index c8fc0d4f..ac00e58d 100644 --- a/docs/classes/properties.md +++ b/docs/classes/properties.md @@ -2,15 +2,11 @@ # Class: Properties -## Hierarchy - -* **Properties** - ## Implements -* [*ILosslessAudioCodec*](../interfaces/ilosslessaudiocodec.md) -* [*IVideoCodec*](../interfaces/ivideocodec.md) -* [*IPhotoCodec*](../interfaces/iphotocodec.md) +- [`ILosslessAudioCodec`](../interfaces/ilosslessaudiocodec.md) +- [`IVideoCodec`](../interfaces/ivideocodec.md) +- [`IPhotoCodec`](../interfaces/iphotocodec.md) ## Table of contents @@ -38,182 +34,230 @@ ### constructor -\+ **new Properties**(`durationMilli?`: *number*, `codecs?`: [*ICodec*](../interfaces/icodec.md)[]): [*Properties*](properties.md) +• **new Properties**(`durationMilli?`, `codecs?`) Constructs and initializes a new instance of [Properties](properties.md) with the specified codecs and duration. -#### Parameters: +#### Parameters -Name | Type | Default value | Description | ------- | ------ | ------ | ------ | -`durationMilli` | *number* | 0 | Duration of the media in milliseconds or 0 if the duration is to be read from the codecs. | -`codecs` | [*ICodec*](../interfaces/icodec.md)[] | ... | Array of codecs to be used in the new instance. | - -**Returns:** [*Properties*](properties.md) +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `durationMilli` | `number` | `0` | Duration of the media in milliseconds or 0 if the duration is to be read from the codecs. | +| `codecs` | [`ICodec`](../interfaces/icodec.md)[] | `[]` | Array of codecs to be used in the new instance. | ## Accessors ### audioBitrate -• **audioBitrate**(): *number* +• `get` **audioBitrate**(): `number` Gets the bitrate of the audio represented by the current instance. This value is equal to the first non-zero audio bitrate, or zero if no codecs with audio information were found. -**Returns:** *number* +#### Returns + +`number` -Implementation of: [ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioBitrate](../interfaces/ilosslessaudiocodec.md#audiobitrate) +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioBitrate](../interfaces/ilosslessaudiocodec.md#audiobitrate) ___ ### audioChannels -• **audioChannels**(): *number* +• `get` **audioChannels**(): `number` Gets the number of channels in the audio represented by the current instance. -**Returns:** *number* +#### Returns + +`number` + +#### Implementation of -Implementation of: [ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioChannels](../interfaces/ilosslessaudiocodec.md#audiochannels) +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioChannels](../interfaces/ilosslessaudiocodec.md#audiochannels) ___ ### audioSampleRate -• **audioSampleRate**(): *number* +• `get` **audioSampleRate**(): `number` Gets the sample rate of the audio represented by the current instance. This value is equal to the first non-zero audio bitrate, or zero if no audio codecs were found. -**Returns:** *number* +#### Returns -Implementation of: [ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioSampleRate](../interfaces/ilosslessaudiocodec.md#audiosamplerate) +`number` + +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioSampleRate](../interfaces/ilosslessaudiocodec.md#audiosamplerate) ___ ### bitsPerSample -• **bitsPerSample**(): *number* +• `get` **bitsPerSample**(): `number` Gets the number of bits per sample in the audio represented by the current instance. This value is equal to the first non-zero quantization, or zero if no lossless audio codecs were found in the current instance. -**Returns:** *number* +#### Returns + +`number` + +#### Implementation of -Implementation of: [ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[bitsPerSample](../interfaces/ilosslessaudiocodec.md#bitspersample) +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[bitsPerSample](../interfaces/ilosslessaudiocodec.md#bitspersample) ___ ### codecs -• **codecs**(): [*ICodec*](../interfaces/icodec.md)[] +• `get` **codecs**(): [`ICodec`](../interfaces/icodec.md)[] Gets the codecs contained in the current instance. **`remarks`** The list of codecs should not be modified. As such, the returned codec list is a copy of codec list stored in this instance. -**Returns:** [*ICodec*](../interfaces/icodec.md)[] +#### Returns + +[`ICodec`](../interfaces/icodec.md)[] ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets a string description of the media represented by the current instance. Values are joined by semi-colons. -**Returns:** *string* +#### Returns + +`string` + +#### Implementation of -Implementation of: [IPhotoCodec](../interfaces/iphotocodec.md).[description](../interfaces/iphotocodec.md#description) +[IPhotoCodec](../interfaces/iphotocodec.md).[description](../interfaces/iphotocodec.md#description) ___ ### durationMilliseconds -• **durationMilliseconds**(): *number* +• `get` **durationMilliseconds**(): `number` Gets the duration of the media represented by the current instance. If the value was set in the constructor, that value is returned, otherwise the longest codec duration is used. -**Returns:** *number* +#### Returns -Implementation of: [IPhotoCodec](../interfaces/iphotocodec.md).[durationMilliseconds](../interfaces/iphotocodec.md#durationmilliseconds) +`number` + +#### Implementation of + +[IPhotoCodec](../interfaces/iphotocodec.md).[durationMilliseconds](../interfaces/iphotocodec.md#durationmilliseconds) ___ ### mediaTypes -• **mediaTypes**(): [*MediaTypes*](../enums/mediatypes.md) +• `get` **mediaTypes**(): [`MediaTypes`](../enums/mediatypes.md) Gets the types of media represented by the current instance. -**Returns:** [*MediaTypes*](../enums/mediatypes.md) +#### Returns + +[`MediaTypes`](../enums/mediatypes.md) + +#### Implementation of -Implementation of: [IPhotoCodec](../interfaces/iphotocodec.md).[mediaTypes](../interfaces/iphotocodec.md#mediatypes) +[IPhotoCodec](../interfaces/iphotocodec.md).[mediaTypes](../interfaces/iphotocodec.md#mediatypes) ___ ### photoHeight -• **photoHeight**(): *number* +• `get` **photoHeight**(): `number` Gets the height of the photo in pixels represented by the current instance. -**Returns:** *number* +#### Returns -Implementation of: [IPhotoCodec](../interfaces/iphotocodec.md).[photoHeight](../interfaces/iphotocodec.md#photoheight) +`number` + +#### Implementation of + +[IPhotoCodec](../interfaces/iphotocodec.md).[photoHeight](../interfaces/iphotocodec.md#photoheight) ___ ### photoQuality -• **photoQuality**(): *number* +• `get` **photoQuality**(): `number` Gets the format-specific quality identifier of the photo represented by the current instance. A value of `0` means that there was no quality indicator for the format or file. -**Returns:** *number* +#### Returns + +`number` -Implementation of: [IPhotoCodec](../interfaces/iphotocodec.md).[photoQuality](../interfaces/iphotocodec.md#photoquality) +#### Implementation of + +[IPhotoCodec](../interfaces/iphotocodec.md).[photoQuality](../interfaces/iphotocodec.md#photoquality) ___ ### photoWidth -• **photoWidth**(): *number* +• `get` **photoWidth**(): `number` Gets the width of the photo in pixels represented by the current instance. -**Returns:** *number* +#### Returns + +`number` -Implementation of: [IPhotoCodec](../interfaces/iphotocodec.md).[photoWidth](../interfaces/iphotocodec.md#photowidth) +#### Implementation of + +[IPhotoCodec](../interfaces/iphotocodec.md).[photoWidth](../interfaces/iphotocodec.md#photowidth) ___ ### videoHeight -• **videoHeight**(): *number* +• `get` **videoHeight**(): `number` Gets the height of the video represented by the current instance. This value is equal to the first non-zero video height; -**Returns:** *number* +#### Returns + +`number` -Implementation of: [IVideoCodec](../interfaces/ivideocodec.md).[videoHeight](../interfaces/ivideocodec.md#videoheight) +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[videoHeight](../interfaces/ivideocodec.md#videoheight) ___ ### videoWidth -• **videoWidth**(): *number* +• `get` **videoWidth**(): `number` Gets the width of the video represented by the current instance. This value is equal to the first non-zero video height. -**Returns:** *number* +#### Returns + +`number` + +#### Implementation of -Implementation of: [IVideoCodec](../interfaces/ivideocodec.md).[videoWidth](../interfaces/ivideocodec.md#videowidth) +[IVideoCodec](../interfaces/ivideocodec.md).[videoWidth](../interfaces/ivideocodec.md#videowidth) diff --git a/docs/classes/riffbitmapinfoheader.md b/docs/classes/riffbitmapinfoheader.md new file mode 100644 index 00000000..682361f0 --- /dev/null +++ b/docs/classes/riffbitmapinfoheader.md @@ -0,0 +1,255 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / RiffBitmapInfoHeader + +# Class: RiffBitmapInfoHeader + +This class provides a representation of a Microsoft BitmapInfoHeader structure which provides +information about the dimensions and color format of a device-independent bitmap. + +**`link`** https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapinfoheader + +## Implements + +- [`IVideoCodec`](../interfaces/ivideocodec.md) + +## Table of contents + +### Constructors + +- [constructor](riffbitmapinfoheader.md#constructor) + +### Properties + +- [FOURCC\_CODES](riffbitmapinfoheader.md#fourcc_codes) + +### Accessors + +- [bitCount](riffbitmapinfoheader.md#bitcount) +- [colorsUsed](riffbitmapinfoheader.md#colorsused) +- [compressionId](riffbitmapinfoheader.md#compressionid) +- [description](riffbitmapinfoheader.md#description) +- [durationMilliseconds](riffbitmapinfoheader.md#durationmilliseconds) +- [imageSize](riffbitmapinfoheader.md#imagesize) +- [importantColors](riffbitmapinfoheader.md#importantcolors) +- [mediaTypes](riffbitmapinfoheader.md#mediatypes) +- [planes](riffbitmapinfoheader.md#planes) +- [videoHeight](riffbitmapinfoheader.md#videoheight) +- [videoWidth](riffbitmapinfoheader.md#videowidth) +- [xPixelsPerMeter](riffbitmapinfoheader.md#xpixelspermeter) +- [yPixelsPerMeter](riffbitmapinfoheader.md#ypixelspermeter) + +## Constructors + +### constructor + +• **new RiffBitmapInfoHeader**(`data`, `offset`) + +Constructs and initializes a new instance by reading the raw structure from a specified +position in the provided [ByteVector](bytevector.md). + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing the raw data structure | +| `offset` | `number` | Index into `data` where the raw bitmap info header begins. Must be a positive, 32-bit integer. | + +## Properties + +### FOURCC\_CODES + +▪ `Static` `Readonly` **FOURCC\_CODES**: `Object` + +#### Index signature + +▪ [key: `number`]: `string` + +## Accessors + +### bitCount + +• `get` **bitCount**(): `number` + +Gets the number of bits per pixel (bpp). For uncompressed formats, this value is the average +number of bits per pixel. For compressed formats, this value is the implied bit depth of the +uncompressed image, after the image has been decoded. + +#### Returns + +`number` + +___ + +### colorsUsed + +• `get` **colorsUsed**(): `number` + +Gets the number of color indices in the color table that are actually used by the bitmap. + +#### Returns + +`number` + +___ + +### compressionId + +• `get` **compressionId**(): `number` + +Gets the compression ID for the image. + +**`remarks`** For compressed video and YUV formats, this is a FOURCC code, specified as a DWORD in + little-endian order. For more information, see + [https://docs.microsoft.com/en-us/windows/win32/directshow/fourcc-codes](https://docs.microsoft.com/en-us/windows/win32/directshow/fourcc-codes) and + [https://www.fourcc.org/fourcc.php](https://www.fourcc.org/fourcc.php). For uncompressed RGB formats, the following + values are possible: + * `BI_RGB` = `0x00000000` => Uncompressed RGB + * `BI_BITFIELDS` = `0x00000003` => Uncompressed RGB with color masks, valid for 16 and + 32 bpp bitmaps. + + [description](riffbitmapinfoheader.md#description) makes a best guess attempt to determine the name of the compression + codec used. + +#### Returns + +`number` + +___ + +### description + +• `get` **description**(): `string` + +Gets a text description of the media represented by the current instance. + +#### Returns + +`string` + +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[description](../interfaces/ivideocodec.md#description) + +___ + +### durationMilliseconds + +• `get` **durationMilliseconds**(): `number` + +Duration of the media in milliseconds represented by the current instance. + +#### Returns + +`number` + +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[durationMilliseconds](../interfaces/ivideocodec.md#durationmilliseconds) + +___ + +### imageSize + +• `get` **imageSize**(): `number` + +Gets the size, in bytes, of the image. This can be set to 0 for uncompressed RGB bitmaps. + +#### Returns + +`number` + +___ + +### importantColors + +• `get` **importantColors**(): `number` + +Gets the number of color indices that are considered important for displaying the bitmap. If +this value is `0`, all colors are important. + +#### Returns + +`number` + +___ + +### mediaTypes + +• `get` **mediaTypes**(): [`MediaTypes`](../enums/mediatypes.md) + +Types of media represented by the current instance, bitwise combined. + +#### Returns + +[`MediaTypes`](../enums/mediatypes.md) + +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[mediaTypes](../interfaces/ivideocodec.md#mediatypes) + +___ + +### planes + +• `get` **planes**(): `number` + +Gets the number of planes in the image. This value is pretty much universally set to 1. + +#### Returns + +`number` + +___ + +### videoHeight + +• `get` **videoHeight**(): `number` + +Height of the video in pixels represented by the current instance. + +#### Returns + +`number` + +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[videoHeight](../interfaces/ivideocodec.md#videoheight) + +___ + +### videoWidth + +• `get` **videoWidth**(): `number` + +Width of the video in pixels represented by the current instance. + +#### Returns + +`number` + +#### Implementation of + +[IVideoCodec](../interfaces/ivideocodec.md).[videoWidth](../interfaces/ivideocodec.md#videowidth) + +___ + +### xPixelsPerMeter + +• `get` **xPixelsPerMeter**(): `number` + +Gets the horizontal resolution, in pixels per meter, of the target device for the bitmap. + +#### Returns + +`number` + +___ + +### yPixelsPerMeter + +• `get` **yPixelsPerMeter**(): `number` + +Gets the vertical resolution, in pixels per meter, of the target device for the bitmap. + +#### Returns + +`number` diff --git a/docs/classes/rifffile.md b/docs/classes/rifffile.md new file mode 100644 index 00000000..e01c4dc5 --- /dev/null +++ b/docs/classes/rifffile.md @@ -0,0 +1,837 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / RiffFile + +# Class: RiffFile + +## Hierarchy + +- [`File`](file.md) + + ↳ **`RiffFile`** + +## Table of contents + +### Constructors + +- [constructor](rifffile.md#constructor) + +### Properties + +- [\_fileAbstraction](rifffile.md#_fileabstraction) +- [\_fileStream](rifffile.md#_filestream) +- [\_invariantEndPosition](rifffile.md#_invariantendposition) +- [\_invariantStartPosition](rifffile.md#_invariantstartposition) +- [\_tagTypesOnDisk](rifffile.md#_tagtypesondisk) +- [FILE\_IDENTIFIER](rifffile.md#file_identifier) + +### Accessors + +- [corruptionReasons](rifffile.md#corruptionreasons) +- [fileAbstraction](rifffile.md#fileabstraction) +- [invariantEndPosition](rifffile.md#invariantendposition) +- [invariantStartPosition](rifffile.md#invariantstartposition) +- [isPossiblyCorrupt](rifffile.md#ispossiblycorrupt) +- [isWritable](rifffile.md#iswritable) +- [length](rifffile.md#length) +- [mimeType](rifffile.md#mimetype) +- [mode](rifffile.md#mode) +- [name](rifffile.md#name) +- [position](rifffile.md#position) +- [properties](rifffile.md#properties) +- [tag](rifffile.md#tag) +- [tagTypes](rifffile.md#tagtypes) +- [tagTypesOnDisk](rifffile.md#tagtypesondisk) +- [bufferSize](rifffile.md#buffersize) + +### Methods + +- [dispose](rifffile.md#dispose) +- [find](rifffile.md#find) +- [getTag](rifffile.md#gettag) +- [insert](rifffile.md#insert) +- [markAsCorrupt](rifffile.md#markascorrupt) +- [preSave](rifffile.md#presave) +- [rFind](rifffile.md#rfind) +- [readBlock](rifffile.md#readblock) +- [removeBlock](rifffile.md#removeblock) +- [removeTags](rifffile.md#removetags) +- [save](rifffile.md#save) +- [seek](rifffile.md#seek) +- [truncate](rifffile.md#truncate) +- [writeBlock](rifffile.md#writeblock) +- [addFileType](rifffile.md#addfiletype) +- [addFileTypeResolver](rifffile.md#addfiletyperesolver) +- [createFromAbstraction](rifffile.md#createfromabstraction) +- [createFromPath](rifffile.md#createfrompath) +- [removeFileType](rifffile.md#removefiletype) +- [removeFileTypeResolver](rifffile.md#removefiletyperesolver) + +## Constructors + +### constructor + +• **new RiffFile**(`file`, `propertiesStyle`) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `file` | `string` \| `IFileAbstraction` | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | + +#### Overrides + +[File](file.md).[constructor](file.md#constructor) + +## Properties + +### \_fileAbstraction + +• `Protected` **\_fileAbstraction**: `IFileAbstraction` + +#### Inherited from + +[File](file.md).[_fileAbstraction](file.md#_fileabstraction) + +___ + +### \_fileStream + +• `Protected` **\_fileStream**: `IStream` + +#### Inherited from + +[File](file.md).[_fileStream](file.md#_filestream) + +___ + +### \_invariantEndPosition + +• `Protected` **\_invariantEndPosition**: `number` = `-1` + +#### Inherited from + +[File](file.md).[_invariantEndPosition](file.md#_invariantendposition) + +___ + +### \_invariantStartPosition + +• `Protected` **\_invariantStartPosition**: `number` = `-1` + +#### Inherited from + +[File](file.md).[_invariantStartPosition](file.md#_invariantstartposition) + +___ + +### \_tagTypesOnDisk + +• `Protected` **\_tagTypesOnDisk**: [`TagTypes`](../enums/tagtypes.md) + +#### Inherited from + +[File](file.md).[_tagTypesOnDisk](file.md#_tagtypesondisk) + +___ + +### FILE\_IDENTIFIER + +▪ `Static` `Readonly` **FILE\_IDENTIFIER**: [`ByteVector`](bytevector.md) + +Identifier used to recognize a RIFF file. + +## Accessors + +### corruptionReasons + +• `get` **corruptionReasons**(): `string`[] + +Reasons for which this file is marked as corrupt. + +#### Returns + +`string`[] + +___ + +### fileAbstraction + +• `get` **fileAbstraction**(): `IFileAbstraction` + +Gets the {@link IFileAbstraction} representing the file. + +#### Returns + +`IFileAbstraction` + +___ + +### invariantEndPosition + +• `get` **invariantEndPosition**(): `number` + +Gets the position at which the invariant (media) portion of the current instance ends. If +the value could not be determined, `-1` is returned; + +#### Returns + +`number` + +___ + +### invariantStartPosition + +• `get` **invariantStartPosition**(): `number` + +Gets the position at which the invariant (media) portion of the current instance begins. If +the value could not be determined, `-1` is returned. + +#### Returns + +`number` + +___ + +### isPossiblyCorrupt + +• `get` **isPossiblyCorrupt**(): `boolean` + +Indicates whether or not this file may be corrupt. Files with unknown corruptions should not +be written. + +#### Returns + +`boolean` + +___ + +### isWritable + +• `get` **isWritable**(): `boolean` + +Indicates whether or not tags can be written back to the current file. + +#### Returns + +`boolean` + +___ + +### length + +• `get` **length**(): `number` + +Gets the length of the file represented by the current instance. Value will be 0 if the file +is not open for reading; + +#### Returns + +`number` + +___ + +### mimeType + +• `get` **mimeType**(): `string` + +Gets the MimeType of the file as determined during creation of the instance. + +#### Returns + +`string` + +___ + +### mode + +• `get` **mode**(): [`FileAccessMode`](../enums/fileaccessmode.md) + +Gets the file access mode in use by the current instance. + +#### Returns + +[`FileAccessMode`](../enums/fileaccessmode.md) + +• `set` **mode**(`val`): `void` + +Sets the file access mode in use by the current instance. Changing the value will cause the +stream currently in use to be closed, except when a change is made from +[FileAccessMode.Write](../enums/fileaccessmode.md#write) to [FileAccessMode.Read](../enums/fileaccessmode.md#read) which has no effect. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `val` | [`FileAccessMode`](../enums/fileaccessmode.md) | File access mode to change to | + +#### Returns + +`void` + +___ + +### name + +• `get` **name**(): `string` + +Gets the name of the file as stored in its file abstraction. + +#### Returns + +`string` + +___ + +### position + +• `get` **position**(): `number` + +Gets the seek position in the internal stream used by the current instance. Value will be 0 +if the file is not open for reading + +#### Returns + +`number` + +___ + +### properties + +• `get` **properties**(): [`Properties`](properties.md) + +Gets the media properties of the file represented by the current instance. + +**`inheritdoc`** + +#### Returns + +[`Properties`](properties.md) + +___ + +### tag + +• `get` **tag**(): [`Tag`](tag.md) + +Gets an abstract representation of all tags stored in the current instance. + +**`inheritdoc`** + +#### Returns + +[`Tag`](tag.md) + +___ + +### tagTypes + +• `get` **tagTypes**(): [`TagTypes`](../enums/tagtypes.md) + +Gets the tag types contained in the current instance. + +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### tagTypesOnDisk + +• `get` **tagTypesOnDisk**(): [`TagTypes`](../enums/tagtypes.md) + +Gets the tag types contained in the physical file represented by the current instance. + +#### Returns + +[`TagTypes`](../enums/tagtypes.md) + +___ + +### bufferSize + +• `Static` `get` **bufferSize**(): `number` + +Gets the buffer size to use when reading large blocks of data + +#### Returns + +`number` + +## Methods + +### dispose + +▸ **dispose**(): `void` + +Dispose the current instance. Equivalent to setting the mode to closed. + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[dispose](file.md#dispose) + +___ + +### find + +▸ **find**(`pattern`, `startPosition?`, `before?`): `number` + +Searches forward through a file for a specified pattern, starting at a specified offset. + +**`throws`** Error Thrown if `pattern` is not provided or `startPosition` is not a + positive, safe integer. + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be smaller than the | +| `startPosition` | `number` | `0` | Seek position to start searching. Must be positive, safe integer. | +| `before?` | [`ByteVector`](bytevector.md) | `undefined` | Optional pattern that the searched for pattern must appear before. If this pattern is found first, `-1` is returned. | + +#### Returns + +`number` + +Index at which the value was found. If not found, `-1` is returned. + +#### Inherited from + +[File](file.md).[find](file.md#find) + +___ + +### getTag + +▸ **getTag**(`type`, `create`): [`Tag`](tag.md) + +Gets a tag of the specified type from the current instance, optionally creating a new tag if +possible. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `type` | [`TagTypes`](../enums/tagtypes.md) | Type of tag to read. | +| `create` | `boolean` | Whether or not to try and create the tag if one is not found. `true` does not guarantee the tag will be created. For example, trying to create an ID3v2 tag on an OGG Vorbis file will always fail. | + +#### Returns + +[`Tag`](tag.md) + +Tag object containing the tag that was found in or added to the current instance. + If no matching tag was found and none was created, `undefined` is returned. It is safe + to assume that if `undefined` is not returned, the returned tag can be cast to the + appropriate type. + +#### Overrides + +[File](file.md).[getTag](file.md#gettag) + +___ + +### insert + +▸ **insert**(`data`, `start`, `replace?`): `void` + +Inserts a specified block of data into the file represented by the current instance, at a +specified location, replacing a specified number of bytes. + +**`throws`** Error Thrown when: 1) data is falsey, 2) start is not a safe, positive number, or 3) + replace is not a safe, positive number + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | `undefined` | Data to insert into the file. | +| `start` | `number` | `undefined` | Index into the file at which to insert the data. Must be safe positive integer. | +| `replace` | `number` | `0` | Number of bytes to replace. Typically this is the original size of the data block so that a new block will replace the old one. | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[insert](file.md#insert) + +___ + +### markAsCorrupt + +▸ **markAsCorrupt**(`reason`): `void` + +Mark the current instance as corrupt. NOTE: Not intended to be used outside of this library. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `reason` | `string` | Reason why this file is considered to be corrupt | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[markAsCorrupt](file.md#markascorrupt) + +___ + +### preSave + +▸ `Protected` **preSave**(): `void` + +Prepares to save the file. This must be called at the beginning of every File.save() method. + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[preSave](file.md#presave) + +___ + +### rFind + +▸ **rFind**(`pattern`, `startPosition?`, `after?`): `number` + +Searched backwards through a file for a specified pattern, starting at a specified offset. + +**`throws`** Error Thrown if `pattern` was not provided or if `startPosition` is + not a safe, positive integer. + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `pattern` | [`ByteVector`](bytevector.md) | `undefined` | Pattern to search for in the current instance. Must be shorter than the [bufferSize](rifffile.md#buffersize) | +| `startPosition` | `number` | `0` | Seek position from which to start searching. | +| `after?` | [`ByteVector`](bytevector.md) | `undefined` | Pattern that the searched for pattern must appear after. If this pattern is found first, `-1` is returned. | + +#### Returns + +`number` + +Index at which the value wa found. If not found, `-1` is returned. + +#### Inherited from + +[File](file.md).[rFind](file.md#rfind) + +___ + +### readBlock + +▸ **readBlock**(`length`): [`ByteVector`](bytevector.md) + +Reads a specified number of bytes at the current seek position from the current position. +This method reads the block of data at the current seek position. To change the seek +position, use [File.seek](file.md#seek). + +**`throws`** Error Thrown when `length` is not a positive, safe integer. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to read. | + +#### Returns + +[`ByteVector`](bytevector.md) + +ByteVector Object containing the data read from the current instance. + +#### Inherited from + +[File](file.md).[readBlock](file.md#readblock) + +___ + +### removeBlock + +▸ **removeBlock**(`start`, `length`): `void` + +Removes a specified block of data from the file represented by the current instance. + +**`throws`** Error thrown if 1) start is not a safe, positive integer or 2) length must be a safe + integer. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `start` | `number` | Index into the file at which to remove data. Must be safe, positive integer. | +| `length` | `number` | Number of bytes to remove. Must be a safe integer. | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[removeBlock](file.md#removeblock) + +___ + +### removeTags + +▸ **removeTags**(`types`): `void` + +Removes a set of tag types from the current instance. In order to remove all tags from a +file, pass [TagTypes.AllTags](../enums/tagtypes.md#alltags) as `types` + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `types` | [`TagTypes`](../enums/tagtypes.md) | Bitwise combined [TagTypes](../enums/tagtypes.md) value containing the tag types to be removed from the file | + +#### Returns + +`void` + +#### Overrides + +[File](file.md).[removeTags](file.md#removetags) + +___ + +### save + +▸ **save**(): `void` + +Saves the changes made in the current instance to the file it represents. + +#### Returns + +`void` + +#### Overrides + +[File](file.md).[save](file.md#save) + +___ + +### seek + +▸ **seek**(`offset`, `origin?`): `void` + +Moves the read/write pointer to a specified offset in the current instance, relative to a +specified origin. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `offset` | `number` | Byte offset to seek to. Must be a safe, positive integer. | +| `origin` | `SeekOrigin` | Origin from which to seek | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[seek](file.md#seek) + +___ + +### truncate + +▸ `Protected` **truncate**(`length`): `void` + +Resizes the current instance to a specific number of bytes. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `length` | `number` | Number of bytes to resize the file to, must be a safe, positive integer. | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[truncate](file.md#truncate) + +___ + +### writeBlock + +▸ **writeBlock**(`data`): `void` + +Writes a block of data to the file represented by the current instance at the current seek +position. This will overwrite any existing data at the seek position and append new data to +the file if writing past the current end. + +**`throws`** Error Thrown when `data` is not provided. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | ByteVector containing data to the current instance. | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[writeBlock](file.md#writeblock) + +___ + +### addFileType + +▸ `Static` **addFileType**(`mimeType`, `constructor`, `override?`): `void` + +Registers the constructor for a subclass of [File](file.md) with the MimeType it is associated +with. Optionally, the MimeType can be forcefully overridden if it was already registered. + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `mimeType` | `string` | `undefined` | MimeType to register this subclass constructor to. | +| `constructor` | [`FileTypeConstructor`](../modules.md#filetypeconstructor) | `undefined` | Constructor for a subclass of [File](file.md) that will be called if a file with a MimeType of `mimeType` is created. | +| `override` | `boolean` | `false` | If `true` and a subclass of [File](file.md) was already registered to `mimeType`, it will be forcefully overridden. If `false`, an {@link Error} will be thrown if a subclass already registered to the MimeType.} | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[addFileType](file.md#addfiletype) + +___ + +### addFileTypeResolver + +▸ `Static` **addFileTypeResolver**(`resolver`): `void` + +Registers a [FileTypeResolver](../modules.md#filetyperesolver) to the front of the list of file type resolvers. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | Function to handle resolving a subclass of [File](file.md) from an {@link IFileAbstraction} | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[addFileTypeResolver](file.md#addfiletyperesolver) + +___ + +### createFromAbstraction + +▸ `Static` **createFromAbstraction**(`abstraction`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) + +Creates a new instance of a [File](file.md) subclass for a specified file abstraction, MimeType, +and property read style. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | Object to use when reading/writing from the current instance. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted, [ReadStyle.Average](../enums/readstyle.md#average) is used. | + +#### Returns + +[`File`](file.md) + +New instance of [File](file.md) as read from the specified abstraction. + +#### Inherited from + +[File](file.md).[createFromAbstraction](file.md#createfromabstraction) + +___ + +### createFromPath + +▸ `Static` **createFromPath**(`filePath`, `mimeType?`, `propertiesStyle?`): [`File`](file.md) + +Creates a new instance of [File](file.md) subclass for a specified file path, MimeType, and +property read style. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `filePath` | `string` | Path to the file to read/write. | +| `mimeType?` | `string` | Optional, MimeType to use for determining the subclass of [File](file.md) to return. If omitted, the MimeType will be guessed based on the file's extension. | +| `propertiesStyle` | [`ReadStyle`](../enums/readstyle.md) | Optional, level of detail to use when reading the media information from the new instance. If omitted [ReadStyle.Average](../enums/readstyle.md#average) is used. | + +#### Returns + +[`File`](file.md) + +New instance of [File](file.md) as read from the specified path. + +#### Inherited from + +[File](file.md).[createFromPath](file.md#createfrompath) + +___ + +### removeFileType + +▸ `Static` **removeFileType**(`mimeType`): `void` + +Used for removing a file type constructor during unit testing + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `mimeType` | `string` | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[removeFileType](file.md#removefiletype) + +___ + +### removeFileTypeResolver + +▸ `Static` **removeFileTypeResolver**(`resolver`): `void` + +Used for removing a file type resolver during unit testing + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `resolver` | [`FileTypeResolver`](../modules.md#filetyperesolver) | + +#### Returns + +`void` + +#### Inherited from + +[File](file.md).[removeFileTypeResolver](file.md#removefiletyperesolver) diff --git a/docs/classes/rifflist.md b/docs/classes/rifflist.md new file mode 100644 index 00000000..8dfddafd --- /dev/null +++ b/docs/classes/rifflist.md @@ -0,0 +1,308 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / RiffList + +# Class: RiffList + +## Table of contents + +### Constructors + +- [constructor](rifflist.md#constructor) + +### Accessors + +- [length](rifflist.md#length) +- [stringType](rifflist.md#stringtype) + +### Methods + +- [clear](rifflist.md#clear) +- [containsKey](rifflist.md#containskey) +- [getValueAsUint](rifflist.md#getvalueasuint) +- [getValues](rifflist.md#getvalues) +- [getValuesAsStrings](rifflist.md#getvaluesasstrings) +- [removeValue](rifflist.md#removevalue) +- [render](rifflist.md#render) +- [renderEnclosed](rifflist.md#renderenclosed) +- [setValueFromUint](rifflist.md#setvaluefromuint) +- [setValues](rifflist.md#setvalues) +- [setValuesFromStrings](rifflist.md#setvaluesfromstrings) +- [fromData](rifflist.md#fromdata) +- [fromFile](rifflist.md#fromfile) + +## Constructors + +### constructor + +• **new RiffList**() + +## Accessors + +### length + +• `get` **length**(): `number` + +Gets the number of items in the current instance. + +#### Returns + +`number` + +___ + +### stringType + +• `get` **stringType**(): [`StringType`](../enums/stringtype.md) + +Gets the [StringType](../enums/stringtype.md) value used for parsing and rendering the contents of this list. + +#### Returns + +[`StringType`](../enums/stringtype.md) + +• `set` **stringType**(`value`): `void` + +Sets the [StringType](../enums/stringtype.md) value used for parsing and rendering the contents of this list. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | + +#### Returns + +`void` + +## Methods + +### clear + +▸ **clear**(): `void` + +Removes all elements from the list. + +#### Returns + +`void` + +___ + +### containsKey + +▸ **containsKey**(`id`): `boolean` + +Determines whether the current instance contains the specified key. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | Key to locate in the current instance | + +#### Returns + +`boolean` + +`true` if key exists, `false` otherwise + +___ + +### getValueAsUint + +▸ **getValueAsUint**(`id`): `number` + +Gets the value for a specified item in the current instance as an unsigned integer. The +first value that can be parsed as an int will be returned. `0` is returned if no matching +values exist. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values. Must be 4 bytes | + +#### Returns + +`number` + +___ + +### getValues + +▸ **getValues**(`id`): [`ByteVector`](bytevector.md)[] + +Gets the values for a specified item in the current instance as an array of +[ByteVector](bytevector.md). + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values. Must be 4 bytes | + +#### Returns + +[`ByteVector`](bytevector.md)[] + +___ + +### getValuesAsStrings + +▸ **getValuesAsStrings**(`id`): `string`[] + +Gets the values for a specified item as an array of strings. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values. Must be 4 bytes | + +#### Returns + +`string`[] + +___ + +### removeValue + +▸ **removeValue**(`id`): `void` + +Removes the item with the specified ID from the current instance. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to remove. Must be 4 bytes | + +#### Returns + +`void` + +___ + +### render + +▸ **render**(): [`ByteVector`](bytevector.md) + +Renders the current instance as a raw RIFF list. + +#### Returns + +[`ByteVector`](bytevector.md) + +___ + +### renderEnclosed + +▸ **renderEnclosed**(`id`): [`ByteVector`](bytevector.md) + +Renders the current instance enclosed in an item with a specified ID. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item in which to enclose the current instance. Must be 4 bytes. | + +#### Returns + +[`ByteVector`](bytevector.md) + +___ + +### setValueFromUint + +▸ **setValueFromUint**(`id`, `value`): `void` + +Sets the value for a specified item in the current instance to a uint. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values. Must be 4 bytes | +| `value` | `number` | Value to store in the item. Must be an unsigned integer | + +#### Returns + +`void` + +___ + +### setValues + +▸ **setValues**(`id`, ...`values`): `void` + +Sets the value for a specified item in the current instance to an array. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values. Must be 4 bytes | +| `...values` | [`ByteVector`](bytevector.md)[] | Array of [ByteVector](bytevector.md) to store in the specified item. If falsey or undefined, the item will be removed | + +#### Returns + +`void` + +___ + +### setValuesFromStrings + +▸ **setValuesFromStrings**(`id`, ...`values`): `void` + +Sets the value for a specified item in the current instance to an array of strings. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values. Must be 4 bytes | +| `...values` | `string`[] | Array of strings to store in the specified item. If falsey or undefined, the item will be removed | + +#### Returns + +`void` + +___ + +### fromData + +▸ `Static` **fromData**(`data`): [`RiffList`](rifflist.md) + +Constructs and initializes a new instance by reading the contents of a raw RIFF list stored +in a [ByteVector](bytevector.md) object. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Object containing a raw RIFF list to read into the new instance. | + +#### Returns + +[`RiffList`](rifflist.md) + +___ + +### fromFile + +▸ `Static` **fromFile**(`file`, `position`, `length`): [`RiffList`](rifflist.md) + +Constructs and initializes a new instance by reading the contents of a raw RIFF list from a +specified position in a file. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `file` | [`File`](file.md) | File containing the contents of the new instance | +| `position` | `number` | Index into the file where the the list begins, must be safe positive integer | +| `length` | `number` | Length of the list in bytes, must be a positive integer | + +#### Returns + +[`RiffList`](rifflist.md) diff --git a/docs/classes/rifflisttag.md b/docs/classes/rifflisttag.md new file mode 100644 index 00000000..0d4333fb --- /dev/null +++ b/docs/classes/rifflisttag.md @@ -0,0 +1,2530 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / RiffListTag + +# Class: RiffListTag + +Abstract class that provides support for reading/writing tags in the RIFF list format. + +## Hierarchy + +- [`Tag`](tag.md) + + ↳ **`RiffListTag`** + + ↳↳ [`InfoTag`](infotag.md) + + ↳↳ [`MovieIdTag`](movieidtag.md) + +## Table of contents + +### Constructors + +- [constructor](rifflisttag.md#constructor) + +### Properties + +- [tagTypes](rifflisttag.md#tagtypes) + +### Accessors + +- [album](rifflisttag.md#album) +- [albumArtists](rifflisttag.md#albumartists) +- [albumArtistsSort](rifflisttag.md#albumartistssort) +- [albumSort](rifflisttag.md#albumsort) +- [amazonId](rifflisttag.md#amazonid) +- [beatsPerMinute](rifflisttag.md#beatsperminute) +- [comment](rifflisttag.md#comment) +- [composers](rifflisttag.md#composers) +- [composersSort](rifflisttag.md#composerssort) +- [conductor](rifflisttag.md#conductor) +- [copyright](rifflisttag.md#copyright) +- [dateTagged](rifflisttag.md#datetagged) +- [description](rifflisttag.md#description) +- [disc](rifflisttag.md#disc) +- [discCount](rifflisttag.md#disccount) +- [firstAlbumArtist](rifflisttag.md#firstalbumartist) +- [firstAlbumArtistSort](rifflisttag.md#firstalbumartistsort) +- [firstComposer](rifflisttag.md#firstcomposer) +- [firstComposerSort](rifflisttag.md#firstcomposersort) +- [firstGenre](rifflisttag.md#firstgenre) +- [firstPerformer](rifflisttag.md#firstperformer) +- [firstPerformerSort](rifflisttag.md#firstperformersort) +- [genres](rifflisttag.md#genres) +- [grouping](rifflisttag.md#grouping) +- [initialKey](rifflisttag.md#initialkey) +- [isEmpty](rifflisttag.md#isempty) +- [isrc](rifflisttag.md#isrc) +- [joinedAlbumArtists](rifflisttag.md#joinedalbumartists) +- [joinedComposers](rifflisttag.md#joinedcomposers) +- [joinedGenres](rifflisttag.md#joinedgenres) +- [joinedPerformers](rifflisttag.md#joinedperformers) +- [joinedPerformersSort](rifflisttag.md#joinedperformerssort) +- [lyrics](rifflisttag.md#lyrics) +- [musicBrainzArtistId](rifflisttag.md#musicbrainzartistid) +- [musicBrainzDiscId](rifflisttag.md#musicbrainzdiscid) +- [musicBrainzReleaseArtistId](rifflisttag.md#musicbrainzreleaseartistid) +- [musicBrainzReleaseCountry](rifflisttag.md#musicbrainzreleasecountry) +- [musicBrainzReleaseGroupId](rifflisttag.md#musicbrainzreleasegroupid) +- [musicBrainzReleaseId](rifflisttag.md#musicbrainzreleaseid) +- [musicBrainzReleaseStatus](rifflisttag.md#musicbrainzreleasestatus) +- [musicBrainzReleaseType](rifflisttag.md#musicbrainzreleasetype) +- [musicBrainzTrackId](rifflisttag.md#musicbrainztrackid) +- [musicIpId](rifflisttag.md#musicipid) +- [performers](rifflisttag.md#performers) +- [performersRole](rifflisttag.md#performersrole) +- [performersSort](rifflisttag.md#performerssort) +- [pictures](rifflisttag.md#pictures) +- [publisher](rifflisttag.md#publisher) +- [remixedBy](rifflisttag.md#remixedby) +- [replayGainAlbumGain](rifflisttag.md#replaygainalbumgain) +- [replayGainAlbumPeak](rifflisttag.md#replaygainalbumpeak) +- [replayGainTrackGain](rifflisttag.md#replaygaintrackgain) +- [replayGainTrackPeak](rifflisttag.md#replaygaintrackpeak) +- [stringType](rifflisttag.md#stringtype) +- [subtitle](rifflisttag.md#subtitle) +- [title](rifflisttag.md#title) +- [titleSort](rifflisttag.md#titlesort) +- [track](rifflisttag.md#track) +- [trackCount](rifflisttag.md#trackcount) +- [year](rifflisttag.md#year) + +### Methods + +- [clear](rifflisttag.md#clear) +- [copyTo](rifflisttag.md#copyto) +- [getFirstValueAsString](rifflisttag.md#getfirstvalueasstring) +- [getValueAsUint](rifflisttag.md#getvalueasuint) +- [getValues](rifflisttag.md#getvalues) +- [getValuesAsStrings](rifflisttag.md#getvaluesasstrings) +- [initializeFromData](rifflisttag.md#initializefromdata) +- [initializeFromEmpty](rifflisttag.md#initializefromempty) +- [initializeFromFile](rifflisttag.md#initializefromfile) +- [initializeFromList](rifflisttag.md#initializefromlist) +- [removeValue](rifflisttag.md#removevalue) +- [render](rifflisttag.md#render) +- [renderEnclosed](rifflisttag.md#renderenclosed) +- [renderEnclosedInternal](rifflisttag.md#renderenclosedinternal) +- [setInfoTag](rifflisttag.md#setinfotag) +- [setValueFromUint](rifflisttag.md#setvaluefromuint) +- [setValues](rifflisttag.md#setvalues) +- [setValuesFromStrings](rifflisttag.md#setvaluesfromstrings) +- [firstInGroup](rifflisttag.md#firstingroup) +- [isFalsyOrLikeEmpty](rifflisttag.md#isfalsyorlikeempty) +- [joinGroup](rifflisttag.md#joingroup) + +## Constructors + +### constructor + +• `Protected` **new RiffListTag**() + +#### Overrides + +[Tag](tag.md).[constructor](tag.md#constructor) + +## Properties + +### tagTypes + +• `Abstract` **tagTypes**: [`TagTypes`](../enums/tagtypes.md) + +Gets the tag types contained in the current instance. A bit wise combined [TagTypes](../enums/tagtypes.md) +containing the tag types contained in the current instance. + +**`remarks`** For a standard tag, the value should be intuitive. For example, Id3v2Tag objects have + a value of [TagTypes.Id3v2](../enums/tagtypes.md#id3v2). However, for CombinedTag type objects, they may + contain multiple or no types. + +#### Inherited from + +[Tag](tag.md).[tagTypes](tag.md#tagtypes) + +## Accessors + +### album + +• `get` **album**(): `string` + +Gets the album of the media represented by the current instance. For video media, this +represents the collection the video belongs to. + +**`remarks`** This field represents the name of the album the media belongs to. In the case of a + boxed set, it should be the name of the entire set rather than the individual disc. In + the case of a series, this should be the name of the series, rather than the season of a + series. + For example, "Kintsugi" (an album by Death Cab for Cutie), "The Complete Red Green Show" + (a boxed set of TV episodes), or "Shark Tank" (a series with several seasons). + +#### Returns + +`string` + +Album of the media represented by the current instance or `undefined` if no value + is present + +• `set` **album**(`value`): `void` + +Sets the album of the media represented by the current instance. For video media, this +represents the collection the video belongs to. + +**`remarks`** This field represents the name of the album the media belongs to. In the case of a + boxed set, it should be the name of the entire set rather than the individual disc. In + the case of a series, this should be the name of the series, rather than the season of a + series. + For example, "Kintsugi" (an album by Death Cab for Cutie), "The Complete Red Green Show" + (a boxed set of TV episodes), or "Shark Tank" (a series with several seasons). + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Album of the media represented by the current instance or `undefined` if no value + is present + +___ + +### albumArtists + +• `get` **albumArtists**(): `string`[] + +Gets the band or artist who is credited credited in the creation of the entire album or +collection containing the media described by the current instance. + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple artist. For example, if an album has several artists, sorting by artist + will split up albums by the same artist. Having a single album artist for an entire + album solves this problem. + As this value is to be used as a sorting key, it should be used with less variation + than [performers](rifflisttag.md#performers). Where performers can be broken into multiple artists, it is + best to stick to a single name. Eg, "Super8 & Tab" + +#### Returns + +`string`[] + +Band or artist credited with the creation of the entire album or collection + containing the media described by the current instance or an empty array if no value is + present + +• `set` **albumArtists**(`value`): `void` + +Sets the bands or artists who is credited credited in the creation of the entire album or +collection containing the media described by the current instance. + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple artist. For example, if an album has several artists, sorting by artist + will split up albums by the same artist. Having a single album artist for an entire + album solves this problem. + As this value is to be used as a sorting key, it should be used with less variation + than [performers](rifflisttag.md#performers). Where performers can be broken into multiple artists, it is + best to stick to a single name. Eg, "Super8 & Tab" + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present | + +#### Returns + +`void` + +Band or artist credited with the creation of the entire album or collection + containing the media described by the current instance or an empty array if no value is + present + +___ + +### albumArtistsSort + +• `get` **albumArtistsSort**(): `string`[] + +Gets the sortable names of the bands/artists who are credited with creating the entire +album or collection containing the media described by the current instance. + +**`see`** albumArtists + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last by last name. For example "Ben Folds" might be sorted as + "Folds, Ben". + As this value is to be used as a sorting key, it should be used with less variation than + [performers](rifflisttag.md#performers). Where [performers](rifflisttag.md#performers) can be broken into multiple performers, it is + best to stick to a single album artist. Eg, "Van Buuren, Armin" + +#### Returns + +`string`[] + +Sortable names for the bands/artists are credited with the creation of the entire + album or collection containing the media described by the current instance, or an empty + array if no value is present. + +• `set` **albumArtistsSort**(`value`): `void` + +Sets the sortable names of the bands/artists who are credited with creating the entire +album or collection containing the media described by the current instance. + +**`see`** albumArtists + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last by last name. For example "Ben Folds" might be sorted as + "Folds, Ben". + As this value is to be used as a sorting key, it should be used with less variation than + [performers](rifflisttag.md#performers). Where [performers](rifflisttag.md#performers) can be broken into multiple performers, it is + best to stick to a single album artist. Eg, "Van Buuren, Armin" + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the bands/artists are credited with the creation of the entire + album or collection containing the media described by the current instance, or an empty + array if no value is present. + +___ + +### albumSort + +• `get` **albumSort**(): `string` + +Gets the sortable name of the album title of the media represented by the current instance. + +**`see`** album + +**`remarks`** This field is typically optional but aids in sort of compilations or albums with + similar titles. + +#### Returns + +`string` + +Sortable name for the album title of the media or `undefined` if the value is not + present + +• `set` **albumSort**(`value`): `void` + +Sets the sortable name of the album title of the media represented by the current instance. + +**`see`** album + +**`remarks`** This field is typically optional but aids in sort of compilations or albums with + similar titles. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name for the album title of the media or `undefined` if the value is not present | + +#### Returns + +`void` + +Sortable name for the album title of the media or `undefined` if the value is not + present + +___ + +### amazonId + +• `get` **amazonId**(): `string` + +Gets the Amazon ID of the media represented by the current instance. + +**`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely + identify the particular track or album in the Amazon catalog. + +#### Returns + +`string` + +Amazon ID of the media represented by the current instance or `undefined` if no + value is present + +• `set` **amazonId**(`value`): `void` + +Sets the Amazon ID of the media represented by the current instance. + +**`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely + identify the particular track or album in the Amazon catalog. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Amazon ID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Amazon ID of the media represented by the current instance or `undefined` if no + value is present + +___ + +### beatsPerMinute + +• `get` **beatsPerMinute**(): `number` + +Gets the number of beats per minute in the audio of the media represented by the current +instance. + +**`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be + calculated from the audio or pulled from a database. + +#### Returns + +`number` + +Beats per minute of the audio in the media represented by the current instance, or + `0` if not specified + +• `set` **beatsPerMinute**(`value`): `void` + +Sets the number of beats per minute in the audio of the media represented by the current +instance. + +**`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be + calculated from the audio or pulled from a database. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Beats per minute of the audio in the media represented by the current instance, or `0` if not specified | + +#### Returns + +`void` + +Beats per minute of the audio in the media represented by the current instance, or + `0` if not specified + +___ + +### comment + +• `get` **comment**(): `string` + +Gets a user comment on the media represented by the current instance. + +**`remarks`** This field should be used to store user notes and comments. There is no constraint on + what text can be stored here, but it should not contain programmatic data. + Because this field contains notes the the user might think of while consuming the media, + it may be useful for an application to make this field easily accessible, perhaps even + including it in the main interface. + +#### Returns + +`string` + +User comments on the media represented by the current instance or `undefined` if + the value is not present + +• `set` **comment**(`value`): `void` + +Sets a user comment on the media represented by the current instance. + +**`remarks`** This field should be used to store user notes and comments. There is no constraint on + what text can be stored here, but it should not contain programmatic data. + Because this field contains notes the the user might think of while consuming the media, + it may be useful for an application to make this field easily accessible, perhaps even + including it in the main interface. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | User comments on the media represented by the current instance or `undefined` if the value is not present | + +#### Returns + +`void` + +User comments on the media represented by the current instance or `undefined` if + the value is not present + +___ + +### composers + +• `get` **composers**(): `string`[] + +Gets the composers of the media represented by the current instance. + +**`remarks`** This field represents the composers, song writers, script writers, or persons who + claim authorship of the media. + +#### Returns + +`string`[] + +Composers of the media represented by the current instance of an empty array if no + value is present. + +• `set` **composers**(`value`): `void` + +Sets the composers of the media represented by the current instance. + +**`remarks`** This field represents the composers, song writers, script writers, or persons who + claim authorship of the media. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Composers of the media represented by the current instance of an empty array if no value is present. | + +#### Returns + +`void` + +Composers of the media represented by the current instance of an empty array if no + value is present. + +___ + +### composersSort + +• `get` **composersSort**(): `string`[] + +Gets the sortable names of the composers of the media represented by the current instance. + +**`see`** composers + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple composers. + +#### Returns + +`string`[] + +Sortable names for the composers of the media represented by the current instance + or an empty array if no value is present. + +• `set` **composersSort**(`value`): `void` + +Sets the sortable names of the composers of the media represented by the current instance. + +**`see`** composers + +**`remarks`** This field is typically optional but aids in the sorting of compilations or albums + with multiple composers. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the composers of the media represented by the current instance + or an empty array if no value is present. + +___ + +### conductor + +• `get` **conductor**(): `string` + +Gets the conductor or director of the media represented by the current instance. + +**`remarks`** This field is most useful for organizing classical music and movies. + +#### Returns + +`string` + +Conductor or director of the media represented by the current instance or + `undefined` if no value present. + +• `set` **conductor**(`value`): `void` + +Sets the conductor or director of the media represented by the current instance. + +**`remarks`** This field is most useful for organizing classical music and movies. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Conductor or director of the media represented by the current instance or `undefined` if no value present. | + +#### Returns + +`void` + +Conductor or director of the media represented by the current instance or + `undefined` if no value present. + +___ + +### copyright + +• `get` **copyright**(): `string` + +Gets the copyright information for the media represented by the current instance. + +**`remarks`** This field should be used for storing copyright information. It may be useful to show + this information somewhere in the program while the media is playing. + Players should not support editing this field, but media creation tools should + definitely allow modification. + +#### Returns + +`string` + +Copyright information for the media represented by the current instance or + `undefined` if no value is present. + +• `set` **copyright**(`value`): `void` + +Sets the copyright information for the media represented by the current instance. + +**`remarks`** This field should be used for storing copyright information. It may be useful to show + this information somewhere in the program while the media is playing. + Players should not support editing this field, but media creation tools should + definitely allow modification. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Copyright information for the media represented by the current instance or `undefined` if no value is present. | + +#### Returns + +`void` + +Copyright information for the media represented by the current instance or + `undefined` if no value is present. + +___ + +### dateTagged + +• `get` **dateTagged**(): `Date` + +Gets the date and time at which the tag has been written. + +#### Returns + +`Date` + +Date/time at which the tag has been written, or `undefined` if no value is present + +• `set` **dateTagged**(`value`): `void` + +Sets the date and time at which the tag has been written. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `Date` | Date/time at which the tag has been written, or `undefined` if no value is present | + +#### Returns + +`void` + +Date/time at which the tag has been written, or `undefined` if no value is present + +___ + +### description + +• `get` **description**(): `string` + +Gets a short description of the media. For music, this could be the comment that the artist +made of his/her work. For a video, this should be a short summary of the story/plot, but +generally no spoliers. This should give the impression of what to expect in the media. + +**`remarks`** This is especially relevant for a movie. For example, for "Fear and Loathing in Las + Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las + Vegas for a series of psychedelic escapades." + +#### Returns + +`string` + +Description of the media represented by the current instance or `undefined` if no + value is present + +• `set` **description**(`value`): `void` + +Sets a short description of the media. For music, this could be the comment that the artist +made of his/her work. For a video, this should be a short summary of the story/plot, but +generally no spoliers. This should give the impression of what to expect in the media. + +**`remarks`** This is especially relevant for a movie. For example, for "Fear and Loathing in Las + Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las + Vegas for a series of psychedelic escapades." + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Description of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Description of the media represented by the current instance or `undefined` if no + value is present + +___ + +### disc + +• `get` **disc**(): `number` + +Gets the number of the disc containing the media represented by the current instance in the +boxed set. For a series, this represents the season number. + +**`remarks`** This value should be the same as the number that appears on the disc. For example, if + the disc is the first of three, the value should be `1`. It should be no more than + [discCount](rifflisttag.md#disccount) if [discCount](rifflisttag.md#disccount) is non-zero. + +#### Returns + +`number` + +Number of the disc or season of the media represented by the current instance in a + boxed set. + +• `set` **disc**(`value`): `void` + +Sets the number of the disc containing the media represented by the current instance in the +boxed set. For a series, this represents the season number. + +**`remarks`** This value should be the same as the number that appears on the disc. For example, if + the disc is the first of three, the value should be `1`. It should be no more than + [discCount](rifflisttag.md#disccount) if [discCount](rifflisttag.md#disccount) is non-zero. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of the disc or season of the media represented by the current instance in a boxed set. | + +#### Returns + +`void` + +Number of the disc or season of the media represented by the current instance in a + boxed set. + +___ + +### discCount + +• `get` **discCount**(): `number` + +Gets the number of discs or seasons in the boxed set containing the media represented by the +current instance. + +**`remarks`** If non-zero, this should be at least equal to [disc](rifflisttag.md#disc). If [disc](rifflisttag.md#disc) is zero, + this value should also be zero. + +#### Returns + +`number` + +Number of discs or seasons in the boxed set containing the media represented by the + current instance or `0` if not specified. + +• `set` **discCount**(`value`): `void` + +Sets the number of discs or seasons in the boxed set containing the media represented by the +current instance. + +**`remarks`** If non-zero, this should be at least equal to [disc](rifflisttag.md#disc). If [disc](rifflisttag.md#disc) is zero, + this value should also be zero. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. | + +#### Returns + +`void` + +Number of discs or seasons in the boxed set containing the media represented by the + current instance or `0` if not specified. + +___ + +### firstAlbumArtist + +• `get` **firstAlbumArtist**(): `string` + +Gets the the first value contained in [albumArtists](rifflisttag.md#albumartists). + +#### Returns + +`string` + +___ + +### firstAlbumArtistSort + +• `get` **firstAlbumArtistSort**(): `string` + +Gets the first value contained in [albumArtistsSort](rifflisttag.md#albumartistssort) + +#### Returns + +`string` + +___ + +### firstComposer + +• `get` **firstComposer**(): `string` + +Gets the first value contained in [composers](rifflisttag.md#composers) + +#### Returns + +`string` + +___ + +### firstComposerSort + +• `get` **firstComposerSort**(): `string` + +Gets the first value contained in [composersSort](rifflisttag.md#composerssort) + +#### Returns + +`string` + +___ + +### firstGenre + +• `get` **firstGenre**(): `string` + +Gets the first value contained in [genres](rifflisttag.md#genres) + +#### Returns + +`string` + +___ + +### firstPerformer + +• `get` **firstPerformer**(): `string` + +Gets the first value contained in [performers](rifflisttag.md#performers) + +#### Returns + +`string` + +___ + +### firstPerformerSort + +• `get` **firstPerformerSort**(): `string` + +Gets the first value contained in [performersSort](rifflisttag.md#performerssort) + +#### Returns + +`string` + +___ + +### genres + +• `get` **genres**(): `string`[] + +Gets the genres of the media represented by the current instance. + +**`remarks`** This field represents genres that apply to the song, album, or video. This is often + used for filtering media. + A list of common audio genres as popularized by ID3v1 is stored in `genres.ts`. + Additionally, `genres.ts` contains video genres as used by DivX. + +#### Returns + +`string`[] + +Genres of the media represented by the current instance or an empty array if no + value is present. + +• `set` **genres**(`value`): `void` + +Sets the genres of the media represented by the current instance. + +**`remarks`** This field represents genres that apply to the song, album, or video. This is often + used for filtering media. + A list of common audio genres as popularized by ID3v1 is stored in `genres.ts. + Additionally, `genres.ts` contains video genres as used by DivX. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Genres of the media represented by the current instance or an empty array if no value is present. | + +#### Returns + +`void` + +Genres of the media represented by the current instance or an empty array if no + value is present. + +___ + +### grouping + +• `get` **grouping**(): `string` + +Gets the grouping on the album which the media in the current instance belongs to. + +**`remarks`** This field contains a non-physical group to which the track belongs. In classical + music this could be a movement. It could also be parts of a series like "Introduction", + "Closing Remarks", etc. + +#### Returns + +`string` + +Grouping on the album which the media in the current instance belongs to or + `undefined` if no value is present. + +• `set` **grouping**(`value`): `void` + +Sets the grouping on the album which the media in the current instance belongs to. + +**`remarks`** This field contains a non-physical group to which the track belongs. In classical + music this could be a movement. It could also be parts of a series like "Introduction", + "Closing Remarks", etc. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. | + +#### Returns + +`void` + +Grouping on the album which the media in the current instance belongs to or + `undefined` if no value is present. + +___ + +### initialKey + +• `get` **initialKey**(): `string` + +Gets the initial key of the track. + +#### Returns + +`string` + +Initial key of the track or `undefined` if no value is set + +• `set` **initialKey**(`value`): `void` + +Sets the initial key of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Initial key of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Initial key of the track or `undefined` if no value is set + +___ + +### isEmpty + +• `get` **isEmpty**(): `boolean` + +Gets whether or not the current instance is empty. + +**`inheritdoc`** + +#### Returns + +`boolean` + +`true` if the current instance does not contain any values. `false` otherwise + +___ + +### isrc + +• `get` **isrc**(): `string` + +Gets the ISRC (International Standard Recording Code) of the track. + +#### Returns + +`string` + +the ISRC of the track or `undefined` if no value is set + +• `set` **isrc**(`value`): `void` + +Sets the ISRC (International Standard Recording Code) of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | the ISRC of the track or `undefined` if no value is set | + +#### Returns + +`void` + +the ISRC of the track or `undefined` if no value is set + +___ + +### joinedAlbumArtists + +• `get` **joinedAlbumArtists**(): `string` + +Gets a semicolon and space separated string containing the values in [albumArtists](rifflisttag.md#albumartists) + +#### Returns + +`string` + +___ + +### joinedComposers + +• `get` **joinedComposers**(): `string` + +Gets a semicolon and space separated string containing the values in [composers](rifflisttag.md#composers) + +#### Returns + +`string` + +___ + +### joinedGenres + +• `get` **joinedGenres**(): `string` + +Gets a semicolon and space separated string containing the values in [genres](rifflisttag.md#genres) + +#### Returns + +`string` + +___ + +### joinedPerformers + +• `get` **joinedPerformers**(): `string` + +Gets a semicolon and space separated string containing the values in [performers](rifflisttag.md#performers) + +#### Returns + +`string` + +___ + +### joinedPerformersSort + +• `get` **joinedPerformersSort**(): `string` + +Gets a semicolon and space separated string containing the values in [performersSort](rifflisttag.md#performerssort) + +#### Returns + +`string` + +___ + +### lyrics + +• `get` **lyrics**(): `string` + +Gets the lyrics or script of the media represented by the current instance. + +**`remarks`** This field contains a plain text representation of the lyrics or scripts with line + breaks and whitespace being the only formatting marks. + Some formats support more advanced lyrics, like synchronized lyrics, but those must be + accessed using format-specific implementations. + +#### Returns + +`string` + +Lyrics or script of the media represented by the current instance or `undefined` if + no value is present + +• `set` **lyrics**(`value`): `void` + +Sets the lyrics or script of the media represented by the current instance. + +**`remarks`** This field contains a plain text representation of the lyrics or scripts with line + breaks and whitespace being the only formatting marks. + Some formats support more advanced lyrics, like synchronized lyrics, but those must be + accessed using format-specific implementations. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Lyrics or script of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Lyrics or script of the media represented by the current instance or `undefined` if + no value is present + +___ + +### musicBrainzArtistId + +• `get` **musicBrainzArtistId**(): `string` + +Gets the MusicBrainz artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a + particular artist of the track. + +#### Returns + +`string` + +MusicBrainz ArtistID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzArtistId**(`value`): `void` + +Sets the MusicBrainz artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a + particular artist of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ArtistID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzDiscId + +• `get` **musicBrainzDiscId**(): `string` + +Gets the MusicBrainz disc ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the + particular released media associated with this track. + +#### Returns + +`string` + +MusicBrainz DiscID of the media represented by the current instance or `undefined` + if no value is present + +• `set` **musicBrainzDiscId**(`value`): `void` + +Sets the MusicBrainz disc ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the + particular released media associated with this track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz DiscID of the media represented by the current instance or `undefined` + if no value is present + +___ + +### musicBrainzReleaseArtistId + +• `get` **musicBrainzReleaseArtistId**(): `string` + +Gets the MusicBrainz release artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely + identify a particular album artist credited with the album. + +#### Returns + +`string` + +MusicBrainz ReleaseArtistID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseArtistId**(`value`): `void` + +Sets the MusicBrainz release artist ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely + identify a particular album artist credited with the album. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseArtistID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseCountry + +• `get` **musicBrainzReleaseCountry**(): `string` + +Gets the MusicBrainz release country of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseCountry which describes the country in + which an album was released. Note that the release country of an album is not + necessarily the country in which it was produced. The label itself will typically be + more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on + it will likely be a UK release. + +#### Returns + +`string` + +MusicBrainz ReleaseCountry of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseCountry**(`value`): `void` + +Sets the MusicBrainz release country of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseCountry which describes the country in + which an album was released. Note that the release country of an album is not + necessarily the country in which it was produced. The label itself will typically be + more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on + it will likely be a UK release. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseCountry of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseGroupId + +• `get` **musicBrainzReleaseGroupId**(): `string` + +Gets the MusicBrainz release group ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify + a particular release group to which this track belongs. + +#### Returns + +`string` + +MusicBrainz ReleaseGroupID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseGroupId**(`value`): `void` + +Sets the MusicBrainz release group ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify + a particular release group to which this track belongs. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseGroupID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseId + +• `get` **musicBrainzReleaseId**(): `string` + +Gets the MusicBrainz release ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a + particular release to which this track belongs. + +#### Returns + +`string` + +MusicBrainz ReleaseID of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseId**(`value`): `void` + +Sets the MusicBrainz release ID of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a + particular release to which this track belongs. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseID of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseStatus + +• `get` **musicBrainzReleaseStatus**(): `string` + +Gets the MusicBrainz release status of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a + release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. + +#### Returns + +`string` + +MusicBrainz ReleaseStatus of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseStatus**(`value`): `void` + +Sets the MusicBrainz release status of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a + release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseStatus of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzReleaseType + +• `get` **musicBrainzReleaseType**(): `string` + +Gets the MusicBrainz release type of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseType that describes what kind of release + a release is. Common types are: `Single`, `Album`, `EP`, `Compilation`, `Soundtrack, + `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought + must be given when using this field to decide if a particular track "is a compilation". + +#### Returns + +`string` + +MusicBrainz ReleaseType of the media represented by the current instance or + `undefined` if no value is present + +• `set` **musicBrainzReleaseType**(`value`): `void` + +Sets the MusicBrainz release type of the media represented by the current instance. + +**`remarks`** This field represents the MusicBrainz ReleaseType that describes what kind of release + a release is. Common types are: `Single`, `Album`, `EP`, `Compilation`, `Soundtrack, + `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought + must be given when using this field to decide if a particular track "is a compilation". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz ReleaseType of the media represented by the current instance or + `undefined` if no value is present + +___ + +### musicBrainzTrackId + +• `get` **musicBrainzTrackId**(): `string` + +Gets the MusicBrainz track ID of the media represented by the media represented by the +current instance. + +**`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a + particular track. + +#### Returns + +`string` + +MusicBrainz TrackID of the media represented by the current instance or `undefined` + if no value is present + +• `set` **musicBrainzTrackId**(`value`): `void` + +Sets the MusicBrainz track ID of the media represented by the media represented by the +current instance. + +**`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a + particular track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicBrainz TrackID of the media represented by the current instance or `undefined` + if no value is present + +___ + +### musicIpId + +• `get` **musicIpId**(): `string` + +Gets the MusicIP PUID of the media represented by the current instance. + +**`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It + identifies wht this track "sounds like". + +#### Returns + +`string` + +MusicIP PUID of the media represented by the current instance or `undefined` if no + value is present + +• `set` **musicIpId**(`value`): `void` + +Sets the MusicIP PUID of the media represented by the current instance. + +**`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It + identifies wht this track "sounds like". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicIP PUID of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +MusicIP PUID of the media represented by the current instance or `undefined` if no + value is present + +___ + +### performers + +• `get` **performers**(): `string`[] + +Gets the performers or artists who performed in the media described by the current instance. + +**`remarks`** This field is most commonly called "Artists" in audio media or "Actors" in video + media, and should be used to represent each artist/actor appearing in the media. It can + be simple in the form of "Above & Beyond" or more complicated in the form of + "Jono Grant, Tony McGuinness, Paavo Siljamäki", depending on the preferences of the + user and the degree to which they organize their media collection. + As the preference of the user may vary, applications should avoid limiting the user in + what constitutes the performers field - especially with regards to number of performers. + +#### Returns + +`string`[] + +Performers who performed in the media described by the current instance or an empty + array if no value is present. + +• `set` **performers**(`value`): `void` + +Sets the performers or artists who performed in the media described by the current instance. + +**`remarks`** This field is most commonly called "Artists" in audio media or "Actors" in video + media, and should be used to represent each artist/actor appearing in the media. It can + be simple in the form of "Above & Beyond" or more complicated in the form of + "Jono Grant, Tony McGuinness, Paavo Siljamäki", depending on the preferences of the + user and the degree to which they organize their media collection. + As the preference of the user may vary, applications should avoid limiting the user in + what constitutes the performers field - especially with regards to number of performers. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Performers who performed in the media described by the current instance or an empty array if no value is present. | + +#### Returns + +`void` + +Performers who performed in the media described by the current instance or an empty + array if no value is present. + +___ + +### performersRole + +• `get` **performersRole**(): `string`[] + +Gets the characters portrayed by an actor for a video or instruments played by a musician +for music. This must match the [performers](rifflisttag.md#performers) array (for each person, correspond one/more +role). Several roles for the same artist/actor can be separated with semicolons. For +example: "Bass; Backing Vocals; Vibraphone". + +**`remarks`** It is highly important to match each role to the performers. This means that an entry + in the [performersRole](rifflisttag.md#performersrole) array is `undefined` to maintain the relationship between + `performers[i]` and `performersRole[i]`. + +#### Returns + +`string`[] + +Array containing the roles played by the performers in the media described by the + current instance, or an empty array if no value is present. + +• `set` **performersRole**(`value`): `void` + +Sets the characters portrayed by an actor for a video or instruments played by a musician +for music. This must match the [performers](rifflisttag.md#performers) array (for each person, correspond one/more +role). Several roles for the same artist/actor can be separated with semicolons. For +example: "Bass; Backing Vocals; Vibraphone". + +**`remarks`** It is highly important to match each role to the performers. This means that an entry + in the [performersRole](rifflisttag.md#performersrole) array is `undefined` to maintain the relationship between + `performers[i]` and `performersRole[i]`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Array containing the roles played by the performers in the media described by the + current instance, or an empty array if no value is present. + +___ + +### performersSort + +• `get` **performersSort**(): `string`[] + +Gets the sortable names of the performers or artists who performed in the media described by +the current instance. + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last name. For example, "The Pillows" might be sorted as + "Pillows, The". + +**`see`** performers + +#### Returns + +`string`[] + +Sortable names for the performers who performed in the media described by the + current instance, or an empty array if no value is present. + +• `set` **performersSort**(`value`): `void` + +Gets the sortable names of the performers or artists who performed in the media described by +the current instance. + +**`remarks`** This is used to provide more control over how the media is sorted. Typical uses are to + skip articles or sort by last name. For example, "The Pillows" might be sorted as + "Pillows, The". + +**`see`** performers + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. | + +#### Returns + +`void` + +Sortable names for the performers who performed in the media described by the + current instance, or an empty array if no value is present. + +___ + +### pictures + +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] + +Gets a collection of pictures associated with the media represented by the current instance. + +**`remarks`** Typically, this value is used to store an album cover or icon to use for the file, but + it is capable of holding any type of image or file, including pictures of the band, the + recording studio, the concert, etc. + +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] + +Array containing a collection of pictures associated with the media represented by + the current instance or an empty array if no pictures are present. + +• `set` **pictures**(`value`): `void` + +Sets a collection of pictures associated with the media represented by the current instance. + +**`remarks`** Typically, this value is used to store an album cover or icon to use for the file, but + it is capable of holding any type of image or file, including pictures of the band, the + recording studio, the concert, etc. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. | + +#### Returns + +`void` + +Array containing a collection of pictures associated with the media represented by + the current instance or an empty array if no pictures are present. + +___ + +### publisher + +• `get` **publisher**(): `string` + +Gets the publisher of the track. + +#### Returns + +`string` + +Publisher of the track or `undefined` if no value is set + +• `set` **publisher**(`value`): `void` + +Sets the publisher of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Publisher of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Publisher of the track or `undefined` if no value is set + +___ + +### remixedBy + +• `get` **remixedBy**(): `string` + +Gets the remixer of the track. + +#### Returns + +`string` + +Remixer of the track or `undefined` if no value is set + +• `set` **remixedBy**(`value`): `void` + +Sets the remixer of the track. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Remixer of the track or `undefined` if no value is set | + +#### Returns + +`void` + +Remixer of the track or `undefined` if no value is set + +___ + +### replayGainAlbumGain + +• `get` **replayGainAlbumGain**(): `number` + +Gets the ReplayGain album gain in dB. + +#### Returns + +`number` + +Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set + +• `set` **replayGainAlbumGain**(`value`): `void` + +Sets the ReplayGain album gain in dB. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set | + +#### Returns + +`void` + +Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set + +___ + +### replayGainAlbumPeak + +• `get` **replayGainAlbumPeak**(): `number` + +Gets the ReplayGain album peak sample. + +#### Returns + +`number` + +Album peak as per the ReplayGain specifications, or `NaN` if no value is set + +• `set` **replayGainAlbumPeak**(`value`): `void` + +Sets the ReplayGain album peak sample. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album peak as per the ReplayGain specifications, or `NaN` if no value is set | + +#### Returns + +`void` + +Album peak as per the ReplayGain specifications, or `NaN` if no value is set + +___ + +### replayGainTrackGain + +• `get` **replayGainTrackGain**(): `number` + +Gets the ReplayGain track gain in dB. + +#### Returns + +`number` + +Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set + +• `set` **replayGainTrackGain**(`value`): `void` + +Sets the ReplayGain track gain in dB. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set | + +#### Returns + +`void` + +Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set + +___ + +### replayGainTrackPeak + +• `get` **replayGainTrackPeak**(): `number` + +Gets the ReplayGain track peak sample. + +#### Returns + +`number` + +Track peak as per the ReplayGain specifications, or `NaN` if no value is set + +• `set` **replayGainTrackPeak**(`value`): `void` + +Sets the ReplayGain track peak sample. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track peak as per the ReplayGain specifications, or `NaN` if no value is set | + +#### Returns + +`void` + +Track peak as per the ReplayGain specifications, or `NaN` if no value is set + +___ + +### stringType + +• `get` **stringType**(): [`StringType`](../enums/stringtype.md) + +Gets the type of string used for parsing and rendering the contents of this tag. + +#### Returns + +[`StringType`](../enums/stringtype.md) + +• `set` **stringType**(`value`): `void` + +Sets the type of string used for parsing and rendering the contents of this tag. + +**`remarks`** The value must be `StringType.Latin1` or `StringType.UTF8`. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | [`StringType`](../enums/stringtype.md) | + +#### Returns + +`void` + +___ + +### subtitle + +• `get` **subtitle**(): `string` + +Gets a description, one-line. It represents the tagline of the vide/music. + +**`remarks`** This field gives a nice/short precision to the title, which is typically below the + title on the front cover of the media. For example for "Ocean's 13", this would be + "Revenge is a funny thing". + +#### Returns + +`string` + +Subtitle of the media represented by the current instance or `undefined` if no + value is present + +• `set` **subtitle**(`value`): `void` + +Sets a description, one-line. It represents the tagline of the vide/music. + +**`remarks`** This field gives a nice/short precision to the title, which is typically below the + title on the front cover of the media. For example for "Ocean's 13", this would be + "Revenge is a funny thing". + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Subtitle of the media represented by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Subtitle of the media represented by the current instance or `undefined` if no + value is present + +___ + +### title + +• `get` **title**(): `string` + +Gets the title for the media described by the current instance. + +**`remarks`** The title is most commonly the name of the song, episode or a movie title. For example + "Time Won't Me Go" (a song by The Bravery), "Three Stories" (an episode of House MD), or + "Fear and Loathing In Las Vegas" (a movie). + +#### Returns + +`string` + +Title of the media described by the current instance or `undefined` if no value is + present. + +• `set` **title**(`value`): `void` + +Sets the title for the media described by the current instance. + +**`remarks`** The title is most commonly the name of the song, episode or a movie title. For example + "Time Won't Me Go" (a song by The Bravery), "Three Stories" (an episode of House MD), or + "Fear and Loathing In Las Vegas" (a movie). + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Title of the media described by the current instance or `undefined` if no value is present. | + +#### Returns + +`void` + +Title of the media described by the current instance or `undefined` if no value is + present. + +___ + +### titleSort + +• `get` **titleSort**(): `string` + +Gets the sortable name for the title of the media described by the current instance. + +**`remarks`** Possibly used to sort compilations or episodic content. + +#### Returns + +`string` + +Sortable name of the media described by the current instance or `undefined` if no + value is present + +• `set` **titleSort**(`value`): `void` + +Sets the sortable name for the title of the media described by the current instance. + +**`remarks`** Possibly used to sort compilations or episodic content. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name of the media described by the current instance or `undefined` if no value is present | + +#### Returns + +`void` + +Sortable name of the media described by the current instance or `undefined` if no + value is present + +___ + +### track + +• `get` **track**(): `number` + +Gets the position of the media represented by the current instance in its containing album +or season (for a series). + +**`remarks`** This value should be the same as is listed on the album cover and no more than + [trackCount](rifflisttag.md#trackcount), if [trackCount](rifflisttag.md#trackcount) is non-zero. + Most tagging formats store this as a string. To help sorting, a two-digit zero-padded + value is used in the resulting tag. + For a series, this property represents the episodes in a season of the series. + +#### Returns + +`number` + +Position of the media represented by the current instance in its containing album + or `0` if not specified. + +• `set` **track**(`value`): `void` + +Sets the position of the media represented by the current instance in its containing album +or season (for a series). + +**`remarks`** This value should be the same as is listed on the album cover and no more than + [trackCount](rifflisttag.md#trackcount), if [trackCount](rifflisttag.md#trackcount) is non-zero. + Most tagging formats store this as a string. To help sorting, a two-digit zero-padded + value is used in the resulting tag. + For a series, this property represents the episodes in a season of the series. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Position of the media represented by the current instance in its containing album or `0` if not specified. | + +#### Returns + +`void` + +Position of the media represented by the current instance in its containing album + or `0` if not specified. + +___ + +### trackCount + +• `get` **trackCount**(): `number` + +Gets the number of tracks in the album or the number of episodes in a series of the media +represented by the current instance. + +**`remarks`** If non-zero, this value should be equal to or greater than [track](rifflisttag.md#track). If + [track](rifflisttag.md#track) is `0`, this value should also be `0`. + +#### Returns + +`number` + +Number of tracks in the album or number of episodes in a series of the media + represented by the current instance or `0` if not specified. + +• `set` **trackCount**(`value`): `void` + +Sets the number of tracks in the album or the number of episodes in a series of the media +represented by the current instance. + +**`remarks`** If non-zero, this value should be equal to or greater than [track](rifflisttag.md#track). If + [track](rifflisttag.md#track) is `0`, this value should also be `0`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. | + +#### Returns + +`void` + +Number of tracks in the album or number of episodes in a series of the media + represented by the current instance or `0` if not specified. + +___ + +### year + +• `get` **year**(): `number` + +Gets the year that the media represented by the current instance was recorded. + +**`remarks`** Years greater than 9999 cannot be stored by most tagging formats and will be cleared + if a higher value is set. Some tagging formats store higher precision dates which will + be truncated when this property is set. Format specific implementations are necessary to + access the higher precision values. + +#### Returns + +`number` + +Year that the media represented by the current instance was created or `0` if no + value is present. + +• `set` **year**(`value`): `void` + +Sets the year that the media represented by the current instance was recorded. + +**`remarks`** Years greater than 9999 cannot be stored by most tagging formats and will be cleared + if a higher value is set. Some tagging formats store higher precision dates which will + be truncated when this property is set. Format specific implementations are necessary to + access the higher precision values. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Year that the media represented by the current instance was created or `0` if no value is present. | + +#### Returns + +`void` + +Year that the media represented by the current instance was created or `0` if no + value is present. + +## Methods + +### clear + +▸ **clear**(): `void` + +Clears all values stored in the current instance. + +**`remarks`** The clearing procedure is format specific and should clear all values. + +#### Returns + +`void` + +#### Overrides + +[Tag](tag.md).[clear](tag.md#clear) + +___ + +### copyTo + +▸ **copyTo**(`target`, `overwrite`): `void` + +Copies the values from the current instance to another [Tag](tag.md), optionally overwriting + existing values. + +**`remarks`** This method only copies the most basic values when copying between different tag + formats. However, if `target` is of the same type as the current instance, + more advanced copying may be done. For example if both `this` and `target` are + [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | + +#### Returns + +`void` + +#### Inherited from + +[Tag](tag.md).[copyTo](tag.md#copyto) + +___ + +### getFirstValueAsString + +▸ `Protected` **getFirstValueAsString**(`id`): `string` + +Gets the first non-falsy string for the specified ID. If the item is not found, `undefined` +is returned. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to lookup in the list. | + +#### Returns + +`string` + +___ + +### getValueAsUint + +▸ **getValueAsUint**(`id`): `number` + +Gets the value for a specified item in the current instance as an unsigned integer. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item for which to get the value | + +#### Returns + +`number` + +___ + +### getValues + +▸ **getValues**(`id`): [`ByteVector`](bytevector.md)[] + +Gets the values for a specified item in the current instance. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values | + +#### Returns + +[`ByteVector`](bytevector.md)[] + +___ + +### getValuesAsStrings + +▸ **getValuesAsStrings**(`id`): `string`[] + +Gets the values for a specified item in the current instance as strings. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item of which to get the values | + +#### Returns + +`string`[] + +___ + +### initializeFromData + +▸ `Protected` **initializeFromData**(`data`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | + +#### Returns + +`void` + +___ + +### initializeFromEmpty + +▸ `Protected` **initializeFromEmpty**(): `void` + +#### Returns + +`void` + +___ + +### initializeFromFile + +▸ `Protected` **initializeFromFile**(`file`, `position`, `length`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `file` | [`File`](file.md) | +| `position` | `number` | +| `length` | `number` | + +#### Returns + +`void` + +___ + +### initializeFromList + +▸ `Protected` **initializeFromList**(`fields`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `fields` | [`RiffList`](rifflist.md) | + +#### Returns + +`void` + +___ + +### removeValue + +▸ **removeValue**(`id`): `void` + +Removed the item with the specified ID from the current instance. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to remove | + +#### Returns + +`void` + +___ + +### render + +▸ **render**(): [`ByteVector`](bytevector.md) + +Renders the current instance as a raw RIFF list. + +#### Returns + +[`ByteVector`](bytevector.md) + +___ + +### renderEnclosed + +▸ `Abstract` **renderEnclosed**(): [`ByteVector`](bytevector.md) + +Renders the current instance enclosed in the appropriate item. + +#### Returns + +[`ByteVector`](bytevector.md) + +___ + +### renderEnclosedInternal + +▸ `Protected` **renderEnclosedInternal**(`id`): [`ByteVector`](bytevector.md) + +Renders the current instance enclosed in an item with a specified ID. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to enclose the current instance in when rendering | + +#### Returns + +[`ByteVector`](bytevector.md) + +___ + +### setInfoTag + +▸ **setInfoTag**(): `void` + +Set the tags that represent the tagger software (node-taglib-sharp) itself. + +**`remarks`** This is typically a method to call just before saving a tag. + +#### Returns + +`void` + +#### Inherited from + +[Tag](tag.md).[setInfoTag](tag.md#setinfotag) + +___ + +### setValueFromUint + +▸ **setValueFromUint**(`id`, `value`): `void` + +Sets the value for a specified item in the current instance using an unsigned integer. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `value` | `number` | Value to store in the specified item, must be an unsigned 32-bit integer | + +#### Returns + +`void` + +___ + +### setValues + +▸ **setValues**(`id`, ...`values`): `void` + +Sets the value for a specified item in the current instance + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `...values` | [`ByteVector`](bytevector.md)[] | Values to store in the specified item | + +#### Returns + +`void` + +___ + +### setValuesFromStrings + +▸ **setValuesFromStrings**(`id`, ...`values`): `void` + +Sets the value for a specified item in the current instance using a list of strings. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `id` | `string` | ID of the item to set | +| `...values` | `string`[] | Values to store in the specified item | + +#### Returns + +`void` + +___ + +### firstInGroup + +▸ `Static` `Protected` **firstInGroup**(`group`): `string` + +Gets the first string in an array. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | + +#### Returns + +`string` + +First string contained in `group` or `undefined` if the array is + `undefined` or empty + +#### Inherited from + +[Tag](tag.md).[firstInGroup](tag.md#firstingroup) + +___ + +### isFalsyOrLikeEmpty + +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` + +Checks if a value is falsy or empty. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | + +#### Returns + +`boolean` + +If `value` is a string, `true` is returned if the value is falsy or all + whitespace, `false` is returned otherwise. If `value` is an array of strings, + the array must be falsy or all elements must be falsy or whitespace to return `true`. + +#### Inherited from + +[Tag](tag.md).[isFalsyOrLikeEmpty](tag.md#isfalsyorlikeempty) + +___ + +### joinGroup + +▸ `Static` `Protected` **joinGroup**(`group`): `string` + +Joins an array of string into a single, semicolon and space separated string. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | + +#### Returns + +`string` + +A semicolon and space separated string containing the values from `group` + or undefined if the array is `undefined` or empty. + +#### Inherited from + +[Tag](tag.md).[joinGroup](tag.md#joingroup) diff --git a/docs/classes/riffwaveformatex.md b/docs/classes/riffwaveformatex.md new file mode 100644 index 00000000..1ed06897 --- /dev/null +++ b/docs/classes/riffwaveformatex.md @@ -0,0 +1,225 @@ +[node-taglib-sharp](../README.md) / [Exports](../modules.md) / RiffWaveFormatEx + +# Class: RiffWaveFormatEx + +Defines the format of waveform-audio data. Only format information common to all waveform-audio +data formats is included in this structure. +https://docs.microsoft.com/en-us/previous-versions/dd757713(v=vs.85) + +## Implements + +- [`ILosslessAudioCodec`](../interfaces/ilosslessaudiocodec.md) + +## Table of contents + +### Constructors + +- [constructor](riffwaveformatex.md#constructor) + +### Properties + +- [WAVE\_FORMAT\_TAGS](riffwaveformatex.md#wave_format_tags) + +### Accessors + +- [audioBitrate](riffwaveformatex.md#audiobitrate) +- [audioChannels](riffwaveformatex.md#audiochannels) +- [audioSampleRate](riffwaveformatex.md#audiosamplerate) +- [averageBytesPerSecond](riffwaveformatex.md#averagebytespersecond) +- [bitsPerSample](riffwaveformatex.md#bitspersample) +- [blockAlign](riffwaveformatex.md#blockalign) +- [description](riffwaveformatex.md#description) +- [durationMilliseconds](riffwaveformatex.md#durationmilliseconds) +- [formatTag](riffwaveformatex.md#formattag) +- [mediaTypes](riffwaveformatex.md#mediatypes) + +## Constructors + +### constructor + +• **new RiffWaveFormatEx**(`data`, `offset`) + +Constructs and initializes a new instance of a RIFF wave format header from the provided +data. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | [`ByteVector`](bytevector.md) | Byte vector that contains the raw header | +| `offset` | `number` | Index into the data byte vector where the header begins | + +## Properties + +### WAVE\_FORMAT\_TAGS + +▪ `Static` `Readonly` **WAVE\_FORMAT\_TAGS**: `Object` + +#### Index signature + +▪ [key: `number`]: `string` + +## Accessors + +### audioBitrate + +• `get` **audioBitrate**(): `number` + +Bitrate of the audio in kilobits per second represented by the current instance. + +#### Returns + +`number` + +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioBitrate](../interfaces/ilosslessaudiocodec.md#audiobitrate) + +___ + +### audioChannels + +• `get` **audioChannels**(): `number` + +Number of channels in the audio represented by the current instance. + +#### Returns + +`number` + +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioChannels](../interfaces/ilosslessaudiocodec.md#audiochannels) + +___ + +### audioSampleRate + +• `get` **audioSampleRate**(): `number` + +Sample rate of the audio represented by the current instance. + +#### Returns + +`number` + +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[audioSampleRate](../interfaces/ilosslessaudiocodec.md#audiosamplerate) + +___ + +### averageBytesPerSecond + +• `get` **averageBytesPerSecond**(): `number` + +Gets the average data-transfer rate, in bytes per second, of audio described by the current +instance. + +#### Returns + +`number` + +___ + +### bitsPerSample + +• `get` **bitsPerSample**(): `number` + +Number of bits per sample in the audio represented by the current instance. + +**`remarks`** Some compression schemes cannot define a value for this field, so it may be `0`. + This is especially common for MP3 audio embedded in an AVI. + +#### Returns + +`number` + +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[bitsPerSample](../interfaces/ilosslessaudiocodec.md#bitspersample) + +___ + +### blockAlign + +• `get` **blockAlign**(): `number` + +Gets the block alignment, in bytes. Block alignment is the minimum atomic unit of data for +{@see formatTag} format type. + +#### Returns + +`number` + +___ + +### description + +• `get` **description**(): `string` + +Gets a text description of the media represented by the current instance. + +#### Returns + +`string` + +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[description](../interfaces/ilosslessaudiocodec.md#description) + +___ + +### durationMilliseconds + +• `get` **durationMilliseconds**(): `number` + +Duration of the media in milliseconds represented by the current instance. + +**`remarks`** Duration cannot be found from this object + +#### Returns + +`number` + +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[durationMilliseconds](../interfaces/ilosslessaudiocodec.md#durationmilliseconds) + +___ + +### formatTag + +• `get` **formatTag**(): `number` + +Gets the format tag of the audio described by the current instance. + +**`remarks`** Format tags indicate the codec of the audio contained in the file and are + contained in a Microsoft registry. For a description of the format, use + [description](riffwaveformatex.md#description). The complete list can be found in the Win32 mmreg.h SDK header file + +#### Returns + +`number` + +___ + +### mediaTypes + +• `get` **mediaTypes**(): [`MediaTypes`](../enums/mediatypes.md) + +Types of media represented by the current instance, bitwise combined. + +**`remarks`** Technically any audio format can be encapsulated with a RIFF header since RIFF is + simply a "Resource Interchange File Format". It is entirely possible to encapsulate a + lossy format (and indeed, lossy WMA must be encapsulated) with a RIFF header. Therefore + this designation as lossless is somewhat misleading and checking [description](riffwaveformatex.md#description) is + necessary to verify the codec being used is lossless or not. + +#### Returns + +[`MediaTypes`](../enums/mediatypes.md) + +#### Implementation of + +[ILosslessAudioCodec](../interfaces/ilosslessaudiocodec.md).[mediaTypes](../interfaces/ilosslessaudiocodec.md#mediatypes) diff --git a/docs/classes/tag.md b/docs/classes/tag.md index e1d73b61..f82b72f4 100644 --- a/docs/classes/tag.md +++ b/docs/classes/tag.md @@ -9,17 +9,21 @@ is stored by re-reading the property after it is set. ## Hierarchy -* **Tag** +- **`Tag`** - ↳ [*CombinedTag*](combinedtag.md) + ↳ [`CombinedTag`](combinedtag.md) - ↳ [*ApeTag*](apetag.md) + ↳ [`ApeTag`](apetag.md) - ↳ [*AsfTag*](asftag.md) + ↳ [`AsfTag`](asftag.md) - ↳ [*Id3v1Tag*](id3v1tag.md) + ↳ [`Id3v1Tag`](id3v1tag.md) - ↳ [*Id3v2Tag*](id3v2tag.md) + ↳ [`Id3v2Tag`](id3v2tag.md) + + ↳ [`DivxTag`](divxtag.md) + + ↳ [`RiffListTag`](rifflisttag.md) ## Table of contents @@ -106,15 +110,13 @@ is stored by re-reading the property after it is set. ### constructor -\+ **new Tag**(): [*Tag*](tag.md) - -**Returns:** [*Tag*](tag.md) +• **new Tag**() ## Properties ### tagTypes -• `Abstract` **tagTypes**: [*TagTypes*](../enums/tagtypes.md) +• `Abstract` **tagTypes**: [`TagTypes`](../enums/tagtypes.md) Gets the tag types contained in the current instance. A bit wise combined [TagTypes](../enums/tagtypes.md) containing the tag types contained in the current instance. @@ -127,7 +129,7 @@ containing the tag types contained in the current instance. ### album -• **album**(): *string* +• `get` **album**(): `string` Gets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. @@ -139,12 +141,14 @@ represents the collection the video belongs to. For example, "Kintsugi" (an album by Death Cab for Cutie), "The Complete Red Green Show" (a boxed set of TV episodes), or "Shark Tank" (a series with several seasons). -**Returns:** *string* +#### Returns + +`string` Album of the media represented by the current instance or `undefined` if no value is present -• **album**(`value`: *string*): *void* +• `set` **album**(`value`): `void` Sets the album of the media represented by the current instance. For video media, this represents the collection the video belongs to. @@ -156,13 +160,15 @@ represents the collection the video belongs to. For example, "Kintsugi" (an album by Death Cab for Cutie), "The Complete Red Green Show" (a boxed set of TV episodes), or "Shark Tank" (a series with several seasons). -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` Album of the media represented by the current instance or `undefined` if no value is present @@ -171,7 +177,7 @@ ___ ### albumArtists -• **albumArtists**(): *string*[] +• `get` **albumArtists**(): `string`[] Gets the band or artist who is credited credited in the creation of the entire album or collection containing the media described by the current instance. @@ -184,13 +190,15 @@ collection containing the media described by the current instance. than [performers](tag.md#performers). Where performers can be broken into multiple artists, it is best to stick to a single name. Eg, "Super8 & Tab" -**Returns:** *string*[] +#### Returns + +`string`[] Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present -• **albumArtists**(`value`: *string*[]): *void* +• `set` **albumArtists**(`value`): `void` Sets the bands or artists who is credited credited in the creation of the entire album or collection containing the media described by the current instance. @@ -203,13 +211,15 @@ collection containing the media described by the current instance. than [performers](tag.md#performers). Where performers can be broken into multiple artists, it is best to stick to a single name. Eg, "Super8 & Tab" -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is present | -**Returns:** *void* +#### Returns + +`void` Band or artist credited with the creation of the entire album or collection containing the media described by the current instance or an empty array if no value is @@ -219,7 +229,7 @@ ___ ### albumArtistsSort -• **albumArtistsSort**(): *string*[] +• `get` **albumArtistsSort**(): `string`[] Gets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. @@ -233,13 +243,15 @@ album or collection containing the media described by the current instance. [performers](tag.md#performers). Where [performers](tag.md#performers) can be broken into multiple performers, it is best to stick to a single album artist. Eg, "Van Buuren, Armin" -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. -• **albumArtistsSort**(`value`: *string*[]): *void* +• `set` **albumArtistsSort**(`value`): `void` Sets the sortable names of the bands/artists who are credited with creating the entire album or collection containing the media described by the current instance. @@ -253,13 +265,15 @@ album or collection containing the media described by the current instance. [performers](tag.md#performers). Where [performers](tag.md#performers) can be broken into multiple performers, it is best to stick to a single album artist. Eg, "Van Buuren, Armin" -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty array if no value is present. | -**Returns:** *void* +#### Returns + +`void` Sortable names for the bands/artists are credited with the creation of the entire album or collection containing the media described by the current instance, or an empty @@ -269,7 +283,7 @@ ___ ### albumSort -• **albumSort**(): *string* +• `get` **albumSort**(): `string` Gets the sortable name of the album title of the media represented by the current instance. @@ -278,12 +292,14 @@ Gets the sortable name of the album title of the media represented by the curren **`remarks`** This field is typically optional but aids in sort of compilations or albums with similar titles. -**Returns:** *string* +#### Returns + +`string` Sortable name for the album title of the media or `undefined` if the value is not present -• **albumSort**(`value`: *string*): *void* +• `set` **albumSort**(`value`): `void` Sets the sortable name of the album title of the media represented by the current instance. @@ -292,13 +308,15 @@ Sets the sortable name of the album title of the media represented by the curren **`remarks`** This field is typically optional but aids in sort of compilations or albums with similar titles. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Sortable name for the album title of the media or `undefined` if the value is not present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name for the album title of the media or `undefined` if the value is not present | -**Returns:** *void* +#### Returns + +`void` Sortable name for the album title of the media or `undefined` if the value is not present @@ -307,32 +325,36 @@ ___ ### amazonId -• **amazonId**(): *string* +• `get` **amazonId**(): `string` Gets the Amazon ID of the media represented by the current instance. **`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely identify the particular track or album in the Amazon catalog. -**Returns:** *string* +#### Returns + +`string` Amazon ID of the media represented by the current instance or `undefined` if no value is present -• **amazonId**(`value`: *string*): *void* +• `set` **amazonId**(`value`): `void` Sets the Amazon ID of the media represented by the current instance. **`remarks`** This field represents the AmazonID, also called the ASIN, and is used to uniquely identify the particular track or album in the Amazon catalog. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Amazon ID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Amazon ID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` Amazon ID of the media represented by the current instance or `undefined` if no value is present @@ -341,7 +363,7 @@ ___ ### beatsPerMinute -• **beatsPerMinute**(): *number* +• `get` **beatsPerMinute**(): `number` Gets the number of beats per minute in the audio of the media represented by the current instance. @@ -349,12 +371,14 @@ instance. **`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be calculated from the audio or pulled from a database. -**Returns:** *number* +#### Returns + +`number` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified -• **beatsPerMinute**(`value`: *number*): *void* +• `set` **beatsPerMinute**(`value`): `void` Sets the number of beats per minute in the audio of the media represented by the current instance. @@ -362,13 +386,15 @@ instance. **`remarks`** This field is useful for DJ's who are trying to beat match tracks. It should be calculated from the audio or pulled from a database. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Beats per minute of the audio in the media represented by the current instance, or `0` if not specified | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Beats per minute of the audio in the media represented by the current instance, or `0` if not specified | +#### Returns -**Returns:** *void* +`void` Beats per minute of the audio in the media represented by the current instance, or `0` if not specified @@ -377,7 +403,7 @@ ___ ### comment -• **comment**(): *string* +• `get` **comment**(): `string` Gets a user comment on the media represented by the current instance. @@ -387,12 +413,14 @@ Gets a user comment on the media represented by the current instance. it may be useful for an application to make this field easily accessible, perhaps even including it in the main interface. -**Returns:** *string* +#### Returns + +`string` User comments on the media represented by the current instance or `undefined` if the value is not present -• **comment**(`value`: *string*): *void* +• `set` **comment**(`value`): `void` Sets a user comment on the media represented by the current instance. @@ -402,13 +430,15 @@ Sets a user comment on the media represented by the current instance. it may be useful for an application to make this field easily accessible, perhaps even including it in the main interface. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | User comments on the media represented by the current instance or `undefined` if the value is not present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | User comments on the media represented by the current instance or `undefined` if the value is not present | +#### Returns -**Returns:** *void* +`void` User comments on the media represented by the current instance or `undefined` if the value is not present @@ -417,32 +447,36 @@ ___ ### composers -• **composers**(): *string*[] +• `get` **composers**(): `string`[] Gets the composers of the media represented by the current instance. **`remarks`** This field represents the composers, song writers, script writers, or persons who claim authorship of the media. -**Returns:** *string*[] +#### Returns + +`string`[] Composers of the media represented by the current instance of an empty array if no value is present. -• **composers**(`value`: *string*[]): *void* +• `set` **composers**(`value`): `void` Sets the composers of the media represented by the current instance. **`remarks`** This field represents the composers, song writers, script writers, or persons who claim authorship of the media. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Composers of the media represented by the current instance of an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Composers of the media represented by the current instance of an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Composers of the media represented by the current instance of an empty array if no value is present. @@ -451,7 +485,7 @@ ___ ### composersSort -• **composersSort**(): *string*[] +• `get` **composersSort**(): `string`[] Gets the sortable names of the composers of the media represented by the current instance. @@ -460,12 +494,14 @@ Gets the sortable names of the composers of the media represented by the current **`remarks`** This field is typically optional but aids in the sorting of compilations or albums with multiple composers. -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. -• **composersSort**(`value`: *string*[]): *void* +• `set` **composersSort**(`value`): `void` Sets the sortable names of the composers of the media represented by the current instance. @@ -474,13 +510,15 @@ Sets the sortable names of the composers of the media represented by the current **`remarks`** This field is typically optional but aids in the sorting of compilations or albums with multiple composers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Sortable names for the composers of the media represented by the current instance or an empty array if no value is present. @@ -489,30 +527,34 @@ ___ ### conductor -• **conductor**(): *string* +• `get` **conductor**(): `string` Gets the conductor or director of the media represented by the current instance. **`remarks`** This field is most useful for organizing classical music and movies. -**Returns:** *string* +#### Returns + +`string` Conductor or director of the media represented by the current instance or `undefined` if no value present. -• **conductor**(`value`: *string*): *void* +• `set` **conductor**(`value`): `void` Sets the conductor or director of the media represented by the current instance. **`remarks`** This field is most useful for organizing classical music and movies. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Conductor or director of the media represented by the current instance or `undefined` if no value present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Conductor or director of the media represented by the current instance or `undefined` if no value present. | -**Returns:** *void* +#### Returns + +`void` Conductor or director of the media represented by the current instance or `undefined` if no value present. @@ -521,7 +563,7 @@ ___ ### copyright -• **copyright**(): *string* +• `get` **copyright**(): `string` Gets the copyright information for the media represented by the current instance. @@ -530,12 +572,14 @@ Gets the copyright information for the media represented by the current instance Players should not support editing this field, but media creation tools should definitely allow modification. -**Returns:** *string* +#### Returns + +`string` Copyright information for the media represented by the current instance or `undefined` if no value is present. -• **copyright**(`value`: *string*): *void* +• `set` **copyright**(`value`): `void` Sets the copyright information for the media represented by the current instance. @@ -544,13 +588,15 @@ Sets the copyright information for the media represented by the current instance Players should not support editing this field, but media creation tools should definitely allow modification. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Copyright information for the media represented by the current instance or `undefined` if no value is present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Copyright information for the media represented by the current instance or `undefined` if no value is present. | -**Returns:** *void* +#### Returns + +`void` Copyright information for the media represented by the current instance or `undefined` if no value is present. @@ -559,25 +605,29 @@ ___ ### dateTagged -• **dateTagged**(): Date +• `get` **dateTagged**(): `Date` Gets the date and time at which the tag has been written. -**Returns:** Date +#### Returns + +`Date` Date/time at which the tag has been written, or `undefined` if no value is present -• **dateTagged**(`value`: Date): *void* +• `set` **dateTagged**(`value`): `void` Sets the date and time at which the tag has been written. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | Date | Date/time at which the tag has been written, or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `Date` | Date/time at which the tag has been written, or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` Date/time at which the tag has been written, or `undefined` if no value is present @@ -585,7 +635,7 @@ ___ ### description -• **description**(): *string* +• `get` **description**(): `string` Gets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but @@ -595,12 +645,14 @@ generally no spoliers. This should give the impression of what to expect in the Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las Vegas for a series of psychedelic escapades." -**Returns:** *string* +#### Returns + +`string` Description of the media represented by the current instance or `undefined` if no value is present -• **description**(`value`: *string*): *void* +• `set` **description**(`value`): `void` Sets a short description of the media. For music, this could be the comment that the artist made of his/her work. For a video, this should be a short summary of the story/plot, but @@ -610,13 +662,15 @@ generally no spoliers. This should give the impression of what to expect in the Vegas", this could be "An oddball journalist and his psychopathic lawyer travel to Las Vegas for a series of psychedelic escapades." -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Description of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Description of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Description of the media represented by the current instance or `undefined` if no value is present @@ -625,7 +679,7 @@ ___ ### disc -• **disc**(): *number* +• `get` **disc**(): `number` Gets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. @@ -634,12 +688,14 @@ boxed set. For a series, this represents the season number. the disc is the first of three, the value should be `1`. It should be no more than [discCount](tag.md#disccount) if [discCount](tag.md#disccount) is non-zero. -**Returns:** *number* +#### Returns + +`number` Number of the disc or season of the media represented by the current instance in a boxed set. -• **disc**(`value`: *number*): *void* +• `set` **disc**(`value`): `void` Sets the number of the disc containing the media represented by the current instance in the boxed set. For a series, this represents the season number. @@ -648,13 +704,15 @@ boxed set. For a series, this represents the season number. the disc is the first of three, the value should be `1`. It should be no more than [discCount](tag.md#disccount) if [discCount](tag.md#disccount) is non-zero. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of the disc or season of the media represented by the current instance in a boxed set. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Number of the disc or season of the media represented by the current instance in a boxed set. | +#### Returns -**Returns:** *void* +`void` Number of the disc or season of the media represented by the current instance in a boxed set. @@ -663,7 +721,7 @@ ___ ### discCount -• **discCount**(): *number* +• `get` **discCount**(): `number` Gets the number of discs or seasons in the boxed set containing the media represented by the current instance. @@ -671,12 +729,14 @@ current instance. **`remarks`** If non-zero, this should be at least equal to [disc](tag.md#disc). If [disc](tag.md#disc) is zero, this value should also be zero. -**Returns:** *number* +#### Returns + +`number` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. -• **discCount**(`value`: *number*): *void* +• `set` **discCount**(`value`): `void` Sets the number of discs or seasons in the boxed set containing the media represented by the current instance. @@ -684,13 +744,15 @@ current instance. **`remarks`** If non-zero, this should be at least equal to [disc](tag.md#disc). If [disc](tag.md#disc) is zero, this value should also be zero. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. | +#### Returns -**Returns:** *void* +`void` Number of discs or seasons in the boxed set containing the media represented by the current instance or `0` if not specified. @@ -699,77 +761,91 @@ ___ ### firstAlbumArtist -• **firstAlbumArtist**(): *string* +• `get` **firstAlbumArtist**(): `string` Gets the the first value contained in [albumArtists](tag.md#albumartists). -**Returns:** *string* +#### Returns + +`string` ___ ### firstAlbumArtistSort -• **firstAlbumArtistSort**(): *string* +• `get` **firstAlbumArtistSort**(): `string` Gets the first value contained in [albumArtistsSort](tag.md#albumartistssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposer -• **firstComposer**(): *string* +• `get` **firstComposer**(): `string` Gets the first value contained in [composers](tag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstComposerSort -• **firstComposerSort**(): *string* +• `get` **firstComposerSort**(): `string` Gets the first value contained in [composersSort](tag.md#composerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### firstGenre -• **firstGenre**(): *string* +• `get` **firstGenre**(): `string` Gets the first value contained in [genres](tag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformer -• **firstPerformer**(): *string* +• `get` **firstPerformer**(): `string` Gets the first value contained in [performers](tag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### firstPerformerSort -• **firstPerformerSort**(): *string* +• `get` **firstPerformerSort**(): `string` Gets the first value contained in [performersSort](tag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### genres -• **genres**(): *string*[] +• `get` **genres**(): `string`[] Gets the genres of the media represented by the current instance. @@ -778,12 +854,14 @@ Gets the genres of the media represented by the current instance. A list of common audio genres as popularized by ID3v1 is stored in `genres.ts`. Additionally, `genres.ts` contains video genres as used by DivX. -**Returns:** *string*[] +#### Returns + +`string`[] Genres of the media represented by the current instance or an empty array if no value is present. -• **genres**(`value`: *string*[]): *void* +• `set` **genres**(`value`): `void` Sets the genres of the media represented by the current instance. @@ -792,13 +870,15 @@ Sets the genres of the media represented by the current instance. A list of common audio genres as popularized by ID3v1 is stored in `genres.ts. Additionally, `genres.ts` contains video genres as used by DivX. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Genres of the media represented by the current instance or an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Genres of the media represented by the current instance or an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Genres of the media represented by the current instance or an empty array if no value is present. @@ -807,7 +887,7 @@ ___ ### grouping -• **grouping**(): *string* +• `get` **grouping**(): `string` Gets the grouping on the album which the media in the current instance belongs to. @@ -815,12 +895,14 @@ Gets the grouping on the album which the media in the current instance belongs t music this could be a movement. It could also be parts of a series like "Introduction", "Closing Remarks", etc. -**Returns:** *string* +#### Returns + +`string` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. -• **grouping**(`value`: *string*): *void* +• `set` **grouping**(`value`): `void` Sets the grouping on the album which the media in the current instance belongs to. @@ -828,13 +910,15 @@ Sets the grouping on the album which the media in the current instance belongs t music this could be a movement. It could also be parts of a series like "Introduction", "Closing Remarks", etc. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. | -**Returns:** *void* +#### Returns + +`void` Grouping on the album which the media in the current instance belongs to or `undefined` if no value is present. @@ -843,25 +927,29 @@ ___ ### initialKey -• **initialKey**(): *string* +• `get` **initialKey**(): `string` Gets the initial key of the track. -**Returns:** *string* +#### Returns + +`string` Initial key of the track or `undefined` if no value is set -• **initialKey**(`value`: *string*): *void* +• `set` **initialKey**(`value`): `void` Sets the initial key of the track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Initial key of the track or `undefined` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Initial key of the track or `undefined` if no value is set | -**Returns:** *void* +#### Returns + +`void` Initial key of the track or `undefined` if no value is set @@ -869,14 +957,16 @@ ___ ### isEmpty -• **isEmpty**(): *boolean* +• `get` **isEmpty**(): `boolean` Gets whether or not the current instance is empty. **`remarks`** In the default implementation, this checks the values supported by [Tag](tag.md), but it may be extended by child classes to support other values. -**Returns:** *boolean* +#### Returns + +`boolean` `true` if the current instance does not contain any values. `false` otherwise @@ -884,25 +974,29 @@ ___ ### isrc -• **isrc**(): *string* +• `get` **isrc**(): `string` Gets the ISRC (International Standard Recording Code) of the track. -**Returns:** *string* +#### Returns + +`string` the ISRC of the track or `undefined` if no value is set -• **isrc**(`value`: *string*): *void* +• `set` **isrc**(`value`): `void` Sets the ISRC (International Standard Recording Code) of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | the ISRC of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | the ISRC of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` the ISRC of the track or `undefined` if no value is set @@ -910,57 +1004,67 @@ ___ ### joinedAlbumArtists -• **joinedAlbumArtists**(): *string* +• `get` **joinedAlbumArtists**(): `string` Gets a semicolon and space separated string containing the values in [albumArtists](tag.md#albumartists) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedComposers -• **joinedComposers**(): *string* +• `get` **joinedComposers**(): `string` Gets a semicolon and space separated string containing the values in [composers](tag.md#composers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedGenres -• **joinedGenres**(): *string* +• `get` **joinedGenres**(): `string` Gets a semicolon and space separated string containing the values in [genres](tag.md#genres) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformers -• **joinedPerformers**(): *string* +• `get` **joinedPerformers**(): `string` Gets a semicolon and space separated string containing the values in [performers](tag.md#performers) -**Returns:** *string* +#### Returns + +`string` ___ ### joinedPerformersSort -• **joinedPerformersSort**(): *string* +• `get` **joinedPerformersSort**(): `string` Gets a semicolon and space separated string containing the values in [performersSort](tag.md#performerssort) -**Returns:** *string* +#### Returns + +`string` ___ ### lyrics -• **lyrics**(): *string* +• `get` **lyrics**(): `string` Gets the lyrics or script of the media represented by the current instance. @@ -969,12 +1073,14 @@ Gets the lyrics or script of the media represented by the current instance. Some formats support more advanced lyrics, like synchronized lyrics, but those must be accessed using format-specific implementations. -**Returns:** *string* +#### Returns + +`string` Lyrics or script of the media represented by the current instance or `undefined` if no value is present -• **lyrics**(`value`: *string*): *void* +• `set` **lyrics**(`value`): `void` Sets the lyrics or script of the media represented by the current instance. @@ -983,13 +1089,15 @@ Sets the lyrics or script of the media represented by the current instance. Some formats support more advanced lyrics, like synchronized lyrics, but those must be accessed using format-specific implementations. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Lyrics or script of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Lyrics or script of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Lyrics or script of the media represented by the current instance or `undefined` if no value is present @@ -998,32 +1106,36 @@ ___ ### musicBrainzArtistId -• **musicBrainzArtistId**(): *string* +• `get` **musicBrainzArtistId**(): `string` Gets the MusicBrainz artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a particular artist of the track. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzArtistId**(`value`: *string*): *void* +• `set` **musicBrainzArtistId**(`value`): `void` Sets the MusicBrainz artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ArtistID, and is used to uniquely identify a particular artist of the track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ArtistID of the media represented by the current instance or `undefined` if no value is present @@ -1032,32 +1144,36 @@ ___ ### musicBrainzDiscId -• **musicBrainzDiscId**(): *string* +• `get` **musicBrainzDiscId**(): `string` Gets the MusicBrainz disc ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the particular released media associated with this track. -**Returns:** *string* +#### Returns + +`string` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzDiscId**(`value`: *string*): *void* +• `set` **musicBrainzDiscId**(`value`): `void` Sets the MusicBrainz disc ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz DiscID and is used to uniquely identify the particular released media associated with this track. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz DiscID of the media represented by the current instance or `undefined` if no value is present @@ -1066,32 +1182,36 @@ ___ ### musicBrainzReleaseArtistId -• **musicBrainzReleaseArtistId**(): *string* +• `get` **musicBrainzReleaseArtistId**(): `string` Gets the MusicBrainz release artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely identify a particular album artist credited with the album. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseArtistId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseArtistId**(`value`): `void` Sets the MusicBrainz release artist ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseArtistID, and is used to uniquely identify a particular album artist credited with the album. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseArtistID of the media represented by the current instance or `undefined` if no value is present @@ -1100,7 +1220,7 @@ ___ ### musicBrainzReleaseCountry -• **musicBrainzReleaseCountry**(): *string* +• `get` **musicBrainzReleaseCountry**(): `string` Gets the MusicBrainz release country of the media represented by the current instance. @@ -1110,12 +1230,14 @@ Gets the MusicBrainz release country of the media represented by the current ins more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on it will likely be a UK release. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseCountry**(`value`: *string*): *void* +• `set` **musicBrainzReleaseCountry**(`value`): `void` Sets the MusicBrainz release country of the media represented by the current instance. @@ -1125,13 +1247,15 @@ Sets the MusicBrainz release country of the media represented by the current ins more relevant. Eg, a release on "Foo Records UK" that has "Made in Austria" printed on it will likely be a UK release. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseCountry of the media represented by the current instance or `undefined` if no value is present @@ -1140,32 +1264,36 @@ ___ ### musicBrainzReleaseGroupId -• **musicBrainzReleaseGroupId**(): *string* +• `get` **musicBrainzReleaseGroupId**(): `string` Gets the MusicBrainz release group ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify a particular release group to which this track belongs. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseGroupId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseGroupId**(`value`): `void` Sets the MusicBrainz release group ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseGroupID and is used to uniquely identify a particular release group to which this track belongs. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseGroupID of the media represented by the current instance or `undefined` if no value is present @@ -1174,32 +1302,36 @@ ___ ### musicBrainzReleaseId -• **musicBrainzReleaseId**(): *string* +• `get` **musicBrainzReleaseId**(): `string` Gets the MusicBrainz release ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a particular release to which this track belongs. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseId**(`value`: *string*): *void* +• `set` **musicBrainzReleaseId**(`value`): `void` Sets the MusicBrainz release ID of the media represented by the current instance. **`remarks`** This field represents the MusicBrains ReleaseID and is used to uniquely identify a particular release to which this track belongs. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseID of the media represented by the current instance or `undefined` if no value is present @@ -1208,32 +1340,36 @@ ___ ### musicBrainzReleaseStatus -• **musicBrainzReleaseStatus**(): *string* +• `get` **musicBrainzReleaseStatus**(): `string` Gets the MusicBrainz release status of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseStatus**(`value`: *string*): *void* +• `set` **musicBrainzReleaseStatus**(`value`): `void` Sets the MusicBrainz release status of the media represented by the current instance. **`remarks`** This field represents the MusicBrainz ReleaseStatus used to describe how 'official' a release is. Common statuses are: `Official`, `Promotion`, `Bootleg`, `Pseudo-release`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` MusicBrainz ReleaseStatus of the media represented by the current instance or `undefined` if no value is present @@ -1242,7 +1378,7 @@ ___ ### musicBrainzReleaseType -• **musicBrainzReleaseType**(): *string* +• `get` **musicBrainzReleaseType**(): `string` Gets the MusicBrainz release type of the media represented by the current instance. @@ -1251,12 +1387,14 @@ Gets the MusicBrainz release type of the media represented by the current instan `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought must be given when using this field to decide if a particular track "is a compilation". -**Returns:** *string* +#### Returns + +`string` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzReleaseType**(`value`: *string*): *void* +• `set` **musicBrainzReleaseType**(`value`): `void` Sets the MusicBrainz release type of the media represented by the current instance. @@ -1265,13 +1403,15 @@ Sets the MusicBrainz release type of the media represented by the current instan `SpokenWord`, `Interview`, `Audiobook`, `Live`, `Remix`, and `Other`. Careful thought must be given when using this field to decide if a particular track "is a compilation". -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` MusicBrainz ReleaseType of the media represented by the current instance or `undefined` if no value is present @@ -1280,7 +1420,7 @@ ___ ### musicBrainzTrackId -• **musicBrainzTrackId**(): *string* +• `get` **musicBrainzTrackId**(): `string` Gets the MusicBrainz track ID of the media represented by the media represented by the current instance. @@ -1288,12 +1428,14 @@ current instance. **`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a particular track. -**Returns:** *string* +#### Returns + +`string` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present -• **musicBrainzTrackId**(`value`: *string*): *void* +• `set` **musicBrainzTrackId**(`value`): `void` Sets the MusicBrainz track ID of the media represented by the media represented by the current instance. @@ -1301,13 +1443,15 @@ current instance. **`remarks`** This field represents the MusicBrainz TrackID and is used to uniquely identify a particular track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` MusicBrainz TrackID of the media represented by the current instance or `undefined` if no value is present @@ -1316,32 +1460,36 @@ ___ ### musicIpId -• **musicIpId**(): *string* +• `get` **musicIpId**(): `string` Gets the MusicIP PUID of the media represented by the current instance. **`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It identifies wht this track "sounds like". -**Returns:** *string* +#### Returns + +`string` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present -• **musicIpId**(`value`: *string*): *void* +• `set` **musicIpId**(`value`): `void` Sets the MusicIP PUID of the media represented by the current instance. **`remarks`** This field represents the MusicIP PUID, an acoustic fingerprint identifier. It identifies wht this track "sounds like". -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | MusicIP PUID of the media represented by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | MusicIP PUID of the media represented by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` MusicIP PUID of the media represented by the current instance or `undefined` if no value is present @@ -1350,7 +1498,7 @@ ___ ### performers -• **performers**(): *string*[] +• `get` **performers**(): `string`[] Gets the performers or artists who performed in the media described by the current instance. @@ -1362,12 +1510,14 @@ Gets the performers or artists who performed in the media described by the curre As the preference of the user may vary, applications should avoid limiting the user in what constitutes the performers field - especially with regards to number of performers. -**Returns:** *string*[] +#### Returns + +`string`[] Performers who performed in the media described by the current instance or an empty array if no value is present. -• **performers**(`value`: *string*[]): *void* +• `set` **performers**(`value`): `void` Sets the performers or artists who performed in the media described by the current instance. @@ -1379,13 +1529,15 @@ Sets the performers or artists who performed in the media described by the curre As the preference of the user may vary, applications should avoid limiting the user in what constitutes the performers field - especially with regards to number of performers. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Performers who performed in the media described by the current instance or an empty array if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Performers who performed in the media described by the current instance or an empty array if no value is present. | +#### Returns -**Returns:** *void* +`void` Performers who performed in the media described by the current instance or an empty array if no value is present. @@ -1394,7 +1546,7 @@ ___ ### performersRole -• **performersRole**(): *string*[] +• `get` **performersRole**(): `string`[] Gets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](tag.md#performers) array (for each person, correspond one/more @@ -1405,12 +1557,14 @@ example: "Bass; Backing Vocals; Vibraphone". in the [performersRole](tag.md#performersrole) array is `undefined` to maintain the relationship between `performers[i]` and `performersRole[i]`. -**Returns:** *string*[] +#### Returns + +`string`[] Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. -• **performersRole**(`value`: *string*[]): *void* +• `set` **performersRole**(`value`): `void` Sets the characters portrayed by an actor for a video or instruments played by a musician for music. This must match the [performers](tag.md#performers) array (for each person, correspond one/more @@ -1421,13 +1575,15 @@ example: "Bass; Backing Vocals; Vibraphone". in the [performersRole](tag.md#performersrole) array is `undefined` to maintain the relationship between `performers[i]` and `performersRole[i]`. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. | -**Returns:** *void* +#### Returns + +`void` Array containing the roles played by the performers in the media described by the current instance, or an empty array if no value is present. @@ -1436,7 +1592,7 @@ ___ ### performersSort -• **performersSort**(): *string*[] +• `get` **performersSort**(): `string`[] Gets the sortable names of the performers or artists who performed in the media described by the current instance. @@ -1447,12 +1603,14 @@ the current instance. **`see`** performers -**Returns:** *string*[] +#### Returns + +`string`[] Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. -• **performersSort**(`value`: *string*[]): *void* +• `set` **performersSort**(`value`): `void` Gets the sortable names of the performers or artists who performed in the media described by the current instance. @@ -1463,13 +1621,15 @@ the current instance. **`see`** performers -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string*[] | Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string`[] | Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. | -**Returns:** *void* +#### Returns + +`void` Sortable names for the performers who performed in the media described by the current instance, or an empty array if no value is present. @@ -1478,7 +1638,7 @@ ___ ### pictures -• **pictures**(): [*IPicture*](../interfaces/ipicture.md)[] +• `get` **pictures**(): [`IPicture`](../interfaces/ipicture.md)[] Gets a collection of pictures associated with the media represented by the current instance. @@ -1486,12 +1646,14 @@ Gets a collection of pictures associated with the media represented by the curre it is capable of holding any type of image or file, including pictures of the band, the recording studio, the concert, etc. -**Returns:** [*IPicture*](../interfaces/ipicture.md)[] +#### Returns + +[`IPicture`](../interfaces/ipicture.md)[] Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. -• **pictures**(`value`: [*IPicture*](../interfaces/ipicture.md)[]): *void* +• `set` **pictures**(`value`): `void` Sets a collection of pictures associated with the media represented by the current instance. @@ -1499,13 +1661,15 @@ Sets a collection of pictures associated with the media represented by the curre it is capable of holding any type of image or file, including pictures of the band, the recording studio, the concert, etc. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | [*IPicture*](../interfaces/ipicture.md)[] | Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | [`IPicture`](../interfaces/ipicture.md)[] | Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. | -**Returns:** *void* +#### Returns + +`void` Array containing a collection of pictures associated with the media represented by the current instance or an empty array if no pictures are present. @@ -1514,25 +1678,29 @@ ___ ### publisher -• **publisher**(): *string* +• `get` **publisher**(): `string` Gets the publisher of the track. -**Returns:** *string* +#### Returns + +`string` Publisher of the track or `undefined` if no value is set -• **publisher**(`value`: *string*): *void* +• `set` **publisher**(`value`): `void` Sets the publisher of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Publisher of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Publisher of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` Publisher of the track or `undefined` if no value is set @@ -1540,25 +1708,29 @@ ___ ### remixedBy -• **remixedBy**(): *string* +• `get` **remixedBy**(): `string` Gets the remixer of the track. -**Returns:** *string* +#### Returns + +`string` Remixer of the track or `undefined` if no value is set -• **remixedBy**(`value`: *string*): *void* +• `set` **remixedBy**(`value`): `void` Sets the remixer of the track. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Remixer of the track or `undefined` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Remixer of the track or `undefined` if no value is set | +#### Returns -**Returns:** *void* +`void` Remixer of the track or `undefined` if no value is set @@ -1566,25 +1738,29 @@ ___ ### replayGainAlbumGain -• **replayGainAlbumGain**(): *number* +• `get` **replayGainAlbumGain**(): `number` Gets the ReplayGain album gain in dB. -**Returns:** *number* +#### Returns + +`number` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainAlbumGain**(`value`: *number*): *void* +• `set` **replayGainAlbumGain**(`value`): `void` Sets the ReplayGain album gain in dB. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set | +#### Returns -**Returns:** *void* +`void` Album gain as per the ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1592,25 +1768,29 @@ ___ ### replayGainAlbumPeak -• **replayGainAlbumPeak**(): *number* +• `get` **replayGainAlbumPeak**(): `number` Gets the ReplayGain album peak sample. -**Returns:** *number* +#### Returns + +`number` Album peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainAlbumPeak**(`value`: *number*): *void* +• `set` **replayGainAlbumPeak**(`value`): `void` Sets the ReplayGain album peak sample. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Album peak as per the ReplayGain specifications, or `NaN` if no value is set | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Album peak as per the ReplayGain specifications, or `NaN` if no value is set | +#### Returns -**Returns:** *void* +`void` Album peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1618,25 +1798,29 @@ ___ ### replayGainTrackGain -• **replayGainTrackGain**(): *number* +• `get` **replayGainTrackGain**(): `number` Gets the ReplayGain track gain in dB. -**Returns:** *number* +#### Returns + +`number` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set -• **replayGainTrackGain**(`value`: *number*): *void* +• `set` **replayGainTrackGain**(`value`): `void` Sets the ReplayGain track gain in dB. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set | -**Returns:** *void* +#### Returns + +`void` Track gain as per ReplayGain specifications, in dB, or `NaN` if no value is set @@ -1644,25 +1828,29 @@ ___ ### replayGainTrackPeak -• **replayGainTrackPeak**(): *number* +• `get` **replayGainTrackPeak**(): `number` Gets the ReplayGain track peak sample. -**Returns:** *number* +#### Returns + +`number` Track peak as per the ReplayGain specifications, or `NaN` if no value is set -• **replayGainTrackPeak**(`value`: *number*): *void* +• `set` **replayGainTrackPeak**(`value`): `void` Sets the ReplayGain track peak sample. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Track peak as per the ReplayGain specifications, or `NaN` if no value is set | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Track peak as per the ReplayGain specifications, or `NaN` if no value is set | -**Returns:** *void* +#### Returns + +`void` Track peak as per the ReplayGain specifications, or `NaN` if no value is set @@ -1670,7 +1858,7 @@ ___ ### subtitle -• **subtitle**(): *string* +• `get` **subtitle**(): `string` Gets a description, one-line. It represents the tagline of the vide/music. @@ -1678,12 +1866,14 @@ Gets a description, one-line. It represents the tagline of the vide/music. title on the front cover of the media. For example for "Ocean's 13", this would be "Revenge is a funny thing". -**Returns:** *string* +#### Returns + +`string` Subtitle of the media represented by the current instance or `undefined` if no value is present -• **subtitle**(`value`: *string*): *void* +• `set` **subtitle**(`value`): `void` Sets a description, one-line. It represents the tagline of the vide/music. @@ -1691,13 +1881,15 @@ Sets a description, one-line. It represents the tagline of the vide/music. title on the front cover of the media. For example for "Ocean's 13", this would be "Revenge is a funny thing". -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Subtitle of the media represented by the current instance or `undefined` if no value is present | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Subtitle of the media represented by the current instance or `undefined` if no value is present | -**Returns:** *void* +#### Returns + +`void` Subtitle of the media represented by the current instance or `undefined` if no value is present @@ -1706,7 +1898,7 @@ ___ ### title -• **title**(): *string* +• `get` **title**(): `string` Gets the title for the media described by the current instance. @@ -1714,12 +1906,14 @@ Gets the title for the media described by the current instance. "Time Won't Me Go" (a song by The Bravery), "Three Stories" (an episode of House MD), or "Fear and Loathing In Las Vegas" (a movie). -**Returns:** *string* +#### Returns + +`string` Title of the media described by the current instance or `undefined` if no value is present. -• **title**(`value`: *string*): *void* +• `set` **title**(`value`): `void` Sets the title for the media described by the current instance. @@ -1727,13 +1921,15 @@ Sets the title for the media described by the current instance. "Time Won't Me Go" (a song by The Bravery), "Three Stories" (an episode of House MD), or "Fear and Loathing In Las Vegas" (a movie). -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Title of the media described by the current instance or `undefined` if no value is present. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Title of the media described by the current instance or `undefined` if no value is present. | +#### Returns -**Returns:** *void* +`void` Title of the media described by the current instance or `undefined` if no value is present. @@ -1742,30 +1938,34 @@ ___ ### titleSort -• **titleSort**(): *string* +• `get` **titleSort**(): `string` Gets the sortable name for the title of the media described by the current instance. **`remarks`** Possibly used to sort compilations or episodic content. -**Returns:** *string* +#### Returns + +`string` Sortable name of the media described by the current instance or `undefined` if no value is present -• **titleSort**(`value`: *string*): *void* +• `set` **titleSort**(`value`): `void` Sets the sortable name for the title of the media described by the current instance. **`remarks`** Possibly used to sort compilations or episodic content. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | Sortable name of the media described by the current instance or `undefined` if no value is present | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* | Sortable name of the media described by the current instance or `undefined` if no value is present | +#### Returns -**Returns:** *void* +`void` Sortable name of the media described by the current instance or `undefined` if no value is present @@ -1774,7 +1974,7 @@ ___ ### track -• **track**(): *number* +• `get` **track**(): `number` Gets the position of the media represented by the current instance in its containing album or season (for a series). @@ -1785,12 +1985,14 @@ or season (for a series). value is used in the resulting tag. For a series, this property represents the episodes in a season of the series. -**Returns:** *number* +#### Returns + +`number` Position of the media represented by the current instance in its containing album or `0` if not specified. -• **track**(`value`: *number*): *void* +• `set` **track**(`value`): `void` Sets the position of the media represented by the current instance in its containing album or season (for a series). @@ -1801,13 +2003,15 @@ or season (for a series). value is used in the resulting tag. For a series, this property represents the episodes in a season of the series. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Position of the media represented by the current instance in its containing album or `0` if not specified. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Position of the media represented by the current instance in its containing album or `0` if not specified. | +#### Returns -**Returns:** *void* +`void` Position of the media represented by the current instance in its containing album or `0` if not specified. @@ -1816,7 +2020,7 @@ ___ ### trackCount -• **trackCount**(): *number* +• `get` **trackCount**(): `number` Gets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. @@ -1824,12 +2028,14 @@ represented by the current instance. **`remarks`** If non-zero, this value should be equal to or greater than [track](tag.md#track). If [track](tag.md#track) is `0`, this value should also be `0`. -**Returns:** *number* +#### Returns + +`number` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. -• **trackCount**(`value`: *number*): *void* +• `set` **trackCount**(`value`): `void` Sets the number of tracks in the album or the number of episodes in a series of the media represented by the current instance. @@ -1837,13 +2043,15 @@ represented by the current instance. **`remarks`** If non-zero, this value should be equal to or greater than [track](tag.md#track). If [track](tag.md#track) is `0`, this value should also be `0`. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. | -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. | +#### Returns -**Returns:** *void* +`void` Number of tracks in the album or number of episodes in a series of the media represented by the current instance or `0` if not specified. @@ -1852,7 +2060,7 @@ ___ ### year -• **year**(): *number* +• `get` **year**(): `number` Gets the year that the media represented by the current instance was recorded. @@ -1861,12 +2069,14 @@ Gets the year that the media represented by the current instance was recorded. be truncated when this property is set. Format specific implementations are necessary to access the higher precision values. -**Returns:** *number* +#### Returns + +`number` Year that the media represented by the current instance was created or `0` if no value is present. -• **year**(`value`: *number*): *void* +• `set` **year**(`value`): `void` Sets the year that the media represented by the current instance was recorded. @@ -1875,13 +2085,15 @@ Sets the year that the media represented by the current instance was recorded. be truncated when this property is set. Format specific implementations are necessary to access the higher precision values. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`value` | *number* | Year that the media represented by the current instance was created or `0` if no value is present. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | Year that the media represented by the current instance was created or `0` if no value is present. | -**Returns:** *void* +#### Returns + +`void` Year that the media represented by the current instance was created or `0` if no value is present. @@ -1890,19 +2102,21 @@ Year that the media represented by the current instance was created or `0` if no ### clear -▸ `Abstract`**clear**(): *void* +▸ `Abstract` **clear**(): `void` Clears all values stored in the current instance. **`remarks`** The clearing procedure is format specific and should clear all values. -**Returns:** *void* +#### Returns + +`void` ___ ### copyTo -▸ **copyTo**(`target`: [*Tag*](tag.md), `overwrite`: *boolean*): *void* +▸ **copyTo**(`target`, `overwrite`): `void` Copies the values from the current instance to another [Tag](tag.md), optionally overwriting existing values. @@ -1912,42 +2126,48 @@ Copies the values from the current instance to another [Tag](tag.md), optionally more advanced copying may be done. For example if both `this` and `target` are [Id3v2Tag](id3v2tag.md), all frames will be copied to the target. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`target` | [*Tag*](tag.md) | Target tag to copy values to | -`overwrite` | *boolean* | Whether or not to copy values over existing ones | +| Name | Type | Description | +| :------ | :------ | :------ | +| `target` | [`Tag`](tag.md) | Target tag to copy values to | +| `overwrite` | `boolean` | Whether or not to copy values over existing ones | -**Returns:** *void* +#### Returns + +`void` ___ ### setInfoTag -▸ **setInfoTag**(): *void* +▸ **setInfoTag**(): `void` Set the tags that represent the tagger software (node-taglib-sharp) itself. **`remarks`** This is typically a method to call just before saving a tag. -**Returns:** *void* +#### Returns + +`void` ___ ### firstInGroup -▸ `Protected` `Static`**firstInGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **firstInGroup**(`group`): `string` Gets the first string in an array. -#### Parameters: +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of strings to get the first string from. | +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of strings to get the first string from. | -**Returns:** *string* +#### Returns + +`string` First string contained in `group` or `undefined` if the array is `undefined` or empty @@ -1956,17 +2176,19 @@ ___ ### isFalsyOrLikeEmpty -▸ `Protected` `Static`**isFalsyOrLikeEmpty**(`value`: *string* \| *string*[]): *boolean* +▸ `Static` `Protected` **isFalsyOrLikeEmpty**(`value`): `boolean` Checks if a value is falsy or empty. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` \| `string`[] | Object to check | -Name | Type | Description | ------- | ------ | ------ | -`value` | *string* \| *string*[] | Object to check | +#### Returns -**Returns:** *boolean* +`boolean` If `value` is a string, `true` is returned if the value is falsy or all whitespace, `false` is returned otherwise. If `value` is an array of strings, @@ -1976,17 +2198,19 @@ ___ ### joinGroup -▸ `Protected` `Static`**joinGroup**(`group`: *string*[]): *string* +▸ `Static` `Protected` **joinGroup**(`group`): `string` Joins an array of string into a single, semicolon and space separated string. -#### Parameters: +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `group` | `string`[] | Array of string to join | -Name | Type | Description | ------- | ------ | ------ | -`group` | *string*[] | Array of string to join | +#### Returns -**Returns:** *string* +`string` A semicolon and space separated string containing the values from `group` or undefined if the array is `undefined` or empty. diff --git a/docs/enums/asfobjectdatatype.md b/docs/enums/asfobjectdatatype.md index 003622f5..0cf6eb09 100644 --- a/docs/enums/asfobjectdatatype.md +++ b/docs/enums/asfobjectdatatype.md @@ -2,7 +2,7 @@ # Enumeration: AsfObjectDataType -Indicates the type of data stored in a or object. +Indicates the type of data stored in a {@link ContentDescriptor} or {@link MetadataDescriptor} object. ## Table of contents @@ -20,7 +20,7 @@ Indicates the type of data stored in a or [*File*](classes/file.md) +Ƭ **FileTypeConstructor**: (`abstraction`: `IFileAbstraction`, `style`: [`ReadStyle`](enums/readstyle.md)) => [`File`](classes/file.md) + +#### Type declaration + +• (`abstraction`, `style`) + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `abstraction` | `IFileAbstraction` | +| `style` | [`ReadStyle`](enums/readstyle.md) | ___ ### FileTypeResolver -Ƭ **FileTypeResolver**: (`abstraction`: IFileAbstraction, `mimetype`: *string*, `style`: [*ReadStyle*](enums/readstyle.md)) => [*File*](classes/file.md) +Ƭ **FileTypeResolver**: (`abstraction`: `IFileAbstraction`, `mimetype`: `string`, `style`: [`ReadStyle`](enums/readstyle.md)) => [`File`](classes/file.md) + +#### Type declaration + +▸ (`abstraction`, `mimetype`, `style`): [`File`](classes/file.md) Delegate is used for intervening in [File.createFromPath](classes/file.md#createfrompath) by resolving the filetype before any standard resolution operations. -**`param`** File to be read. +##### Parameters -**`param`** MimeType of the file. +| Name | Type | Description | +| :------ | :------ | :------ | +| `abstraction` | `IFileAbstraction` | File to be read. | +| `mimetype` | `string` | - | +| `style` | [`ReadStyle`](enums/readstyle.md) | How to read media properties from the file | -**`param`** How to read media properties from the file +##### Returns -**`returns`** New instance of [File](classes/file.md) or `undefined` if the resolver could not be matched +[`File`](classes/file.md) -**`remarks`** A FileTypeResolver is one way of altering the behavior of - [File.createFromPath](classes/file.md#createfrompath) When [File.createFromPath](classes/file.md#createfrompath) is called, the registered - resolvers are invoked in reverse order in which they were registered. The resolver may then - perform any operations necessary, including other type-finding methods. If the resolver - returns a new [File](classes/file.md) it will instantly be returned, by [File.createFromPath](classes/file.md#createfrompath). If - it returns `undefined`, [File.createFromPath](classes/file.md#createfrompath) will continue to process. If the resolver - throws an exception, it will be uncaught. To register a resolver, use - [File.addFileTypeResolver](classes/file.md#addfiletyperesolver). +New instance of [File](classes/file.md) or `undefined` if the resolver could not be matched ## Properties ### Genres -• **Genres**: { `audioToIndex`: (`name`: *string*) => *number* ; `indexToAudio`: (`index`: *string* \| *number*, `allowParenthesis`: *boolean*) => *string* ; `indexToVideo`: (`index`: *string* \| *number*, `allowParenthesis`: *boolean*) => *string* ; `videoToIndex`: (`name`: *string*) => *number* } +• **Genres**: `Object` -#### Type declaration: +#### Type declaration -Name | Type | ------- | ------ | -`audioToIndex` | (`name`: *string*) => *number* | -`indexToAudio` | (`index`: *string* \| *number*, `allowParenthesis`: *boolean*) => *string* | -`indexToVideo` | (`index`: *string* \| *number*, `allowParenthesis`: *boolean*) => *string* | -`videoToIndex` | (`name`: *string*) => *number* | +| Name | Type | +| :------ | :------ | +| `audioToIndex` | (`name`: `string`) => `number` | +| `indexToAudio` | (`index`: `string` \| `number`, `allowParenthesis`: `boolean`) => `string` | +| `indexToVideo` | (`index`: `string` \| `number`, `allowParenthesis`: `boolean`) => `string` | +| `videoToIndex` | (`name`: `string`) => `number` | ___ ### Id3v2FrameFactory -• **Id3v2FrameFactory**: { `addFrameCreator`: (`creator`: FrameCreator) => *void* ; `clearFrameCreators`: () => *void* ; `createFrame`: (`data`: [*ByteVector*](classes/bytevector.md), `file`: [*File*](classes/file.md), `offset`: *number*, `version`: *number*, `alreadyUnsynced`: *boolean*) => { `frame`: [*Id3v2Frame*](classes/id3v2frame.md) ; `offset`: *number* } } +• **Id3v2FrameFactory**: `Object` -#### Type declaration: +#### Type declaration -Name | Type | ------- | ------ | -`addFrameCreator` | (`creator`: FrameCreator) => *void* | -`clearFrameCreators` | () => *void* | -`createFrame` | (`data`: [*ByteVector*](classes/bytevector.md), `file`: [*File*](classes/file.md), `offset`: *number*, `version`: *number*, `alreadyUnsynced`: *boolean*) => { `frame`: [*Id3v2Frame*](classes/id3v2frame.md) ; `offset`: *number* } | +| Name | Type | +| :------ | :------ | +| `addFrameCreator` | (`creator`: `FrameCreator`) => `void` | +| `clearFrameCreators` | () => `void` | +| `createFrame` | (`data`: [`ByteVector`](classes/bytevector.md), `file`: [`File`](classes/file.md), `offset`: `number`, `version`: `number`, `alreadyUnsynced`: `boolean`) => { `frame`: [`Id3v2Frame`](classes/id3v2frame.md) ; `offset`: `number` } | ## Variables ### Id3v2FrameIdentifiers -• `Const` **Id3v2FrameIdentifiers**: *object* +• `Const` **Id3v2FrameIdentifiers**: `Object` + +#### Index signature + +▪ [key: `string`]: [`Id3v2FrameIdentifier`](classes/id3v2frameidentifier.md) diff --git a/package.json b/package.json index 169fa9d2..6592a235 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "node-taglib-sharp", "description": "Read and write audio/video/picture tags using a similar interface to TagLib#", - "version": "3.3.1", + "version": "3.4.0", "license": "LGPL-2.1-or-later", "author": "Ben Russell (https://github.com/benrr101)", "repository": "github:benrr101/node-taglib-sharp", diff --git a/src/asf/objects/descriptorBase.ts b/src/asf/objects/descriptorBase.ts index c76c5209..7c65fdd1 100644 --- a/src/asf/objects/descriptorBase.ts +++ b/src/asf/objects/descriptorBase.ts @@ -4,7 +4,7 @@ import {CorruptFileError} from "../../errors"; import {Guards} from "../../utils"; /** - * Indicates the type of data stored in a or object. + * Indicates the type of data stored in a {@link ContentDescriptor} or {@link MetadataDescriptor} object. */ export enum DataType { /** diff --git a/src/riff/aviStream.ts b/src/riff/aviStream.ts index 07abcfa3..d290b632 100644 --- a/src/riff/aviStream.ts +++ b/src/riff/aviStream.ts @@ -15,7 +15,7 @@ export abstract class AviStream { /** * Constructs and initializes a new instance with a specified stream header. - * @param header The strean's header + * @param header The stream's header * @protected */ protected constructor(header: AviStreamHeader) { diff --git a/src/riff/aviStreamHeader.ts b/src/riff/aviStreamHeader.ts index 57449158..2e66d757 100644 --- a/src/riff/aviStreamHeader.ts +++ b/src/riff/aviStreamHeader.ts @@ -120,7 +120,7 @@ export class AviStreamHeader { /** * Gets an indicator of the quality of the data in the stream. Quality is represented as a - * number between `0` and `10000`. -1 indicates the default quality values shold be used. + * number between `0` and `10000`. -1 indicates the default quality values should be used. * @remarks For compressed data, this typically represents the value of the quality parameter * passed to the compression software. */ @@ -130,7 +130,7 @@ export class AviStreamHeader { * Used with {@see scale} to specify the time scale that this stream will use. * @remarks Dividing {@see rate} by this gives the number of samples per second. For video * streams, this is the frame rate. For audio streams, this rate corresponds to the time - * needed to play {@see RiffWaveFormatEx.blockAligh} bytes of audio. For PCM audio this is + * needed to play {@see RiffWaveFormatEx.blockAlign} bytes of audio. For PCM audio this is * just the sample rate. */ public get rate(): number { return this._rate; } diff --git a/src/riff/riffFile.ts b/src/riff/riffFile.ts index abfac7e5..f2068519 100644 --- a/src/riff/riffFile.ts +++ b/src/riff/riffFile.ts @@ -315,7 +315,7 @@ export default class RiffFile extends File { case "movi": // "movi" contains the media data for an AVI and its contents - // represent the inavariant portion of the file + // represent the invariant portion of the file if (streamFormat !== "AVI ") { break; } @@ -330,7 +330,7 @@ export default class RiffFile extends File { case "ID3 ": case "ID32": // "ID32" is a custom box for this format that contains an ID3v2 tag. - // "ID3 " and "id3 " have become defacto standards. + // "ID3 " and "id3 " have become de facto standards. if (readTags && !this._id3v2Tag) { this._id3v2Tag = Id3v2Tag.fromFile(this, position + 8, style); } diff --git a/test-unit/aac/aacAudioHeaderTests.ts b/test-unit/aac/aacAudioHeaderTests.ts index cc613c01..9433db38 100644 --- a/test-unit/aac/aacAudioHeaderTests.ts +++ b/test-unit/aac/aacAudioHeaderTests.ts @@ -23,7 +23,7 @@ class Aac_AudioHeaderTests { @test public constructor_invalidData() { // Arrange - const testFunc = (a: number, b: number, c: number, d: number) => { const _ = new AacAudioHeader(a, b, c, d); }; + const testFunc = (a: number, b: number, c: number, d: number) => new AacAudioHeader(a, b, c, d); // Act / Assert Testers.testUint((v: number) => testFunc(v, 0, 0, 0)); diff --git a/test-unit/aiff/aiffStreamHeaderTests.ts b/test-unit/aiff/aiffStreamHeaderTests.ts index fe3fc703..6a9a0f6b 100644 --- a/test-unit/aiff/aiffStreamHeaderTests.ts +++ b/test-unit/aiff/aiffStreamHeaderTests.ts @@ -13,7 +13,7 @@ const assert = Chai.assert; @test public constructor_invalidData() { // Arrange - const testFunc = (a: ByteVector, b: number) => { const _ = new AiffStreamHeader(a, b); }; + const testFunc = (a: ByteVector, b: number) => new AiffStreamHeader(a, b); // Act / Assert Testers.testTruthy((v: ByteVector) => testFunc(v, 0)); @@ -23,7 +23,7 @@ const assert = Chai.assert; @test public constructor_dataDoesNotStartWithIdentifier() { // Act / Assert - assert.throws(() => { const _ = new AiffStreamHeader(ByteVector.fromSize(10), 0); }); + assert.throws(() => new AiffStreamHeader(ByteVector.fromSize(10), 0)); } @test diff --git a/test-unit/ape/apeStreamHeaderTests.ts b/test-unit/ape/apeStreamHeaderTests.ts index 344ce482..1038d499 100644 --- a/test-unit/ape/apeStreamHeaderTests.ts +++ b/test-unit/ape/apeStreamHeaderTests.ts @@ -16,8 +16,8 @@ const assert = Chai.assert; const data = ByteVector.empty(); // Act / Assert - Testers.testTruthy((v: ByteVector) => { const _ = new ApeStreamHeader(v, 123); }); - Testers.testUint((v: number) => { const _ = new ApeStreamHeader(data, v); }); + Testers.testTruthy((v: ByteVector) => new ApeStreamHeader(v, 123)); + Testers.testUint((v: number) => new ApeStreamHeader(data, v)); } @test @@ -29,7 +29,7 @@ const assert = Chai.assert; ); // Act / Assert - assert.throw(() => { const _ = new ApeStreamHeader(data, 123); }); + assert.throw(() => new ApeStreamHeader(data, 123)); } @test @@ -41,7 +41,7 @@ const assert = Chai.assert; ); // Act / Assert - assert.throw(() => { const _ = new ApeStreamHeader(data, 123); }); + assert.throw(() => new ApeStreamHeader(data, 123)); } @test diff --git a/test-unit/ape/apeTagFooterTests.ts b/test-unit/ape/apeTagFooterTests.ts index 165c8345..ee608479 100644 --- a/test-unit/ape/apeTagFooterTests.ts +++ b/test-unit/ape/apeTagFooterTests.ts @@ -22,9 +22,9 @@ const _sampleData = ByteVector.concatenate( @test public fromData_invalidParameters() { // Act / Assert - Testers.testTruthy((v: ByteVector) => { const _ = ApeTagFooter.fromData(v); }); - assert.throws(() => { const _ = ApeTagFooter.fromData(ByteVector.fromSize(10)); }); - assert.throws(() => { const _ = ApeTagFooter.fromData(ByteVector.fromSize(40)); }); + Testers.testTruthy((v: ByteVector) => ApeTagFooter.fromData(v)); + assert.throws(() => ApeTagFooter.fromData(ByteVector.fromSize(10))); + assert.throws(() => ApeTagFooter.fromData(ByteVector.fromSize(40))); } @test diff --git a/test-unit/ape/apeTagTests.ts b/test-unit/ape/apeTagTests.ts index 0da18a6c..a57ad8e0 100644 --- a/test-unit/ape/apeTagTests.ts +++ b/test-unit/ape/apeTagTests.ts @@ -696,22 +696,22 @@ function getTestTagFooter(flags: ApeTagFooterFlags, itemCount: number, itemPlusF @test public initialKey() { - this.testUnsupportedText((t, v) => { t.initialKey = v; }, (t) => t.initialKey); + Ape_Tag_PropertyTests.testUnsupportedText((t, v) => { t.initialKey = v; }, (t) => t.initialKey); } @test public remixedBy() { - this.testUnsupportedText((t, v) => { t.remixedBy = v; }, (t) => t.remixedBy); + Ape_Tag_PropertyTests.testUnsupportedText((t, v) => { t.remixedBy = v; }, (t) => t.remixedBy); } @test public publisher() { - this.testUnsupportedText((t, v) => { t.publisher = v; }, (t) => t.publisher); + Ape_Tag_PropertyTests.testUnsupportedText((t, v) => { t.publisher = v; }, (t) => t.publisher); } @test public isrc() { - this.testUnsupportedText((t, v) => { t.isrc = v; }, (t) => t.isrc); + Ape_Tag_PropertyTests.testUnsupportedText((t, v) => { t.isrc = v; }, (t) => t.isrc); } private testFractionalUintItem( @@ -875,7 +875,7 @@ function getTestTagFooter(flags: ApeTagFooterFlags, itemCount: number, itemPlusF assert.strictEqual(tag.items.length, 0); } - private testUnsupportedText( + private static testUnsupportedText( set: (t: ApeTag, v: string) => void, get: (t: ApeTag) => string ) { diff --git a/test-unit/asf/asfTagTests.ts b/test-unit/asf/asfTagTests.ts index 72f31283..8687ba1b 100644 --- a/test-unit/asf/asfTagTests.ts +++ b/test-unit/asf/asfTagTests.ts @@ -54,10 +54,10 @@ const getHeaderExtensionObject: (children: BaseObject[]) => HeaderExtensionObjec const getTagWithExtensionDescriptor: (descriptorName: string, descriptorType: DataType, descriptorValue: any) => AsfTag = (descriptorName: string, descriptorType: DataType, descriptorValue: any) => { const descriptor = new ContentDescriptor(descriptorName, descriptorType, descriptorValue); - const edco = ExtendedContentDescriptionObject.fromEmpty(); - edco.addDescriptor(descriptor); + const ecdo = ExtendedContentDescriptionObject.fromEmpty(); + ecdo.addDescriptor(descriptor); - const header = getHeaderObject([edco]); + const header = getHeaderObject([ecdo]); return AsfTag.fromHeader(header); }; @@ -1266,13 +1266,13 @@ const getTagWithExtensionDescriptor: (descriptorName: string, descriptorType: Da // TEST CASE 2: Preferential descriptor names ---------------------- for (let i = 0; i < descriptorName.length; i++) { // Arrange - const edco = ExtendedContentDescriptionObject.fromEmpty(); + const ecdo = ExtendedContentDescriptionObject.fromEmpty(); for (let j = descriptorName.length; j > i; j--) { const descriptor = new ContentDescriptor(descriptorName[j - 1], DataType.Unicode, `foo${j - 1};bar`); - edco.addDescriptor(descriptor); + ecdo.addDescriptor(descriptor); } - const headerObject = getHeaderObject([edco]); + const headerObject = getHeaderObject([ecdo]); const tag2 = AsfTag.fromHeader(headerObject); const setProp2 = (v: string[]) => set(tag2, v); const getProp2 = () => get(tag2); diff --git a/test-unit/asf/headerExtensionObjectTests.ts b/test-unit/asf/headerExtensionObjectTests.ts index 2ba71f0c..a7b59aa0 100644 --- a/test-unit/asf/headerExtensionObjectTests.ts +++ b/test-unit/asf/headerExtensionObjectTests.ts @@ -64,7 +64,7 @@ const assert = Chai.assert; // Arrange const metadataLibraryObject = MetadataLibraryObject.fromEmpty(); const unknownObject = ContentDescriptionObject.fromEmpty(); - const data = this.getObjectBytes([metadataLibraryObject, unknownObject]); + const data = Asf_HeaderExtensionObjectTests.getObjectBytes([metadataLibraryObject, unknownObject]); const file = TestFile.getFile(data); // Act @@ -85,7 +85,7 @@ const assert = Chai.assert; @test public children_isReadonly() { // Arrange - const data = this.getObjectBytes([]); + const data = Asf_HeaderExtensionObjectTests.getObjectBytes([]); const file = TestFile.getFile(data); const output = HeaderExtensionObject.fromFile(file, 0); @@ -107,7 +107,7 @@ const assert = Chai.assert; @test public addUniqueObject_noMatches() { // Arrange - const data = this.getObjectBytes([]); + const data = Asf_HeaderExtensionObjectTests.getObjectBytes([]); const file = TestFile.getFile(data); const output = HeaderExtensionObject.fromFile(file, 0); @@ -126,7 +126,7 @@ const assert = Chai.assert; // Arrange const metadataLibraryObject = MetadataLibraryObject.fromEmpty(); const unknownObject = ContentDescriptionObject.fromEmpty(); - const data = this.getObjectBytes([metadataLibraryObject, unknownObject]); + const data = Asf_HeaderExtensionObjectTests.getObjectBytes([metadataLibraryObject, unknownObject]); const file = TestFile.getFile(data); const output = HeaderExtensionObject.fromFile(file, 0); @@ -146,7 +146,7 @@ const assert = Chai.assert; @test public render_isRoundTrip() { // Arrange - const data = this.getObjectBytes([ + const data = Asf_HeaderExtensionObjectTests.getObjectBytes([ MetadataLibraryObject.fromEmpty(), ContentDescriptionObject.fromEmpty() ]); @@ -160,7 +160,7 @@ const assert = Chai.assert; assert.isTrue(ByteVector.equal(output, data)); } - private getObjectBytes(children: BaseObject[]) { + private static getObjectBytes(children: BaseObject[]) { const childrenBytes = ByteVector.concatenate(... children.map((o) => o.render())); return ByteVector.concatenate( Guids.AsfHeaderExtensionObject.toBytes(), // Object ID diff --git a/test-unit/asf/headerObjectTests.ts b/test-unit/asf/headerObjectTests.ts index 7a7a572c..c3339496 100644 --- a/test-unit/asf/headerObjectTests.ts +++ b/test-unit/asf/headerObjectTests.ts @@ -61,7 +61,7 @@ const assert = Chai.assert; // Arrange const paddingObject = PaddingObject.fromSize(123); const unknownObject = MetadataLibraryObject.fromEmpty(); - const bytes = this.getObjectBytesFromObjects([paddingObject, unknownObject]); + const bytes = Asf_HeaderObjectTests.getObjectBytesFromObjects([paddingObject, unknownObject]); const file = TestFile.getFile(bytes); // Act @@ -97,7 +97,7 @@ const assert = Chai.assert; ByteVector.fromUInt(0, false), // Header extension data length ); - const headerBytes = this.getObjectBytesFromBytes(headerExtensionBytes, 1); + const headerBytes = Asf_HeaderObjectTests.getObjectBytesFromBytes(headerExtensionBytes, 1); const headerFile = TestFile.getFile(headerBytes); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -113,7 +113,7 @@ const assert = Chai.assert; @test public children_isReadOnly() { // Arrange - const headerBytes = this.getObjectBytesFromObjects([]); + const headerBytes = Asf_HeaderObjectTests.getObjectBytesFromObjects([]); const headerFile = TestFile.getFile(headerBytes); const headerObject = HeaderObject.fromFile(headerFile, 10); const children = headerObject.children; @@ -129,7 +129,7 @@ const assert = Chai.assert; public hasContentDescriptors_contentDescriptionObject() { // Arrange const contentDescriptionObject = ContentDescriptionObject.fromEmpty(); - const headerBytes = this.getObjectBytesFromObjects([contentDescriptionObject]); + const headerBytes = Asf_HeaderObjectTests.getObjectBytesFromObjects([contentDescriptionObject]); const headerFile = TestFile.getFile(headerBytes); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -144,7 +144,7 @@ const assert = Chai.assert; public hasContentDescriptors_extendedContentDescriptorObject() { // Arrange const extendedContentDescriptionObject = ExtendedContentDescriptionObject.fromEmpty(); - const headerBytes = this.getObjectBytesFromObjects([extendedContentDescriptionObject]); + const headerBytes = Asf_HeaderObjectTests.getObjectBytesFromObjects([extendedContentDescriptionObject]); const headerFile = TestFile.getFile(headerBytes); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -195,7 +195,7 @@ const assert = Chai.assert; ); const childrenBytes = ByteVector.concatenate(filePropertiesBytes, streamPropertiesBytes); - const headerBytes = this.getObjectBytesFromBytes(childrenBytes, 2); + const headerBytes = Asf_HeaderObjectTests.getObjectBytesFromBytes(childrenBytes, 2); const headerFile = TestFile.getFile(headerBytes); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -212,7 +212,7 @@ const assert = Chai.assert; @test public addUniqueObject_noMatches() { // Arrange - const data = this.getObjectBytesFromObjects([]); + const data = Asf_HeaderObjectTests.getObjectBytesFromObjects([]); const file = TestFile.getFile(data); const output = HeaderObject.fromFile(file, 10); @@ -233,7 +233,7 @@ const assert = Chai.assert; const unknownObject = MetadataLibraryObject.fromEmpty(); const newObject = PaddingObject.fromSize(234); - const data = this.getObjectBytesFromObjects([paddingObject, unknownObject]); + const data = Asf_HeaderObjectTests.getObjectBytesFromObjects([paddingObject, unknownObject]); const file = TestFile.getFile(data); const output = HeaderObject.fromFile(file, 10); @@ -252,7 +252,7 @@ const assert = Chai.assert; // Arrange const paddingObject = PaddingObject.fromSize(123); const unknownObject = MetadataLibraryObject.fromEmpty(); - const headerData = this.getObjectBytesFromObjects([paddingObject, unknownObject]); + const headerData = Asf_HeaderObjectTests.getObjectBytesFromObjects([paddingObject, unknownObject]); const headerFile = TestFile.getFile(headerData); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -268,7 +268,9 @@ const assert = Chai.assert; // Arrange const contentDescriptionObject = ContentDescriptionObject.fromEmpty(); const extendedContentDescription = ExtendedContentDescriptionObject.fromEmpty(); - const headerBytes = this.getObjectBytesFromObjects([contentDescriptionObject, extendedContentDescription]); + const headerBytes = Asf_HeaderObjectTests.getObjectBytesFromObjects( + [contentDescriptionObject, extendedContentDescription] + ); const headerFile = TestFile.getFile(headerBytes); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -285,7 +287,7 @@ const assert = Chai.assert; const unknownObject = MetadataLibraryObject.fromEmpty(); const paddingObject = PaddingObject.fromSize(123); - const headerData = this.getObjectBytesFromObjects([unknownObject, paddingObject]); + const headerData = Asf_HeaderObjectTests.getObjectBytesFromObjects([unknownObject, paddingObject]); const headerFile = TestFile.getFile(headerData); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -302,7 +304,7 @@ const assert = Chai.assert; public render_objectGrew_adds4096Padding() { // Arrange const unknownObject = MetadataLibraryObject.fromEmpty(); - const headerData = this.getObjectBytesFromObjects([unknownObject]); + const headerData = Asf_HeaderObjectTests.getObjectBytesFromObjects([unknownObject]); const headerFile = TestFile.getFile(headerData); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -318,7 +320,7 @@ const assert = Chai.assert; newObject, PaddingObject.fromSize(4096) ]; - const expected = this.getObjectBytesFromObjects(expectedChildren); + const expected = Asf_HeaderObjectTests.getObjectBytesFromObjects(expectedChildren); assert.isTrue(ByteVector.equal(output, expected.mid(10))); } @@ -328,7 +330,7 @@ const assert = Chai.assert; const unknownObject1 = MetadataLibraryObject.fromEmpty(); const unknownObject2 = MetadataLibraryObject.fromEmpty(); - const headerData = this.getObjectBytesFromObjects([unknownObject1, unknownObject2]); + const headerData = Asf_HeaderObjectTests.getObjectBytesFromObjects([unknownObject1, unknownObject2]); const headerFile = TestFile.getFile(headerData); const headerObject = HeaderObject.fromFile(headerFile, 10); @@ -339,7 +341,7 @@ const assert = Chai.assert; assert.isTrue(ByteVector.equal(output, headerData.mid(10))); } - private getObjectBytesFromBytes(children: ByteVector, childrenCount: number) { + private static getObjectBytesFromBytes(children: ByteVector, childrenCount: number) { return ByteVector.concatenate( ByteVector.fromSize(10), // Offset Guids.AsfHeaderObject.toBytes(), // Object ID @@ -350,7 +352,7 @@ const assert = Chai.assert; ); } - private getObjectBytesFromObjects(children: BaseObject[]) { + private static getObjectBytesFromObjects(children: BaseObject[]) { const childrenBytes = ByteVector.concatenate(... children.map((o) => o.render())); return ByteVector.concatenate( ByteVector.fromSize(10), // Offset diff --git a/test-unit/byteVectorConstructorTests.ts b/test-unit/byteVectorConstructorTests.ts index 19749b6c..aac1a75f 100644 --- a/test-unit/byteVectorConstructorTests.ts +++ b/test-unit/byteVectorConstructorTests.ts @@ -262,7 +262,7 @@ const assert = Chai.assert; @test public fromInt_zero_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x0, [0x0, 0x0, 0x0, 0x0], undefined, @@ -272,7 +272,7 @@ const assert = Chai.assert; @test public fromInt_zero_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x0, [0x0, 0x0, 0x0, 0x0], undefined, @@ -282,7 +282,7 @@ const assert = Chai.assert; @test public fromInt_positive1Byte_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x12, [0x00, 0x00, 0x00, 0x12], undefined, @@ -292,7 +292,7 @@ const assert = Chai.assert; @test public fromInt_positive1Byte_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x12, [0x12, 0x00, 0x00, 0x00], undefined, @@ -302,7 +302,7 @@ const assert = Chai.assert; @test public fromInt_positive2Byte_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x1234, [0x00, 0x00, 0x12, 0x34], undefined, @@ -312,7 +312,7 @@ const assert = Chai.assert; @test public fromInt_positive2Byte_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x1234, [0x34, 0x12, 0x00, 0x00], undefined, @@ -322,7 +322,7 @@ const assert = Chai.assert; @test public fromInt_positive3Byte_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x123456, [0x00, 0x12, 0x34, 0x56], undefined, @@ -332,7 +332,7 @@ const assert = Chai.assert; @test public fromInt_positive3Byte_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x123456, [0x56, 0x34, 0x12, 0x00], undefined, @@ -342,7 +342,7 @@ const assert = Chai.assert; @test public fromInt_positive4Byte_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x12345678, [0x12, 0x34, 0x56, 0x78], undefined, @@ -352,7 +352,7 @@ const assert = Chai.assert; @test public fromInt_positive4Byte_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0x12345678, [0x78, 0x56, 0x34, 0x12], undefined, @@ -362,7 +362,7 @@ const assert = Chai.assert; @test public fromInt_negative1Byte_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( -0x12, [0xFF, 0xFF, 0xFF, 0xEE], undefined, @@ -372,7 +372,7 @@ const assert = Chai.assert; @test public fromInt_negative1Byte_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( -0x12, [0xEE, 0xFF, 0xFF, 0xFF], undefined, @@ -382,7 +382,7 @@ const assert = Chai.assert; @test public fromInt_negative2Byte_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( -0x1234, [0xFF, 0xFF, 0xED, 0xCC], undefined, @@ -392,7 +392,7 @@ const assert = Chai.assert; @test public fromInt_negative2Byte_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( -0x1234, [0xCC, 0xED, 0xFF, 0xFF], undefined, @@ -402,7 +402,7 @@ const assert = Chai.assert; @test public fromInt_negative3Byte_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( -0x123456, [0xFF, 0xED, 0xCB, 0xAA], undefined, @@ -412,7 +412,7 @@ const assert = Chai.assert; @test public fromInt_negative3Byte_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( -0x123456, [0xAA, 0xCB, 0xED, 0xFF], undefined, @@ -422,7 +422,7 @@ const assert = Chai.assert; @test public fromInt_negative4Byte_bigEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( -0x12345678, [0xED, 0xCB, 0xA9, 0x88], undefined, @@ -432,7 +432,7 @@ const assert = Chai.assert; @test public fromInt_negative4Byte_littleEndian() { - this.testInt( + ByteVector_ConstructorTests.testInt( -0x12345678, [0x88, 0xA9, 0xCB, 0xED], undefined, @@ -442,7 +442,7 @@ const assert = Chai.assert; @test public fromInt_readOnly() { - this.testInt( + ByteVector_ConstructorTests.testInt( 0, [0x00, 0x00, 0x00, 0x00], true, @@ -899,7 +899,7 @@ const assert = Chai.assert; @test public fromShort_zero_bigEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( 0x0, [0x0, 0x0], undefined, @@ -909,7 +909,7 @@ const assert = Chai.assert; @test public fromShort_zero_littleEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( 0x0, [0x0, 0x0], undefined, @@ -919,7 +919,7 @@ const assert = Chai.assert; @test public fromShort_positive1Byte_bigEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( 0x12, [0x00, 0x12], undefined, @@ -929,7 +929,7 @@ const assert = Chai.assert; @test public fromShort_positive1Byte_littleEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( 0x12, [0x12, 0x00], undefined, @@ -939,7 +939,7 @@ const assert = Chai.assert; @test public fromShort_positive2Byte_bigEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( 0x1234, [0x12, 0x34], undefined, @@ -949,7 +949,7 @@ const assert = Chai.assert; @test public fromShort_positive2Byte_littleEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( 0x1234, [0x34, 0x12], undefined, @@ -959,7 +959,7 @@ const assert = Chai.assert; @test public fromShort_negative1Byte_bigEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( -0x12, [0xFF, 0xEE], undefined, @@ -969,7 +969,7 @@ const assert = Chai.assert; @test public fromShort_negative1Byte_littleEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( -0x12, [0xEE, 0xFF], undefined, @@ -979,7 +979,7 @@ const assert = Chai.assert; @test public fromShort_negative2Byte_bigEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( -0x1234, [0xED, 0xCC], undefined, @@ -989,7 +989,7 @@ const assert = Chai.assert; @test public fromShort_negative2Byte_littleEndian() { - this.testShort( + ByteVector_ConstructorTests.testShort( -0x1234, [0xCC, 0xED], undefined, @@ -999,7 +999,7 @@ const assert = Chai.assert; @test public fromShort_readOnly() { - this.testShort( + ByteVector_ConstructorTests.testShort( 0x0, [0x0, 0x0], true, @@ -1145,7 +1145,7 @@ const assert = Chai.assert; @test public fromString_utf8Full() { - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.UTF8.str, TestConstants.testStrings.UTF8.bytes, undefined, @@ -1156,7 +1156,7 @@ const assert = Chai.assert; @test public fromString_utf8Partial() { - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.UTF8.str, TestConstants.testStrings.UTF8.bytes.slice(0, 9), undefined, @@ -1167,7 +1167,7 @@ const assert = Chai.assert; @test public fromString_utf8Empty() { - this.testString( + ByteVector_ConstructorTests.testString( "", [], undefined, @@ -1179,7 +1179,7 @@ const assert = Chai.assert; @test public fromString_utf16LittleEndianFull() { const originalLastUtf16Encoding = ByteVector.lastUtf16Encoding; - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.UTF16LE.str, TestConstants.testStrings.UTF16LE.bytes, StringType.UTF16LE, @@ -1192,7 +1192,7 @@ const assert = Chai.assert; @test public fromString_utf16LittleEndianPartial() { const originalLastUtf16Encoding = ByteVector.lastUtf16Encoding; - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.UTF16LE.str, TestConstants.testStrings.UTF16LE.bytes.slice(0, 12), StringType.UTF16LE, @@ -1205,7 +1205,7 @@ const assert = Chai.assert; @test public fromString_utf16LittleEndianEmpty() { const originalLastUtf16Encoding = ByteVector.lastUtf16Encoding; - this.testString( + ByteVector_ConstructorTests.testString( "", [], StringType.UTF16LE, @@ -1218,7 +1218,7 @@ const assert = Chai.assert; @test public fromString_utf16BigEndianFull() { const originalLastUtf16Encoding = ByteVector.lastUtf16Encoding; - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.UTF16BE.str, TestConstants.testStrings.UTF16BE.bytes, StringType.UTF16BE, @@ -1231,7 +1231,7 @@ const assert = Chai.assert; @test public fromString_utf16BigEndianPartial() { const originalLastUtf16Encoding = ByteVector.lastUtf16Encoding; - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.UTF16BE.str, TestConstants.testStrings.UTF16BE.bytes.slice(0, 12), StringType.UTF16BE, @@ -1244,7 +1244,7 @@ const assert = Chai.assert; @test public fromString_utf16BigEndianEmpty() { const originalLastUtf16Encoding = ByteVector.lastUtf16Encoding; - this.testString( + ByteVector_ConstructorTests.testString( "", [], StringType.UTF16BE, @@ -1256,7 +1256,7 @@ const assert = Chai.assert; @test public fromString_latin1Full() { - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.Latin1.str, TestConstants.testStrings.Latin1.bytes, StringType.Latin1, @@ -1267,7 +1267,7 @@ const assert = Chai.assert; @test public fromString_latin1Partial() { - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.Latin1.str, TestConstants.testStrings.Latin1.bytes.slice(0, 6), StringType.Latin1, @@ -1278,7 +1278,7 @@ const assert = Chai.assert; @test public fromString_latin1Empty() { - this.testString( + ByteVector_ConstructorTests.testString( "", [], StringType.Latin1, @@ -1293,7 +1293,7 @@ const assert = Chai.assert; const originalLastEncoding = ByteVector.lastUtf16Encoding; ByteVector.lastUtf16Encoding = "something bogus"; - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.UTF16LEWithBOM.str, TestConstants.testStrings.UTF16LEWithBOM.bytes, StringType.UTF16, @@ -1312,7 +1312,7 @@ const assert = Chai.assert; const originalLastEncoding = ByteVector.lastUtf16Encoding; ByteVector.lastUtf16Encoding = "something bogus"; - this.testString( + ByteVector_ConstructorTests.testString( TestConstants.testStrings.UTF16LEWithBOM.str, TestConstants.testStrings.UTF16LEWithBOM.bytes.slice(0, 14), StringType.UTF16, @@ -1331,7 +1331,7 @@ const assert = Chai.assert; const originalLastEncoding = ByteVector.lastUtf16Encoding; ByteVector.lastUtf16Encoding = "something bogus"; - this.testString( + ByteVector_ConstructorTests.testString( "", TestConstants.testStrings.UTF16LEWithBOM.bytes.slice(0, 2), StringType.UTF16, @@ -1346,7 +1346,7 @@ const assert = Chai.assert; @test public fromString_readOnly() { - this.testString( + ByteVector_ConstructorTests.testString( "", [], StringType.Latin1, @@ -1369,7 +1369,7 @@ const assert = Chai.assert; @test public fromUInt_zero_bigEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x0, [0x0, 0x0, 0x0, 0x0], undefined, @@ -1379,7 +1379,7 @@ const assert = Chai.assert; @test public fromUInt_zero_littleEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x0, [0x0, 0x0, 0x0, 0x0], undefined, @@ -1389,7 +1389,7 @@ const assert = Chai.assert; @test public fromUInt_positive1Byte_bigEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x12, [0x00, 0x00, 0x00, 0x12], undefined, @@ -1399,7 +1399,7 @@ const assert = Chai.assert; @test public fromUInt_positive1Byte_littleEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x12, [0x12, 0x00, 0x00, 0x00], undefined, @@ -1409,7 +1409,7 @@ const assert = Chai.assert; @test public fromUInt_positive2Byte_bigEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x1234, [0x00, 0x00, 0x12, 0x34], undefined, @@ -1419,7 +1419,7 @@ const assert = Chai.assert; @test public fromUInt_positive2Byte_littleEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x1234, [0x34, 0x12, 0x00, 0x00], undefined, @@ -1429,7 +1429,7 @@ const assert = Chai.assert; @test public fromUInt_positive3Byte_bigEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x123456, [0x00, 0x12, 0x34, 0x56], undefined, @@ -1439,7 +1439,7 @@ const assert = Chai.assert; @test public fromUInt_positive3Byte_littleEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x123456, [0x56, 0x34, 0x12, 0x00], undefined, @@ -1449,7 +1449,7 @@ const assert = Chai.assert; @test public fromUInt_positive4Byte_bigEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x12345678, [0x12, 0x34, 0x56, 0x78], undefined, @@ -1459,7 +1459,7 @@ const assert = Chai.assert; @test public fromUInt_positive4Byte_littleEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0x12345678, [0x78, 0x56, 0x34, 0x12], undefined, @@ -1469,7 +1469,7 @@ const assert = Chai.assert; @test public fromUInt_unsignedRange_bigEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0xFFFFFFFF, [0xFF, 0xFF, 0xFF, 0xFF], undefined, @@ -1479,7 +1479,7 @@ const assert = Chai.assert; @test public fromUInt_unsignedRange_littleEndian() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0xFFFFFFFF, [0xFF, 0xFF, 0xFF, 0xFF], undefined, @@ -1489,7 +1489,7 @@ const assert = Chai.assert; @test public fromUInt_readOnly() { - this.testUInt( + ByteVector_ConstructorTests.testUInt( 0, [0x00, 0x00, 0x00, 0x00], true, @@ -1881,7 +1881,7 @@ const assert = Chai.assert; @test public fromUShort_zero_bigEndian() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0x0, [0x0, 0x0], undefined, @@ -1891,7 +1891,7 @@ const assert = Chai.assert; @test public fromUShort_zero_littleEndian() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0x0, [0x0, 0x0], undefined, @@ -1901,7 +1901,7 @@ const assert = Chai.assert; @test public fromUShort_positive1Byte_bigEndian() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0x12, [0x00, 0x12], undefined, @@ -1911,7 +1911,7 @@ const assert = Chai.assert; @test public fromUShort_positive1Byte_littleEndian() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0x12, [0x12, 0x00], undefined, @@ -1921,7 +1921,7 @@ const assert = Chai.assert; @test public fromUShort_positive2Byte_bigEndian() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0x1234, [0x12, 0x34], undefined, @@ -1931,7 +1931,7 @@ const assert = Chai.assert; @test public fromUShort_positive2Byte_littleEndian() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0x1234, [0x34, 0x12], undefined, @@ -1941,7 +1941,7 @@ const assert = Chai.assert; @test public fromUShort_unsignedRange_bigEndian() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0xFFFF, [0xFF, 0xFF], undefined, @@ -1951,7 +1951,7 @@ const assert = Chai.assert; @test public fromUShort_unsignedRange_littleEndian() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0xFFFF, [0xFF, 0xFF], undefined, @@ -1961,7 +1961,7 @@ const assert = Chai.assert; @test public fromUShort_readOnly() { - this.testUShort( + ByteVector_ConstructorTests.testUShort( 0x0, [0x0, 0x0], true, @@ -1969,7 +1969,7 @@ const assert = Chai.assert; ); } - private testInt(value: number, expectedData: number[], isReadOnly: boolean, bigEndian: boolean): void { + private static testInt(value: number, expectedData: number[], isReadOnly: boolean, bigEndian: boolean): void { // Arrange, Act const bv = ByteVector.fromInt(value, bigEndian, isReadOnly); @@ -2006,7 +2006,7 @@ const assert = Chai.assert; assert.deepEqual(bv.data, new Uint8Array(expectedData)); } - private testShort(value: number, expectedData: number[], isReadOnly: boolean, bigEndian: boolean): void { + private static testShort(value: number, expectedData: number[], isReadOnly: boolean, bigEndian: boolean): void { // Arrange, Act const bv = ByteVector.fromShort(value, bigEndian, isReadOnly); @@ -2022,7 +2022,7 @@ const assert = Chai.assert; assert.deepEqual(bv.data, new Uint8Array(expectedData)); } - private testString( + private static testString( str: string, expectedData: number[], stringType: StringType, @@ -2043,7 +2043,7 @@ const assert = Chai.assert; assert.deepEqual(bv.data, new Uint8Array(expectedData)); } - private testUInt(value: number, expectedData: number[], isReadOnly: boolean, bigEndian: boolean): void { + private static testUInt(value: number, expectedData: number[], isReadOnly: boolean, bigEndian: boolean): void { // Arrange, Act const bv = ByteVector.fromUInt(value, bigEndian, isReadOnly); @@ -2080,7 +2080,7 @@ const assert = Chai.assert; assert.deepEqual(bv.data, new Uint8Array(expectedData)); } - private testUShort(value: number, expectedData: number[], isReadOnly: boolean, bigEndian: boolean): void { + private static testUShort(value: number, expectedData: number[], isReadOnly: boolean, bigEndian: boolean): void { // Arrange, Act const bv = ByteVector.fromUShort(value, bigEndian, isReadOnly); diff --git a/test-unit/byteVectorConversionTests.ts b/test-unit/byteVectorConversionTests.ts index 990f2248..62668964 100644 --- a/test-unit/byteVectorConversionTests.ts +++ b/test-unit/byteVectorConversionTests.ts @@ -572,7 +572,7 @@ const assert = Chai.assert; @test public toStrings_utf8Single() { - this.testStrings( + ByteVector_ConversionTests.testStrings( "\0\0" + TestConstants.testStrings.UTF8.str, StringType.UTF8, 2, @@ -583,7 +583,7 @@ const assert = Chai.assert; @test public toStrings_utf8Multiple() { - this.testStrings( + ByteVector_ConversionTests.testStrings( TestConstants.testStrings.UTF8.str + "\0\0" + TestConstants.testStrings.UTF8.str, StringType.UTF8, 0, @@ -594,7 +594,7 @@ const assert = Chai.assert; @test public toStrings_utf16LittleEndianSingle() { - this.testStrings( + ByteVector_ConversionTests.testStrings( "\0\0" + TestConstants.testStrings.UTF16LE.str, StringType.UTF16LE, 2, @@ -605,7 +605,7 @@ const assert = Chai.assert; @test public toStrings_ut16LittleEndianMultiple() { - this.testStrings( + ByteVector_ConversionTests.testStrings( TestConstants.testStrings.UTF16LE.str + "\0\0" + TestConstants.testStrings.UTF16LE.str, StringType.UTF16LE, 0, @@ -616,7 +616,7 @@ const assert = Chai.assert; @test public toStrings_utf16BigEndianSingle() { - this.testStrings( + ByteVector_ConversionTests.testStrings( "\0\0" + TestConstants.testStrings.UTF16BE.str, StringType.UTF16BE, 2, @@ -627,7 +627,7 @@ const assert = Chai.assert; @test public toStrings_ut16BigEndianMultiple() { - this.testStrings( + ByteVector_ConversionTests.testStrings( TestConstants.testStrings.UTF16BE.str + "\0\0" + TestConstants.testStrings.UTF16BE.str, StringType.UTF16BE, 0, @@ -643,7 +643,7 @@ const assert = Chai.assert; ByteVector.lastUtf16Encoding = "utf16-le"; try { - this.testStrings( + ByteVector_ConversionTests.testStrings( "\0\0" + TestConstants.testStrings.UTF16LEWithBOM.str, StringType.UTF16, 2, @@ -664,7 +664,7 @@ const assert = Chai.assert; ByteVector.lastUtf16Encoding = "utf16-le"; try { - this.testStrings( + ByteVector_ConversionTests.testStrings( TestConstants.testStrings.UTF16LEWithBOM.str + "\0\0" + TestConstants.testStrings.UTF16LEWithBOM.str, StringType.UTF16, 0, @@ -828,7 +828,7 @@ const assert = Chai.assert; assert.strictEqual(short, 0xFFFF); } - private testStrings( + private static testStrings( textInput: string, stringType: StringType, offset: number, diff --git a/test-unit/byteVectorVoidMethodTests.ts b/test-unit/byteVectorVoidMethodTests.ts index 38837c2b..19415088 100644 --- a/test-unit/byteVectorVoidMethodTests.ts +++ b/test-unit/byteVectorVoidMethodTests.ts @@ -1483,7 +1483,7 @@ const assert = Chai.assert; const output = bv.split(pattern); // Assert - this.verifySplitOutput(output, ["foobarbaz"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["foobarbaz"]); } @test @@ -1496,7 +1496,7 @@ const assert = Chai.assert; const output = bv.split(pattern); // Assert - this.verifySplitOutput(output, ["foo", "baz"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["foo", "baz"]); } @test @@ -1509,7 +1509,7 @@ const assert = Chai.assert; const output = bv.split(pattern); // Assert - this.verifySplitOutput(output, ["foo", "bar", "", "baz"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["foo", "bar", "", "baz"]); } @test @@ -1522,7 +1522,7 @@ const assert = Chai.assert; const output = bv.split(pattern); // Assert - this.verifySplitOutput(output, ["foobarbaz"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["foobarbaz"]); } @test @@ -1535,7 +1535,7 @@ const assert = Chai.assert; const output = bv.split(pattern); // Assert - this.verifySplitOutput(output, ["foo", "baz"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["foo", "baz"]); } @test @@ -1548,7 +1548,7 @@ const assert = Chai.assert; const output = bv.split(pattern); // Assert - this.verifySplitOutput(output, ["foo", "bar", "", "baz"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["foo", "bar", "", "baz"]); } @test @@ -1561,7 +1561,7 @@ const assert = Chai.assert; const output = bv.split(pattern, undefined, 2); // Assert - this.verifySplitOutput(output, ["foo", "bar,,baz"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["foo", "bar,,baz"]); } @test @@ -1574,7 +1574,7 @@ const assert = Chai.assert; const output = bv.split(pattern, 2); // Assert - this.verifySplitOutput(output, ["foo,,bar"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["foo,,bar"]); } @test @@ -1587,7 +1587,7 @@ const assert = Chai.assert; const output = bv.split(pattern, 2); // Assert - this.verifySplitOutput(output, ["0foo", "bar"]); + ByteVector_VoidMethodTests.verifySplitOutput(output, ["0foo", "bar"]); } @test @@ -1619,7 +1619,7 @@ const assert = Chai.assert; assert.isFalse(bv.startsWith(pattern)); } - private verifySplitOutput(output: ByteVector[], expected: string[]) { + private static verifySplitOutput(output: ByteVector[], expected: string[]) { assert.isOk(output); assert.strictEqual(output.length, expected.length); for (let i = 0; i < expected.length; i++) { diff --git a/test-unit/id3v2/attachmentsFrameTests.ts b/test-unit/id3v2/attachmentsFrameTests.ts index c1aa073e..87e52916 100644 --- a/test-unit/id3v2/attachmentsFrameTests.ts +++ b/test-unit/id3v2/attachmentsFrameTests.ts @@ -49,7 +49,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi @test public fromPicture_falsyPicture() { // Act / Assert - Testers.testTruthy((v: IPicture) => { const _ = AttachmentFrame.fromPicture(v); }); + Testers.testTruthy((v: IPicture) => AttachmentFrame.fromPicture(v)); } @test @@ -67,7 +67,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi const frame = AttachmentFrame.fromPicture(mockPicture.object); // Assert - this.verifyFrame( + Id3v2_AttachmentFrame_ConstructorTests.verifyFrame( frame, FrameIdentifiers.APIC, data, @@ -94,7 +94,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi const frame = AttachmentFrame.fromPicture(mockPicture.object); // Assert - this.verifyFrame( + Id3v2_AttachmentFrame_ConstructorTests.verifyFrame( frame, FrameIdentifiers.GEOB, data, @@ -118,7 +118,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi // Act / Assert const frame = AttachmentFrame.fromRawData(data, 4); - assert.throws(() => { const _ = frame.type; }); + assert.throws(() => frame.type); } @test @@ -132,7 +132,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi ); // Act / Assert - assert.throws(() => { const _ = AttachmentFrame.fromRawData(data, 4); }); + assert.throws(() => AttachmentFrame.fromRawData(data, 4)); } // NOTE: If you're wondering why we have a test for latin1 vs other encodings, it's b/c the @@ -161,7 +161,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi const frame = AttachmentFrame.fromRawData(data, 4); // Assert - this.verifyFrame( + Id3v2_AttachmentFrame_ConstructorTests.verifyFrame( frame, FrameIdentifiers.APIC, testData, @@ -194,7 +194,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi const frame = AttachmentFrame.fromRawData(data, 4); // Assert - this.verifyFrame( + Id3v2_AttachmentFrame_ConstructorTests.verifyFrame( frame, FrameIdentifiers.APIC, testData, @@ -226,7 +226,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi const frame = AttachmentFrame.fromRawData(data, 2); // Assert - this.verifyFrame( + Id3v2_AttachmentFrame_ConstructorTests.verifyFrame( frame, FrameIdentifiers.APIC, testData, @@ -260,7 +260,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi const frame = AttachmentFrame.fromRawData(data, 4); // Assert - this.verifyFrame( + Id3v2_AttachmentFrame_ConstructorTests.verifyFrame( frame, FrameIdentifiers.GEOB, testData, @@ -294,7 +294,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi const frame = AttachmentFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.verifyFrame( + Id3v2_AttachmentFrame_ConstructorTests.verifyFrame( frame, FrameIdentifiers.APIC, testData, @@ -306,7 +306,7 @@ function getCustomTestFrame(data: ByteVector, desc: string, filename: string, mi ); } - private verifyFrame( + private static verifyFrame( frame: AttachmentFrame, ft: FrameIdentifier, d: ByteVector, diff --git a/test-unit/id3v2/commentsFrameTests.ts b/test-unit/id3v2/commentsFrameTests.ts index da1ebb2f..a81dc710 100644 --- a/test-unit/id3v2/commentsFrameTests.ts +++ b/test-unit/id3v2/commentsFrameTests.ts @@ -53,7 +53,13 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromDescription(description); // Assert - this.validateFrame(frame, description, "XXX", Id3v2Settings.defaultEncoding, ""); + Id3v2_CommentsFrame_ConstructorTests.validateFrame( + frame, + description, + "XXX", + Id3v2Settings.defaultEncoding, + "" + ); } @test @@ -66,7 +72,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromDescription(description, language); // Assert - this.validateFrame(frame, description, language, Id3v2Settings.defaultEncoding, ""); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, description, language, Id3v2Settings.defaultEncoding, ""); } @test @@ -80,7 +86,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromDescription(description, language, encoding); // Assert - this.validateFrame(frame, description, language, encoding, ""); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, description, language, encoding, ""); } @test @@ -114,7 +120,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.validateFrame(frame, "", "eng", StringType.Latin1, ""); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, "", "eng", StringType.Latin1, ""); } @test @@ -134,7 +140,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.validateFrame(frame, "", "eng", StringType.Latin1, "fux"); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, "", "eng", StringType.Latin1, "fux"); } @test @@ -156,7 +162,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.validateFrame(frame, "fux", "eng", StringType.Latin1, "bux"); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, "fux", "eng", StringType.Latin1, "bux"); } @test @@ -178,7 +184,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.validateFrame(frame, "fux", "eng", StringType.Latin1, "bux"); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, "fux", "eng", StringType.Latin1, "bux"); } @test @@ -210,7 +216,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromRawData(data, 4); // Assert - this.validateFrame(frame, "", "eng", StringType.Latin1, ""); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, "", "eng", StringType.Latin1, ""); } @test @@ -229,7 +235,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromRawData(data, 4); // Assert - this.validateFrame(frame, "", "eng", StringType.Latin1, "fux"); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, "", "eng", StringType.Latin1, "fux"); } @test @@ -249,7 +255,7 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromRawData(data, 4); // Assert - this.validateFrame(frame, "fux", "eng", StringType.Latin1, "bux"); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, "fux", "eng", StringType.Latin1, "bux"); } @test @@ -270,10 +276,10 @@ function getTestFrame(): CommentsFrame { const frame = CommentsFrame.fromRawData(data, 4); // Assert - this.validateFrame(frame, "fux", "eng", StringType.Latin1, "bux"); + Id3v2_CommentsFrame_ConstructorTests.validateFrame(frame, "fux", "eng", StringType.Latin1, "bux"); } - private validateFrame( + private static validateFrame( frame: CommentsFrame, expectedDesc: string, expectedLang: string, diff --git a/test-unit/id3v2/eventTimeCodeFrameTests.ts b/test-unit/id3v2/eventTimeCodeFrameTests.ts index 032d4a85..d7278bf0 100644 --- a/test-unit/id3v2/eventTimeCodeFrameTests.ts +++ b/test-unit/id3v2/eventTimeCodeFrameTests.ts @@ -18,7 +18,7 @@ const assert = Chai.assert; @test public constructor_invalidTime() { // Act/Assert - Testers.testInt((v: number) => { const _ = new EventTimeCode(EventType.AudioEnd, v); }); + Testers.testInt((v: number) => new EventTimeCode(EventType.AudioEnd, v)); } @test @@ -105,7 +105,7 @@ const assert = Chai.assert; const output = EventTimeCodeFrame.fromEmpty(); // Assert - this.assertFrame(output, [], TimestampFormat.Unknown); + Id3v2_EventTimeCodeFrame_ConstructorTests.assertFrame(output, [], TimestampFormat.Unknown); } @test @@ -114,7 +114,7 @@ const assert = Chai.assert; const output = EventTimeCodeFrame.fromTimestampFormat(TimestampFormat.AbsoluteMilliseconds); // Assert - this.assertFrame(output, [], TimestampFormat.AbsoluteMilliseconds); + Id3v2_EventTimeCodeFrame_ConstructorTests.assertFrame(output, [], TimestampFormat.AbsoluteMilliseconds); } @test @@ -131,7 +131,7 @@ const assert = Chai.assert; const frame = EventTimeCodeFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, [], TimestampFormat.AbsoluteMilliseconds); + Id3v2_EventTimeCodeFrame_ConstructorTests.assertFrame(frame, [], TimestampFormat.AbsoluteMilliseconds); } @test @@ -152,7 +152,11 @@ const assert = Chai.assert; const frame = EventTimeCodeFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, [event1, event2], TimestampFormat.AbsoluteMilliseconds); + Id3v2_EventTimeCodeFrame_ConstructorTests.assertFrame( + frame, + [event1, event2], + TimestampFormat.AbsoluteMilliseconds + ); } @test @@ -170,7 +174,7 @@ const assert = Chai.assert; const frame = EventTimeCodeFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, [], TimestampFormat.AbsoluteMilliseconds); + Id3v2_EventTimeCodeFrame_ConstructorTests.assertFrame(frame, [], TimestampFormat.AbsoluteMilliseconds); } @test @@ -192,10 +196,14 @@ const assert = Chai.assert; const frame = EventTimeCodeFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, [event1, event2], TimestampFormat.AbsoluteMilliseconds); + Id3v2_EventTimeCodeFrame_ConstructorTests.assertFrame( + frame, + [event1, event2], + TimestampFormat.AbsoluteMilliseconds + ); } - private assertFrame(frame: EventTimeCodeFrame, e: EventTimeCode[], t: TimestampFormat) { + private static assertFrame(frame: EventTimeCodeFrame, e: EventTimeCode[], t: TimestampFormat) { assert.isOk(frame); assert.strictEqual(frame.frameClassType, FrameClassType.EventTimeCodeFrame); assert.strictEqual(frame.frameId, FrameIdentifiers.ETCO); diff --git a/test-unit/id3v2/frameFactoryTests.ts b/test-unit/id3v2/frameFactoryTests.ts index ba292371..482906e1 100644 --- a/test-unit/id3v2/frameFactoryTests.ts +++ b/test-unit/id3v2/frameFactoryTests.ts @@ -103,7 +103,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.UserTextInformationFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UserTextInformationFrame, data.length); } @test @@ -115,7 +115,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.TextInformationFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.TextInformationFrame, data.length); } @test @@ -127,7 +127,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.UniqueFileIdentifierFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UniqueFileIdentifierFrame, data.length); } @test @@ -144,7 +144,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.MusicCdIdentifierFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.MusicCdIdentifierFrame, data.length); } @test @@ -156,7 +156,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.UnsynchronizedLyricsFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UnsynchronizedLyricsFrame, data.length); } @test @@ -168,7 +168,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.SynchronizedLyricsFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.SynchronizedLyricsFrame, data.length); } @test @@ -180,7 +180,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.CommentsFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.CommentsFrame, data.length); } @test @@ -192,7 +192,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.RelativeVolumeFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.RelativeVolumeFrame, data.length); } @test @@ -215,7 +215,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.AttachmentFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.AttachmentFrame, data.length); } @test @@ -239,7 +239,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.AttachmentFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.AttachmentFrame, data.length); } @test @@ -251,7 +251,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.PlayCountFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.PlayCountFrame, data.length); } @test @@ -263,7 +263,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.PopularimeterFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.PopularimeterFrame, data.length); } @test @@ -275,7 +275,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.TermsOfUseFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.TermsOfUseFrame, data.length); } @test @@ -287,7 +287,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.PrivateFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.PrivateFrame, data.length); } @test @@ -299,7 +299,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.UserUrlLinkFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UserUrlLinkFrame, data.length); } @test @@ -314,7 +314,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.UrlLinkFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UrlLinkFrame, data.length); } @test @@ -326,7 +326,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.EventTimeCodeFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.EventTimeCodeFrame, data.length); } @test @@ -343,7 +343,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.UnknownFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UnknownFrame, data.length); } @test @@ -358,7 +358,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 2, 4, false); // Assert - this.validateOutput(output, FrameClassType.UniqueFileIdentifierFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UniqueFileIdentifierFrame, data.length); } @test @@ -371,7 +371,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(undefined, file, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.UniqueFileIdentifierFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UniqueFileIdentifierFrame, data.length); } @test @@ -387,7 +387,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(undefined, file, 2, 4, false); // Assert - this.validateOutput(output, FrameClassType.UniqueFileIdentifierFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.UniqueFileIdentifierFrame, data.length); } @test @@ -411,11 +411,11 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(undefined, file, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.AttachmentFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.AttachmentFrame, data.length); } @test - public createFrame_fromeFile_geob() { + public createFrame_fromFile_geob() { // Arrange const header = new Id3v2FrameHeader(FrameIdentifiers.GEOB); header.frameSize = 60; @@ -436,12 +436,12 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(undefined, file, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.AttachmentFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.AttachmentFrame, data.length); } @test - public createFrame_fromeFile_nonLazy() { + public createFrame_fromFile_nonLazy() { // Arrange const data = PlayCountFrame.fromEmpty().render(4); const file = TestFile.getFile(data); @@ -450,7 +450,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(undefined, file, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.PlayCountFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.PlayCountFrame, data.length); } @test @@ -503,7 +503,7 @@ const assert = Chai.assert; const output = FrameFactory.createFrame(data, undefined, 0, 4, false); // Assert - this.validateOutput(output, FrameClassType.PlayCountFrame, data.length); + FrameFactoryTests.validateOutput(output, FrameClassType.PlayCountFrame, data.length); assert.notStrictEqual(output.frame, frame); mockCreator.verify( @@ -520,7 +520,7 @@ const assert = Chai.assert; } } - private validateOutput(output: {frame: Frame, offset: number}, fct: FrameClassType, o: number) { + private static validateOutput(output: {frame: Frame, offset: number}, fct: FrameClassType, o: number) { assert.ok(output); assert.strictEqual(output.frame.frameClassType, fct); assert.strictEqual(output.offset, o); diff --git a/test-unit/id3v2/frameIdentifiersTests.ts b/test-unit/id3v2/frameIdentifiersTests.ts index e97a241b..755b0ab9 100644 --- a/test-unit/id3v2/frameIdentifiersTests.ts +++ b/test-unit/id3v2/frameIdentifiersTests.ts @@ -144,6 +144,6 @@ const assert = Chai.assert; const identifier = new FrameIdentifier("ABCD", undefined, undefined); // Act / Assert - assert.throws(() => { const _ = identifier.render(2); }); + assert.throws(() => identifier.render(2)); } } diff --git a/test-unit/id3v2/frameTests.ts b/test-unit/id3v2/frameTests.ts index 6f012cb7..92c8efe6 100644 --- a/test-unit/id3v2/frameTests.ts +++ b/test-unit/id3v2/frameTests.ts @@ -89,7 +89,7 @@ class TestFrame extends Frame { } @test - public groupid() { + public groupId() { // Arrange const header = new Id3v2FrameHeader(FrameIdentifiers.TXXX, Id3v2FrameFlags.FileAlterPreservation); const frame = new TestFrame(header); diff --git a/test-unit/id3v2/id3v2TagTests.ts b/test-unit/id3v2/id3v2TagTests.ts index 3320613c..af346a0b 100644 --- a/test-unit/id3v2/id3v2TagTests.ts +++ b/test-unit/id3v2/id3v2TagTests.ts @@ -1937,7 +1937,7 @@ function getTestTagHeader(version: number, flags: Id3v2TagHeaderFlags, tagSize: try { // Act / Assert - assert.throws(() => { const _ = tag.render(); }); + assert.throws(() => tag.render()); } finally { Id3v2Settings.strictFrameForVersion = originalSetting; } diff --git a/test-unit/id3v2/musicCdIdentifierFrameTests.ts b/test-unit/id3v2/musicCdIdentifierFrameTests.ts index 89a6a6c8..7c242e93 100644 --- a/test-unit/id3v2/musicCdIdentifierFrameTests.ts +++ b/test-unit/id3v2/musicCdIdentifierFrameTests.ts @@ -35,7 +35,7 @@ const assert = Chai.assert; const frame = MusicCdIdentifierFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, ByteVector.fromString("12345abcd", StringType.Latin1)); + Id3v2_MusicCdIdentifierFrameTests.assertFrame(frame, ByteVector.fromString("12345abcd", StringType.Latin1)); } @test @@ -53,13 +53,13 @@ const assert = Chai.assert; const frame = MusicCdIdentifierFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, ByteVector.fromString("12345abcd", StringType.Latin1)); + Id3v2_MusicCdIdentifierFrameTests.assertFrame(frame, ByteVector.fromString("12345abcd", StringType.Latin1)); } @test public data() { // Arrange - const frame = this.getTestFrame(); + const frame = Id3v2_MusicCdIdentifierFrameTests.getTestFrame(); const data = ByteVector.fromString("fuxbuxqux", StringType.Latin1); // Act / Assert @@ -69,13 +69,13 @@ const assert = Chai.assert; @test public clone_withData() { // Arrange - const frame = this.getTestFrame(); + const frame = Id3v2_MusicCdIdentifierFrameTests.getTestFrame(); // Act const output = frame.clone(); // Assert - this.assertFrame(output, frame.data); + Id3v2_MusicCdIdentifierFrameTests.assertFrame(output, frame.data); assert.notEqual(output.data, frame.data); } @@ -90,7 +90,7 @@ const assert = Chai.assert; const output = frame.clone(); // Assert - this.assertFrame(output, frame.data); + Id3v2_MusicCdIdentifierFrameTests.assertFrame(output, frame.data); } @test @@ -125,7 +125,7 @@ const assert = Chai.assert; assert.strictEqual(output.length, 0); } - private assertFrame(frame: MusicCdIdentifierFrame, d: ByteVector) { + private static assertFrame(frame: MusicCdIdentifierFrame, d: ByteVector) { assert.isOk(frame); assert.strictEqual(frame.frameClassType, FrameClassType.MusicCdIdentifierFrame); assert.strictEqual(frame.frameId, FrameIdentifiers.MCDI); @@ -133,7 +133,7 @@ const assert = Chai.assert; assert.isTrue(ByteVector.equal(frame.data, d)); } - private getTestFrame() { + private static getTestFrame() { const header = new Id3v2FrameHeader(FrameIdentifiers.MCDI); header.frameSize = 9; const data = ByteVector.concatenate( diff --git a/test-unit/id3v2/privateFrameTests.ts b/test-unit/id3v2/privateFrameTests.ts index b4569954..38169c12 100644 --- a/test-unit/id3v2/privateFrameTests.ts +++ b/test-unit/id3v2/privateFrameTests.ts @@ -27,7 +27,7 @@ const assert = Chai.assert; const frame = PrivateFrame.fromOwner("foo"); // Assert - this.assertFrame(frame, "foo", ByteVector.empty()); + Id3v2_PrivateFrame_ConstructorTests.assertFrame(frame, "foo", ByteVector.empty()); } @test @@ -57,7 +57,7 @@ const assert = Chai.assert; const frame = PrivateFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, "fux", ByteVector.empty()); + Id3v2_PrivateFrame_ConstructorTests.assertFrame(frame, "fux", ByteVector.empty()); } @test @@ -76,7 +76,11 @@ const assert = Chai.assert; const frame = PrivateFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, "fux", ByteVector.fromByteArray(new Uint8Array([0x01, 0x02, 0x03, 0x04]))); + Id3v2_PrivateFrame_ConstructorTests.assertFrame( + frame, + "fux", + ByteVector.fromByteArray(new Uint8Array([0x01, 0x02, 0x03, 0x04])) + ); } @test @@ -96,10 +100,14 @@ const assert = Chai.assert; const frame = PrivateFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, "fux", ByteVector.fromByteArray(new Uint8Array([0x01, 0x02, 0x03, 0x04]))); + Id3v2_PrivateFrame_ConstructorTests.assertFrame( + frame, + "fux", + ByteVector.fromByteArray(new Uint8Array([0x01, 0x02, 0x03, 0x04])) + ); } - private assertFrame(frame: PrivateFrame, o: string, d: ByteVector) { + private static assertFrame(frame: PrivateFrame, o: string, d: ByteVector) { assert.isOk(frame); assert.strictEqual(frame.frameClassType, FrameClassType.PrivateFrame); assert.strictEqual(frame.frameId, FrameIdentifiers.PRIV); @@ -221,6 +229,6 @@ const assert = Chai.assert; const frame = PrivateFrame.fromRawData(data, 4); // Act / Assert - assert.throws(() => { const _ = frame.render(2); }); + assert.throws(() => frame.render(2)); } } diff --git a/test-unit/id3v2/relativeVolumeFrameTests.ts b/test-unit/id3v2/relativeVolumeFrameTests.ts index a2bd9429..de234ba4 100644 --- a/test-unit/id3v2/relativeVolumeFrameTests.ts +++ b/test-unit/id3v2/relativeVolumeFrameTests.ts @@ -290,7 +290,7 @@ const assert = Chai.assert; const frame = RelativeVolumeFrame.fromIdentification("foo"); // Assert - this.assertFrame(frame, [], "foo"); + Id3v2_RelativeVolumeFrame_ConstructorTests.assertFrame(frame, [], "foo"); } @test @@ -307,7 +307,7 @@ const assert = Chai.assert; const frame = RelativeVolumeFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, [], undefined); + Id3v2_RelativeVolumeFrame_ConstructorTests.assertFrame(frame, [], undefined); } @test @@ -338,7 +338,7 @@ const assert = Chai.assert; const frame = RelativeVolumeFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, [channel2, channel1], "foo"); + Id3v2_RelativeVolumeFrame_ConstructorTests.assertFrame(frame, [channel2, channel1], "foo"); } @test @@ -370,10 +370,10 @@ const assert = Chai.assert; const frame = RelativeVolumeFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, [channel2, channel1], "foo"); + Id3v2_RelativeVolumeFrame_ConstructorTests.assertFrame(frame, [channel2, channel1], "foo"); } - private assertFrame(frame: RelativeVolumeFrame, c: ChannelData[], i: string) { + private static assertFrame(frame: RelativeVolumeFrame, c: ChannelData[], i: string) { assert.isOk(frame); assert.strictEqual(frame.frameClassType, FrameClassType.RelativeVolumeFrame); assert.strictEqual(frame.frameId, FrameIdentifiers.RVA2); diff --git a/test-unit/id3v2/synchronizedLyricsFrameTests.ts b/test-unit/id3v2/synchronizedLyricsFrameTests.ts index f72cf19e..cae794d4 100644 --- a/test-unit/id3v2/synchronizedLyricsFrameTests.ts +++ b/test-unit/id3v2/synchronizedLyricsFrameTests.ts @@ -65,7 +65,7 @@ const assert = Chai.assert; const frame = SynchronizedLyricsFrame.fromInfo(description, language, textType); // Assert - this.assertFrame( + Id3v2_SynchronizedLyricsFrame_ConstructorTests.assertFrame( frame, description, TimestampFormat.Unknown, @@ -88,7 +88,7 @@ const assert = Chai.assert; const frame = SynchronizedLyricsFrame.fromInfo(description, language, textType, encoding); // Assert - this.assertFrame( + Id3v2_SynchronizedLyricsFrame_ConstructorTests.assertFrame( frame, description, TimestampFormat.Unknown, @@ -170,7 +170,7 @@ const assert = Chai.assert; const frame = SynchronizedLyricsFrame.fromRawData(data, 4); // Assert - this.assertFrame( + Id3v2_SynchronizedLyricsFrame_ConstructorTests.assertFrame( frame, "bux", TimestampFormat.AbsoluteMilliseconds, @@ -200,7 +200,7 @@ const assert = Chai.assert; const frame = SynchronizedLyricsFrame.fromRawData(data, 4); // Assert - this.assertFrame( + Id3v2_SynchronizedLyricsFrame_ConstructorTests.assertFrame( frame, "bux", TimestampFormat.AbsoluteMilliseconds, @@ -232,7 +232,7 @@ const assert = Chai.assert; const frame = SynchronizedLyricsFrame.fromRawData(data, 4); // Assert - this.assertFrame( + Id3v2_SynchronizedLyricsFrame_ConstructorTests.assertFrame( frame, "bux", TimestampFormat.AbsoluteMilliseconds, @@ -266,7 +266,7 @@ const assert = Chai.assert; const frame = SynchronizedLyricsFrame.fromRawData(data, 4); // Assert - this.assertFrame( + Id3v2_SynchronizedLyricsFrame_ConstructorTests.assertFrame( frame, "bux", TimestampFormat.AbsoluteMilliseconds, @@ -301,7 +301,7 @@ const assert = Chai.assert; const frame = SynchronizedLyricsFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame( + Id3v2_SynchronizedLyricsFrame_ConstructorTests.assertFrame( frame, "bux", TimestampFormat.AbsoluteMilliseconds, @@ -312,7 +312,7 @@ const assert = Chai.assert; ); } - private assertFrame( + private static assertFrame( frame: SynchronizedLyricsFrame, d: string, f: TimestampFormat, diff --git a/test-unit/id3v2/tagFooterTests.ts b/test-unit/id3v2/tagFooterTests.ts index dd2c9c55..c6671c0a 100644 --- a/test-unit/id3v2/tagFooterTests.ts +++ b/test-unit/id3v2/tagFooterTests.ts @@ -26,7 +26,7 @@ const getTestFooter = (majorVersion: number, minorVersion: number, flags: Id3v2T @test public fromData_falsyData() { // Act/Assert - Testers.testTruthy((v: ByteVector) => { const _ = Id3v2TagFooter.fromData(v); }); + Testers.testTruthy((v: ByteVector) => Id3v2TagFooter.fromData(v)); } @test @@ -35,7 +35,7 @@ const getTestFooter = (majorVersion: number, minorVersion: number, flags: Id3v2T const data = ByteVector.fromSize(1); // Act/Assert - assert.throws(() => { const _ = Id3v2TagFooter.fromData(data); }); + assert.throws(() => Id3v2TagFooter.fromData(data)); } @test @@ -44,7 +44,7 @@ const getTestFooter = (majorVersion: number, minorVersion: number, flags: Id3v2T const data = ByteVector.fromSize(10); // Act/Assert - assert.throws(() => { const _ = Id3v2TagFooter.fromData(data); }); + assert.throws(() => Id3v2TagFooter.fromData(data)); } @test @@ -56,7 +56,7 @@ const getTestFooter = (majorVersion: number, minorVersion: number, flags: Id3v2T ); // Act/Assert - assert.throws(() => { const _ = Id3v2TagFooter.fromData(data); }); + assert.throws(() => Id3v2TagFooter.fromData(data)); } @test @@ -72,10 +72,10 @@ const getTestFooter = (majorVersion: number, minorVersion: number, flags: Id3v2T const testData4 = ByteVector.concatenate(testData, 0x00, 0x00, 0x00, 0x80); // Act/Assert - assert.throws(() => { const _ = Id3v2TagFooter.fromData(testData1); }); - assert.throws(() => { const _ = Id3v2TagFooter.fromData(testData2); }); - assert.throws(() => { const _ = Id3v2TagFooter.fromData(testData3); }); - assert.throws(() => { const _ = Id3v2TagFooter.fromData(testData4); }); + assert.throws(() => Id3v2TagFooter.fromData(testData1)); + assert.throws(() => Id3v2TagFooter.fromData(testData2)); + assert.throws(() => Id3v2TagFooter.fromData(testData3)); + assert.throws(() => Id3v2TagFooter.fromData(testData4)); } @test diff --git a/test-unit/id3v2/tagHeaderTests.ts b/test-unit/id3v2/tagHeaderTests.ts index e5f6afab..33772e9d 100644 --- a/test-unit/id3v2/tagHeaderTests.ts +++ b/test-unit/id3v2/tagHeaderTests.ts @@ -25,7 +25,7 @@ const getTestHeader = (majorVersion: number, minorVersion: number, flags: Id3v2T @test public falsyData() { // Act/Assert - Testers.testTruthy((v: ByteVector) => { const _ = Id3v2TagHeader.fromData(v); }); + Testers.testTruthy((v: ByteVector) => Id3v2TagHeader.fromData(v)); } @test @@ -35,14 +35,14 @@ const getTestHeader = (majorVersion: number, minorVersion: number, flags: Id3v2T const data1 = ByteVector.fromSize(1); // Act/Assert - assert.throws(() => { const _ = Id3v2TagHeader.fromData(data0); }); - assert.throws(() => { const _ = Id3v2TagHeader.fromData(data1); }); + assert.throws(() => Id3v2TagHeader.fromData(data0)); + assert.throws(() => Id3v2TagHeader.fromData(data1)); } @test public invalidStartOfData() { // Act/Assert - assert.throws(() => { const _ = Id3v2TagHeader.fromData(TestConstants.testByteVector); }); + assert.throws(() => Id3v2TagHeader.fromData(TestConstants.testByteVector)); } @test @@ -56,7 +56,7 @@ const getTestHeader = (majorVersion: number, minorVersion: number, flags: Id3v2T ); // Act/Assert - assert.throws(() => { const _ = Id3v2TagHeader.fromData(testData); }); + assert.throws(() => Id3v2TagHeader.fromData(testData)); } @test @@ -70,7 +70,7 @@ const getTestHeader = (majorVersion: number, minorVersion: number, flags: Id3v2T ); // Act/Assert - assert.throws(() => { const _ = Id3v2TagHeader.fromData(testData); }); + assert.throws(() => Id3v2TagHeader.fromData(testData)); } @test @@ -84,7 +84,7 @@ const getTestHeader = (majorVersion: number, minorVersion: number, flags: Id3v2T ); // Act/Assert - assert.throws(() => { const _ = Id3v2TagHeader.fromData(testData); }); + assert.throws(() => Id3v2TagHeader.fromData(testData)); } @test @@ -101,10 +101,10 @@ const getTestHeader = (majorVersion: number, minorVersion: number, flags: Id3v2T const testData4 = ByteVector.concatenate(testData, 0x00, 0x00, 0x00, 0x80); // Act/Assert - assert.throws(() => {const _ = Id3v2TagHeader.fromData(testData1); }); - assert.throws(() => {const _ = Id3v2TagHeader.fromData(testData2); }); - assert.throws(() => {const _ = Id3v2TagHeader.fromData(testData3); }); - assert.throws(() => {const _ = Id3v2TagHeader.fromData(testData4); }); + assert.throws(() => Id3v2TagHeader.fromData(testData1)); + assert.throws(() => Id3v2TagHeader.fromData(testData2)); + assert.throws(() => Id3v2TagHeader.fromData(testData3)); + assert.throws(() => Id3v2TagHeader.fromData(testData4)); } @test diff --git a/test-unit/id3v2/termsOfUseFrameTests.ts b/test-unit/id3v2/termsOfUseFrameTests.ts index febd4096..1f597878 100644 --- a/test-unit/id3v2/termsOfUseFrameTests.ts +++ b/test-unit/id3v2/termsOfUseFrameTests.ts @@ -28,7 +28,7 @@ const assert = Chai.assert; const output = TermsOfUseFrame.fromFields("fux"); // Assert - this.assertFrame(output, "fux", "", Id3v2Settings.defaultEncoding); + Id3v2_TermsOfUseFrame_ConstructorTests.assertFrame(output, "fux", "", Id3v2Settings.defaultEncoding); } @test @@ -37,7 +37,7 @@ const assert = Chai.assert; const output = TermsOfUseFrame.fromFields("fux", StringType.UTF16BE); // Assert - this.assertFrame(output, "fux", "", StringType.UTF16BE); + Id3v2_TermsOfUseFrame_ConstructorTests.assertFrame(output, "fux", "", StringType.UTF16BE); } @test @@ -72,7 +72,7 @@ const assert = Chai.assert; const output = TermsOfUseFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(output, "fux", "buxqux", StringType.Latin1); + Id3v2_TermsOfUseFrame_ConstructorTests.assertFrame(output, "fux", "buxqux", StringType.Latin1); } @test @@ -105,10 +105,10 @@ const assert = Chai.assert; const output = TermsOfUseFrame.fromRawData(data, 4); // Assert - this.assertFrame(output, "fux", "buxqux", StringType.Latin1); + Id3v2_TermsOfUseFrame_ConstructorTests.assertFrame(output, "fux", "buxqux", StringType.Latin1); } - private assertFrame(frame: TermsOfUseFrame, language: string, text: string, textEncoding: StringType) { + private static assertFrame(frame: TermsOfUseFrame, language: string, text: string, textEncoding: StringType) { assert.isOk(frame); assert.strictEqual(frame.frameClassType, FrameClassType.TermsOfUseFrame); assert.strictEqual(frame.frameId, FrameIdentifiers.USER); diff --git a/test-unit/id3v2/textInformationFrameTests.ts b/test-unit/id3v2/textInformationFrameTests.ts index a33edf57..6d03f841 100644 --- a/test-unit/id3v2/textInformationFrameTests.ts +++ b/test-unit/id3v2/textInformationFrameTests.ts @@ -59,7 +59,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromIdentifier(FrameIdentifiers.TCOP, StringType.Latin1); // Assert - this.assertFrame(frame, FrameIdentifiers.TCOP, []); + Id3v2_TextInformationFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.TCOP, []); } @test @@ -76,7 +76,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 3); // Assert - this.assertFrame(frame, FrameIdentifiers.TCOP, []); + Id3v2_TextInformationFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.TCOP, []); } @test @@ -94,7 +94,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 3); // Assert - this.assertFrame(frame, FrameIdentifiers.TCOP, []); + Id3v2_TextInformationFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.TCOP, []); } @test @@ -115,7 +115,12 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, FrameIdentifiers.TCOP, ["fux", "bux"], StringType.UTF16BE); + Id3v2_TextInformationFrame_ConstructorTests.assertFrame( + frame, + FrameIdentifiers.TCOP, + ["fux", "bux"], + StringType.UTF16BE + ); } @test @@ -136,7 +141,12 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, FrameIdentifiers.TXXX, ["fux", "bux"], StringType.UTF16BE); + Id3v2_TextInformationFrame_ConstructorTests.assertFrame( + frame, + FrameIdentifiers.TXXX, + ["fux", "bux"], + StringType.UTF16BE + ); } @test @@ -154,7 +164,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 3); // Assert - this.assertFrame(frame, FrameIdentifiers.TCOM, ["fux", "bux"]); + Id3v2_TextInformationFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.TCOM, ["fux", "bux"]); } @test @@ -181,7 +191,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 3); // Assert - this.assertFrame( + Id3v2_TextInformationFrame_ConstructorTests.assertFrame( frame, FrameIdentifiers.TCON, [ @@ -224,7 +234,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 3); // Assert - this.assertFrame( + Id3v2_TextInformationFrame_ConstructorTests.assertFrame( frame, FrameIdentifiers.TCON, [ @@ -262,7 +272,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 3); // Assert - this.assertFrame( + Id3v2_TextInformationFrame_ConstructorTests.assertFrame( frame, FrameIdentifiers.TCON, ["Classical", "Other"], @@ -295,7 +305,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 3); // Assert - this.assertFrame( + Id3v2_TextInformationFrame_ConstructorTests.assertFrame( frame, FrameIdentifiers.TCON, ["Classical", "12"], @@ -326,7 +336,7 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromRawData(data, 4); // Assert - this.assertFrame( + Id3v2_TextInformationFrame_ConstructorTests.assertFrame( frame, FrameIdentifiers.TCON, [ @@ -357,10 +367,15 @@ function getTestFrame(): TextInformationFrame { const frame = TextInformationFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, FrameIdentifiers.TCOP, ["fux", "bux"], StringType.UTF16BE); + Id3v2_TextInformationFrame_ConstructorTests.assertFrame( + frame, + FrameIdentifiers.TCOP, + ["fux", "bux"], + StringType.UTF16BE + ); } - private assertFrame( + private static assertFrame( frame: TextInformationFrame, frameId: FrameIdentifier, text: string[], diff --git a/test-unit/id3v2/uniqueFileIdentifierFrameTests.ts b/test-unit/id3v2/uniqueFileIdentifierFrameTests.ts index 1234a1d1..c5e35577 100644 --- a/test-unit/id3v2/uniqueFileIdentifierFrameTests.ts +++ b/test-unit/id3v2/uniqueFileIdentifierFrameTests.ts @@ -15,7 +15,7 @@ const assert = Chai.assert; // Test constants const testIdentifier = ByteVector.fromString("foobarbaz"); -const testOwner = "http://github.com/benrr101/node-taglib-sharp"; +const testOwner = "https://github.com/benrr101/node-taglib-sharp"; @suite class Id3v2_UniqueFileIdentifierFrame_ConstructorTests extends FrameConstructorTests { public get fromOffsetRawData(): (d: ByteVector, o: number, h: Id3v2FrameHeader, v: number) => Frame { @@ -54,7 +54,7 @@ const testOwner = "http://github.com/benrr101/node-taglib-sharp"; const frame = UniqueFileIdentifierFrame.fromData(owner, identifier); // Assert - this.assertFrame(frame, owner, identifier); + Id3v2_UniqueFileIdentifierFrame_ConstructorTests.assertFrame(frame, owner, identifier); } @test @@ -72,7 +72,7 @@ const testOwner = "http://github.com/benrr101/node-taglib-sharp"; const frame = UniqueFileIdentifierFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, undefined, undefined); + Id3v2_UniqueFileIdentifierFrame_ConstructorTests.assertFrame(frame, undefined, undefined); } @test @@ -95,14 +95,14 @@ const testOwner = "http://github.com/benrr101/node-taglib-sharp"; const frame = UniqueFileIdentifierFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, undefined, undefined); + Id3v2_UniqueFileIdentifierFrame_ConstructorTests.assertFrame(frame, undefined, undefined); } @test public fromOffsetRawData_validData_returnsFrame() { // Arrange const header = new Id3v2FrameHeader(FrameIdentifiers.UFID); - header.frameSize = 54; + header.frameSize = 55; const data = ByteVector.concatenate( header.render(4), 0x0, 0x0, @@ -115,7 +115,7 @@ const testOwner = "http://github.com/benrr101/node-taglib-sharp"; const frame = UniqueFileIdentifierFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, testOwner, testIdentifier); + Id3v2_UniqueFileIdentifierFrame_ConstructorTests.assertFrame(frame, testOwner, testIdentifier); } @test @@ -132,7 +132,7 @@ const testOwner = "http://github.com/benrr101/node-taglib-sharp"; const frame = UniqueFileIdentifierFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, undefined, undefined); + Id3v2_UniqueFileIdentifierFrame_ConstructorTests.assertFrame(frame, undefined, undefined); } @test @@ -154,14 +154,14 @@ const testOwner = "http://github.com/benrr101/node-taglib-sharp"; const frame = UniqueFileIdentifierFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, undefined, undefined); + Id3v2_UniqueFileIdentifierFrame_ConstructorTests.assertFrame(frame, undefined, undefined); } @test public fromRawData_validData_returnsFrame() { // Arrange const header = new Id3v2FrameHeader(FrameIdentifiers.UFID); - header.frameSize = 54; + header.frameSize = 55; const data = ByteVector.concatenate( header.render(4), ByteVector.fromString(testOwner), @@ -173,10 +173,10 @@ const testOwner = "http://github.com/benrr101/node-taglib-sharp"; const frame = UniqueFileIdentifierFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, testOwner, testIdentifier); + Id3v2_UniqueFileIdentifierFrame_ConstructorTests.assertFrame(frame, testOwner, testIdentifier); } - private assertFrame(frame: UniqueFileIdentifierFrame, o: string, i: ByteVector) { + private static assertFrame(frame: UniqueFileIdentifierFrame, o: string, i: ByteVector) { assert.isOk(frame); assert.strictEqual(frame.frameClassType, FrameClassType.UniqueFileIdentifierFrame); assert.strictEqual(frame.frameId, FrameIdentifiers.UFID); @@ -282,7 +282,7 @@ const testOwner = "http://github.com/benrr101/node-taglib-sharp"; public render_returnsByteVector() { // Arrange const header = new Id3v2FrameHeader(FrameIdentifiers.UFID); - header.frameSize = 54; + header.frameSize = 55; const data = ByteVector.concatenate( header.render(4), ByteVector.fromString(testOwner), diff --git a/test-unit/id3v2/unknownFrameTests.ts b/test-unit/id3v2/unknownFrameTests.ts index 1ae4d340..2e9ef52d 100644 --- a/test-unit/id3v2/unknownFrameTests.ts +++ b/test-unit/id3v2/unknownFrameTests.ts @@ -36,7 +36,7 @@ const assert = Chai.assert; const frame = UnknownFrame.fromData(frameType, undefined); // Assert - this.assertFrame(frame, FrameIdentifiers.WXXX, undefined); + Id3v2_UnknownFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.WXXX, undefined); } @test @@ -48,7 +48,7 @@ const assert = Chai.assert; const frame = UnknownFrame.fromData(frameType, null); // Assert - this.assertFrame(frame, FrameIdentifiers.WXXX, undefined); + Id3v2_UnknownFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.WXXX, undefined); } @test @@ -61,7 +61,7 @@ const assert = Chai.assert; const frame = UnknownFrame.fromData(frameType, data); // Assert - this.assertFrame(frame, FrameIdentifiers.WXXX, data); + Id3v2_UnknownFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.WXXX, data); } @test @@ -79,7 +79,7 @@ const assert = Chai.assert; const frame = UnknownFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, FrameIdentifiers.WXXX, ByteVector.fromString("foo bar baz")); + Id3v2_UnknownFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.WXXX, ByteVector.fromString("foo bar baz")); } @test @@ -96,10 +96,10 @@ const assert = Chai.assert; const frame = UnknownFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, FrameIdentifiers.WXXX, ByteVector.fromString("foo bar baz")); + Id3v2_UnknownFrame_ConstructorTests.assertFrame(frame, FrameIdentifiers.WXXX, ByteVector.fromString("foo bar baz")); } - private assertFrame(frame: UnknownFrame, fi: FrameIdentifier, d: ByteVector) { + private static assertFrame(frame: UnknownFrame, fi: FrameIdentifier, d: ByteVector) { assert.ok(frame); assert.strictEqual(frame.frameClassType, FrameClassType.UnknownFrame); assert.strictEqual(frame.frameId, fi); diff --git a/test-unit/id3v2/unsynchronizedLyricsFrameTests.ts b/test-unit/id3v2/unsynchronizedLyricsFrameTests.ts index eb63448e..9e9302de 100644 --- a/test-unit/id3v2/unsynchronizedLyricsFrameTests.ts +++ b/test-unit/id3v2/unsynchronizedLyricsFrameTests.ts @@ -52,7 +52,7 @@ const getTestUnsynchronizedLyricsFrame = (): UnsynchronizedLyricsFrame => { const frame = UnsynchronizedLyricsFrame.fromData(description, language, encoding); // Assert - this.assertFrame(frame, description, language, "", encoding); + Id3v2_UnsynchronizedLyricsFrame_ConstructorTests.assertFrame(frame, description, language, "", encoding); } @test @@ -72,7 +72,7 @@ const getTestUnsynchronizedLyricsFrame = (): UnsynchronizedLyricsFrame => { const frame = UnsynchronizedLyricsFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, "", "eng", "foo", StringType.Latin1); + Id3v2_UnsynchronizedLyricsFrame_ConstructorTests.assertFrame(frame, "", "eng", "foo", StringType.Latin1); } @test @@ -94,7 +94,7 @@ const getTestUnsynchronizedLyricsFrame = (): UnsynchronizedLyricsFrame => { const frame = UnsynchronizedLyricsFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, "foo", "eng", "bar", StringType.Latin1); + Id3v2_UnsynchronizedLyricsFrame_ConstructorTests.assertFrame(frame, "foo", "eng", "bar", StringType.Latin1); } @test @@ -113,7 +113,7 @@ const getTestUnsynchronizedLyricsFrame = (): UnsynchronizedLyricsFrame => { const frame = UnsynchronizedLyricsFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, "", "eng", "foo", StringType.Latin1); + Id3v2_UnsynchronizedLyricsFrame_ConstructorTests.assertFrame(frame, "", "eng", "foo", StringType.Latin1); } @test @@ -134,10 +134,10 @@ const getTestUnsynchronizedLyricsFrame = (): UnsynchronizedLyricsFrame => { const frame = UnsynchronizedLyricsFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, "foo", "eng", "bar", StringType.Latin1); + Id3v2_UnsynchronizedLyricsFrame_ConstructorTests.assertFrame(frame, "foo", "eng", "bar", StringType.Latin1); } - private assertFrame(frame: UnsynchronizedLyricsFrame, d: string, l: string, t: string, te: StringType) { + private static assertFrame(frame: UnsynchronizedLyricsFrame, d: string, l: string, t: string, te: StringType) { assert.isOk(frame); assert.strictEqual(frame.frameClassType, FrameClassType.UnsynchronizedLyricsFrame); assert.strictEqual(frame.frameId, FrameIdentifiers.USLT); diff --git a/test-unit/id3v2/urlLinkFrameTests.ts b/test-unit/id3v2/urlLinkFrameTests.ts index 38a75570..49a892c9 100644 --- a/test-unit/id3v2/urlLinkFrameTests.ts +++ b/test-unit/id3v2/urlLinkFrameTests.ts @@ -53,7 +53,7 @@ const getTestUrlLinkFrame = (): UrlLinkFrame => { const output = UrlLinkFrame.fromIdentity(FrameIdentifiers.WCOM); // Assert - this.assertFrame(output, FrameIdentifiers.WCOM, [], StringType.Latin1); + Id3v2_UrlLinkFrame_ConstructorTests.assertFrame(output, FrameIdentifiers.WCOM, [], StringType.Latin1); } @test @@ -72,7 +72,7 @@ const getTestUrlLinkFrame = (): UrlLinkFrame => { const output = UrlLinkFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(output, FrameIdentifiers.WCOM, ["foobar"], StringType.Latin1); + Id3v2_UrlLinkFrame_ConstructorTests.assertFrame(output, FrameIdentifiers.WCOM, ["foobar"], StringType.Latin1); } @test @@ -93,7 +93,12 @@ const getTestUrlLinkFrame = (): UrlLinkFrame => { const output = UrlLinkFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(output, FrameIdentifiers.WXXX, ["foo", "bar"], StringType.Latin1); + Id3v2_UrlLinkFrame_ConstructorTests.assertFrame( + output, + FrameIdentifiers.WXXX, + ["foo", "bar"], + StringType.Latin1 + ); } @test @@ -112,7 +117,7 @@ const getTestUrlLinkFrame = (): UrlLinkFrame => { const output = UrlLinkFrame.fromRawData(data, 4); // Assert - this.assertFrame(output, FrameIdentifiers.WCOM, ["foobar"], StringType.Latin1); + Id3v2_UrlLinkFrame_ConstructorTests.assertFrame(output, FrameIdentifiers.WCOM, ["foobar"], StringType.Latin1); } @test @@ -132,10 +137,15 @@ const getTestUrlLinkFrame = (): UrlLinkFrame => { const output = UrlLinkFrame.fromRawData(data, 4); // Assert - this.assertFrame(output, FrameIdentifiers.WXXX, ["foo", "bar"], StringType.Latin1); + Id3v2_UrlLinkFrame_ConstructorTests.assertFrame( + output, + FrameIdentifiers.WXXX, + ["foo", "bar"], + StringType.Latin1 + ); } - private assertFrame(frame: UrlLinkFrame, ft: FrameIdentifier, t: string[], te: StringType) { + private static assertFrame(frame: UrlLinkFrame, ft: FrameIdentifier, t: string[], te: StringType) { assert.ok(frame); assert.strictEqual(frame.frameClassType, FrameClassType.UrlLinkFrame); assert.strictEqual(frame.frameId, ft); diff --git a/test-unit/id3v2/userTextInformationFrameTests.ts b/test-unit/id3v2/userTextInformationFrameTests.ts index 849484e2..6e367b1e 100644 --- a/test-unit/id3v2/userTextInformationFrameTests.ts +++ b/test-unit/id3v2/userTextInformationFrameTests.ts @@ -42,7 +42,7 @@ function getTestFrame(): UserTextInformationFrame { const frame = UserTextInformationFrame.fromDescription("foo"); // Assert - this.assertFrame(frame, "foo", [], Id3v2Settings.defaultEncoding); + Id3v2_UserInformationFrame_ConstructorTests.assertFrame(frame, "foo", [], Id3v2Settings.defaultEncoding); } @test @@ -51,7 +51,7 @@ function getTestFrame(): UserTextInformationFrame { const frame = UserTextInformationFrame.fromDescription("foo", StringType.UTF16); // Assert - this.assertFrame(frame, "foo", [], StringType.UTF16); + Id3v2_UserInformationFrame_ConstructorTests.assertFrame(frame, "foo", [], StringType.UTF16); } @test @@ -72,7 +72,7 @@ function getTestFrame(): UserTextInformationFrame { const frame = UserTextInformationFrame.fromOffsetRawData(data, 2, header, 4); // Assert - this.assertFrame(frame, "foo", ["bar"], StringType.Latin1); + Id3v2_UserInformationFrame_ConstructorTests.assertFrame(frame, "foo", ["bar"], StringType.Latin1); } @test @@ -92,10 +92,10 @@ function getTestFrame(): UserTextInformationFrame { const frame = UserTextInformationFrame.fromRawData(data, 4); // Assert - this.assertFrame(frame, "foo", ["bar"], StringType.Latin1); + Id3v2_UserInformationFrame_ConstructorTests.assertFrame(frame, "foo", ["bar"], StringType.Latin1); } - private assertFrame( + private static assertFrame( frame: UserTextInformationFrame, description: string, text: string[], diff --git a/test-unit/mpeg/mpegAudioHeaderTests.ts b/test-unit/mpeg/mpegAudioHeaderTests.ts index 6b0b9be5..1c8c0979 100644 --- a/test-unit/mpeg/mpegAudioHeaderTests.ts +++ b/test-unit/mpeg/mpegAudioHeaderTests.ts @@ -24,7 +24,7 @@ const assert = Chai.assert; const header = MpegAudioHeader.Unknown; // Assert - this.assertHeader( + Mpeg_AudioHeader_ConstructorTests.assertHeader( header, 0, 2, @@ -64,7 +64,7 @@ const assert = Chai.assert; const header = MpegAudioHeader.fromInfo(0, 0, XingHeader.unknown, VbriHeader.unknown); // Assert - this.assertHeader( + Mpeg_AudioHeader_ConstructorTests.assertHeader( header, 0, 2, @@ -165,7 +165,7 @@ const assert = Chai.assert; const header = MpegAudioHeader.fromData(data, mockFile, 0); // Assert - this.assertHeader( + Mpeg_AudioHeader_ConstructorTests.assertHeader( header, 64, 2, @@ -207,7 +207,7 @@ const assert = Chai.assert; const header = MpegAudioHeader.fromData(mpegFlags, mockFile, 1); // Assert - this.assertHeader( + Mpeg_AudioHeader_ConstructorTests.assertHeader( header, 2, 2, @@ -255,7 +255,7 @@ const assert = Chai.assert; const header = MpegAudioHeader.fromData(mpegFlags, mockFile, 1); // Assert - this.assertHeader( + Mpeg_AudioHeader_ConstructorTests.assertHeader( header, 2, 2, @@ -281,7 +281,7 @@ const assert = Chai.assert; assert.strictEqual(header.xingHeader, XingHeader.unknown); } - private assertHeader( + private static assertHeader( header: MpegAudioHeader, bitrate: number, channels: number, diff --git a/test-unit/mpeg/mpegVideoHeaderTests.ts b/test-unit/mpeg/mpegVideoHeaderTests.ts index 837f4b7d..752ca9ac 100644 --- a/test-unit/mpeg/mpegVideoHeaderTests.ts +++ b/test-unit/mpeg/mpegVideoHeaderTests.ts @@ -16,8 +16,8 @@ const assert = Chai.assert; @test public constructor_invalidArguments() { // Act/Assert - Testers.testTruthy((f: File) => { const _ = new MpegVideoHeader(f, 0); }); - Testers.testUint((p: number) => { const _ = new MpegVideoHeader(TypeMoq.Mock.ofType().object, p); }); + Testers.testTruthy((f: File) => new MpegVideoHeader(f, 0)); + Testers.testUint((p: number) => new MpegVideoHeader(TypeMoq.Mock.ofType().object, p)); } @test @@ -27,7 +27,7 @@ const assert = Chai.assert; const mockFile = TestFile.getFile(mockData); // Act/Assert - assert.throws(() => { const _ = new MpegVideoHeader(mockFile, 5); }); + assert.throws(() => new MpegVideoHeader(mockFile, 5)); } @test diff --git a/test-unit/pictureLazyTests.ts b/test-unit/pictureLazyTests.ts index 08734a7e..d2fb60dc 100644 --- a/test-unit/pictureLazyTests.ts +++ b/test-unit/pictureLazyTests.ts @@ -84,7 +84,7 @@ const assert = Chai.assert; const picture = PictureLazy.fromFile(mockFile.object, 0); // Assert - this.assertFileLazyPicture( + PictureLazy_Tests.assertFileLazyPicture( picture, data, "foobarbaz.jpg", @@ -109,7 +109,7 @@ const assert = Chai.assert; const picture = PictureLazy.fromFile(mockFile.object, 0); // Assert - this.assertFileLazyPicture( + PictureLazy_Tests.assertFileLazyPicture( picture, data, "foobarbaz.bin", @@ -137,7 +137,7 @@ const assert = Chai.assert; const picture = PictureLazy.fromFile(mockFile.object, 0); // Assert - this.assertFileLazyPicture( + PictureLazy_Tests.assertFileLazyPicture( picture, data, "fuxbuxqux", @@ -162,7 +162,7 @@ const assert = Chai.assert; const picture = PictureLazy.fromFile(mockFile.object, 0); // Assert - this.assertFileLazyPicture( + PictureLazy_Tests.assertFileLazyPicture( picture, data, "fuxbuxqux", @@ -187,7 +187,7 @@ const assert = Chai.assert; const picture = PictureLazy.fromFile(mockFile.object, 0); // Assert - this.assertFileLazyPicture( + PictureLazy_Tests.assertFileLazyPicture( picture, data, undefined, @@ -215,7 +215,7 @@ const assert = Chai.assert; const picture = PictureLazy.fromFile(mockFile.object, 2); // Assert - this.assertFileLazyPicture( + PictureLazy_Tests.assertFileLazyPicture( picture, data, "foobarbaz.jpg", @@ -244,7 +244,7 @@ const assert = Chai.assert; const picture = PictureLazy.fromFile(mockFile.object, 2, 9); // Assert - this.assertFileLazyPicture( + PictureLazy_Tests.assertFileLazyPicture( picture, data, "foobarbaz.jpg", @@ -254,7 +254,7 @@ const assert = Chai.assert; ); } - private assertFileLazyPicture( + private static assertFileLazyPicture( picture: PictureLazy, d: ByteVector, desc: string, diff --git a/test-unit/riff/aviHeaderListTests.ts b/test-unit/riff/aviHeaderListTests.ts index 2fd81bac..fb8b9253 100644 --- a/test-unit/riff/aviHeaderListTests.ts +++ b/test-unit/riff/aviHeaderListTests.ts @@ -171,5 +171,5 @@ class AviTestStream extends AviStream { this._codec = codec; } - public parseItem(id: string, data: ByteVector, start: number) { /* no-op */ } + public parseItem(_id: string, _data: ByteVector, _start: number) { /* no-op */ } } diff --git a/test-unit/riff/divxTagTests.ts b/test-unit/riff/divxTagTests.ts index 6cc186d8..79a4d156 100644 --- a/test-unit/riff/divxTagTests.ts +++ b/test-unit/riff/divxTagTests.ts @@ -55,7 +55,7 @@ const assert = Chai.assert; @test public fromData_validData() { // Arrange - const data = this.getTestTagData(0); + const data = Riff_DivxTagTests.getTestTagData(0); // Act const tag = DivxTag.fromData(data); @@ -96,7 +96,7 @@ const assert = Chai.assert; @test public fromFile_validParams() { // Arrange - const data = this.getTestTagData(10); + const data = Riff_DivxTagTests.getTestTagData(10); const file = TestFile.getFile(data); // Act @@ -195,7 +195,7 @@ const assert = Chai.assert; @test public clear() { // Arrange - const data = this.getTestTagData(0); + const data = Riff_DivxTagTests.getTestTagData(0); const tag = DivxTag.fromData(data); // Act @@ -210,7 +210,7 @@ const assert = Chai.assert; @test public render_hasValues() { // Arrange - const data = this.getTestTagData(0); + const data = Riff_DivxTagTests.getTestTagData(0); const tag = DivxTag.fromData(data); // Act @@ -237,7 +237,7 @@ const assert = Chai.assert; assert.isTrue(ByteVector.equal(result, expected)); } - private getTestTagData(padding: number) { + private static getTestTagData(padding: number) { return ByteVector.concatenate( ByteVector.fromSize(padding), ByteVector.fromString("foo "), diff --git a/test-unit/riff/riffListTests.ts b/test-unit/riff/riffListTests.ts index 32f02fcf..20f2e98e 100644 --- a/test-unit/riff/riffListTests.ts +++ b/test-unit/riff/riffListTests.ts @@ -60,7 +60,7 @@ const sampleData = ByteVector.concatenate( const list = RiffList.fromData(sampleData); // Assert - this.verifySample(list); + RiffList_ConstructorTests.verifySample(list); } @test @@ -103,10 +103,10 @@ const sampleData = ByteVector.concatenate( const list = RiffList.fromFile(mockFile, 10, sampleData.length); // Assert - this.verifySample(list); + RiffList_ConstructorTests.verifySample(list); } - private verifySample(list: RiffList): void { + private static verifySample(list: RiffList): void { assert.isOk(list); assert.strictEqual(list.length, 3); diff --git a/test-unit/streamTest.ts b/test-unit/streamTest.ts index 40927cde..59b22597 100644 --- a/test-unit/streamTest.ts +++ b/test-unit/streamTest.ts @@ -37,7 +37,7 @@ const assert = Chai.assert; const testPath = TestConstants.getTestFilePath(); // Act / Assert - assert.throws(() => { const _ = Stream.createAsRead(testPath); }); + assert.throws(() => Stream.createAsRead(testPath)); } @test @@ -63,8 +63,8 @@ const assert = Chai.assert; const testPath = TestConstants.getTestFilePath(); // Act / Assert - assert.throws(() => { const _ = Stream.createAsReadWrite(testPath); }); - assert.throws(() => { const _ = Stream.createAsReadWrite(testPath); }); + assert.throws(() => Stream.createAsReadWrite(testPath)); + assert.throws(() => Stream.createAsReadWrite(testPath)); } @test @@ -275,7 +275,7 @@ const assert = Chai.assert; // Act / Assert Testers.testSafeUint((v: number) => { stream.setLength(v); }); }; - this.testWithFile(testAction, true); + StreamTests.testWithFile(testAction, true); } @test @@ -284,7 +284,7 @@ const assert = Chai.assert; // Act / Assert assert.throws(() => stream.setLength(10)); }; - this.testWithFile(testAction, false); + StreamTests.testWithFile(testAction, false); } @test @@ -303,7 +303,7 @@ const assert = Chai.assert; const stats = fs.statSync(testFilePath); assert.strictEqual(stats.size, testFilePath.length); }; - this.testWithFile(testAction, true); + StreamTests.testWithFile(testAction, true); } @test @@ -322,7 +322,7 @@ const assert = Chai.assert; const stats = fs.statSync(testFilePath); assert.strictEqual(stats.size, 4); }; - this.testWithFile(testAction, true); + StreamTests.testWithFile(testAction, true); } @test @@ -342,7 +342,7 @@ const assert = Chai.assert; const stats = fs.statSync(testFilePath); assert.strictEqual(stats.size, newLength); }; - this.testWithFile(testAction, true); + StreamTests.testWithFile(testAction, true); } @test @@ -354,7 +354,7 @@ const assert = Chai.assert; // Act / Assert assert.throws(() => { stream.write(contents, 0, 1); }); }; - this.testWithFile(testAction, false); + StreamTests.testWithFile(testAction, false); } @test @@ -377,7 +377,7 @@ const assert = Chai.assert; expected.set(2, 0x03); assert.deepStrictEqual(contents, expected.data); }; - this.testWithFile(testAction, true); + StreamTests.testWithFile(testAction, true); } @test @@ -401,7 +401,7 @@ const assert = Chai.assert; expected.set(5, 0x03); assert.deepStrictEqual(contents, expected.data); }; - this.testWithFile(testAction, true); + StreamTests.testWithFile(testAction, true); } @test @@ -423,7 +423,7 @@ const assert = Chai.assert; expected.addByteArray(buffer); assert.deepStrictEqual(contents, expected.data); }; - this.testWithFile(testAction, true); + StreamTests.testWithFile(testAction, true); } @test @@ -445,10 +445,10 @@ const assert = Chai.assert; expected.set(1, 0x03); assert.deepStrictEqual(contents, expected.data); }; - this.testWithFile(testAction, true); + StreamTests.testWithFile(testAction, true); } - private testWithFile(testAction: (filePath: string, stream: Stream) => void, isWritable: boolean) { + private static testWithFile(testAction: (filePath: string, stream: Stream) => void, isWritable: boolean) { // Arrange const testFilePath = TestConstants.getTestFilePath(); fs.writeFileSync(testFilePath, testFilePath);