New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

musicbrainz-augmentation

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

musicbrainz-augmentation - npm Package Compare versions

Comparing version 0.3.0 to 0.4.0

1

lib/AugmentFromSpotify.d.ts

@@ -14,2 +14,3 @@ import * as spotify from './spotify/spotify.types';

static isSameRelease(mbRelease: mb.IRelease, spotifyAlbum: spotify.IAlbum): boolean;
static hasSimilarTrackName(spotifyName: string, mbName: string): boolean;
static normalizeTrackName(trackName: string): string;

@@ -16,0 +17,0 @@ static countMbReleaseTracks(mbRelease: mb.IRelease): number;

60

lib/AugmentFromSpotify.js

@@ -48,19 +48,16 @@ "use strict";

}
let score = StringUtils_1.similarity(AugmentFromSpotify.normalizeTrackName(spotifyTrack.name), AugmentFromSpotify.normalizeTrackName(track.title));
if (score < releaseDeltaSettings.minTrackSimilarity) {
if (score < 0.15) {
debug(`Track name mismatch: score=${score}: Spotify: ${spotifyTrack.name}, MusicBrainz: ${track.title}`);
return false;
if (!this.hasSimilarTrackName(spotifyTrack.name, track.title)) {
if (!this.hasSimilarTrackName(spotifyTrack.name, track.recording.title)) {
let matchingAlias = false;
for (const alias of track.recording.aliases) {
matchingAlias = this.hasSimilarTrackName(spotifyTrack.name, track.recording.title);
if (matchingAlias)
break;
}
if (!matchingAlias)
return false;
}
const spName = StringUtils_1.removeBrackets(spotifyTrack.name);
const mbName = StringUtils_1.removeBrackets(track.title);
score = StringUtils_1.similarity(spName, mbName);
if (score < releaseDeltaSettings.minTrackSimilarity) {
debug(`Track name mismatch: score=${score}: Spotify: ${spotifyTrack.name}, MusicBrainz: ${track.title}`);
return false;
}
}
const deltaTrackLength = spotifyTrack.duration_ms - track.length;
if (deltaTrackLength > releaseDeltaSettings.maxDeltaTrackDuration) {
debug(`Rec: score=${score}`);
debug(`Track delta to high ${deltaTrackLength}>${releaseDeltaSettings.maxDeltaTrackDuration} of ${medium.position}.${track.position} - ${track.title}`);

@@ -70,3 +67,2 @@ if (track.recording.length) {

if (deltaRecordingLength > releaseDeltaSettings.maxDeltaTrackDuration) {
debug(`Rec: score=${score}`);
debug(`Recording delta to high ${deltaRecordingLength}>${releaseDeltaSettings.maxDeltaTrackDuration} of ${medium.position}.${track.position} - ${track.title}`);

@@ -82,2 +78,36 @@ return false;

}
static hasSimilarTrackName(spotifyName, mbName) {
const namePairs = [];
let namePair = {
spotify: AugmentFromSpotify.normalizeTrackName(spotifyName),
musicBrainz: AugmentFromSpotify.normalizeTrackName(mbName)
};
namePairs.push(namePair);
// Create a pair with stripped brackets
namePairs.push({
spotify: StringUtils_1.removeBrackets(namePair.spotify),
musicBrainz: StringUtils_1.removeBrackets(namePair.musicBrainz)
});
const minLen = Math.min(namePair.spotify.length, namePair.musicBrainz.length);
if (minLen >= 2 && (minLen < namePair.spotify.length || minLen < namePair.musicBrainz.length)) {
// Create a pair with stripped prefix
namePairs.push({
spotify: StringUtils_1.removeBrackets(namePair.spotify.substring(0, minLen)),
musicBrainz: StringUtils_1.removeBrackets(namePair.musicBrainz.substring(0, minLen))
});
// Create a pair with stripped suffix
namePairs.push({
spotify: StringUtils_1.removeBrackets(namePair.spotify.substring(namePair.spotify.length - minLen)),
musicBrainz: StringUtils_1.removeBrackets(namePair.musicBrainz.substring(namePair.musicBrainz.length - minLen))
});
}
for (namePair of namePairs) {
const score = StringUtils_1.similarity(AugmentFromSpotify.normalizeTrackName(namePair.spotify), AugmentFromSpotify.normalizeTrackName(namePair.musicBrainz));
debug(`Compare '${namePair.spotify}' with '${namePair.musicBrainz}' => score=${score} => ${score >= releaseDeltaSettings.minTrackSimilarity ? 'match' : 'no match'}`);
if (score >= releaseDeltaSettings.minTrackSimilarity) {
return true;
}
}
return false;
}
static normalizeTrackName(trackName) {

@@ -152,3 +182,3 @@ return trackName.replace('- Live', '');

titles.push(release.title);
titles.push(release.title.replace(/ *\([^)]*\) */g, "").trim());
titles.push(release.title.replace(/ *\([^)]*\) */g, '').trim());
titles = titles.filter(unique).filter(s => s.length > 0);

@@ -155,0 +185,0 @@ for (const title of titles) {

{
"name": "musicbrainz-augmentation",
"version": "0.3.0",
"version": "0.4.0",
"description": "MusicBrainz metadata augmentation",

@@ -21,3 +21,3 @@ "main": "lib/AugmentFromSpotify.js",

"fix-lint": "tslint --fix 'src/**/*.ts' --exclude 'src/**/*.d.ts' 'test/**/*.ts' --exclude 'test/**/*.d.ts'",
"test": "mocha --require ts-node/register --full-trace test",
"test": "mocha --require ts-node/register --require source-map-support/register --full-trace test/*.ts",
"build": "npm run clean && npm run compile",

@@ -44,3 +44,3 @@ "start": "npm-run-all compile lint cover-test",

"debug": "^4.1.1",
"musicbrainz-api": "^0.3.10",
"musicbrainz-api": "^0.4.0",
"spotify-web-api-node": "^4.0.0"

@@ -47,0 +47,0 @@ },

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc