rest-generator for cyan
npm install cyan-rest-generator --save-dev- Generates maven-rest interfaces (rest, flax, url)
rest-generator <input-path> <output-path>
Input
import { Get, HeaderParam, Post, QueryParam, SystemParam } from "@jnpmedi/cyan/dist/router";
import { BaseController } from "./Base.controller";
export class HelloController extends BaseController {
constructor() { super(); }
@Get("hello")
async getHello(
@SystemParam({ type: "REQ", attr: "remoteAddress" }) ipAddr: string,
@HeaderParam("user-agent", { required: true }) userAgent: string,
@HeaderParam("authorization", { required: true }) authorization: string,
@QueryParam("foo", {required: true}) foo: string,
@QueryParam("bar", {required: false}) bar: number,
): Promise<HelloResponse> {
return {};
}
@Post("hello")
async createHello(
@SystemParam({ type: "REQ", attr: "remoteAddress" }) ipAddr: string,
@HeaderParam("user-agent", { required: true }) userAgent: string,
@HeaderParam("authorization", { required: true }) authorization: string,
): Promise<CreateHelloResponse> {
return {};
}
}
export interface HelloResponse {}
export interface CreateHelloResponse {}Output
import { GetHelloRequest, HelloResponse, CreateHelloResponse, CreateHelloRequest } from "./Hello.dto";
import { HelloUrl } from "./Hello.url";
import { ApiReq } from "../common/flax.types";
import { extractKey, HttpRequest } from "../common/HttpRequest";
export class HelloRest {
public static async getHello(req: ApiReq<GetHelloRequest>): Promise<{}> {
const authorization = extractKey(req, "authorization");
const resp = await HttpRequest.request<{}>(
process.env.MAVEN_DOCS_BE_URL,
...HelloUrl.getHello,
req,
{
authorization,
}
);
return resp.data;
}
public static async createHello(req: ApiReq<CreateHelloRequest>): Promise<{}> {
const authorization = extractKey(req, "authorization");
const resp = await HttpRequest.request<{}>(
process.env.MAVEN_DOCS_BE_URL,
...HelloUrl.createHello,
req,
{
authorization,
}
);
return resp.data;
}
}import { GetHelloRequest, {}, CreateHelloRequest } from "./Hello.dto";
import { HelloUrl } from "./Hello.url";
import { restReq } from "../common/cyan.types";
import { FxApiRequestData, FxRequestData } from "../common/flax.types";
import { extractKey } from "../common/HttpRequest";
export class HelloFlax {
public static getHello(data: FxRequestData<GetHelloRequest>): FxApiRequestData<{}> {
return {
...restReq(process.env.MAVEN_DOCS_BE_URL, HelloUrl.getHello, data),
reducer: resp => resp,
errReducer: resp => resp,
};
}
public static createHello(data: FxRequestData<CreateHelloRequest>): FxApiRequestData<{}> {
return {
...restReq(process.env.MAVEN_DOCS_BE_URL, HelloUrl.createHello, data),
reducer: resp => resp,
errReducer: resp => resp,
};
}
}import { RestUrl } from "../common/cyan.types";
export class HelloUrl {
public static getHello: RestUrl = ["GET", "hello"];
public static createHello: RestUrl = ["POST", "hello"];
}