{"id":23002486,"url":"https://github.com/miftah704/nodejs-artisan","last_synced_at":"2025-06-25T07:05:51.634Z","repository":{"id":266604801,"uuid":"898307438","full_name":"miftah704/nodejs-artisan","owner":"miftah704","description":"A command-line tool for generating various components in Node.js projects, similar to Laravel Artisan.","archived":false,"fork":false,"pushed_at":"2024-12-29T11:49:50.000Z","size":9016,"stargazers_count":14,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-27T03:41:54.952Z","etag":null,"topics":["artisan","artisan-command","cli","express-js","javascript","nodejs","npm","npm-package","package","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/nodejs-artisan","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miftah704.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-12-04T06:54:33.000Z","updated_at":"2024-12-31T04:13:38.000Z","dependencies_parsed_at":"2024-12-07T20:39:07.236Z","dependency_job_id":null,"html_url":"https://github.com/miftah704/nodejs-artisan","commit_stats":null,"previous_names":["miftah704/nodejs-artisan","miftah704/node-artisan"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/miftah704/nodejs-artisan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miftah704%2Fnodejs-artisan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miftah704%2Fnodejs-artisan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miftah704%2Fnodejs-artisan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miftah704%2Fnodejs-artisan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miftah704","download_url":"https://codeload.github.com/miftah704/nodejs-artisan/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miftah704%2Fnodejs-artisan/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261823758,"owners_count":23215142,"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":["artisan","artisan-command","cli","express-js","javascript","nodejs","npm","npm-package","package","typescript"],"created_at":"2024-12-15T07:11:11.362Z","updated_at":"2025-06-25T07:05:51.609Z","avatar_url":"https://github.com/miftah704.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Node Artisan\n\n![npm](https://img.shields.io/npm/dw/nodejs-artisan?style=for-the-badge)\n![npm](https://img.shields.io/npm/dt/nodejs-artisan?style=for-the-badge)\n![npm](https://img.shields.io/npm/v/nodejs-artisan?style=for-the-badge)\n![Node Current](https://img.shields.io/node/v/nodejs-artisan?style=for-the-badge)\n![license](https://img.shields.io/npm/l/nodejs-artisan?style=for-the-badge)\n![GitHub Tag](https://img.shields.io/github/v/tag/miftah704/nodejs-artisan?sort=date\u0026style=for-the-badge)\n\n\n## ⭐ Support Us\n\nIf you find this project helpful, consider giving it a **star** to show your support!\n\n[![GitHub stars](https://img.shields.io/github/stars/miftah704/nodejs-artisan?style=for-the-badge\u0026logo=github)](https://github.com/miftah704/nodejs-artisan)\n\n[![Tweet](https://img.shields.io/badge/Tweet-%20Share%20on%20Twitter-1DA1F2?style=for-the-badge\u0026logo=x\u0026logoColor=white)](https://twitter.com/intent/tweet?text=Check+out+this+awesome+Node.js+tool!\u0026url=https://github.com/miftah704/nodejs-artisan\u0026hashtags=NodeJS,CLI) [![Share on Facebook](https://img.shields.io/badge/Share-Facebook-blue?style=for-the-badge\u0026logo=facebook)](https://www.facebook.com/sharer/sharer.php?u=https://github.com/miftah704/nodejs-artisan)\n\n\nNode Artisan is a command-line tool for generating various components in Node.js projects, inspired by [Laravel's Artisan CLI](https://laravel.com). This tool helps developers quickly scaffold controllers, models, services, middleware, and other project files, making the development process faster and more efficient. It is particularly suited for Express.js projects, enabling easy generation of essential backend components.\n\n## Screenshots\n\n### Available Command List\n![Command List Screenshot](src/screenshots/artisan-list-v2.png)\n\n### Initialize Artisan\n![Initialization Screenshot](src/screenshots/make-init.png)\n\n### Make a Controller\n\n#### Make a controller without options\n![Make Controller Screenshot](src/screenshots/make-controller-v2.png)\n\n#### Make a controller with options\n![Make Controller Screenshot](src/screenshots/make-controller-v2-with-options.png)\n\n### Make a Model\n#### Make a model without options\n![Make Model Screenshot](src/screenshots/make-model-v2.png)\n\n#### Make a model with options\n![Make Model Screenshot](src/screenshots/make-model-with-options.png)\n\n### Make a Service\n![Make Service Screenshot](src/screenshots/make-service-v2.png)\n\n### Make a Repository\n![Make Repository Screenshot](src/screenshots/make-repository-v2.png)\n\n### Make a Utility\n![Make Utility Screenshot](src/screenshots/make-util-v2.png)\n\n### Make an Enum\n![Make Enum Screenshot](src/screenshots/make-enum-v2.png)\n\n### Make a Type\n![Make Type Screenshot](src/screenshots/make-type-v2.png)\n\n### Make a Validator\n![Make Validator Screenshot](src/screenshots/make-validator-v2.png)\n\n### Make a Transformer\n![Make Transformer Screenshot](src/screenshots/make-transformer-v2.png)\n\n### Make a Helper\n![Make Helper Screenshot](src/screenshots/make-helper-v2.png)\n\n## Features\n\n- Generate controllers, models, services, repositories, middleware, transformers, etc., effortlessly.\n- Command structure inspired by Laravel Artisan.\n- Simplifies repetitive tasks during project development.\n\n## Installation\n\nTo add Node Artisan as a project dependency, run:\n\n```sh\nnpm install nodejs-artisan\n```\n\n## Usage\n\nTo initialize Node Artisan in your project, run:\n\n```sh\nnpx artisan init\n```\n\n**Purpose:** This command enables you to use `node artisan` commands seamlessly by:\n\n1. Creating an `artisan.js` file in the root of your project.\n2. Automatically adding a `bin` entry for `artisan` in your `package.json`.\n\nOnce initialized, you can use Node Artisan commands as follows:\n\n```sh\nnode artisan \u003ccommand\u003e \u003cname\u003e\n```\n\nFor example, to generate a controller named `UserController`, use:\n\n```sh\nnode artisan make:controller UserController\n```\n\nAlternatively, you can use:\n\n```sh\nnpx artisan make:\u003ccommand\u003e \u003cname\u003e\n```\n\n### Available Commands\n| Command              | Description                                             |\n|----------------------|---------------------------------------------------------|\n| `list`               | List all available artisan commands                    |\n| `init`               | Initialize Artisan in the project root directory       |\n| `make:controller`    | Create a new controller in `src/controllers` directory  |\n|                      | Options:                                               |\n|                      | `--service (-s)`    Create a service for the controller|\n|                      | `--repository (-r)` Create a repository for the controller|\n|                      | `--all (-a)`        Create both service and repository for the controller|\n| `make:enum`          | Create a new enum in `src/enums` directory              |\n| `make:middleware`    | Create a new middleware in `src/middleware` directory   |\n| `make:model`         | Create a new model in `src/models` directory            |\n|                      | Options:                                               |\n|                      | `--controller (-c)` Create a controller for the model  |\n|                      | `--all (-a)`        Create a controller, service, and repository for the model|\n| `make:transformer`   | Create a new transformer in `src/transformers` directory|\n| `make:service`       | Create a new service in `src/services` directory        |\n| `make:repository`    | Create a new repository in `src/repositories` directory |\n| `make:type`          | Create a new type in `src/types` directory              |\n| `make:util`          | Create a new util in `src/utils` directory              |\n| `make:helper`        | Create a new helper in `src/helpers` directory          |\n| `make:validator`     | Create a new validator in `src/validators` directory    |\n| `make:route`        | Create a new route in `src/routes` directory            |\n\n\n### Command Details\n\n#### Generate Controller\n\n```\nnode artisan make:controller \u003cControllerName\u003e index show update\n```\n\nCreates a new controller file in the `controllers` folder.\n\n**Options for `make:controller`:**\n\n- `-s, --service`: Create a service for the controller.\n- `-r, --repository`: Create a repository for the controller.\n- `-a, --all`: Create both a service and a repository for the controller.\n\n**Example:**\n\n```\nnode artisan make:controller UserController -a\n```\n\nGenerates:\n\n- `src/controllers/UserController.controller.ts`\n- `src/services/UserController.service.ts`\n- `src/repositories/UserController.repository.ts`\n\n#### Generate Model\n\n```\nnode artisan make:model \u003cModelName\u003e\n```\n\nCreates a new model file in the `models` folder.\n\n**Options for `make:model`:**\n\n- `-c, --controller`: Create a controller for the model.\n- `-a, --all`: Create a controller, service, and repository for the model.\n\n**Example:**\n\n```\nnode artisan make:model User -a\n```\n\nGenerates:\n\n- `src/models/User.model.ts`\n- `src/controllers/User.controller.ts`\n- `src/services/User.service.ts`\n- `src/repositories/User.repository.ts`\n\n\n**Recommendation:** Integrate your models with [Sutando ORM](https://sutando.org) for improved type safety and functionality.\n\n\n#### Generate Middleware\n\n```\nnode artisan make:middleware \u003cMiddlewareName\u003e\n```\n\nCreates a new middleware file in the `middleware` folder.\n\n#### Generate Enum\n\n```\nnode artisan make:enum \u003cEnumName\u003e\n```\n\nCreates a new enum file in the `enums` folder.\n\n#### Generate Transformer\n\n```\nnode artisan make:transformer \u003cTransformerName\u003e\n```\n\nCreates a new transformer file in the `transformers` folder.\n\n**Purpose and Functionality:** Transformers serve as a formatting layer for API responses, similar to Laravel's resources. They allow you to structure and standardize the output of your APIs, ensuring that data returned to the client is consistently formatted and easy to consume.\n\nYou only need to call the transformer without additional conditions:\n\n1. **List Data:**\n   ```typescript\n   const users = User.all();\n   UserShowTransformer.transform(users);\n   ```\n\n2. **Single Data:**\n   ```typescript\n   const user = User.find(1);\n   UserShowTransformer.transform(user);\n   ```\n\nThe transformer will automatically handle formatting for both cases, ensuring consistent API responses.\n\n**Example Implementation:**\n\n```typescript\nimport { Transformer, Str } from 'nodejs-artisan';\n\nexport default class UserShowTransformer extends Transformer {\n  /**\n   * Override the protected _format method\n   * @param {any} data - The input data\n   * @param {string} [_lang] - Optional language parameter\n   * @returns {Record\u003cstring, any\u003e | null} - The formatted result\n   */\n  static override _format(data: any, _lang?: string): Record\u003cstring, any\u003e | null {\n    return Str.attributes({\n      id: data.id,\n      name: data.name,\n      email: data.email,\n      created_at: data.createdAt,\n      updated_at: data.updatedAt\n    });\n  }\n}\n```\n\nThe transformer will automatically handle formatting for both cases, ensuring consistent API responses.\n\n#### Generate Service\n\n```\nnode artisan make:service \u003cServiceName\u003e\n```\n\nCreates a new service file in the `services` folder.\n\n#### Generate Repository\n\n```\nnode artisan make:repository \u003cRepositoryName\u003e\n```\n\nCreates a new repository file in the `repositories` folder.\n\n#### Generate Validator\n\n```\nnode artisan make:validator \u003cValidatorName\u003e\n```\n\nCreates a new validator file in the `validators` folder.\n\n**Recommendation:** Use [VineJS](https://vinejs.dev) for robust and extensible validation.\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Author\n\n👤 **Created by:** [Miftah704](https://github.com/miftah704)  \n📧 **Email:** [miftahshidiq704@gmail.com](mailto:miftah704@gmail.com)   \n🔗 **LinkedIn:** [Miftah Shidiq](https://www.linkedin.com/in/miftahshidiq)  \n\nFeel free to connect for feedback, collaborations, or just to say hi!\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiftah704%2Fnodejs-artisan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiftah704%2Fnodejs-artisan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiftah704%2Fnodejs-artisan/lists"}