Glanceway Glanceway
Все источники

npm Trending

Разработка v1.0.0

Popular and trending packages on npm

@codytseng #npm #packages #javascript

Настройки

Название Ключ Тип Обязательно По умолчанию Описание
Keyword KEYWORD string Нет typescript Search keyword, e.g. typescript, react, cli, ai

Исходный код

version: 1.0.0
name: npm Trending
description: Popular and trending packages on npm
author: codytseng
author_url: https://github.com/codytseng
category: Developer
tags:
  - npm
  - packages
  - javascript

config:
  - key: KEYWORD
    name: Keyword
    type: string
    required: false
    default: typescript
    description: "Search keyword, e.g. typescript, react, cli, ai"
import type { GlancewayAPI, SourceMethods } from "../../types";

export default (api: GlancewayAPI): SourceMethods => {
  return {
    async refresh() {
      const keyword = api.config.get("KEYWORD") || "typescript";

      type NpmSearchResult = {
        objects: Array<{
          package: {
            name: string;
            version: string;
            description?: string;
            date: string;
            links: {
              npm: string;
            };
            publisher?: {
              username: string;
            };
          };
        }>;
      };

      const res = await api.fetch<NpmSearchResult>(
        `https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(keyword)}&popularity=1.0&quality=0.5&maintenance=0.0&size=30`,
      );

      if (!res.ok || !res.json) {
        return;
      }

      api.emit(
        res.json.objects.map((obj) => {
          const pkg = obj.package;
          const author = pkg.publisher?.username
            ? ` · by ${pkg.publisher.username}`
            : "";

          return {
            id: pkg.name,
            title: `${pkg.name}@${pkg.version}`,
            subtitle: `${pkg.description || ""}${author}`,
            url: pkg.links.npm,
            timestamp: pkg.date,
          };
        }),
      );
    },
  };
};