UNPKG

ytmusic-api-proxy

Version:
65 lines (64 loc) 2.74 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../constants"); const types_1 = require("../types"); const checkType_1 = __importDefault(require("../utils/checkType")); const traverse_1 = require("../utils/traverse"); const AlbumParser_1 = __importDefault(require("./AlbumParser")); const PlaylistParser_1 = __importDefault(require("./PlaylistParser")); const SongParser_1 = __importDefault(require("./SongParser")); class Parser { static parseDuration(time) { if (!time) return null; const [seconds, minutes, hours] = time .split(":") .reverse() .map(n => +n); return (seconds || 0) + (minutes || 0) * 60 + (hours || 0) * 60 * 60; } static parseNumber(string) { if (string.at(-1).match(/^[A-Z]+$/)) { const number = +string.slice(0, -1); const multiplier = string.at(-1); const multipliers = { K: number * 1000, M: number * 1000 * 1000, B: number * 1000 * 1000 * 1000, T: number * 1000 * 1000 * 1000 * 1000, }; return multipliers[multiplier] || NaN; } else { return +string; } } static parseHomeSection(data) { const pageType = (0, traverse_1.traverseString)(data, "contents", "title", "browseEndpoint", "pageType"); const playlistId = (0, traverse_1.traverseString)(data, "navigationEndpoint", "watchPlaylistEndpoint", "playlistId"); return (0, checkType_1.default)({ title: (0, traverse_1.traverseString)(data, "header", "title", "text"), contents: (0, traverse_1.traverseList)(data, "contents").map(item => { switch (pageType) { case constants_1.PageType.MUSIC_PAGE_TYPE_ALBUM: return AlbumParser_1.default.parseHomeSection(item); case constants_1.PageType.MUSIC_PAGE_TYPE_PLAYLIST: return PlaylistParser_1.default.parseHomeSection(item); case "": if (playlistId) { return PlaylistParser_1.default.parseHomeSection(item); } else { return SongParser_1.default.parseHomeSection(item); } default: return null; } }), }, types_1.HomeSection); } } exports.default = Parser;