Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Automatic SDK generator for the NestJS.
# INSTALL NESTIA
npm install --save-dev nestia
# WHEN ALL OF THE CONTROLLRES ARE GATHERED INTO A DIRECTORY
npx nestia sdk "src/controller" --out "src/api"
# REGULAR NESTJS PATTERN
npx nestia sdk "src/**/*.controller.ts" --out "src/api"
Don't write any swagger
comment. Just deliver the SDK.
When you're developing a backend server using the NestJS
, you don't need any extra dedication, for delivering the Rest API to the client developers, like writing the swagger
comments. You just run this Nestia up, then Nestia would generate the SDK automatically, by analyzing your controller classes in the compliation and runtime level.
With the automatically generated SDK through this Nestia, client developer also does not need any extra work, like reading swagger
and writing the duplicated interaction code. Client developer only needs to import the SDK and calls matched function with the await
symbol.
import api from "@samchon/bbs-api";
import { IBbsArticle } from "@samchon/bbs-api/lib/structures/bbs/IBbsArticle";
import { IPage } from "@samchon/bbs-api/lib/structures/common/IPage";
export async function test_article_read(connection: api.IConnection): Promise<void>
{
// LIST UP ARTICLE SUMMARIES
const index: IPage<IBbsArticle.ISummary> = await api.functional.bbs.articles.index
(
connection,
"free",
{ limit: 100, page: 1 }
);
// READ AN ARTICLE DETAILY
const article: IBbsArticle = await api.functional.bbs.articles.at
(
connection,
"free",
index.data[0].id
);
console.log(article.title, aritlce.body, article.files);
}
npm install --save-dev nestia
Installing the Nestia is very easy.
Just type the npm install --save-dev nestia
command in your NestJS backend project.
npx nestia sdk <source_controller_directory> --out <output_sdk_directory>
npx nestia sdk "src/**/*.controller.ts" --out "src/api"
npx nestia sdk "src/controllers" --out "src/api"
npx nestia sdk "src/controllers/consumers" "src/controllers/sellers" --out "src/api"
npx nestia sdk "src/controllers" --exclude "src/**/Fake*.ts" --out "src/api"
To generate a SDK library through the Nestia is very easy.
Just type the nestia sdk <input> --out <output>
command in the console. When there're multiple source directories containing the NestJS controller classes, type all of them separating by a space
word. If you want to exclude some directories or files from the SDK generation, the --exclude
option would be useful.
Also, when generating a SDK using the cli options, compilerOptions
would follow the tsconfig.json
, that is configured for the backend server. If no tsconfig.json
file exists in your project, the configuration would be default option (ES5
with strict
mode). If you want to use different compilerOptions
with the tsconfig.json
, you should configure the nestia.config.ts.
SDK library generated by the Nestia requires the nestia-fetcher module.
Therefore, when you publish an SDK library generated by this Nestia, you have to write the nestia-fetcher module into the dependencies
property of the package.json
file like below. You also can configure the dependencies
property of the package.json
file by typing the npm install --save nestia-fetcher
command in the console, too.
{
"name": "payments-server-api",
"dependencies": {
"nestia-fetcher": "^1.0.2"
}
}
nestia.config.ts
export interface IConfiguration
{
/**
* List of files or directories containing the NestJS controller classes.
*/
input: string | string[] | IConfiguration.IInput;
/**
* Output directory that SDK would be placed in.
*/
output: string;
/**
* Compiler options for the TypeScript.
*
* If omitted, the configuration would follow the `tsconfig.json`.
*/
compilerOptions?: tsc.CompilerOptions
}
export namespace IConfiguration
{
export interface IInput
{
/**
* List of files or directories containing the NestJS controller classes.
*/
include: string[];
/**
* List of files or directories to be excluded.
*/
exclude: string[];
}
}
Instead of specifying input
and output
directories using the cli options, you can specify those directories as an independent configuration file. It's the nestia.config.ts
and with the nestia.config.ts
file, you also configure independent TypeScript compiler option from the tsconfig.json
.
Write below content as the nestia.config.ts
file and place it onto the root directory of your backend project. After the configuration, you can generate the SDK only with the npx nestia sdk
command, without any directory specification.
export = {
input: "src/controllers",
output: "src/api"
};
Alternative options for the regular NestJS project:
export = { input: "src/**/*.controller.ts", /* input: { include: ["src/controllers/*.controller.ts"], exclude: ["src/controllers/fake_*.controller.ts"] },*/ output: "src/api" }
When developing a NestJS backend server with this Nestia, I recommend you to follow below directory structure. The key princinple of below structure is to gathering all of the DTO interface structures into the src/api/structures
directory and gather all of the controller classes into the src/controllers
directory.
If you place the SDK onto the src/api
directory and gather all of the DTO interface structures into the src/api/structures
directory, you can publish the SDK library very easily without any special configuration. Also when you're develop the test automation program, you can implement the API testing features very convenienty through the automatically generated SDK through this Nestia.
For your deep understanding about this directory structure with this Nestia, I've prepared an example backend project. Looking around the example repository and reading the README.md of it, you can feel that such directory structure is how convenient for SDK publishing and test automation program implementation.
To demonstrate which SDK codes would be generated by this Nestia:
If you've decided to adapt this Nestia and you want to generate the SDK directly, you don't need any extra work. Just keep you controller class down and do noting. The only one exceptional case that you need an extra dedication is, when you want to explain about the API function to the client developers through the comments.
@nest.Controller("consumers/:section/sales/:saleId/questions")
export class ConsumerSaleQuestionsController
{
/**
* Store a new question.
*
* @param request Instance of the Express.Request
* @param section Code of the target section
* @param saleId ID of the target sale
* @param input Content to archive
*
* @return Newly archived question
* @throw 400 bad request error when type of the input data is not valid
* @throw 401 unauthorized error when you've not logged in yet
*/
@nest.Post()
public store
(
@nest.Request() request: express.Request,
@nest.Param("section") section: string,
@nest.Param("saleId") saleId: number,
@nest.Body() input: ISaleQuestion.IStore
): Promise<ISaleQuestion>;
}
When you run the Nestia up using the upper controller class ConsumerSaleQuestionsController
, the Nestia would generate below function for the client developers, by analyzing the ConsumerSaleQuestionsController
class in the compilation and runtime level.
As you can see, the comments from the ConsumerSaleQuestionsController.store()
are fully copied to the SDK function. Therefore, if you want to deliver detailed description about the API function, writing the detailed comment would be tne best choice.
/**
* Store a new question.
*
* @param connection connection Information of the remote HTTP(s) server with headers (+encryption password)
* @param request Instance of the Express.Request
* @param section Code of the target section
* @param saleId ID of the target sale
* @param input Content to archive
* @return Newly archived question
* @throw 400 bad request error when type of the input data is not valid
* @throw 401 unauthorized error when you've not logged in yet
*
* @nestia Generated by Nestia - https://github.com/samchon/nestia
* @controller ConsumerSaleQuestionsController.store()
* @path POST /consumers/:section/sales/:saleId/questions/
*/
export function store
(
connection: IConnection,
section: string,
saleId: number,
input: Primitive<store.Input>
): Promise<store.Output>
{
return Fetcher.fetch
(
connection,
store.ENCRYPTED,
store.METHOD,
store.path(section, saleId),
input
);
}
export namespace store
{
export type Input = Primitive<ISaleInquiry.IStore>;
export type Output = Primitive<ISaleInquiry<ISaleArticle.IContent>>;
export const METHOD = "POST" as const;
export const PATH: string = "/consumers/:section/sales/:saleId/questions";
export const ENCRYPTED: Fetcher.IEncrypted = {
request: true,
response: true,
};
export function path(section: string, saleId: number): string
{
return `/consumers/${section}/sales/${saleId}/questions`;
}
}
https://github.com/samchon/backend
I support template backend project using this Nestia* library, backend.
Also, reading the README content of the backend template repository, you can find lots of example backend projects who've been generated from the backend. Furthermore, the example projects guide how to generate SDK library from the Nestia and how to distribute the SDK library thorugh the NPM module.
Therefore, if you're planning to compose your own backend project using this Nestia, I recommend you to create the repository and learn from the backend template project.
https://github.com/samchon/nestia-helper
Helper library of the NestJS
with Nestia.
nestia-helper is a type of helper library for Nestia
by enhancing decorator functions. Also, all of the decorator functions provided by this nestia-helper are all fully compatible with the Nestia, who can generate SDK library by analyzing NestJS controller classes in the compilation level.
Of course, this nestia-helper is not essential for utilizing the NestJS
and Nestia. You can generate SDK library of your NestJS developed backend server without this nestia-helper. However, as decorator functions of this nestia-helper is enough strong, I recommend you to adapt this nestia-helper when using NestJS
and Nestia.
https://github.com/samchon/safe-typeorm
safe-typeorm is another library that what I've developed, helping TypeORM
in the compilation level and optimizes DB performance automatically without any extra dedication.
Therefore, this Nestia makes you to be much convenient in the API interaction level and safe-typeorm helps you to be much convenient in the DB interaction level. With those Nestia and safe-typeorm, let's implement the backend server much easily and conveniently.
I have special thanks to the Archidraw, where I'm working for.
The Archidraw is a great IT company developing 3D interior editor and lots of solutions based on the 3D assets. Also, the Archidraw is the first company who had adopted this Nestia on their commercial backend project, even this Nestia was in the alpha level.
FAQs
Nestia CLI tool
The npm package nestia receives a total of 681 weekly downloads. As such, nestia popularity was classified as not popular.
We found that nestia demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.