Exemplo n.º 1
0
    .then((data) => {
        const dataKeys = Object.keys(data);
        const missingData = dataKeys.filter((key) => !data[key]);

        if (missingData.length) {
            if (missingData.length === dataKeys.length) {
                log.info(logPrefix, `The GitHub repository ${repository} no longer exists, is invalid or blocked`);
            } else {
                log.info(logPrefix, `It seems that the GitHub repository ${repository} is empty`);
            }

            return null;
        }

        return deepCompact({
            homepage: data.info.homepage,
            forkOf: (data.info.fork && data.info.parent && data.info.parent.full_name) || null,

            starsCount: data.info.stargazers_count,
            forksCount: data.info.forks_count,
            subscribersCount: data.info.subscribers_count,

            issues: Object.assign(data.issueStats, { isDisabled: !data.info.has_issues }),

            // Contributors (top 100)
            contributors: data.contributors
            .map((contributor) => {
                const author = contributor.author;

                // Empty entries will be stripped by deepCompact
                return author && { username: contributor.author.login, commitsCount: contributor.total };
            })
            .reverse(),

            // Commit activity
            commits: extractCommits(data.commitActivity),

            // Statuses
            statuses: uniqBy(data.statuses, (status) => status.context)
            .map((status) => pick(status, 'context', 'state')),
        });
    })
Exemplo n.º 2
0
    return Promise.try(() => {
        const maintainers = extractMaintainers(data, packageJson);

        return deepCompact({
            name: packageJson.name,
            version: packageJson.version,
            description: packageJson.description,
            keywords: packageJson.keywords,
            date: data.time && (data.time[packageJson.version] || data.time.modified),

            publisher: extractPublisher(packageJson, maintainers),
            maintainers: maintainers && maintainers.map((maintainer) => {
                return { username: maintainer.name, email: maintainer.email };
            }),

            author: packageJson.author,
            contributors: packageJson.contributors,

            repository: packageJson.repository,
            links: extractLinks(packageJson),
            license: extractLicense(packageJson),

            dependencies: packageJson.dependencies,
            devDependencies: packageJson.devDependencies,
            peerDependencies: packageJson.peerDependencies,
            bundledDependencies: packageJson.bundledDependencies || packageJson.bundleDependencies,
            optionalDependencies: packageJson.optionalDependencies,

            releases: extractReleases(data),

            deprecated: packageJson.deprecated,
            hasTestScript: get(packageJson, 'scripts.test', 'no test specified').indexOf('no test specified') === -1,

            // Need to use typeof because there's some old modules in which the README is an object, e.g.: `flatsite`
            readme: (typeof data.readme === 'string' && data.readme.indexOf('No README data') === -1) ?
                data.readme : null,
        });
    })
Exemplo n.º 3
0
 .then((result) => deepCompact(result))