/django-rest-tsg

A typescript code generator for Django Rest Framework.

Primary LanguagePythonMIT LicenseMIT

https://codecov.io/gh/jinkanhq/django-rest-tsg/branch/main/graph/badge.svg?token=LX8E3QB541

django-rest-tsg

A TypeScript code generator for Django Rest Framework, which saved your hand-working and guaranteed consistency between Python codes and modern frontend codes written in TypeScript.

Features

It generates TypeScript codes from following Python types.

  • Django REST Framework serializers: manual working on Serializer, ModelSerializer derived from Django ORM models, DataclassSerializer via djangorestframework-dataclasses.
  • Python dataclasses: Classes decorated by dataclasses.dataclass.
  • Python enums: Subclasses of enum.Enum.

It also supports nested types and composite types.

Requirements

  • Python >=3.9
  • Django >=3.0
  • Django REST Framework >=3.12

Usage

Install using pip.

$ pip install django_rest_tsg

Put a tsgconfig.py file with build tasks into your django project's root.

from django.conf import settings
from django_rest_tsg.build import build

BUILD_DIR = settings.BASE_DIR / "app/src/core"

BUILD_TASKS = [
    build(Foo),
    build(BarSerializer, {"alias": "Foobar"}),
]

Add django_rest_tsg to your INSTALLED_APPS.

INSTALLED_APPS = [
    ...
    "django_rest_tsg"
]

Run buildtypescript command on manage.py.

$ python manage.py buildtypescript

Or you can switch to another place.

$ python manage.py buildtypescript --build-dir /somewhere/you/cannot/explain

Examples

Input: Serializer

class PathSerializer(serializers.Serializer):
    name = serializers.CharField()
    suffix = serializers.CharField()
    suffixes = serializers.ListField(child=serializers.CharField())
    stem = serializers.CharField()
    is_directory = serializers.BooleanField(source="is_dir")
    size = serializers.IntegerField(source="stat.st_size")

Output: Interface

export interface Path {
  name: string;
  suffix: string;
  suffixes: string[];
  stem: string;
  isDirectory: boolean;
  size: number;
}

There are more examples in test cases.

Build Options

All options are listed in the table below.

Name Context Value
alias All str
build_dir All str | Path
enforce_uppercase Enum bool (False)