GithubHelp home page GithubHelp logo

kierans / avro-typescript Goto Github PK

View Code? Open in Web Editor NEW

This project forked from joewood/avro-typescript

0.0 1.0 0.0 155 KB

TypeScript Code Generator for Apache Avro Schema Types

License: MIT License

TypeScript 86.74% JavaScript 13.26%

avro-typescript's Introduction

Avro Typescript

A simple JS library to convert Avro Schemas to TypeScript interfaces for use in ANZx.

Forked from https://github.com/joewood/avro-typescript (MIT license)

Install

npm install @anzx/avro-typescript

The library can be run in node.js or the browser. It takes an Avro Schema as a JavaScript object (from JSON) and returns the TypeScript code as a string.

Usage

As library

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));

As CLI

npx avro-ts -h
Usage: avro-ts [options]

Options:
  -i, --input <file>   Input file. If not present, defaults to STDIN
  -o, --output <file>  Output file. If not present, defaults to STDOUT
  -h, --help           display help for command

Override logicalTypes

Tools like avsc allow you to override the serialization/deserialization of LogicalTypes, 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:

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;
}

JSON Encoding

This fork changes how Avro union types are converted so that the resulting types are suitable for JSON encoding. It does this by creating an intermediate "JSON Encoding" type that matches the Avro encoding rules for JSON Encoding. The resulting Typescript type is a union between the JSON Encoding types (which includes null).

For example, if a field field has an Avro type of ["null", "string"] the resulting Typescript type will be

interface StringJSONEncoding {
  string: string;
}

field: null | StringEncodingType;

Features

Most Avro features are supported, including:

  • Enumerated Types
  • Maps
  • Named Records
  • Mandatory and optional fields
  • Unions (using JSON encoding)
  • Primitives

To-do

  • Generate a function to set defaults as per the schema
  • Add support for fixed
  • Generate JSDocs from documentation
  • Add namespace support

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.