packagist-api-client
Version:
Packgist (PHP Package Repository) API client in JavaScript.
66 lines (65 loc) • 2.25 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
async function fetchPaginatedResult(url) {
const response = await axios_1.default.get(url.toString());
if (!response.data.next) {
return response.data;
}
return { ...response.data, next: async () => fetchPaginatedResult(response.data.next) };
}
async function search({ name, tags, type, }, pageSize) {
const url = new URL('https://packagist.org/search.json');
url.searchParams.append('q', name);
addTagQueries(url, tags);
url.searchParams.append('type', type);
if (pageSize) {
url.searchParams.append('per_page', pageSize.toString());
}
return fetchPaginatedResult(url);
}
exports.search = search;
async function searchByName(name, pageSize) {
const url = new URL('https://packagist.org/search.json');
url.searchParams.append('q', name);
if (pageSize) {
url.searchParams.append('per_page', pageSize.toString());
}
return fetchPaginatedResult(url);
}
exports.searchByName = searchByName;
async function searchByTag(tags, pageSize) {
const url = new URL('https://packagist.org/search.json');
addTagQueries(url, tags);
if (pageSize) {
url.searchParams.append('per_page', pageSize.toString());
}
return fetchPaginatedResult(url);
}
exports.searchByTag = searchByTag;
async function searchByType(type, pageSize) {
const url = new URL('https://packagist.org/search.json');
url.searchParams.append('type', type);
if (pageSize) {
url.searchParams.append('per_page', pageSize.toString());
}
return fetchPaginatedResult(url);
}
exports.searchByType = searchByType;
function addTagQueries(url, tags) {
if (typeof tags === 'string') {
url.searchParams.append('tags', tags);
}
else if (Array.isArray(tags)) {
tags.forEach((tag, i) => {
url.searchParams.append(`tags[${i}]`, tag);
});
}
else {
throw Error('tags input must be a string or an Array of strings');
}
return url;
}