Skip to content
/ cell Public

Cell is a Serverless First, componentized, platform-independent progressive application framework based on TypeScript. Cell 是基于 TypeScript 的 Serverless First、组件化、平台无关的渐进式应用框架。

License

Notifications You must be signed in to change notification settings

cellbang/cell

Repository files navigation

English | 简体中文

Cell Logo

GitHub License npm Version npm Downloads Build Status Stars

Cell is a Serverless First, Component-based, and Platform-independent progressive application framework based on TypeScript.

Features

  • Zero Configuration: Out of the box, reduces configuration complexity.
  • Based on TypeScript: Provides strong type support, enhancing development efficiency.
  • 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.

Quick Start

# 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

Quick Start

Samples

Documentation

Dependency injection

// 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;
}

Database operations

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);
    }
}

Discuss group

群二维码.png

Status

Alt