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

@loongwoo/stc

v1.6.1

Published

OpenApi/Swagger/Apifox document conversion tool. OpenAPI(Swagger)、Apifox 文档转换为接口文件。

Downloads

774

Readme

STC

STC (Swagger Transform Code) is a tool for converting Swagger documents into code files.

STC(Swagger Transform Code) 是一个 Swagger 文档转换成代码文件的工具。

Publish to release Publish Package to npmjs

feature: 特性:

  • 🐹 Support for Swagger 2, 3 and Apifox.

    🐹 支持 Swagger 2、3 和 Apifox。

  • 🌐 Support Axios, Wechat request library。

    🌐 支持 Axios、Wechat 请求库。

  • 💡 Support plug-in development.

    💡 支持插件开发。

  • 🐣 Built-in transformation languages:

    🐣 内置转换语言:

    • TypeScript, almost equivalent to handwriting.

      TypeScript,几乎等同于手写。

    • JavaScript, from TypeScript to it.

      JavaScript,由 TypeScript 转换而来。

    • 🚧 ...

Quick start 快速开始

Download executable files 下载可执行文件

download by system:

按系统下载

  • stc: Intel-based Mac

    stc:Intel 系列的 Mac

  • stc-m: M-series Mac

    stc-m:M 系列的 Mac

  • stc-linux:Linux

  • stc-win.exe: Windows

NPM

1.安装 @loogwoo/stc npm 包

pnpm add @loongwoo/stc -D

2.打开项目 package.json 文件,在 scripts 添加如下命令:

{
  "scripts": {
    "api": "stc --url=http://127.0.0.1:4523/export/openapi/2?version=3.1"
  }
}

Use 使用

⚠️ Note: deno will not parse the ~ character as the user's home directory.

注意:deno 不会解析 ~字符为用户主目录。

stc --url=https://petstore3.swagger.io/api/v3/openapi.json --outDir=out

终端输出信息

输出文件

已有项目

假设一个项目目录为:

.
├── src
│   └── apis # 将 shared 目录复制到这里
│       └── shared
│       └── xxx.ts # 其他文件

Axios

1.找到 outDir 的目录,复制 shared 整个目录到你封装的 axios 模块的目录下。

2.打开 shared > axios > index.ts 文件,复制 request 方法,添加到你封装的 axios 模块中。若没有封装的话,复制 index.ts 文件为一个新文件,以免修改被覆盖的问题。

3.以 Vue 为例,在 main.ts 文件中添加以下代码:

import { createApiClient } from './apis/shared/fetchRuntime';

createApiClient({
  baseURL: 'https://api.xxx.com'
  // onError(msg) {
  //   // 处理错误信息
  // }
})

Wechat

1.找到 outDir 的目录,复制 shared 整个目录到你封装的 wechat 模块的目录下。

2.打开 shared > wechat > index.ts 文件,复制 request 方法,添加到你封装的 wx.request 代码文件中。若没有封装的话,复制 index.ts 文件为一个新文件,以免修改被覆盖的问题。

3.在 app.ts 文件中添加以下代码:

import { createApiClient } from './apis/shared/fetchRuntime';
// import Notify from './miniprogram_npm/@vant/weapp/notify/notify';

App<IAppOption>({
  onLaunch() {
    createApiClient({
      baseURL: 'https://api.xxx.com,
      onError(msg) {
        // Notify({ type: 'danger', message: msg, selector: '#v-notify'})
      }
    })
  }
});

Options 选项

| Option | Alias | Type | Default | Description | | ----------- | ----- | -------- | --------- | ------------------------------------------------------------------------------------------------------------ | | url | | string | | Swagger 文档地址,或者本地路径 | | outDir | o | string | ./stc_out | 输出目录 | | platform | p | string | axios | 平台,可选值:axioswechat | | lang | l | string | ts | 语言,用于输出文件的后缀名 | | tag | | number | | 从接口 url 指定标签,默认读取 tags 的第一个用于文件名 | | filter | f | string[] | | 过滤接口,符合过滤条件的接口会被生成。示例: --filter "/pet/*",生成 /pet 的接口,同时支持多个 --filter | | conjunction | c | string | By | 方法的连接词,默认值为 By | | version | v | boolean | | 输出版本信息 | | help | h | boolean | | 输出帮助信息 |

Plug-in development 插件开发

For convenience, STC can not only develop plugins in Deno, but also provides @loongwoo/stc npm library, which can develop plugins in Node environment.

为了方便,STC 不仅可以在 Deno 中开发插件,同时也提供了 @loongwoo/stc npm 库,可以在 Node 环境中开发插件。

查看示例代码

Deno 方式

⚠️ 准备 Deno 环境

创建一个 myPlugin.ts 文件:

// 引用模块
import { start } from 'https://deno.land/x/[email protected]/mod.ts'

// 定义插件
const myPlugin: IPlugin = {
  name: 'stc:MyPlugin',
  lang: 'ts',
  setup(options) {
    console.log(options)
  },
  onTransform(def, action) {
    // 转换 definition
    const defContent: string = parserDefinition(
      def /* 这里的 def 是 Definition 对象 */
    )
    // 转换 action
    const actionContent: Map<string, string> = parserAction(
      action /* 这里的 action 是 Action 对象 */
    )
    // 返回转换后的内容
    return {
      definition: defContent,
      action: actionContent // 这里的 actionContent 是 Map<string, string> 类型,key 是文件名称,value 是转换后的代码
    }
  },
  onEnd() {
    console.log('end')
  }
}

// 使用插件
start({
  // ...其他配置
  plugins: [myPlugin]
})

Node 方式

1.创建一个 myPlugin.ts 文件。

2.添加 @loongwoo/stc 引用,使用 start 方法:

import { start } from '@loongwoo/stc'

3.在插件的 onTransform 钩子函数中实现将 definitionaction 转换为目标语言的代码。

export const myPlugin: IPlugin = {
  name: 'stc:MyPlugin',
  lang: 'ts',
  setup(options) {
    console.log(options)
  },
  onTransform(def, action) {
    // 转换 definition
    const defContent: string = parserDefinition(
      def /* 这里的 def 是 Definition 对象 */
    )
    // 转换 action
    const actionContent: Map<string, string> = parserAction(
      action /* 这里的 action 是 Action 对象 */
    )
    // 返回转换后的内容
    return {
      definition: defContent,
      action: actionContent
    }
  },
  onEnd() {
    console.log('end')
  }
}

4.在 start 方法里,添加 plugins:

start({
  // ...其他配置
  plugins: [myPlugin]
})