js-ts-code-generator
    TypeScript icon, indicating that this package has built-in type declarations

    0.4.2 • Public • Published

    js-ts-code-generator

    npm version

    コンセプト

    Definy で TypeScript, JavaScript のコードを生成したかったので作った.

    • 入力値は, 構造化されているので TypeScript の AST(抽象構文木)とは違う
    • 出力した形式は人間にも読みやすい
    • Node.js でもブラウザでも動く
    • 予約語はあまり気にしなくて良い
    • 対応している構文は一部だけ
    • var などの古い構文を出力せず, 新しいスタイルのコードを生成する

    Node.js, ブラウザ, 両方対応

    sample code サンプルコード

    import * as identifer from "js-ts-code-generator/source/identifer";
    import * as util from "js-ts-code-generator/source/util";
    import {
      BinaryOperator,
      Code,
      ExportDefinition,
      Expr,
      Maybe,
      Member,
      Statement,
      Type,
    } from "js-ts-code-generator/source/data";
    import * as generator from "js-ts-code-generator";
    
    const serverCode: JsTsCode = JsTsCode.helper({
      exportDefinitionList: [
        ExportDefinition.Function({
          name: identifer.fromString("middleware"),
          document: "ミドルウェア",
          typeParameterList: [],
          parameterList: [
            {
              name: identifer.fromString("request"),
              document: "リクエスト",
              type: Type.ImportedType({
                moduleName: "express",
                name: identifer.fromString("Request"),
              }),
            },
            {
              name: identifer.fromString("response"),
              document: "レスポンス",
              type: Type.ImportedType({
                moduleName: "express",
                name: identifer.fromString("Response"),
              }),
            },
          ],
          returnType: Type.Void,
          statementList: [
            Statement.VariableDefinition({
              isConst: true,
              name: identifer.fromString("accept"),
              type: Type.Union([Type.String, Type.Undefined]),
              expr: util.get(
                util.get(Expr.Variable(identifer.fromString("request")), "headers"),
                "accept"
              ),
            }),
            Statement.If({
              condition: util.logicalAnd(
                util.notEqual(
                  Expr.Variable(identifer.fromString("accept")),
                  Expr.UndefinedLiteral
                ),
                util.callMethod(
                  Expr.Variable(identifer.fromString("accept")),
                  "includes",
                  [Expr.StringLiteral("text/html")]
                )
              ),
              thenStatementList: [
                Statement.EvaluateExpr(
                  util.callMethod(
                    Expr.Variable(identifer.fromString("response")),
                    "setHeader",
                    [
                      Expr.StringLiteral("content-type"),
                      Expr.StringLiteral("text/html"),
                    ]
                  )
                ),
              ],
            }),
          ],
        }),
      ],
      statementList: [],
    });
    const codeAsString = generator.generateCodeAsString(serverCode, "TypeScript");
    console.log(codeAsString);

    出力 output

    /* eslint-disable */
    /* generated by js-ts-code-generator. Do not edit! */
    
    import * as a from "express";
    
    /**
     * ミドルウェア
     * @param request リクエスト
     * @param response レスポンス
     */
    export const middleware = (request: a.Request, response: a.Response): void => {
      const accept: string | undefined = request.headers.accept;
      if (accept !== undefined && accept.includes("text/html")) {
        response.setHeader("content-type", "text/html");
      }
    };

    Keywords

    none

    Install

    npm i js-ts-code-generator

    DownloadsWeekly Downloads

    13

    Version

    0.4.2

    License

    MIT

    Unpacked Size

    367 kB

    Total Files

    15

    Last publish

    Collaborators

    • narumincho