Use tsdk to generate hacker news API sdk, based on the offical API documentation:
https://github.com/HackerNews/API
- TypeScript types
- Support SWR hooks
Install:
npm install hn-api-sdk
Usage (2 steps):
Step 1, create ./user-api.ts
and ./user-api-hooks.ts
:
Create user-api.ts
(use fetch)
import xior, { XiorError } from "xior";
import { setHandler, setXiorInstance, xiorHandler } from "hn-api-sdk";
export * from "hn-api-sdk/lib/user-api";
export * from "hn-api-sdk/lib/apiconf-refs";
export * from "hn-api-sdk/lib/shared-refs";
export const baseURL = `https://hacker-news.firebaseio.com`;
const xiorInstance = xior.create({
baseURL,
headers: {},
});
xiorInstance.interceptors.request.use(
(config) => {
return config;
},
(error) => {
return Promise.reject(error);
}
);
xiorInstance.interceptors.response.use(
async (response) => {
return response;
},
async (error: XiorError) => {
return Promise.reject(error?.message);
}
);
setXiorInstance(xiorInstance);
setHandler(xiorHandler);
Or use axios as the client, create user-api.ts
:
import axios, { AxiosError } from "axios";
import { setHandler, setAxiosInstance, axiosHandler } from "hn-api-sdk";
export * from "hn-api-sdk/lib/user-api";
export * from "hn-api-sdk/lib/apiconf-refs";
export * from "hn-api-sdk/lib/shared-refs";
export const baseURL = `https://hacker-news.firebaseio.com`;
const axiosInstance = axios.create({
baseURL,
headers: {},
});
axiosInstance.interceptors.request.use(
(config) => {
return config;
},
(error) => {
return Promise.reject(error);
}
);
axiosInstance.interceptors.response.use(
async (response) => {
return response;
},
async (error: AxiosError) => {
return Promise.reject(error?.message);
}
);
setAxiosInstance(axiosInstance);
setHandler(axiosHandler);
Create user-api-hooks.ts
import "./user-api";
export * from "hn-api-sdk/lib/user-api-hooks";
Step 2, import module from ./user-api.ts
:
import {
GetUserDetail,
GetStories,
GetStory,
GetComment,
GetAsk,
GetJob,
GetPoll,
GetPart,
GetMaxItemId,
GetChangedItemsAndProfiles,
} from "./user-api";
GetUserDetail({ id: "jl" }).then((res) => {
console.log(res.id, res.about, res.submitted);
});
First, install dependencies:
Recommend use
pnpm
pnpm install
pnpm run ready
Then, sync hn-api-sdk
packakge files:
pnpm --filter=api sync-sdk
Publish to npm
pnpm --filter=hn-api-sdk start-publish