0.4.1 • Published 10 years ago
tsimmutable v0.4.1
TypeScript code generator for ImmutableJS
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-devExample
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 --emitEmptyRecordsSee 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
- Inline object types will not work:
export interface User {
    profile: {
        a: User
    };
}- Two-dimensional array types will not work:
export interface User {
    profile: User[][]
}License
MIT