Skip to main content
Home

Built and signed on GitHub Actions

TypeScript and JavaScript code generator

This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with Browsers
JSR Score
94%
Published
6 months ago (0.8.2)

@narumincho/js-ts-code-generator

JSR

コンセプト

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

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

Deno, ブラウザ, 両方対応

sample code サンプルコード

import {
  exportDefinitionFunction,
  generateCodeAsString,
  identifierFromString,
  type Module,
} from "jsr:@narumincho/js-ts-code-generator";
import * as statement from "jsr:@narumincho/js-ts-code-generator/statement";
import * as type from "jsr:@narumincho/js-ts-code-generator/type";
import * as expr from "jsr:@narumincho/js-ts-code-generator/expr";

const serverModule: Module = {
  definitionList: [
    exportDefinitionFunction({
      export: true,
      isAsync: false,
      name: identifierFromString("middleware"),
      document: "ミドルウェア",
      typeParameterList: [],
      parameterList: [
        {
          name: identifierFromString("request"),
          document: "リクエスト",
          type: ({
            type: "ImportedType",
            importedType: {
              moduleName: "express",
              nameAndArguments: {
                name: identifierFromString("Request"),
                arguments: [],
              },
            },
          }),
        },
        {
          name: identifierFromString("response"),
          document: "レスポンス",
          type: ({
            type: "ImportedType",
            importedType: {
              moduleName: "express",
              nameAndArguments: {
                name: identifierFromString("Response"),
                arguments: [],
              },
            },
          }),
        },
      ],
      returnType: { type: "Void" },
      statementList: [
        statement.variableDefinition({
          isConst: true,
          name: identifierFromString("accept"),
          type: type.union([{ type: "String" }, { type: "Undefined" }]),
          expr: expr.get(
            expr.get(
              expr.variable(identifierFromString("request")),
              "headers",
            ),
            "accept",
          ),
        }),
        statement.if({
          condition: expr.logicalAnd(
            expr.notEqual(
              expr.variable(identifierFromString("accept")),
              { type: "UndefinedLiteral" },
            ),
            expr.callMethod(
              expr.variable(identifierFromString("accept")),
              "includes",
              [expr.stringLiteral("text/html")],
            ),
          ),
          thenStatementList: [
            statement.evaluateExpr(
              expr.callMethod(
                expr.variable(identifierFromString("response")),
                "setHeader",
                [
                  expr.stringLiteral("content-type"),
                  expr.stringLiteral("text/html"),
                ],
              ),
            ),
          ],
        }),
      ],
    }),
  ],
  statementList: [],
};
const codeAsString = generateCodeAsString({
  code: serverModule,
  codeType: "TypeScript",
});
console.log(codeAsString);

出力 output

/** generated by
 * - https://jsr.io/@narumincho/js-ts-code-generator@0.8.2
 * Do not edit!
 *
 * @module
 */

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");
  }
};
Built and signed on
GitHub Actions

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@narumincho/js-ts-code-generator

Import symbol

import * as js_ts_code_generator from "@narumincho/js-ts-code-generator";
or

Import directly with a jsr specifier

import * as js_ts_code_generator from "jsr:@narumincho/js-ts-code-generator";

Add Package

pnpm i jsr:@narumincho/js-ts-code-generator
or (using pnpm 10.8 or older)
pnpm dlx jsr add @narumincho/js-ts-code-generator

Import symbol

import * as js_ts_code_generator from "@narumincho/js-ts-code-generator";

Add Package

yarn add jsr:@narumincho/js-ts-code-generator
or (using Yarn 4.8 or older)
yarn dlx jsr add @narumincho/js-ts-code-generator

Import symbol

import * as js_ts_code_generator from "@narumincho/js-ts-code-generator";

Add Package

vlt install jsr:@narumincho/js-ts-code-generator

Import symbol

import * as js_ts_code_generator from "@narumincho/js-ts-code-generator";

Add Package

npx jsr add @narumincho/js-ts-code-generator

Import symbol

import * as js_ts_code_generator from "@narumincho/js-ts-code-generator";

Add Package

bunx jsr add @narumincho/js-ts-code-generator

Import symbol

import * as js_ts_code_generator from "@narumincho/js-ts-code-generator";