music-metadata 7.11.9 → 7.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE.txt +9 -0
  2. package/README.md +4 -4
  3. package/lib/ParserFactory.js +2 -2
  4. package/lib/aiff/AiffParser.js +2 -2
  5. package/lib/apev2/APEv2Parser.js +7 -4
  6. package/lib/asf/AsfObject.d.ts +1 -1
  7. package/lib/asf/AsfObject.js +2 -5
  8. package/lib/asf/AsfParser.js +2 -2
  9. package/lib/asf/AsfUtil.d.ts +1 -1
  10. package/lib/asf/AsfUtil.js +3 -5
  11. package/lib/common/MetadataCollector.js +2 -2
  12. package/lib/common/RandomFileReader.d.ts +5 -3
  13. package/lib/common/RandomFileReader.js +12 -15
  14. package/lib/common/Util.d.ts +8 -9
  15. package/lib/common/Util.js +17 -17
  16. package/lib/dsdiff/DsdiffParser.js +2 -2
  17. package/lib/dsf/DsfParser.js +2 -2
  18. package/lib/flac/FlacParser.js +2 -2
  19. package/lib/id3v1/ID3v1Parser.js +2 -2
  20. package/lib/id3v2/AbstractID3Parser.js +2 -2
  21. package/lib/id3v2/FrameParser.d.ts +1 -2
  22. package/lib/id3v2/FrameParser.js +44 -44
  23. package/lib/id3v2/ID3v2Parser.d.ts +1 -2
  24. package/lib/id3v2/ID3v2Parser.js +14 -16
  25. package/lib/index.js +4 -4
  26. package/lib/matroska/MatroskaParser.js +2 -2
  27. package/lib/mp4/Atom.js +2 -2
  28. package/lib/mp4/AtomToken.js +2 -2
  29. package/lib/mp4/MP4Parser.js +2 -2
  30. package/lib/mpeg/MpegParser.js +2 -2
  31. package/lib/musepack/index.js +2 -2
  32. package/lib/musepack/sv7/MpcSv7Parser.js +2 -2
  33. package/lib/musepack/sv8/MpcSv8Parser.js +2 -2
  34. package/lib/musepack/sv8/StreamVersion8.js +2 -2
  35. package/lib/ogg/OggParser.js +2 -2
  36. package/lib/ogg/speex/SpeexParser.js +2 -2
  37. package/lib/ogg/theora/TheoraParser.js +2 -2
  38. package/lib/ogg/vorbis/VorbisParser.js +2 -2
  39. package/lib/wav/WaveParser.js +2 -2
  40. package/lib/wavpack/WavPackParser.js +2 -2
  41. package/package.json +11 -11
package/LICENSE.txt ADDED
@@ -0,0 +1,9 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright © 2022 Borewit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -423,12 +423,12 @@ img.src = `data:${picture.format};base64,${picture.data.toString('base64')}`;
423
423
 
424
424
  ## Licence
425
425
 
426
- (The MIT License)
426
+ The MIT License (MIT)
427
427
 
428
- Copyright (c) 2017 Borewit
428
+ Copyright © 2022 Borewit
429
429
 
430
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
430
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
431
431
 
432
432
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
433
433
 
434
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
434
+ THE SOFTWARE IS PROVIDED AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -4,7 +4,7 @@ exports.ParserFactory = exports.parseHttpContentType = void 0;
4
4
  const FileType = require("file-type/core");
5
5
  const ContentType = require("content-type");
6
6
  const MimeType = require("media-typer");
7
- const _debug = require("debug");
7
+ const debug_1 = require("debug");
8
8
  const MetadataCollector_1 = require("./common/MetadataCollector");
9
9
  const AiffParser_1 = require("./aiff/AiffParser");
10
10
  const APEv2Parser_1 = require("./apev2/APEv2Parser");
@@ -19,7 +19,7 @@ const WavPackParser_1 = require("./wavpack/WavPackParser");
19
19
  const DsfParser_1 = require("./dsf/DsfParser");
20
20
  const DsdiffParser_1 = require("./dsdiff/DsdiffParser");
21
21
  const MatroskaParser_1 = require("./matroska/MatroskaParser");
22
- const debug = _debug('music-metadata:parser:factory');
22
+ const debug = (0, debug_1.default)('music-metadata:parser:factory');
23
23
  function parseHttpContentType(contentType) {
24
24
  const type = ContentType.parse(contentType);
25
25
  const mime = MimeType.parse(type.type);
@@ -2,14 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AIFFParser = void 0;
4
4
  const Token = require("token-types");
5
- const initDebug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const strtok3 = require("strtok3/lib/core");
7
7
  const ID3v2Parser_1 = require("../id3v2/ID3v2Parser");
8
8
  const FourCC_1 = require("../common/FourCC");
9
9
  const BasicParser_1 = require("../common/BasicParser");
10
10
  const AiffToken = require("./AiffToken");
11
11
  const iff = require("../iff");
12
- const debug = initDebug('music-metadata:parser:aiff');
12
+ const debug = (0, debug_1.default)('music-metadata:parser:aiff');
13
13
  /**
14
14
  * AIFF - Audio Interchange File Format
15
15
  *
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.APEv2Parser = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const strtok3 = require("strtok3/lib/core");
6
6
  const token_types_1 = require("token-types");
7
7
  const util = require("../common/Util");
8
8
  const BasicParser_1 = require("../common/BasicParser");
9
9
  const APEv2Token_1 = require("./APEv2Token");
10
- const debug = initDebug('music-metadata:parser:APEv2');
10
+ const debug = (0, debug_1.default)('music-metadata:parser:APEv2');
11
11
  const tagFormat = 'APEv2';
12
12
  const preamble = 'APETAGEX';
13
13
  class APEv2Parser extends BasicParser_1.BasicParser {
@@ -134,8 +134,11 @@ class APEv2Parser extends BasicParser_1.BasicParser {
134
134
  debug(`Ignore external info ${key}`);
135
135
  await this.tokenizer.ignore(tagItemHeader.size);
136
136
  break;
137
- default:
138
- throw new Error(`Unexpected data-type: ${tagItemHeader.flags.dataType}`);
137
+ case APEv2Token_1.DataType.reserved:
138
+ debug(`Ignore external info ${key}`);
139
+ this.metadata.addWarning(`APEv2 header declares a reserved datatype for "${key}"`);
140
+ await this.tokenizer.ignore(tagItemHeader.size);
141
+ break;
139
142
  }
140
143
  }
141
144
  }
@@ -294,7 +294,7 @@ export declare class ExtendedStreamPropertiesObjectState extends State<IExtended
294
294
  export declare class MetadataObjectState extends State<ITag[]> {
295
295
  static guid: GUID;
296
296
  constructor(header: IAsfObjectHeader);
297
- get(buf: Buffer, off: number): ITag[];
297
+ get(uint8Array: Uint8Array, off: number): ITag[];
298
298
  }
299
299
  export declare class MetadataLibraryObjectState extends MetadataObjectState {
300
300
  static guid: GUID;
@@ -311,8 +311,9 @@ class MetadataObjectState extends State {
311
311
  constructor(header) {
312
312
  super(header);
313
313
  }
314
- get(buf, off) {
314
+ get(uint8Array, off) {
315
315
  const tags = [];
316
+ const buf = Buffer.from(uint8Array);
316
317
  const descriptionRecordsCount = buf.readUInt16LE(off);
317
318
  let pos = off + 2;
318
319
  for (let i = 0; i < descriptionRecordsCount; i += 1) {
@@ -327,10 +328,6 @@ class MetadataObjectState extends State {
327
328
  pos += nameLen;
328
329
  const data = buf.slice(pos, pos + dataLen);
329
330
  pos += dataLen;
330
- const parseAttr = AsfUtil_1.AsfUtil.getParserForAttr(dataType);
331
- if (!parseAttr) {
332
- throw new Error('unexpected value headerType: ' + dataType);
333
- }
334
331
  this.postProcessTag(tags, name, dataType, data);
335
332
  }
336
333
  return tags;
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AsfParser = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const type_1 = require("../type");
6
6
  const GUID_1 = require("./GUID");
7
7
  const AsfObject = require("./AsfObject");
8
8
  const BasicParser_1 = require("../common/BasicParser");
9
- const debug = initDebug('music-metadata:parser:ASF');
9
+ const debug = (0, debug_1.default)('music-metadata:parser:ASF');
10
10
  const headerType = 'asf';
11
11
  /**
12
12
  * Windows Media Metadata Usage Guidelines
@@ -3,7 +3,7 @@ import { DataType } from './AsfObject';
3
3
  export declare type AttributeParser = (buf: Buffer) => boolean | string | number | bigint | Buffer;
4
4
  export declare class AsfUtil {
5
5
  static getParserForAttr(i: DataType): AttributeParser;
6
- static parseUnicodeAttr(buf: any): string;
6
+ static parseUnicodeAttr(uint8Array: Uint8Array): string;
7
7
  private static attributeParsers;
8
8
  private static parseByteArrayAttr;
9
9
  private static parseBoolAttr;
@@ -7,13 +7,11 @@ class AsfUtil {
7
7
  static getParserForAttr(i) {
8
8
  return AsfUtil.attributeParsers[i];
9
9
  }
10
- static parseUnicodeAttr(buf) {
11
- return util.stripNulls(util.decodeString(buf, 'utf16le'));
10
+ static parseUnicodeAttr(uint8Array) {
11
+ return util.stripNulls(util.decodeString(uint8Array, 'utf16le'));
12
12
  }
13
13
  static parseByteArrayAttr(buf) {
14
- const newBuf = Buffer.alloc(buf.length);
15
- buf.copy(newBuf);
16
- return newBuf;
14
+ return Buffer.from(buf);
17
15
  }
18
16
  static parseBoolAttr(buf, offset = 0) {
19
17
  return AsfUtil.parseWordAttr(buf, offset) === 1;
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.joinArtists = exports.MetadataCollector = void 0;
4
4
  const type_1 = require("../type");
5
- const initDebug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const GenericTagTypes_1 = require("./GenericTagTypes");
7
7
  const CombinedTagMapper_1 = require("./CombinedTagMapper");
8
8
  const GenericTagMapper_1 = require("./GenericTagMapper");
9
9
  const Util_1 = require("./Util");
10
10
  const FileType = require("file-type/core");
11
- const debug = initDebug('music-metadata:collector');
11
+ const debug = (0, debug_1.default)('music-metadata:collector');
12
12
  const TagPriority = ['matroska', 'APEv2', 'vorbis', 'ID3v2.4', 'ID3v2.3', 'ID3v2.2', 'exif', 'asf', 'iTunes', 'ID3v1'];
13
13
  /**
14
14
  * Provided to the parser to uodate the metadata result.
@@ -4,9 +4,10 @@ import { IRandomReader } from '../type';
4
4
  * Provides abstract file access via the IRandomRead interface
5
5
  */
6
6
  export declare class RandomFileReader implements IRandomReader {
7
+ private readonly fileHandle;
8
+ filePath: string;
7
9
  fileSize: number;
8
- private readonly fd;
9
- constructor(filePath: string, fileSize: number);
10
+ private constructor();
10
11
  /**
11
12
  * Read from a given position of an abstracted file or buffer.
12
13
  * @param buffer {Buffer} is the buffer that the data will be written to.
@@ -16,5 +17,6 @@ export declare class RandomFileReader implements IRandomReader {
16
17
  * @return {Promise<number>} bytes read
17
18
  */
18
19
  randomRead(buffer: Buffer, offset: number, length: number, position: number): Promise<number>;
19
- close(): void;
20
+ close(): Promise<void>;
21
+ static init(filePath: string, fileSize: number): Promise<RandomFileReader>;
20
22
  }
@@ -6,9 +6,10 @@ const fs = require("fs");
6
6
  * Provides abstract file access via the IRandomRead interface
7
7
  */
8
8
  class RandomFileReader {
9
- constructor(filePath, fileSize) {
9
+ constructor(fileHandle, filePath, fileSize) {
10
+ this.fileHandle = fileHandle;
11
+ this.filePath = filePath;
10
12
  this.fileSize = fileSize;
11
- this.fd = fs.openSync(filePath, 'r');
12
13
  }
13
14
  /**
14
15
  * Read from a given position of an abstracted file or buffer.
@@ -18,20 +19,16 @@ class RandomFileReader {
18
19
  * @param position {number} is an argument specifying where to begin reading from in the file.
19
20
  * @return {Promise<number>} bytes read
20
21
  */
21
- randomRead(buffer, offset, length, position) {
22
- return new Promise((resolve, reject) => {
23
- fs.read(this.fd, buffer, offset, length, position, (err, bytesRead) => {
24
- if (err) {
25
- reject(err);
26
- }
27
- else {
28
- resolve(bytesRead);
29
- }
30
- });
31
- });
22
+ async randomRead(buffer, offset, length, position) {
23
+ const result = await this.fileHandle.read(buffer, offset, length, position);
24
+ return result.bytesRead;
32
25
  }
33
- close() {
34
- fs.closeSync(this.fd);
26
+ async close() {
27
+ return this.fileHandle.close();
28
+ }
29
+ static async init(filePath, fileSize) {
30
+ const fileHandle = await fs.promises.open(filePath, 'r');
31
+ return new RandomFileReader(fileHandle, filePath, fileSize);
35
32
  }
36
33
  }
37
34
  exports.RandomFileReader = RandomFileReader;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { IRatio } from '../type';
3
2
  export declare type StringEncoding = 'ascii' | 'utf8' | 'utf16le' | 'ucs2' | 'base64url' | 'latin1' | 'hex';
4
3
  export interface ITextEncoding {
@@ -19,27 +18,27 @@ export declare function trimRightNull(x: string): string;
19
18
  /**
20
19
  * Decode string
21
20
  */
22
- export declare function decodeString(buffer: Buffer, encoding: StringEncoding): string;
21
+ export declare function decodeString(uint8Array: Uint8Array, encoding: StringEncoding): string;
23
22
  export declare function stripNulls(str: string): string;
24
23
  /**
25
24
  * Read bit-aligned number start from buffer
26
25
  * Total offset in bits = byteOffset * 8 + bitOffset
27
- * @param buf Byte buffer
26
+ * @param source Byte buffer
28
27
  * @param byteOffset Starting offset in bytes
29
28
  * @param bitOffset Starting offset in bits: 0 = lsb
30
29
  * @param len Length of number in bits
31
- * @return {number} decoded bit aligned number
30
+ * @return Decoded bit aligned number
32
31
  */
33
- export declare function getBitAllignedNumber(buf: Uint8Array, byteOffset: number, bitOffset: number, len: number): number;
32
+ export declare function getBitAllignedNumber(source: Uint8Array, byteOffset: number, bitOffset: number, len: number): number;
34
33
  /**
35
34
  * Read bit-aligned number start from buffer
36
35
  * Total offset in bits = byteOffset * 8 + bitOffset
37
- * @param buf Byte buffer
36
+ * @param source Byte Uint8Array
38
37
  * @param byteOffset Starting offset in bytes
39
- * @param bitOffset Starting offset in bits: 0 = most significant bit, 7 is least significant bit
40
- * @return {number} decoded bit aligned number
38
+ * @param bitOffset Starting offset in bits: 0 = most significant bit, 7 is the least significant bit
39
+ * @return True if bit is set
41
40
  */
42
- export declare function isBitSet(buf: Uint8Array, byteOffset: number, bitOffset: number): boolean;
41
+ export declare function isBitSet(source: Uint8Array, byteOffset: number, bitOffset: number): boolean;
43
42
  export declare function a2hex(str: string): string;
44
43
  /**
45
44
  * Convert power ratio to DB
@@ -52,19 +52,19 @@ function swapBytes(uint8Array) {
52
52
  /**
53
53
  * Decode string
54
54
  */
55
- function decodeString(buffer, encoding) {
55
+ function decodeString(uint8Array, encoding) {
56
56
  // annoying workaround for a double BOM issue
57
57
  // https://github.com/leetreveil/musicmetadata/issues/84
58
- if (buffer[0] === 0xFF && buffer[1] === 0xFE) { // little endian
59
- return decodeString(buffer.subarray(2), encoding);
58
+ if (uint8Array[0] === 0xFF && uint8Array[1] === 0xFE) { // little endian
59
+ return decodeString(uint8Array.subarray(2), encoding);
60
60
  }
61
- else if (encoding === 'utf16le' && buffer[0] === 0xFE && buffer[1] === 0xFF) {
61
+ else if (encoding === 'utf16le' && uint8Array[0] === 0xFE && uint8Array[1] === 0xFF) {
62
62
  // BOM, indicating big endian decoding
63
- if ((buffer.length & 1) !== 0)
63
+ if ((uint8Array.length & 1) !== 0)
64
64
  throw new Error('Expected even number of octets for 16-bit unicode string');
65
- return decodeString(swapBytes(buffer), encoding);
65
+ return decodeString(swapBytes(uint8Array), encoding);
66
66
  }
67
- return buffer.toString(encoding);
67
+ return Buffer.from(uint8Array).toString(encoding);
68
68
  }
69
69
  exports.decodeString = decodeString;
70
70
  function stripNulls(str) {
@@ -76,16 +76,16 @@ exports.stripNulls = stripNulls;
76
76
  /**
77
77
  * Read bit-aligned number start from buffer
78
78
  * Total offset in bits = byteOffset * 8 + bitOffset
79
- * @param buf Byte buffer
79
+ * @param source Byte buffer
80
80
  * @param byteOffset Starting offset in bytes
81
81
  * @param bitOffset Starting offset in bits: 0 = lsb
82
82
  * @param len Length of number in bits
83
- * @return {number} decoded bit aligned number
83
+ * @return Decoded bit aligned number
84
84
  */
85
- function getBitAllignedNumber(buf, byteOffset, bitOffset, len) {
85
+ function getBitAllignedNumber(source, byteOffset, bitOffset, len) {
86
86
  const byteOff = byteOffset + ~~(bitOffset / 8);
87
87
  const bitOff = bitOffset % 8;
88
- let value = buf[byteOff];
88
+ let value = source[byteOff];
89
89
  value &= 0xff >> bitOff;
90
90
  const bitsRead = 8 - bitOff;
91
91
  const bitsLeft = len - bitsRead;
@@ -94,7 +94,7 @@ function getBitAllignedNumber(buf, byteOffset, bitOffset, len) {
94
94
  }
95
95
  else if (bitsLeft > 0) {
96
96
  value <<= bitsLeft;
97
- value |= getBitAllignedNumber(buf, byteOffset, bitOffset + bitsRead, bitsLeft);
97
+ value |= getBitAllignedNumber(source, byteOffset, bitOffset + bitsRead, bitsLeft);
98
98
  }
99
99
  return value;
100
100
  }
@@ -102,13 +102,13 @@ exports.getBitAllignedNumber = getBitAllignedNumber;
102
102
  /**
103
103
  * Read bit-aligned number start from buffer
104
104
  * Total offset in bits = byteOffset * 8 + bitOffset
105
- * @param buf Byte buffer
105
+ * @param source Byte Uint8Array
106
106
  * @param byteOffset Starting offset in bytes
107
- * @param bitOffset Starting offset in bits: 0 = most significant bit, 7 is least significant bit
108
- * @return {number} decoded bit aligned number
107
+ * @param bitOffset Starting offset in bits: 0 = most significant bit, 7 is the least significant bit
108
+ * @return True if bit is set
109
109
  */
110
- function isBitSet(buf, byteOffset, bitOffset) {
111
- return getBitAllignedNumber(buf, byteOffset, bitOffset, 1) === 1;
110
+ function isBitSet(source, byteOffset, bitOffset) {
111
+ return getBitAllignedNumber(source, byteOffset, bitOffset, 1) === 1;
112
112
  }
113
113
  exports.isBitSet = isBitSet;
114
114
  function a2hex(str) {
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DsdiffParser = void 0;
4
4
  const Token = require("token-types");
5
- const initDebug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const strtok3 = require("strtok3/lib/core");
7
7
  const FourCC_1 = require("../common/FourCC");
8
8
  const BasicParser_1 = require("../common/BasicParser");
9
9
  const ID3v2Parser_1 = require("../id3v2/ID3v2Parser");
10
10
  const DsdiffToken_1 = require("./DsdiffToken");
11
- const debug = initDebug('music-metadata:parser:aiff');
11
+ const debug = (0, debug_1.default)('music-metadata:parser:aiff');
12
12
  /**
13
13
  * DSDIFF - Direct Stream Digital Interchange File Format (Phillips)
14
14
  *
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DsfParser = void 0;
4
- const _debug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const AbstractID3Parser_1 = require("../id3v2/AbstractID3Parser");
6
6
  const DsfChunk_1 = require("./DsfChunk");
7
7
  const ID3v2Parser_1 = require("../id3v2/ID3v2Parser");
8
- const debug = _debug('music-metadata:parser:DSF');
8
+ const debug = (0, debug_1.default)('music-metadata:parser:DSF');
9
9
  /**
10
10
  * DSF (dsd stream file) File Parser
11
11
  * Ref: https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf
@@ -2,14 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FlacParser = void 0;
4
4
  const token_types_1 = require("token-types");
5
- const initDebug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const util = require("../common/Util");
7
7
  const Vorbis_1 = require("../ogg/vorbis/Vorbis");
8
8
  const AbstractID3Parser_1 = require("../id3v2/AbstractID3Parser");
9
9
  const FourCC_1 = require("../common/FourCC");
10
10
  const VorbisParser_1 = require("../ogg/vorbis/VorbisParser");
11
11
  const VorbisDecoder_1 = require("../ogg/vorbis/VorbisDecoder");
12
- const debug = initDebug('music-metadata:parser:FLAC');
12
+ const debug = (0, debug_1.default)('music-metadata:parser:FLAC');
13
13
  /**
14
14
  * FLAC supports up to 128 kinds of metadata blocks; currently the following are defined:
15
15
  * ref: https://xiph.org/flac/format.html#metadata_block
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasID3v1Header = exports.ID3v1Parser = exports.Genres = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const token_types_1 = require("token-types");
6
6
  const util = require("../common/Util");
7
7
  const BasicParser_1 = require("../common/BasicParser");
8
8
  const APEv2Parser_1 = require("../apev2/APEv2Parser");
9
- const debug = initDebug('music-metadata:parser:ID3v1');
9
+ const debug = (0, debug_1.default)('music-metadata:parser:ID3v1');
10
10
  /**
11
11
  * ID3v1 Genre mappings
12
12
  * Ref: https://de.wikipedia.org/wiki/Liste_der_ID3v1-Genres
@@ -2,12 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractID3Parser = void 0;
4
4
  const core_1 = require("strtok3/lib/core");
5
- const initDebug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const ID3v2Token_1 = require("./ID3v2Token");
7
7
  const ID3v2Parser_1 = require("./ID3v2Parser");
8
8
  const ID3v1Parser_1 = require("../id3v1/ID3v1Parser");
9
9
  const BasicParser_1 = require("../common/BasicParser");
10
- const debug = initDebug('music-metadata:parser:ID3');
10
+ const debug = (0, debug_1.default)('music-metadata:parser:ID3');
11
11
  /**
12
12
  * Abstract parser which tries take ID3v2 and ID3v1 headers.
13
13
  */
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { ID3v2MajorVersion } from './ID3v2Token';
3
2
  import { IWarningCollector } from '../common/MetadataCollector';
4
3
  export declare function parseGenre(origVal: string): string[];
@@ -11,7 +10,7 @@ export declare class FrameParser {
11
10
  * @param warningCollector - Used to collect decode issue
12
11
  */
13
12
  constructor(major: ID3v2MajorVersion, warningCollector: IWarningCollector);
14
- readData(b: Buffer, type: string, includeCovers: boolean): any;
13
+ readData(uint8Array: Uint8Array, type: string, includeCovers: boolean): any;
15
14
  protected static fixPictureMimeType(pictureType: string): string;
16
15
  /**
17
16
  * Converts TMCL (Musician credits list) or TIPL (Involved people list)
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FrameParser = exports.parseGenre = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const Token = require("token-types");
6
6
  const util = require("../common/Util");
7
7
  const ID3v2Token_1 = require("./ID3v2Token");
8
8
  const ID3v1Parser_1 = require("../id3v1/ID3v1Parser");
9
- const debug = initDebug('music-metadata:id3v2:frame-parser');
9
+ const debug = (0, debug_1.default)('music-metadata:id3v2:frame-parser');
10
10
  const defaultEnc = 'latin1'; // latin1 == iso-8859-1;
11
11
  function parseGenre(origVal) {
12
12
  // match everything inside parentheses
@@ -68,13 +68,13 @@ class FrameParser {
68
68
  this.major = major;
69
69
  this.warningCollector = warningCollector;
70
70
  }
71
- readData(b, type, includeCovers) {
72
- if (b.length === 0) {
71
+ readData(uint8Array, type, includeCovers) {
72
+ if (uint8Array.length === 0) {
73
73
  this.warningCollector.addWarning(`id3v2.${this.major} header has empty tag type=${type}`);
74
74
  return;
75
75
  }
76
- const { encoding, bom } = ID3v2Token_1.TextEncodingToken.get(b, 0);
77
- const length = b.length;
76
+ const { encoding, bom } = ID3v2Token_1.TextEncodingToken.get(uint8Array, 0);
77
+ const length = uint8Array.length;
78
78
  let offset = 0;
79
79
  let output = []; // ToDo
80
80
  const nullTerminatorLength = FrameParser.getNullTerminatorLength(encoding);
@@ -90,7 +90,7 @@ class FrameParser {
90
90
  case 'PCST':
91
91
  let text;
92
92
  try {
93
- text = util.decodeString(b.subarray(1), encoding).replace(/\x00+$/, '');
93
+ text = util.decodeString(uint8Array.slice(1), encoding).replace(/\x00+$/, '');
94
94
  }
95
95
  catch (error) {
96
96
  this.warningCollector.addWarning(`id3v2.${this.major} type=${type} header has invalid string value: ${error.message}`);
@@ -131,7 +131,7 @@ class FrameParser {
131
131
  }
132
132
  break;
133
133
  case 'TXXX':
134
- output = FrameParser.readIdentifierAndData(b, offset + 1, length, encoding);
134
+ output = FrameParser.readIdentifierAndData(uint8Array, offset + 1, length, encoding);
135
135
  output = {
136
136
  description: output.id,
137
137
  text: this.splitValue(type, util.decodeString(output.data, encoding).replace(/\x00+$/, ''))
@@ -144,31 +144,31 @@ class FrameParser {
144
144
  offset += 1;
145
145
  switch (this.major) {
146
146
  case 2:
147
- pic.format = util.decodeString(b.slice(offset, offset + 3), 'latin1'); // 'latin1'; // latin1 == iso-8859-1;
147
+ pic.format = util.decodeString(uint8Array.slice(offset, offset + 3), 'latin1'); // 'latin1'; // latin1 == iso-8859-1;
148
148
  offset += 3;
149
149
  break;
150
150
  case 3:
151
151
  case 4:
152
- fzero = util.findZero(b, offset, length, defaultEnc);
153
- pic.format = util.decodeString(b.slice(offset, fzero), defaultEnc);
152
+ fzero = util.findZero(uint8Array, offset, length, defaultEnc);
153
+ pic.format = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);
154
154
  offset = fzero + 1;
155
155
  break;
156
156
  default:
157
157
  throw new Error('Warning: unexpected major versionIndex: ' + this.major);
158
158
  }
159
159
  pic.format = FrameParser.fixPictureMimeType(pic.format);
160
- pic.type = ID3v2Token_1.AttachedPictureType[b[offset]];
160
+ pic.type = ID3v2Token_1.AttachedPictureType[uint8Array[offset]];
161
161
  offset += 1;
162
- fzero = util.findZero(b, offset, length, encoding);
163
- pic.description = util.decodeString(b.slice(offset, fzero), encoding);
162
+ fzero = util.findZero(uint8Array, offset, length, encoding);
163
+ pic.description = util.decodeString(uint8Array.slice(offset, fzero), encoding);
164
164
  offset = fzero + nullTerminatorLength;
165
- pic.data = Buffer.from(b.slice(offset, length));
165
+ pic.data = Buffer.from(uint8Array.slice(offset, length));
166
166
  output = pic;
167
167
  }
168
168
  break;
169
169
  case 'CNT':
170
170
  case 'PCNT':
171
- output = Token.UINT32_BE.get(b, 0);
171
+ output = Token.UINT32_BE.get(uint8Array, 0);
172
172
  break;
173
173
  case 'SYLT':
174
174
  // skip text encoding (1 byte),
@@ -179,7 +179,7 @@ class FrameParser {
179
179
  offset += 7;
180
180
  output = [];
181
181
  while (offset < length) {
182
- const txt = b.slice(offset, offset = util.findZero(b, offset, length, encoding));
182
+ const txt = uint8Array.slice(offset, offset = util.findZero(uint8Array, offset, length, encoding));
183
183
  offset += 5; // push offset forward one + 4 byte timestamp
184
184
  output.push(util.decodeString(txt, encoding));
185
185
  }
@@ -189,47 +189,47 @@ class FrameParser {
189
189
  case 'COM':
190
190
  case 'COMM':
191
191
  offset += 1;
192
- out.language = util.decodeString(b.slice(offset, offset + 3), defaultEnc);
192
+ out.language = util.decodeString(uint8Array.slice(offset, offset + 3), defaultEnc);
193
193
  offset += 3;
194
- fzero = util.findZero(b, offset, length, encoding);
195
- out.description = util.decodeString(b.slice(offset, fzero), encoding);
194
+ fzero = util.findZero(uint8Array, offset, length, encoding);
195
+ out.description = util.decodeString(uint8Array.slice(offset, fzero), encoding);
196
196
  offset = fzero + nullTerminatorLength;
197
- out.text = util.decodeString(b.slice(offset, length), encoding).replace(/\x00+$/, '');
197
+ out.text = util.decodeString(uint8Array.slice(offset, length), encoding).replace(/\x00+$/, '');
198
198
  output = [out];
199
199
  break;
200
200
  case 'UFID':
201
- output = FrameParser.readIdentifierAndData(b, offset, length, defaultEnc);
201
+ output = FrameParser.readIdentifierAndData(uint8Array, offset, length, defaultEnc);
202
202
  output = { owner_identifier: output.id, identifier: output.data };
203
203
  break;
204
204
  case 'PRIV': // private frame
205
- output = FrameParser.readIdentifierAndData(b, offset, length, defaultEnc);
205
+ output = FrameParser.readIdentifierAndData(uint8Array, offset, length, defaultEnc);
206
206
  output = { owner_identifier: output.id, data: output.data };
207
207
  break;
208
208
  case 'POPM': // Popularimeter
209
- fzero = util.findZero(b, offset, length, defaultEnc);
210
- const email = util.decodeString(b.slice(offset, fzero), defaultEnc);
209
+ fzero = util.findZero(uint8Array, offset, length, defaultEnc);
210
+ const email = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);
211
211
  offset = fzero + 1;
212
212
  const dataLen = length - offset;
213
213
  output = {
214
214
  email,
215
- rating: b.readUInt8(offset),
216
- counter: dataLen >= 5 ? b.readUInt32BE(offset + 1) : undefined
215
+ rating: Token.UINT8.get(uint8Array, offset),
216
+ counter: dataLen >= 5 ? Token.UINT32_BE.get(uint8Array, offset + 1) : undefined
217
217
  };
218
218
  break;
219
219
  case 'GEOB': { // General encapsulated object
220
- fzero = util.findZero(b, offset + 1, length, encoding);
221
- const mimeType = util.decodeString(b.slice(offset + 1, fzero), defaultEnc);
220
+ fzero = util.findZero(uint8Array, offset + 1, length, encoding);
221
+ const mimeType = util.decodeString(uint8Array.slice(offset + 1, fzero), defaultEnc);
222
222
  offset = fzero + 1;
223
- fzero = util.findZero(b, offset, length - offset, encoding);
224
- const filename = util.decodeString(b.slice(offset, fzero), defaultEnc);
223
+ fzero = util.findZero(uint8Array, offset, length - offset, encoding);
224
+ const filename = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);
225
225
  offset = fzero + 1;
226
- fzero = util.findZero(b, offset, length - offset, encoding);
227
- const description = util.decodeString(b.slice(offset, fzero), defaultEnc);
226
+ fzero = util.findZero(uint8Array, offset, length - offset, encoding);
227
+ const description = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);
228
228
  output = {
229
229
  type: mimeType,
230
230
  filename,
231
231
  description,
232
- data: b.slice(offset + 1, length)
232
+ data: uint8Array.slice(offset + 1, length)
233
233
  };
234
234
  break;
235
235
  }
@@ -243,23 +243,23 @@ class FrameParser {
243
243
  case 'WPAY':
244
244
  case 'WPUB':
245
245
  // Decode URL
246
- output = util.decodeString(b.slice(offset, fzero), defaultEnc);
246
+ output = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);
247
247
  break;
248
248
  case 'WXXX': {
249
249
  // Decode URL
250
- fzero = util.findZero(b, offset + 1, length, encoding);
251
- const description = util.decodeString(b.slice(offset + 1, fzero), encoding);
250
+ fzero = util.findZero(uint8Array, offset + 1, length, encoding);
251
+ const description = util.decodeString(uint8Array.slice(offset + 1, fzero), encoding);
252
252
  offset = fzero + (encoding === 'utf16le' ? 2 : 1);
253
- output = { description, url: util.decodeString(b.slice(offset, length), defaultEnc) };
253
+ output = { description, url: util.decodeString(uint8Array.slice(offset, length), defaultEnc) };
254
254
  break;
255
255
  }
256
256
  case 'WFD':
257
257
  case 'WFED':
258
- output = util.decodeString(b.slice(offset + 1, util.findZero(b, offset + 1, length, encoding)), encoding);
258
+ output = util.decodeString(uint8Array.slice(offset + 1, util.findZero(uint8Array, offset + 1, length, encoding)), encoding);
259
259
  break;
260
260
  case 'MCDI': {
261
261
  // Music CD identifier
262
- output = b.slice(0, length);
262
+ output = uint8Array.slice(0, length);
263
263
  break;
264
264
  }
265
265
  default:
@@ -316,11 +316,11 @@ class FrameParser {
316
316
  static trimArray(values) {
317
317
  return values.map(value => value.replace(/\x00+$/, '').trim());
318
318
  }
319
- static readIdentifierAndData(b, offset, length, encoding) {
320
- const fzero = util.findZero(b, offset, length, encoding);
321
- const id = util.decodeString(b.slice(offset, fzero), encoding);
319
+ static readIdentifierAndData(uint8Array, offset, length, encoding) {
320
+ const fzero = util.findZero(uint8Array, offset, length, encoding);
321
+ const id = util.decodeString(uint8Array.slice(offset, fzero), encoding);
322
322
  offset = fzero + FrameParser.getNullTerminatorLength(encoding);
323
- return { id, data: b.slice(offset, length) };
323
+ return { id, data: uint8Array.slice(offset, length) };
324
324
  }
325
325
  static getNullTerminatorLength(enc) {
326
326
  return enc === 'utf16le' ? 2 : 1;
@@ -1,9 +1,8 @@
1
- /// <reference types="node" />
2
1
  import { ITokenizer } from 'strtok3/lib/core';
3
2
  import { IOptions } from '../type';
4
3
  import { INativeMetadataCollector } from '../common/MetadataCollector';
5
4
  export declare class ID3v2Parser {
6
- static removeUnsyncBytes(buffer: Buffer): Buffer;
5
+ static removeUnsyncBytes(buffer: Uint8Array): Uint8Array;
7
6
  private static getFrameHeaderLength;
8
7
  private static readFrameFlags;
9
8
  private static readFrameData;
@@ -48,20 +48,20 @@ class ID3v2Parser {
48
48
  }
49
49
  };
50
50
  }
51
- static readFrameData(buf, frameHeader, majorVer, includeCovers, warningCollector) {
51
+ static readFrameData(uint8Array, frameHeader, majorVer, includeCovers, warningCollector) {
52
52
  const frameParser = new FrameParser_1.FrameParser(majorVer, warningCollector);
53
53
  switch (majorVer) {
54
54
  case 2:
55
- return frameParser.readData(buf, frameHeader.id, includeCovers);
55
+ return frameParser.readData(uint8Array, frameHeader.id, includeCovers);
56
56
  case 3:
57
57
  case 4:
58
58
  if (frameHeader.flags.format.unsynchronisation) {
59
- buf = ID3v2Parser.removeUnsyncBytes(buf);
59
+ uint8Array = ID3v2Parser.removeUnsyncBytes(uint8Array);
60
60
  }
61
61
  if (frameHeader.flags.format.data_length_indicator) {
62
- buf = buf.slice(4, buf.length);
62
+ uint8Array = uint8Array.slice(4, uint8Array.length);
63
63
  }
64
- return frameParser.readData(buf, frameHeader.id, includeCovers);
64
+ return frameParser.readData(uint8Array, frameHeader.id, includeCovers);
65
65
  default:
66
66
  throw new Error('Unexpected majorVer: ' + majorVer);
67
67
  }
@@ -93,14 +93,12 @@ class ID3v2Parser {
93
93
  return dataRemaining > 0 ? this.parseExtendedHeaderData(dataRemaining, extendedHeader.size) : this.parseId3Data(this.id3Header.size - extendedHeader.size);
94
94
  }
95
95
  async parseExtendedHeaderData(dataRemaining, extendedHeaderSize) {
96
- const buffer = Buffer.alloc(dataRemaining);
97
- await this.tokenizer.readBuffer(buffer, { length: dataRemaining });
96
+ await this.tokenizer.ignore(dataRemaining);
98
97
  return this.parseId3Data(this.id3Header.size - extendedHeaderSize);
99
98
  }
100
99
  async parseId3Data(dataLen) {
101
- const buffer = Buffer.alloc(dataLen);
102
- await this.tokenizer.readBuffer(buffer, { length: dataLen });
103
- for (const tag of this.parseMetadata(buffer)) {
100
+ const uint8Array = await this.tokenizer.readToken(new Token.Uint8ArrayType(dataLen));
101
+ for (const tag of this.parseMetadata(uint8Array)) {
104
102
  if (tag.id === 'TXXX') {
105
103
  if (tag.value) {
106
104
  for (const text of tag.value.text) {
@@ -152,13 +150,13 @@ class ID3v2Parser {
152
150
  }
153
151
  return tags;
154
152
  }
155
- readFrameHeader(v, majorVer) {
153
+ readFrameHeader(uint8Array, majorVer) {
156
154
  let header;
157
155
  switch (majorVer) {
158
156
  case 2:
159
157
  header = {
160
- id: v.toString('ascii', 0, 3),
161
- length: Token.UINT24_BE.get(v, 3)
158
+ id: Buffer.from(uint8Array.slice(0, 3)).toString('ascii'),
159
+ length: Token.UINT24_BE.get(uint8Array, 3)
162
160
  };
163
161
  if (!header.id.match(/[A-Z0-9]{3}/g)) {
164
162
  this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${header.id}`);
@@ -167,9 +165,9 @@ class ID3v2Parser {
167
165
  case 3:
168
166
  case 4:
169
167
  header = {
170
- id: v.toString('ascii', 0, 4),
171
- length: (majorVer === 4 ? ID3v2Token_1.UINT32SYNCSAFE : Token.UINT32_BE).get(v, 4),
172
- flags: ID3v2Parser.readFrameFlags(v.slice(8, 10))
168
+ id: Buffer.from(uint8Array.slice(0, 4)).toString('ascii'),
169
+ length: (majorVer === 4 ? ID3v2Token_1.UINT32SYNCSAFE : Token.UINT32_BE).get(uint8Array, 4),
170
+ flags: ID3v2Parser.readFrameFlags(uint8Array.slice(8, 10))
173
171
  };
174
172
  if (!header.id.match(/[A-Z0-9]{4}/g)) {
175
173
  this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${header.id}`);
package/lib/index.js CHANGED
@@ -4,9 +4,9 @@ exports.ratingToStars = exports.orderTags = exports.parseFile = exports.parseStr
4
4
  const strtok3 = require("strtok3");
5
5
  const Core = require("./core");
6
6
  const ParserFactory_1 = require("./ParserFactory");
7
- const _debug = require("debug");
7
+ const debug_1 = require("debug");
8
8
  const RandomFileReader_1 = require("./common/RandomFileReader");
9
- const debug = _debug("music-metadata:parser");
9
+ const debug = (0, debug_1.default)("music-metadata:parser");
10
10
  var core_1 = require("./core");
11
11
  Object.defineProperty(exports, "parseFromTokenizer", { enumerable: true, get: function () { return core_1.parseFromTokenizer; } });
12
12
  Object.defineProperty(exports, "parseBuffer", { enumerable: true, get: function () { return core_1.parseBuffer; } });
@@ -32,12 +32,12 @@ exports.parseStream = parseStream;
32
32
  async function parseFile(filePath, options = {}) {
33
33
  debug(`parseFile: ${filePath}`);
34
34
  const fileTokenizer = await strtok3.fromFile(filePath);
35
- const fileReader = new RandomFileReader_1.RandomFileReader(filePath, fileTokenizer.fileInfo.size);
35
+ const fileReader = await RandomFileReader_1.RandomFileReader.init(filePath, fileTokenizer.fileInfo.size);
36
36
  try {
37
37
  await Core.scanAppendingHeaders(fileReader, options);
38
38
  }
39
39
  finally {
40
- fileReader.close();
40
+ await fileReader.close();
41
41
  }
42
42
  try {
43
43
  const parserName = ParserFactory_1.ParserFactory.getParserIdForExtension(filePath);
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MatroskaParser = void 0;
4
4
  const token_types_1 = require("token-types");
5
- const initDebug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const BasicParser_1 = require("../common/BasicParser");
7
7
  const types_1 = require("./types");
8
8
  const matroskaDtd = require("./MatroskaDtd");
9
- const debug = initDebug('music-metadata:parser:matroska');
9
+ const debug = (0, debug_1.default)('music-metadata:parser:matroska');
10
10
  /**
11
11
  * Extensible Binary Meta Language (EBML) parser
12
12
  * https://en.wikipedia.org/wiki/Extensible_Binary_Meta_Language
package/lib/mp4/Atom.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Atom = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const AtomToken = require("./AtomToken");
6
- const debug = initDebug('music-metadata:parser:MP4:Atom');
6
+ const debug = (0, debug_1.default)('music-metadata:parser:MP4:Atom');
7
7
  class Atom {
8
8
  constructor(header, extended, parent) {
9
9
  this.header = header;
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ChapterText = exports.StcoAtom = exports.StszAtom = exports.StscAtom = exports.SampleToChunkToken = exports.SttsAtom = exports.TimeToSampleToken = exports.SoundSampleDescriptionV0 = exports.SoundSampleDescriptionVersion = exports.StsdAtom = exports.TrackHeaderAtom = exports.NameAtom = exports.DataAtom = exports.MvhdAtom = exports.MdhdAtom = exports.FixedLengthAtom = exports.mhdr = exports.tkhd = exports.ftyp = exports.ExtendedSize = exports.Header = void 0;
4
4
  const Token = require("token-types");
5
- const initDebug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const FourCC_1 = require("../common/FourCC");
7
- const debug = initDebug('music-metadata:parser:MP4:atom');
7
+ const debug = (0, debug_1.default)('music-metadata:parser:MP4:atom');
8
8
  exports.Header = {
9
9
  len: 8,
10
10
  get: (buf, off) => {
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MP4Parser = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const Token = require("token-types");
6
6
  const BasicParser_1 = require("../common/BasicParser");
7
7
  const ID3v1Parser_1 = require("../id3v1/ID3v1Parser");
8
8
  const type_1 = require("../type");
9
9
  const Atom_1 = require("./Atom");
10
10
  const AtomToken = require("./AtomToken");
11
- const debug = initDebug('music-metadata:parser:MP4');
11
+ const debug = (0, debug_1.default)('music-metadata:parser:MP4');
12
12
  const tagFormat = 'iTunes';
13
13
  const encoderDict = {
14
14
  raw: {
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MpegParser = void 0;
4
4
  const Token = require("token-types");
5
5
  const core_1 = require("strtok3/lib/core");
6
- const initDebug = require("debug");
6
+ const debug_1 = require("debug");
7
7
  const common = require("../common/Util");
8
8
  const AbstractID3Parser_1 = require("../id3v2/AbstractID3Parser");
9
9
  const XingTag_1 = require("./XingTag");
10
- const debug = initDebug('music-metadata:parser:mpeg');
10
+ const debug = (0, debug_1.default)('music-metadata:parser:mpeg');
11
11
  /**
12
12
  * Cache buffer size used for searching synchronization preabmle
13
13
  */
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const initDebug = require("debug");
3
+ const debug_1 = require("debug");
4
4
  const Token = require("token-types");
5
5
  const AbstractID3Parser_1 = require("../id3v2/AbstractID3Parser");
6
6
  const MpcSv8Parser_1 = require("./sv8/MpcSv8Parser");
7
7
  const MpcSv7Parser_1 = require("./sv7/MpcSv7Parser");
8
- const debug = initDebug('music-metadata:parser:musepack');
8
+ const debug = (0, debug_1.default)('music-metadata:parser:musepack');
9
9
  class MusepackParser extends AbstractID3Parser_1.AbstractID3Parser {
10
10
  async postId3v2Parse() {
11
11
  const signature = await this.tokenizer.peekToken(new Token.StringType(3, 'binary'));
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MpcSv7Parser = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const BasicParser_1 = require("../../common/BasicParser");
6
6
  const APEv2Parser_1 = require("../../apev2/APEv2Parser");
7
7
  const BitReader_1 = require("./BitReader");
8
8
  const SV7 = require("./StreamVersion7");
9
- const debug = initDebug('music-metadata:parser:musepack');
9
+ const debug = (0, debug_1.default)('music-metadata:parser:musepack');
10
10
  class MpcSv7Parser extends BasicParser_1.BasicParser {
11
11
  constructor() {
12
12
  super(...arguments);
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MpcSv8Parser = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const BasicParser_1 = require("../../common/BasicParser");
6
6
  const APEv2Parser_1 = require("../../apev2/APEv2Parser");
7
7
  const FourCC_1 = require("../../common/FourCC");
8
8
  const SV8 = require("./StreamVersion8");
9
- const debug = initDebug('music-metadata:parser:musepack');
9
+ const debug = (0, debug_1.default)('music-metadata:parser:musepack');
10
10
  class MpcSv8Parser extends BasicParser_1.BasicParser {
11
11
  constructor() {
12
12
  super(...arguments);
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StreamReader = void 0;
4
4
  const Token = require("token-types");
5
- const initDebug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const util = require("../../common/Util");
7
- const debug = initDebug('music-metadata:parser:musepack:sv8');
7
+ const debug = (0, debug_1.default)('music-metadata:parser:musepack:sv8');
8
8
  const PacketKey = new Token.StringType(2, 'binary');
9
9
  /**
10
10
  * Stream Header Packet part 1
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OggParser = exports.SegmentTable = void 0;
4
4
  const Token = require("token-types");
5
5
  const core_1 = require("strtok3/lib/core");
6
- const initDebug = require("debug");
6
+ const debug_1 = require("debug");
7
7
  const util = require("../common/Util");
8
8
  const FourCC_1 = require("../common/FourCC");
9
9
  const BasicParser_1 = require("../common/BasicParser");
@@ -11,7 +11,7 @@ const VorbisParser_1 = require("./vorbis/VorbisParser");
11
11
  const OpusParser_1 = require("./opus/OpusParser");
12
12
  const SpeexParser_1 = require("./speex/SpeexParser");
13
13
  const TheoraParser_1 = require("./theora/TheoraParser");
14
- const debug = initDebug('music-metadata:parser:ogg');
14
+ const debug = (0, debug_1.default)('music-metadata:parser:ogg');
15
15
  class SegmentTable {
16
16
  constructor(header) {
17
17
  this.len = header.page_segments;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SpeexParser = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const VorbisParser_1 = require("../vorbis/VorbisParser");
6
6
  const Speex = require("./Speex");
7
- const debug = initDebug('music-metadata:parser:ogg:speex');
7
+ const debug = (0, debug_1.default)('music-metadata:parser:ogg:speex');
8
8
  /**
9
9
  * Speex, RFC 5574
10
10
  * Ref:
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TheoraParser = void 0;
4
- const initDebug = require("debug");
4
+ const debug_1 = require("debug");
5
5
  const Theora_1 = require("./Theora");
6
- const debug = initDebug('music-metadata:parser:ogg:theora');
6
+ const debug = (0, debug_1.default)('music-metadata:parser:ogg:theora');
7
7
  /**
8
8
  * Ref:
9
9
  * - https://theora.org/doc/Theora.pdf
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VorbisParser = void 0;
4
4
  const Token = require("token-types");
5
- const _debug = require("debug");
5
+ const debug_1 = require("debug");
6
6
  const VorbisDecoder_1 = require("./VorbisDecoder");
7
7
  const Vorbis_1 = require("./Vorbis");
8
- const debug = _debug('music-metadata:parser:ogg:vorbis1');
8
+ const debug = (0, debug_1.default)('music-metadata:parser:ogg:vorbis1');
9
9
  /**
10
10
  * Vorbis 1 Parser.
11
11
  * Used by OggParser
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaveParser = void 0;
4
4
  const strtok3 = require("strtok3/lib/core");
5
5
  const Token = require("token-types");
6
- const initDebug = require("debug");
6
+ const debug_1 = require("debug");
7
7
  const riff = require("../riff/RiffChunk");
8
8
  const WaveChunk = require("./../wav/WaveChunk");
9
9
  const ID3v2Parser_1 = require("../id3v2/ID3v2Parser");
@@ -11,7 +11,7 @@ const util = require("../common/Util");
11
11
  const FourCC_1 = require("../common/FourCC");
12
12
  const BasicParser_1 = require("../common/BasicParser");
13
13
  const BwfChunk_1 = require("../wav/BwfChunk");
14
- const debug = initDebug('music-metadata:parser:RIFF');
14
+ const debug = (0, debug_1.default)('music-metadata:parser:RIFF');
15
15
  /**
16
16
  * Resource Interchange File Format (RIFF) Parser
17
17
  *
@@ -6,8 +6,8 @@ const APEv2Parser_1 = require("../apev2/APEv2Parser");
6
6
  const FourCC_1 = require("../common/FourCC");
7
7
  const BasicParser_1 = require("../common/BasicParser");
8
8
  const WavPackToken_1 = require("./WavPackToken");
9
- const initDebug = require("debug");
10
- const debug = initDebug('music-metadata:parser:WavPack');
9
+ const debug_1 = require("debug");
10
+ const debug = (0, debug_1.default)('music-metadata:parser:WavPack');
11
11
  /**
12
12
  * WavPack Parser
13
13
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "music-metadata",
3
3
  "description": "Music metadata parser for Node.js, supporting virtual any audio and tag format.",
4
- "version": "7.11.9",
4
+ "version": "7.12.2",
5
5
  "author": {
6
6
  "name": "Borewit",
7
7
  "url": "https://github.com/Borewit"
@@ -90,35 +90,35 @@
90
90
  "file-type": "16.5.3",
91
91
  "media-typer": "^1.1.0",
92
92
  "strtok3": "^6.2.4",
93
- "token-types": "^4.1.1"
93
+ "token-types": "^4.2.0"
94
94
  },
95
95
  "devDependencies": {
96
96
  "@types/chai": "^4.3.0",
97
97
  "@types/debug": "^4.1.7",
98
98
  "@types/file-type": "^10.9.1",
99
99
  "@types/mocha": "^9.1.0",
100
- "@types/node": "^17.0.17",
101
- "@typescript-eslint/eslint-plugin": "^5.11.0",
102
- "@typescript-eslint/parser": "^5.11.0",
100
+ "@types/node": "^17.0.21",
101
+ "@typescript-eslint/eslint-plugin": "^5.13.0",
102
+ "@typescript-eslint/parser": "^5.13.0",
103
103
  "chai": "^4.3.6",
104
104
  "coveralls": "^3.1.1",
105
105
  "del-cli": "4.0.1",
106
- "eslint": "^8.8.0",
107
- "eslint-config-prettier": "^8.3.0",
106
+ "eslint": "^8.10.0",
107
+ "eslint-config-prettier": "^8.4.0",
108
108
  "eslint-import-resolver-typescript": "^2.5.0",
109
109
  "eslint-plugin-import": "^2.25.4",
110
- "eslint-plugin-jsdoc": "^37.8.2",
110
+ "eslint-plugin-jsdoc": "^37.9.5",
111
111
  "eslint-plugin-node": "^11.1.0",
112
- "eslint-plugin-unicorn": "^40.1.0",
112
+ "eslint-plugin-unicorn": "^41.0.0",
113
113
  "mime": "^3.0.0",
114
- "mocha": "^9.2.0",
114
+ "mocha": "^9.2.1",
115
115
  "npm-run-all": "^4.1.5",
116
116
  "nyc": "^15.1.0",
117
117
  "remark-cli": "^10.0.1",
118
118
  "remark-preset-lint-recommended": "^6.1.2",
119
119
  "source-map-support": "^0.5.21",
120
120
  "ts-node": "^10.5.0",
121
- "typescript": "^4.5.5"
121
+ "typescript": "^4.6.2"
122
122
  },
123
123
  "engines": {
124
124
  "node": ">=10"