{"id":19388130,"url":"https://github.com/zakimohammed/ng-fate","last_synced_at":"2026-04-14T00:03:37.781Z","repository":{"id":178304312,"uuid":"657491300","full_name":"ZakiMohammed/ng-fate","owner":"ZakiMohammed","description":"🔮 A tool for deciding the fate of an Angular project.","archived":false,"fork":false,"pushed_at":"2023-07-30T09:53:04.000Z","size":2271,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-26T15:51:57.965Z","etag":null,"topics":["angular","csharp","dotnet","ng-fate"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZakiMohammed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-23T07:17:22.000Z","updated_at":"2023-07-06T18:24:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"45db8254-f65d-4f4d-8fce-f614f2d21682","html_url":"https://github.com/ZakiMohammed/ng-fate","commit_stats":null,"previous_names":["zakimohammed/ng-fate"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/ZakiMohammed/ng-fate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZakiMohammed%2Fng-fate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZakiMohammed%2Fng-fate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZakiMohammed%2Fng-fate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZakiMohammed%2Fng-fate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZakiMohammed","download_url":"https://codeload.github.com/ZakiMohammed/ng-fate/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZakiMohammed%2Fng-fate/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265269620,"owners_count":23737878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","csharp","dotnet","ng-fate"],"created_at":"2024-11-10T10:11:52.388Z","updated_at":"2026-04-14T00:03:37.753Z","avatar_url":"https://github.com/ZakiMohammed.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🔮 NgFate - Fate of Angular App\n\nA tool for deciding the fate of an Angular project. This will help to provide reports on the Angular app structure, routes, dependencies and relations.\n\n![NgFate Banner](https://raw.githubusercontent.com/ZakiMohammed/ng-fate/master/ng-fate-banner.jpg)\n\n## 🍳 CodeOmelet - Blog Post\n\nCheck out the CodeOmelet blog post for this project.\n\nLink: https://codeomelet.com/posts/ng-fate-a-tool-for-deciding-the-fate-of-an-angular-app\n\n___\n\n## 🚚 Download and Run\n\n- Download .NET if you don't have it already from here [Download .NET](https://dotnet.microsoft.com/en-us/download).\n- Download the app from the latest [Releases](https://github.com/ZakiMohammed/ng-fate/releases) section.\n- Unzip the project in the directory of your choice.\n- Open terminal.\n- Go to `publish` folder in the terminal:\n```\nC:\\Users\\zshaikh\u003ecd C:\\Users\\zshaikh\\Downloads\\publish\n```\n- Run the app by using the executable:\n    - Enter `ng-fate.exe` and press Enter.\n```\nC:\\Users\\zshaikh\u003eng-fate.exe\n```\n- Run the app by using the dotnet command:\n    - Enter `dotnet ng-fate.dll` and press Enter.\n```\nC:\\Users\\zshaikh\u003edotnet ng-fate.dll\n```\n\n## 🏃‍♂️ Run Application\n\nNgFate requires bunch of input from you in order to decide fate of your app.\n\n### Example:\n\nAn example of such input values are shown below:\n\n- Project Path: C:\\Zaki\\Study\\Angular\\service-desk\\service-desk-app\n- Project Prefix (comma separated): app,jam,van\n- Select Output Type (1 - JSON, 2 - HTML, 3 - CLI, 4 - ALL): 4\n- Output Folder Path: C:\\Zaki\\Study\\Angular\\service-desk\\des\n\n### Input Details:\n\nBelow gives detailing to these inputs:\n\n- `Project Path`: Path to your Angular project.\n- `Project Prefix (comma separated)`: Multiple comma separated values can be provided as app prefix (e.g app,jam,van).\n- `Select Output Type (1 - JSON, 2 - HTML, 3 - CLI, 4 - ALL)`: \n    1. If you want a `.json` file as an output select first option.\n    1. If you want a `.html` file as an output select second option.\n    1. If you want output in the terminal it self select third option.\n    1. If you want all of the above select fourth option.\n- `Output Folder Path`: Path to your directory where you want all the output files to be generated.\n\nDiagram:\n\n![NgFate - Diagram](https://codeomelet.com/Media/Images/posts/ng-fate-diagram.jpg)\n\nWatch a demo video here:\n\nhttps://codeomelet.com/Media/Images/posts/ng-fate-download-run-output.webm\n\n## ⚠️ Limitations\n\nCurrently the NgFate is rookie and have to evolve a lot. For starter NgFate is looking for some ideal structuring of the Angular project as per the Angular official document.\n\nCheck and verify if your app is adhering to these limitations:\n\n- NgFate doesn't support stand alone components yet.\n- The module and component naming must follow Angular guide.\n- Each module and component files must ends with the convention `*.module.ts` and `*.component.ts`.\n- Properly formatted declarations of components within @NgModule decorator (either in single line or new line).\n- Properly formatted routes configurations (path and component properties).\n- Prefix must be provided while providing the input to NgFate (it is case sensitive).\n- If Angular App's TypeScript files are not formatted with any formatters like Prettier or VS Code Default Formatter then NgFate might not work as expected. Make sure to format your application TypeScript files.\n\n## 🍷 Future Scope\nFor the interstellar travel of NgFate below are some key features considered as a future scope for the tool:\n\n- Pipes and directives considerations.\n- Version Support: Adhering to the latest releases of Angular.\n- AI support for speeding up performance.\n- Fault tolerance and better logging.\n\n___\n\nBelow topics are for further read.\n\n## 🧪 Algorithm:\n\n1. get all '.module.ts' files\n1. get all 'declarations' array data from NgModules\n1. decompose fileName based on camelCasing of name\n1. get file path by search fileName in the directory\n1. read '*-routing.module.ts' file and search name of component if existed\n1. get the path name while searching for component in routing file\n1. search for 'header.component.html' file in entire project and get the .html parent files\n1. decompose fileName from name\n\n## 🌳 Data Structure:\n\n```\n[\n  // 1. get all '.module.ts' files\n  {\n    name: 'AppModule',\n    fileName: 'app.module.ts',\n    components: [\n      // 2. get all 'declarations' array data from NgModules\n      {\n        name: 'LoginComponent',\n        fileName: 'login.component.ts', // 3. decompose fileName based on camelCasing of name\n        filePath: 'src/app/pages/login.component.ts', // 4. get file path by search fileName in the directory\n        routed: true, // 5. read '*-routing.module.ts' file and search name of component if existed\n        routePath: 'login', // 6. get the path name while searching for component in routing file\n        parents: [],\n      },\n      {\n        name: 'HeaderComponent',\n        fileName: 'header.component.ts',\n        filePath: 'src/app/components/header.component.ts',\n        routed: false, // 5. read '*-routing.module.ts' file and search name of component if existed\n        routePath: null,\n        parents: [\n          // 7. search for 'header.component.html' file in entire project and get the .html parent files\n          {\n            name: 'MainComponent',\n            fileName: 'main.component.ts', // 8. decompose fileName from name\n            filePath: 'src/app/components/main.component.ts', // 4. get file path by search fileName in the directory\n          },\n        ],\n      },\n    ],\n  },\n];\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzakimohammed%2Fng-fate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzakimohammed%2Fng-fate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzakimohammed%2Fng-fate/lists"}