@compas/code-gen
Version:
Generate various boring parts of your server
84 lines (65 loc) • 2.04 kB
Markdown
# @compas/code-gen
<p>
<a href="https://packagephobia.com/result?p=@compas/code-gen" target="_blank">
<img src="https://packagephobia.com/badge?p=@compas/code-gen" alt="Install size">
</a>
<a href="https://github.com/compasjs/compas/actions/workflows/main-checks.yml" target="_blank">
<img src="https://github.com/compasjs/compas/actions/workflows/main-checks.yml/badge.svg" alt="CI status badge">
</a>
<a href="https://codecov.io/gh/compasjs/compas" target="_blank">
<img src="https://codecov.io/gh/compasjs/compas/branch/main/graph/badge.svg?token=81D84CV04U" alt="Codecov status">
</a>
</p>
---
Code generators for routers, validators, SQL queries, API clients and more. Take
a look at the [documentation](https://compasjs.com/getting-started.html).
## As a server
```js
mainFn(import.meta, main);
async function main() {
const app = new App();
const T = new TypeCreator("post");
const R = T.router("/post");
app.add(
new TypeCreator("database")
.object("post")
.keys({
title: T.string().searchable(),
body: T.string(),
})
.enableQueries({ withDates: true }),
T.crud("/post").entity(T.reference("database", "post")).routes({
listRoute: true,
singleRoute: true,
createRoute: true,
updateRoute: true,
deleteRoute: true,
}),
);
await app.generate({
outputDirectory: "./src/generated/application",
dumpStructure: true,
dumpApiStructure: true,
dumpPostgres: true,
enabledGenerators: ["validator", "router", "sql", "apiClient"],
});
}
```
## As a client
```js
mainFn(import.meta, main);
async function main() {
const app = new App({ verbose: true });
let fromRemote = await loadApiStructureFromRemote(
Axios,
"https://some.compas.powered.backend",
);
app.extend(fromRemote);
await app.generate({
outputDirectory: "./src/generated",
isBrowser: true,
enabledGenerators: ["type", "apiClient", "reactQuery"],
});
await spawn("yarn", ["format"]);
}
```