Skip to content

Latest commit

 

History

History
127 lines (89 loc) · 3.71 KB

File metadata and controls

127 lines (89 loc) · 3.71 KB

typebox-genx

GitHub Actions npm en ru

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