better-trakt
Version:
A Trakt.tv client with native Typescript support and quality of life features
94 lines • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildUrl = void 0;
/**
* Builds an api uri with specified http queries
* @remarks
* While this can be easily achieved with axios,
* the goal is to provide as agnostic of an api
* as possible. This enables the easy replacement of
* axios with say, the fetch api.
*
* @param baseUrl api uri
* @param options query options, access token is ignored
* @returns "built" uri
* @internal
*/
function buildUrl(baseUrl, options) {
// if not options
if (options === undefined)
return baseUrl;
const queryOptions = [];
let newUrl = baseUrl;
// all pagination options
if (options.pagination !== undefined) {
queryOptions.push(`page=${options.pagination.page}`);
queryOptions.push(`limit=${options.pagination.limit}`);
}
// all the different filters that can be added
if (options.filters !== undefined) {
if (options.filters.query !== undefined)
queryOptions.push(`query=${options.filters.query}`);
if (options.filters.years !== undefined)
queryOptions.push(`years=${options.filters.years}`);
if (options.filters.genres !== undefined)
options.filters.genres.forEach((value) => {
queryOptions.push(`genres=${value}`);
});
if (options.filters.languages !== undefined)
options.filters.languages.forEach((value) => {
queryOptions.push(`languages=${value}`);
});
if (options.filters.countries !== undefined)
options.filters.countries.forEach((value) => {
queryOptions.push(`countries=${value}`);
});
if (options.filters.runtimes !== undefined)
queryOptions.push(`runtimes=${options.filters.runtimes}`);
if (options.filters.studios !== undefined)
options.filters.studios.forEach((value) => {
queryOptions.push(`studios=${value}`);
});
}
// all the optional parameters
if (options.period !== undefined) {
// some methods allow a period to be specified
newUrl += `/${options.period}`;
}
else if (options.startDate !== undefined) {
// others allow for a start date
newUrl += `/${options.startDate}`;
}
else if (options.country !== undefined) {
// a select few allow a country
newUrl += `/${options.country}`;
}
else if (options.language !== undefined) {
// a select few allow a language
newUrl += `/${options.language}`;
}
else if (options.type !== undefined) {
// a select few allow type
// MUST come before sort
newUrl += `/${options.type}`;
}
else if (options.sort !== undefined) {
// a select few allow sort
newUrl += `/${options.sort}`;
}
// if there are any query params to add
if (queryOptions.length > 0) {
newUrl += '?';
queryOptions.forEach((value, i) => {
if (i === 0) {
newUrl += value;
}
else {
newUrl += `&${value}`;
}
});
}
return newUrl;
}
exports.buildUrl = buildUrl;
//# sourceMappingURL=buildUrl.js.map