@tescord/type-gen
A TypeScript type generation module for tescord localization. This module analyzes tescord instances and generates TypeScript declarations for type-safe localization usage.
Features
- đ Smart Parameter Detection: Automatically detects parameters in localization strings
- đˇď¸ Named Parameters: Supports both indexed (
{0}, {1}) and named ({0:user}, {1:role}) parameters
- đ Multi-Client Support: Generate types for multiple tescord instances
- đ Nested Structures: Handles nested localization objects
- đž File Output: Write generated types directly to TypeScript declaration files
Installation
npm install @tescord/type-gen
pnpm add @tescord/type-gen
yarn add @tescord/type-gen
Usage
Basic Usage
import { generateLocalizationTypes, createTypeGenerationConfig } from '@tescord/type-gen';
import { tescord } from 'tescord';
const tescord = new tescord({
id: 'my-bot',
clients: [{
id: 'main-client',
token: 'your-bot-token',
options: { intents: [] }
}]
});
const config = createTypeGenerationConfig(tescord);
const types = generateLocalizationTypes(config);
console.log(types);
Multiple Clients
import { generateLocalizationTypes, createTypeGenerationConfig } from '@tescord/type-gen';
const config = createTypeGenerationConfig([tescord1, tescord2, tescord3]);
const types = generateLocalizationTypes(config);
Write to File
import { writeLocalizationTypes } from '@tescord/type-gen';
const config = createTypeGenerationConfig(tescord);
await writeLocalizationTypes(config);
const configWithPath = createTypeGenerationConfig(tescord, './types/localization.d.ts');
await writeLocalizationTypes(configWithPath);
Parameter Detection Examples
The module automatically detects and converts localization parameters:
Indexed Parameters
Input: "{0} is now a {1}"
Output: (_0: string, _1: string) => string
Named Parameters
Input: "{0:user} is now a {1:role}"
Output: (user: string, role: string) => string
No Parameters
Input: "Hello, world!"
Output: () => string
Generated Output Example
For a tescord instance with localization data, the module generates:
declare global {
namespace tescord {
interface Localization {
hello: () => string;
welcome: (username: string) => string;
userJoined: (user: string, server: string) => string;
nested: {
commands: {
help: () => string;
ping: (target: string) => string;
};
messages: {
error: (errorMessage: string) => string;
success: () => string;
};
};
}
}
}
Multi-Client Output
When multiple tescord instances are provided:
declare global {
namespace tescord {
interface Localization {
hello: () => string;
world: (exampleParam: string) => string;
}
}
}
declare global {
namespace tescord {
interface Localization {
secondClientHello: () => string;
}
}
}
API Reference
generateLocalizationTypes(config: TypeGenerationConfig): string
Generates TypeScript declaration strings from tescord instances.
Parameters:
config: Configuration object containing tescord instances
Returns: Generated TypeScript declaration string
createTypeGenerationConfig(tescords: tescord | tescord[], outputPath?: string): TypeGenerationConfig
Creates a configuration object for type generation.
Parameters:
tescords: Single tescord instance or array of instances
outputPath: Optional custom output path (defaults to process.cwd()/localization.d.ts)
Returns: Configuration object
writeLocalizationTypes(config: TypeGenerationConfig): Promise<void>
Writes generated types to a file using the output path from the configuration.
Parameters:
config: Configuration object (containing tescords and optional outputPath)
Types
TypeGenerationConfig
interface TypeGenerationConfig {
tescords: tescord[];
outputPath?: string;
}
interface ExtractedParameter {
name: string;
type: string;
}
Contributing
This module is part of the tescord ecosystem and is currently in development. It is not yet ready for production use.
License
LGPL-3.0-or-later
Authors
- KÄąraç ArmaÄan Ănal
- Erdem GĂśksel