Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@hoth/schema

Package Overview
Dependencies
Maintainers
4
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@hoth/schema

提供将 interface 转换为 json schema 并在 hoth 中使用的能力。

  • 1.3.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
4
Created
Source

@hoth/schema

提供将 interface 转换为 json schema 并在 hoth 中使用的能力。

使用方式

编译

提供了一个 gulp 插件,用于编译所有 interfaces。

import {compileInterface} from '@hoth/schema';

function compile() {
    return src('src/interfaces/**/*.ts')
        .pipe(compileInterface({
            fileName: 'schema.json'
        }))
        .pipe(dest('dist/interfaces'));
}

所有 interface 会编译为一个文件,在运行时需要加载这个文件。

运行时初始化

使用 initSchema 函数来初始化生成的 schema。

import path from 'path';
import {FastifyInstance} from 'fastify';
import {initSchema} from '@hoth/schema';
export default async function main(fastify: FastifyInstance, config) {
    await initSchema(fastify, {
        schemaPath: path.resolve(__dirname, './interfaces/schema.json')
    });
    return fastify;
}

在 controller 中使用

所有的 interface 都会转为 json schema,并通过 fastify 的 addSchema 函数添加到当前应用。通过 ref 语法使用即可:

import {Controller, GET, Inject} from '@hoth/decorators';
import {FastifyReply, FastifyRequest} from 'fastify';

@Controller('/index')
export default class AppController {

    @GET({
        url: '',
        options: {
            schema: {
                querystring: {$ref: 'hoth/aaa.ts#/definitions/bbb'}
            }
        }
    })
    getApp(req: FastifyRequest, reply: FastifyReply) {

        return '';
    }
}

自定义 schema id

默认生成的 id 为 hoth/${文件名},不同目录下的同名文件可能会冲突。

可以在编译时通过以下方式自定义 schema id:

import {compileInterfaceToSchema} from '@hoth/schema/dist/gulp';

function compile() {
    return src('src/interfaces/**/*.ts')
        .pipe(compileInterfaceToSchema({
            fileName: 'schema.json',
            getId(filePath) {
                return ''; // 这里根据 filePath 生成一个新的 id 来返回。
            }
        }))
        .pipe(dest('dist/interfaces'));
}

Keywords

FAQs

Package last updated on 29 Mar 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc