English | 简体中文
Cell is a Serverless First, Component-based, and Platform-independent progressive application framework based on TypeScript.
- Zero Configuration: Out of the box, reduces configuration complexity.
- Based on TypeScript: Provides strong type support, enhancing development efficiency.
- AI Support: Provides AI basic abstraction and multi-vendor model service interface adaptation.
- Serverless First: Optimizes Serverless application development.
- Cross-Platform: Platform agnostic, flexible deployment.
- Full-Stack Support: Front and back-end integration, compatible with various front-end frameworks.
- Microservices Architecture: Supports building and managing microservices.
- Component-based: Modular design, easy to extend and maintain.
- Plugin-based Tools: Command line tools support plugins, enhancing functionality.
- Dependency Injection: Simplifies dependency management between components.
- Aspect-Oriented Programming (AOP): Implements modularization of cross-cutting concerns.
- Integrated ORM: Uses decorators for transaction management, simplifying database operations.
- Authentication and Authorization: Supports OIDC authentication and OAuth2 authorization.
- State Management: Uses rxjs for managing application state.
- Multiple Interface Styles: Supports both REST and RPC interfaces.
# Install command line tool
npm install -g @celljs/cli
# Initialize project
cell init -o project-name
cd project-name # Enter project root directory
# Run project
cell serve
# Deploy project
cell deploy -m scf # Deploy to Tencent Cloud Functions (SCF)
cell deploy -m fc # Deploy to Alibaba Cloud Function Compute (FC)
cell deploy -m lambda # Deploy to AWS Lambda
- Introduction
- Create the first application
- Command line tools
- Controller
- Database operations
- Microservice
- Authentication and authorization
- Cloud Platform Adaptation
- Dependency injection
- Component design
- Front-end architecture
- React development
- Front and back-end integrated development
// Class object injection
@Component()
export class A {
}
@Component()
export class B {
@Autowired()
protected a: A;
}
// Configuration property injection
@Component()
export class C {
@Value('foo') // Support EL expression syntax, such as @Value('obj.xxx'), @Value('arr[1]') etc.
protected foo: string;
}
import { Controller, Get, Param, Delete, Put, Post, Body } from '@celljs/mvc/lib/node';
import { Transactional, OrmContext } from '@celljs/typeorm/lib/node';
import { User } from './entity';
@Controller('users')
export class UserController {
@Get()
@Transactional({ readOnly: true })
list(): Promise<User[]> {
const repo = OrmContext.getRepository(User);
return repo.find();
}
@Get(':id')
@Transactional({ readOnly: true })
get(@Param('id') id: number): Promise<User | undefined> {
const repo = OrmContext.getRepository(User);
return repo.findOne(id);
}
@Delete(':id')
@Transactional()
async remove(@Param('id') id: number): Promise<void> {
const repo = OrmContext.getRepository(User);
await repo.delete(id);
}
@Put()
@Transactional()
async modify(@Body() user: User): Promise<void> {
const repo = OrmContext.getRepository(User);
await repo.update(user.id, user);
}
@Post()
@Transactional()
create(@Body() user: User): Promise<User> {
const repo = OrmContext.getRepository(User);
return repo.save(user);
}
}