react-admin-ui-cli
Version:
A custom CLI tool for quickly scaffolding CRUD modules for React Admin Skeleton projects.
65 lines • 2.51 kB
JavaScript
import * as fs from 'fs';
import _ from 'lodash';
import path from 'path';
import * as console from 'node:console';
import * as process from 'node:process';
import { generateFeatures } from './libs/generate-features.js';
import { generatePages } from './libs/generate-pages.js';
import { generateHook } from './libs/generate-hook.js';
import { generateModel } from './libs/generate-model.js';
import { generateRoute } from './libs/generate-route.js';
import { generateService } from './libs/generate-service.js';
import { getDirectoryName } from './utils/helpers.js';
import pkg from 'pluralize';
const { singular } = pkg;
const rcliSettingsFile = path.join(process.cwd(), 'rcli-settings.json');
const settings = JSON.parse(fs.readFileSync(rcliSettingsFile, 'utf8'));
const validateArguments = () => {
if (!((process.argv[2] === 'generate' || process.argv[2] === 'g') &&
(process.argv[3] === 'module' || process.argv[3] === 'm'))) {
console.error('❌ Invalid command. Use: rcli generate module <ModuleName> or rcli g m <ModuleName>');
process.exit(1);
}
const moduleName = process.argv[4];
if (!moduleName) {
console.error('❌ Please provide a module name.');
process.exit(1);
}
return _.upperFirst(singular(moduleName));
};
const validateModule = (moduleName, settings) => {
if (_.toLower(settings.moduleName) !== _.toLower(moduleName)) {
console.error(`❌ Module name doesn't match with settings module name.`);
console.error(`Please check your rcli-settings.json file in root directory.`);
process.exit(1);
}
const moduleDir = path.join(process.cwd(), 'src', 'pages', getDirectoryName(moduleName));
if (fs.existsSync(moduleDir)) {
console.error(`❌ The ${moduleName} module already exists.`);
process.exit(1);
}
};
const generateModuleComponents = (module) => {
const generators = [
generateModel,
generateService,
generateHook,
generateFeatures,
generatePages,
generateRoute,
];
generators.forEach((generator) => {
if (generator(module)) {
console.log('----------------------------------------------------------------');
}
});
};
const main = () => {
const moduleName = validateArguments();
const moduleSettings = settings;
validateModule(moduleName, moduleSettings);
generateModuleComponents(moduleSettings);
};
main();
//# sourceMappingURL=index.js.map