Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

s-panferov/tsimmutable

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

TypeScript code generator for ImmutableJS

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.