@moscowcity/ym-api
Version:
Forked version of https://github.com/kontsevoye/ym-api with removed console.error
33 lines (32 loc) • 1.5 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|com|kz|by)\/album\/\d+\/track\/(?<id>\d+)/, "track", ["id"]);
return Number(extracted.id);
}
extractAlbumId(url) {
const extracted = this.extract(url, /(https?:\/\/)?music\.yandex\.(ru|com|kz|by)\/album\/(?<id>\d+)/, "album", ["id"]);
return Number(extracted.id);
}
extractArtistId(url) {
const extracted = this.extract(url, /(https?:\/\/)?music\.yandex\.(ru|com|kz|by)\/artist\/(?<id>\d+)/, "artist", ["id"]);
return Number(extracted.id);
}
extractPlaylistId(url) {
const extracted = this.extract(url, /(https?:\/\/)?music\.yandex\.(ru|com|kz|by)\/users\/(?<user>[\w\d\-_\.\@]+)\/playlists\/(?<id>\d+)/, "playlist", ["id", "user"]);
return { id: Number(extracted.id), user: extracted.user };
}
}
exports.default = UrlExtractor;