Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/joewood/avro-typescript
TypeScript Code Generator for Apache Avro Schema Types
https://github.com/joewood/avro-typescript
avro avro-schema typescript typescript-library
Last synced: about 5 hours ago
JSON representation
TypeScript Code Generator for Apache Avro Schema Types
- Host: GitHub
- URL: https://github.com/joewood/avro-typescript
- Owner: joewood
- License: mit
- Created: 2017-05-23T11:36:04.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T02:44:32.000Z (almost 2 years ago)
- Last Synced: 2024-11-11T18:54:57.583Z (6 days ago)
- Topics: avro, avro-schema, typescript, typescript-library
- Language: TypeScript
- Size: 303 KB
- Stars: 36
- Watchers: 4
- Forks: 25
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Avro Typescript
A simple JS library to convert Avro Schemas to TypeScript interfaces.
## Install
```
npm install avro-typescript
```The library can be run in node.js or the browser. It takes a Avro Schema as a JavaScript object (from JSON) and returns the TypeScript code as a string.
## Usage
```typescript
import { avroToTypeScript, RecordType } from "avro-typescript"const schemaText = fs.readFileSync("example.avsc", "UTF8");
const schema = JSON.parse(schemaText) as RecordType;
console.log(avroToTypeScript(schema as RecordType));
```## Override logicalTypes
Tools like [avsc](https://github.com/mtth/avsc) allow you to [override the serialization/deserialization of LogicalTypes](https://github.com/mtth/avsc/wiki/Advanced-usage#logical-types),
say from numbers to native JS Date objects, in this case we want to generate the typescript type as 'Date', not 'number'.
Therefore, you can pass in a map 'logicalTypes' to the options to override the outputted TS type for the schema logicalType.
For example:```typescript
const schema: Schema = {
type: "record",
name: "logicalOverrides",
fields: [
{
name: "eventDate",
type: {
type: "int",
logicalType: "date",
},
},
{
name: "startTime",
type: {
type: "int",
logicalType: "timestamp-millis",
},
},
{
name: "displayTime",
type: {
type: "string",
logicalType: "iso-datetime",
},
},
],
};
const actual = avroToTypeScript(schema, {
logicalTypes: {
date: 'Date',
'timestamp-millis': 'Date',
}
});// this will output
export interface logicalOverrides {
eventDate: Date;
startTime: Date;
displayTime: string;
}
```## Features
Most Avro features are supported, including:
* Enumerated Types
* Maps
* Named Records
* Mandatory and optional fields
* Unions
* Primitives### To-do
* Generate a function to set defaults as per the schema
* Add support for fixed
* Generate JSDocs from documentation
* Add namespace support