diff --git a/.gitignore b/.gitignore index 38e1684..08bc76c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ **/dist **/config.json **/*.test.ts -**/.vscode \ No newline at end of file +**/.vscode +**/.temp +**/.cache \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..c483022 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +shamefully-hoist=true \ No newline at end of file diff --git a/README.md b/README.md index 3f52801..7b5aab3 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ YouTube Music API (Unofficial) is a YouTube Music data scraper. It comes with TypeScript support API for return types. The NPM Package can be found [here](https://npmjs.com/package/ytmusic-api) ## Motivation + I used to use [youtube-music-api](https://npmjs.com/package/youtube-music-api) as my youtube music api data scraper. I liked looking into the source code of how it works but it never made sense to me. I also didn't like that there were no TypeScript annotations for the return types of methods. Because of this, I decided to build my own version of a youtube music api with TypeScript annotations, testing and written in a way I can understand. @@ -20,400 +21,8 @@ Because of this, I decided to build my own version of a youtube music api with T - Albums - Playlists -## Installation - -``` -$ npm i ytmusic-api -``` - -## Usage - -Import YTMusic from the npm package - -```ts -// TypeScript -import YTMusic from "ytmusic-api" - -// JavaScript -const YTMusic = require("ytmusic-api") -``` - -Create an instance of the class `YTMusic`. -Then, call the `initialize()` to initialize the API before using the API anywhere - -```ts -const ytmusic = new YTMusic() -ytmusic.initialize().then(() => { - // Use API here -}) -``` - -### Methods to fetch data - -#### `getSearchSuggestions` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :---- | :-------- | :------------------------------------ | -| query | `string` | Search query you want suggestions for | - -The function returns a `Promise` which are the suggestion results - -```ts -ytmusic.getSearchSuggestions("Lilac").then(res => { - console.log(res) -}) -``` - -#### `search` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :------- | :-------------------------------------------------------------------- | :---------------------------------------------------------------------------------- | -| query | `string` | Search query | -| category | `"SONG" \| "VIDEO" \| "ARTIST" \| "ALBUM" \| "PLAYLIST" \| undefined` | Type of results to search for. If not specified, returns all types of search result | - -The function **when nothing is passed as the category** returns a `Promise<`[SearchResult](#SearchResult)`[]>` which are the search results of all categories - -```ts -ytmusic.search("Lilac").then(results => { - console.log(results) -}) -``` - -##### `search (category = "SONG")` - -When you pass in `"SONG"` as the category, - -The function returns a `Promise<`[SongDetailed](#SongDetailed)`[]>` which are the song results - -```ts -ytmusic.search("Lilac", "SONG").then(songs => { - console.log(songs) -}) -``` - -##### `search (category = "VIDEO")` - -When you pass in `"VIDEO"` as the category, - -The function returns a `Promise<`[VideoDetailed](#VideoDetailed)`[]>` which are the video results - -```ts -ytmusic.search("Lilac", "VIDEO").then(videos => { - console.log(videos) -}) -``` - -##### `search (category = "ARTIST")` - -When you pass in `"ARTIST"` as the category - -The function returns a `Promise<`[ArtistDetailed](#ArtistDetailed)`[]>` which are the artist results - -```ts -ytmusic.search("Lilac", "ARTIST").then(artists => { - console.log(artists) -}) -``` - -##### `search (category = "ALBUM")` - -When you pass in `"ALBUM"` as the category, - -The function returns a `Promise<`[AlbumDetailed](#AlbumDetailed)`[]>` which are the album results - -```ts -ytmusic.search("Lilac", "ALBUM").then(albums => { - console.log(albums) -}) -``` - -##### `search (category = "PLAYLIST")` - -When you pass in `"PLAYLIST"` as the category, - -The function returns a `Promise<`[PlaylistFull](#PlaylistFull)`[]>` which are the playlist results - -```ts -ytmusic.search("Lilac", "PLAYLIST").then(playlists => { - console.log(playlists) -}) -``` - -#### `getSong` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :------ | :-------- | :---------- | -| videoId | `string` | Video ID | - -The function returns a `Promise<`[SongFull](#SongFull)`>` which is the information about the song - -```ts -ytmusic.getSong("v7bnOxV4jAc").then(song => { - console.log(song) -}) -``` - -#### `getVideo` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :------ | :-------- | :---------- | -| videoId | `string` | Video ID | - -The function returns a `Promise<`[VideoFull](#VideoFull)`>` which is the information about the video - -```ts -ytmusic.getVideo("v7bnOxV4jAc").then(video => { - console.log(video) -}) -``` - -#### `getArtist` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :------- | :-------- | :---------- | -| artistId | `string` | Artist ID | - -The function returns a `Promise<`[ArtistFull](#ArtistFull)`>` which is the information about the artist - -```ts -ytmusic.getArtist("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artist => { - console.log(artist) -}) -``` - -#### `getArtistSongs` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :------- | :-------- | :---------- | -| artistId | `string` | Artist ID | - -The function returns a `Promise<`[SongDetailed](#SongDetailed)`[]>` which is the information about all the artist's songs - -```ts -ytmusic.getArtistSongs("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artistSongs => { - console.log(artistSongs) -}) -``` - -#### `getArtistAlbums` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :------- | :-------- | :---------- | -| artistId | `string` | Artist ID | - -The function returns a `Promise<`[AlbumDetailed](#AlbumDetailed)`[]>` which is the information about all the artist's albums - -```ts -ytmusic.getArtistAlbums("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artistAlbums => { - console.log(artistAlbums) -}) -``` - -#### `getAlbum` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :------ | :-------- | :---------- | -| albumId | `string` | Album ID | - -The function returns a `Promise<`[AlbumFull](#AlbumFull)`>` which is the information about the album - -```ts -ytmusic.getAlbum("MPREb_iG5q5DIdhdA").then(album => { - console.log(album) -}) -``` - -#### `getPlaylist` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :--------- | :-------- | :---------- | -| playlistId | `string` | Playlist ID | - -The function returns a `Promise<`[PlaylistFull](#PlaylistFull)`>` which is the information about the playlist (without the videos) - -```ts -ytmusic.getPlaylist("OLAK5uy_nRb467jR73IXKybwzw22_rTYIJ808x4Yc").then(playlist => { - console.log(playlist) -}) -``` - -#### `getPlaylistVideos` - -This function takes in the following parameters - -| Name | Data Type | Description | -| :--------- | :-------- | :---------- | -| playlistId | `string` | Playlist ID | - -The function returns a `Promise[]>` which is the information about the videos without the view count - -```ts -ytmusic.getPlaylistVideos("OLAK5uy_nRb467jR73IXKybwzw22_rTYIJ808x4Yc").then(playlistVideos => { - console.log(playlistVideos) -}) -``` - -### Data Types - -#### `ThumbnailFull` - -| Name | Data Type | Description | -| :----- | :-------- | :------------------ | -| url | `string` | Link | -| width | `number` | Width of the image | -| height | `number` | Height of the image | - -#### `SongDetailed` - -| Name | Data Type | Description | -| :--------- | :---------------------------------- | :------------------ | -| type | `"SONG"` | Type of data | -| videoId | `string` | YouTube Video ID | -| name | `string` | Name | -| artists | [ArtistBasic](#ArtistBasic)`[]` | Artists | -| album | [AlbumBasic](#AlbumBasic) | Album | -| duration | `number` | Duration in seconds | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | - -#### `SongFull` - -| Name | Data Type | Description | -| :-------------- | :---------------------------------- | :--------------------- | -| type | `"SONG"` | Type of data | -| videoId | `string` | YouTube Video ID | -| name | `string` | Name | -| artists | [ArtistBasic](#ArtistBasic)`[]` | Artists | -| duration | `number` | Duration in seconds | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | -| description | `string` | Description | -| formats | `any[]` | Video Formats | -| adaptiveFormats | `any[]` | Adaptive Video Formats | - -#### `VideoDetailed` - -| Name | Data Type | Description | -| :--------- | :---------------------------------- | :------------------------------ | -| type | `"VIDEO"` | Type of data | -| videoId | `string` | YouTube Video ID | -| name | `string` | Name | -| artists | [ArtistBasic](#ArtistBasic)`[]` | Channels that created the video | -| views | `number` | View count | -| duration | `number` | Duration in seconds | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | - -#### `VideoFull` - -| Name | Data Type | Description | -| :---------- | :---------------------------------- | :------------------------------------- | -| type | `"VIDEO"` | Type of data | -| videoId | `string` | YouTube Video ID | -| name | `string` | Name | -| artists | [ArtistBasic](#ArtistBasic)`[]` | Channels that created the video | -| views | `number` | View count | -| duration | `number` | Duration in seconds | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | -| description | `string` | Description | -| unlisted | `boolean` | If the video is unlisted on YouTube | -| familySafe | `boolean` | If the video is family safe on YouTube | -| paid | `boolean` | If the video is paid on YouTube | -| tags | `string[]` | Tags | - -#### `ArtistBasic` - -| Name | Data Type | Description | -| :------- | :--------------- | :---------- | -| artistId | `string` | Artist ID | -| name | `string` | Name | - -#### `ArtistDetailed` - -| Name | Data Type | Description | -| :--------- | :---------------------------------- | :----------- | -| type | `"ARTIST"` | Type of data | -| artistId | `string` | Artist ID | -| name | `string` | Name | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | - -#### `ArtistFull` - -| Name | Data Type | Description | -| :---------- | :---------------------------------------------------- | :----------------------------------- | -| type | `"ARTIST"` | Type of data | -| artistId | `string` | Artist ID | -| name | `string` | Name | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | -| description | `string` | Description | -| subscribers | `number` | Number of subscribers the Artist has | -| topSongs | `Omit<`[SongDetailed](#SongDetailed)`, "duration">[]` | Top Songs from Artist | -| topAlbums | [AlbumDetailed](#AlbumDetailed)`[]` | Top Albums from Artist | - -#### `AlbumBasic` - -| Name | Data Type | Description | -| :------ | :-------- | :---------- | -| albumId | `string` | Album ID | -| name | `string` | Name | - -#### `AlbumDetailed` - -| Name | Data Type | Description | -| :--------- | :---------------------------------- | :-------------------- | -| type | `"ALBUM"` | Type of data | -| albumId | `string` | Album ID | -| playlistId | `string` | Playlist ID for Album | -| name | `string` | Name | -| artists | [ArtistBasic](#ArtistBasic)`[]` | Creators of the Album | -| year | `number` | Publication Year | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | - -#### `AlbumFull` - -| Name | Data Type | Description | -| :---------- | :---------------------------------- | :-------------------- | -| type | `"ALBUM"` | Type of data | -| albumId | `string` | Album ID | -| playlistId | `string` | Playlist ID for Album | -| name | `string` | Name | -| artists | [ArtistBasic](#ArtistBasic)`[]` | Creators of the Album | -| year | `number` | Publication Year | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | -| description | `string` | Description | -| songs | [SongDetailed](#SongDetailed)`[]` | Songs in the Album | - -#### `PlaylistFull` - -| Name | Data Type | Description | -| :--------- | :---------------------------------- | :------------------------------- | -| type | `"PLAYLIST"` | Type of data | -| playlistId | `string` | Playlist ID | -| name | `string` | Name | -| artist | [ArtistBasic](#ArtistBasic) | Creator of the Playlist | -| videoCount | `number` | Number of videos in the Playlist | -| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | - -#### `SearchResult` - -[SongDetailed](#SongDetailed) or [VideoDetailed](#VideoDetailed) or [ArtistDetailed](#ArtistDetailed) or [AlbumDetailed](#AlbumDetailed) or [PlaylistFull](#PlaylistFull) - ## Credits + A lot of the credit should go to [youtube-music-api](https://npmjs.com/package/youtube-music-api). I build this package as a refactored and tested version of youtube-music-api with TypeScript annotations ## Testing diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts new file mode 100644 index 0000000..ee47eb8 --- /dev/null +++ b/docs/.vuepress/config.ts @@ -0,0 +1,251 @@ +import { defineUserConfig } from "vuepress" +import type { DefaultThemeOptions } from "vuepress" + +export default defineUserConfig({ + title: "YTMusic API", + description: "Unofficial YouTube Music API for TypeScript", + plugins: [ + [ + "@vuepress/plugin-search", + { + locales: { + "/": { + placeholder: "Search" + } + } + } + ] + ], + themeConfig: { + repo: "zS1L3NT/ts-npm-ytmusic-api", + editLink: false, + navbar: [ + { + text: "Home", + link: "/" + }, + { + text: "Guides", + link: "/guides/getting-started.html" + }, + { + text: "References", + link: "/references/ytmusic.html" + } + ], + sidebar: [ + { + text: "Guides", + collapsible: true, + children: [ + { + text: "Getting Started", + link: "/guides/getting-started.html" + }, + { + text: "Usage", + link: "/guides/usage.html", + children: [ + { + text: "Getting search suggestions", + link: "/guides/usage/getSearchSuggestions.html" + }, + { + text: "Searching for results", + link: "/guides/usage/search.html" + }, + { + text: "Searching for songs", + link: "/guides/usage/searchSongs.html" + }, + { + text: "Searching for videos", + link: "/guides/usage/searchVideos.html" + }, + { + text: "Searching for artists", + link: "/guides/usage/searchArtists.html" + }, + { + text: "Searching for albums", + link: "/guides/usage/searchAlbums.html" + }, + { + text: "Searching for playlists", + link: "/guides/usage/searchPlaylists.html" + }, + { + text: "Getting a song", + link: "/guides/usage/getSong.html" + }, + { + text: "Getting a video", + link: "/guides/usage/getVideo.html" + }, + { + text: "Getting an artist", + link: "/guides/usage/getArtist.html" + }, + { + text: "Getting an artist's top songs", + link: "/guides/usage/getArtistSongs.html" + }, + { + text: "Getting an artist's top albums", + link: "/guides/usage/getArtistAlbums.html" + }, + { + text: "Getting an album", + link: "/guides/usage/getAlbum.html" + }, + { + text: "Getting a playlist", + link: "/guides/usage/getPlaylist.html" + }, + { + text: "Getting a playlist's videos", + link: "/guides/usage/getPlaylistVideos.html" + } + ] + } + ] + }, + { + text: "References", + collapsible: true, + children: [ + { + text: "YTMusic Class", + link: "/references/ytmusic.html", + children: [ + { + text: "getSearchSuggestions", + link: "/references/ytmusic/getSearchSuggestions.html" + }, + { + text: "search", + link: "/references/ytmusic/search.html" + }, + { + text: "searchSongs", + link: "/references/ytmusic/searchSongs.html" + }, + { + text: "searchVideos", + link: "/references/ytmusic/searchVideos.html" + }, + { + text: "searchArtists", + link: "/references/ytmusic/searchArtists.html" + }, + { + text: "searchAlbums", + link: "/references/ytmusic/searchAlbums.html" + }, + { + text: "searchPlaylists", + link: "/references/ytmusic/searchPlaylists.html" + }, + { + text: "getSong", + link: "/references/ytmusic/getSong.html" + }, + { + text: "getVideo", + link: "/references/ytmusic/getVideo.html" + }, + { + text: "getArtist", + link: "/references/ytmusic/getArtist.html" + }, + { + text: "getArtistSongs", + link: "/references/ytmusic/getArtistSongs.html" + }, + { + text: "getArtistAlbums", + link: "/references/ytmusic/getArtistAlbums.html" + }, + { + text: "getAlbum", + link: "/references/ytmusic/getAlbum.html" + }, + { + text: "getPlaylist", + link: "/references/ytmusic/getPlaylist.html" + }, + { + text: "getPlaylistVideos", + link: "/references/ytmusic/getPlaylistVideos.html" + } + ] + }, + { + text: "Interfaces", + link: "/references/interfaces.html", + children: [ + { + text: "ThumbnailFull", + link: "/references/interfaces/ThumbnailFull.html" + }, + { + text: "SongDetailed", + link: "/references/interfaces/SongDetailed.html" + }, + { + text: "SongFull", + link: "/references/interfaces/SongFull.html" + }, + { + text: "VideoDetailed", + link: "/references/interfaces/VideoDetailed.html" + }, + { + text: "VideoFull", + link: "/references/interfaces/VideoFull.html" + }, + { + text: "ArtistBasic", + link: "/references/interfaces/ArtistBasic.html" + }, + { + text: "ArtistDetailed", + link: "/references/interfaces/ArtistDetailed.html" + }, + { + text: "ArtistFull", + link: "/references/interfaces/ArtistFull.html" + }, + { + text: "AlbumBasic", + link: "/references/interfaces/AlbumBasic.html" + }, + { + text: "AlbumDetailed", + link: "/references/interfaces/AlbumDetailed.html" + }, + { + text: "AlbumFull", + link: "/references/interfaces/AlbumFull.html" + }, + { + text: "PlaylistFull", + link: "/references/interfaces/PlaylistFull.html" + } + ] + }, + { + text: "Types", + link: "/references/types.html", + children: [ + { + text: "SearchResult", + link: "/references/types/SearchResult.html" + } + ] + } + ] + } + ] + } +}) diff --git a/docs/.vuepress/styles/index.scss b/docs/.vuepress/styles/index.scss new file mode 100644 index 0000000..439a5eb --- /dev/null +++ b/docs/.vuepress/styles/index.scss @@ -0,0 +1,5 @@ +:root { + scroll-behavior: smooth; + --c-brand: #e6404b !important; + --c-brand-light: #f03441 !important; +} diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..29150bd --- /dev/null +++ b/docs/README.md @@ -0,0 +1,17 @@ +--- +home: true +actions: + - text: Get Started + link: /guides/getting-started.html + type: primary + - text: NPM Registry + link: https://npmjs.org/package/ytmusic-api + type: secondary +features: + - title: YouTube Music Scraper + details: YTMusic API scrapes https://music.youtube.com for results and formats it for you + - title: TypeScript Support + details: You will receive TypeScript annotations when calling YouTube Music API with this package + - title: Type Error Detection + details: If there are type errors at runtime, the bug will be spotted and will show in the console +--- diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md new file mode 100644 index 0000000..ea91dc0 --- /dev/null +++ b/docs/guides/getting-started.md @@ -0,0 +1,41 @@ +# Getting Started + +## Overview + +YTMusic API is an npm package that scrapes data from YouTube Music and formats it for you. + +## Installation + + + + +```bash:no-line-numbers +npm i ytmusic-api +``` + + + + +```bash:no-line-numbers +yarn add ytmusic-api +``` + + + + +```bash:no-line-numbers +pnpm i ytmusic-api +``` + + + + +## Importing + +```ts +// ES6 Import +import YTMusic from "ytmusic-api" + +// Node Require +const YTMusic = require("ytmusic-api").default +``` diff --git a/docs/guides/usage.md b/docs/guides/usage.md new file mode 100644 index 0000000..9b38fb7 --- /dev/null +++ b/docs/guides/usage.md @@ -0,0 +1,12 @@ +# Usage + +YTMusic provides you many ways of fetching data from YouTube Music
+To leverage all the functions, we will need to create an instance of the class `YTMusic`. +Then, call the `initialize()` to initialize the API before using the API anywhere + +```ts +const ytmusic = new YTMusic() +ytmusic.initialize().then(() => { + // Use API here +}) +``` diff --git a/docs/guides/usage/getAlbum.md b/docs/guides/usage/getAlbum.md new file mode 100644 index 0000000..1388301 --- /dev/null +++ b/docs/guides/usage/getAlbum.md @@ -0,0 +1,11 @@ +# Getting an album + +`getAlbum()` will fetch you information about a specific album by it's ID. + +```ts +ytmusic.getAlbum("MPREb_iG5q5DIdhdA").then(album => { + console.log(album) +}) +``` + +See the [reference](../../references/ytmusic/getAlbum.html) for more information. diff --git a/docs/guides/usage/getArtist.md b/docs/guides/usage/getArtist.md new file mode 100644 index 0000000..0f84400 --- /dev/null +++ b/docs/guides/usage/getArtist.md @@ -0,0 +1,11 @@ +# Getting an artist + +`getArtist()` will fetch you information about a specific artist by it's ID. + +```ts +ytmusic.getArtist("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artist => { + console.log(artist) +}) +``` + +See the [reference](../../references/ytmusic/getArtist.html) for more information. diff --git a/docs/guides/usage/getArtistAlbums.md b/docs/guides/usage/getArtistAlbums.md new file mode 100644 index 0000000..f81f50b --- /dev/null +++ b/docs/guides/usage/getArtistAlbums.md @@ -0,0 +1,11 @@ +# Getting an artist's albums + +`getArtistAlbums()` will fetch you information about a specific artist's albums by it's ID. + +```ts +ytmusic.getArtistAlbums("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artistAlbums => { + console.log(artistAlbums) +}) +``` + +See the [reference](../../references/ytmusic/getArtistAlbums.html) for more information. diff --git a/docs/guides/usage/getArtistSongs.md b/docs/guides/usage/getArtistSongs.md new file mode 100644 index 0000000..0139b67 --- /dev/null +++ b/docs/guides/usage/getArtistSongs.md @@ -0,0 +1,11 @@ +# Getting an artist's songs + +`getArtistSongs()` will fetch you information about a specific artist's songs by it's ID. + +```ts +ytmusic.getArtistSongs("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artistSongs => { + console.log(artistSongs) +}) +``` + +See the [reference](../../references/ytmusic/getArtistSongs.html) for more information. diff --git a/docs/guides/usage/getPlaylist.md b/docs/guides/usage/getPlaylist.md new file mode 100644 index 0000000..a9bd1cf --- /dev/null +++ b/docs/guides/usage/getPlaylist.md @@ -0,0 +1,11 @@ +# Getting a playlist + +`getPlaylist()` will fetch you information about a specific playlist by it's ID. + +```ts +ytmusic.getPlaylist("OLAK5uy_nRb467jR73IXKybwzw22_rTYIJ808x4Yc").then(playlist => { + console.log(playlist) +}) +``` + +See the [reference](../../references/ytmusic/getPlaylist.html) for more information. diff --git a/docs/guides/usage/getPlaylistVideos.md b/docs/guides/usage/getPlaylistVideos.md new file mode 100644 index 0000000..29c6710 --- /dev/null +++ b/docs/guides/usage/getPlaylistVideos.md @@ -0,0 +1,11 @@ +# Getting an playlist's videos + +`getPlaylistVideos()` will fetch you information about a specific playlist's videos by it's ID. + +```ts +ytmusic.getPlaylistVideos("OLAK5uy_nRb467jR73IXKybwzw22_rTYIJ808x4Yc").then(playlistVideos => { + console.log(playlistVideos) +}) +``` + +See the [reference](../../references/ytmusic/getPlaylistVideos.html) for more information. diff --git a/docs/guides/usage/getSearchSuggestions.md b/docs/guides/usage/getSearchSuggestions.md new file mode 100644 index 0000000..604cf2a --- /dev/null +++ b/docs/guides/usage/getSearchSuggestions.md @@ -0,0 +1,20 @@ +# Getting search suggestions + +`getSearchSuggestions()` will fetch you a list of search suggestions based on the query + +```ts +ytmusic.getSearchSuggestions("Lilac").then(res => { + console.log(res) +}) +// > [ +// > "lilac", +// > "lilac iu", +// > "lilac band", +// > "lilac wine", +// > "lilac wine miley cyrus", +// > "lilac close my eyes forever", +// > "lilac holy diver" +// > ] +``` + +See the [reference](../../references/ytmusic/getSearchSuggestions.html) for information. diff --git a/docs/guides/usage/getSong.md b/docs/guides/usage/getSong.md new file mode 100644 index 0000000..ba29da9 --- /dev/null +++ b/docs/guides/usage/getSong.md @@ -0,0 +1,11 @@ +# Getting a song + +`getSong()` will fetch you information about a specific song by it's ID. + +```ts +ytmusic.getSong("v7bnOxV4jAc").then(song => { + console.log(song) +}) +``` + +See the [reference](../../references/ytmusic/getSong.html) for more information. diff --git a/docs/guides/usage/getVideo.md b/docs/guides/usage/getVideo.md new file mode 100644 index 0000000..d320e43 --- /dev/null +++ b/docs/guides/usage/getVideo.md @@ -0,0 +1,11 @@ +# Getting a video + +`getVideo()` will fetch you information about a specific video by it's ID. + +```ts +ytmusic.getVideo("v7bnOxV4jAc").then(video => { + console.log(video) +}) +``` + +See the [reference](../../references/ytmusic/getVideo.html) for more information. diff --git a/docs/guides/usage/search.md b/docs/guides/usage/search.md new file mode 100644 index 0000000..84db62b --- /dev/null +++ b/docs/guides/usage/search.md @@ -0,0 +1,11 @@ +# Searching for results + +`search()` will search YTMusic for any type of result. + +```ts +ytmusic.search("Lilac").then(results => { + console.log(results) +}) +``` + +See the [reference](../../references/ytmusic/search.html) for information. diff --git a/docs/guides/usage/searchAlbums.md b/docs/guides/usage/searchAlbums.md new file mode 100644 index 0000000..8d7f847 --- /dev/null +++ b/docs/guides/usage/searchAlbums.md @@ -0,0 +1,11 @@ +# Searching for albums + +`searchAlbums()` will search YTMusic for album results. + +```ts +ytmusic.searchAlbums("Lilac").then(albums => { + console.log(albums) +}) +``` + +See the [reference](../../references/ytmusic/searchAlbums.html) for information. \ No newline at end of file diff --git a/docs/guides/usage/searchArtists.md b/docs/guides/usage/searchArtists.md new file mode 100644 index 0000000..944e38f --- /dev/null +++ b/docs/guides/usage/searchArtists.md @@ -0,0 +1,11 @@ +# Searching for artists + +`searchArtists()` will search YTMusic for artist results. + +```ts +ytmusic.searchArtists("Lilac").then(artists => { + console.log(artists) +}) +``` + +See the [reference](../../references/ytmusic/searchArtists.html) for information. diff --git a/docs/guides/usage/searchPlaylists.md b/docs/guides/usage/searchPlaylists.md new file mode 100644 index 0000000..95e5277 --- /dev/null +++ b/docs/guides/usage/searchPlaylists.md @@ -0,0 +1,11 @@ +# Searching for playlists + +`searchPlaylists()` will search YTMusic for playlist results. + +```ts +ytmusic.searchPlaylists("Lilac").then(playlists => { + console.log(playlists) +}) +``` + +See the [reference](../../references/ytmusic/searchPlaylists.html) for information. \ No newline at end of file diff --git a/docs/guides/usage/searchSongs.md b/docs/guides/usage/searchSongs.md new file mode 100644 index 0000000..c783ef4 --- /dev/null +++ b/docs/guides/usage/searchSongs.md @@ -0,0 +1,11 @@ +# Searching for songs + +`searchSongs()` will search YTMusic for song results. + +```ts +ytmusic.searchSongs("Lilac").then(songs => { + console.log(songs) +}) +``` + +See the [reference](../../references/ytmusic/searchSongs.html) for information. \ No newline at end of file diff --git a/docs/guides/usage/searchVideos.md b/docs/guides/usage/searchVideos.md new file mode 100644 index 0000000..6367ca2 --- /dev/null +++ b/docs/guides/usage/searchVideos.md @@ -0,0 +1,11 @@ +# Searching for songs + +`searchVideos()` will search YTMusic for video results. + +```ts +ytmusic.searchVideos("Lilac").then(videos => { + console.log(videos) +}) +``` + +See the [reference](../../references/ytmusic/searchVideos.html) for information. diff --git a/docs/references/interfaces.md b/docs/references/interfaces.md new file mode 100644 index 0000000..9451164 --- /dev/null +++ b/docs/references/interfaces.md @@ -0,0 +1,14 @@ +# Interfaces + +- [ThumbnailFull](./interfaces/ThumbnailFull.html) +- [SongDetailed](./interfaces/SongDetailed.html) +- [SongFull](./interfaces/SongFull.html) +- [VideoDetailed](./interfaces/VideoDetailed.html) +- [VideoFull](./interfaces/VideoFull.html) +- [ArtistBasic](./interfaces/ArtistBasic.html) +- [ArtistDetailed](./interfaces/ArtistDetailed.html) +- [ArtistFull](./interfaces/ArtistFull.html) +- [AlbumBasic](./interfaces/AlbumBasic.html) +- [AlbumDetailed](./interfaces/AlbumDetailed.html) +- [AlbumFull](./interfaces/AlbumFull.html) +- [PlaylistFull](./interfaces/PlaylistFull.html) diff --git a/docs/references/interfaces/AlbumBasic.md b/docs/references/interfaces/AlbumBasic.md new file mode 100644 index 0000000..68c934c --- /dev/null +++ b/docs/references/interfaces/AlbumBasic.md @@ -0,0 +1,21 @@ +# AlbumBasic + +## Properties + +| Name | Data Type | Description | +| :-------- | :-------- | :---------- | +| `albumId` | `string` | Album ID | +| `name` | `string` | Name | + +## TypeScript Source Code + +```ts +interface AlbumBasic { + albumId: string + name: string +} +``` + +## Usages + +[SongDetailed#album](./SongDetailed.html) diff --git a/docs/references/interfaces/AlbumDetailed.md b/docs/references/interfaces/AlbumDetailed.md new file mode 100644 index 0000000..248ba7d --- /dev/null +++ b/docs/references/interfaces/AlbumDetailed.md @@ -0,0 +1,37 @@ +# AlbumDetailed + +## Properties + +| Name | Data Type | Description | +| :----------- | :---------------------------------------- | :-------------------- | +| `type` | `"ALBUM"` | Type of data | +| `albumId` | `string` | Album ID | +| `playlistId` | `string` | Playlist ID for Album | +| `name` | `string` | Name | +| `artists` | [ArtistBasic](./ArtistBasic.html)`[]` | Creators of the Album | +| `year` | `number` | Publication Year | +| `thumbnails` | [ThumbnailFull](./ThumbnailFull.html)`[]` | Thumbnails | + +## TypeScript Source Code + +```ts +interface AlbumDetailed { + type: "ALBUM" + albumId: string + playlistId: string + name: string + artists: ArtistBasic[] + year: number + thumbnails: ThumbnailFull[] +} +``` + +## Usages + +[ArtistFull#topAlbums](./ArtistFull.html) + +[SearchResult](../types/SearchResult.html) + +[YTMusic#searchAlbums](../ytmusic/searchAlbums.html) + +[YTMusic#getArtistAlbums](../ytmusic/getArtistAlbums.html) \ No newline at end of file diff --git a/docs/references/interfaces/AlbumFull.md b/docs/references/interfaces/AlbumFull.md new file mode 100644 index 0000000..2b6cd1d --- /dev/null +++ b/docs/references/interfaces/AlbumFull.md @@ -0,0 +1,35 @@ +# AlbumFull + +## Properties + +| Name | Data Type | Description | +| :------------ | :---------------------------------------- | :-------------------- | +| `type` | `"ALBUM"` | Type of data | +| `albumId` | `string` | Album ID | +| `playlistId` | `string` | Playlist ID for Album | +| `name` | `string` | Name | +| `artists` | [ArtistBasic](./ArtistBasic.html)`[]` | Creators of the Album | +| `year` | `number` | Publication Year | +| `thumbnails` | [ThumbnailFull](./ThumbnailFull.html)`[]` | Thumbnails | +| `description` | `string` | Description | +| `songs` | [SongDetailed](./SongDetailed.html)`[]` | Songs in the Album | + +## TypeScript Source Code + +```ts +interface AlbumFull { + type: "ALBUM" + albumId: string + playlistId: string + name: string + artists: ArtistBasic[] + year: number + thumbnails: ThumbnailFull[] + description: string + songs: SongDetailed[] +} +``` + +## Usages + +[YTMusic#getAlbum](../ytmusic/getAlbum.md) diff --git a/docs/references/interfaces/ArtistBasic.md b/docs/references/interfaces/ArtistBasic.md new file mode 100644 index 0000000..a76dcb7 --- /dev/null +++ b/docs/references/interfaces/ArtistBasic.md @@ -0,0 +1,27 @@ +# ArtistBasic + +## Properties + +| Name | Data Type | Description | +| :------- | :-------- | :---------- | +| artistId | `string` | Artist ID | +| name | `string` | Name | + +## TypeScript Source Code + +```ts +interface ArtistBasic { + artistId: string + name: string +} +``` + +## Usages + +[SongDetailed#artists](./SongDetailed.html) + +[VideoDetailed#artists](./VideoDetailed.html) + +[AlbumDetailed#artists](./AlbumDetailed.html) + +[PlaylistFull#artist](./PlaylistFull.html) diff --git a/docs/references/interfaces/ArtistDetailed.md b/docs/references/interfaces/ArtistDetailed.md new file mode 100644 index 0000000..a46d7aa --- /dev/null +++ b/docs/references/interfaces/ArtistDetailed.md @@ -0,0 +1,27 @@ +# ArtistDetailed + +## Properties + +| Name | Data Type | Description | +| :--------- | :---------------------------------------- | :----------- | +| type | `"ARTIST"` | Type of data | +| artistId | `string` | Artist ID | +| name | `string` | Name | +| thumbnails | [ThumbnailFull](./ThumbnailFull.html)`[]` | Thumbnails | + +## TypeScript Source Code + +```ts +interface ArtistDetailed { + type: "ARTIST" + artistId: string + name: string + thumbnails: ThumbnailFull[] +} +``` + +## Usages + +[SearchResult](../types/SearchResult.html) + +[YTMusic#searchArtists](../ytmusic/searchArtists.html) diff --git a/docs/references/interfaces/ArtistFull.md b/docs/references/interfaces/ArtistFull.md new file mode 100644 index 0000000..f6d632a --- /dev/null +++ b/docs/references/interfaces/ArtistFull.md @@ -0,0 +1,33 @@ +# ArtistFull + +## Properties + +| Name | Data Type | Description | +| :---------- | :---------------------------------------------------------- | :----------------------------------- | +| type | `"ARTIST"` | Type of data | +| artistId | `string` | Artist ID | +| name | `string` | Name | +| thumbnails | [ThumbnailFull](./ThumbnailFull.html)`[]` | Thumbnails | +| description | `string` | Description | +| subscribers | `number` | Number of subscribers the Artist has | +| topSongs | `Omit<`[SongDetailed](./SongDetailed.html)`, "duration">[]` | Top Songs from Artist | +| topAlbums | [AlbumDetailed](./AlbumDetailed.html)`[]` | Top Albums from Artist | + +## TypeScript Source Code + +```ts +interface ArtistFull { + type: "ARTIST" + artistId: string + name: string + thumbnails: ThumbnailFull[] + description: string + subscribers: number + topSongs: Omit[] + topAlbums: AlbumDetailed[] +} +``` + +## Usages + +[YTMusic#getArtist](../ytmusic/getArtist.html) diff --git a/docs/references/interfaces/PlaylistFull.md b/docs/references/interfaces/PlaylistFull.md new file mode 100644 index 0000000..a358850 --- /dev/null +++ b/docs/references/interfaces/PlaylistFull.md @@ -0,0 +1,33 @@ +# PlaylistFull + +## Properties + +| Name | Data Type | Description | +| :--------- | :---------------------------------- | :------------------------------- | +| type | `"PLAYLIST"` | Type of data | +| playlistId | `string` | Playlist ID | +| name | `string` | Name | +| artist | [ArtistBasic](#ArtistBasic) | Creator of the Playlist | +| videoCount | `number` | Number of videos in the Playlist | +| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | + +## TypeScript Source Code + +```ts +interface PlaylistFull { + type: "PLAYLIST" + playlistId: string + name: string + artist: ArtistBasic + videoCount: number + thumbnails: ThumbnailFull[] +} +``` + +## Usages + +[SearchResult](../types/SearchResult.html) + +[YTMusic#searchPlaylists](../ytmusic/searchPlaylists.html) + +[YTMusic#getPlaylist](../ytmusic/getPlaylist.html) diff --git a/docs/references/interfaces/SongDetailed.md b/docs/references/interfaces/SongDetailed.md new file mode 100644 index 0000000..68aa244 --- /dev/null +++ b/docs/references/interfaces/SongDetailed.md @@ -0,0 +1,39 @@ +# SongDetailed + +## Properties + +| Name | Data Type | Description | +| :--------- | :---------------------------------------- | :------------------ | +| type | `"SONG"` | Type of data | +| videoId | `string` | YouTube Video ID | +| name | `string` | Name | +| artists | [ArtistBasic](./ArtistBasic.html)`[]` | Artists | +| album | [AlbumBasic](./AlbumBasic.html) | Album | +| duration | `number` | Duration in seconds | +| thumbnails | [ThumbnailFull](./ThumbnailFull.html)`[]` | Thumbnails | + +## TypeScript Source Code + +```ts +interface SongDetailed { + type: "SONG" + videoId: string + name: string + artists: ArtistBasic[] + album: AlbumBasic + duration: number + thumbnails: ThumbnailFull[] +} +``` + +## Usages + +[ArtistFull#topSongs](./ArtistFull.html) + +[AlbumFull#songs](./AlbumFull.html) + +[SearchResult](../types/SearchResult.html) + +[YTMusic#searchSongs](../ytmusic/searchSongs.html) + +[YTMusic#getArtistSongs](../ytmusic/getArtistSongs.html) diff --git a/docs/references/interfaces/SongFull.md b/docs/references/interfaces/SongFull.md new file mode 100644 index 0000000..59eb011 --- /dev/null +++ b/docs/references/interfaces/SongFull.md @@ -0,0 +1,35 @@ +# SongFull + +## Properties + +| Name | Data Type | Description | +| :-------------- | :---------------------------------------- | :--------------------- | +| type | `"SONG"` | Type of data | +| videoId | `string` | YouTube Video ID | +| name | `string` | Name | +| artists | [ArtistBasic](./ArtistBasic.html)`[]` | Artists | +| duration | `number` | Duration in seconds | +| thumbnails | [ThumbnailFull](./ThumbnailFull.html)`[]` | Thumbnails | +| description | `string` | Description | +| formats | `any[]` | Video Formats | +| adaptiveFormats | `any[]` | Adaptive Video Formats | + +## TypeScript Source Code + +```ts +interface SongFull { + type: "SONG" + videoId: string + name: string + artists: ArtistBasic[] + duration: number + thumbnails: ThumbnailFull[] + description: string + formats: any[] + adaptiveFormats: any[] +} +``` + +## Usages + +[YTMusic#getSong](../ytmusic/getSong.html) diff --git a/docs/references/interfaces/ThumbnailFull.md b/docs/references/interfaces/ThumbnailFull.md new file mode 100644 index 0000000..cb91fe8 --- /dev/null +++ b/docs/references/interfaces/ThumbnailFull.md @@ -0,0 +1,31 @@ +# ThumbnailFull + +## Properties + +| Name | Data Type | Description | +| :------- | :-------- | :------------------ | +| `url` | `string` | Link | +| `width` | `number` | Width of the image | +| `height` | `number` | Height of the image | + +## TypeScript Source Code + +```ts +interface ThumbnailFull { + url: string + width: number + height: number +} +``` + +## Usages + +[SongDetailed#thumbnails](./SongDetailed.html) + +[VideoDetailed#thumbnails](./VideoDetailed.html) + +[ArtistDetailed#thumbnails](./ArtistDetailed.html) + +[AlbumDetailed#thumbnails](./AlbumDetailed.html) + +[PlaylistFull#thumbnails](./PlaylistFull.html) diff --git a/docs/references/interfaces/VideoDetailed.md b/docs/references/interfaces/VideoDetailed.md new file mode 100644 index 0000000..a951978 --- /dev/null +++ b/docs/references/interfaces/VideoDetailed.md @@ -0,0 +1,35 @@ +# VideoDetailed + +## Properties + +| Name | Data Type | Description | +| :--------- | :---------------------------------------- | :------------------------------ | +| type | `"VIDEO"` | Type of data | +| videoId | `string` | YouTube Video ID | +| name | `string` | Name | +| artists | [ArtistBasic](./ArtistBasic.html)`[]` | Channels that created the video | +| views | `number` | View count | +| duration | `number` | Duration in seconds | +| thumbnails | [ThumbnailFull](./ThumbnailFull.html)`[]` | Thumbnails | + +## TypeScript Source Code + +```ts +interface VideoDetailed { + type: "VIDEO" + videoId: string + name: string + artists: ArtistBasic[] + views: number + duration: number + thumbnails: ThumbnailFull[] +} +``` + +## Usages + +[SearchResult](../types/SearchResult.html) + +[YTMusic#searchVideos](../ytmusic/searchVideos.html) + +[YTMusic#getPlaylistVideos](../ytmusic/getPlaylistVideos.html) diff --git a/docs/references/interfaces/VideoFull.md b/docs/references/interfaces/VideoFull.md new file mode 100644 index 0000000..8c0c100 --- /dev/null +++ b/docs/references/interfaces/VideoFull.md @@ -0,0 +1,41 @@ +# VideoFull + +## Properties + +| Name | Data Type | Description | +| :---------- | :---------------------------------------- | :------------------------------------- | +| type | `"VIDEO"` | Type of data | +| videoId | `string` | YouTube Video ID | +| name | `string` | Name | +| artists | [ArtistBasic](./ArtistBasic.html)`[]` | Channels that created the video | +| views | `number` | View count | +| duration | `number` | Duration in seconds | +| thumbnails | [ThumbnailFull](./ThumbnailFull.html)`[]` | Thumbnails | +| description | `string` | Description | +| unlisted | `boolean` | If the video is unlisted on YouTube | +| familySafe | `boolean` | If the video is family safe on YouTube | +| paid | `boolean` | If the video is paid on YouTube | +| tags | `string[]` | Tags | + +## TypeScript Source Code + +```ts +interface VideoFull { + type: "VIDEO" + videoId: string + name: string + artists: ArtistBasic[] + views: number + duration: number + thumbnails: ThumbnailFull[] + description: string + unlisted: boolean + familySafe: boolean + paid: boolean + tags: string[] +} +``` + +## Usages + +[YTMusic#getVideo](../ytmusic/getVideo.html) diff --git a/docs/references/types.md b/docs/references/types.md new file mode 100644 index 0000000..c41ffa1 --- /dev/null +++ b/docs/references/types.md @@ -0,0 +1,3 @@ +# Types + +- [SearchResult](../types/SearchResult.html) diff --git a/docs/references/types/SearchResult.md b/docs/references/types/SearchResult.md new file mode 100644 index 0000000..7b47533 --- /dev/null +++ b/docs/references/types/SearchResult.md @@ -0,0 +1,26 @@ +# SearchResult + +## Value + +Either + +- [SongDetailed](../interfaces/SongDetailed.html) +- [VideoDetailed](../interfaces/VideoDetailed.html) +- [AlbumDetailed](../interfaces/AlbumDetailed.html) +- [ArtistDetailed](../interfaces/ArtistDetailed.html) +- [PlaylistFull](../interfaces/PlaylistFull.html) + +## TypeScript Source Code + +```ts +type SearchResult = + | SongDetailed + | VideoDetailed + | AlbumDetailed + | ArtistDetailed + | PlaylistFull +``` + +## Usages + +[YTMusic#search](../ytmusic/search.html) diff --git a/docs/references/ytmusic.md b/docs/references/ytmusic.md new file mode 100644 index 0000000..85cc2f2 --- /dev/null +++ b/docs/references/ytmusic.md @@ -0,0 +1,19 @@ +# YTMusic Class + +## Methods + +- [getSearchSuggestions](./ytmusic/getSearchSuggestions.html) +- [search](./ytmusic/search.html) +- [searchSongs](./ytmusic/searchSongs.html) +- [searchVideos](./ytmusic/searchVideos.html) +- [searchArtists](./ytmusic/searchArtists.html) +- [searchAlbums](./ytmusic/searchAlbums.html) +- [searchPlaylists](./ytmusic/searchPlaylists.html) +- [getSong](./ytmusic/getSong.html) +- [getVideo](./ytmusic/getVideo.html) +- [getArtist](./ytmusic/getArtist.html) +- [getArtistSongs](./ytmusic/getArtistSongs.html) +- [getArtistAlbums](./ytmusic/getArtistAlbums.html) +- [getAlbum](./ytmusic/getAlbum.html) +- [getPlaylist](./ytmusic/getPlaylist.html) +- [getPlaylistVideos](./ytmusic/getPlaylistVideos.html) diff --git a/docs/references/ytmusic/getAlbum.md b/docs/references/ytmusic/getAlbum.md new file mode 100644 index 0000000..6a37913 --- /dev/null +++ b/docs/references/ytmusic/getAlbum.md @@ -0,0 +1,19 @@ +# getAlbum + +See the [guide](../../guides/usage/getAlbum.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :-------- | :-------- | :---------- | +| `albumId` | `string` | Album ID | + +## Returns + +`Promise<`[AlbumFull](../interfaces/AlbumFull.html)`>` + +## TypeScript Source Code + +```ts +public async getAlbum(albumId: string): Promise +``` diff --git a/docs/references/ytmusic/getArtist.md b/docs/references/ytmusic/getArtist.md new file mode 100644 index 0000000..7639772 --- /dev/null +++ b/docs/references/ytmusic/getArtist.md @@ -0,0 +1,19 @@ +# getArtist + +See the [guide](../../guides/usage/getArtist.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :--------- | :-------- | :---------- | +| `artistId` | `string` | Artist ID | + +## Returns + +`Promise<`[ArtistFull](../interfaces/ArtistFull.html)`>` + +## TypeScript Source Code + +```ts +public async getArtist(artistId: string): Promise +``` diff --git a/docs/references/ytmusic/getArtistAlbums.md b/docs/references/ytmusic/getArtistAlbums.md new file mode 100644 index 0000000..7c4d55e --- /dev/null +++ b/docs/references/ytmusic/getArtistAlbums.md @@ -0,0 +1,19 @@ +# getArtistAlbums + +See the [guide](../../guides/usage/getArtistAlbums.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :--------- | :-------- | :---------- | +| `artistId` | `string` | Artist ID | + +## Returns + +`Promise<`[AlbumDetailed](../interfaces/AlbumDetailed.html)`[]>` + +## TypeScript Source Code + +```ts +public async getArtistAlbums(artistId: string): Promise +``` diff --git a/docs/references/ytmusic/getArtistSongs.md b/docs/references/ytmusic/getArtistSongs.md new file mode 100644 index 0000000..d269192 --- /dev/null +++ b/docs/references/ytmusic/getArtistSongs.md @@ -0,0 +1,19 @@ +# getArtistSongs + +See the [guide](../../guides/usage/getArtistSongs.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :--------- | :-------- | :---------- | +| `artistId` | `string` | Artist ID | + +## Returns + +`Promise<`[SongDetailed](../interfaces/SongDetailed.html)`[]>` + +## TypeScript Source Code + +```ts +public async getArtistSongs(artistId: string): Promise +``` diff --git a/docs/references/ytmusic/getPlaylist.md b/docs/references/ytmusic/getPlaylist.md new file mode 100644 index 0000000..5b271bf --- /dev/null +++ b/docs/references/ytmusic/getPlaylist.md @@ -0,0 +1,19 @@ +# getPlaylist + +See the [guide](../../guides/usage/getPlaylist.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :----------- | :-------- | :---------- | +| `playlistId` | `string` | Playlist ID | + +## Returns + +`Promise<`[PlaylistFull](../interfaces/PlaylistFull.html)`>` + +## TypeScript Source Code + +```ts +public async getPlaylist(playlistId: string): Promise +``` diff --git a/docs/references/ytmusic/getPlaylistVideos.md b/docs/references/ytmusic/getPlaylistVideos.md new file mode 100644 index 0000000..f346746 --- /dev/null +++ b/docs/references/ytmusic/getPlaylistVideos.md @@ -0,0 +1,19 @@ +# getPlaylistVideos + +See the [guide](../../guides/usage/getPlaylistVideos.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :----------- | :-------- | :---------- | +| `playlistId` | `string` | Playlist ID | + +## Returns + +`Promise[]>` + +## TypeScript Source Code + +```ts +public async getPlaylistVideos(playlistId: string): Promise[]> +``` diff --git a/docs/references/ytmusic/getSearchSuggestions.md b/docs/references/ytmusic/getSearchSuggestions.md new file mode 100644 index 0000000..f218382 --- /dev/null +++ b/docs/references/ytmusic/getSearchSuggestions.md @@ -0,0 +1,19 @@ +# getSearchSuggestions + +See the [guide](../../guides/usage/getSearchSuggestions.html) for information on how to use this. + +## Parameters + +| Name | Data Type | Description | +| :---- | :-------- | :------------------------------------ | +| query | string | Search query you want suggestions for | + +## Returns + +`Promise` + +## TypeScript Source Code + +```ts +public async getSearchSuggestions(query: string): Promise +``` diff --git a/docs/references/ytmusic/getSong.md b/docs/references/ytmusic/getSong.md new file mode 100644 index 0000000..f7d3c1a --- /dev/null +++ b/docs/references/ytmusic/getSong.md @@ -0,0 +1,19 @@ +# getSong + +See the [guide](../../guides/usage/getSong.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :-------- | :-------- | :---------- | +| `videoId` | `string` | Video ID | + +## Returns + +`Promise<`[SongFull](../interfaces/SongFull.html)`>` + +## TypeScript Source Code + +```ts +public async getSong(videoId: string): Promise +``` diff --git a/docs/references/ytmusic/getVideo.md b/docs/references/ytmusic/getVideo.md new file mode 100644 index 0000000..20e4fb2 --- /dev/null +++ b/docs/references/ytmusic/getVideo.md @@ -0,0 +1,19 @@ +# getVideo + +See the [guide](../../guides/usage/getVideo.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :-------- | :-------- | :---------- | +| `videoId` | `string` | Video ID | + +## Returns + +`Promise<`[VideoFull](../interfaces/VideoFull.html)`>` + +## TypeScript Source Code + +```ts +public async getVideo(videoId: string): Promise +``` diff --git a/docs/references/ytmusic/search.md b/docs/references/ytmusic/search.md new file mode 100644 index 0000000..4f22814 --- /dev/null +++ b/docs/references/ytmusic/search.md @@ -0,0 +1,19 @@ +# search + +See the [guide](../../guides/usage/search.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :------ | :-------- | :----------- | +| `query` | `string` | Search query | + +## Returns + +`Promise<`[SearchResult](../types/SearchResult.html)`[]>` + +## TypeScript Source Code + +```ts +public async search(query: string): Promise +``` diff --git a/docs/references/ytmusic/searchAlbums.md b/docs/references/ytmusic/searchAlbums.md new file mode 100644 index 0000000..692c739 --- /dev/null +++ b/docs/references/ytmusic/searchAlbums.md @@ -0,0 +1,19 @@ +# searchAlbums + +See the [guide](../../guides/usage/searchAlbums.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :------ | :-------- | :----------- | +| `query` | `string` | Search query | + +## Returns + +`Promise<`[AlbumDetailed](../interfaces/AlbumDetailed.html)`[]>` + +## TypeScript Source Code + +```ts +public async searchAlbums(query: string): Promise +``` diff --git a/docs/references/ytmusic/searchArtists.md b/docs/references/ytmusic/searchArtists.md new file mode 100644 index 0000000..80d2249 --- /dev/null +++ b/docs/references/ytmusic/searchArtists.md @@ -0,0 +1,19 @@ +# searchArtists + +See the [guide](../../guides/usage/searchArtists.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :------ | :-------- | :----------- | +| `query` | `string` | Search query | + +## Returns + +`Promise<`[ArtistDetailed](../interfaces/ArtistDetailed.html)`[]>` + +## TypeScript Source Code + +```ts +public async searchArtists(query: string): Promise +``` diff --git a/docs/references/ytmusic/searchPlaylists.md b/docs/references/ytmusic/searchPlaylists.md new file mode 100644 index 0000000..a8e97e4 --- /dev/null +++ b/docs/references/ytmusic/searchPlaylists.md @@ -0,0 +1,19 @@ +# searchPlaylists + +See the [guide](../../guides/usage/searchPlaylists.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :------ | :-------- | :----------- | +| `query` | `string` | Search query | + +## Returns + +`Promise<`[PlaylistFull](../interfaces/PlaylistFull.html)`[]>` + +## TypeScript Source Code + +```ts +public async searchPlaylists(query: string): Promise +``` diff --git a/docs/references/ytmusic/searchSongs.md b/docs/references/ytmusic/searchSongs.md new file mode 100644 index 0000000..b527b33 --- /dev/null +++ b/docs/references/ytmusic/searchSongs.md @@ -0,0 +1,19 @@ +# searchSongs + +See the [guide](../../guides/usage/searchSongs.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :------ | :-------- | :----------- | +| `query` | `string` | Search query | + +## Returns + +`Promise<`[SongDetailed](../interfaces/SongDetailed.html)`[]>` + +## TypeScript Source Code + +```ts +public async searchSongs(query: string): Promise +``` diff --git a/docs/references/ytmusic/searchVideos.md b/docs/references/ytmusic/searchVideos.md new file mode 100644 index 0000000..65d1319 --- /dev/null +++ b/docs/references/ytmusic/searchVideos.md @@ -0,0 +1,19 @@ +# searchVideos + +See the [guide](../../guides/usage/searchVideos.html) for information on how to use this. + +## Properties + +| Name | Data Type | Description | +| :------ | :-------- | :----------- | +| `query` | `string` | Search query | + +## Returns + +`Promise<`[VideoDetailed](../interfaces/VideoDetailed.html)`[]>` + +## TypeScript Source Code + +```ts +public async searchVideos(query: string): Promise +``` diff --git a/package.json b/package.json index ef7f798..f5bda70 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ "url": "https://github.com/zS1L3NT/ts-npm-ytmusic-api" }, "scripts": { - "test": "ts-mocha --timeout 30000 src/__tests__/**/*.spec.ts" + "test": "ts-mocha --timeout 30000 src/__tests__/**/*.spec.ts", + "docs:dev": "vuepress dev docs", + "docs:build": "vuepress build docs" }, "dependencies": { "axios": "^0.25.0", @@ -22,10 +24,13 @@ "@types/mocha": "^9.1.0", "@types/node": "^17.0.23", "@types/tough-cookie": "^4.0.1", + "@vuepress/plugin-search": "^2.0.0-beta.36", "mocha": "^9.2.2", "mocha.parallel": "^0.15.6", "ts-mocha": "^9.0.2", - "typescript": "^4.5.5" + "typescript": "^4.5.5", + "validate-any": "1.3.1", + "vuepress": "^2.0.0-beta.36" }, "keywords": [ "youtube", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6504315..065106d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,7 @@ specifiers: '@types/mocha': ^9.1.0 '@types/node': ^17.0.23 '@types/tough-cookie': ^4.0.1 + '@vuepress/plugin-search': ^2.0.0-beta.36 axios: ^0.25.0 mocha: ^9.2.2 mocha.parallel: ^0.15.6 @@ -11,6 +12,7 @@ specifiers: ts-mocha: ^9.0.2 typescript: ^4.5.5 validate-any: 1.3.1 + vuepress: ^2.0.0-beta.36 dependencies: axios: 0.25.0 @@ -21,22 +23,86 @@ devDependencies: '@types/mocha': 9.1.0 '@types/node': 17.0.23 '@types/tough-cookie': 4.0.1 + '@vuepress/plugin-search': 2.0.0-beta.36 mocha: 9.2.2 mocha.parallel: 0.15.6_mocha@9.2.2 ts-mocha: 9.0.2_mocha@9.2.2 typescript: 4.6.3 + vuepress: 2.0.0-beta.36 packages: + /@babel/parser/7.17.8: + resolution: {integrity: sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@types/debug/4.1.7: + resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + dependencies: + '@types/ms': 0.7.31 + dev: true + + /@types/fs-extra/9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 17.0.23 + dev: true + + /@types/hash-sum/1.0.0: + resolution: {integrity: sha512-FdLBT93h3kcZ586Aee66HPCVJ6qvxVjBlDWNmxSGSbCZe9hTsjRKdSsl4y1T+3zfujxo9auykQMnFsfyHWD7wg==} + dev: true + /@types/json5/0.0.29: resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} dev: true optional: true + /@types/linkify-it/3.0.2: + resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} + dev: true + + /@types/markdown-it/12.2.3: + resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} + dependencies: + '@types/linkify-it': 3.0.2 + '@types/mdurl': 1.0.2 + dev: true + + /@types/mdurl/1.0.2: + resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} + dev: true + /@types/mocha/9.1.0: resolution: {integrity: sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==} dev: true + /@types/ms/0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true + /@types/node/17.0.23: resolution: {integrity: sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==} dev: true @@ -49,6 +115,395 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true + /@vitejs/plugin-vue/2.2.4_vite@2.8.6+vue@3.2.31: + resolution: {integrity: sha512-ev9AOlp0ljCaDkFZF3JwC/pD2N4Hh+r5srl5JHM6BKg5+99jiiK0rE/XaRs3pVm1wzyKkjUy/StBSoXX5fFzcw==} + engines: {node: '>=12.0.0'} + peerDependencies: + vite: ^2.5.10 + vue: ^3.2.25 + dependencies: + vite: 2.8.6 + vue: 3.2.31 + dev: true + + /@vue/compiler-core/3.2.31: + resolution: {integrity: sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==} + dependencies: + '@babel/parser': 7.17.8 + '@vue/shared': 3.2.31 + estree-walker: 2.0.2 + source-map: 0.6.1 + dev: true + + /@vue/compiler-dom/3.2.31: + resolution: {integrity: sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==} + dependencies: + '@vue/compiler-core': 3.2.31 + '@vue/shared': 3.2.31 + dev: true + + /@vue/compiler-sfc/3.2.31: + resolution: {integrity: sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==} + dependencies: + '@babel/parser': 7.17.8 + '@vue/compiler-core': 3.2.31 + '@vue/compiler-dom': 3.2.31 + '@vue/compiler-ssr': 3.2.31 + '@vue/reactivity-transform': 3.2.31 + '@vue/shared': 3.2.31 + estree-walker: 2.0.2 + magic-string: 0.25.9 + postcss: 8.4.12 + source-map: 0.6.1 + dev: true + + /@vue/compiler-ssr/3.2.31: + resolution: {integrity: sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==} + dependencies: + '@vue/compiler-dom': 3.2.31 + '@vue/shared': 3.2.31 + dev: true + + /@vue/devtools-api/6.1.3: + resolution: {integrity: sha512-79InfO2xHv+WHIrH1bHXQUiQD/wMls9qBk6WVwGCbdwP7/3zINtvqPNMtmSHXsIKjvUAHc8L0ouOj6ZQQRmcXg==} + dev: true + + /@vue/reactivity-transform/3.2.31: + resolution: {integrity: sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==} + dependencies: + '@babel/parser': 7.17.8 + '@vue/compiler-core': 3.2.31 + '@vue/shared': 3.2.31 + estree-walker: 2.0.2 + magic-string: 0.25.9 + dev: true + + /@vue/reactivity/3.2.31: + resolution: {integrity: sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==} + dependencies: + '@vue/shared': 3.2.31 + dev: true + + /@vue/runtime-core/3.2.31: + resolution: {integrity: sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==} + dependencies: + '@vue/reactivity': 3.2.31 + '@vue/shared': 3.2.31 + dev: true + + /@vue/runtime-dom/3.2.31: + resolution: {integrity: sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==} + dependencies: + '@vue/runtime-core': 3.2.31 + '@vue/shared': 3.2.31 + csstype: 2.6.20 + dev: true + + /@vue/server-renderer/3.2.31_vue@3.2.31: + resolution: {integrity: sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==} + peerDependencies: + vue: 3.2.31 + dependencies: + '@vue/compiler-ssr': 3.2.31 + '@vue/shared': 3.2.31 + vue: 3.2.31 + dev: true + + /@vue/shared/3.2.31: + resolution: {integrity: sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==} + dev: true + + /@vuepress/bundler-vite/2.0.0-beta.36: + resolution: {integrity: sha512-wIWbBhLtGotQ1zJGkCHFllKmmpqG2FhcIhoUPY8/VESOmKyUrE6Mbbsk5g8Un0kFbhiF3eFYP1eUxbZttbbpkA==} + dependencies: + '@vitejs/plugin-vue': 2.2.4_vite@2.8.6+vue@3.2.31 + '@vue/compiler-sfc': 3.2.31 + '@vue/server-renderer': 3.2.31_vue@3.2.31 + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/shared': 2.0.0-beta.35 + '@vuepress/utils': 2.0.0-beta.35 + autoprefixer: 10.4.4_postcss@8.4.12 + connect-history-api-fallback: 1.6.0 + postcss: 8.4.12 + postcss-csso: 6.0.0_postcss@8.4.12 + rollup: 2.70.1 + vite: 2.8.6 + vue: 3.2.31 + vue-router: 4.0.14_vue@3.2.31 + transitivePeerDependencies: + - less + - sass + - stylus + - supports-color + dev: true + + /@vuepress/cli/2.0.0-beta.36: + resolution: {integrity: sha512-tGhC4OgdgOOoXGw79HFAJz5y9t9YRNdSsgkMRJvCAv9f257X+M/Ex/Qh3hfcnge+OBuMj63JLDB0FDRQWeJFUA==} + hasBin: true + dependencies: + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/utils': 2.0.0-beta.35 + cac: 6.7.12 + chokidar: 3.5.3 + envinfo: 7.8.1 + esbuild: 0.13.15 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/client/2.0.0-beta.35: + resolution: {integrity: sha512-oQj+fDvfDDJ+fPpcVVRJLeVX1QmnLCcpLBxPBVhqMD0WAFkj+sCBaeq0sQc5CwDaNysDcN71ACeuEpLDOEtCgQ==} + dependencies: + '@vue/devtools-api': 6.1.3 + '@vuepress/shared': 2.0.0-beta.35 + vue: 3.2.31 + vue-router: 4.0.14_vue@3.2.31 + dev: true + + /@vuepress/core/2.0.0-beta.36: + resolution: {integrity: sha512-RBj2Tkgt2f7NMCfox1iKgd6V87X5qj8G/cpJm7R65IielaXkNGGKjgidOrLKRCA3X0c/COwmaBrdiFxJtOtIRw==} + dependencies: + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/markdown': 2.0.0-beta.36 + '@vuepress/shared': 2.0.0-beta.35 + '@vuepress/utils': 2.0.0-beta.35 + gray-matter: 4.0.3 + toml: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/markdown/2.0.0-beta.36: + resolution: {integrity: sha512-Amvo7YuSbMZIfj24kwXDen81RsjliXTDvhv+R14aH4NbH9rpwKzTTtbmjWH6O/upqikDYIXhlozHjr1nEf1qHw==} + dependencies: + '@types/markdown-it': 12.2.3 + '@vuepress/shared': 2.0.0-beta.35 + '@vuepress/utils': 2.0.0-beta.35 + markdown-it: 12.3.2 + markdown-it-anchor: 8.4.1_d643ca6eb40ae68ab966a77bead78073 + markdown-it-emoji: 2.0.0 + mdurl: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-active-header-links/2.0.0-beta.36: + resolution: {integrity: sha512-jeH1sieF1M/2M33JoUXe5RuRcdlGvUqMIq2wGdnwfXZn7YzcZtM8bmmhgpZw5yTuW6mT59b5SwEINptkZDKtUw==} + dependencies: + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/utils': 2.0.0-beta.35 + ts-debounce: 4.0.0 + vue: 3.2.31 + vue-router: 4.0.14_vue@3.2.31 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-back-to-top/2.0.0-beta.36: + resolution: {integrity: sha512-BwWa/EeKvboG22m4HmnCEfs/RcPtQ5pL5uVss8+POLgDSICKDGhuHrQiH/DtgqbceXZCryNlJhLkNXQ6TxcR+A==} + dependencies: + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/utils': 2.0.0-beta.35 + ts-debounce: 4.0.0 + vue: 3.2.31 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-container/2.0.0-beta.36: + resolution: {integrity: sha512-65DjPd2RHnbk8wvyPimalC7K+dHbb41fWH8bPdJL6EhFPBCdplXmDHjR8sLU/15HGrF8ms8PRJ0nKRv5WUEsrw==} + dependencies: + '@types/markdown-it': 12.2.3 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/markdown': 2.0.0-beta.36 + '@vuepress/shared': 2.0.0-beta.35 + '@vuepress/utils': 2.0.0-beta.35 + markdown-it: 12.3.2 + markdown-it-container: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-external-link-icon/2.0.0-beta.36: + resolution: {integrity: sha512-t8UHhvxT7Zwwv+bV+jKZ1fnTKxk6FHOQ9ydGnGWje7YTL097FppSrWFdMRFVTWBfqRKkrSOx5gB2LIz2pELWvA==} + dependencies: + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/markdown': 2.0.0-beta.36 + '@vuepress/utils': 2.0.0-beta.35 + vue: 3.2.31 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-git/2.0.0-beta.36: + resolution: {integrity: sha512-Q2fIaExIZTZHWcJzelRMSf41yvfLUto2vFB9sMmpgRZ+vqFpPwruyR7XGmBxHMiSIjBFPbjAPadgB3hpoDKyiQ==} + dependencies: + '@vuepress/core': 2.0.0-beta.36 + execa: 5.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-medium-zoom/2.0.0-beta.36: + resolution: {integrity: sha512-5qarMKNvypwYgo/ojOGSAKqug9mlmkzzaHGqX9w2rObYB0kCyV1CuqFOqd0Eg/3vif3B0fDOVgEIomjvgc8rQw==} + dependencies: + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/utils': 2.0.0-beta.35 + medium-zoom: 1.0.6 + vue: 3.2.31 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-nprogress/2.0.0-beta.36: + resolution: {integrity: sha512-PFDFdvWQvvkGCiYi2jiCiRggP984yAYyZtSuK9eX3A9itYi0Qp+ck10tc+7cGQc1B97zg3FHVyA0BJcXUJwiJQ==} + dependencies: + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/utils': 2.0.0-beta.35 + nprogress: 0.2.0 + vue: 3.2.31 + vue-router: 4.0.14_vue@3.2.31 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-palette/2.0.0-beta.36: + resolution: {integrity: sha512-37D1uwX1j91niSu6f//26azS18FSD3g93NJs8LM3HAim4XtzCRaFSnI90MNG2++4Aelx2SSx86M4OjVdb1oCKw==} + dependencies: + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/utils': 2.0.0-beta.35 + chokidar: 3.5.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-prismjs/2.0.0-beta.36: + resolution: {integrity: sha512-xQ+Qa8ODt3K5blEZa2THTmXFO5/RrBjAgkk0u1JmPdVB8FoQAjdSaxZIs9vTBwCMCIexd6c3cC+MaPT2OVrgdA==} + dependencies: + '@vuepress/core': 2.0.0-beta.36 + prismjs: 1.27.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-search/2.0.0-beta.36: + resolution: {integrity: sha512-UMtWH5h9wXiZgram2w5m/4Ni5R/8w+G/r22pBdBuqB1KMOUO473EmgOWgxqAsT3DLvOgevfmxQvp/OcEQv9Esw==} + dependencies: + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/shared': 2.0.0-beta.35 + '@vuepress/utils': 2.0.0-beta.35 + chokidar: 3.5.3 + vue: 3.2.31 + vue-router: 4.0.14_vue@3.2.31 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-theme-data/2.0.0-beta.36: + resolution: {integrity: sha512-1Fxj7F0rIARYa/gQmsUql3f7wPF3ML4Fs6kcPHXYll7ZNDLR1OBw9HIGJ7lW4qx37f6YfYs2RjefAuwkVFUn/A==} + dependencies: + '@vue/devtools-api': 6.1.3 + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/shared': 2.0.0-beta.35 + '@vuepress/utils': 2.0.0-beta.35 + vue: 3.2.31 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/shared/2.0.0-beta.35: + resolution: {integrity: sha512-sU+ekNDv22YG16B1XmZyMD+A94QbAUgTp5FTs+X2POU9UQCIZCuFhgTM9TfAnSgD/6lnbp2Aljwg5fJAidPQmw==} + dependencies: + '@vue/shared': 3.2.31 + dev: true + + /@vuepress/theme-default/2.0.0-beta.36: + resolution: {integrity: sha512-3QqRL96MzKDamHo5bw9ldO2DHTxE+nwEHv1u2PsZusyMRoxyP1h2wPFHPhGaR+fhxFC9Ou9dOq4Ay2xiIU1piA==} + dependencies: + '@vuepress/client': 2.0.0-beta.35 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/plugin-active-header-links': 2.0.0-beta.36 + '@vuepress/plugin-back-to-top': 2.0.0-beta.36 + '@vuepress/plugin-container': 2.0.0-beta.36 + '@vuepress/plugin-external-link-icon': 2.0.0-beta.36 + '@vuepress/plugin-git': 2.0.0-beta.36 + '@vuepress/plugin-medium-zoom': 2.0.0-beta.36 + '@vuepress/plugin-nprogress': 2.0.0-beta.36 + '@vuepress/plugin-palette': 2.0.0-beta.36 + '@vuepress/plugin-prismjs': 2.0.0-beta.36 + '@vuepress/plugin-theme-data': 2.0.0-beta.36 + '@vuepress/shared': 2.0.0-beta.35 + '@vuepress/utils': 2.0.0-beta.35 + '@vueuse/core': 7.7.1_vue@3.2.31 + sass: 1.49.9 + sass-loader: 12.6.0_sass@1.49.9 + vue: 3.2.31 + vue-router: 4.0.14_vue@3.2.31 + transitivePeerDependencies: + - '@vue/composition-api' + - fibers + - node-sass + - sass-embedded + - supports-color + - webpack + dev: true + + /@vuepress/utils/2.0.0-beta.35: + resolution: {integrity: sha512-359RVp8T5w+OB/rKy3DYBFqrH98IDWxiB2pf1Z9vgUA54p5xWBbvmh5GwIAfz1PDjpC5BOIk1b1/03VgcJSZFg==} + dependencies: + '@types/debug': 4.1.7 + '@types/fs-extra': 9.0.13 + '@types/hash-sum': 1.0.0 + '@vuepress/shared': 2.0.0-beta.35 + chalk: 4.1.2 + debug: 4.3.3 + fs-extra: 10.0.1 + globby: 11.1.0 + hash-sum: 2.0.0 + ora: 5.4.1 + upath: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@vueuse/core/7.7.1_vue@3.2.31: + resolution: {integrity: sha512-PRRgbATMpoeUmkCEBtUeJgOwtew8s+4UsEd+Pm7MhkjL2ihCNrSqxNVtM6NFE4uP2sWnkGcZpCjPuNSxowJ1Ow==} + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + dependencies: + '@vueuse/shared': 7.7.1_vue@3.2.31 + vue: 3.2.31 + vue-demi: 0.12.4_vue@3.2.31 + dev: true + + /@vueuse/shared/7.7.1_vue@3.2.31: + resolution: {integrity: sha512-rN2qd22AUl7VdBxihagWyhUNHCyVk9IpvBTTfHoLH9G7rGE552X1f+zeCfehuno0zXif13jPw+icW/wn2a0rnQ==} + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + dependencies: + vue: 3.2.31 + vue-demi: 0.12.4_vue@3.2.31 + dev: true + /abbrev/1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: false @@ -78,15 +533,42 @@ packages: picomatch: 2.3.1 dev: true + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + /arrify/1.0.1: resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} engines: {node: '>=0.10.0'} dev: true + /autoprefixer/10.4.4_postcss@8.4.12: + resolution: {integrity: sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.20.2 + caniuse-lite: 1.0.30001320 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.12 + postcss-value-parser: 4.2.0 + dev: true + /axios/0.25.0: resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} dependencies: @@ -98,11 +580,23 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + /bluebird/2.11.0: resolution: {integrity: sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=} dev: true @@ -124,15 +618,43 @@ packages: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true + /browserslist/4.20.2: + resolution: {integrity: sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001320 + electron-to-chromium: 1.4.97 + escalade: 3.1.1 + node-releases: 2.0.2 + picocolors: 1.0.0 + dev: true + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /cac/6.7.12: + resolution: {integrity: sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==} + engines: {node: '>=8'} + dev: true + /camelcase/6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true + /caniuse-lite/1.0.30001320: + resolution: {integrity: sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==} + dev: true + /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -156,6 +678,18 @@ packages: fsevents: 2.3.2 dev: true + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-spinners/2.6.1: + resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} + engines: {node: '>=6'} + dev: true + /cliui/7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -164,6 +698,11 @@ packages: wrap-ansi: 7.0.0 dev: true + /clone/1.0.4: + resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=} + engines: {node: '>=0.8'} + dev: true + /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -189,6 +728,51 @@ packages: proto-list: 1.2.4 dev: false + /connect-history-api-fallback/1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /css-tree/2.0.4: + resolution: {integrity: sha512-b4IS9ZUMtGBiNjzYbcj9JhYbyei99R3ai2CSxlu8GQDnoPA/P+NU85hAm0eKDc/Zp660rpK6tFJQ2OSdacMHVg==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.23 + source-map-js: 1.0.2 + dev: true + + /csso/5.0.3: + resolution: {integrity: sha512-93gBHTJ6EQlLNhIX5Ho8VAJD2t2T2wg1xHDjbIUm/oQ7iFiSUTo9jSojiQK0pEZ3lMhYDrQO7Rcd70M68+VrtA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + css-tree: 2.0.4 + dev: true + + /csstype/2.6.20: + resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} + dev: true + + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + /debug/4.3.3_supports-color@8.1.1: resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} @@ -207,6 +791,12 @@ packages: engines: {node: '>=10'} dev: true + /defaults/1.0.3: + resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=} + dependencies: + clone: 1.0.4 + dev: true + /diff/3.5.0: resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} engines: {node: '>=0.3.1'} @@ -217,6 +807,13 @@ packages: engines: {node: '>=0.3.1'} dev: true + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + /editorconfig/0.15.3: resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} hasBin: true @@ -227,10 +824,392 @@ packages: sigmund: 1.0.1 dev: false + /electron-to-chromium/1.4.97: + resolution: {integrity: sha512-vqSu7Qn6o5E1uAJQxmq2U69aBhBTxUAXMuT5Sm3jj8kEJciuUcKciktLuTPFSRlwSdNyeu9qah8Nzy9JyxefCw==} + dev: true + /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true + /entities/2.1.0: + resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} + dev: true + + /envinfo/7.8.1: + resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esbuild-android-64/0.14.28: + resolution: {integrity: sha512-A52C3zq+9tNwCqZ+4kVLBxnk/WnrYM8P2+QNvNE9B6d2OVPs214lp3g6UyO+dKDhUdefhfPCuwkP8j2A/+szNA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.13.15: + resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.28: + resolution: {integrity: sha512-sm0fDEGElZhMC3HLZeECI2juE4aG7uPfMBMqNUhy9CeX399Pz8rC6e78OXMXInGjSdEAwQmCOHmfsP7uv3Q8rA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.13.15: + resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.14.28: + resolution: {integrity: sha512-nzDd7mQ44FvsFHtOafZdBgn3Li5SMsnMnoz1J2MM37xJmR3wGNTFph88KypjHgWqwbxCI7MXS1U+sN4qDeeW6Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.13.15: + resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.14.28: + resolution: {integrity: sha512-XEq/bLR/glsUl+uGrBimQzOVs/CmwI833fXUhP9xrLI3IJ+rKyrZ5IA8u+1crOEf1LoTn8tV+hInmX6rGjbScw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.13.15: + resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.14.28: + resolution: {integrity: sha512-rTKLgUj/HEcPeE5XZ7IZwWpFx7IWMfprN7QRk/TUJE1s1Ipb58esboIesUpjirJz/BwrgHq+FDG9ChAI8dZAtQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.13.15: + resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.14.28: + resolution: {integrity: sha512-sBffxD1UMOsB7aWMoExmipycjcy3HJGwmqE4GQZUTZvdiH4GhjgUiVdtPyt7kSCdL40JqnWQJ4b1l8Y51oCF4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.13.15: + resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.14.28: + resolution: {integrity: sha512-+Wxidh3fBEQ9kHcCsD4etlBTMb1n6QY2uXv3rFhVn88CY/JP782MhA57/ipLMY4kOLeSKEuFGN4rtjHuhmRMig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.13.15: + resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.14.28: + resolution: {integrity: sha512-7+xgsC4LvR6cnzaBdiljNnPDjbkwzahogN+S9uy9AoYw7ZjPnnXc6sjQAVCbqGb7MEgrWdpa6u/Tao79i4lWxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.13.15: + resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.14.28: + resolution: {integrity: sha512-L5isjmlLbh9E0WVllXiVETbScgMbth/+XkXQii1WwgO1RvLIfaGrVFz8d2n6EH/ImtgYxPYGx+OcvIKQBc91Rg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.13.15: + resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.14.28: + resolution: {integrity: sha512-EjRHgwg+kgXABzyoPGPOPg4d5wZqRnZ/ZAxBDzLY+i6DS8OUfTSlZHWIOZzU4XF7125WxRBg9ULbrFJBl+57Eg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.13.15: + resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.14.28: + resolution: {integrity: sha512-krx9SSg7yfiUKk64EmjefOyiEF6nv2bRE4um/LiTaQ6Y/6FP4UF3/Ou/AxZVyR154uSRq63xejcAsmswXAYRsw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.13.15: + resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.14.28: + resolution: {integrity: sha512-LD0Xxu9g+DNuhsEBV5QuVZ4uKVBMup0xPIruLweuAf9/mHXFnaCuNXUBF5t0DxKl7GQ5MSioKtnb92oMo+QXEw==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.14.28: + resolution: {integrity: sha512-L/DWfRh2P0vxq4Y+qieSNXKGdMg+e9Qe8jkbN2/8XSGYDTPzO2OcAxSujob4qIh7iSl+cknbXV+BvH0YFR0jbg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.14.28: + resolution: {integrity: sha512-rrgxmsbmL8QQknWGnAL9bGJRQYLOi2AzXy5OTwfhxnj9eqjo5mSVbJXjgiq5LPUAMQZGdPH5yaNK0obAXS81Zw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.13.15: + resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.14.28: + resolution: {integrity: sha512-h8wntIyOR8/xMVVM6TvJxxWKh4AjmLK87IPKpuVi8Pq0kyk0RMA+eo4PFGk5j2XK0D7dj8PcSF5NSlP9kN/j0A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.13.15: + resolution: {integrity: sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.14.28: + resolution: {integrity: sha512-HBv18rVapbuDx52/fhZ/c/w6TXyaQAvRxiDDn5Hz/pBcwOs3cdd2WxeIKlWmDoqm2JMx5EVlq4IWgoaRX9mVkw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.13.15: + resolution: {integrity: sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.14.28: + resolution: {integrity: sha512-zlIxePhZxKYheR2vBCgPVvTixgo/ozOfOMoP6RZj8dxzquU1NgeyhjkcRXucbLCtmoNJ+i4PtWwPZTLuDd3bGg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.13.15: + resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.14.28: + resolution: {integrity: sha512-am9DIJxXlld1BOAY/VlvBQHMUCPL7S3gB/lnXIY3M4ys0gfuRqPf4EvMwZMzYUbFKBY+/Qb8SRgPRRGhwnJ8Kg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.13.15: + resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.14.28: + resolution: {integrity: sha512-78PhySDnmRZlsPNp/W/5Fim8iivlBQQxfhBFIqR7xwvfDmCFUSByyMKP7LCHgNtb04yNdop8nJJkJaQ8Xnwgiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.13.15: + resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.14.28: + resolution: {integrity: sha512-VhXGBTo6HELD8zyHXynV6+L2jWx0zkKnGx4TmEdSBK7UVFACtOyfUqpToG0EtnYyRZ0HESBhzPSVpP781ovmvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.13.15: + resolution: {integrity: sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==} + hasBin: true + requiresBuild: true + optionalDependencies: + esbuild-android-arm64: 0.13.15 + esbuild-darwin-64: 0.13.15 + esbuild-darwin-arm64: 0.13.15 + esbuild-freebsd-64: 0.13.15 + esbuild-freebsd-arm64: 0.13.15 + esbuild-linux-32: 0.13.15 + esbuild-linux-64: 0.13.15 + esbuild-linux-arm: 0.13.15 + esbuild-linux-arm64: 0.13.15 + esbuild-linux-mips64le: 0.13.15 + esbuild-linux-ppc64le: 0.13.15 + esbuild-netbsd-64: 0.13.15 + esbuild-openbsd-64: 0.13.15 + esbuild-sunos-64: 0.13.15 + esbuild-windows-32: 0.13.15 + esbuild-windows-64: 0.13.15 + esbuild-windows-arm64: 0.13.15 + dev: true + + /esbuild/0.14.28: + resolution: {integrity: sha512-YLNprkCcMVKQ5sekmCKEQ3Obu/L7s6+iij38xNKyBeSmSsTWur4Ky/9zB3XIGT8SCJITG/bZwAR2l7YOAXch4Q==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + esbuild-android-64: 0.14.28 + esbuild-android-arm64: 0.14.28 + esbuild-darwin-64: 0.14.28 + esbuild-darwin-arm64: 0.14.28 + esbuild-freebsd-64: 0.14.28 + esbuild-freebsd-arm64: 0.14.28 + esbuild-linux-32: 0.14.28 + esbuild-linux-64: 0.14.28 + esbuild-linux-arm: 0.14.28 + esbuild-linux-arm64: 0.14.28 + esbuild-linux-mips64le: 0.14.28 + esbuild-linux-ppc64le: 0.14.28 + esbuild-linux-riscv64: 0.14.28 + esbuild-linux-s390x: 0.14.28 + esbuild-netbsd-64: 0.14.28 + esbuild-openbsd-64: 0.14.28 + esbuild-sunos-64: 0.14.28 + esbuild-windows-32: 0.14.28 + esbuild-windows-64: 0.14.28 + esbuild-windows-arm64: 0.14.28 + dev: true + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -241,6 +1220,55 @@ packages: engines: {node: '>=10'} dev: true + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /extend-shallow/2.0.1: + resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /fast-glob/3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -271,6 +1299,19 @@ packages: optional: true dev: false + /fraction.js/4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: true + + /fs-extra/10.0.1: + resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.9 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs.realpath/1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} @@ -282,11 +1323,20 @@ packages: dev: true optional: true + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -304,6 +1354,32 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.11 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graceful-fs/4.2.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} + dev: true + + /gray-matter/4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: true + /growl/1.10.5: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} engines: {node: '>=4.x'} @@ -314,11 +1390,40 @@ packages: engines: {node: '>=8'} dev: true + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /hash-sum/2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + dev: true + /he/1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + dev: true + + /immutable/4.0.0: + resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==} + dev: true + /inflight/1.0.6: resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: @@ -339,6 +1444,17 @@ packages: binary-extensions: 2.2.0 dev: true + /is-core-module/2.8.1: + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + dependencies: + has: 1.0.3 + dev: true + + /is-extendable/0.1.1: + resolution: {integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=} + engines: {node: '>=0.10.0'} + dev: true + /is-extglob/2.1.1: resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} engines: {node: '>=0.10.0'} @@ -356,6 +1472,11 @@ packages: is-extglob: 2.1.1 dev: true + /is-interactive/1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -366,6 +1487,11 @@ packages: engines: {node: '>=8'} dev: true + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + /is-unicode-supported/0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -386,6 +1512,14 @@ packages: nopt: 5.0.0 dev: false + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + /js-yaml/4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -401,6 +1535,30 @@ packages: dev: true optional: true + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.9 + dev: true + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /klona/2.0.5: + resolution: {integrity: sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==} + engines: {node: '>= 8'} + dev: true + + /linkify-it/3.0.3: + resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} + dependencies: + uc.micro: 1.0.6 + dev: true + /locate-path/6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -423,10 +1581,79 @@ packages: yallist: 2.1.2 dev: false + /magic-string/0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /make-error/1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true + /markdown-it-anchor/8.4.1_d643ca6eb40ae68ab966a77bead78073: + resolution: {integrity: sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==} + peerDependencies: + '@types/markdown-it': '*' + markdown-it: '*' + dependencies: + '@types/markdown-it': 12.2.3 + markdown-it: 12.3.2 + dev: true + + /markdown-it-container/3.0.0: + resolution: {integrity: sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==} + dev: true + + /markdown-it-emoji/2.0.0: + resolution: {integrity: sha512-39j7/9vP/CPCKbEI44oV8yoPJTpvfeReTn/COgRhSpNrjWF3PfP/JUxxB0hxV6ynOY8KH8Y8aX9NMDdo6z+6YQ==} + dev: true + + /markdown-it/12.3.2: + resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 2.1.0 + linkify-it: 3.0.3 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: true + + /mdn-data/2.0.23: + resolution: {integrity: sha512-IonVb7pfla2U4zW8rc7XGrtgq11BvYeCxWN8HS+KFBnLDE7XDK9AAMVhRuG6fj9BBsjc69Fqsp6WEActEdNTDQ==} + dev: true + + /mdurl/1.0.1: + resolution: {integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=} + dev: true + + /medium-zoom/1.0.6: + resolution: {integrity: sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==} + dev: true + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -505,6 +1732,14 @@ packages: hasBin: true dev: true + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /node-releases/2.0.2: + resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} + dev: true + /nopt/5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -518,11 +1753,49 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-range/0.1.2: + resolution: {integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /nprogress/0.2.0: + resolution: {integrity: sha1-y480xTIT2JVyP8urkH6UIq28r7E=} + dev: true + /once/1.4.0: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /ora/5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + /p-limit/3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -546,11 +1819,57 @@ packages: resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} engines: {node: '>=0.10.0'} + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true + /postcss-csso/6.0.0_postcss@8.4.12: + resolution: {integrity: sha512-LsrU+LVR0mNIYauoTEbYVC81i+yXcGWa9kqW6Lvm+gYUZTaNTJmJT6Dbv+fqT8gOnwXAH1RV+5RXvAVoRtwO+g==} + engines: {node: ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + csso: 5.0.3 + postcss: 8.4.12 + dev: true + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss/8.4.12: + resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.1 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /prismjs/1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + dev: true + /proto-list/1.2.4: resolution: {integrity: sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=} dev: false @@ -568,12 +1887,25 @@ packages: engines: {node: '>=6'} dev: false + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -586,10 +1918,88 @@ packages: engines: {node: '>=0.10.0'} dev: true + /resolve/1.22.0: + resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + hasBin: true + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rollup/2.70.1: + resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /sass-loader/12.6.0_sass@1.49.9: + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.5 + neo-async: 2.6.2 + sass: 1.49.9 + dev: true + + /sass/1.49.9: + resolution: {integrity: sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.0.0 + source-map-js: 1.0.2 + dev: true + + /section-matter/1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: true + /semaphore/1.1.0: resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} engines: {node: '>=0.8.0'} @@ -606,10 +2016,36 @@ packages: randombytes: 2.1.0 dev: true + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + /sigmund/1.0.1: resolution: {integrity: sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=} dev: false + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -622,6 +2058,14 @@ packages: engines: {node: '>=0.10.0'} dev: true + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /sprintf-js/1.0.3: + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + dev: true + /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -631,6 +2075,12 @@ packages: strip-ansi: 6.0.1 dev: true + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -638,12 +2088,22 @@ packages: ansi-regex: 5.0.1 dev: true + /strip-bom-string/1.0.0: + resolution: {integrity: sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=} + engines: {node: '>=0.10.0'} + dev: true + /strip-bom/3.0.0: resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} engines: {node: '>=4'} dev: true optional: true + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -663,6 +2123,11 @@ packages: has-flag: 4.0.0 dev: true + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -670,6 +2135,10 @@ packages: is-number: 7.0.0 dev: true + /toml/3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + dev: true + /tough-cookie/4.0.0: resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} engines: {node: '>=6'} @@ -679,6 +2148,10 @@ packages: universalify: 0.1.2 dev: false + /ts-debounce/4.0.0: + resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} + dev: true + /ts-mocha/9.0.2_mocha@9.2.2: resolution: {integrity: sha512-WyQjvnzwrrubl0JT7EC1yWmNpcsU3fOuBFfdps30zbmFBgKniSaSOyZMZx+Wq7kytUs5CY+pEbSYEbGfIKnXTw==} engines: {node: '>= 6.X.X'} @@ -724,17 +2197,136 @@ packages: hasBin: true dev: true + /uc.micro/1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: true + /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} dev: false + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /upath/2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + dev: true + /validate-any/1.3.1: resolution: {integrity: sha512-33HGXUZuJlrn4a3+21IRCBhY51Grbf1MzdUCzG1nnUtCcBphLBQ+Vi79p3E64eOjHz5C6QvXBYFE7JRVHGWQ4A==} dependencies: js-beautify: 1.14.0 dev: false + /vite/2.8.6: + resolution: {integrity: sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug==} + engines: {node: '>=12.2.0'} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + dependencies: + esbuild: 0.14.28 + postcss: 8.4.12 + resolve: 1.22.0 + rollup: 2.70.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vue-demi/0.12.4_vue@3.2.31: + resolution: {integrity: sha512-ztPDkFt0TSUdoq1ZI6oD730vgztBkiByhUW7L1cOTebiSBqSYfSQgnhYakYigBkyAybqCTH7h44yZuDJf2xILQ==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.2.31 + dev: true + + /vue-router/4.0.14_vue@3.2.31: + resolution: {integrity: sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@vue/devtools-api': 6.1.3 + vue: 3.2.31 + dev: true + + /vue/3.2.31: + resolution: {integrity: sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==} + dependencies: + '@vue/compiler-dom': 3.2.31 + '@vue/compiler-sfc': 3.2.31 + '@vue/runtime-dom': 3.2.31 + '@vue/server-renderer': 3.2.31_vue@3.2.31 + '@vue/shared': 3.2.31 + dev: true + + /vuepress-vite/2.0.0-beta.36: + resolution: {integrity: sha512-KbN7HDhaCLVB7/YmJDydQClUjMBybLtBpB376mi5fD16RFBzHwMGI7zopb4lu7Nmj2BnvLI9kpottv9zuOJYLQ==} + hasBin: true + dependencies: + '@vuepress/bundler-vite': 2.0.0-beta.36 + '@vuepress/cli': 2.0.0-beta.36 + '@vuepress/core': 2.0.0-beta.36 + '@vuepress/theme-default': 2.0.0-beta.36 + transitivePeerDependencies: + - '@vue/composition-api' + - fibers + - less + - node-sass + - sass + - sass-embedded + - stylus + - supports-color + - webpack + dev: true + + /vuepress/2.0.0-beta.36: + resolution: {integrity: sha512-EObFjxn91cMRZ+9cgDGjKaTHaCH4NChMqUIGRnPTrIlJfKa4eX4aS0GzPtHSy+L1fKgNnDyUq67fW8q3hrHVjA==} + hasBin: true + dependencies: + vuepress-vite: 2.0.0-beta.36 + transitivePeerDependencies: + - '@vue/composition-api' + - fibers + - less + - node-sass + - sass + - sass-embedded + - stylus + - supports-color + - webpack + dev: true + + /wcwidth/1.0.1: + resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} + dependencies: + defaults: 1.0.3 + dev: true + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} diff --git a/src/YTMusic.ts b/src/YTMusic.ts index b49d52f..34c137a 100644 --- a/src/YTMusic.ts +++ b/src/YTMusic.ts @@ -232,7 +232,7 @@ export default class YTMusic { * * @param query Query string */ - public async searchSong(query: string): Promise { + public async searchSongs(query: string): Promise { const searchData = await this.constructRequest("search", { query, params: "Eg-KAQwIARAAGAAgACgAMABqChAEEAMQCRAFEAo%3D" @@ -248,7 +248,7 @@ export default class YTMusic { * * @param query Query string */ - public async searchVideo(query: string): Promise { + public async searchVideos(query: string): Promise { const searchData = await this.constructRequest("search", { query, params: "Eg-KAQwIABABGAAgACgAMABqChAEEAMQCRAFEAo%3D" @@ -264,7 +264,7 @@ export default class YTMusic { * * @param query Query string */ - public async searchArtist(query: string): Promise { + public async searchArtists(query: string): Promise { const searchData = await this.constructRequest("search", { query, params: "Eg-KAQwIABAAGAAgASgAMABqChAEEAMQCRAFEAo%3D" @@ -280,7 +280,7 @@ export default class YTMusic { * * @param query Query string */ - public async searchAlbum(query: string): Promise { + public async searchAlbums(query: string): Promise { const searchData = await this.constructRequest("search", { query, params: "Eg-KAQwIABAAGAEgACgAMABqChAEEAMQCRAFEAo%3D" @@ -296,7 +296,7 @@ export default class YTMusic { * * @param query Query string */ - public async searchPlaylist(query: string): Promise { + public async searchPlaylists(query: string): Promise { const searchData = await this.constructRequest("search", { query, params: "Eg-KAQwIABAAGAAgACgBMABqChAEEAMQCRAFEAo%3D" diff --git a/src/__tests__/traversing.spec.ts b/src/__tests__/traversing.spec.ts index 15af061..b65c96d 100644 --- a/src/__tests__/traversing.spec.ts +++ b/src/__tests__/traversing.spec.ts @@ -37,27 +37,27 @@ queries.forEach(query => { }) it("Search Songs", async () => { - const songs = await ytmusic.searchSong(query) + const songs = await ytmusic.searchSongs(query) expect(songs, LIST(SONG_DETAILED)) }) it("Search Videos", async () => { - const videos = await ytmusic.searchVideo(query) + const videos = await ytmusic.searchVideos(query) expect(videos, LIST(VIDEO_DETAILED)) }) it("Search Artists", async () => { - const artists = await ytmusic.searchArtist(query) + const artists = await ytmusic.searchArtists(query) expect(artists, LIST(ARTIST_DETAILED)) }) it("Search Albums", async () => { - const albums = await ytmusic.searchAlbum(query) + const albums = await ytmusic.searchAlbums(query) expect(albums, LIST(ALBUM_DETAILED)) }) it("Search Playlists", async () => { - const playlists = await ytmusic.searchPlaylist(query) + const playlists = await ytmusic.searchPlaylists(query) expect(playlists, LIST(PLAYLIST_FULL)) }) @@ -70,49 +70,49 @@ queries.forEach(query => { }) it("Get details of the first song result", async () => { - const songs = await ytmusic.searchSong(query) + const songs = await ytmusic.searchSongs(query) const song = await ytmusic.getSong(songs[0]!.videoId) expect(song, SONG_FULL) }) it("Get details of the first video result", async () => { - const videos = await ytmusic.searchVideo(query) + const videos = await ytmusic.searchVideos(query) const video = await ytmusic.getVideo(videos[0]!.videoId) expect(video, VIDEO_FULL) }) it("Get details of the first artist result", async () => { - const artists = await ytmusic.searchArtist(query) + const artists = await ytmusic.searchArtists(query) const artist = await ytmusic.getArtist(artists[0]!.artistId) expect(artist, ARTIST_FULL) }) it("Get the songs of the first artist result", async () => { - const artists = await ytmusic.searchArtist(query) + const artists = await ytmusic.searchArtists(query) const songs = await ytmusic.getArtistSongs(artists[0]!.artistId) expect(songs, LIST(SONG_DETAILED)) }) it("Get the albums of the first artist result", async () => { - const artists = await ytmusic.searchArtist(query) + const artists = await ytmusic.searchArtists(query) const albums = await ytmusic.getArtistAlbums(artists[0]!.artistId) expect(albums, LIST(ALBUM_DETAILED)) }) it("Get details of the first album result", async () => { - const albums = await ytmusic.searchAlbum(query) + const albums = await ytmusic.searchAlbums(query) const album = await ytmusic.getAlbum(albums[0]!.albumId) expect(album, ALBUM_FULL) }) it("Get details of the first playlist result", async () => { - const playlists = await ytmusic.searchPlaylist(query) + const playlists = await ytmusic.searchPlaylists(query) const playlist = await ytmusic.getPlaylist(playlists[0]!.playlistId) expect(playlist, PLAYLIST_FULL) }) it("Get the videos of the first playlist result", async () => { - const playlists = await ytmusic.searchPlaylist(query) + const playlists = await ytmusic.searchPlaylists(query) const videos = await ytmusic.getPlaylistVideos(playlists[0]!.playlistId) expect(videos, LIST(PLAYLIST_VIDEO)) })