ym-api
Version:
A Node.js wrapper for the Yandex.Music API (Unofficial) http://music.yandex.ru
33 lines (32 loc) • 1.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class UrlExtractor {
extract(url, regex, entityName, groups) {
return groups.reduce((carry, item) => {
var _a, _b;
const match = (_b = (_a = url.match(regex)) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b[item];
if (!match) {
throw new Error(`non ${entityName} url received`);
}
carry[item] = match;
return carry;
}, {});
}
extractTrackId(url) {
const extracted = this.extract(url, /(https?:\/\/)?music\.yandex\.ru\/album\/\d+\/track\/(?<id>\d+)/, "track", ["id"]);
return Number(extracted.id);
}
extractAlbumId(url) {
const extracted = this.extract(url, /(https?:\/\/)?music\.yandex\.ru\/album\/(?<id>\d+)/, "album", ["id"]);
return Number(extracted.id);
}
extractArtistId(url) {
const extracted = this.extract(url, /(https?:\/\/)?music\.yandex\.ru\/artist\/(?<id>\d+)/, "artist", ["id"]);
return Number(extracted.id);
}
extractPlaylistId(url) {
const extracted = this.extract(url, /(https?:\/\/)?music\.yandex\.ru\/users\/(?<user>[\w\d\-_\.]+)\/playlists\/(?<id>\d+)/, "playlist", ["id", "user"]);
return { id: Number(extracted.id), user: extracted.user };
}
}
exports.default = UrlExtractor;