0.4.1 • Published 10 years ago

tsimmutable v0.4.1

Weekly downloads
3
License
MIT
Repository
github
Last release
10 years ago

TypeScript code generator for ImmutableJS

Join the chat at https://gitter.im/s-panferov/tsimmutable

Codegen all you need to use ImmutableJS in your TypeScript application. Also uses type information to emit functions to parse nested Records.

Install

With npm do:

npm install tsimmutable --save-dev

Example

Write a file with your models (e.g. models.ts):

export interface Profile {
    firstName: string;
    lastName: string;
}

export interface User {
    profile: Profile;
    login: string;
    friends?: User[];
}

Compile it:

./node_modules/.bin/tsimmutable models.ts --out=models-imm.ts --indexerType=void --emitRecords --emitMarkers --emitEmptyRecords

See the output.

Options

--out               Output file name. Default: stdout
--keyType           Emit map with Map<$keyType, ...> type. Default: "string"
--indexerType       Emit map with Map<string, $indexerType> type. Default: "any"
--emitMaps          Shoud emitter emit Maps? Default: true
--emitRecords       Shoud emitter emit Records? Default: false
--emitMarkers       Shoud emitter emit type markers? Default: false
--emitEmptyRecords  Shoud emitter emit empty default records? Default: false
--emitTypedMethods  Shoud emitter emit typed methods? Default: false
--defaultEmptyType  Emit empty records with fields initializer by this value. Default: "null"

JS API

import { generate } from 'tsimmutable';
let result = generate(fileName, fileText, options);

Webpack plugin

tsimmutable goes together with webpack plugin which helps to watch and re-generate your model files when initial interface files change.

Usage:

var TsImmutablePlugin = require('tsimmutable/plugin');

module.exports = {
    resolve: {
        extensions: ['', '.ts', '.js']
    },
    module: {
        loaders: [
            {
                test: /\.ts$/,
                loader: 'awesome-typescript-loader?module=common'
            }
        ]
    },
    entry: {
        index: ['./index.ts']
    },
    output: {
        path: './dist',
        filename: './[name].js'
    },
    plugins: [
        new TsImmutablePlugin({
            files: [
                './models.ts'
            ],

            /*
             * Every option below is optional.
             */

            suffix: '-i',
            verbose: true,
            indexerType: 'any',
            emitMaps: false,
            emitRecords: true,
            emitMarkers: true,
            emitEmptyRecords: true,
            emitTypedMethods: true,
            defaultEmptyType: 'null'
        })
    ]
};

Limitations

  1. Inline object types will not work:
export interface User {
    profile: {
        a: User
    };
}
  1. Two-dimensional array types will not work:
export interface User {
    profile: User[][]
}

License

MIT

0.4.1

10 years ago

0.4.0

10 years ago

0.3.2

10 years ago

0.3.1

10 years ago

0.3.0

10 years ago

0.2.8

10 years ago

0.2.7

10 years ago

0.2.6

10 years ago

0.2.5

10 years ago

0.2.4

10 years ago

0.2.3

10 years ago

0.2.2

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago