From 75d85764c3417229a96d1bf7b1c21a8f9c2c5e5c Mon Sep 17 00:00:00 2001 From: Zechariah Date: Sat, 5 Feb 2022 06:23:05 +0800 Subject: [PATCH] Moved traverse.ts --- src/YTMusic.ts | 2 +- src/parsers/AlbumParser.ts | 2 +- src/parsers/ArtistParser.ts | 2 +- src/parsers/PlaylistParser.ts | 2 +- src/parsers/SearchParser.ts | 2 +- src/parsers/SongParser.ts | 2 +- src/parsers/VideoParser.ts | 2 +- src/traverse.ts | 30 ++++++++++++++++++++++++++++++ 8 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 src/traverse.ts diff --git a/src/YTMusic.ts b/src/YTMusic.ts index e8791c4..449dfa1 100644 --- a/src/YTMusic.ts +++ b/src/YTMusic.ts @@ -4,7 +4,7 @@ import axios, { AxiosInstance } from "axios" import PlaylistParser from "./parsers/PlaylistParser" import SearchParser from "./parsers/SearchParser" import SongParser from "./parsers/SongParser" -import traverse from "./utils/traverse" +import traverse from "./traverse" import VideoParser from "./parsers/VideoParser" import { AlbumDetailed, diff --git a/src/parsers/AlbumParser.ts b/src/parsers/AlbumParser.ts index ffde74d..972822d 100644 --- a/src/parsers/AlbumParser.ts +++ b/src/parsers/AlbumParser.ts @@ -1,5 +1,5 @@ import SongParser from "./SongParser" -import traverse from "../utils/traverse" +import traverse from "../traverse" import { AlbumDetailed, AlbumFull, ArtistBasic } from ".." export default class AlbumParser { diff --git a/src/parsers/ArtistParser.ts b/src/parsers/ArtistParser.ts index b2482c0..be9761e 100644 --- a/src/parsers/ArtistParser.ts +++ b/src/parsers/ArtistParser.ts @@ -1,7 +1,7 @@ import AlbumParser from "./AlbumParser" import Parser from "./Parser" import SongParser from "./SongParser" -import traverse from "../utils/traverse" +import traverse from "../traverse" import { ArtistDetailed, ArtistFull } from ".." export default class ArtistParser { diff --git a/src/parsers/PlaylistParser.ts b/src/parsers/PlaylistParser.ts index ebd1cfd..982f10f 100644 --- a/src/parsers/PlaylistParser.ts +++ b/src/parsers/PlaylistParser.ts @@ -1,4 +1,4 @@ -import traverse from "../utils/traverse" +import traverse from "../traverse" import { PlaylistFull } from ".." export default class PlaylistParser { diff --git a/src/parsers/SearchParser.ts b/src/parsers/SearchParser.ts index 8d04320..895d6f4 100644 --- a/src/parsers/SearchParser.ts +++ b/src/parsers/SearchParser.ts @@ -2,7 +2,7 @@ import AlbumParser from "./AlbumParser" import ArtistParser from "./ArtistParser" import PlaylistParser from "./PlaylistParser" import SongParser from "./SongParser" -import traverse from "../utils/traverse" +import traverse from "../traverse" import VideoParser from "./VideoParser" import { SearchResult } from ".." diff --git a/src/parsers/SongParser.ts b/src/parsers/SongParser.ts index 485a2ca..4da8f97 100644 --- a/src/parsers/SongParser.ts +++ b/src/parsers/SongParser.ts @@ -1,5 +1,5 @@ import Parser from "./Parser" -import traverse from "../utils/traverse" +import traverse from "../traverse" import { AlbumBasic, ArtistBasic, SongDetailed, SongFull, ThumbnailFull } from ".." export default class SongParser { diff --git a/src/parsers/VideoParser.ts b/src/parsers/VideoParser.ts index 699e0b2..05bc947 100644 --- a/src/parsers/VideoParser.ts +++ b/src/parsers/VideoParser.ts @@ -1,5 +1,5 @@ import Parser from "./Parser" -import traverse from "../utils/traverse" +import traverse from "../traverse" import { VideoDetailed, VideoFull } from ".." export default class VideoParser { diff --git a/src/traverse.ts b/src/traverse.ts new file mode 100644 index 0000000..1022423 --- /dev/null +++ b/src/traverse.ts @@ -0,0 +1,30 @@ +const traverse = (data: any, ...keys: string[]) => { + const again = (data: any, key: string): any => { + let res = [] + + if (data instanceof Object && key in data) { + res.push(data[key]) + } + + if (data instanceof Array) { + res.push(...data.map(v => again(v, key)).flat()) + } else if (data instanceof Object) { + res.push( + ...Object.keys(data) + .map(k => again(data[k], key)) + .flat() + ) + } + + return res.length === 1 ? res[0] : res + } + + let value = data + for (const key of keys) { + value = again(value, key) + } + + return value +} + +export default traverse