https://github.com/ilyhalight/typebox-genx
Code generation tool that extends sinclair/typebox-codegen package with import functionality
https://github.com/ilyhalight/typebox-genx
codegen extended genx import typebox typescript
Last synced: 9 months ago
JSON representation
Code generation tool that extends sinclair/typebox-codegen package with import functionality
- Host: GitHub
- URL: https://github.com/ilyhalight/typebox-genx
- Owner: ilyhalight
- License: mit
- Created: 2025-02-16T11:41:31.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-08-08T11:26:18.000Z (10 months ago)
- Last Synced: 2025-08-08T23:23:40.735Z (10 months ago)
- Topics: codegen, extended, genx, import, typebox, typescript
- Language: TypeScript
- Homepage: https://ilyhalight.github.io/typebox-genx/
- Size: 59.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README-RU.md
- Changelog: changelog.md
- License: LICENSE
Awesome Lists containing this project
README
# typebox-genx
[](https://github.com/ilyhalight/typebox-genx/actions/workflows/build.yml)
[](https://www.npmjs.com/package/@toil/typebox-genx)
[](README.md)
[](README-RU.md)
typebox-genx (TypeBox Generator eXtended) это инструмент для генерации кода, который расширяет пакет `@sinclair/typebox-codegen` с помощью функционала импорта
## Установка
Установка с помощью Bun:
```bash
bun install @toil/typebox-genx
```
Установка с помощью Node:
```bash
npm install @toil/typebox-genx
```
## Перед началом
Эта библиотека **очень очень очень очень нестабильна**, и некоторые части функционала еще недоступны.
Библиотека плохо работает с областью видимости и я надеюсь, что у вас есть отдельные файлы для типов
Библиотека поддерживает только 1 тип импорта в строке. Любой из этих вариантов кода поддерживается:
> [!WARNING]
> Сейчас поддерживается импорт только с помощью `import {...} from "..."`. Еще вы можете использовать "type".
```js
import type { ClientOpts } from "@vot.js/node";
// or
// import { ClientOpts as RenamedOpts } from "@vot.js/node";
// or
import { Client, type ClientOpts } from "@vot.js/node";
// or
// import * as Client from "@vot.js/node";
// and many more
```
Эти варианты кода не поддерживаются:
```js
import Client, { ClientOpts } from "@vot.js/node";
// or
import "@vot.js/node";
```
Сейчас `typeof variable` тоже не поддерживается
## Начало работы
Библиотека предоставляет несколько методов:
```js
const genx = new GenX({
root: path.join(__dirname),
includeNearbyFiles: true,
});
// read from input dir and write to output
await genx.generateByDir(
path.join(__dirname, "src/types"),
path.join(__dirname, "dist"),
);
// read file and return result to variable
const codeByFile = await genx.generateByFile(
path.join(__dirname, "src/types/with.ts"),
);
// read string and return result to variable
const raw = `import type { RequestMethod } from "@toil/translate/types/providers/base";
export type Test = {
method: RequestMethod;
};`;
const codeByStr = await genx.generateByCode(raw);
// clear saved imports and depends list if needed
genx.clearData();
// create client for enabled workspaces
const genxw = new GenX({
root: path.join(__dirname, "packages", "packageA"),
workspaceRoot: path.join(__dirname),
});
await genx.generateByDir(
path.join(__dirname, "packages", "packageA"),
path.join(__dirname, "dist"),
);
```
## Сборка
Для сборки необходимо наличие:
- [Bun](https://bun.sh/)
Не забудьте установить зависимости:
```bash
bun install
```
Запустите сборку:
```bash
bun build:all
```
## Тесты
Библиотека имеет минимальное покрытие тестами для проверки ее работоспособности.
Запустить тесты:
```bash
bun test
```