{"id":15573808,"url":"https://github.com/rakhmadi/lavoca","last_synced_at":"2025-04-24T01:05:37.098Z","repository":{"id":62421700,"uuid":"290320161","full_name":"Rakhmadi/Lavoca","owner":"Rakhmadi","description":"Lavoca - Oak MVC Deno Web Framework - It will look like laravel","archived":false,"fork":false,"pushed_at":"2020-09-22T21:52:35.000Z","size":2614,"stargazers_count":4,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-20T20:04:09.395Z","etag":null,"topics":["backend","deno","denodb","denon","framework","mvc","mvc-pattern","oak","oak-mvc","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/Rakhmadi.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}},"created_at":"2020-08-25T20:47:06.000Z","updated_at":"2024-02-24T21:52:33.000Z","dependencies_parsed_at":"2022-11-01T17:32:14.663Z","dependency_job_id":null,"html_url":"https://github.com/Rakhmadi/Lavoca","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rakhmadi%2FLavoca","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rakhmadi%2FLavoca/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rakhmadi%2FLavoca/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rakhmadi%2FLavoca/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rakhmadi","download_url":"https://codeload.github.com/Rakhmadi/Lavoca/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242313660,"owners_count":20107357,"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":["backend","deno","denodb","denon","framework","mvc","mvc-pattern","oak","oak-mvc","typescript"],"created_at":"2024-10-02T18:14:18.446Z","updated_at":"2025-03-07T01:31:26.755Z","avatar_url":"https://github.com/Rakhmadi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch2\u003e MVC Deno Web framework like Laravel using oak and denodb\u003c/h2\u003e\n\n## Deno Version ( tested to deno 1.3.0 ) \n\n## How to Install \n\n\u003e git clone https://github.com/Rakhmadi/Lavoca.git\n\u003e\n\u003e cd Lavoca\n\u003e\n\n## How to Run \n\n\u003e deno run -A --unstable app.ts\n\u003e\n\u003e\n## **Using Denon**\n\n\u003e\n\u003e**Install denon** \n\u003e\n\u003edeno install -A -f -q --unstable https://deno.land/x/denon@2.3.2/denon.ts\n\n\u003e**Run App Using Denon** \n\u003e\n\u003edenon start\n\n## **Structure Folder**\n\u003e```.\n\u003e└── your_project/\n\u003e    ├── .core\n\u003e    ├── controller\n\u003e    ├── middleware\n\u003e    ├── model\n\u003e    ├── res/\n\u003e    │   ├── assets\n\u003e    │   └── view\n\u003e    ├── routers/\n\u003e    │   └── router.ts\n\u003e    ├── app.ts\n\u003e    ├── config.ts\n\u003e    ├── config.Example.ts\n\u003e    ├── database.sqlite\n\u003e    ├── denon.json\n\u003e    └── lavoca.ts\n\u003e```\n\n## **Lavoca Command**\n\u003e\n\u003e\n\u003e**Create Controller**\n\u003e\n\u003edeno run -A --unstable lavoca.ts --make:controller \u003c name_controller \u003e\n\n\u003e**Create Model**\n\u003e\n\u003edeno run -A --unstable lavoca.ts --make:model \u003c name_model \u003e\n\n\u003e**Create Middleware**\n\u003e\n\u003edeno run -A --unstable lavoca.ts --make:middleware \u003c name_middleware \u003e\n\n\n\u003e**Show Router list**\n\u003e\n\u003edeno run -A --unstable lavoca.ts --show:router\n\n\n## **Routing**\n\u003e\n\u003e**Basic Routes**\n\u003e```ts\n\u003eRoute.get(\"/\",async(ctx)=\u003e{\n\u003e    return ctx.response.body = 'Hello World'\n\u003e}) \n\u003e```\n\n\u003e\n\u003e**Available Router Methods**\n\u003e\n\u003e```ts\n\u003e\n\u003eRoute.get('/path', async(ctx)=\u003e{});\n\u003eRoute.post('/path', async(ctx)=\u003e{});\n\u003eRoute.put('/path', async(ctx)=\u003e{});\n\u003eRoute.patch('/path', async(ctx)=\u003e{});\n\u003eRoute.delete('/path', async(ctx)=\u003e{});\n\u003eRoute.options('/path', async(ctx)=\u003e{});\n\u003eRoute.head('/path', async(ctx)=\u003e{});\n\u003e\n\u003e// Registering A Route For Multiple\n\u003eRoute.match(['get','post'],'/path', async(ctx)=\u003e{});\n\u003e\n\u003e// Allow all method\n\u003eRoute.any('/path', async(ctx)=\u003e{});\n\u003e\n\u003e\n\u003e```\n\n\u003e\n\u003e\n\u003e**Routes Parameters**\n\u003e\n\u003e```ts\n\u003eRoute.get(\"/path/:id\",async(ctx)=\u003e{\n\u003e    return ctx.response.body = ctx.params.id\n\u003e}) \n\u003e```\n\n\u003e\n\u003e\n\u003e**Add Controller In Routes**\n\u003e\n\u003e```ts\n\u003e\n\u003eimport { ControllerRoute as Controller } from '../.core/controller___.ts'\n\u003e\n\u003eRoute.get(\"/path\",await Controller.set(\"NameFileController\", \"Function\"))\n\u003e\n\u003e```\n\n\u003e\n\u003e\n\u003e**Routes Middleware**\n\u003e\n\u003e```ts\n\u003eimport { module_middleware } from '../middleware/file_middleware.ts'\n\u003e\n\u003eRoute.get(\"/path\",async(ctx)=\u003e{\n\u003e     return ctx.response.body = 'Hello World'\n\u003e},[ module_middleware ]) \n\u003e```\n\n\u003e\n\u003e\n\u003e**Routes Prefix Group**\n\u003e\n\u003e```ts\n\u003e\n\u003e // http://localhost:8000/v1/name\n\u003e // group /v1\n\u003eRoute.prefix('/v1',()=\u003e{\n\u003e  Route.get(\"/name\",async(ctx)=\u003e{\n\u003e      return ctx.response.body = 'Hello World'\n\u003e  })     \n\u003e})\n\u003e\n\u003e```\n\n\u003e**Routes Middleware Group**\n\u003e\n\u003e```ts\n\u003eimport { module_middleware } from '../middleware/file_middleware.ts'\n\u003e\n\u003e // middleware group module_middleware\n\u003e\n\u003eRoute.middleware([module_middleware],()=\u003e{\n\u003e  Route.get(\"/name\",async(ctx)=\u003e{\n\u003e      return ctx.response.body = 'Hello World'\n\u003e  })     \n\u003e})\n\u003e\n\u003e\n\u003e // prefix group /v1\n\u003e // middleware group module_middleware\n\u003e\n\u003eRoute.middleware([module_middleware],()=\u003e {\n\u003e  Route.prefix('/v1',()=\u003e{\n\u003e    Route.get(\"/name\",async(ctx)=\u003e{\n\u003e       return ctx.response.body = 'Hello World'\n\u003e    })     \n\u003e  })\n\u003e})\n\u003e\n\u003e\n\u003e```\n\n\u003e\n\u003e\n\u003e**View Routes**\n\u003e\n\u003e```ts\n\u003e// default get method\n\u003eRoute.view('/path','file_ejs')\n\u003e\n\u003e```\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frakhmadi%2Flavoca","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frakhmadi%2Flavoca","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frakhmadi%2Flavoca/lists"}