typolar

A simple typescript framework

Usage no npm install needed!

<script type="module">
  import typolar from 'https://cdn.skypack.dev/typolar';
</script>

README

Typolar

Master Build Develop Build

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