Metadata-Version: 2.1
Name: django-rest-typescript-generator
Version: 0.0.2
Summary: A typescript code generator for Django Rest Framework.
Home-page: https://github.com/relativity-codes/django-rest-typescript-generator
License: MIT
Author: Yinian Chin
Author-email: yinian@jinkan.org
Requires-Python: >=3.9.0,<4.0.0
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 3.0
Classifier: Framework :: Django :: 3.1
Classifier: Framework :: Django :: 3.2
Classifier: Framework :: Django :: 4.0
Classifier: Framework :: Django :: 4.1
Classifier: Framework :: Django :: 4.2
Classifier: Framework :: Django :: 5.0
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Code Generators
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Dist: django (>=3.0)
Requires-Dist: djangorestframework (>=3.13,<4.0)
Requires-Dist: djangorestframework-dataclasses (>=1.3.0,<2.0.0)
Requires-Dist: inflection (>=0.5.1,<0.6.0)
Project-URL: Repository, https://github.com/relativity-codes/django-rest-typescript-generator
Description-Content-Type: text/markdown

# django-rest-typescript-generator

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

## Features

It generates TypeScript codes from the 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.

[djangorestframework-dataclasses]: https://github.com/oxan/djangorestframework-dataclasses

## Requirements

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

## Usage

Install using `pip`.

```bash
$ pip install django-rest-typescript-generator
```

Put a tsgconfig.py file with build tasks into your Django project's root.
```python
from django.conf import settings
from django_rest_typescript_generator.build import build

BUILD_DIR = settings.BASE_DIR / "statics/types"

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

Add django_rest_typescript_generator to your INSTALLED_APPS.
```python
INSTALLED_APPS = [
    ...
    "django_rest_typescript_generator"
]
```

Run the buildtypescript command on manage.py.
```bash
$ python manage.py buildtypescript
```

Or you can switch to another place.
```bash
$ python manage.py buildtypescript --build-dir /somewhere/you/cannot/explain
```
Or you can switch to another place.
```bash
$ python manage.py buildtypescript --build-dir /somewhere/you/cannot/explain
```
# Examples
## Input: Serializer
```python
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
```typescript
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` or `Path`  |
| enforce_uppercase  | Enum             | `bool` (False)   |

