typebox-genx (TypeBox Generator eXtended) это инструмент для генерации кода, который расширяет пакет @sinclair/typebox-codegen с помощью функционала импорта
Установка с помощью Bun:
bun install @toil/typebox-genxУстановка с помощью Node:
npm install @toil/typebox-genxЭта библиотека очень очень очень очень нестабильна, и некоторые части функционала еще недоступны.
Библиотека плохо работает с областью видимости и я надеюсь, что у вас есть отдельные файлы для типов
Библиотека поддерживает только 1 тип импорта в строке. Любой из этих вариантов кода поддерживается:
Warning
Сейчас поддерживается импорт только с помощью import {...} from "...". Еще вы можете использовать "type".
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Эти варианты кода не поддерживаются:
import Client, { ClientOpts } from "@vot.js/node";
// or
import "@vot.js/node";Сейчас typeof variable тоже не поддерживается
Библиотека предоставляет несколько методов:
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 installЗапустите сборку:
bun build:allБиблиотека имеет минимальное покрытие тестами для проверки ее работоспособности.
Запустить тесты:
bun test