123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- const fs = require('fs');
- const startPath = 'src/Screens/Root';
- const findNavigator = (render = (route, name) => {}, importRender = (route, name) => {}, path = startPath, route = '') => {
- let result = '';
- const list = fs.readdirSync(path, { withFileTypes: true })
- .filter(dir => dir.isDirectory())
- .map(dir => dir.name);
- for(let dir of list) {
- if (dir=='component') continue;
- findNavigator(render, importRender, path + '/' + dir, route + '/' + dir);
- }
- if(route != '') {
- const names = fs.readdirSync(path, { withFileTypes: true })
- .filter(file => file.isFile() && file.name.endsWith('.js'))
- .map(file => {
- let name = file.name.replace('.js', '');
- if(name == 'index') name = 'Index';
- return {name: name, routePostfix: name == "Index" ? "" : name};
- });
- if(names.length > 0) {
- render(route, names);
- importRender(route, names);
- }
- };
- }
- /* Generate Screens */
- const generateScreens = () => {
- const screenRootPath = '~/Screens/Root';
- let navigators = '';
- let importers = '';
- findNavigator((route, names) => {
- let navigator = '';
- let findIndex = false;
- navigator += `\t\t'${route}': createStackNavigator({\n`;
- for(name of names) {
- if(name.name == 'Index') findIndex = true;
- const postfix = name.routePostfix != "" ? "/"+name.routePostfix: "";
- const importName = (route.replace(/\//g, '_') + postfix.replace(/\//g, '_')).replace('_','');
- navigator += `\t\t\t'${name.name}': ${importName},\n`;
- }
- navigator += `\t\t}, { ...navigationOptions }),\n`;
- if(findIndex) navigators += navigator;
- }, (route, names) => {
- let importer = '';
- let findIndex = false;
- for(name of names) {
- if(name.name == 'Index') findIndex = true;
- const postfix = name.routePostfix != "" ? "/"+name.routePostfix: "";
- const importName = (route.replace(/\//g, '_') + postfix.replace(/\//g, '_')).replace('_', '');
- importers += `import ${importName} from '${screenRootPath}${route}${postfix}';\n`;
- }
- if(findIndex) importers += importer;
- });
- const string = `import { createStackNavigator } from 'react-navigation-stack';
- ${importers}
- export default ScreensCreator = (navigationOptions) => {
- return {
- ${navigators}
- }
- };
- `;
-
- fs.writeFileSync('src/Generated/Screens.js', string, 'utf8');
- }
- generateScreens();
- /* Generate Independent */
- const generateIndependent = () => {
- const popupRootPath = '~/Screens/Independent';
- let navigators = '';
- let importers = '';
- findNavigator((route, names) => {
- for(name of names) {
- const postfix = name.routePostfix != "" ? "/"+name.routePostfix: "";
- const importName = (route.replace(/\//g, '_') + postfix.replace(/\//g, '_')).replace('_','');
- navigators += `\t\t'${route}/${name.name}': ${importName},\n`;
- }
- }, (route, names) => {
- for(name of names) {
- const postfix = name.routePostfix != "" ? "/"+name.routePostfix: "";
- const importName = (route.replace(/\//g, '_') + postfix.replace(/\//g, '_')).replace('_', '');
- importers += `import ${importName} from '${popupRootPath}${route}${postfix}';\n`;
- }
- }, 'src/Screens/Independent');
- const string = `
- ${importers}
- export default IndependentCreator = () => {
- return {
- ${navigators}
- }
- };
- `;
-
- fs.writeFileSync('src/Generated/Independent.js', string, 'utf8');
- }
- generateIndependent();
|