@sundogee/codesmith
Micro-generator framework that makes it easy for an entire team to create files with a level of uniformity
Last updated 2 months ago by lwyj123 .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install @sundogee/codesmith -g
SYNC missed versions from official npm registry.

codesmith

the easy-to-use and developer-friendly Micro-generator framework

Getting Started

What is codesmith?

codesmith is a "micro-generator framework." inspired by plot and yeamon but for extensibility and community-friendly

Installation

1. Install Codesmith globally

$ npm install -g @sundogee/codesmith

2. Get the package from codestore or community

$ codesmith @codestore/react

Have fun!

Package Config File

Package Config File is a file which determine how the generator run

'use strict';
const path = require('path');
const ts = require('typescript');
const changeCase = require('change-case');

module.exports = function (codesmith) {
    // this generator add a new class component
    codesmith.setGenerator('class-component-ts', {
        description: 'Add a new class component(ts)',
        questions: [
            {
                type: 'directory',
                name: 'basePath',
                message: 'Where you like to put this component?',
                basePath: ".",
            },
            {
                type: 'input',
                name: 'name',
                message: "What's your component class name?"
            },
            {
                type: 'checkbox',
                name: 'decorators',
                message: "What decorator do you want?",
                choices: [
                    {name: 'withRouter', value: 'withRouter'},
                    // {name: 'connect(redux)', value: 'connectRedux'}
                ]
            }
        ],
        actions: [
            {
                type: 'add',
                path: '{{basePath}}/{{dashCase name}}.tsx',
                templateFile: 'generators/class-component-ts/templates/component.tsx',
                abortOnFail: true
            },
            {
                type: 'ts/ast',
                when: (data, config) => {
                    if(data.decorators.indexOf('withRouter') !== -1) {
                        return true
                    }
                    return false
                },
                ast: (tsMorch, data) => {
                    const project = new tsMorch.Project({});
                    project.addExistingSourceFiles(`${process.cwd()}/${data.basePath}/${changeCase.paramCase(data.name)}.tsx`);
                    const testFile = project.getSourceFileOrThrow(`${changeCase.paramCase(data.name)}.tsx`)
                    testFile.transform((traversal) => {
                        const node = traversal.visitChildren(); // return type is `ts.Node`
    
                        if (ts.isExportAssignment(node)) {
                            const callExpression = ts.createCall(
                                ts.createIdentifier('withRouter'),
                                undefined, // type arguments, e.g. Foo<T>()
                                [
                                    node.expression
                                ]
                            )
                            return ts.createExportAssignment(
                                undefined,
                                undefined,
                                false,
                                callExpression
                            );
                        }
    
                        return node;
                    });
                    testFile.addImportDeclaration({
                        namedImports: ['withRouter'],
                        moduleSpecifier: 'react-router'
                    })
                    return project.save();
                }
            }
        ]
    });

    codesmith.setGenerator('functional-component-ts', {
        description: 'Add a new functional component(ts)',
        questions: [
            {
                type: 'directory',
                name: 'basePath',
                message: 'Where you like to put this component?',
                basePath: ".",
            },
            {
                type: 'input',
                name: 'name',
                message: "What's your component class name?"
            }
        ],
        actions: [
            {
                type: 'add',
                path: '{{basePath}}/{{dashCase name}}.tsx',
                templateFile: 'generators/functional-component-ts/templates/component.tsx',
                abortOnFail: true
            }
        ]
    });
};

Corestore list

Contributors

Thanks goes to these wonderful people (emoji key):

lwyj123
lwyj123

???? ???? ???? ???? ????

Current Tags

  • 0.1.18                                ...           latest (2 months ago)

24 Versions

  • 0.1.18                                ...           2 months ago
  • 0.1.17                                ...           2 months ago
  • 0.1.16                                ...           2 months ago
  • 0.1.15                                ...           2 months ago
  • 0.1.14                                ...           2 months ago
  • 0.1.13                                ...           5 months ago
  • 0.1.12                                ...           5 months ago
  • 0.1.11                                ...           5 months ago
  • 0.1.10                                ...           5 months ago
  • 0.1.9                                ...           5 months ago
  • 0.1.8                                ...           5 months ago
  • 0.1.7                                ...           5 months ago
  • 0.1.6                                ...           5 months ago
  • 0.1.5                                ...           5 months ago
  • 0.1.4                                ...           5 months ago
  • 0.1.3                                ...           5 months ago
  • 0.1.2                                ...           5 months ago
  • 0.1.1                                ...           5 months ago
  • 0.1.0                                ...           5 months ago
  • 0.0.5                                ...           6 months ago
  • 0.0.4                                ...           6 months ago
  • 0.0.3                                ...           6 months ago
  • 0.0.2                                ...           6 months ago
  • 0.0.1 [deprecated]           ...           6 months ago
Downloads
Today 0
This Week 0
This Month 1
Last Day 0
Last Week 0
Last Month 0
Dependencies (22)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |