Skip to content

Commit

Permalink
Update to yarn berry (v4.2.2)
Browse files Browse the repository at this point in the history
  • Loading branch information
Borewit committed May 28, 2024
1 parent ca98704 commit 291f788
Show file tree
Hide file tree
Showing 7 changed files with 7,623 additions and 5,530 deletions.
22 changes: 13 additions & 9 deletions .github/workflows/nodejs-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,18 @@ jobs:

steps:

- uses: actions/checkout@v2
- uses: actions/checkout@v4

- uses: actions/setup-node@v1
- uses: actions/setup-node@v4
with:
node-version: 16.x
node-version: 20.x
packageManager: yarn-pnpm

- name: Install production dependencies, check node engine compatibility
run: yarn install --production=true
- name: Enable Corepack
run: corepack enable

- name: Install development dependencies
run: yarn install --production=false --ignore-engines
- name: Yarn install
run: yarn install

- name: Build & Code analysis
run: yarn run lint
Expand All @@ -47,18 +48,21 @@ jobs:

strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
node-version: [18.x, 20.x]

steps:

- name: 'Checkout the repository'
uses: actions/checkout@v4

- name: Test with Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}

- name: Enable Corepack
run: corepack enable

- name: Install dependencies
run: yarn install --ignore-engines

Expand Down
38 changes: 20 additions & 18 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
"compile": "npm run compile-src && npm run compile-test && npm run compile-doc",
"eslint": "eslint lib/**/*.ts --ignore-pattern lib/**/*.d.ts example/typescript/**/*.ts test/**/*.ts doc-gen/**/*.ts",
"lint-md": "remark -u preset-lint-markdown-style-guide .",
"lint": "npm run lint-md && npm run eslint",
"lint": "npm run eslint",
"test": "mocha",
"build": "npm run clean && npm run compile && npm run doc-gen",
"start": "npm-run-all compile lint cover-test",
Expand All @@ -92,39 +92,40 @@
"@tokenizer/token": "^0.3.0",
"content-type": "^1.0.5",
"debug": "^4.3.4",
"file-type": "^18.6.0",
"file-type": "^18.7.0",
"media-typer": "^1.1.0",
"strtok3": "^7.0.0",
"token-types": "^5.0.1"
},
"devDependencies": {
"@types/chai": "^4.3.9",
"@types/chai": "^4.3.16",
"@types/chai-as-promised": "^7.1.8",
"@types/debug": "^4.1.11",
"@types/debug": "^4.1.12",
"@types/file-type": "^10.9.1",
"@types/mocha": "^10.0.3",
"@types/node": "^20.8.10",
"@types/mocha": "^10.0.6",
"@types/node": "^20.12.12",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"c8": "^8.0.1",
"chai": "^4.3.10",
"chai-as-promised": "^7.1.1",
"chai": "^4.4.1",
"chai-as-promised": "^7.1.2",
"del-cli": "5.1.0",
"eslint": "^8.53.0",
"eslint-config-prettier": "^9.0.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-jsdoc": "^46.8.2",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsdoc": "^46.10.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-unicorn": "^49.0.0",
"mime": "^3.0.0",
"mocha": "^10.2.0",
"mocha": "^10.4.0",
"npm-run-all": "^4.1.5",
"prettier": "^3.0.3",
"remark-cli": "^12.0.0",
"prettier": "^3.2.5",
"remark": "^15.0.1",
"remark-cli": "^12.0.1",
"remark-preset-lint-markdown-style-guide": "^5.1.3",
"ts-node": "^10.9.1",
"typescript": "^5.2.2"
"ts-node": "^10.9.2",
"typescript": "^5.4.5"
},
"engines": {
"node": "^14.13.1 || >=16.0.0"
Expand All @@ -136,5 +137,6 @@
"license": "MIT",
"bugs": {
"url": "https://github.com/Borewit/music-metadata/issues"
}
},
"packageManager": "[email protected]"
}
72 changes: 35 additions & 37 deletions test/test-file-mp4.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import * as mm from '../lib/index.js';
import { Parsers } from './metadata-parsers.js';
import { samplePath } from './util.js';

const t = assert;

const mp4Samples = path.join(samplePath, 'mp4');

describe('Parse MPEG-4 files with iTunes metadata', () => {
Expand All @@ -28,45 +26,45 @@ describe('Parse MPEG-4 files with iTunes metadata', () => {
}

function checkCommon(common) {
t.strictEqual(common.title, 'Voodoo People (Pendulum Remix)', 'title');
t.strictEqual(common.artist, 'The Prodigy', 'artist');
t.strictEqual(common.albumartist, 'Pendulum', 'albumartist');
t.strictEqual(common.album, 'Voodoo People', 'album');
t.strictEqual(common.year, 2005, 'year');
t.strictEqual(common.track.no, 1, 'track no');
t.strictEqual(common.track.of, 12, 'track of');
t.strictEqual(common.disk.no, 1, 'disk no');
t.strictEqual(common.disk.of, 1, 'disk of');
t.strictEqual(common.genre[0], 'Electronic', 'genre');
t.strictEqual(common.picture[0].format, 'image/jpeg', 'picture 0 format');
t.strictEqual(common.picture[0].data.length, 196450, 'picture 0 length');
t.strictEqual(common.picture[1].format, 'image/jpeg', 'picture 1 format');
t.strictEqual(common.picture[1].data.length, 196450, 'picture 1 length');
assert.strictEqual(common.title, 'Voodoo People (Pendulum Remix)', 'title');
assert.strictEqual(common.artist, 'The Prodigy', 'artist');
assert.strictEqual(common.albumartist, 'Pendulum', 'albumartist');
assert.strictEqual(common.album, 'Voodoo People', 'album');
assert.strictEqual(common.year, 2005, 'year');
assert.strictEqual(common.track.no, 1, 'track no');
assert.strictEqual(common.track.of, 12, 'track of');
assert.strictEqual(common.disk.no, 1, 'disk no');
assert.strictEqual(common.disk.of, 1, 'disk of');
assert.strictEqual(common.genre[0], 'Electronic', 'genre');
assert.strictEqual(common.picture[0].format, 'image/jpeg', 'picture 0 format');
assert.strictEqual(common.picture[0].data.length, 196450, 'picture 0 length');
assert.strictEqual(common.picture[1].format, 'image/jpeg', 'picture 1 format');
assert.strictEqual(common.picture[1].data.length, 196450, 'picture 1 length');
}

function checkNativeTags(native) {

t.ok(native, 'Native m4a tags should be present');

t.deepEqual(native.trkn, ['1/12'], 'm4a.trkn');
t.deepEqual(native.disk, ['1/1'], 'm4a.disk');
t.deepEqual(native.tmpo, [0], 'm4a.tmpo');
t.deepEqual(native.gnre, ['Electronic'], 'm4a.gnre');
t.deepEqual(native.stik, [1], 'm4a.stik');
t.deepEqual(native['©alb'], ['Voodoo People'], 'm4a.©alb');
t.deepEqual(native.aART, ['Pendulum'], 'm4a.aART');
t.deepEqual(native['©ART'], ['The Prodigy'], 'm4a.©ART');
t.deepEqual(native['©cmt'], ['(Pendulum Remix)'], 'm4a.©cmt');
t.deepEqual(native['©wrt'], ['Liam Howlett'], 'm4a.©wrt');
t.deepEqual(native['----:com.apple.iTunes:iTunNORM'], [' 0000120A 00001299 00007365 0000712F 0002D88B 0002D88B 00007F2B 00007F2C 0003C770 0001F5C7'], 'm4a.----:com.apple.iTunes:iTunNORM');
t.deepEqual(native['©nam'], ['Voodoo People (Pendulum Remix)'], 'm4a.©nam');
t.deepEqual(native['©too'], ['Lavf52.36.0'], 'm4a.©too');
t.deepEqual(native['©day'], ['2005'], 'm4a.@day');
assert.ok(native, 'Native m4a tags should be present');

assert.deepEqual(native.trkn, ['1/12'], 'm4a.trkn');
assert.deepEqual(native.disk, ['1/1'], 'm4a.disk');
assert.deepEqual(native.tmpo, [0], 'm4a.tmpo');
assert.deepEqual(native.gnre, ['Electronic'], 'm4a.gnre');
assert.deepEqual(native.stik, [1], 'm4a.stik');
assert.deepEqual(native['©alb'], ['Voodoo People'], 'm4a.©alb');
assert.deepEqual(native.aART, ['Pendulum'], 'm4a.aART');
assert.deepEqual(native['©ART'], ['The Prodigy'], 'm4a.©ART');
assert.deepEqual(native['©cmt'], ['(Pendulum Remix)'], 'm4a.©cmt');
assert.deepEqual(native['©wrt'], ['Liam Howlett'], 'm4a.©wrt');
assert.deepEqual(native['----:com.apple.iTunes:iTunNORM'], [' 0000120A 00001299 00007365 0000712F 0002D88B 0002D88B 00007F2B 00007F2C 0003C770 0001F5C7'], 'm4a.----:com.apple.iTunes:iTunNORM');
assert.deepEqual(native['©nam'], ['Voodoo People (Pendulum Remix)'], 'm4a.©nam');
assert.deepEqual(native['©too'], ['Lavf52.36.0'], 'm4a.©too');
assert.deepEqual(native['©day'], ['2005'], 'm4a.@day');

// Check album art
t.isDefined(native.covr);
t.strictEqual(native.covr[0].format, 'image/jpeg', 'm4a.covr.format');
t.strictEqual(native.covr[0].data.length, 196450, 'm4a.covr.data.length');
assert.isDefined(native.covr);
assert.strictEqual(native.covr[0].format, 'image/jpeg', 'm4a.covr.format');
assert.strictEqual(native.covr[0].data.length, 196450, 'm4a.covr.data.length');
}

Parsers.forEach(parser => {
Expand All @@ -76,7 +74,7 @@ describe('Parse MPEG-4 files with iTunes metadata', () => {

const metadata = await parser.initParser(filePath, 'audio/mp4');
const native = metadata.native.iTunes;
t.ok(native, 'Native m4a tags should be present');
assert.ok(native, 'Native m4a tags should be present');

checkFormat(metadata.format);
checkCommon(metadata.common);
Expand Down Expand Up @@ -340,7 +338,7 @@ describe('Parse MPEG-4 files with iTunes metadata', () => {
assert.deepEqual(metadata.format.container, 'mp42/isom', 'format.container');
assert.deepEqual(metadata.format.codec, 'MPEG-4/AAC+MP4S', 'format.codec');

assert.deepEqual(metadata.common.album, 'We Don`t Need to Whisper');
assert.deepEqual(metadata.common.album, 'We Don`assert Need to Whisper');
assert.deepEqual(metadata.common.albumartist, 'Angels and Airwaves');
assert.deepEqual(metadata.common.artist, 'Angels and Airwaves');
assert.deepEqual(metadata.common.artists, ['Angels and Airwaves']);
Expand Down
60 changes: 29 additions & 31 deletions test/test-id3v2.4.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import path from 'node:path';
import * as mm from '../lib/index.js';
import { samplePath } from './util.js';

const t = assert;

describe("Decode MP3/ID3v2.4", () => {

it("should decode id3v2.4", () => {
Expand All @@ -14,29 +12,29 @@ describe("Decode MP3/ID3v2.4", () => {
const filePath = path.join(samplePath, filename);

return mm.parseFile(filePath, {duration: true}).then(metadata => {
t.deepEqual(metadata.format.tagTypes, ["ID3v2.4", "ID3v1"], 'format.tagTypes');
t.strictEqual(metadata.format.duration, 0.7836734693877551, 'format.format.duration');
t.strictEqual(metadata.format.sampleRate, 44100, 'format.sampleRate = 44.1 kHz');
t.strictEqual(metadata.format.bitrate, 128000, 'format.bitrate = 128 kbit/sec');
t.strictEqual(metadata.format.codecProfile, 'CBR', 'format.codecProfile = CBR');
t.strictEqual(metadata.format.container, 'MPEG', 'format.container');
t.strictEqual(metadata.format.codec, 'MPEG 1 Layer 3', 'format.codec');
t.strictEqual(metadata.format.tool, 'LAME 3.98r', 'format.tool');
t.strictEqual(metadata.format.numberOfChannels, 2, 'format.numberOfChannels = 2');

t.strictEqual(metadata.common.title, 'Home', 'title');
t.strictEqual(metadata.common.artist, 'Explo', 'common.artist');
t.deepEqual(metadata.common.artists, ['Explo', 'ions', 'nodejsftws'], 'common.artists');
t.strictEqual(metadata.common.albumartist, 'Soundtrack', 'albumartist');
t.strictEqual(metadata.common.album, 'Friday Night Lights [Original Movie Soundtrack]', 'album');
t.strictEqual(metadata.common.year, 2004, 'year');
t.deepEqual(metadata.common.track, {no: 5, of: null}, 'common.track');
t.deepEqual(metadata.common.disk, {no: 1, of: 1}, 'common.disk');
t.deepEqual(metadata.common.genre, ['Soundtrack', 'OST'], 'common.genres');
t.strictEqual(metadata.common.picture[0].format, 'image/jpeg', 'common.picture 0 format');
t.strictEqual(metadata.common.picture[0].data.length, 80938, 'common.picture 0 length');
t.strictEqual(metadata.common.picture[1].format, 'image/jpeg', 'common.picture 1 format');
t.strictEqual(metadata.common.picture[1].data.length, 80938, 'common.picture 1 length');
assert.deepEqual(metadata.format.tagTypes, ["ID3v2.4", "ID3v1"], 'format.tagTypes');
assert.strictEqual(metadata.format.duration, 0.7836734693877551, 'format.format.duration');
assert.strictEqual(metadata.format.sampleRate, 44100, 'format.sampleRate = 44.1 kHz');
assert.strictEqual(metadata.format.bitrate, 128000, 'format.bitrate = 128 kbit/sec');
assert.strictEqual(metadata.format.codecProfile, 'CBR', 'format.codecProfile = CBR');
assert.strictEqual(metadata.format.container, 'MPEG', 'format.container');
assert.strictEqual(metadata.format.codec, 'MPEG 1 Layer 3', 'format.codec');
assert.strictEqual(metadata.format.tool, 'LAME 3.98r', 'format.tool');
assert.strictEqual(metadata.format.numberOfChannels, 2, 'format.numberOfChannels = 2');

assert.strictEqual(metadata.common.title, 'Home', 'title');
assert.strictEqual(metadata.common.artist, 'Explo', 'common.artist');
assert.deepEqual(metadata.common.artists, ['Explo', 'ions', 'nodejsftws'], 'common.artists');
assert.strictEqual(metadata.common.albumartist, 'Soundtrack', 'albumartist');
assert.strictEqual(metadata.common.album, 'Friday Night Lights [Original Movie Soundtrack]', 'album');
assert.strictEqual(metadata.common.year, 2004, 'year');
assert.deepEqual(metadata.common.track, {no: 5, of: null}, 'common.track');
assert.deepEqual(metadata.common.disk, {no: 1, of: 1}, 'common.disk');
assert.deepEqual(metadata.common.genre, ['Soundtrack', 'OST'], 'common.genres');
assert.strictEqual(metadata.common.picture[0].format, 'image/jpeg', 'common.picture 0 format');
assert.strictEqual(metadata.common.picture[0].data.length, 80938, 'common.picture 0 length');
assert.strictEqual(metadata.common.picture[1].format, 'image/jpeg', 'common.picture 1 format');
assert.strictEqual(metadata.common.picture[1].data.length, 80938, 'common.picture 1 length');
});

});
Expand All @@ -46,7 +44,7 @@ describe("Decode MP3/ID3v2.4", () => {

const filePath = path.join(samplePath, 'mp3', 'issue-502.mp3');
const {common} = await mm.parseFile(filePath);
t.deepEqual(common.comment, ['CLEAN'], 'common.comment');
assert.deepEqual(common.comment, ['CLEAN'], 'common.comment');
});

it("should respect skipCovers-flag", () => {
Expand All @@ -55,7 +53,7 @@ describe("Decode MP3/ID3v2.4", () => {
const filePath = path.join(samplePath, filename);

return mm.parseFile(filePath, {duration: true, skipCovers: true}).then(result => {
t.isUndefined(result.common.picture, 'common.picture should be undefined');
assert.isUndefined(result.common.picture, 'common.picture should be undefined');
});

});
Expand All @@ -67,10 +65,10 @@ describe("Decode MP3/ID3v2.4", () => {

const {common, native} = await mm.parseFile(filePath);
const id3v24 = native['ID3v2.4'];
t.isDefined(id3v24, 'ID3v2.4 presence');
t.strictEqual(id3v24.filter(tag => { return tag.id === 'TSRC'; }).length, 0, 'ID3v2.4 tag TSRC not defined');
t.strictEqual(id3v24.filter(tag => { return tag.id === 'TXXX:ISRC'; }).length, 1, 'ID3v2.4 tag TXXX:ISRC to be defined');
t.includeDeepMembers(common.isrc, ['DEAE61300058'], 'ISRC');
assert.isDefined(id3v24, 'ID3v2.4 presence');
assert.strictEqual(id3v24.filter(tag => { return tag.id === 'TSRC'; }).length, 0, 'ID3v2.4 tag TSRC not defined');
assert.strictEqual(id3v24.filter(tag => { return tag.id === 'TXXX:ISRC'; }).length, 1, 'ID3v2.4 tag TXXX:ISRC to be defined');
assert.includeDeepMembers(common.isrc, ['DEAE61300058'], 'ISRC');
});

});
10 changes: 4 additions & 6 deletions test/test-mime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import fs from 'node:fs';
import * as mm from '../lib/index.js';
import { SourceStream, samplePath } from './util.js';

const t = assert;

describe('MIME & extension mapping', () => {

const buf = Buffer.alloc(30).fill(0);
Expand All @@ -21,7 +19,7 @@ describe('MIME & extension mapping', () => {
case '.flac':
case '.wav':
case '.ogg':
t.ok(err.message.startsWith('FourCC'), `Only FourCC error allowed, got: ${err.message}`);
assert.ok(err.message.startsWith('FourCC'), `Only FourCC error allowed, got: ${err.message}`);
break;

default:
Expand All @@ -32,9 +30,9 @@ describe('MIME & extension mapping', () => {
it('should reject an unknown file', () => {

return mm.parseFile(path.join(samplePath, 'flac.flac.jpg'))
.then(() => t.fail('Should reject extension'))
.then(() => assert.fail('Should reject extension'))
.catch(err => {
t.strictEqual(err.message, 'Guessed MIME-type not supported: image/jpeg');
assert.strictEqual(err.message, 'Guessed MIME-type not supported: image/jpeg');
});

});
Expand All @@ -45,7 +43,7 @@ describe('MIME & extension mapping', () => {
const streamReader = new SourceStream(buf);
// Convert extension to MIME-Type
const mimeType = mime.getType(extension);
t.isNotNull(mimeType, 'extension: ' + extension);
assert.isNotNull(mimeType, 'extension: ' + extension);

return mm.parseStream(streamReader, mimeType)
.catch(err => {
Expand Down
Loading

0 comments on commit 291f788

Please sign in to comment.