@ts-for-gir/cli
Version:
TypeScript type definition generator for GObject introspection GIR files
70 lines • 2.91 kB
JavaScript
/**
* Everything you need for the `ts-for-gir generate` command is located here
*/
import { ERROR_NO_MODULES_FOUND, Logger } from '@ts-for-gir/lib';
import { GeneratorType } from '@ts-for-gir/generator-base';
import { GenerationHandler } from '../generation-handler.js';
import { Config } from '../config.js';
import { ModuleLoader } from '../module-loader.js';
import prettier from 'prettier';
import { Formatter } from '@ts-for-gir/lib';
const command = 'generate [modules..]';
const description = 'Generates Typescript type definition .d.ts files from GIR for GJS';
const builder = (yargs) => {
const optionNames = Object.keys(Config.generateOptions);
for (const optionName of optionNames) {
yargs = yargs.option(optionName, Config.generateOptions[optionName]);
}
return yargs.example(examples);
};
const handler = async (args) => {
const config = await Config.load(args);
const generateConfig = Config.getOptionsGeneration(config);
const moduleLoader = new ModuleLoader(generateConfig);
const { keep } = await moduleLoader.getModulesResolved(config.modules, config.ignore || [], config.ignoreVersionConflicts);
if (keep.length === 0) {
return Logger.error(ERROR_NO_MODULES_FOUND(config.girDirectories));
}
moduleLoader.parse(keep);
const tsForGir = new GenerationHandler(generateConfig, GeneratorType.TYPES);
const girModules = Array.from(keep).map((girModuleResolvedBy) => girModuleResolvedBy.module);
moduleLoader.dependencyManager.registerFormatter('dts', new TypeScriptFormatter());
await tsForGir.start(girModules, moduleLoader.dependencyManager);
};
const examples = [
[
`${Config.appName} generate`,
`Run '${Config.appName} generate' in your gjs project to generate typings for your project, pass the gir modules you need for your project`,
],
[`${Config.appName} generate Gtk*`, 'You can also use wild cards'],
[`${Config.appName} generate '*'`, 'If you want to parse all of your locally installed gir modules run'],
[`${Config.appName} generate --configName='.ts-for-gir.gtk4.rc.js`, 'Use a special config file'],
[
`${Config.appName} generate --ignore=Gtk-4.0 xrandr-1.3`,
'Generate .d.ts. files but not for Gtk-4.0 and xrandr-1.3',
],
];
class TypeScriptFormatter extends Formatter {
format(input) {
try {
return prettier.format(input, {
singleQuote: true,
parser: 'typescript',
printWidth: 120,
tabWidth: 4,
});
}
catch (error) {
Logger.warn('[TypeScriptFormatter] Failed to format with prettier, returning original input', error);
return Promise.resolve(input);
}
}
}
export const generate = {
command,
description,
builder,
handler,
examples,
};
//# sourceMappingURL=generate.js.map