redux-generator-cli
Version:
Boilerplate for redux with redux toolkit
62 lines (49 loc) • 2.28 kB
text/typescript
import fs from 'fs';
import * as path from "path";
import {defaultStates} from "./templates/defaultStates";
import {toCamelCase, toPascalCase} from "./utils/helpers";
import {actionsTemplate} from "./templates/actionsTemplate";
import {sliceTemplate} from "./templates/sliceTemplate";
import {typesTemplate} from "./templates/typesTemplate";
import {customHookTemplate} from "./templates/customHookTemplate";
const argvList = process.argv;
const cleanArgList = argvList.slice(2).map(arg => {
if(arg.includes("--")){
return arg.replace("--",'').slice(0,arg.indexOf("=")-2)
}
})
if(!cleanArgList.includes('name')){
console.error('\x1b[31m%s\x1b[0m','Please provide a name for the files.');
process.exit(1); // Exit with a non-zero code to indicate an error
}
const argMap = argvList.slice(2).map(arg => {
if(arg.includes("--")){
const key = arg.replace("--",'').slice(0,arg.indexOf("=")-2)
const value = arg.slice(arg.indexOf("=")+1)
if(key === 'name' && value !== ''){
return {[key]:value}
}
}
process.exit(-1)
});
(async () => {
try {
await fs.promises.access("redux/defaultStates/defaultStates.ts", fs.constants.F_OK);
return
} catch (err) {
const defaultStatesPath = path.join(process.cwd(), 'redux/defaultStates');
fs.mkdirSync(defaultStatesPath, { recursive: true });
fs.writeFileSync(path.join(defaultStatesPath, `defaultStates.ts`), defaultStates);
}
})();
const entityName = argMap[0].name
const basePath = path.join(process.cwd(), `redux/${toCamelCase(entityName)}`);
const hooksPath = path.join(process.cwd(), 'hooks')
fs.mkdirSync(basePath, { recursive: true });
fs.writeFileSync(path.join(basePath, `${toCamelCase(entityName)}.actions.ts`), actionsTemplate(entityName));
fs.writeFileSync(path.join(basePath, `${toCamelCase(entityName)}.slice.ts`), sliceTemplate(entityName));
fs.writeFileSync(path.join(basePath, `${toCamelCase(entityName)}.types.ts`), typesTemplate(entityName));
fs.mkdirSync(hooksPath, {recursive: true})
fs.writeFileSync(path.join(hooksPath, `use${toPascalCase(entityName)}Hook.ts`),customHookTemplate(entityName))
console.log('\x1b[34m%s\x1b[0m',`Redux entity and custom hook created`);