@ts-for-gir/cli
Version:
TypeScript type definition generator for GObject introspection GIR files
78 lines • 2.7 kB
JavaScript
/**
* Everything you need for the `ts-for-gir copy` command is located here
*/
import { copyFile, mkdir } from 'fs/promises';
import { basename, join } from 'path';
import { ModuleLoader } from '../module-loader.js';
import { Config } from '../config.js';
import { Logger, ERROR_NO_MODULES_FOUND } from '@ts-for-gir/lib';
const command = 'copy [modules..]';
const description = 'Scan for *.gir files and copy them to a new directory';
const builder = (yargs) => {
const optionNames = Object.keys(Config.copyOptions);
for (const optionName of optionNames) {
yargs = yargs.option(optionName, Config.copyOptions[optionName]);
}
return yargs.example(examples);
};
const copyGirFile = async (config, depModule) => {
if (!depModule.path) {
Logger.danger(`- ${depModule.packageName} not found`);
return;
}
if (!config.outdir) {
Logger.error(`outdir not found`);
return;
}
const filename = basename(depModule.path);
const dest = join(config.outdir, filename);
if (depModule.path === dest) {
Logger.yellow(`Skip ${depModule.path}`);
return;
}
Logger.success(`Copy ${depModule.path}`);
await copyFile(depModule.path, dest);
};
const handler = async (args) => {
const config = await Config.load(args);
const generateConfig = Config.getOptionsGeneration(config);
const moduleLoader = new ModuleLoader(generateConfig);
const { grouped, failed } = await moduleLoader.getModules(config.modules, config.ignore);
const moduleGroups = Object.values(grouped);
if (Object.keys(grouped).length === 0) {
return Logger.error(ERROR_NO_MODULES_FOUND(config.girDirectories));
}
if (!config.outdir) {
Logger.error(`outdir not found`);
return;
}
await mkdir(config.outdir, { recursive: true }).catch((err) => {
Logger.error(`Failed to copy gir files to ${config.outdir}: ${err}`);
});
for (const module of moduleGroups) {
for (const mod of module.modules) {
await copyGirFile(config, mod);
}
}
if (failed.length > 0) {
Logger.danger('\nDependencies not found:');
for (const fail of failed) {
Logger.white(`- ${fail}`);
}
}
};
const examples = [
[`${Config.appName} copy -o ./gir`, `Copy found *.gir files to ./gir`],
[
`${Config.appName} copy -g /usr/share/gir-1.0 --ignore=Gtk-3.0 xrandr-1.3 -o ./gir`,
'Copy all found *.gir files in /usr/share/gir-1.0 excluding Gtk-3.0 and xrandr-1.3 to ./gir',
],
];
export const copy = {
command,
description,
builder,
handler,
examples,
};
//# sourceMappingURL=copy.js.map