diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 62126501..282859cb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,6 +35,7 @@ jobs: pnpm build pnpm type-check pnpm test:code:gen + pnpm lint pnpm test env: CI: true diff --git a/biome.json b/biome.json index bc05918c..8ab6a220 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.0.0/schema.json", + "$schema": "https://biomejs.dev/schemas/2.4.12/schema.json", "assist": { "actions": { "source": { "organizeImports": "on" } } }, "formatter": { "enabled": true, @@ -21,12 +21,26 @@ "useNumberNamespace": "error", "noInferrableTypes": "error", "noUselessElse": "error" + }, + "correctness": { + "noUnusedImports": "error" + }, + "suspicious": { + "noExplicitAny": "off", + "useIterableCallbackReturn": "off" + }, + "performance": { + "noAccumulatingSpread": "off" + }, + "complexity": { + "noStaticOnlyClass": "off", + "noBannedTypes": "off" } } }, "files": { "ignoreUnknown": true, - "includes": ["**", "!**/dist"], + "includes": ["**", "!**/dist", "!coverage", "!examples", "!test/code"], "maxSize": 10485760 }, "javascript": { diff --git a/examples/apis/codegen.ts b/examples/apis/codegen.ts index 42107490..2da97bfb 100644 --- a/examples/apis/codegen.ts +++ b/examples/apis/codegen.ts @@ -1,8 +1,7 @@ -import * as fs from "fs"; - import { CodeGenerator } from "@himenon/openapi-typescript-code-generator"; import * as Templates from "@himenon/openapi-typescript-code-generator/dist/templates"; -import * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; +import type * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; +import * as fs from "fs"; const main = () => { const codeGenerator = new CodeGenerator("./spec/openapi.yml"); diff --git a/examples/apis/sample-axios.ts b/examples/apis/sample-axios.ts index 06afaa19..4aab8b8c 100644 --- a/examples/apis/sample-axios.ts +++ b/examples/apis/sample-axios.ts @@ -1,6 +1,6 @@ import * as axios from "axios"; -import { ApiClient, RequestArgs, createClient } from "./client"; +import { type ApiClient, createClient, type RequestArgs } from "./client"; import { generateQueryString } from "./utils"; export interface RequestOption { diff --git a/examples/apis/sample-debug.ts b/examples/apis/sample-debug.ts index 3dd57f0e..f79af631 100644 --- a/examples/apis/sample-debug.ts +++ b/examples/apis/sample-debug.ts @@ -1,4 +1,4 @@ -import { ApiClient, RequestArgs, createClient } from "./client"; +import { type ApiClient, createClient, type RequestArgs } from "./client"; import { generateQueryString } from "./utils"; export interface RequestOption { diff --git a/examples/apis/sample-fetch.ts b/examples/apis/sample-fetch.ts index 202624ca..6e616858 100644 --- a/examples/apis/sample-fetch.ts +++ b/examples/apis/sample-fetch.ts @@ -1,6 +1,6 @@ import fetch from "node-fetch"; -import { ApiClient, RequestArgs, createClient } from "./client"; +import { type ApiClient, createClient, type RequestArgs } from "./client"; import { generateQueryString } from "./utils"; export interface RequestOption { diff --git a/examples/apis/sample-superagent.ts b/examples/apis/sample-superagent.ts index 3c81267e..86caaf2b 100644 --- a/examples/apis/sample-superagent.ts +++ b/examples/apis/sample-superagent.ts @@ -1,6 +1,6 @@ import superagent from "superagent"; -import { ApiClient, RequestArgs, createClient } from "./client"; +import { type ApiClient, createClient, type RequestArgs } from "./client"; import { generateQueryString } from "./utils"; export interface RequestOption { diff --git a/examples/apis/utils.ts b/examples/apis/utils.ts index 93d56ca7..bf35ed15 100644 --- a/examples/apis/utils.ts +++ b/examples/apis/utils.ts @@ -1,6 +1,6 @@ import * as Formatter from "@himenon/openapi-parameter-formatter"; -import { QueryParameters } from "./client"; +import type { QueryParameters } from "./client"; export const generateQueryString = (queryParameters: QueryParameters | undefined): string | undefined => { if (!queryParameters) { diff --git a/examples/pure-js/gen.js b/examples/pure-js/gen.js index 0beabad0..b0754b27 100644 --- a/examples/pure-js/gen.js +++ b/examples/pure-js/gen.js @@ -1,6 +1,5 @@ -import * as fs from "fs"; - import { CodeGenerator } from "@himenon/openapi-typescript-code-generator"; +import * as fs from "fs"; const main = () => { const codeGenerator = new CodeGenerator("spec/openapi.yml"); diff --git a/examples/readme-sample/ast-code-template.ts b/examples/readme-sample/ast-code-template.ts index 0f8ef13d..5b31d893 100644 --- a/examples/readme-sample/ast-code-template.ts +++ b/examples/readme-sample/ast-code-template.ts @@ -1,5 +1,5 @@ import { TsGenerator } from "@himenon/openapi-typescript-code-generator/dist/api"; -import * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; +import type * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; type Option = {}; diff --git a/examples/readme-sample/generator-template.ts b/examples/readme-sample/generator-template.ts index 43f9a67a..f6884661 100644 --- a/examples/readme-sample/generator-template.ts +++ b/examples/readme-sample/generator-template.ts @@ -1,7 +1,6 @@ -import * as fs from "fs"; - import { CodeGenerator } from "@himenon/openapi-typescript-code-generator"; import type * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; +import * as fs from "fs"; /** ここにCode Templateの定義を記述してください */ const customGenerator: Types.CodeGenerator.CustomGenerator<{}> = { diff --git a/examples/readme-sample/split-typedef-and-api-client.ts b/examples/readme-sample/split-typedef-and-api-client.ts index 7207b10a..c4c83dbd 100644 --- a/examples/readme-sample/split-typedef-and-api-client.ts +++ b/examples/readme-sample/split-typedef-and-api-client.ts @@ -1,8 +1,7 @@ -import * as fs from "fs"; - import { CodeGenerator } from "@himenon/openapi-typescript-code-generator"; import * as Templates from "@himenon/openapi-typescript-code-generator/dist/templates"; import type * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; +import * as fs from "fs"; const main = () => { const codeGenerator = new CodeGenerator("your/openapi/spec.yml"); diff --git a/examples/readme-sample/text-base-code-template.ts b/examples/readme-sample/text-base-code-template.ts index c5304793..f52f0c75 100644 --- a/examples/readme-sample/text-base-code-template.ts +++ b/examples/readme-sample/text-base-code-template.ts @@ -1,4 +1,4 @@ -import * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; +import type * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; interface Option { showLog?: boolean; diff --git a/examples/readme-sample/typedef-and-api-client.ts b/examples/readme-sample/typedef-and-api-client.ts index 87fb6eb4..1a52a8f4 100644 --- a/examples/readme-sample/typedef-and-api-client.ts +++ b/examples/readme-sample/typedef-and-api-client.ts @@ -1,8 +1,7 @@ -import * as fs from "fs"; - import { CodeGenerator } from "@himenon/openapi-typescript-code-generator"; import * as Templates from "@himenon/openapi-typescript-code-generator/dist/templates"; import type * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; +import * as fs from "fs"; const main = () => { const codeGenerator = new CodeGenerator("your/openapi/spec.yml"); diff --git a/examples/readme-sample/typedef-only.ts b/examples/readme-sample/typedef-only.ts index 0fc0a43e..1004bf30 100644 --- a/examples/readme-sample/typedef-only.ts +++ b/examples/readme-sample/typedef-only.ts @@ -1,6 +1,5 @@ -import * as fs from "fs"; - import { CodeGenerator } from "@himenon/openapi-typescript-code-generator"; +import * as fs from "fs"; const main = () => { const codeGenerator = new CodeGenerator("your/openapi/spec.yml"); diff --git a/examples/readme-sample/use-extract-schema-params.ts b/examples/readme-sample/use-extract-schema-params.ts index 88675bd4..1a842eb2 100644 --- a/examples/readme-sample/use-extract-schema-params.ts +++ b/examples/readme-sample/use-extract-schema-params.ts @@ -1,4 +1,4 @@ -import * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; +import type * as Types from "@himenon/openapi-typescript-code-generator/dist/types"; type Option = {}; diff --git a/package.json b/package.json index 2979d37b..1c813c78 100644 --- a/package.json +++ b/package.json @@ -59,9 +59,9 @@ "scripts": { "build": "tsup", "clean": "pnpm ts ./scripts/clean.ts", - "format": "biome format --write .", + "format": "biome check --write --unsafe .", "lerna:version:up": "lerna version --yes", - "lint": "biome lint .", + "lint": "biome check .", "release:github:registry": "pnpm publish --no-git-checks --registry https://npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}", "release:npm:registry": "pnpm publish --no-git-checks", "test": "run-p test:depcruise test:vitest test:code:gen:* test:snapshot", diff --git a/scripts/tools/shell.ts b/scripts/tools/shell.ts index 27d12655..463a503d 100644 --- a/scripts/tools/shell.ts +++ b/scripts/tools/shell.ts @@ -1,4 +1,4 @@ -import { type ResultPromise, execa } from "execa"; +import { execa, type ResultPromise } from "execa"; export const shell = (command: string, cwd: string = process.cwd()): ResultPromise => { return execa(command, { diff --git a/scripts/validate.ts b/scripts/validate.ts index 2d17acfb..278007bf 100644 --- a/scripts/validate.ts +++ b/scripts/validate.ts @@ -1,6 +1,5 @@ -import * as fs from "fs"; -import * as path from "path"; - +import * as fs from "node:fs"; +import * as path from "node:path"; import * as yaml from "js-yaml"; import OpenAPISchemaValidator from "openapi-schema-validator"; diff --git a/scripts/watch.ts b/scripts/watch.ts index 09e99e5e..622abd48 100644 --- a/scripts/watch.ts +++ b/scripts/watch.ts @@ -15,7 +15,7 @@ const main = async () => { try { console.log((await shell("pnpm build")).stdout); console.log((await shell("pnpm run test:code:gen")).stdout); - } catch (error) { + } catch (_error) { console.error("Failed"); } }); @@ -24,7 +24,7 @@ const main = async () => { console.log(`Watch Change file ... ${path}`); try { console.log((await shell("pnpm run test:code:gen")).stdout); - } catch (error) { + } catch (_error) { console.error("Failed"); } }); diff --git a/scripts/writer/Class.ts b/scripts/writer/Class.ts index 5b149cb4..69ef8475 100644 --- a/scripts/writer/Class.ts +++ b/scripts/writer/Class.ts @@ -1,7 +1,7 @@ -import * as fs from "fs"; -import { posix as path } from "path"; +import * as fs from "node:fs"; +import { posix as path } from "node:path"; -import { CodeGenerator, Option as CodeGeneratorOption } from "../../dist"; +import { CodeGenerator, type Option as CodeGeneratorOption } from "../../dist"; import * as Templates from "../../dist/templates"; import type * as Types from "../../dist/types"; diff --git a/scripts/writer/CurryingFunctional.ts b/scripts/writer/CurryingFunctional.ts index f24e8f10..41eba823 100644 --- a/scripts/writer/CurryingFunctional.ts +++ b/scripts/writer/CurryingFunctional.ts @@ -1,7 +1,7 @@ -import * as fs from "fs"; -import { posix as path } from "path"; +import * as fs from "node:fs"; +import { posix as path } from "node:path"; -import { CodeGenerator, Option as CodeGeneratorOption } from "../../dist"; +import { CodeGenerator, type Option as CodeGeneratorOption } from "../../dist"; import * as Templates from "../../dist/templates"; import type * as Types from "../../dist/types"; diff --git a/scripts/writer/Functional.ts b/scripts/writer/Functional.ts index ffb31bb4..cd441d05 100644 --- a/scripts/writer/Functional.ts +++ b/scripts/writer/Functional.ts @@ -1,7 +1,7 @@ -import * as fs from "fs"; -import { posix as path } from "path"; +import * as fs from "node:fs"; +import { posix as path } from "node:path"; -import { CodeGenerator, Option as CodeGeneratorOption } from "../../dist"; +import { CodeGenerator, type Option as CodeGeneratorOption } from "../../dist"; import * as Templates from "../../dist/templates"; import type * as Types from "../../dist/types"; diff --git a/src/api.ts b/src/api.ts index 8f4108cf..1615e68d 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,5 +1,5 @@ -export * as TsGenerator from "./internal/TsGenerator"; -export * as OpenApiTools from "./internal/OpenApiTools"; export { FileSystem } from "./internal/FileSystem"; +export * as OpenApiTools from "./internal/OpenApiTools"; export * as ResolveReference from "./internal/ResolveReference"; +export * as TsGenerator from "./internal/TsGenerator"; export * as Validator from "./internal/Validator"; diff --git a/src/code-templates/_shared/ApiClientArgument.ts b/src/code-templates/_shared/ApiClientArgument.ts index 4aca03a7..96ea3c3e 100644 --- a/src/code-templates/_shared/ApiClientArgument.ts +++ b/src/code-templates/_shared/ApiClientArgument.ts @@ -1,4 +1,4 @@ -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../api"; import type { CodeGenerator } from "../../types"; diff --git a/src/code-templates/_shared/MethodBody/CallRequest.ts b/src/code-templates/_shared/MethodBody/CallRequest.ts index c232cd75..daff3818 100644 --- a/src/code-templates/_shared/MethodBody/CallRequest.ts +++ b/src/code-templates/_shared/MethodBody/CallRequest.ts @@ -1,4 +1,4 @@ -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../../api"; import type { CodeGenerator } from "../../../types"; diff --git a/src/code-templates/_shared/MethodBody/HeaderParameter.ts b/src/code-templates/_shared/MethodBody/HeaderParameter.ts index f42fb711..1b86d551 100644 --- a/src/code-templates/_shared/MethodBody/HeaderParameter.ts +++ b/src/code-templates/_shared/MethodBody/HeaderParameter.ts @@ -1,4 +1,4 @@ -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../../api"; import * as Utils from "../utils"; diff --git a/src/code-templates/_shared/MethodBody/PathParameter.ts b/src/code-templates/_shared/MethodBody/PathParameter.ts index 72d79931..e0887831 100644 --- a/src/code-templates/_shared/MethodBody/PathParameter.ts +++ b/src/code-templates/_shared/MethodBody/PathParameter.ts @@ -1,4 +1,4 @@ -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../../api"; import type { CodeGenerator } from "../../../types"; diff --git a/src/code-templates/_shared/MethodBody/__tests__/PathParameter-test.ts b/src/code-templates/_shared/MethodBody/__tests__/PathParameter-test.ts index ef430e5c..3b144a60 100644 --- a/src/code-templates/_shared/MethodBody/__tests__/PathParameter-test.ts +++ b/src/code-templates/_shared/MethodBody/__tests__/PathParameter-test.ts @@ -1,5 +1,5 @@ -import { describe, expect, it, test } from "vitest"; import ts from "typescript"; +import { describe, expect, test } from "vitest"; import { TsGenerator } from "../../../../api"; import type { CodeGenerator } from "../../../../types"; diff --git a/src/code-templates/_shared/MethodBody/createEncodingMap.ts b/src/code-templates/_shared/MethodBody/createEncodingMap.ts index 264e7f52..5a987c7c 100644 --- a/src/code-templates/_shared/MethodBody/createEncodingMap.ts +++ b/src/code-templates/_shared/MethodBody/createEncodingMap.ts @@ -1,4 +1,4 @@ -import { Encoding, MediaType } from "../../../typedef/OpenApi"; +import type { Encoding, MediaType } from "../../../typedef/OpenApi"; type EncodingMap = Record; diff --git a/src/code-templates/_shared/MethodBody/index.ts b/src/code-templates/_shared/MethodBody/index.ts index 8d648ba5..9148f999 100644 --- a/src/code-templates/_shared/MethodBody/index.ts +++ b/src/code-templates/_shared/MethodBody/index.ts @@ -1,14 +1,14 @@ -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../../api"; import type { CodeGenerator } from "../../../types"; import { escapeText2 as escapeText } from "../../../utils"; -import * as Utils from "../utils"; +import type * as Utils from "../utils"; import * as CallRequest from "./CallRequest"; +import { createEncodingMap } from "./createEncodingMap"; import * as HeaderParameter from "./HeaderParameter"; import * as PathParameter from "./PathParameter"; import * as QueryParameter from "./QueryParameter"; -import { createEncodingMap } from "./createEncodingMap"; import type { MethodType } from "./types"; export const create = (factory: TsGenerator.Factory.Type, params: CodeGenerator.Params, methodType: MethodType): ts.Statement[] => { diff --git a/src/code-templates/_shared/__tests__/utils.test.ts b/src/code-templates/_shared/__tests__/utils.test.ts index f811cf7f..f21b94d2 100644 --- a/src/code-templates/_shared/__tests__/utils.test.ts +++ b/src/code-templates/_shared/__tests__/utils.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it, test } from "vitest"; +import { describe, expect, test } from "vitest"; import * as Utils from "../utils"; type OK = Utils.VariableElement; diff --git a/src/code-templates/_shared/utils.ts b/src/code-templates/_shared/utils.ts index c2fcfdaa..d90f5921 100644 --- a/src/code-templates/_shared/utils.ts +++ b/src/code-templates/_shared/utils.ts @@ -1,4 +1,4 @@ -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../api"; import * as Utils from "../../utils"; @@ -19,7 +19,7 @@ export type Params$TemplateExpression = Item[]; const getTemplateSpan = ( factory: TsGenerator.Factory.Type, - currentIndex: number, + _currentIndex: number, nextIndex: number, lastIndex: number, currentItem: ExpressionItem, diff --git a/src/code-templates/class-api-client/ApiClientClass/Constructor.ts b/src/code-templates/class-api-client/ApiClientClass/Constructor.ts index e718e787..7c589c05 100644 --- a/src/code-templates/class-api-client/ApiClientClass/Constructor.ts +++ b/src/code-templates/class-api-client/ApiClientClass/Constructor.ts @@ -1,4 +1,4 @@ -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../../api"; diff --git a/src/code-templates/class-api-client/ApiClientClass/Method.ts b/src/code-templates/class-api-client/ApiClientClass/Method.ts index 02214ef3..e32445fd 100644 --- a/src/code-templates/class-api-client/ApiClientClass/Method.ts +++ b/src/code-templates/class-api-client/ApiClientClass/Method.ts @@ -1,6 +1,6 @@ -import { EOL } from "os"; +import { EOL } from "node:os"; -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../../api"; import type { CodeGenerator } from "../../../types"; diff --git a/src/code-templates/class-api-client/ApiClientClass/index.ts b/src/code-templates/class-api-client/ApiClientClass/index.ts index fe78a6a3..a528d391 100644 --- a/src/code-templates/class-api-client/ApiClientClass/index.ts +++ b/src/code-templates/class-api-client/ApiClientClass/index.ts @@ -1,4 +1,4 @@ -import ts from "typescript"; +import type ts from "typescript"; import type { TsGenerator } from "../../../api"; import type { CodeGenerator } from "../../../types"; diff --git a/src/code-templates/class-api-client/index.ts b/src/code-templates/class-api-client/index.ts index 033e62af..a1e1def7 100644 --- a/src/code-templates/class-api-client/index.ts +++ b/src/code-templates/class-api-client/index.ts @@ -1,4 +1,4 @@ -import ts from "typescript"; +import type ts from "typescript"; import { TsGenerator } from "../../api"; import type { CodeGenerator } from "../../types"; @@ -6,7 +6,7 @@ import * as ApiClientArgument from "../_shared/ApiClientArgument"; import type { Option } from "../_shared/types"; import * as ApiClientClass from "./ApiClientClass"; -export { Option }; +export type { Option }; export const generator: CodeGenerator.GenerateFunction