mirror of
https://github.com/makeplane/plane
synced 2025-08-07 19:59:33 +00:00
* chore: fix lint * fix: constants check:lint command * chore(lint): permit unused vars which begin w/ _ * chore: rm dead code * fix(lint): more lint fixes to constants pkg * fix(lint): lint the live server - fix lint issues * chore: improve clean script * fix(lint): more lint * chore: set live server process title * chore(deps): update to turbo@2.5.5 * chore(live): target node22 * fix(dev): add missing ui pkg dependency * fix(dev): lint decorators * fix(dev): lint space app * fix(dev): address lint issues in types pkg * fix(dev): lint editor pkg * chore(dev): moar lint * fix(dev): live server exit code * chore: address PR feedback * fix(lint): better TPageExtended type * chore: refactor * chore: revert most live server changes * fix: few more lint issues * chore: enable ci checks Ensure we can build + confirm that lint is not getting worse. * chore: address PR feedback * fix: web lint warning added to package.json * fix: ci:lint command --------- Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
@plane/decorators
A lightweight TypeScript decorator library for building Express.js controllers with a clean, declarative syntax.
Features
- TypeScript-first design
- Decorators for HTTP methods (GET, POST, PUT, PATCH, DELETE)
- WebSocket support
- Middleware support
- No build step required - works directly with TypeScript files
Installation
This package is part of the Plane workspace and can be used by adding it to your project's dependencies:
{
"dependencies": {
"@plane/decorators": "workspace:*"
}
}
Usage
Basic REST Controller
import { Controller, Get, Post, BaseController } from "@plane/decorators";
import { Router, Request, Response } from "express";
@Controller("/api/users")
class UserController extends BaseController {
@Get("/")
async getUsers(req: Request, res: Response) {
return res.json({ users: [] });
}
@Post("/")
async createUser(req: Request, res: Response) {
return res.json({ success: true });
}
}
// Register routes
const router = Router();
const userController = new UserController();
userController.registerRoutes(router);
WebSocket Controller
import {
Controller,
WebSocket,
BaseWebSocketController,
} from "@plane/decorators";
import { Request } from "express";
import { WebSocket as WS } from "ws";
@Controller("/ws/chat")
class ChatController extends BaseWebSocketController {
@WebSocket("/")
handleConnection(ws: WS, req: Request) {
ws.on("message", (message) => {
ws.send(`Received: ${message}`);
});
}
}
// Register WebSocket routes
const router = require("express-ws")(app).router;
const chatController = new ChatController();
chatController.registerWebSocketRoutes(router);
API Reference
Decorators
@Controller(baseRoute: string)- Class decorator for defining a base route@Get(route: string)- Method decorator for HTTP GET endpoints@Post(route: string)- Method decorator for HTTP POST endpoints@Put(route: string)- Method decorator for HTTP PUT endpoints@Patch(route: string)- Method decorator for HTTP PATCH endpoints@Delete(route: string)- Method decorator for HTTP DELETE endpoints@WebSocket(route: string)- Method decorator for WebSocket endpoints@Middleware(middleware: RequestHandler)- Method decorator for applying middleware
Classes
BaseController- Base class for REST controllersBaseWebSocketController- Base class for WebSocket controllers
License
This project is licensed under the GNU Affero General Public License v3.0.