query-registry
Version:
Query the npm registry for packuments, manifests, packages and download counts
71 lines (58 loc) • 1.57 kB
JavaScript
import gitUrlParse from 'git-url-parse';
function normalizeRawRepository({
rawRepository
}) {
if (isRepository(rawRepository)) {
return normalizeRepository({
rawRepository
});
}
if (typeof rawRepository === 'string') {
return normalizeRepository({
rawRepository: {
url: rawRepository
}
});
}
return undefined;
}
function isRepository(rawRepository) {
return rawRepository && typeof rawRepository === 'object' && typeof rawRepository['url'] === 'string' && ['string', 'undefined'].includes(typeof rawRepository['type']) && ['string', 'undefined'].includes(typeof rawRepository['directory']);
}
function normalizeRepository({
rawRepository
}) {
const {
url,
directory: repositoryDir
} = rawRepository;
const info = parseGitURL({
url
});
if (!info) {
return undefined;
}
const {
source,
full_name: repositoryID,
filepath
} = info; // Add domain to sources derived from npm-style shortcuts
const host = source.replace(/^$/, 'github.com').replace(/^github$/, 'github.com').replace(/^gitlab$/, 'gitlab.com').replace(/^bitbucket$/, 'bitbucket.org');
const parsedDir = filepath !== '' ? filepath : undefined;
return {
type: 'git',
url: `https://${host}/${repositoryID}`,
directory: repositoryDir != null ? repositoryDir : parsedDir
};
}
function parseGitURL({
url
}) {
let info;
try {
info = gitUrlParse(url);
} catch {}
return info;
}
export { normalizeRawRepository };
//# sourceMappingURL=normalize-raw-repository.esm.js.map