모든 소스
npm Trending
개발자 v1.0.0Popular 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" 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,
};
}),
);
},
};
}; 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,
};
}),
);
},
};
};