Typolar
A simple typescript framework
Install
Recommended CLI tool: typolar-cli
Usage
App
import Application from 'typolar'
const app = new Application(__dirname)
app.start()
Hooks:
- beforeLoad
- beforeSetup
- beforeMount
- afterMount
- afterSetup
const app = new Application(__dirname, {
beforeMount(app) {
app.use(/*...*/)
}
})
Config
import config from 'typolar/config'
const tag = config.app.tag
Model
e.g. src/models/user.ts
import { Model } from 'typolar'
export default class User extends Model {
// TODO: define user model
}
Controller
e.g. src/routes/user.ts
import { Controller, guards, route } from 'typolar'
import { Next, Request, Response } from 'typolar/types'
@route('user')
export default class UserController extends Controller {
@route('/:id', [guards.params({ id: 'user id' })])
getUser(req: Request, res: Response, next: Next) {
// TODO: handle request
res.json({ id: req.params.id })
}
@route('/', 'post', [guards.fields({ name: 'user name' })])
createUser(req: Request, res: Response, next: Next) {
// TODO: handle request
res.json({ name: req.body.name })
}
}
Service
import { Service } from 'typolar'
import { Contract } from 'typolar/types'
export class UserService extends Service<Contract> {
/**
* Get user by id
*
* @param id user id
*/
getUser(id: number) {
// TODO: handle service request
return this._get('/user/api/path', { id })
}
}
export default UserService.create() as UserService
Logging
import { getLogger } from 'typolar'
const logger = getLogger('category')
logger.info('...')
Errors
import { errors } from 'typolar'
Cache
import cache from 'typolar/cache'
JWT
import jwt from 'typolar/jwt'
IoC
import { register, fetch, flush } from 'typolar/ioc'
// decorator registration
@register()
class MyClass {}
// inline registration
register(AnotherClass)
// instance registration
register(AnotherClass, new AnotherClass())
// fetch registered
const myCLass = fetch(MyClass)
const another = fetch(Another)
// fetch unregistered(if not registerd already, make a inline registration). lazy registration
const third = fetch(ThirdClass)
// bypass auto registration(might return undefined if not registered already)
const fourth = fetch(FourthClass, false)
// flush all registered
flush()
// flush target type
flush(MyClass)
Test
npm test
License
See License