Skip to content

JavaScript And TypeScript Code Generator

License

Notifications You must be signed in to change notification settings

narumincho/js-ts-code-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

js-ts-code-generator

npm version NPM

コンセプト

Definy@narumincho/type で TypeScript, JavaScript のコードを生成したかったので作った。

  • 入力値は, 構造化されているので TypeScript の AST(抽象構文木)とは違う
  • 出力した形式は人間にも読みやすい
  • Node.js でもブラウザでも動く
  • 予約語はあまり気にしなくていい
  • 対応している構文は一部だけ

sample code サンプルコード

const serverCode: data.Code = {
  exportDefinitionList: [
    data.definitionFunction({
      name: identifer.fromString("middleware"),
      document: "ミドルウェア",
      typeParameterList: [],
      parameterList: [
        {
          name: identifer.fromString("request"),
          document: "リクエスト",
          type_: data.typeImported("express", identifer.fromString("Request"))
        },
        {
          name: identifer.fromString("response"),
          document: "レスポンス",
          type_: data.typeImported("express", identifer.fromString("Response"))
        }
      ],
      returnType: data.typeVoid,
      statementList: [
        data.statementVariableDefinition(
          identifer.fromString("accept"),
          data.typeUnion([data.typeString, data.typeUndefined]),
          data.get(
            data.get(data.variable(identifer.fromString("request")), "headers"),
            "accept"
          )
        ),
        data.statementIf(
          data.logicalAnd(
            data.notEqual(
              data.variable(identifer.fromString("accept")),
              data.undefinedLiteral
            ),
            data.callMethod(
              data.variable(identifer.fromString("accept")),
              "includes",
              [data.stringLiteral("text/html")]
            )
          ),
          [
            data.statementEvaluateExpr(
              data.callMethod(
                data.variable(identifer.fromString("response")),
                "setHeader",
                [
                  data.stringLiteral("content-type"),
                  data.stringLiteral("text/html")
                ]
              )
            )
          ]
        )
      ]
    })
  ],
  statementList: []
};
const codeAsString = generator.generateCodeAsString(serverCode, "TypeScript");
console.log(codeAsString);

出力 output

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");
  }
};

対応する形式

  • Node.js 向けの TypeScript
  • ブラウザ 向けの TypeScript
  • ブラウザ向けの JavaScript

About

JavaScript And TypeScript Code Generator

Resources

License

Stars

Watchers

Forks

Packages

No packages published