Compare commits

..

No commits in common. "1281ce8732b10fa2c3e7b264c9cc33a983a7ab60" and "c86ebd19761a7f684467ff9ad12e5f75c8a6478f" have entirely different histories.

101 changed files with 2146 additions and 2729 deletions

View File

@ -20,9 +20,6 @@ dotnet_diagnostic.CA1003.severity = none
dotnet_diagnostic.IDE0130.severity = none dotnet_diagnostic.IDE0130.severity = none
# Unused imports
dotnet_diagnostic.IDE0005.severity = warning
# #
# Sort using and Import directives with System.* appearing first # Sort using and Import directives with System.* appearing first
dotnet_sort_system_directives_first = true dotnet_sort_system_directives_first = true

View File

@ -18,10 +18,7 @@ jobs:
dotnet-version: "6.x" dotnet-version: "6.x"
- uses: actions/setup-dotnet@v3 - uses: actions/setup-dotnet@v3
with: with:
dotnet-version: "7.x" dotnet-version: "7.0.203"
- uses: actions/setup-dotnet@v3
with:
dotnet-version: "8.x"
- name: Set RELEASE_VERSION - name: Set RELEASE_VERSION
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Restore Packages - name: Restore Packages
@ -57,14 +54,12 @@ jobs:
zip -j SpotifyAPI.Web-net5.0.zip SpotifyAPI.Web/bin/Release/net5.0/* zip -j SpotifyAPI.Web-net5.0.zip SpotifyAPI.Web/bin/Release/net5.0/*
zip -j SpotifyAPI.Web-net6.0.zip SpotifyAPI.Web/bin/Release/net6.0/* zip -j SpotifyAPI.Web-net6.0.zip SpotifyAPI.Web/bin/Release/net6.0/*
zip -j SpotifyAPI.Web-net7.0.zip SpotifyAPI.Web/bin/Release/net7.0/* zip -j SpotifyAPI.Web-net7.0.zip SpotifyAPI.Web/bin/Release/net7.0/*
zip -j SpotifyAPI.Web-net8.0.zip SpotifyAPI.Web/bin/Release/net8.0/*
zip -j SpotifyAPI.Web.Auth-netstandard2.0.zip SpotifyAPI.Web.Auth/bin/Release/netstandard2.0/* zip -j SpotifyAPI.Web.Auth-netstandard2.0.zip SpotifyAPI.Web.Auth/bin/Release/netstandard2.0/*
zip -j SpotifyAPI.Web.Auth-netstandard2.1.zip SpotifyAPI.Web.Auth/bin/Release/netstandard2.1/* zip -j SpotifyAPI.Web.Auth-netstandard2.1.zip SpotifyAPI.Web.Auth/bin/Release/netstandard2.1/*
zip -j SpotifyAPI.Web.Auth-net5.0.zip SpotifyAPI.Web.Auth/bin/Release/net5.0/* zip -j SpotifyAPI.Web.Auth-net5.0.zip SpotifyAPI.Web.Auth/bin/Release/net5.0/*
zip -j SpotifyAPI.Web.Auth-net6.0.zip SpotifyAPI.Web.Auth/bin/Release/net6.0/* zip -j SpotifyAPI.Web.Auth-net6.0.zip SpotifyAPI.Web.Auth/bin/Release/net6.0/*
zip -j SpotifyAPI.Web.Auth-net7.0.zip SpotifyAPI.Web.Auth/bin/Release/net7.0/* zip -j SpotifyAPI.Web.Auth-net7.0.zip SpotifyAPI.Web.Auth/bin/Release/net7.0/*
zip -j SpotifyAPI.Web.Auth-net8.0.zip SpotifyAPI.Web.Auth/bin/Release/net8.0/*
gh release upload "$RELEASE_VERSION" \ gh release upload "$RELEASE_VERSION" \
"SpotifyAPI.Web-netstandard2.0.zip" \ "SpotifyAPI.Web-netstandard2.0.zip" \
@ -72,12 +67,10 @@ jobs:
"SpotifyAPI.Web-net5.0.zip" \ "SpotifyAPI.Web-net5.0.zip" \
"SpotifyAPI.Web-net6.0.zip" \ "SpotifyAPI.Web-net6.0.zip" \
"SpotifyAPI.Web-net7.0.zip" \ "SpotifyAPI.Web-net7.0.zip" \
"SpotifyAPI.Web-net8.0.zip" \
"SpotifyAPI.Web.Auth-netstandard2.0.zip" \ "SpotifyAPI.Web.Auth-netstandard2.0.zip" \
"SpotifyAPI.Web.Auth-netstandard2.1.zip" \ "SpotifyAPI.Web.Auth-netstandard2.1.zip" \
"SpotifyAPI.Web.Auth-net5.0.zip" \ "SpotifyAPI.Web.Auth-net5.0.zip" \
"SpotifyAPI.Web.Auth-net6.0.zip" \ "SpotifyAPI.Web.Auth-net6.0.zip" \
"SpotifyAPI.Web.Auth-net7.0.zip" \ "SpotifyAPI.Web.Auth-net7.0.zip"
"SpotifyAPI.Web.Auth-net8.0.zip"
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -54,8 +54,3 @@ By requesting just the track name from the items, we don't have any kind of type
playlistGetItemsRequest.Fields.Add("items(track(name,type))"); playlistGetItemsRequest.Fields.Add("items(track(name,type))");
``` ```
If you're paginating a request with a subset of fields and you don't include the field `next`, we assume there is only one page and your results will be limited. To fix this, you must include `next` as one of the fields:
```csharp
playlistGetItemsRequest.Fields.Add("next, items(track(name,type))");
```

View File

@ -87,9 +87,10 @@ Send a PR via the "Edit this page" link at the end of the page!
> Sortify is a powerful tool that aims to help people organize their Spotify libraries. It allows you to sort existing playlists or create new ones. When creating, you have an option to merge or split the playlists. It also removes any track duplicates from them. All that, while being very simple and friendly to use. > Sortify is a powerful tool that aims to help people organize their Spotify libraries. It allows you to sort existing playlists or create new ones. When creating, you have an option to merge or split the playlists. It also removes any track duplicates from them. All that, while being very simple and friendly to use.
### [Spotify Content Availability Checker](https://github.com/SoNearSonar/SpotifyContentAvailabilityChecker) by [@SoNearSonar](https://github.com/SoNearSonar/)
> Spotify Content Availability Checker is a program that lets you check the country availability of songs, albums, and podcasts on Spotify. The program also displays basic information about the content you enter in. ### [Spotify Song Availability Checker](https://github.com/CasualHonest/SpotifySongAvailabilityChecker) by [@CasualHonest](https://github.com/CasualHonest/)
> Spotify Song Availability Checker (SSAC) is a simple and lightweight tool that lets you check the availability of songs and albums on Spotify, giving you basic information about what you enter and displaying the available markets for said entry.
### [ConcertBuddy](https://github.com/skuill/ConcertBuddy) by [@skuill](https://github.com/skuill) ### [ConcertBuddy](https://github.com/skuill/ConcertBuddy) by [@skuill](https://github.com/skuill)
@ -97,9 +98,3 @@ Send a PR via the "Edit this page" link at the end of the page!
### [SpotifiCLI](https://github.com/kollibroman/SpotifyCLI) by [@kollibroman](https://github.com/kollibroman) ### [SpotifiCLI](https://github.com/kollibroman/SpotifyCLI) by [@kollibroman](https://github.com/kollibroman)
> Another cross-platform cli tool to interact with spotify api with focus on simplicity > Another cross-platform cli tool to interact with spotify api with focus on simplicity
### [BeatSpy](https://github.com/braddotwav/BeatSpy) by [@braddotwav](https://github.com/braddotwav)
> BeatSpy lets music producers and enthusiasts search for songs and instantly access valuable details like tempo, key, loudness, and more
### [SpotifyGPX](https://github.com/TheBoyLeastLikelyTo/SpotifyGPX) by [@TheBoyLeastLikelyTo](https://github.com/TheBoyLeastLikelyTo)
> SpotifyGPX lets you retrace the steps of a road trip by taking the songs you listened to and a tracked series of points, and pairing the two sets of data.

View File

@ -14,10 +14,10 @@
} }
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "^3.1.1", "@docusaurus/core": "^3.0.0",
"@docusaurus/preset-classic": "^3.1.1", "@docusaurus/preset-classic": "^3.0.0",
"@mdx-js/react": "^3.0.0", "@mdx-js/react": "^3.0.0",
"classnames": "^2.5.1", "classnames": "^2.3.1",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-github-btn": "^1.2.0" "react-github-btn": "^1.2.0"
@ -36,7 +36,7 @@
}, },
"devDependencies": { "devDependencies": {
"import-sort-style-module": "^6.0.0", "import-sort-style-module": "^6.0.0",
"prettier": "^3.2.5", "prettier": "^3.0.3",
"prettier-plugin-import-sort": "^0.0.7" "prettier-plugin-import-sort": "^0.0.7"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@ import TabItem from '@theme/TabItem';
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
import React from 'react'; import React from 'react';
const VERSION = '7.1.1'; const VERSION = '7.0.0';
const installCodeNuget = `Install-Package SpotifyAPI.Web const installCodeNuget = `Install-Package SpotifyAPI.Web
# Optional Auth module, which includes an embedded HTTP Server for OAuth2 # Optional Auth module, which includes an embedded HTTP Server for OAuth2

View File

@ -1,10 +1,7 @@
using System;
using System.Runtime.Serialization;
namespace SpotifyAPI.Web.Auth namespace SpotifyAPI.Web.Auth
{ {
[Serializable] [System.Serializable]
public class AuthException : Exception public class AuthException : System.Exception
{ {
public AuthException(string? error, string? state) public AuthException(string? error, string? state)
{ {
@ -12,12 +9,10 @@ namespace SpotifyAPI.Web.Auth
State = state; State = state;
} }
public AuthException(string message) : base(message) { } public AuthException(string message) : base(message) { }
public AuthException(string message, Exception inner) : base(message, inner) { } public AuthException(string message, System.Exception inner) : base(message, inner) { }
protected AuthException(
#if NET8_0_OR_GREATER System.Runtime.Serialization.SerializationInfo info,
[Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.")] System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
#endif
protected AuthException(SerializationInfo info, StreamingContext context) : base(info, context) { }
public string? Error { get; set; } public string? Error { get; set; }
public string? State { get; set; } public string? State { get; set; }

View File

@ -1,8 +1,10 @@
using System; using System;
using System.Globalization;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Web;
using EmbedIO; using EmbedIO;
using EmbedIO.Actions; using EmbedIO.Actions;

View File

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net8.0;net7.0;net6.0;net5.0;netstandard2.1;netstandard2.0</TargetFrameworks> <TargetFrameworks>net7.0;net6.0;net5.0;netstandard2.1;netstandard2.0</TargetFrameworks>
<LangVersion>9.0</LangVersion> <LangVersion>9.0</LangVersion>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<PackageId>SpotifyAPI.Web.Auth</PackageId> <PackageId>SpotifyAPI.Web.Auth</PackageId>
@ -31,7 +31,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All"/> <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
<PackageReference Include="EmbedIO" Version="3.5.2"> <PackageReference Include="EmbedIO" Version="3.5.2">
<PrivateAssets>None</PrivateAssets> <PrivateAssets>None</PrivateAssets>
</PackageReference> </PackageReference>

View File

@ -1,6 +1,11 @@
using System;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace Example.ASP.Pages namespace Example.ASP.Pages
{ {

View File

@ -2,6 +2,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using SpotifyAPI.Web; using SpotifyAPI.Web;
namespace Example.ASP.Pages namespace Example.ASP.Pages

View File

@ -1,6 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Example.ASP namespace Example.ASP
{ {

View File

@ -1,8 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;

View File

@ -1,6 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Example.ASPBlazor.Data; using Example.ASPBlazor.Data;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;

View File

@ -5,9 +5,9 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.18" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.13" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.4" PrivateAssets="all" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.0" PrivateAssets="all" />
<PackageReference Include="System.Net.Http.Json" Version="8.0.0" /> <PackageReference Include="System.Net.Http.Json" Version="7.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -9,6 +9,6 @@
"dependencies": { "dependencies": {
"axios": "^1.6.0", "axios": "^1.6.0",
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
"express": "^4.19.2" "express": "^4.17.3"
} }
} }

View File

@ -29,40 +29,27 @@ axios@^1.6.0:
form-data "^4.0.0" form-data "^4.0.0"
proxy-from-env "^1.1.0" proxy-from-env "^1.1.0"
body-parser@1.20.2, body-parser@^1.19.0: body-parser@1.19.2, body-parser@^1.19.0:
version "1.20.2" version "1.19.2"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e"
integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==
dependencies: dependencies:
bytes "3.1.2" bytes "3.1.2"
content-type "~1.0.5" content-type "~1.0.4"
debug "2.6.9" debug "2.6.9"
depd "2.0.0" depd "~1.1.2"
destroy "1.2.0" http-errors "1.8.1"
http-errors "2.0.0"
iconv-lite "0.4.24" iconv-lite "0.4.24"
on-finished "2.4.1" on-finished "~2.3.0"
qs "6.11.0" qs "6.9.7"
raw-body "2.5.2" raw-body "2.4.3"
type-is "~1.6.18" type-is "~1.6.18"
unpipe "1.0.0"
bytes@3.1.2: bytes@3.1.2:
version "3.1.2" version "3.1.2"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
call-bind@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
dependencies:
es-define-property "^1.0.0"
es-errors "^1.3.0"
function-bind "^1.1.2"
get-intrinsic "^1.2.4"
set-function-length "^1.2.1"
combined-stream@^1.0.8: combined-stream@^1.0.8:
version "1.0.8" version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@ -77,20 +64,20 @@ content-disposition@0.5.4:
dependencies: dependencies:
safe-buffer "5.2.1" safe-buffer "5.2.1"
content-type@~1.0.4, content-type@~1.0.5: content-type@~1.0.4:
version "1.0.5" version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
cookie-signature@1.0.6: cookie-signature@1.0.6:
version "1.0.6" version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
cookie@0.6.0: cookie@0.4.2:
version "0.6.0" version "0.4.2"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
debug@2.6.9: debug@2.6.9:
version "2.6.9" version "2.6.9"
@ -99,29 +86,20 @@ debug@2.6.9:
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
define-data-property@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
dependencies:
es-define-property "^1.0.0"
es-errors "^1.3.0"
gopd "^1.0.1"
delayed-stream@~1.0.0: delayed-stream@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
depd@2.0.0: depd@~1.1.2:
version "2.0.0" version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
destroy@1.2.0: destroy@~1.0.4:
version "1.2.0" version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
ee-first@1.1.1: ee-first@1.1.1:
version "1.1.1" version "1.1.1"
@ -133,18 +111,6 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
es-define-property@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
dependencies:
get-intrinsic "^1.2.4"
es-errors@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
escape-html@~1.0.3: escape-html@~1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@ -155,60 +121,59 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
express@^4.19.2: express@^4.17.3:
version "4.19.2" version "4.17.3"
resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1"
integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==
dependencies: dependencies:
accepts "~1.3.8" accepts "~1.3.8"
array-flatten "1.1.1" array-flatten "1.1.1"
body-parser "1.20.2" body-parser "1.19.2"
content-disposition "0.5.4" content-disposition "0.5.4"
content-type "~1.0.4" content-type "~1.0.4"
cookie "0.6.0" cookie "0.4.2"
cookie-signature "1.0.6" cookie-signature "1.0.6"
debug "2.6.9" debug "2.6.9"
depd "2.0.0" depd "~1.1.2"
encodeurl "~1.0.2" encodeurl "~1.0.2"
escape-html "~1.0.3" escape-html "~1.0.3"
etag "~1.8.1" etag "~1.8.1"
finalhandler "1.2.0" finalhandler "~1.1.2"
fresh "0.5.2" fresh "0.5.2"
http-errors "2.0.0"
merge-descriptors "1.0.1" merge-descriptors "1.0.1"
methods "~1.1.2" methods "~1.1.2"
on-finished "2.4.1" on-finished "~2.3.0"
parseurl "~1.3.3" parseurl "~1.3.3"
path-to-regexp "0.1.7" path-to-regexp "0.1.7"
proxy-addr "~2.0.7" proxy-addr "~2.0.7"
qs "6.11.0" qs "6.9.7"
range-parser "~1.2.1" range-parser "~1.2.1"
safe-buffer "5.2.1" safe-buffer "5.2.1"
send "0.18.0" send "0.17.2"
serve-static "1.15.0" serve-static "1.14.2"
setprototypeof "1.2.0" setprototypeof "1.2.0"
statuses "2.0.1" statuses "~1.5.0"
type-is "~1.6.18" type-is "~1.6.18"
utils-merge "1.0.1" utils-merge "1.0.1"
vary "~1.1.2" vary "~1.1.2"
finalhandler@1.2.0: finalhandler@~1.1.2:
version "1.2.0" version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
dependencies: dependencies:
debug "2.6.9" debug "2.6.9"
encodeurl "~1.0.2" encodeurl "~1.0.2"
escape-html "~1.0.3" escape-html "~1.0.3"
on-finished "2.4.1" on-finished "~2.3.0"
parseurl "~1.3.3" parseurl "~1.3.3"
statuses "2.0.1" statuses "~1.5.0"
unpipe "~1.0.0" unpipe "~1.0.0"
follow-redirects@^1.15.0: follow-redirects@^1.15.0:
version "1.15.6" version "1.15.4"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf"
integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==
form-data@^4.0.0: form-data@^4.0.0:
version "4.0.0" version "4.0.0"
@ -229,62 +194,15 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
function-bind@^1.1.2: http-errors@1.8.1:
version "1.1.2" version "1.8.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
dependencies: dependencies:
es-errors "^1.3.0" depd "~1.1.2"
function-bind "^1.1.2"
has-proto "^1.0.1"
has-symbols "^1.0.3"
hasown "^2.0.0"
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
dependencies:
get-intrinsic "^1.1.3"
has-property-descriptors@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
dependencies:
es-define-property "^1.0.0"
has-proto@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
has-symbols@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
hasown@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
dependencies:
function-bind "^1.1.2"
http-errors@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
dependencies:
depd "2.0.0"
inherits "2.0.4" inherits "2.0.4"
setprototypeof "1.2.0" setprototypeof "1.2.0"
statuses "2.0.1" statuses ">= 1.5.0 < 2"
toidentifier "1.0.1" toidentifier "1.0.1"
iconv-lite@0.4.24: iconv-lite@0.4.24:
@ -363,15 +281,10 @@ negotiator@0.6.3:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
object-inspect@^1.13.1: on-finished@~2.3.0:
version "1.13.1" version "2.3.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
on-finished@2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
dependencies: dependencies:
ee-first "1.1.1" ee-first "1.1.1"
@ -398,25 +311,23 @@ proxy-from-env@^1.1.0:
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
qs@6.11.0: qs@6.9.7:
version "6.11.0" version "6.9.7"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe"
integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==
dependencies:
side-channel "^1.0.4"
range-parser@~1.2.1: range-parser@~1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
raw-body@2.5.2: raw-body@2.4.3:
version "2.5.2" version "2.4.3"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c"
integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==
dependencies: dependencies:
bytes "3.1.2" bytes "3.1.2"
http-errors "2.0.0" http-errors "1.8.1"
iconv-lite "0.4.24" iconv-lite "0.4.24"
unpipe "1.0.0" unpipe "1.0.0"
@ -430,66 +341,44 @@ safe-buffer@5.2.1:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
send@0.18.0: send@0.17.2:
version "0.18.0" version "0.17.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==
dependencies: dependencies:
debug "2.6.9" debug "2.6.9"
depd "2.0.0" depd "~1.1.2"
destroy "1.2.0" destroy "~1.0.4"
encodeurl "~1.0.2" encodeurl "~1.0.2"
escape-html "~1.0.3" escape-html "~1.0.3"
etag "~1.8.1" etag "~1.8.1"
fresh "0.5.2" fresh "0.5.2"
http-errors "2.0.0" http-errors "1.8.1"
mime "1.6.0" mime "1.6.0"
ms "2.1.3" ms "2.1.3"
on-finished "2.4.1" on-finished "~2.3.0"
range-parser "~1.2.1" range-parser "~1.2.1"
statuses "2.0.1" statuses "~1.5.0"
serve-static@1.15.0: serve-static@1.14.2:
version "1.15.0" version "1.14.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa"
integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==
dependencies: dependencies:
encodeurl "~1.0.2" encodeurl "~1.0.2"
escape-html "~1.0.3" escape-html "~1.0.3"
parseurl "~1.3.3" parseurl "~1.3.3"
send "0.18.0" send "0.17.2"
set-function-length@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
dependencies:
define-data-property "^1.1.4"
es-errors "^1.3.0"
function-bind "^1.1.2"
get-intrinsic "^1.2.4"
gopd "^1.0.1"
has-property-descriptors "^1.0.2"
setprototypeof@1.2.0: setprototypeof@1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
side-channel@^1.0.4: "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
version "1.0.6" version "1.5.0"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
dependencies:
call-bind "^1.0.7"
es-errors "^1.3.0"
get-intrinsic "^1.2.4"
object-inspect "^1.13.1"
statuses@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
toidentifier@1.0.1: toidentifier@1.0.1:
version "1.0.1" version "1.0.1"

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Moq; using Moq;

View File

@ -1,3 +1,5 @@
using System;
using Moq;
using NUnit.Framework; using NUnit.Framework;
using SpotifyAPI.Web.Http; using SpotifyAPI.Web.Http;
@ -11,13 +13,13 @@ namespace SpotifyAPI.Web
{ {
var defaultConfig = SpotifyClientConfig.CreateDefault(); var defaultConfig = SpotifyClientConfig.CreateDefault();
Assert.That(defaultConfig.DefaultPaginator, Is.InstanceOf(typeof(SimplePaginator))); Assert.IsInstanceOf(typeof(SimplePaginator), defaultConfig.DefaultPaginator);
Assert.That(defaultConfig.HTTPClient, Is.InstanceOf(typeof(NetHttpClient))); Assert.IsInstanceOf(typeof(NetHttpClient), defaultConfig.HTTPClient);
Assert.That(defaultConfig.JSONSerializer, Is.InstanceOf(typeof(NewtonsoftJSONSerializer))); Assert.IsInstanceOf(typeof(NewtonsoftJSONSerializer), defaultConfig.JSONSerializer);
Assert.That(SpotifyUrls.APIV1, Is.EqualTo(defaultConfig.BaseAddress)); Assert.AreEqual(SpotifyUrls.APIV1, defaultConfig.BaseAddress);
Assert.That(null, Is.EqualTo(defaultConfig.Authenticator)); Assert.AreEqual(null, defaultConfig.Authenticator);
Assert.That(null, Is.EqualTo(defaultConfig.HTTPLogger)); Assert.AreEqual(null, defaultConfig.HTTPLogger);
Assert.That(null, Is.EqualTo(defaultConfig.RetryHandler)); Assert.AreEqual(null, defaultConfig.RetryHandler);
} }
[Test] [Test]
@ -28,18 +30,18 @@ namespace SpotifyAPI.Web
var defaultConfig = SpotifyClientConfig.CreateDefault(token, tokenType); var defaultConfig = SpotifyClientConfig.CreateDefault(token, tokenType);
Assert.That(defaultConfig.DefaultPaginator, Is.InstanceOf(typeof(SimplePaginator))); Assert.IsInstanceOf(typeof(SimplePaginator), defaultConfig.DefaultPaginator);
Assert.That(defaultConfig.HTTPClient, Is.InstanceOf(typeof(NetHttpClient))); Assert.IsInstanceOf(typeof(NetHttpClient), defaultConfig.HTTPClient);
Assert.That(defaultConfig.JSONSerializer, Is.InstanceOf(typeof(NewtonsoftJSONSerializer))); Assert.IsInstanceOf(typeof(NewtonsoftJSONSerializer), defaultConfig.JSONSerializer);
Assert.That(SpotifyUrls.APIV1, Is.EqualTo(defaultConfig.BaseAddress)); Assert.AreEqual(SpotifyUrls.APIV1, defaultConfig.BaseAddress);
Assert.That(null, Is.EqualTo(defaultConfig.HTTPLogger)); Assert.AreEqual(null, defaultConfig.HTTPLogger);
Assert.That(null, Is.EqualTo(defaultConfig.RetryHandler)); Assert.AreEqual(null, defaultConfig.RetryHandler);
Assert.That(defaultConfig.Authenticator, Is.InstanceOf(typeof(TokenAuthenticator))); Assert.IsInstanceOf(typeof(TokenAuthenticator), defaultConfig.Authenticator);
var tokenHeaderAuth = defaultConfig.Authenticator as TokenAuthenticator; var tokenHeaderAuth = defaultConfig.Authenticator as TokenAuthenticator;
Assert.That(token, Is.EqualTo(tokenHeaderAuth.Token)); Assert.AreEqual(token, tokenHeaderAuth.Token);
Assert.That(tokenType, Is.EqualTo(tokenHeaderAuth.TokenType)); Assert.AreEqual(tokenType, tokenHeaderAuth.TokenType);
} }
[Test] [Test]
@ -49,9 +51,9 @@ namespace SpotifyAPI.Web
var defaultConfig = SpotifyClientConfig.CreateDefault(); var defaultConfig = SpotifyClientConfig.CreateDefault();
var tokenConfig = defaultConfig.WithToken(token); var tokenConfig = defaultConfig.WithToken(token);
Assert.That(token, Is.EqualTo((tokenConfig.Authenticator as TokenAuthenticator).Token)); Assert.AreEqual(token, (tokenConfig.Authenticator as TokenAuthenticator).Token);
Assert.That(defaultConfig, Is.Not.EqualTo(tokenConfig)); Assert.AreNotEqual(defaultConfig, tokenConfig);
Assert.That(null, Is.EqualTo(defaultConfig.Authenticator)); Assert.AreEqual(null, defaultConfig.Authenticator);
} }
} }
} }

View File

@ -1,3 +1,5 @@
using System.Collections.Generic;
using System.Reflection;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Moq; using Moq;

View File

@ -31,31 +31,5 @@ namespace SpotifyAPI.Web
api.Verify(a => a.Get<PublicUser>(SpotifyUrls.User(userId), It.IsAny<CancellationToken>()), Times.Once); api.Verify(a => a.Get<PublicUser>(SpotifyUrls.User(userId), It.IsAny<CancellationToken>()), Times.Once);
} }
[Test]
public async Task GetTopTracks()
{
var request = new UsersTopItemsRequest(TimeRange.LongTerm);
var api = new Mock<IAPIConnector>();
var client = new UserProfileClient(api.Object);
var res = await client.GetTopTracks(request);
api.Verify(a => a.Get<UsersTopTracksResponse>(SpotifyUrls.TopTracks(), request.BuildQueryParams(), It.IsAny<CancellationToken>()), Times.Once);
}
[Test]
public async Task GetTopArtists()
{
var request = new UsersTopItemsRequest(TimeRange.LongTerm);
var api = new Mock<IAPIConnector>();
var client = new UserProfileClient(api.Object);
await client.GetTopArtists(request);
api.Verify(a => a.Get<UsersTopArtistsResponse>(SpotifyUrls.TopArtists(), request.BuildQueryParams(), It.IsAny<CancellationToken>()), Times.Once);
}
} }
} }

View File

@ -31,7 +31,7 @@ namespace SpotifyAPI.Web.Tests
serializer.SerializeRequest(request.Object); serializer.SerializeRequest(request.Object);
Assert.That(input, Is.EqualTo(request.Object.Body)); Assert.AreEqual(input, request.Object.Body);
} }
public static IEnumerable<object> SerializeTestSource public static IEnumerable<object> SerializeTestSource
@ -65,8 +65,8 @@ namespace SpotifyAPI.Web.Tests
response.SetupGet(r => r.ContentType).Returns("media/mp4"); response.SetupGet(r => r.ContentType).Returns("media/mp4");
IAPIResponse<object> apiResonse = serializer.DeserializeResponse<object>(response.Object); IAPIResponse<object> apiResonse = serializer.DeserializeResponse<object>(response.Object);
Assert.That(apiResonse.Body, Is.Null); Assert.AreEqual(apiResonse.Body, null);
Assert.That(apiResonse.Response, Is.EqualTo(response.Object)); Assert.AreEqual(apiResonse.Response, response.Object);
} }
[TestCase] [TestCase]
@ -78,8 +78,8 @@ namespace SpotifyAPI.Web.Tests
response.SetupGet(r => r.ContentType).Returns("application/json"); response.SetupGet(r => r.ContentType).Returns("application/json");
IAPIResponse<TestResponseObject> apiResonse = serializer.DeserializeResponse<TestResponseObject>(response.Object); IAPIResponse<TestResponseObject> apiResonse = serializer.DeserializeResponse<TestResponseObject>(response.Object);
Assert.That(apiResonse.Body?.HelloWorld, Is.False); Assert.AreEqual(apiResonse.Body?.HelloWorld, false);
Assert.That(apiResonse.Response, Is.EqualTo(response.Object)); Assert.AreEqual(apiResonse.Response, response.Object);
} }
public class TestResponseObject public class TestResponseObject

View File

@ -0,0 +1,7 @@
namespace SpotifyAPI.Web
{
public class ProxyConfigTest
{
}
}

View File

@ -1,4 +1,3 @@
using System.Collections.Generic; using System.Collections.Generic;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
@ -19,7 +18,7 @@ namespace SpotifyAPI.Web.Tests
request.SetupGet(r => r.Headers).Returns(new Dictionary<string, string>()); request.SetupGet(r => r.Headers).Returns(new Dictionary<string, string>());
authenticator.Apply(request.Object, apiConnector.Object); authenticator.Apply(request.Object, apiConnector.Object);
Assert.That(request.Object.Headers["Authorization"], Is.EqualTo("Bearer MyToken")); Assert.AreEqual(request.Object.Headers["Authorization"], "Bearer MyToken");
} }
} }
} }

View File

@ -1,3 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;

View File

@ -17,11 +17,11 @@ namespace SpotifyAPI.Web.Tests
var second = new SecondRequestModel { Second = false }; var second = new SecondRequestModel { Second = false };
var secondParams = second.BuildQueryParams(); var secondParams = second.BuildQueryParams();
Assert.That(1, Is.EqualTo(firstParams.Keys.Count)); Assert.AreEqual(1, firstParams.Keys.Count);
Assert.That("true", Is.EqualTo(firstParams["first"])); Assert.AreEqual("true", firstParams["first"]);
Assert.That(1, Is.EqualTo(secondParams.Keys.Count)); Assert.AreEqual(1, secondParams.Keys.Count);
Assert.That("false", Is.EqualTo(secondParams["second"])); Assert.AreEqual("false", secondParams["second"]);
} }
[Test] [Test]
@ -33,17 +33,17 @@ namespace SpotifyAPI.Web.Tests
var second = new SecondRequestModel { Second = false }; var second = new SecondRequestModel { Second = false };
var secondParams = second.BuildBodyParams(); var secondParams = second.BuildBodyParams();
Assert.That("{\"first\":true}", Is.EqualTo(firstParams.ToString(Formatting.None))); Assert.AreEqual("{\"first\":true}", firstParams.ToString(Formatting.None));
Assert.That("{\"second\":false}", Is.EqualTo(secondParams.ToString(Formatting.None))); Assert.AreEqual("{\"second\":false}", secondParams.ToString(Formatting.None));
} }
[Test] [Test]
public void EmptyListIsSkippedInQueryParams() public void EmptyListIsSkippedInQueryParams()
{ {
var first = new EmptyListExampleRequestModel(); var first = new EmptyListExampleRequestModel();
Assert.That(new Dictionary<string, string> { }, Is.EqualTo(first.BuildQueryParams())); Assert.AreEqual(new Dictionary<string, string> { }, first.BuildQueryParams());
first.List.Add("hello_world"); first.List.Add("hello_world");
Assert.That(new Dictionary<string, string> { { "list", "hello_world" } }, Is.EqualTo(first.BuildQueryParams())); Assert.AreEqual(new Dictionary<string, string> { { "list", "hello_world" } }, first.BuildQueryParams());
} }
[Test] [Test]
@ -55,8 +55,8 @@ namespace SpotifyAPI.Web.Tests
}; };
var result = enumModel.BuildQueryParams(); var result = enumModel.BuildQueryParams();
Assert.That(1, Is.EqualTo(result.Keys.Count)); Assert.AreEqual(1, result.Keys.Count);
Assert.That("two", Is.EqualTo(result["an_enum"])); Assert.AreEqual("two", result["an_enum"]);
} }
[Test] [Test]
@ -68,8 +68,8 @@ namespace SpotifyAPI.Web.Tests
}; };
var result = enumModel.BuildQueryParams(); var result = enumModel.BuildQueryParams();
Assert.That(1, Is.EqualTo(result.Keys.Count)); Assert.AreEqual(1, result.Keys.Count);
Assert.That("one,two", Is.EqualTo(result["an_enum"])); Assert.AreEqual("one,two", result["an_enum"]);
} }
} }

View File

@ -38,7 +38,7 @@ namespace SpotifyAPI.Web
var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry); var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry);
}); });
Assert.That(1, Is.EqualTo(retryCalled)); Assert.AreEqual(1, retryCalled);
} }
[Test] [Test]
@ -64,8 +64,8 @@ namespace SpotifyAPI.Web
}; };
var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry); var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry);
Assert.That(2, Is.EqualTo(retryCalled)); Assert.AreEqual(2, retryCalled);
Assert.That(setup.Response.Object, Is.EqualTo(response)); Assert.AreEqual(setup.Response.Object, response);
setup.Sleep.Verify(s => s(TimeSpan.FromSeconds(50)), Times.Exactly(2)); setup.Sleep.Verify(s => s(TimeSpan.FromSeconds(50)), Times.Exactly(2));
} }
@ -95,8 +95,8 @@ namespace SpotifyAPI.Web
}; };
var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry); var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry);
Assert.That(1, Is.EqualTo(retryCalled)); Assert.AreEqual(1, retryCalled);
Assert.That(successResponse.Object, Is.EqualTo(response)); Assert.AreEqual(successResponse.Object, response);
setup.Sleep.Verify(s => s(TimeSpan.FromSeconds(50)), Times.Once); setup.Sleep.Verify(s => s(TimeSpan.FromSeconds(50)), Times.Once);
} }
@ -125,8 +125,8 @@ namespace SpotifyAPI.Web
}; };
var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry); var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry);
Assert.That(1, Is.EqualTo(retryCalled)); Assert.AreEqual(1, retryCalled);
Assert.That(successResponse.Object, Is.EqualTo(response)); Assert.AreEqual(successResponse.Object, response);
setup.Sleep.Verify(s => s(TimeSpan.FromSeconds(50)), Times.Once); setup.Sleep.Verify(s => s(TimeSpan.FromSeconds(50)), Times.Once);
} }
@ -151,8 +151,8 @@ namespace SpotifyAPI.Web
}; };
var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry); var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry);
Assert.That(10, Is.EqualTo(retryCalled)); Assert.AreEqual(10, retryCalled);
Assert.That(setup.Response.Object, Is.EqualTo(response)); Assert.AreEqual(setup.Response.Object, response);
setup.Sleep.Verify(s => s(TimeSpan.FromMilliseconds(50)), Times.Exactly(10)); setup.Sleep.Verify(s => s(TimeSpan.FromMilliseconds(50)), Times.Exactly(10));
} }
@ -177,8 +177,8 @@ namespace SpotifyAPI.Web
}; };
var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry); var response = await handler.HandleRetry(setup.Request.Object, setup.Response.Object, setup.Retry);
Assert.That(0, Is.EqualTo(retryCalled)); Assert.AreEqual(0, retryCalled);
Assert.That(setup.Response.Object, Is.EqualTo(response)); Assert.AreEqual(setup.Response.Object, response);
setup.Sleep.Verify(s => s(TimeSpan.FromMilliseconds(50)), Times.Exactly(0)); setup.Sleep.Verify(s => s(TimeSpan.FromMilliseconds(50)), Times.Exactly(0));
} }

View File

@ -1,18 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net8.0;net7.0;net6.0</TargetFrameworks> <TargetFrameworks>net7.0;net6.0;net5.0</TargetFrameworks>
<LangVersion>9.0</LangVersion> <LangVersion>9.0</LangVersion>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<CheckEolTargetFramework>false</CheckEolTargetFramework> <CheckEolTargetFramework>false</CheckEolTargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="Moq" Version="4.20.70" /> <PackageReference Include="Moq" Version="4.20.69" />
<PackageReference Include="NUnit" Version="4.1.0" /> <PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" /> <PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="NUnit.Console" Version="3.17.0" /> <PackageReference Include="NUnit.Console" Version="3.16.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,5 +1,6 @@
using System.Text; using System.Text;
using NUnit.Framework; using NUnit.Framework;
using SpotifyAPI.Web;
namespace SpotifyAPI.Web.Tests namespace SpotifyAPI.Web.Tests
{ {
@ -11,7 +12,7 @@ namespace SpotifyAPI.Web.Tests
{ {
var encoded = "SGVsbG9Xb3JsZA"; var encoded = "SGVsbG9Xb3JsZA";
Assert.That("HelloWorld", Is.EqualTo(Encoding.UTF8.GetString(Base64Util.UrlDecode(encoded)))); Assert.AreEqual("HelloWorld", Encoding.UTF8.GetString(Base64Util.UrlDecode(encoded)));
} }
[Test] [Test]
@ -19,7 +20,7 @@ namespace SpotifyAPI.Web.Tests
{ {
var decoded = "HelloWorld"; var decoded = "HelloWorld";
Assert.That("SGVsbG9Xb3JsZA", Is.EqualTo(Base64Util.UrlEncode(Encoding.UTF8.GetBytes(decoded)))); Assert.AreEqual("SGVsbG9Xb3JsZA", Base64Util.UrlEncode(Encoding.UTF8.GetBytes(decoded)));
} }
[Test] [Test]
@ -28,7 +29,7 @@ namespace SpotifyAPI.Web.Tests
var bytes = new byte[] { 0x04, 0x9f, 0x9c, 0xff, 0x3f, 0x0a }; var bytes = new byte[] { 0x04, 0x9f, 0x9c, 0xff, 0x3f, 0x0a };
// normal base64: BJ+c/z8K // normal base64: BJ+c/z8K
Assert.That("BJ-c_z8K", Is.EqualTo(Base64Util.UrlEncode(bytes))); Assert.AreEqual("BJ-c_z8K", Base64Util.UrlEncode(bytes));
} }
[Test] [Test]
@ -37,7 +38,7 @@ namespace SpotifyAPI.Web.Tests
var bytes = new byte[] { 0x04, 0x9f, 0x9c, 0xff, 0x3f, 0x0a }; var bytes = new byte[] { 0x04, 0x9f, 0x9c, 0xff, 0x3f, 0x0a };
// normal base64: BJ+c/z8K // normal base64: BJ+c/z8K
Assert.That(bytes, Is.EqualTo(Base64Util.UrlDecode("BJ-c_z8K"))); Assert.AreEqual(bytes, Base64Util.UrlDecode("BJ-c_z8K"));
} }
} }
} }

View File

@ -18,7 +18,7 @@ namespace SpotifyAPI.Web.Tests
{ "hello", "world" }, { "hello", "world" },
{ "nice", "day" } { "nice", "day" }
}; };
Assert.That(expected, Is.EqualTo(uri.ApplyParameters(parameters).ToString())); Assert.AreEqual(expected, uri.ApplyParameters(parameters).ToString());
} }
[Test] [Test]
@ -32,7 +32,7 @@ namespace SpotifyAPI.Web.Tests
{ "hello", "world" }, { "hello", "world" },
{ "nice", "day" } { "nice", "day" }
}; };
Assert.That(expected, Is.EqualTo(uri.ApplyParameters(parameters).ToString())); Assert.AreEqual(expected, uri.ApplyParameters(parameters).ToString());
} }
[Test] [Test]
@ -45,7 +45,7 @@ namespace SpotifyAPI.Web.Tests
{ {
{ "hello", "&world " }, { "hello", "&world " },
}; };
Assert.That(expected, Is.EqualTo(uri.ApplyParameters(parameters).ToString())); Assert.AreEqual(expected, uri.ApplyParameters(parameters).ToString());
} }
} }
} }

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using NUnit.Framework; using NUnit.Framework;
namespace SpotifyAPI.Web.Tests namespace SpotifyAPI.Web.Tests
@ -15,7 +16,7 @@ namespace SpotifyAPI.Web.Tests
var formatter = new URIParameterFormatProvider(); var formatter = new URIParameterFormatProvider();
string func(FormattableString str) => str.ToString(formatter); string func(FormattableString str) => str.ToString(formatter);
Assert.That(expected, Is.EqualTo(func($"/users/{user}"))); Assert.AreEqual(expected, func($"/users/{user}"));
} }
[Test] [Test]
@ -27,7 +28,7 @@ namespace SpotifyAPI.Web.Tests
var formatter = new URIParameterFormatProvider(); var formatter = new URIParameterFormatProvider();
string func(FormattableString str) => str.ToString(formatter); string func(FormattableString str) => str.ToString(formatter);
Assert.That(expected, Is.EqualTo(func($"/users/{user}"))); Assert.AreEqual(expected, func($"/users/{user}"));
} }
} }
} }

View File

@ -50,7 +50,7 @@ namespace SpotifyAPI.Web
public string ClientId { get; } public string ClientId { get; }
/// <summary> /// <summary>
/// The Client secret, defined in a spotify application in your Spotify Developer Dashboard /// The ClientID, defined in a spotify application in your Spotify Developer Dashboard
/// </summary> /// </summary>
public string ClientSecret { get; } public string ClientSecret { get; }

View File

@ -16,14 +16,6 @@ namespace SpotifyAPI.Web
return API.Get<FullArtist>(URLs.Artist(artistId), cancel); return API.Get<FullArtist>(URLs.Artist(artistId), cancel);
} }
public Task<FullArtist> Get(string artistId, ArtistRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNullOrEmptyString(artistId, nameof(artistId));
Ensure.ArgumentNotNull(request, nameof(request));
return API.Get<FullArtist>(URLs.Artist(artistId), request.BuildQueryParams(), cancel);
}
public Task<Paging<SimpleAlbum>> GetAlbums(string artistId, CancellationToken cancel = default) public Task<Paging<SimpleAlbum>> GetAlbums(string artistId, CancellationToken cancel = default)
{ {
Ensure.ArgumentNotNullOrEmptyString(artistId, nameof(artistId)); Ensure.ArgumentNotNullOrEmptyString(artistId, nameof(artistId));
@ -46,14 +38,6 @@ namespace SpotifyAPI.Web
return API.Get<ArtistsRelatedArtistsResponse>(URLs.ArtistRelatedArtists(artistId), cancel); return API.Get<ArtistsRelatedArtistsResponse>(URLs.ArtistRelatedArtists(artistId), cancel);
} }
public Task<ArtistsRelatedArtistsResponse> GetRelatedArtists(string artistId, ArtistsRelatedArtistsRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNullOrEmptyString(artistId, nameof(artistId));
Ensure.ArgumentNotNull(request, nameof(request));
return API.Get<ArtistsRelatedArtistsResponse>(URLs.ArtistRelatedArtists(artistId), request.BuildQueryParams(), cancel);
}
public Task<ArtistsResponse> GetSeveral(ArtistsRequest request, CancellationToken cancel = default) public Task<ArtistsResponse> GetSeveral(ArtistsRequest request, CancellationToken cancel = default)
{ {
Ensure.ArgumentNotNull(request, nameof(request)); Ensure.ArgumentNotNull(request, nameof(request));

View File

@ -1,3 +1,4 @@
using System;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using SpotifyAPI.Web.Http; using SpotifyAPI.Web.Http;

View File

@ -31,18 +31,6 @@ namespace SpotifyAPI.Web
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1716")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1716")]
Task<FullArtist> Get(string artistId, CancellationToken cancel = default); Task<FullArtist> Get(string artistId, CancellationToken cancel = default);
/// <summary>
/// Get Spotify catalog information for a single artist identified by their unique Spotify ID.
/// </summary>
/// <param name="artistId">The Spotify ID of the artist.</param>
/// <param name="cancel">The cancellation-token to allow to cancel the request.</param>
/// <remarks>
/// https://developer.spotify.com/documentation/web-api/reference-beta/#endpoint-get-an-artist
/// </remarks>
/// <returns></returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1716")]
Task<FullArtist> Get(string artistId, ArtistRequest request, CancellationToken cancel = default);
/// <summary> /// <summary>
/// Get Spotify catalog information about an artists albums. /// Get Spotify catalog information about an artists albums.
/// Optional parameters can be specified in the query string to filter and sort the response. /// Optional parameters can be specified in the query string to filter and sort the response.
@ -93,17 +81,5 @@ namespace SpotifyAPI.Web
/// </remarks> /// </remarks>
/// <returns></returns> /// <returns></returns>
Task<ArtistsRelatedArtistsResponse> GetRelatedArtists(string artistId, CancellationToken cancel = default); Task<ArtistsRelatedArtistsResponse> GetRelatedArtists(string artistId, CancellationToken cancel = default);
/// <summary>
/// Get Spotify catalog information about artists similar to a given artist.
/// Similarity is based on analysis of the Spotify communitys listening history.
/// </summary>
/// <param name="artistId">The Spotify ID for the artist</param>
/// <param name="cancel">The cancellation-token to allow to cancel the request.</param>
/// <remarks>
/// https://developer.spotify.com/documentation/web-api/reference-beta/#endpoint-get-an-artists-related-artists
/// </remarks>
/// <returns></returns>
Task<ArtistsRelatedArtistsResponse> GetRelatedArtists(string artistId, ArtistsRelatedArtistsRequest request, CancellationToken cancel = default);
} }
} }

View File

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using SpotifyAPI.Web;
using SpotifyAPI.Web.Http; using SpotifyAPI.Web.Http;
namespace SpotifyAPI.Web namespace SpotifyAPI.Web

View File

@ -28,23 +28,5 @@ namespace SpotifyAPI.Web
/// <exception cref="APIUnauthorizedException">Thrown if the client is not authenticated.</exception> /// <exception cref="APIUnauthorizedException">Thrown if the client is not authenticated.</exception>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1716")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1716")]
Task<PublicUser> Get(string userId, CancellationToken cancel = default); Task<PublicUser> Get(string userId, CancellationToken cancel = default);
/// <summary>
/// Get Top tracks for the current user
/// </summary>
/// <param name="request">The query params to send to get Top Artists </param>
/// <param name="cancel">The cancellation-token to allow to cancel the request.</param>
/// <remarks>https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks</remarks>
/// <exception cref="APIUnauthorizedException">Thrown if the client is not authenticated.</exception>
Task<UsersTopTracksResponse> GetTopTracks(UsersTopItemsRequest request, CancellationToken cancel = default);
/// <summary>
/// Get Top arsists for the current user
/// </summary>
/// <param name="request">The query params to send to get Top Artists</param>
/// <param name="cancel">The cancellation-token to allow to cancel the request.</param>
/// <remarks>https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks</remarks>
/// <exception cref="APIUnauthorizedException">Thrown if the client is not authenticated.</exception>
Task<UsersTopArtistsResponse> GetTopArtists(UsersTopItemsRequest request, CancellationToken cancel = default);
} }
} }

View File

@ -1,8 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
#if !NETSTANDARD2_0
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
#endif
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using SpotifyAPI.Web.Http; using SpotifyAPI.Web.Http;

View File

@ -1,8 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
#if !NETSTANDARD2_0
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
#endif
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using SpotifyAPI.Web.Http; using SpotifyAPI.Web.Http;

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Net.Http;
using SpotifyAPI.Web.Http; using SpotifyAPI.Web.Http;
namespace SpotifyAPI.Web namespace SpotifyAPI.Web

View File

@ -1,3 +1,4 @@
using System;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using SpotifyAPI.Web.Http; using SpotifyAPI.Web.Http;
@ -19,20 +20,5 @@ namespace SpotifyAPI.Web
return API.Get<PublicUser>(SpotifyUrls.User(userId), cancel); return API.Get<PublicUser>(SpotifyUrls.User(userId), cancel);
} }
public Task<UsersTopTracksResponse> GetTopTracks(UsersTopItemsRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));
return API.Get<UsersTopTracksResponse>(SpotifyUrls.TopTracks(), request.BuildQueryParams(), cancel);
}
public Task<UsersTopArtistsResponse> GetTopArtists(UsersTopItemsRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));
return API.Get<UsersTopArtistsResponse>(SpotifyUrls.TopArtists(), request.BuildQueryParams(), cancel);
}
} }
} }

View File

@ -30,9 +30,6 @@ namespace SpotifyAPI.Web
{ {
} }
#if NET8_0_OR_GREATER
[Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.")]
#endif
protected APIException(SerializationInfo info, StreamingContext context) : base(info, context) protected APIException(SerializationInfo info, StreamingContext context) : base(info, context)
{ {
Response = info.GetValue("APIException.Response", typeof(IResponse)) as IResponse; Response = info.GetValue("APIException.Response", typeof(IResponse)) as IResponse;
@ -70,11 +67,6 @@ namespace SpotifyAPI.Web
return null; return null;
} }
#if NET8_0_OR_GREATER
[Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.")]
#endif
public override void GetObjectData(SerializationInfo info, StreamingContext context) public override void GetObjectData(SerializationInfo info, StreamingContext context)
{ {
base.GetObjectData(info, context); base.GetObjectData(info, context);

View File

@ -26,9 +26,6 @@ namespace SpotifyAPI.Web
public APIPagingException(string message, Exception innerException) : base(message, innerException) { } public APIPagingException(string message, Exception innerException) : base(message, innerException) { }
#if NET8_0_OR_GREATER
[Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.")]
#endif
protected APIPagingException(SerializationInfo info, StreamingContext context) : base(info, context) { } protected APIPagingException(SerializationInfo info, StreamingContext context) : base(info, context) { }
} }
} }

View File

@ -26,9 +26,6 @@ namespace SpotifyAPI.Web
public APITooManyRequestsException(string message, Exception innerException) : base(message, innerException) { } public APITooManyRequestsException(string message, Exception innerException) : base(message, innerException) { }
#if NET8_0_OR_GREATER
[Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.")]
#endif
protected APITooManyRequestsException(SerializationInfo info, StreamingContext context) : base(info, context) { } protected APITooManyRequestsException(SerializationInfo info, StreamingContext context) : base(info, context) { }
} }
} }

View File

@ -15,9 +15,6 @@ namespace SpotifyAPI.Web
public APIUnauthorizedException(string message, Exception innerException) : base(message, innerException) { } public APIUnauthorizedException(string message, Exception innerException) : base(message, innerException) { }
#if NET8_0_OR_GREATER
[Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.")]
#endif
protected APIUnauthorizedException(SerializationInfo info, StreamingContext context) : base(info, context) { } protected APIUnauthorizedException(SerializationInfo info, StreamingContext context) : base(info, context) { }
} }
} }

View File

@ -166,7 +166,7 @@ namespace SpotifyAPI.Web.Http
_httpClient.SetRequestTimeout(timeout); _httpClient.SetRequestTimeout(timeout);
} }
private Request CreateRequest( private IRequest CreateRequest(
Uri uri, Uri uri,
HttpMethod method, HttpMethod method,
IDictionary<string, string>? parameters, IDictionary<string, string>? parameters,

View File

@ -1,3 +1,5 @@
using System.Threading.Tasks;
namespace SpotifyAPI.Web.Http namespace SpotifyAPI.Web.Http
{ {
public interface IJSONSerializer public interface IJSONSerializer

View File

@ -112,7 +112,7 @@ namespace SpotifyAPI.Web.Http
_httpClient.Timeout = timeout; _httpClient.Timeout = timeout;
} }
private static HttpClientHandler CreateMessageHandler(IProxyConfig proxyConfig) private static HttpMessageHandler CreateMessageHandler(IProxyConfig proxyConfig)
{ {
var proxy = new WebProxy var proxy = new WebProxy
{ {

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Net.Http; using System.Net.Http;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Serialization; using Newtonsoft.Json.Serialization;

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Net; using System.Net;

View File

@ -1,21 +0,0 @@
using System;
using System.Globalization;
using Newtonsoft.Json;
namespace SpotifyAPI.Web
{
public class DoubleToIntConverter : JsonConverter<int>
{
public override void WriteJson(JsonWriter? writer, int value, JsonSerializer serializer)
{
writer?.WriteValue(value);
}
public override int ReadJson(JsonReader? reader, Type objectType, int existingValue, bool hasExistingValue,
JsonSerializer serializer)
{
return reader != null ? Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture) : 0;
}
}
}

View File

@ -8,16 +8,5 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -24,17 +24,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("offset")] [QueryParam("offset")]
public int? Offset { get; set; } public int? Offset { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -29,17 +29,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -1,17 +0,0 @@
namespace SpotifyAPI.Web
{
public class ArtistRequest : RequestParams
{
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
}
}

View File

@ -23,17 +23,6 @@ namespace SpotifyAPI.Web
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// The number of album objects to return. Default: 20. Minimum: 1. Maximum: 50. For example: limit=2 /// The number of album objects to return. Default: 20. Minimum: 1. Maximum: 50. For example: limit=2
/// </summary> /// </summary>

View File

@ -1,17 +0,0 @@
namespace SpotifyAPI.Web
{
public class ArtistsRelatedArtistsRequest : RequestParams
{
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
}
}

View File

@ -21,17 +21,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("ids")] [QueryParam("ids")]
public IList<string> Ids { get; } public IList<string> Ids { get; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -19,17 +19,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string Market { get; } public string Market { get; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -10,17 +10,6 @@ namespace SpotifyAPI.Web
[QueryParam("country")] [QueryParam("country")]
public string? Country { get; set; } public string? Country { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// The maximum number of items to return. Default: 20. Minimum: 1. Maximum: 50. /// The maximum number of items to return. Default: 20. Minimum: 1. Maximum: 50.
/// </summary> /// </summary>

View File

@ -13,17 +13,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -33,17 +33,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -25,17 +25,6 @@ namespace SpotifyAPI.Web
[QueryParam("limit")] [QueryParam("limit")]
public int? Limit { get; set; } public int? Limit { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// The last artist ID retrieved from the previous request. /// The last artist ID retrieved from the previous request.
/// </summary> /// </summary>

View File

@ -24,17 +24,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -24,16 +24,5 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -24,17 +24,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -11,17 +11,6 @@ namespace SpotifyAPI.Web
[QueryParam("country")] [QueryParam("country")]
public string? Country { get; set; } public string? Country { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// The maximum number of items to return. Default: 20. Minimum: 1. Maximum: 50. /// The maximum number of items to return. Default: 20. Minimum: 1. Maximum: 50.
/// </summary> /// </summary>

View File

@ -1,3 +1,5 @@
using System;
namespace SpotifyAPI.Web namespace SpotifyAPI.Web
{ {
public class PKCETokenRefreshRequest public class PKCETokenRefreshRequest

View File

@ -9,17 +9,6 @@ namespace SpotifyAPI.Web
[QueryParam("limit")] [QueryParam("limit")]
public int? Limit { get; set; } public int? Limit { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// The index of the first entity to return. Default: 0 (i.e., the first track). Use with limit to get the next set of entities. /// The index of the first entity to return. Default: 0 (i.e., the first track). Use with limit to get the next set of entities.
/// </summary> /// </summary>

View File

@ -25,17 +25,6 @@ namespace SpotifyAPI.Web
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// This is set to `"track", "episode"` by default. /// This is set to `"track", "episode"` by default.
/// </summary> /// </summary>

View File

@ -29,17 +29,6 @@ namespace SpotifyAPI.Web
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// A comma-separated list of item types that your client supports besides the default track type. /// A comma-separated list of item types that your client supports besides the default track type.
/// Valid types are: track and episode. An unsupported type in the response is expected to be represented /// Valid types are: track and episode. An unsupported type in the response is expected to be represented

View File

@ -9,17 +9,6 @@ namespace SpotifyAPI.Web
[QueryParam("limit")] [QueryParam("limit")]
public int? Limit { get; set; } public int? Limit { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// A Unix timestamp in milliseconds. Returns all items after (but not including) this cursor position. /// A Unix timestamp in milliseconds. Returns all items after (but not including) this cursor position.
/// If after is specified, before must not be specified. /// If after is specified, before must not be specified.

View File

@ -9,17 +9,6 @@ namespace SpotifyAPI.Web
[QueryParam("limit")] [QueryParam("limit")]
public int? Limit { get; set; } public int? Limit { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// The index of the first playlist to return. /// The index of the first playlist to return.
/// Default: 0 (the first object). Maximum offset: 100.000. Use with limit to get the next set of playlists. /// Default: 0 (the first object). Maximum offset: 100.000. Use with limit to get the next set of playlists.

View File

@ -65,17 +65,6 @@ namespace SpotifyAPI.Web
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// This is set to `"track", "episode"` by default. /// This is set to `"track", "episode"` by default.
/// </summary> /// </summary>

View File

@ -39,17 +39,6 @@ namespace SpotifyAPI.Web
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; } public string? Market { get; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// This is set to `"track", "episode"` by default. /// This is set to `"track", "episode"` by default.
/// </summary> /// </summary>

View File

@ -16,16 +16,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("offset")] [QueryParam("offset")]
public int? Offset { get; set; } public int? Offset { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -60,17 +60,6 @@ namespace SpotifyAPI.Web
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// Multiple values. For each tunable track attribute, a hard floor on the selected track attributes value can be provided. /// Multiple values. For each tunable track attribute, a hard floor on the selected track attributes value can be provided.
/// See tunable track attributes below for the list of available options. /// See tunable track attributes below for the list of available options.

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;

View File

@ -59,17 +59,6 @@ namespace SpotifyAPI.Web
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
/// <summary> /// <summary>
/// Maximum number of results to return. /// Maximum number of results to return.
/// Default: 20 /// Default: 20

View File

@ -9,17 +9,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -29,17 +29,6 @@ namespace SpotifyAPI.Web
/// <value></value> /// <value></value>
[QueryParam("market")] [QueryParam("market")]
public string? Market { get; set; } public string? Market { get; set; }
/// <summary>
/// The desired language, consisting of an ISO 639-1 language code and an ISO 3166-1 alpha-2 country code,
/// joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)".
/// Provide this parameter if you want the category strings returned in a particular language.
/// Note that, if locale is not supplied, or if the specified language is not available,
/// the category strings returned will be in the Spotify default language (American English).
/// </summary>
/// <value></value>
[QueryParam("locale")]
public string? Locale { get; set; }
} }
} }

View File

@ -1,47 +0,0 @@
using System;
namespace SpotifyAPI.Web
{
public class UsersTopItemsRequest : RequestParams
{
public UsersTopItemsRequest(TimeRange timeRange)
{
Ensure.ArgumentNotNull(timeRange, nameof(TimeRange));
TimeRangeParam = timeRange;
}
/// <summary>
/// The TimeRange Param : How far to look back for the top items.
/// </summary>
/// <value></value>
[QueryParam("time_range")]
public TimeRange TimeRangeParam { get; } = TimeRange.MediumTerm;
/// <summary>
/// The maximum number of objects to return. Default: 20. Minimum: 1. Maximum: 50.
/// </summary>
/// <value></value>
[QueryParam("limit")]
public int? Limit { get; set; }
/// <summary>
/// The index of the first object to return. Default: 0 (i.e., the first object).
/// Use with limit to get the next set of objects.
/// </summary>
/// <value></value>
[QueryParam("offset")]
public int? Offset { get; set; }
}
public enum TimeRange
{
[String("short_term")]
ShortTerm,
[String("medium_term")]
MediumTerm,
[String("long_term")]
LongTerm
}
}

View File

@ -7,7 +7,6 @@ namespace SpotifyAPI.Web
public bool IsPrivateSession { get; set; } public bool IsPrivateSession { get; set; }
public bool IsRestricted { get; set; } public bool IsRestricted { get; set; }
public string Name { get; set; } = default!; public string Name { get; set; } = default!;
public bool SupportsVolume { get; set; }
public string Type { get; set; } = default!; public string Type { get; set; } = default!;
public int? VolumePercent { get; set; } public int? VolumePercent { get; set; }
} }

View File

@ -1,12 +1,10 @@
using Newtonsoft.Json;
namespace SpotifyAPI.Web namespace SpotifyAPI.Web
{ {
public class Followers public class Followers
{ {
public string Href { get; set; } = default!; public string Href { get; set; } = default!;
[JsonConverter(typeof(DoubleToIntConverter))]
public int Total { get; set; } public int Total { get; set; }
} }
} }

View File

@ -1,5 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json;
namespace SpotifyAPI.Web namespace SpotifyAPI.Web
{ {
@ -12,7 +11,6 @@ namespace SpotifyAPI.Web
public string Id { get; set; } = default!; public string Id { get; set; } = default!;
public List<Image> Images { get; set; } = default!; public List<Image> Images { get; set; } = default!;
public string Name { get; set; } = default!; public string Name { get; set; } = default!;
[JsonConverter(typeof(DoubleToIntConverter))]
public int Popularity { get; set; } public int Popularity { get; set; }
public string Type { get; set; } = default!; public string Type { get; set; } = default!;
public string Uri { get; set; } = default!; public string Uri { get; set; } = default!;

View File

@ -8,7 +8,6 @@ namespace SpotifyAPI.Web
{ {
public string AudioPreviewUrl { get; set; } = default!; public string AudioPreviewUrl { get; set; } = default!;
public string Description { get; set; } = default!; public string Description { get; set; } = default!;
public string HtmlDescription { get; set; } = default!;
public int DurationMs { get; set; } public int DurationMs { get; set; }
public bool Explicit { get; set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; set; } = default!; public Dictionary<string, string> ExternalUrls { get; set; } = default!;

View File

@ -7,7 +7,6 @@ namespace SpotifyAPI.Web
public List<string> AvailableMarkets { get; set; } = default!; public List<string> AvailableMarkets { get; set; } = default!;
public List<Copyright> Copyrights { get; set; } = default!; public List<Copyright> Copyrights { get; set; } = default!;
public string Description { get; set; } = default!; public string Description { get; set; } = default!;
public string HtmlDescription { get; set; } = default!;
public Paging<SimpleEpisode> Episodes { get; set; } = default!; public Paging<SimpleEpisode> Episodes { get; set; } = default!;
public bool Explicit { get; set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; set; } = default!; public Dictionary<string, string> ExternalUrls { get; set; } = default!;
@ -21,7 +20,6 @@ namespace SpotifyAPI.Web
public string Publisher { get; set; } = default!; public string Publisher { get; set; } = default!;
public string Type { get; set; } = default!; public string Type { get; set; } = default!;
public string Uri { get; set; } = default!; public string Uri { get; set; } = default!;
public int TotalEpisodes { get; set; } = default!;
} }
} }

View File

@ -10,7 +10,6 @@ namespace SpotifyAPI.Web
public List<SimpleArtist> Artists { get; set; } = default!; public List<SimpleArtist> Artists { get; set; } = default!;
public List<string> AvailableMarkets { get; set; } = default!; public List<string> AvailableMarkets { get; set; } = default!;
public int DiscNumber { get; set; } public int DiscNumber { get; set; }
[JsonConverter(typeof(DoubleToIntConverter))]
public int DurationMs { get; set; } public int DurationMs { get; set; }
public bool Explicit { get; set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalIds { get; set; } = default!; public Dictionary<string, string> ExternalIds { get; set; } = default!;

View File

@ -1,12 +1,8 @@
using Newtonsoft.Json;
namespace SpotifyAPI.Web namespace SpotifyAPI.Web
{ {
public class Image public class Image
{ {
[JsonConverter(typeof(DoubleToIntConverter))]
public int Height { get; set; } public int Height { get; set; }
[JsonConverter(typeof(DoubleToIntConverter))]
public int Width { get; set; } public int Width { get; set; }
public string Url { get; set; } = default!; public string Url { get; set; } = default!;
} }

View File

@ -5,7 +5,7 @@ namespace SpotifyAPI.Web
public class RecommendationsResponse public class RecommendationsResponse
{ {
public List<RecommendationSeed> Seeds { get; set; } = default!; public List<RecommendationSeed> Seeds { get; set; } = default!;
public List<FullTrack> Tracks { get; set; } = default!; public List<SimpleTrack> Tracks { get; set; } = default!;
} }
} }

View File

@ -9,7 +9,6 @@ namespace SpotifyAPI.Web
{ {
public string AudioPreviewUrl { get; set; } = default!; public string AudioPreviewUrl { get; set; } = default!;
public string Description { get; set; } = default!; public string Description { get; set; } = default!;
public string HtmlDescription { get; set; } = default!;
public int DurationMs { get; set; } public int DurationMs { get; set; }
public bool Explicit { get; set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; set; } = default!; public Dictionary<string, string> ExternalUrls { get; set; } = default!;

View File

@ -7,7 +7,6 @@ namespace SpotifyAPI.Web
public List<string> AvailableMarkets { get; set; } = default!; public List<string> AvailableMarkets { get; set; } = default!;
public List<Copyright> Copyrights { get; set; } = default!; public List<Copyright> Copyrights { get; set; } = default!;
public string Description { get; set; } = default!; public string Description { get; set; } = default!;
public string HtmlDescription { get; set; } = default!;
public bool Explicit { get; set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; set; } = default!; public Dictionary<string, string> ExternalUrls { get; set; } = default!;
public string Href { get; set; } = default!; public string Href { get; set; } = default!;
@ -20,7 +19,6 @@ namespace SpotifyAPI.Web
public string Publisher { get; set; } = default!; public string Publisher { get; set; } = default!;
public string Type { get; set; } = default!; public string Type { get; set; } = default!;
public string Uri { get; set; } = default!; public string Uri { get; set; } = default!;
public int TotalEpisodes { get; set; } = default!;
} }
} }

View File

@ -1,3 +1,5 @@
using System;
namespace SpotifyAPI.Web namespace SpotifyAPI.Web
{ {
public class TrackMeta public class TrackMeta

View File

@ -1,16 +0,0 @@
using System.Collections.Generic;
namespace SpotifyAPI.Web
{
public class UsersTopArtistsResponse
{
public string Href { get; set; } = default!;
public int Limit { get; set; }
public string Next { get; set; } = default!;
public int Offset { get; set; }
public string Previous { get; set; } = default!;
public int Total { get; set; } = default!;
public List<FullArtist> Items { get; set; } = default!;
}
}

View File

@ -1,16 +0,0 @@
using System.Collections.Generic;
namespace SpotifyAPI.Web
{
public class UsersTopTracksResponse
{
public string Href { get; set; } = default!;
public int Limit { get; set; }
public string Next { get; set; } = default!;
public int Offset { get; set; }
public string Previous { get; set; } = default!;
public int Total { get; set; } = default!;
public List<FullTrack> Items { get; set; } = default!;
}
}

View File

@ -1,3 +1,4 @@
using System;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net8.0;net7.0;net6.0;net5.0;netstandard2.1;netstandard2.0</TargetFrameworks> <TargetFrameworks>net7.0;net6.0;net5.0;netstandard2.1;netstandard2.0</TargetFrameworks>
<LangVersion>9.0</LangVersion> <LangVersion>9.0</LangVersion>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<PackageId>SpotifyAPI.Web</PackageId> <PackageId>SpotifyAPI.Web</PackageId>
@ -32,7 +32,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All"/> <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"> <PackageReference Include="Newtonsoft.Json" Version="13.0.3">
<PrivateAssets>None</PrivateAssets> <PrivateAssets>None</PrivateAssets>
</PackageReference> </PackageReference>

View File

@ -13,10 +13,6 @@ namespace SpotifyAPI.Web
public static Uri Me() => EUri($"me"); public static Uri Me() => EUri($"me");
public static Uri TopTracks() => EUri($"me/top/tracks");
public static Uri TopArtists() => EUri($"me/top/artists");
public static Uri User(string userId) => EUri($"users/{userId}"); public static Uri User(string userId) => EUri($"users/{userId}");
public static Uri Categories() => EUri($"browse/categories"); public static Uri Categories() => EUri($"browse/categories");

View File

@ -1,32 +1,20 @@
using System; using System;
using System.Globalization; using System.Globalization;
#if NET8_0_OR_GREATER
using System.Text;
#endif
namespace SpotifyAPI.Web namespace SpotifyAPI.Web
{ {
internal class Base64Util internal class Base64Util
{ {
internal const string WebEncoders_InvalidCountOffsetOrLength = "Invalid {0}, {1} or {2} length."; internal const string WebEncoders_InvalidCountOffsetOrLength = "Invalid {0}, {1} or {2} length.";
#if NET8_0_OR_GREATER
internal static CompositeFormat WebEncoders_MalformedInput = CompositeFormat.Parse("Malformed input: {0} is an invalid input length.");
#else
internal const string WebEncoders_MalformedInput = "Malformed input: {0} is an invalid input length."; internal const string WebEncoders_MalformedInput = "Malformed input: {0} is an invalid input length.";
#endif
public static string UrlEncode(byte[] input) public static string UrlEncode(byte[] input)
{ {
#if NET8_0_OR_GREATER
ArgumentNullException.ThrowIfNull(input);
#else
if (input == null) if (input == null)
{ {
throw new ArgumentNullException(nameof(input)); throw new ArgumentNullException(nameof(input));
} }
#endif
// Special-case empty input // Special-case empty input
if (input.Length == 0) if (input.Length == 0)
@ -60,15 +48,11 @@ namespace SpotifyAPI.Web
public static byte[] UrlDecode(string input) public static byte[] UrlDecode(string input)
{ {
#if NET8_0_OR_GREATER var buffer = new char[GetArraySizeRequiredToDecode(input.Length)];
ArgumentNullException.ThrowIfNull(input);
#else
if (input == null) if (input == null)
{ {
throw new ArgumentNullException(nameof(input)); throw new ArgumentNullException(nameof(input));
} }
#endif
var buffer = new char[GetArraySizeRequiredToDecode(input.Length)];
// Assumption: input is base64url encoded without padding and contains no whitespace. // Assumption: input is base64url encoded without padding and contains no whitespace.
@ -113,14 +97,10 @@ namespace SpotifyAPI.Web
private static int GetArraySizeRequiredToDecode(int count) private static int GetArraySizeRequiredToDecode(int count)
{ {
#if NET8_0_OR_GREATER
ArgumentOutOfRangeException.ThrowIfNegative(count);
#else
if (count < 0) if (count < 0)
{ {
throw new ArgumentOutOfRangeException(nameof(count)); throw new ArgumentOutOfRangeException(nameof(count));
} }
#endif
if (count == 0) if (count == 0)
{ {

Some files were not shown because too many files have changed in this diff Show More