npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@prequest/response-types-client

v1.5.2

Published

Restful-API 响应的 JSON 数据的 TypeScript 类型生成器

Downloads

10

Readme

@prequest/response-types-client

Restful-API 响应的 JSON 数据的 TypeScript 类型生成器

安装

npm install @prequest/response-types-client

前言

在前端项目中,没有 fs 等 API,导致不能在运行时,动态生成 Restful-API 响应的 JSON 数据的类型文件。

因而我尝试开发了 @prequest/response-types-generator,它根据配置,可以发起请求和解析响应,最后生成类型文件。但缺点也很明显,需要将要项目中请求的接口一个一个配置到配置文件中。普通的 Get 请求还好说,但对于 Post 请求,一些复杂的传参,也不是很好处理。

本项目解决了上述问题。原理非常简单,首先开启一个 Http Server,然后在前端项目的请求库中间件中,将请求的参数和响应结果,通过一个新的请求实例,发送到 Http Server 中,Http Server 根据传参,利用 fs API 向指定目录生成类型文件即可。

项目分为两部分 @prequest/response-types-server@prequest/response-types-client

使用

在发起 HTTP 请求时,中间件会向 @prequest/response-types-server 发起生成类型文件的请求

配置中间件

import { create } from '@prequest/xhr'
import generatorMiddleware from '@prequest/response-types-client'

const httpAgent = create({ path: 'http://localhost:10010/' })
const middleware = generatorMiddlewareWrapper({
  enable: process.env.NODE_ENV === 'development',
  httpAgent: httpAgent,
  outPutDir: 'src/api-types',
  typesGeneratorConfig(req, res) {
    const { path } = req
    const { data } = res

    if (!path) throw new Error('path not found')

    const outPutName = path.replace(/.*\/(\w+)/, (_, __) => __)
    const interfaceName = outPutName.replace(/^[a-z]/, g => g.toUpperCase())

    return {
      data,
      outPutName,
      interfaceName,
      overwrite: true,
    }
  },
})

export const prequest = create({ baseURL: 'http://localhost:3000' })
prequest.use(middleware)

在小程序项目中使用应当注意,需要配置中间件将真正服务端的响应返回

import { create } from '@prequest/miniprogram'
import generatorMiddleware, {  } from '@prequest/response-types-client'

const httpAgent = create(wx.request, { path: 'http://localhost:10010/' })

httpAgent.use(async (ctx, next) => {
  await next()
  const { statusCode, data } = ctx.response
  if (statusCode === 200) {
    // 请求需要返回真正的服务器数据
    ctx.response = data
  }
})

const middleware = generatorMiddlewareWrapper({
  enable: process.env.NODE_ENV === 'development',
  httpAgent: httpAgent,
  // 其他参数...
}

请求参数

上面在生成 prequest 实例的时候,类型中提供了 rewriteType 参数,可以强制复写已生成的类型文件。即每次请求,都会重新生成一份新的类型文件

prequest('/user', { rewriteType: true })

配置

中间件参数

| 参数 | 类型 | 必填 | 含义 | | -------------------- | ----------------------------- | ---- | ------------------------------- | | enable | boolean | 否 | 开启中间件 | | outPutDir | string | 是 | 类型文件输出目录 | | httpAgent | PreQuestInstance | 是 | 发起请求 | | typesGeneratorConfig | (req, res) => GeneratorConfig | 是 | json-types-generator 工具的参数 |

GeneratorConfig

| 参数 | 类型 | 必填 | 含义 | | ------------- | ------- | ---- | ----------------- | | data | Json | 是 | 要生成类型的 JSON | | outPutName | string | 是 | 类型文件名称 | | interfaceName | string | 是 | 导出的接口名称 | | overwrite | boolean | 是 | 类型文件可复写 |