From 0c06e985131dd90e6f941c386f5d1282578a49c3 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 18 Mar 2026 13:03:09 +0100 Subject: [PATCH 01/15] Using native typescript execution and loader instead of unrun. --- .github/workflows/headers.yml | 4 ++-- README.md | 4 ++-- compat-test/quick-start.spec.ts | 4 ++-- esm-test/quick-start.spec.ts | 4 ++-- example/config.ts | 2 +- example/endpoints/create-user.ts | 2 +- example/endpoints/delete-user.ts | 2 +- example/endpoints/list-users.ts | 2 +- example/endpoints/retrieve-user.ts | 2 +- example/endpoints/send-avatar.ts | 2 +- example/endpoints/stream-avatar.ts | 2 +- example/endpoints/time-subscription.ts | 2 +- example/endpoints/update-user.ts | 2 +- example/factories.ts | 2 +- example/generate-client.ts | 4 ++-- example/generate-documentation.ts | 6 +++--- example/index.spec.ts | 6 +++--- example/index.ts | 4 ++-- example/middlewares.ts | 3 ++- example/package.json | 6 +++--- example/routing.ts | 27 +++++++++++++------------- express-zod-api/package.json | 2 +- express-zod-api/tsdown.config.ts | 2 +- migration/package.json | 2 +- migration/tsdown.config.ts | 2 +- package.json | 5 ++--- pnpm-lock.yaml | 3 --- tools/license.ts | 2 +- tools/make-tests.ts | 2 +- tsconfig.json | 1 + zod-plugin/package.json | 2 +- zod-plugin/tsdown.config.ts | 2 +- 32 files changed, 58 insertions(+), 59 deletions(-) diff --git a/.github/workflows/headers.yml b/.github/workflows/headers.yml index abc9038571..692449caac 100644 --- a/.github/workflows/headers.yml +++ b/.github/workflows/headers.yml @@ -6,7 +6,7 @@ on: - cron: "0 0 * * 0" # Runs every Sunday at midnight UTC permissions: - contents: write # Grants write access to push changes + contents: write # Grants write access to push changes pull-requests: write # and create PRs jobs: @@ -31,7 +31,7 @@ jobs: run: pnpm install - name: Check for new headers on IANA.ORG - run: pnpm unrun tools/headers.ts + run: pnpm node tools/headers.ts - name: Check for changes id: git-state diff --git a/README.md b/README.md index c59dbee79e..93e59ab9ed 100644 --- a/README.md +++ b/README.md @@ -243,7 +243,7 @@ const helloWorldEndpoint = defaultEndpointsFactory.build({ Connect your endpoint to the `/v1/hello` route: ```ts -import { Routing } from "express-zod-api"; +import type { Routing } from "express-zod-api"; const routing: Routing = { v1: { @@ -1218,7 +1218,7 @@ purpose, the `.deprecated()` method is available on each schema and `Endpoint`, You can also deprecate all routes the `Endpoint` assigned to by setting `EndpointsFactory::build({ deprecated: true })`. ```ts -import { Routing } from "express-zod-api"; +import type { Routing } from "express-zod-api"; import { z } from "zod"; const someEndpoint = factory.build({ diff --git a/compat-test/quick-start.spec.ts b/compat-test/quick-start.spec.ts index 12658ed174..089a9eb359 100644 --- a/compat-test/quick-start.spec.ts +++ b/compat-test/quick-start.spec.ts @@ -8,14 +8,14 @@ import { expect, test, } from "vitest"; -import { givePort } from "../tools/ports"; +import { givePort } from "../tools/ports.ts"; describe("ESM Test", async () => { let out = ""; const listener = (chunk: Buffer) => { out += chunk.toString(); }; - const quickStart = spawn("unrun", ["quick-start.ts"]); + const quickStart = spawn("node", ["quick-start.ts"]); quickStart.stdout.on("data", listener); quickStart.stderr.on("data", listener); await vi.waitFor(() => assert(out.includes(`Listening`)), { timeout: 1e4 }); diff --git a/esm-test/quick-start.spec.ts b/esm-test/quick-start.spec.ts index cc1daaf563..84994fb85e 100644 --- a/esm-test/quick-start.spec.ts +++ b/esm-test/quick-start.spec.ts @@ -1,12 +1,12 @@ import { spawn } from "node:child_process"; -import { givePort } from "../tools/ports"; +import { givePort } from "../tools/ports.ts"; describe("ESM Test", async () => { let out = ""; const listener = (chunk: Buffer) => { out += chunk.toString(); }; - const quickStart = spawn("unrun", ["quick-start.ts"]); + const quickStart = spawn("node", ["quick-start.ts"]); quickStart.stdout.on("data", listener); quickStart.stderr.on("data", listener); const port = givePort("esm"); diff --git a/example/config.ts b/example/config.ts index b9bcc7025e..1d262d4773 100644 --- a/example/config.ts +++ b/example/config.ts @@ -1,7 +1,7 @@ import { BuiltinLogger, createConfig } from "express-zod-api"; import ui from "swagger-ui-express"; import createHttpError from "http-errors"; -import { givePort } from "../tools/ports"; +import { givePort } from "../tools/ports.ts"; import qs from "qs"; export const config = createConfig({ diff --git a/example/endpoints/create-user.ts b/example/endpoints/create-user.ts index 0cbbba7893..b7b6f44cfd 100644 --- a/example/endpoints/create-user.ts +++ b/example/endpoints/create-user.ts @@ -1,7 +1,7 @@ import createHttpError from "http-errors"; import assert from "node:assert/strict"; import { z } from "zod"; -import { statusDependingFactory } from "../factories"; +import { statusDependingFactory } from "../factories.ts"; const namePart = z.string().regex(/^\w+$/); diff --git a/example/endpoints/delete-user.ts b/example/endpoints/delete-user.ts index e655a3e4ae..eb521ba951 100644 --- a/example/endpoints/delete-user.ts +++ b/example/endpoints/delete-user.ts @@ -1,7 +1,7 @@ import createHttpError from "http-errors"; import assert from "node:assert/strict"; import { z } from "zod"; -import { noContentFactory } from "../factories"; +import { noContentFactory } from "../factories.ts"; /** @desc The endpoint demonstrates no content response established by its factory */ export const deleteUserEndpoint = noContentFactory.buildVoid({ diff --git a/example/endpoints/list-users.ts b/example/endpoints/list-users.ts index b9844dfa3a..c5e919ef27 100644 --- a/example/endpoints/list-users.ts +++ b/example/endpoints/list-users.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { arrayRespondingFactory } from "../factories"; +import { arrayRespondingFactory } from "../factories.ts"; const roleSchema = z.enum(["manager", "operator", "admin"]); diff --git a/example/endpoints/retrieve-user.ts b/example/endpoints/retrieve-user.ts index 9996d18f59..9ca550b3b3 100644 --- a/example/endpoints/retrieve-user.ts +++ b/example/endpoints/retrieve-user.ts @@ -2,7 +2,7 @@ import createHttpError from "http-errors"; import assert from "node:assert/strict"; import { z } from "zod"; import { defaultEndpointsFactory } from "express-zod-api"; -import { methodProviderMiddleware } from "../middlewares"; +import { methodProviderMiddleware } from "../middlewares.ts"; // Demonstrating circular schemas using z.object() const feature = z diff --git a/example/endpoints/send-avatar.ts b/example/endpoints/send-avatar.ts index 9bc91b442d..4ba078d78d 100644 --- a/example/endpoints/send-avatar.ts +++ b/example/endpoints/send-avatar.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { fileSendingEndpointsFactory } from "../factories"; +import { fileSendingEndpointsFactory } from "../factories.ts"; import { readFile } from "node:fs/promises"; export const sendAvatarEndpoint = fileSendingEndpointsFactory.build({ diff --git a/example/endpoints/stream-avatar.ts b/example/endpoints/stream-avatar.ts index 677edc57b6..8c567313a4 100644 --- a/example/endpoints/stream-avatar.ts +++ b/example/endpoints/stream-avatar.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { fileStreamingEndpointsFactory } from "../factories"; +import { fileStreamingEndpointsFactory } from "../factories.ts"; export const streamAvatarEndpoint = fileStreamingEndpointsFactory.build({ shortDescription: "Streams a file content.", diff --git a/example/endpoints/time-subscription.ts b/example/endpoints/time-subscription.ts index bc571a98d0..9416aedf47 100644 --- a/example/endpoints/time-subscription.ts +++ b/example/endpoints/time-subscription.ts @@ -1,6 +1,6 @@ import { z } from "zod"; import { setTimeout } from "node:timers/promises"; -import { eventsFactory } from "../factories"; +import { eventsFactory } from "../factories.ts"; /** @desc The endpoint demonstrates emitting server-sent events (SSE) */ export const subscriptionEndpoint = eventsFactory.buildVoid({ diff --git a/example/endpoints/update-user.ts b/example/endpoints/update-user.ts index 8f15b9fc11..0abc67df43 100644 --- a/example/endpoints/update-user.ts +++ b/example/endpoints/update-user.ts @@ -2,7 +2,7 @@ import createHttpError from "http-errors"; import assert from "node:assert/strict"; import { z } from "zod"; import { ez } from "express-zod-api"; -import { keyAndTokenAuthenticatedEndpointsFactory } from "../factories"; +import { keyAndTokenAuthenticatedEndpointsFactory } from "../factories.ts"; export const updateUserEndpoint = keyAndTokenAuthenticatedEndpointsFactory.build({ diff --git a/example/factories.ts b/example/factories.ts index 3486217b94..e637820165 100644 --- a/example/factories.ts +++ b/example/factories.ts @@ -7,7 +7,7 @@ import { EventStreamFactory, defaultEndpointsFactory, } from "express-zod-api"; -import { authMiddleware } from "./middlewares"; +import { authMiddleware } from "./middlewares.ts"; import { createReadStream } from "node:fs"; import { z } from "zod"; import { stat } from "node:fs/promises"; diff --git a/example/generate-client.ts b/example/generate-client.ts index 16f7e3057a..4d6ce87fec 100644 --- a/example/generate-client.ts +++ b/example/generate-client.ts @@ -1,7 +1,7 @@ import { writeFile } from "node:fs/promises"; import { Integration } from "express-zod-api"; -import { routing } from "./routing"; -import { config } from "./config"; +import { routing } from "./routing.ts"; +import { config } from "./config.ts"; import typescript from "typescript"; await writeFile( diff --git a/example/generate-documentation.ts b/example/generate-documentation.ts index 82f70845a1..badba033ca 100644 --- a/example/generate-documentation.ts +++ b/example/generate-documentation.ts @@ -1,8 +1,8 @@ import { writeFile } from "node:fs/promises"; import { Documentation } from "express-zod-api"; -import { config } from "./config"; -import { routing } from "./routing"; -import manifest from "./package.json"; +import { config } from "./config.ts"; +import { routing } from "./routing.ts"; +import manifest from "./package.json" with { type: "json" }; await writeFile( "example.documentation.yaml", diff --git a/example/index.spec.ts b/example/index.spec.ts index 76916f4e54..5e209bfd33 100644 --- a/example/index.spec.ts +++ b/example/index.spec.ts @@ -1,8 +1,8 @@ import assert from "node:assert/strict"; import { spawn } from "node:child_process"; import { createReadStream, readFileSync } from "node:fs"; -import { Client, Subscription } from "./example.client"; -import { givePort } from "../tools/ports"; +import { Client, Subscription } from "./example.client.ts"; +import { givePort } from "../tools/ports.ts"; import { createHash } from "node:crypto"; import { readFile } from "node:fs/promises"; import { fail } from "node:assert"; @@ -13,7 +13,7 @@ describe("Example", async () => { out += chunk.toString(); }; const matchOut = (regExp: RegExp) => regExp.test(out); - const example = spawn("unrun", ["index.ts"]); + const example = spawn("node", ["index.ts"]); example.stdout.on("data", listener); const port = givePort("example"); await vi.waitFor(() => assert(out.includes(`Listening`)), { timeout: 1e4 }); diff --git a/example/index.ts b/example/index.ts index 9f62dc28d3..3292f7dfcf 100644 --- a/example/index.ts +++ b/example/index.ts @@ -1,6 +1,6 @@ import { createServer } from "express-zod-api"; -import { config } from "./config"; -import { routing } from "./routing"; +import { config } from "./config.ts"; +import { routing } from "./routing.ts"; /** * "await" is only needed for using entities returned from this method. diff --git a/example/middlewares.ts b/example/middlewares.ts index e3b68021f9..43e9a5df04 100644 --- a/example/middlewares.ts +++ b/example/middlewares.ts @@ -1,7 +1,8 @@ import createHttpError from "http-errors"; import assert from "node:assert/strict"; import { z } from "zod"; -import { Method, Middleware } from "express-zod-api"; +import { Middleware } from "express-zod-api"; +import type { Method } from "express-zod-api"; export const authMiddleware = new Middleware({ security: { diff --git a/example/package.json b/example/package.json index 0c87bc76f3..591b8fc7a4 100644 --- a/example/package.json +++ b/example/package.json @@ -4,10 +4,10 @@ "version": "0.0.0", "type": "module", "scripts": { - "start": "unrun index.ts", + "start": "node index.ts", "build": "pnpm build:docs && pnpm build:client", - "build:docs": "unrun generate-documentation.ts", - "build:client": "unrun generate-client.ts", + "build:docs": "node generate-documentation.ts", + "build:client": "node generate-client.ts", "pretest": "tsc", "test": "vitest run index.spec.ts" }, diff --git a/example/routing.ts b/example/routing.ts index 0bd924ba9c..39847d5444 100644 --- a/example/routing.ts +++ b/example/routing.ts @@ -1,16 +1,17 @@ -import { Routing, ServeStatic } from "express-zod-api"; -import { rawAcceptingEndpoint } from "./endpoints/accept-raw"; -import { createUserEndpoint } from "./endpoints/create-user"; -import { deleteUserEndpoint } from "./endpoints/delete-user"; -import { listUsersEndpoint } from "./endpoints/list-users"; -import { listUsersPaginatedEndpoint } from "./endpoints/list-users-paginated"; -import { submitFeedbackEndpoint } from "./endpoints/submit-feedback"; -import { subscriptionEndpoint } from "./endpoints/time-subscription"; -import { uploadAvatarEndpoint } from "./endpoints/upload-avatar"; -import { retrieveUserEndpoint } from "./endpoints/retrieve-user"; -import { sendAvatarEndpoint } from "./endpoints/send-avatar"; -import { updateUserEndpoint } from "./endpoints/update-user"; -import { streamAvatarEndpoint } from "./endpoints/stream-avatar"; +import type { Routing } from "express-zod-api"; +import { ServeStatic } from "express-zod-api"; +import { rawAcceptingEndpoint } from "./endpoints/accept-raw.ts"; +import { createUserEndpoint } from "./endpoints/create-user.ts"; +import { deleteUserEndpoint } from "./endpoints/delete-user.ts"; +import { listUsersEndpoint } from "./endpoints/list-users.ts"; +import { listUsersPaginatedEndpoint } from "./endpoints/list-users-paginated.ts"; +import { submitFeedbackEndpoint } from "./endpoints/submit-feedback.ts"; +import { subscriptionEndpoint } from "./endpoints/time-subscription.ts"; +import { uploadAvatarEndpoint } from "./endpoints/upload-avatar.ts"; +import { retrieveUserEndpoint } from "./endpoints/retrieve-user.ts"; +import { sendAvatarEndpoint } from "./endpoints/send-avatar.ts"; +import { updateUserEndpoint } from "./endpoints/update-user.ts"; +import { streamAvatarEndpoint } from "./endpoints/stream-avatar.ts"; export const routing: Routing = { v1: { diff --git a/express-zod-api/package.json b/express-zod-api/package.json index 518d6a2e85..4c51536be0 100644 --- a/express-zod-api/package.json +++ b/express-zod-api/package.json @@ -16,7 +16,7 @@ "bugs": "https://github.com/RobinTail/express-zod-api/issues", "funding": "https://github.com/sponsors/RobinTail", "scripts": { - "build": "tsdown --config-loader unrun", + "build": "tsdown", "pretest": "tsc", "test": "vitest run --coverage", "bench": "vitest bench --run ./bench", diff --git a/express-zod-api/tsdown.config.ts b/express-zod-api/tsdown.config.ts index 625fb31c63..60d8790ef9 100644 --- a/express-zod-api/tsdown.config.ts +++ b/express-zod-api/tsdown.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from "tsdown"; import manifest from "./package.json" with { type: "json" }; -import { humanReadableDtsPlugin } from "../tools/readableDts"; +import { humanReadableDtsPlugin } from "../tools/readableDts.ts"; export default defineConfig({ entry: "src/index.ts", diff --git a/migration/package.json b/migration/package.json index 4cf7685cf9..3766451e5d 100644 --- a/migration/package.json +++ b/migration/package.json @@ -17,7 +17,7 @@ "scripts": { "pretest": "tsc", "test": "vitest run --globals", - "build": "tsdown --config-loader unrun", + "build": "tsdown", "prepublishOnly": "eslint && pnpm test && pnpm build" }, "type": "module", diff --git a/migration/tsdown.config.ts b/migration/tsdown.config.ts index d8a1ec51c4..9cb873cede 100644 --- a/migration/tsdown.config.ts +++ b/migration/tsdown.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from "tsdown"; import manifest from "./package.json" with { type: "json" }; -import { humanReadableDtsPlugin } from "../tools/readableDts"; +import { humanReadableDtsPlugin } from "../tools/readableDts.ts"; export default defineConfig({ entry: "index.ts", diff --git a/package.json b/package.json index a3330b9b6c..856d0c7518 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "type": "module", "scripts": { "start": "pnpm -F example start", - "prebuild": "unrun tools/contributors.ts && unrun tools/license.ts", + "prebuild": "node tools/contributors.ts && node tools/license.ts", "build": "pnpm -r build", - "pretest": "unrun tools/make-tests.ts", + "pretest": "node tools/make-tests.ts", "test": "pnpm -r test", "bench": "pnpm -F express-zod-api bench", "lint": "eslint && prettier *.md **/*.md --check", @@ -28,7 +28,6 @@ "prettier": "3.8.1", "tsdown": "^0.21.2", "typescript-eslint": "catalog:dev", - "unrun": "^0.2.32", "vitest": "^4.0.16" }, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 42e5cdbd1f..98efc0a214 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,9 +103,6 @@ importers: typescript-eslint: specifier: catalog:dev version: 8.56.0(eslint@10.0.0)(typescript@5.9.3) - unrun: - specifier: ^0.2.32 - version: 0.2.32(synckit@0.11.12) vitest: specifier: ^4.0.16 version: 4.1.0(@types/node@24.12.0)(yaml@2.8.2) diff --git a/tools/license.ts b/tools/license.ts index 857db55fd8..e264b388c0 100644 --- a/tools/license.ts +++ b/tools/license.ts @@ -1,5 +1,5 @@ import { writeFile } from "node:fs/promises"; -import manifest from "../express-zod-api/package.json"; +import manifest from "../express-zod-api/package.json" with { type: "json" }; const text = ` MIT License diff --git a/tools/make-tests.ts b/tools/make-tests.ts index d0b42b2b5c..c49f858657 100644 --- a/tools/make-tests.ts +++ b/tools/make-tests.ts @@ -1,6 +1,6 @@ import assert from "node:assert/strict"; import { readFile, writeFile } from "node:fs/promises"; -import { givePort } from "./ports"; +import { givePort } from "./ports.ts"; const extractQuickStartFromReadme = async () => { const readme = await readFile("README.md", "utf-8"); diff --git a/tsconfig.json b/tsconfig.json index 704f30c3e2..beeee455de 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "noImplicitOverride": true, "noUncheckedSideEffectImports": true, "resolveJsonModule": true, + "allowImportingTsExtensions": true, "types": ["node", "vitest/globals"] } } diff --git a/zod-plugin/package.json b/zod-plugin/package.json index e4d7031d52..bce9ddfb8a 100644 --- a/zod-plugin/package.json +++ b/zod-plugin/package.json @@ -18,7 +18,7 @@ "scripts": { "pretest": "tsc", "test": "vitest run", - "build": "tsdown --config-loader unrun", + "build": "tsdown", "prepublishOnly": "eslint && pnpm test && pnpm build" }, "type": "module", diff --git a/zod-plugin/tsdown.config.ts b/zod-plugin/tsdown.config.ts index 7d7643bb5f..d3722b5afb 100644 --- a/zod-plugin/tsdown.config.ts +++ b/zod-plugin/tsdown.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from "tsdown"; import manifest from "./package.json" with { type: "json" }; -import { humanReadableDtsPlugin } from "../tools/readableDts"; +import { humanReadableDtsPlugin } from "../tools/readableDts.ts"; const plugins = [humanReadableDtsPlugin()]; From 009f0e326df4dad9559e9a843d5bf3d8df4af8cb Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 18 Mar 2026 13:30:11 +0100 Subject: [PATCH 02/15] Add verbatimModuleSyntax to base tsconfig. --- express-zod-api/src/builtin-logger.ts | 12 +++------ express-zod-api/src/common-helpers.ts | 15 ++++------- express-zod-api/src/config-type.ts | 18 ++++++------- express-zod-api/src/deep-checks.ts | 4 +-- express-zod-api/src/diagnostics.ts | 5 ++-- express-zod-api/src/documentation-helpers.ts | 25 +++++++++---------- express-zod-api/src/documentation.ts | 19 ++++++++------ express-zod-api/src/endpoint.ts | 25 ++++++++++--------- express-zod-api/src/endpoints-factory.ts | 20 ++++++--------- express-zod-api/src/errors.ts | 2 +- express-zod-api/src/integration-base.ts | 8 +++--- express-zod-api/src/integration.ts | 14 ++++++----- express-zod-api/src/json-schema-helpers.ts | 3 ++- express-zod-api/src/last-resort.ts | 4 +-- express-zod-api/src/middleware.ts | 13 +++++----- express-zod-api/src/result-handler.ts | 19 ++++++-------- express-zod-api/src/result-helpers.ts | 8 +++--- express-zod-api/src/routing-walker.ts | 10 +++++--- express-zod-api/src/routing.ts | 16 ++++++------ express-zod-api/src/server-helpers.ts | 8 +++--- express-zod-api/src/server.ts | 5 ++-- express-zod-api/src/sse.ts | 4 +-- express-zod-api/src/testing.ts | 25 +++++++------------ express-zod-api/src/zts-helpers.ts | 4 +-- express-zod-api/src/zts.ts | 10 +++++--- express-zod-api/tests/builtin-logger.spec.ts | 3 ++- express-zod-api/tests/common-helpers.spec.ts | 5 ++-- express-zod-api/tests/config-type.spec.ts | 2 +- express-zod-api/tests/deep-checks.spec.ts | 2 +- .../tests/documentation-helpers.spec.ts | 4 +-- express-zod-api/tests/documentation.spec.ts | 3 +-- .../tests/endpoints-factory.spec.ts | 4 +-- express-zod-api/tests/index.spec.ts | 4 +-- express-zod-api/tests/integration.spec.ts | 2 +- express-zod-api/tests/io-schema.spec.ts | 3 ++- express-zod-api/tests/logger-helpers.spec.ts | 4 +-- express-zod-api/tests/method.spec.ts | 6 ++--- express-zod-api/tests/result-handler.spec.ts | 5 ++-- express-zod-api/tests/routing.spec.ts | 2 +- express-zod-api/tests/server-helpers.spec.ts | 5 ++-- express-zod-api/tests/server.spec.ts | 3 +-- express-zod-api/tests/sse.spec.ts | 4 +-- express-zod-api/tests/system.spec.ts | 2 +- express-zod-api/tests/testing.spec.ts | 2 +- express-zod-api/tests/zts.spec.ts | 2 +- issue952-test/tags.ts | 7 ++---- tsconfig.json | 1 + 47 files changed, 182 insertions(+), 189 deletions(-) diff --git a/express-zod-api/src/builtin-logger.ts b/express-zod-api/src/builtin-logger.ts index 1008bff276..99dd57c2d4 100644 --- a/express-zod-api/src/builtin-logger.ts +++ b/express-zod-api/src/builtin-logger.ts @@ -1,14 +1,10 @@ import ansis from "ansis"; import { inspect } from "node:util"; import { performance } from "node:perf_hooks"; -import { FlatObject, isProduction } from "./common-helpers"; -import { - AbstractLogger, - formatDuration, - isHidden, - Severity, - styles, -} from "./logger-helpers"; +import { isProduction } from "./common-helpers"; +import type { FlatObject } from "./common-helpers"; +import type { AbstractLogger, Severity } from "./logger-helpers"; +import { formatDuration, isHidden, styles } from "./logger-helpers"; interface Context extends FlatObject { requestId?: string; diff --git a/express-zod-api/src/common-helpers.ts b/express-zod-api/src/common-helpers.ts index d727e4cc04..b30e078d05 100644 --- a/express-zod-api/src/common-helpers.ts +++ b/express-zod-api/src/common-helpers.ts @@ -1,16 +1,11 @@ -import { Request } from "express"; +import type { Request } from "express"; import * as R from "ramda"; import { z } from "zod"; -import { CommonConfig, InputSource, InputSources } from "./config-type"; +import type { CommonConfig, InputSource, InputSources } from "./config-type"; import { contentTypes } from "./content-type"; -import { - ClientMethod, - SomeMethod, - isMethod, - Method, - CORSMethod, -} from "./method"; -import { NormalizedResponse } from "./api-response"; +import type { ClientMethod, SomeMethod, Method, CORSMethod } from "./method"; +import { isMethod } from "./method"; +import type { NormalizedResponse } from "./api-response"; /** @since zod 3.25.61 output type fixed */ export const emptySchema = z.object({}); diff --git a/express-zod-api/src/config-type.ts b/express-zod-api/src/config-type.ts index 7b7f781703..d1b8c65852 100644 --- a/express-zod-api/src/config-type.ts +++ b/express-zod-api/src/config-type.ts @@ -1,14 +1,14 @@ import type compression from "compression"; -import { IRouter, Request, RequestHandler } from "express"; +import type { IRouter, Request, RequestHandler } from "express"; import type fileUpload from "express-fileupload"; -import { ServerOptions } from "node:https"; -import { BuiltinLoggerConfig } from "./builtin-logger"; -import { AbstractEndpoint } from "./endpoint"; -import { AbstractLogger, ActualLogger } from "./logger-helpers"; -import { Method } from "./method"; -import { AbstractResultHandler } from "./result-handler"; -import { ListenOptions } from "node:net"; -import { GetLogger } from "./server-helpers"; +import type { ServerOptions } from "node:https"; +import type { BuiltinLoggerConfig } from "./builtin-logger"; +import type { AbstractEndpoint } from "./endpoint"; +import type { AbstractLogger, ActualLogger } from "./logger-helpers"; +import type { Method } from "./method"; +import type { AbstractResultHandler } from "./result-handler"; +import type { ListenOptions } from "node:net"; +import type { GetLogger } from "./server-helpers"; export type InputSource = keyof Pick< Request, diff --git a/express-zod-api/src/deep-checks.ts b/express-zod-api/src/deep-checks.ts index 0b167ad15d..c2e7abfd2c 100644 --- a/express-zod-api/src/deep-checks.ts +++ b/express-zod-api/src/deep-checks.ts @@ -5,9 +5,9 @@ import { ezDateInBrand } from "./date-in-schema"; import { ezDateOutBrand } from "./date-out-schema"; import { DeepCheckError } from "./errors"; import { ezFormBrand } from "./form-schema"; -import { IOSchema } from "./io-schema"; +import type { IOSchema } from "./io-schema"; import { getBrand } from "@express-zod-api/zod-plugin"; -import { FirstPartyKind } from "./schema-walker"; +import type { FirstPartyKind } from "./schema-walker"; import { ezUploadBrand } from "./upload-schema"; import { ezRawBrand } from "./raw-schema"; diff --git a/express-zod-api/src/diagnostics.ts b/express-zod-api/src/diagnostics.ts index 6e96515b70..dab3622490 100644 --- a/express-zod-api/src/diagnostics.ts +++ b/express-zod-api/src/diagnostics.ts @@ -1,11 +1,12 @@ import { z } from "zod"; import { responseVariants } from "./api-response"; -import { FlatObject, getRoutePathParams } from "./common-helpers"; +import type { FlatObject } from "./common-helpers"; +import { getRoutePathParams } from "./common-helpers"; import { contentTypes } from "./content-type"; import { findJsonIncompatible } from "./deep-checks"; import { AbstractEndpoint } from "./endpoint"; import { flattenIO } from "./json-schema-helpers"; -import { ActualLogger } from "./logger-helpers"; +import type { ActualLogger } from "./logger-helpers"; import type { OnEndpoint } from "./routing-walker"; interface Findings { diff --git a/express-zod-api/src/documentation-helpers.ts b/express-zod-api/src/documentation-helpers.ts index cf1638e3c9..2f4de3adad 100644 --- a/express-zod-api/src/documentation-helpers.ts +++ b/express-zod-api/src/documentation-helpers.ts @@ -1,7 +1,5 @@ -import { +import type { ExamplesObject, - isReferenceObject, - isSchemaObject, MediaTypeObject, OAuthFlowObject, ParameterObject, @@ -14,36 +12,37 @@ import { SecuritySchemeObject, TagObject, } from "openapi3-ts/oas31"; +import { isReferenceObject, isSchemaObject } from "openapi3-ts/oas31"; import * as R from "ramda"; import { z } from "zod"; -import { NormalizedResponse, ResponseVariant } from "./api-response"; +import type { NormalizedResponse, ResponseVariant } from "./api-response"; import { ezBufferBrand } from "./buffer-schema"; +import type { FlatObject } from "./common-helpers"; +import type { Tag } from "./common-helpers"; import { shouldHaveContent, - FlatObject, getRoutePathParams, getTransformedType, isObject, isSchema, makeCleanId, routePathParamsRegex, - Tag, ucFirst, } from "./common-helpers"; -import { InputSource } from "./config-type"; +import type { InputSource } from "./config-type"; import { contentTypes } from "./content-type"; import { ezDateInBrand } from "./date-in-schema"; import { ezDateOutBrand } from "./date-out-schema"; import { DocumentationError } from "./errors"; -import { IOSchema } from "./io-schema"; +import type { IOSchema } from "./io-schema"; import { flattenIO } from "./json-schema-helpers"; -import { Alternatives } from "./logical-container"; +import type { Alternatives } from "./logical-container"; import { getBrand } from "@express-zod-api/zod-plugin"; -import { ClientMethod } from "./method"; -import { ProprietaryBrand } from "./proprietary-schemas"; import { ezRawBrand } from "./raw-schema"; -import { FirstPartyKind } from "./schema-walker"; -import { Security } from "./security"; +import type { ClientMethod } from "./method"; +import type { ProprietaryBrand } from "./proprietary-schemas"; +import type { FirstPartyKind } from "./schema-walker"; +import type { Security } from "./security"; import { ezUploadBrand } from "./upload-schema"; import wellKnownHeaders from "./well-known-headers"; diff --git a/express-zod-api/src/documentation.ts b/express-zod-api/src/documentation.ts index 173930cbe6..90345cd646 100644 --- a/express-zod-api/src/documentation.ts +++ b/express-zod-api/src/documentation.ts @@ -1,5 +1,4 @@ -import { - OpenApiBuilder, +import type { OperationObject, ReferenceObject, ResponsesObject, @@ -7,14 +6,15 @@ import { SecuritySchemeObject, SecuritySchemeType, } from "openapi3-ts/oas31"; +import { OpenApiBuilder } from "openapi3-ts/oas31"; import * as R from "ramda"; import { responseVariants } from "./api-response"; import { contentTypes } from "./content-type"; import { DocumentationError } from "./errors"; import { getInputSources, makeCleanId } from "./common-helpers"; -import { CommonConfig } from "./config-type"; +import type { CommonConfig } from "./config-type"; import { processContainers } from "./logical-container"; -import { ClientMethod } from "./method"; +import type { ClientMethod } from "./method"; import { depictBody, depictRequestParams, @@ -24,13 +24,16 @@ import { depictTags, ensureShortDescription, reformatParamsInPath, - IsHeader, nonEmpty, - BrandHandling, depictRequest, } from "./documentation-helpers"; -import { Routing } from "./routing"; -import { OnEndpoint, walkRouting, withHead } from "./routing-walker"; +import type { IsHeader, BrandHandling } from "./documentation-helpers"; +import { + walkRouting, + withHead, + type Routing, + type OnEndpoint, +} from "./routing-walker"; type Component = | "positiveResponse" diff --git a/express-zod-api/src/endpoint.ts b/express-zod-api/src/endpoint.ts index c8db21d4e5..70c14e7422 100644 --- a/express-zod-api/src/endpoint.ts +++ b/express-zod-api/src/endpoint.ts @@ -1,34 +1,35 @@ -import { Request, Response } from "express"; +import type { Request, Response } from "express"; import * as R from "ramda"; import { z, globalRegistry } from "zod"; -import { NormalizedResponse, ResponseVariant } from "./api-response"; +import type { NormalizedResponse, ResponseVariant } from "./api-response"; import { findRequestTypeDefiningSchema } from "./deep-checks"; +import type { FlatObject } from "./common-helpers"; import { - FlatObject, getActualMethod, getInput, ensureError, isSchema, } from "./common-helpers"; -import { CommonConfig } from "./config-type"; +import type { CommonConfig } from "./config-type"; import { InputValidationError, OutputValidationError, ResultHandlerError, } from "./errors"; import { ezFormBrand } from "./form-schema"; -import { IOSchema } from "./io-schema"; +import type { IOSchema } from "./io-schema"; import { lastResortHandler } from "./last-resort"; -import { ActualLogger } from "./logger-helpers"; -import { LogicalContainer } from "./logical-container"; +import type { ActualLogger } from "./logger-helpers"; +import type { LogicalContainer } from "./logical-container"; import { getBrand } from "@express-zod-api/zod-plugin"; -import { ClientMethod, CORSMethod, Method, SomeMethod } from "./method"; +import type { ClientMethod, CORSMethod, Method, SomeMethod } from "./method"; import { AbstractMiddleware, ExpressMiddleware } from "./middleware"; -import { ContentType } from "./content-type"; +import type { ContentType } from "./content-type"; import { ezRawBrand } from "./raw-schema"; -import { DiscriminatedResult, pullResponseExamples } from "./result-helpers"; -import { AbstractResultHandler } from "./result-handler"; -import { Security } from "./security"; +import type { DiscriminatedResult } from "./result-helpers"; +import { pullResponseExamples } from "./result-helpers"; +import type { AbstractResultHandler } from "./result-handler"; +import type { Security } from "./security"; import { ezUploadBrand } from "./upload-schema"; import type { Routing } from "./routing"; diff --git a/express-zod-api/src/endpoints-factory.ts b/express-zod-api/src/endpoints-factory.ts index 99443e7615..f0af4a8afc 100644 --- a/express-zod-api/src/endpoints-factory.ts +++ b/express-zod-api/src/endpoints-factory.ts @@ -1,21 +1,17 @@ -import { Request, Response } from "express"; +import type { Request, Response } from "express"; import { z } from "zod"; -import { +import { emptySchema } from "./common-helpers"; +import type { EmptyObject, - emptySchema, EmptySchema, FlatObject, Tag, } from "./common-helpers"; -import { Endpoint, Handler } from "./endpoint"; -import { - IOSchema, - FinalInputSchema, - Extension, - ensureExtension, - makeFinalInputSchema, -} from "./io-schema"; -import { ClientMethod, Method } from "./method"; +import { Endpoint } from "./endpoint"; +import type { Handler } from "./endpoint"; +import { ensureExtension, makeFinalInputSchema } from "./io-schema"; +import type { IOSchema, FinalInputSchema, Extension } from "./io-schema"; +import type { ClientMethod, Method } from "./method"; import { AbstractMiddleware, ExpressMiddleware, diff --git a/express-zod-api/src/errors.ts b/express-zod-api/src/errors.ts index 3da95acea6..65b50c46d8 100644 --- a/express-zod-api/src/errors.ts +++ b/express-zod-api/src/errors.ts @@ -1,6 +1,6 @@ import { z } from "zod"; import { getMessageFromError } from "./common-helpers"; -import { OpenAPIContext } from "./documentation-helpers"; +import type { OpenAPIContext } from "./documentation-helpers"; import type { Method } from "./method"; /** @desc An error related to the wrong Routing declaration */ diff --git a/express-zod-api/src/integration-base.ts b/express-zod-api/src/integration-base.ts index 744439dd6e..adfa3d4e68 100644 --- a/express-zod-api/src/integration-base.ts +++ b/express-zod-api/src/integration-base.ts @@ -1,10 +1,12 @@ import * as R from "ramda"; import type ts from "typescript"; -import { ResponseVariant } from "./api-response"; +import type { ResponseVariant } from "./api-response"; import { contentTypes } from "./content-type"; -import { ClientMethod, clientMethods } from "./method"; +import { clientMethods } from "./method"; +import type { ClientMethod } from "./method"; import type { makeEventSchema } from "./sse"; -import { propOf, Typeable, TypescriptAPI } from "./typescript-api"; +import { propOf, TypescriptAPI } from "./typescript-api"; +import type { Typeable } from "./typescript-api"; import type { CursorPaginatedResult, OffsetPaginatedResult, diff --git a/express-zod-api/src/integration.ts b/express-zod-api/src/integration.ts index 1fe253e34a..19a83d879d 100644 --- a/express-zod-api/src/integration.ts +++ b/express-zod-api/src/integration.ts @@ -1,17 +1,19 @@ import * as R from "ramda"; import type ts from "typescript"; import { z } from "zod"; -import { ResponseVariant, responseVariants } from "./api-response"; +import { responseVariants } from "./api-response"; +import type { ResponseVariant } from "./api-response"; import { IntegrationBase } from "./integration-base"; import { shouldHaveContent, makeCleanId } from "./common-helpers"; import { loadPeer } from "./peer-helpers"; -import { Routing } from "./routing"; -import { OnEndpoint, walkRouting, withHead } from "./routing-walker"; -import { HandlingRules } from "./schema-walker"; +import type { Routing } from "./routing"; +import { walkRouting, withHead } from "./routing-walker"; +import type { OnEndpoint } from "./routing-walker"; +import type { HandlingRules } from "./schema-walker"; import { zodToTs } from "./zts"; -import { ZTSContext } from "./zts-helpers"; +import type { ZTSContext } from "./zts-helpers"; import type Prettier from "prettier"; -import { ClientMethod } from "./method"; +import type { ClientMethod } from "./method"; import type { CommonConfig } from "./config-type"; interface IntegrationParams { diff --git a/express-zod-api/src/json-schema-helpers.ts b/express-zod-api/src/json-schema-helpers.ts index 1d96da0daa..61e0c055e4 100644 --- a/express-zod-api/src/json-schema-helpers.ts +++ b/express-zod-api/src/json-schema-helpers.ts @@ -1,5 +1,6 @@ import * as R from "ramda"; -import { combinations, FlatObject, isObject } from "./common-helpers"; +import { combinations, isObject } from "./common-helpers"; +import type { FlatObject } from "./common-helpers"; import type { z } from "zod"; const isJsonObjectSchema = ( diff --git a/express-zod-api/src/last-resort.ts b/express-zod-api/src/last-resort.ts index a37b81151d..2f62dab97e 100644 --- a/express-zod-api/src/last-resort.ts +++ b/express-zod-api/src/last-resort.ts @@ -1,7 +1,7 @@ -import { Response } from "express"; +import type { Response } from "express"; import createHttpError, { isHttpError } from "http-errors"; import { ResultHandlerError } from "./errors"; -import { ActualLogger } from "./logger-helpers"; +import type { ActualLogger } from "./logger-helpers"; import { getPublicErrorMessage } from "./result-helpers"; interface LastResortHandlerParams { diff --git a/express-zod-api/src/middleware.ts b/express-zod-api/src/middleware.ts index 2755e9c818..e7f9d52371 100644 --- a/express-zod-api/src/middleware.ts +++ b/express-zod-api/src/middleware.ts @@ -1,11 +1,12 @@ -import { NextFunction, Request, Response } from "express"; +import type { NextFunction, Request, Response } from "express"; import { z } from "zod"; -import { emptySchema, FlatObject } from "./common-helpers"; +import { emptySchema } from "./common-helpers"; +import type { FlatObject } from "./common-helpers"; import { InputValidationError } from "./errors"; -import { IOSchema } from "./io-schema"; -import { LogicalContainer } from "./logical-container"; -import { Security } from "./security"; -import { ActualLogger } from "./logger-helpers"; +import type { IOSchema } from "./io-schema"; +import type { LogicalContainer } from "./logical-container"; +import type { Security } from "./security"; +import type { ActualLogger } from "./logger-helpers"; type Handler = (params: { /** @desc The inputs from the enabled input sources validated against the input schema of the Middleware */ diff --git a/express-zod-api/src/result-handler.ts b/express-zod-api/src/result-handler.ts index 937b4e6079..4d5fe52cdd 100644 --- a/express-zod-api/src/result-handler.ts +++ b/express-zod-api/src/result-handler.ts @@ -1,21 +1,18 @@ -import { Request, Response } from "express"; +import type { Request, Response } from "express"; import { globalRegistry, z } from "zod"; -import { - ApiResponse, - defaultStatusCodes, - NormalizedResponse, -} from "./api-response"; -import { FlatObject, isObject } from "./common-helpers"; +import { defaultStatusCodes } from "./api-response"; +import type { ApiResponse, NormalizedResponse } from "./api-response"; +import { isObject } from "./common-helpers"; +import type { FlatObject } from "./common-helpers"; import { contentTypes } from "./content-type"; -import { IOSchema } from "./io-schema"; -import { ActualLogger } from "./logger-helpers"; +import type { IOSchema } from "./io-schema"; +import type { ActualLogger } from "./logger-helpers"; +import type { DiscriminatedResult, ResultSchema } from "./result-helpers"; import { - DiscriminatedResult, ensureHttpError, getPublicErrorMessage, logServerError, normalize, - ResultSchema, } from "./result-helpers"; type Handler = ( diff --git a/express-zod-api/src/result-helpers.ts b/express-zod-api/src/result-helpers.ts index 0f7cd11627..f71d4fb9c7 100644 --- a/express-zod-api/src/result-helpers.ts +++ b/express-zod-api/src/result-helpers.ts @@ -1,16 +1,16 @@ -import { Request } from "express"; +import type { Request } from "express"; import createHttpError, { HttpError, isHttpError } from "http-errors"; import * as R from "ramda"; import { globalRegistry, z } from "zod"; -import { NormalizedResponse, ResponseVariant } from "./api-response"; +import type { NormalizedResponse, ResponseVariant } from "./api-response"; import { combinations, - FlatObject, getMessageFromError, isProduction, } from "./common-helpers"; +import type { FlatObject } from "./common-helpers"; import { InputValidationError, ResultHandlerError } from "./errors"; -import { ActualLogger } from "./logger-helpers"; +import type { ActualLogger } from "./logger-helpers"; import type { LazyResult, Result } from "./result-handler"; export type ResultSchema = diff --git a/express-zod-api/src/routing-walker.ts b/express-zod-api/src/routing-walker.ts index 9dba9564e4..dc2910b213 100644 --- a/express-zod-api/src/routing-walker.ts +++ b/express-zod-api/src/routing-walker.ts @@ -1,10 +1,14 @@ +import type { Routing } from "./routing"; import { AbstractEndpoint } from "./endpoint"; import { RoutingError } from "./errors"; -import { ClientMethod, isMethod, Method } from "./method"; -import { Routing } from "./routing"; -import { ServeStatic, StaticHandler } from "./serve-static"; +import { isMethod } from "./method"; +import type { ClientMethod, Method } from "./method"; +import { ServeStatic } from "./serve-static"; +import type { StaticHandler } from "./serve-static"; import type { CommonConfig } from "./config-type"; +export type { Routing }; + export type OnEndpoint = ( method: M, path: string, diff --git a/express-zod-api/src/routing.ts b/express-zod-api/src/routing.ts index c9b5d7ceab..76cec74e92 100644 --- a/express-zod-api/src/routing.ts +++ b/express-zod-api/src/routing.ts @@ -1,14 +1,16 @@ -import { IRouter, RequestHandler } from "express"; +import type { IRouter, RequestHandler } from "express"; import createHttpError from "http-errors"; import { isProduction } from "./common-helpers"; -import { CommonConfig } from "./config-type"; -import { ContentType } from "./content-type"; +import type { CommonConfig } from "./config-type"; +import type { ContentType } from "./content-type"; import { Diagnostics } from "./diagnostics"; -import { AbstractEndpoint } from "./endpoint"; -import { CORSMethod, isMethod } from "./method"; -import { OnEndpoint, walkRouting } from "./routing-walker"; +import type { AbstractEndpoint } from "./endpoint"; +import { isMethod } from "./method"; +import type { CORSMethod } from "./method"; +import { walkRouting } from "./routing-walker"; +import type { OnEndpoint } from "./routing-walker"; import { ServeStatic } from "./serve-static"; -import { GetLogger } from "./server-helpers"; +import type { GetLogger } from "./server-helpers"; import * as R from "ramda"; /** diff --git a/express-zod-api/src/server-helpers.ts b/express-zod-api/src/server-helpers.ts index 2949740d37..7be3b08127 100644 --- a/express-zod-api/src/server-helpers.ts +++ b/express-zod-api/src/server-helpers.ts @@ -1,9 +1,9 @@ import type fileUpload from "express-fileupload"; import { loadPeer } from "./peer-helpers"; -import { AbstractResultHandler } from "./result-handler"; -import { ActualLogger } from "./logger-helpers"; -import { CommonConfig, ServerConfig } from "./config-type"; -import { ErrorRequestHandler, RequestHandler, Request } from "express"; +import type { AbstractResultHandler } from "./result-handler"; +import type { ActualLogger } from "./logger-helpers"; +import type { CommonConfig, ServerConfig } from "./config-type"; +import type { ErrorRequestHandler, RequestHandler, Request } from "express"; import createHttpError from "http-errors"; import { lastResortHandler } from "./last-resort"; import { ResultHandlerError } from "./errors"; diff --git a/express-zod-api/src/server.ts b/express-zod-api/src/server.ts index 76ad38959d..8ed492a83f 100644 --- a/express-zod-api/src/server.ts +++ b/express-zod-api/src/server.ts @@ -3,7 +3,7 @@ import type compression from "compression"; import http from "node:http"; import https from "node:https"; import { BuiltinLogger } from "./builtin-logger"; -import { +import type { AppConfig, CommonConfig, HttpConfig, @@ -12,7 +12,8 @@ import { import { isLoggerInstance } from "./logger-helpers"; import { loadPeer } from "./peer-helpers"; import { defaultResultHandler } from "./result-handler"; -import { Parsers, Routing, initRouting } from "./routing"; +import { initRouting } from "./routing"; +import type { Parsers, Routing } from "./routing"; import { createLoggingMiddleware, createNotFoundHandler, diff --git a/express-zod-api/src/sse.ts b/express-zod-api/src/sse.ts index 273e12fc0b..152a3a0333 100644 --- a/express-zod-api/src/sse.ts +++ b/express-zod-api/src/sse.ts @@ -1,6 +1,6 @@ -import { Response } from "express"; +import type { Response } from "express"; import { z } from "zod"; -import { FlatObject } from "./common-helpers"; +import type { FlatObject } from "./common-helpers"; import { contentTypes } from "./content-type"; import { EndpointsFactory } from "./endpoints-factory"; import { Middleware } from "./middleware"; diff --git a/express-zod-api/src/testing.ts b/express-zod-api/src/testing.ts index c2d2ec2a84..4ce8a61b7e 100644 --- a/express-zod-api/src/testing.ts +++ b/express-zod-api/src/testing.ts @@ -1,20 +1,13 @@ -import { Request, Response } from "express"; -import { ensureError, FlatObject, getInput } from "./common-helpers"; -import { CommonConfig } from "./config-type"; -import { AbstractEndpoint } from "./endpoint"; -import { - AbstractLogger, - ActualLogger, - isSeverity, - Severity, -} from "./logger-helpers"; +import type { Request, Response } from "express"; +import { ensureError, getInput } from "./common-helpers"; +import type { FlatObject } from "./common-helpers"; +import type { CommonConfig } from "./config-type"; +import type { AbstractEndpoint } from "./endpoint"; +import { isSeverity } from "./logger-helpers"; +import type { AbstractLogger, ActualLogger, Severity } from "./logger-helpers"; import { contentTypes } from "./content-type"; -import { - createRequest, - RequestOptions, - createResponse, - ResponseOptions, -} from "node-mocks-http"; +import { createRequest, createResponse } from "node-mocks-http"; +import type { RequestOptions, ResponseOptions } from "node-mocks-http"; import { AbstractMiddleware } from "./middleware"; import { defaultResultHandler } from "./result-handler"; diff --git a/express-zod-api/src/zts-helpers.ts b/express-zod-api/src/zts-helpers.ts index 4778b8deac..07bfa8e087 100644 --- a/express-zod-api/src/zts-helpers.ts +++ b/express-zod-api/src/zts-helpers.ts @@ -1,6 +1,6 @@ import type ts from "typescript"; -import { FlatObject } from "./common-helpers"; -import { SchemaHandler } from "./schema-walker"; +import type { FlatObject } from "./common-helpers"; +import type { SchemaHandler } from "./schema-walker"; import type { TypescriptAPI } from "./typescript-api"; export interface ZTSContext extends FlatObject { diff --git a/express-zod-api/src/zts.ts b/express-zod-api/src/zts.ts index db4d7e36ac..659c4bd105 100644 --- a/express-zod-api/src/zts.ts +++ b/express-zod-api/src/zts.ts @@ -6,11 +6,13 @@ import { getTransformedType, isSchema } from "./common-helpers"; import { ezDateInBrand } from "./date-in-schema"; import { ezDateOutBrand } from "./date-out-schema"; import { hasCycle } from "./deep-checks"; -import { ProprietaryBrand } from "./proprietary-schemas"; -import { ezRawBrand, RawSchema } from "./raw-schema"; -import { FirstPartyKind, HandlingRules, walkSchema } from "./schema-walker"; +import type { ProprietaryBrand } from "./proprietary-schemas"; +import { ezRawBrand } from "./raw-schema"; +import type { RawSchema } from "./raw-schema"; +import { walkSchema } from "./schema-walker"; +import type { FirstPartyKind, HandlingRules } from "./schema-walker"; import type { TypescriptAPI } from "./typescript-api"; -import { Producer, ZTSContext } from "./zts-helpers"; +import type { Producer, ZTSContext } from "./zts-helpers"; const nodePath = { name: R.path([ diff --git a/express-zod-api/tests/builtin-logger.spec.ts b/express-zod-api/tests/builtin-logger.spec.ts index 92a7b8520d..820d0ca8ab 100644 --- a/express-zod-api/tests/builtin-logger.spec.ts +++ b/express-zod-api/tests/builtin-logger.spec.ts @@ -1,5 +1,6 @@ import { performance } from "node:perf_hooks"; -import { BuiltinLogger, BuiltinLoggerConfig } from "../src/builtin-logger"; +import { BuiltinLogger } from "../src/builtin-logger"; +import type { BuiltinLoggerConfig } from "../src/builtin-logger"; describe("BuiltinLogger", () => { beforeEach(() => { diff --git a/express-zod-api/tests/common-helpers.spec.ts b/express-zod-api/tests/common-helpers.spec.ts index 96b24cc2da..71a7ba598f 100644 --- a/express-zod-api/tests/common-helpers.spec.ts +++ b/express-zod-api/tests/common-helpers.spec.ts @@ -10,13 +10,12 @@ import { shouldHaveContent, getInputSources, emptySchema, - EmptySchema, - EmptyObject, } from "../src/common-helpers"; +import type { EmptySchema, EmptyObject } from "../src/common-helpers"; import { z } from "zod"; import { makeRequestMock } from "../src/testing"; import { methods } from "../src/method"; -import { CommonConfig, InputSources } from "../src/config-type"; +import type { CommonConfig, InputSources } from "../src/config-type"; describe("Common Helpers", () => { describe("emptySchema", () => { diff --git a/express-zod-api/tests/config-type.spec.ts b/express-zod-api/tests/config-type.spec.ts index ed45f6d90c..3777089209 100644 --- a/express-zod-api/tests/config-type.spec.ts +++ b/express-zod-api/tests/config-type.spec.ts @@ -1,4 +1,4 @@ -import { Express, IRouter } from "express"; +import type { Express, IRouter } from "express"; import { createConfig } from "../src"; describe("ConfigType", () => { diff --git a/express-zod-api/tests/deep-checks.spec.ts b/express-zod-api/tests/deep-checks.spec.ts index 8308daf0b1..9f5c66f914 100644 --- a/express-zod-api/tests/deep-checks.spec.ts +++ b/express-zod-api/tests/deep-checks.spec.ts @@ -1,4 +1,4 @@ -import { UploadedFile } from "express-fileupload"; +import type { UploadedFile } from "express-fileupload"; import { z } from "zod"; import { ez } from "../src"; import { findNestedSchema, hasCycle } from "../src/deep-checks"; diff --git a/express-zod-api/tests/documentation-helpers.spec.ts b/express-zod-api/tests/documentation-helpers.spec.ts index 9f5d45d373..873ce09d35 100644 --- a/express-zod-api/tests/documentation-helpers.spec.ts +++ b/express-zod-api/tests/documentation-helpers.spec.ts @@ -1,9 +1,9 @@ -import { SchemaObject } from "openapi3-ts/oas31"; +import type { SchemaObject } from "openapi3-ts/oas31"; import * as R from "ramda"; import { z } from "zod"; import { ez } from "../src"; +import type { OpenAPIContext } from "../src/documentation-helpers"; import { - OpenAPIContext, depictRequestParams, depictSecurity, depictSecurityRefs, diff --git a/express-zod-api/tests/documentation.spec.ts b/express-zod-api/tests/documentation.spec.ts index 136a21addf..6b56c9645e 100644 --- a/express-zod-api/tests/documentation.spec.ts +++ b/express-zod-api/tests/documentation.spec.ts @@ -9,9 +9,8 @@ import { defaultEndpointsFactory, ez, ResultHandler, - Depicter, - Method, } from "../src"; +import type { Depicter, Method } from "../src"; import { contentTypes } from "../src/content-type"; import { z } from "zod"; import { givePort } from "../../tools/ports"; diff --git a/express-zod-api/tests/endpoints-factory.spec.ts b/express-zod-api/tests/endpoints-factory.spec.ts index 999ebb6e5c..58d291c3b9 100644 --- a/express-zod-api/tests/endpoints-factory.spec.ts +++ b/express-zod-api/tests/endpoints-factory.spec.ts @@ -1,4 +1,4 @@ -import { RequestHandler } from "express"; +import type { RequestHandler } from "express"; import createHttpError from "http-errors"; import { expectTypeOf } from "vitest"; import { @@ -8,7 +8,7 @@ import { ResultHandler, testMiddleware, } from "../src"; -import { EmptyObject } from "../src/common-helpers"; +import type { EmptyObject } from "../src/common-helpers"; import { Endpoint } from "../src/endpoint"; import { z } from "zod"; diff --git a/express-zod-api/tests/index.spec.ts b/express-zod-api/tests/index.spec.ts index 0ebd4cba06..e0c9920459 100644 --- a/express-zod-api/tests/index.spec.ts +++ b/express-zod-api/tests/index.spec.ts @@ -1,8 +1,8 @@ -import { IRouter } from "express"; +import type { IRouter } from "express"; import ts from "typescript"; import { z } from "zod"; import * as entrypoint from "../src"; -import { +import type { ApiResponse, AppConfig, BasicSecurity, diff --git a/express-zod-api/tests/integration.spec.ts b/express-zod-api/tests/integration.spec.ts index 9edc16d10d..55ebfb5957 100644 --- a/express-zod-api/tests/integration.spec.ts +++ b/express-zod-api/tests/integration.spec.ts @@ -3,10 +3,10 @@ import { globalRegistry, z } from "zod"; import { EndpointsFactory, Integration, - Producer, defaultEndpointsFactory, ResultHandler, } from "../src"; +import type { Producer } from "../src"; describe("Integration", () => { const recursive1: z.ZodType = z.lazy(() => diff --git a/express-zod-api/tests/io-schema.spec.ts b/express-zod-api/tests/io-schema.spec.ts index dde7e5600b..99d903cb90 100644 --- a/express-zod-api/tests/io-schema.spec.ts +++ b/express-zod-api/tests/io-schema.spec.ts @@ -1,5 +1,6 @@ import { z } from "zod"; -import { IOSchema, ez } from "../src"; +import { ez } from "../src"; +import type { IOSchema } from "../src"; import { makeFinalInputSchema, ensureExtension } from "../src/io-schema"; describe("I/O Schema and related helpers", () => { diff --git a/express-zod-api/tests/logger-helpers.spec.ts b/express-zod-api/tests/logger-helpers.spec.ts index 4529f2cb56..3e7c13dbdb 100644 --- a/express-zod-api/tests/logger-helpers.spec.ts +++ b/express-zod-api/tests/logger-helpers.spec.ts @@ -1,13 +1,13 @@ import { BuiltinLogger } from "../src"; -import { BuiltinLoggerConfig } from "../src/builtin-logger"; +import type { BuiltinLoggerConfig } from "../src/builtin-logger"; import { - AbstractLogger, isLoggerInstance, isSeverity, isHidden, makeNumberFormat, formatDuration, } from "../src/logger-helpers"; +import type { AbstractLogger } from "../src/logger-helpers"; describe("Logger helpers", () => { describe("isSeverity()", () => { diff --git a/express-zod-api/tests/method.spec.ts b/express-zod-api/tests/method.spec.ts index 7bab93da7a..b8d4139f64 100644 --- a/express-zod-api/tests/method.spec.ts +++ b/express-zod-api/tests/method.spec.ts @@ -1,9 +1,7 @@ import * as R from "ramda"; -import { - isMethod, - methods, +import { isMethod, methods, clientMethods } from "../src/method"; +import type { Method, - clientMethods, ClientMethod, SomeMethod, CORSMethod, diff --git a/express-zod-api/tests/result-handler.spec.ts b/express-zod-api/tests/result-handler.spec.ts index a134ee3cab..01335162c9 100644 --- a/express-zod-api/tests/result-handler.spec.ts +++ b/express-zod-api/tests/result-handler.spec.ts @@ -1,4 +1,4 @@ -import { Response } from "express"; +import type { Response } from "express"; import createHttpError from "http-errors"; import { z } from "zod"; import { @@ -8,7 +8,8 @@ import { ResultHandler, } from "../src"; import { ResultHandlerError } from "../src/errors"; -import { AbstractResultHandler, Result } from "../src/result-handler"; +import { AbstractResultHandler } from "../src/result-handler"; +import type { Result } from "../src/result-handler"; import { makeLoggerMock, makeRequestMock, diff --git a/express-zod-api/tests/routing.spec.ts b/express-zod-api/tests/routing.spec.ts index 50b985a0f7..303381bdf7 100644 --- a/express-zod-api/tests/routing.spec.ts +++ b/express-zod-api/tests/routing.spec.ts @@ -7,11 +7,11 @@ import { import { z } from "zod"; import { EndpointsFactory, - Routing, ServeStatic, defaultResultHandler, ez, } from "../src"; +import type { Routing } from "../src"; import { makeLoggerMock, makeRequestMock, diff --git a/express-zod-api/tests/server-helpers.spec.ts b/express-zod-api/tests/server-helpers.spec.ts index 4beda60abc..f36550dc19 100644 --- a/express-zod-api/tests/server-helpers.spec.ts +++ b/express-zod-api/tests/server-helpers.spec.ts @@ -13,8 +13,9 @@ import { installTerminationListener, localsID, } from "../src/server-helpers"; -import { CommonConfig, defaultResultHandler, ResultHandler } from "../src"; -import { Request } from "express"; +import { defaultResultHandler, ResultHandler } from "../src"; +import type { CommonConfig } from "../src"; +import type { Request } from "express"; import { makeLoggerMock, makeRequestMock, diff --git a/express-zod-api/tests/server.spec.ts b/express-zod-api/tests/server.spec.ts index 72494eb662..16ecda1f9d 100644 --- a/express-zod-api/tests/server.spec.ts +++ b/express-zod-api/tests/server.spec.ts @@ -15,15 +15,14 @@ import { } from "./http-mock"; import { z } from "zod"; import { - AppConfig, BuiltinLogger, EndpointsFactory, - ServerConfig, attachRouting, createServer, defaultResultHandler, ez, } from "../src"; +import type { AppConfig, ServerConfig } from "../src"; import express from "express"; describe("Server", () => { diff --git a/express-zod-api/tests/sse.spec.ts b/express-zod-api/tests/sse.spec.ts index 1a7dd3aaec..b966aaec26 100644 --- a/express-zod-api/tests/sse.spec.ts +++ b/express-zod-api/tests/sse.spec.ts @@ -1,6 +1,5 @@ import { z } from "zod"; import { - FlatObject, Middleware, ResultHandler, testEndpoint, @@ -8,8 +7,9 @@ import { EventStreamFactory, EndpointsFactory, } from "../src"; +import type { FlatObject } from "../src"; +import type { Emitter } from "../src/sse"; import { - Emitter, ensureStream, formatEvent, makeEventSchema, diff --git a/express-zod-api/tests/system.spec.ts b/express-zod-api/tests/system.spec.ts index 876f8638e5..93445e65ef 100644 --- a/express-zod-api/tests/system.spec.ts +++ b/express-zod-api/tests/system.spec.ts @@ -5,7 +5,6 @@ import { readFile } from "node:fs/promises"; import { z } from "zod"; import { EndpointsFactory, - Method, createConfig, createServer, defaultResultHandler, @@ -14,6 +13,7 @@ import { Middleware, ez, } from "../src"; +import type { Method } from "../src"; import { givePort } from "../../tools/ports"; import { setTimeout } from "node:timers/promises"; diff --git a/express-zod-api/tests/testing.spec.ts b/express-zod-api/tests/testing.spec.ts index 8c2887d0a7..92ffeafe7d 100644 --- a/express-zod-api/tests/testing.spec.ts +++ b/express-zod-api/tests/testing.spec.ts @@ -1,12 +1,12 @@ import { z } from "zod"; import { - CommonConfig, defaultEndpointsFactory, Middleware, ResultHandler, testEndpoint, testMiddleware, } from "../src"; +import type { CommonConfig } from "../src"; import type { Mock } from "vitest"; describe("Testing", () => { diff --git a/express-zod-api/tests/zts.spec.ts b/express-zod-api/tests/zts.spec.ts index ead5443012..556e7217f4 100644 --- a/express-zod-api/tests/zts.spec.ts +++ b/express-zod-api/tests/zts.spec.ts @@ -3,7 +3,7 @@ import { z } from "zod"; import { ez } from "../src"; import { TypescriptAPI } from "../src/typescript-api"; import { zodToTs } from "../src/zts"; -import { ZTSContext } from "../src/zts-helpers"; +import type { ZTSContext } from "../src/zts-helpers"; describe("zod-to-ts", () => { const api = new TypescriptAPI(ts); diff --git a/issue952-test/tags.ts b/issue952-test/tags.ts index ff08fa0dcd..623cce76f0 100644 --- a/issue952-test/tags.ts +++ b/issue952-test/tags.ts @@ -1,8 +1,5 @@ -import { - defaultEndpointsFactory, - TagOverrides, - Documentation, -} from "express-zod-api"; +import { defaultEndpointsFactory, Documentation } from "express-zod-api"; +import type { TagOverrides } from "express-zod-api"; declare module "express-zod-api" { export interface TagOverrides { diff --git a/tsconfig.json b/tsconfig.json index beeee455de..459782a6b4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,7 @@ "noUncheckedSideEffectImports": true, "resolveJsonModule": true, "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, "types": ["node", "vitest/globals"] } } From bce308499f16998a57e6328a8ffccd6f7b483c8d Mon Sep 17 00:00:00 2001 From: "pullfrog[bot]" <226033991+pullfrog[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 18:20:47 +0000 Subject: [PATCH 03/15] "Remove redundant Routing re-export from routing-walker.ts" --- express-zod-api/src/routing-walker.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/express-zod-api/src/routing-walker.ts b/express-zod-api/src/routing-walker.ts index dc2910b213..125ad38035 100644 --- a/express-zod-api/src/routing-walker.ts +++ b/express-zod-api/src/routing-walker.ts @@ -7,8 +7,6 @@ import { ServeStatic } from "./serve-static"; import type { StaticHandler } from "./serve-static"; import type { CommonConfig } from "./config-type"; -export type { Routing }; - export type OnEndpoint = ( method: M, path: string, From 31e89b3b63acc2e31ffd4d60b20228bd4b62664d Mon Sep 17 00:00:00 2001 From: "pullfrog[bot]" <226033991+pullfrog[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 18:27:23 +0000 Subject: [PATCH 04/15] Import Routing from ./routing instead of ./routing-walker --- express-zod-api/src/documentation.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/express-zod-api/src/documentation.ts b/express-zod-api/src/documentation.ts index 90345cd646..c9ed5a9c63 100644 --- a/express-zod-api/src/documentation.ts +++ b/express-zod-api/src/documentation.ts @@ -28,12 +28,8 @@ import { depictRequest, } from "./documentation-helpers"; import type { IsHeader, BrandHandling } from "./documentation-helpers"; -import { - walkRouting, - withHead, - type Routing, - type OnEndpoint, -} from "./routing-walker"; +import type { Routing } from "./routing"; +import { walkRouting, withHead, type OnEndpoint } from "./routing-walker"; type Component = | "positiveResponse" From 250905df9d59267c9a798bc4c8120e3f97402b77 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:43:14 +0100 Subject: [PATCH 05/15] fix(lint): consolidating imports. --- eslint.config.js | 2 ++ example/index.spec.ts | 3 +- example/middlewares.ts | 3 +- example/routing.ts | 3 +- express-zod-api/src/builtin-logger.ts | 12 ++++--- express-zod-api/src/common-helpers.ts | 15 +++++++-- express-zod-api/src/deep-checks.ts | 4 +-- express-zod-api/src/diagnostics.ts | 3 +- express-zod-api/src/documentation-helpers.ts | 33 ++++++++++--------- express-zod-api/src/documentation.ts | 19 ++++++----- express-zod-api/src/endpoint.ts | 17 +++++++--- express-zod-api/src/endpoints-factory.ts | 24 ++++++++------ express-zod-api/src/integration-base.ts | 6 ++-- express-zod-api/src/integration.ts | 6 ++-- express-zod-api/src/json-schema-helpers.ts | 3 +- express-zod-api/src/middleware.ts | 3 +- express-zod-api/src/result-handler.ts | 13 +++++--- express-zod-api/src/result-helpers.ts | 4 +-- express-zod-api/src/routing-walker.ts | 6 ++-- express-zod-api/src/routing.ts | 6 ++-- express-zod-api/src/schema-walker.ts | 2 +- express-zod-api/src/server-helpers.ts | 4 +-- express-zod-api/src/server.ts | 13 ++++---- express-zod-api/src/testing.ts | 19 +++++++---- express-zod-api/src/zts.ts | 10 +++--- express-zod-api/tests/builtin-logger.spec.ts | 3 +- express-zod-api/tests/common-helpers.spec.ts | 3 +- .../tests/documentation-helpers.spec.ts | 2 +- express-zod-api/tests/documentation.spec.ts | 3 +- express-zod-api/tests/integration.spec.ts | 2 +- express-zod-api/tests/io-schema.spec.ts | 3 +- express-zod-api/tests/logger-helpers.spec.ts | 2 +- express-zod-api/tests/method.spec.ts | 14 ++++---- express-zod-api/tests/result-handler.spec.ts | 3 +- express-zod-api/tests/routing.spec.ts | 2 +- express-zod-api/tests/server-helpers.spec.ts | 3 +- express-zod-api/tests/server.spec.ts | 3 +- express-zod-api/tests/sse.spec.ts | 4 +-- express-zod-api/tests/system.spec.ts | 2 +- express-zod-api/tests/testing.spec.ts | 2 +- issue952-test/tags.ts | 7 ++-- 41 files changed, 160 insertions(+), 131 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 5bf6c30375..f4c0fc24d4 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -210,6 +210,7 @@ export default tsPlugin.config( curly: ["warn", "multi-or-nest", "consistent"], "@typescript-eslint/no-shadow": "warn", "no-restricted-syntax": ["warn", ...importConcerns], + "no-duplicate-imports": "warn", }, }, { @@ -274,6 +275,7 @@ export default tsPlugin.config( files: ["*-test/quick-start.ts", "example/example.client.ts"], rules: { "prettier/prettier": "off", + "no-duplicate-imports": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-empty-object-type": [ "error", diff --git a/example/index.spec.ts b/example/index.spec.ts index 5e209bfd33..41a7d1c62d 100644 --- a/example/index.spec.ts +++ b/example/index.spec.ts @@ -1,11 +1,10 @@ -import assert from "node:assert/strict"; +import assert, { fail } from "node:assert/strict"; import { spawn } from "node:child_process"; import { createReadStream, readFileSync } from "node:fs"; import { Client, Subscription } from "./example.client.ts"; import { givePort } from "../tools/ports.ts"; import { createHash } from "node:crypto"; import { readFile } from "node:fs/promises"; -import { fail } from "node:assert"; describe("Example", async () => { let out = ""; diff --git a/example/middlewares.ts b/example/middlewares.ts index 43e9a5df04..c4b922b764 100644 --- a/example/middlewares.ts +++ b/example/middlewares.ts @@ -1,8 +1,7 @@ import createHttpError from "http-errors"; import assert from "node:assert/strict"; import { z } from "zod"; -import { Middleware } from "express-zod-api"; -import type { Method } from "express-zod-api"; +import { Middleware, type Method } from "express-zod-api"; export const authMiddleware = new Middleware({ security: { diff --git a/example/routing.ts b/example/routing.ts index 39847d5444..0b9f2088cf 100644 --- a/example/routing.ts +++ b/example/routing.ts @@ -1,5 +1,4 @@ -import type { Routing } from "express-zod-api"; -import { ServeStatic } from "express-zod-api"; +import { type Routing, ServeStatic } from "express-zod-api"; import { rawAcceptingEndpoint } from "./endpoints/accept-raw.ts"; import { createUserEndpoint } from "./endpoints/create-user.ts"; import { deleteUserEndpoint } from "./endpoints/delete-user.ts"; diff --git a/express-zod-api/src/builtin-logger.ts b/express-zod-api/src/builtin-logger.ts index 99dd57c2d4..f5b3c5f01b 100644 --- a/express-zod-api/src/builtin-logger.ts +++ b/express-zod-api/src/builtin-logger.ts @@ -1,10 +1,14 @@ import ansis from "ansis"; import { inspect } from "node:util"; import { performance } from "node:perf_hooks"; -import { isProduction } from "./common-helpers"; -import type { FlatObject } from "./common-helpers"; -import type { AbstractLogger, Severity } from "./logger-helpers"; -import { formatDuration, isHidden, styles } from "./logger-helpers"; +import { isProduction, type FlatObject } from "./common-helpers"; +import { + formatDuration, + isHidden, + styles, + type AbstractLogger, + type Severity, +} from "./logger-helpers"; interface Context extends FlatObject { requestId?: string; diff --git a/express-zod-api/src/common-helpers.ts b/express-zod-api/src/common-helpers.ts index b30e078d05..cf05c580b8 100644 --- a/express-zod-api/src/common-helpers.ts +++ b/express-zod-api/src/common-helpers.ts @@ -1,10 +1,19 @@ import type { Request } from "express"; import * as R from "ramda"; import { z } from "zod"; -import type { CommonConfig, InputSource, InputSources } from "./config-type"; +import { + type CommonConfig, + type InputSource, + type InputSources, +} from "./config-type"; import { contentTypes } from "./content-type"; -import type { ClientMethod, SomeMethod, Method, CORSMethod } from "./method"; -import { isMethod } from "./method"; +import { + type ClientMethod, + type SomeMethod, + type Method, + type CORSMethod, + isMethod, +} from "./method"; import type { NormalizedResponse } from "./api-response"; /** @since zod 3.25.61 output type fixed */ diff --git a/express-zod-api/src/deep-checks.ts b/express-zod-api/src/deep-checks.ts index c2e7abfd2c..c1ea06e6ed 100644 --- a/express-zod-api/src/deep-checks.ts +++ b/express-zod-api/src/deep-checks.ts @@ -5,11 +5,11 @@ import { ezDateInBrand } from "./date-in-schema"; import { ezDateOutBrand } from "./date-out-schema"; import { DeepCheckError } from "./errors"; import { ezFormBrand } from "./form-schema"; -import type { IOSchema } from "./io-schema"; import { getBrand } from "@express-zod-api/zod-plugin"; -import type { FirstPartyKind } from "./schema-walker"; +import { type FirstPartyKind } from "./schema-walker"; import { ezUploadBrand } from "./upload-schema"; import { ezRawBrand } from "./raw-schema"; +import type { IOSchema } from "./io-schema"; interface NestedSchemaLookupProps { io: "input" | "output"; diff --git a/express-zod-api/src/diagnostics.ts b/express-zod-api/src/diagnostics.ts index dab3622490..9f16116a83 100644 --- a/express-zod-api/src/diagnostics.ts +++ b/express-zod-api/src/diagnostics.ts @@ -1,7 +1,6 @@ import { z } from "zod"; import { responseVariants } from "./api-response"; -import type { FlatObject } from "./common-helpers"; -import { getRoutePathParams } from "./common-helpers"; +import { type FlatObject, getRoutePathParams } from "./common-helpers"; import { contentTypes } from "./content-type"; import { findJsonIncompatible } from "./deep-checks"; import { AbstractEndpoint } from "./endpoint"; diff --git a/express-zod-api/src/documentation-helpers.ts b/express-zod-api/src/documentation-helpers.ts index 2f4de3adad..2759ff76a0 100644 --- a/express-zod-api/src/documentation-helpers.ts +++ b/express-zod-api/src/documentation-helpers.ts @@ -1,25 +1,26 @@ -import type { - ExamplesObject, - MediaTypeObject, - OAuthFlowObject, - ParameterObject, - ReferenceObject, - RequestBodyObject, - ResponseObject, - SchemaObject, - SchemaObjectType, - SecurityRequirementObject, - SecuritySchemeObject, - TagObject, +import { + type ExamplesObject, + type MediaTypeObject, + type OAuthFlowObject, + type ParameterObject, + type ReferenceObject, + type RequestBodyObject, + type ResponseObject, + type SchemaObject, + type SchemaObjectType, + type SecurityRequirementObject, + type SecuritySchemeObject, + type TagObject, + isReferenceObject, + isSchemaObject, } from "openapi3-ts/oas31"; -import { isReferenceObject, isSchemaObject } from "openapi3-ts/oas31"; import * as R from "ramda"; import { z } from "zod"; import type { NormalizedResponse, ResponseVariant } from "./api-response"; import { ezBufferBrand } from "./buffer-schema"; -import type { FlatObject } from "./common-helpers"; -import type { Tag } from "./common-helpers"; import { + type FlatObject, + type Tag, shouldHaveContent, getRoutePathParams, getTransformedType, diff --git a/express-zod-api/src/documentation.ts b/express-zod-api/src/documentation.ts index c9ed5a9c63..fb663354bd 100644 --- a/express-zod-api/src/documentation.ts +++ b/express-zod-api/src/documentation.ts @@ -1,12 +1,12 @@ -import type { - OperationObject, - ReferenceObject, - ResponsesObject, - SchemaObject, - SecuritySchemeObject, - SecuritySchemeType, +import { + type OperationObject, + type ReferenceObject, + type ResponsesObject, + type SchemaObject, + type SecuritySchemeObject, + type SecuritySchemeType, + OpenApiBuilder, } from "openapi3-ts/oas31"; -import { OpenApiBuilder } from "openapi3-ts/oas31"; import * as R from "ramda"; import { responseVariants } from "./api-response"; import { contentTypes } from "./content-type"; @@ -26,8 +26,9 @@ import { reformatParamsInPath, nonEmpty, depictRequest, + type IsHeader, + type BrandHandling, } from "./documentation-helpers"; -import type { IsHeader, BrandHandling } from "./documentation-helpers"; import type { Routing } from "./routing"; import { walkRouting, withHead, type OnEndpoint } from "./routing-walker"; diff --git a/express-zod-api/src/endpoint.ts b/express-zod-api/src/endpoint.ts index 70c14e7422..e7d5403f79 100644 --- a/express-zod-api/src/endpoint.ts +++ b/express-zod-api/src/endpoint.ts @@ -1,10 +1,10 @@ import type { Request, Response } from "express"; import * as R from "ramda"; import { z, globalRegistry } from "zod"; -import type { NormalizedResponse, ResponseVariant } from "./api-response"; +import { type NormalizedResponse, type ResponseVariant } from "./api-response"; import { findRequestTypeDefiningSchema } from "./deep-checks"; -import type { FlatObject } from "./common-helpers"; import { + type FlatObject, getActualMethod, getInput, ensureError, @@ -22,12 +22,19 @@ import { lastResortHandler } from "./last-resort"; import type { ActualLogger } from "./logger-helpers"; import type { LogicalContainer } from "./logical-container"; import { getBrand } from "@express-zod-api/zod-plugin"; -import type { ClientMethod, CORSMethod, Method, SomeMethod } from "./method"; +import { + type ClientMethod, + type CORSMethod, + type Method, + type SomeMethod, +} from "./method"; import { AbstractMiddleware, ExpressMiddleware } from "./middleware"; import type { ContentType } from "./content-type"; import { ezRawBrand } from "./raw-schema"; -import type { DiscriminatedResult } from "./result-helpers"; -import { pullResponseExamples } from "./result-helpers"; +import { + type DiscriminatedResult, + pullResponseExamples, +} from "./result-helpers"; import type { AbstractResultHandler } from "./result-handler"; import type { Security } from "./security"; import { ezUploadBrand } from "./upload-schema"; diff --git a/express-zod-api/src/endpoints-factory.ts b/express-zod-api/src/endpoints-factory.ts index f0af4a8afc..b825887b7a 100644 --- a/express-zod-api/src/endpoints-factory.ts +++ b/express-zod-api/src/endpoints-factory.ts @@ -1,16 +1,20 @@ import type { Request, Response } from "express"; import { z } from "zod"; -import { emptySchema } from "./common-helpers"; -import type { - EmptyObject, - EmptySchema, - FlatObject, - Tag, +import { + emptySchema, + type EmptyObject, + type EmptySchema, + type FlatObject, + type Tag, } from "./common-helpers"; -import { Endpoint } from "./endpoint"; -import type { Handler } from "./endpoint"; -import { ensureExtension, makeFinalInputSchema } from "./io-schema"; -import type { IOSchema, FinalInputSchema, Extension } from "./io-schema"; +import { Endpoint, type Handler } from "./endpoint"; +import { + ensureExtension, + makeFinalInputSchema, + type IOSchema, + type FinalInputSchema, + type Extension, +} from "./io-schema"; import type { ClientMethod, Method } from "./method"; import { AbstractMiddleware, diff --git a/express-zod-api/src/integration-base.ts b/express-zod-api/src/integration-base.ts index adfa3d4e68..f48359b27f 100644 --- a/express-zod-api/src/integration-base.ts +++ b/express-zod-api/src/integration-base.ts @@ -2,11 +2,9 @@ import * as R from "ramda"; import type ts from "typescript"; import type { ResponseVariant } from "./api-response"; import { contentTypes } from "./content-type"; -import { clientMethods } from "./method"; -import type { ClientMethod } from "./method"; +import { clientMethods, type ClientMethod } from "./method"; import type { makeEventSchema } from "./sse"; -import { propOf, TypescriptAPI } from "./typescript-api"; -import type { Typeable } from "./typescript-api"; +import { propOf, TypescriptAPI, type Typeable } from "./typescript-api"; import type { CursorPaginatedResult, OffsetPaginatedResult, diff --git a/express-zod-api/src/integration.ts b/express-zod-api/src/integration.ts index 19a83d879d..9f58bffe7e 100644 --- a/express-zod-api/src/integration.ts +++ b/express-zod-api/src/integration.ts @@ -1,14 +1,12 @@ import * as R from "ramda"; import type ts from "typescript"; import { z } from "zod"; -import { responseVariants } from "./api-response"; -import type { ResponseVariant } from "./api-response"; +import { responseVariants, type ResponseVariant } from "./api-response"; import { IntegrationBase } from "./integration-base"; import { shouldHaveContent, makeCleanId } from "./common-helpers"; import { loadPeer } from "./peer-helpers"; import type { Routing } from "./routing"; -import { walkRouting, withHead } from "./routing-walker"; -import type { OnEndpoint } from "./routing-walker"; +import { walkRouting, withHead, type OnEndpoint } from "./routing-walker"; import type { HandlingRules } from "./schema-walker"; import { zodToTs } from "./zts"; import type { ZTSContext } from "./zts-helpers"; diff --git a/express-zod-api/src/json-schema-helpers.ts b/express-zod-api/src/json-schema-helpers.ts index 61e0c055e4..17a9c15ba6 100644 --- a/express-zod-api/src/json-schema-helpers.ts +++ b/express-zod-api/src/json-schema-helpers.ts @@ -1,6 +1,5 @@ import * as R from "ramda"; -import { combinations, isObject } from "./common-helpers"; -import type { FlatObject } from "./common-helpers"; +import { combinations, isObject, type FlatObject } from "./common-helpers"; import type { z } from "zod"; const isJsonObjectSchema = ( diff --git a/express-zod-api/src/middleware.ts b/express-zod-api/src/middleware.ts index 3075bd1465..7aa4dcca41 100644 --- a/express-zod-api/src/middleware.ts +++ b/express-zod-api/src/middleware.ts @@ -1,7 +1,6 @@ import type { NextFunction, Request, Response } from "express"; import { z } from "zod"; -import { emptySchema } from "./common-helpers"; -import type { FlatObject } from "./common-helpers"; +import { emptySchema, type FlatObject } from "./common-helpers"; import { InputValidationError } from "./errors"; import type { IOSchema } from "./io-schema"; import type { LogicalContainer } from "./logical-container"; diff --git a/express-zod-api/src/result-handler.ts b/express-zod-api/src/result-handler.ts index 4d5fe52cdd..d753b07d24 100644 --- a/express-zod-api/src/result-handler.ts +++ b/express-zod-api/src/result-handler.ts @@ -1,14 +1,17 @@ import type { Request, Response } from "express"; import { globalRegistry, z } from "zod"; -import { defaultStatusCodes } from "./api-response"; -import type { ApiResponse, NormalizedResponse } from "./api-response"; -import { isObject } from "./common-helpers"; -import type { FlatObject } from "./common-helpers"; +import { + defaultStatusCodes, + type ApiResponse, + type NormalizedResponse, +} from "./api-response"; +import { isObject, type FlatObject } from "./common-helpers"; import { contentTypes } from "./content-type"; import type { IOSchema } from "./io-schema"; import type { ActualLogger } from "./logger-helpers"; -import type { DiscriminatedResult, ResultSchema } from "./result-helpers"; import { + type DiscriminatedResult, + type ResultSchema, ensureHttpError, getPublicErrorMessage, logServerError, diff --git a/express-zod-api/src/result-helpers.ts b/express-zod-api/src/result-helpers.ts index f71d4fb9c7..1fb81d74f9 100644 --- a/express-zod-api/src/result-helpers.ts +++ b/express-zod-api/src/result-helpers.ts @@ -2,13 +2,13 @@ import type { Request } from "express"; import createHttpError, { HttpError, isHttpError } from "http-errors"; import * as R from "ramda"; import { globalRegistry, z } from "zod"; -import type { NormalizedResponse, ResponseVariant } from "./api-response"; +import { type NormalizedResponse, type ResponseVariant } from "./api-response"; import { combinations, getMessageFromError, isProduction, + type FlatObject, } from "./common-helpers"; -import type { FlatObject } from "./common-helpers"; import { InputValidationError, ResultHandlerError } from "./errors"; import type { ActualLogger } from "./logger-helpers"; import type { LazyResult, Result } from "./result-handler"; diff --git a/express-zod-api/src/routing-walker.ts b/express-zod-api/src/routing-walker.ts index 125ad38035..7b81c73cc3 100644 --- a/express-zod-api/src/routing-walker.ts +++ b/express-zod-api/src/routing-walker.ts @@ -1,10 +1,8 @@ import type { Routing } from "./routing"; import { AbstractEndpoint } from "./endpoint"; import { RoutingError } from "./errors"; -import { isMethod } from "./method"; -import type { ClientMethod, Method } from "./method"; -import { ServeStatic } from "./serve-static"; -import type { StaticHandler } from "./serve-static"; +import { isMethod, type ClientMethod, type Method } from "./method"; +import { ServeStatic, type StaticHandler } from "./serve-static"; import type { CommonConfig } from "./config-type"; export type OnEndpoint = ( diff --git a/express-zod-api/src/routing.ts b/express-zod-api/src/routing.ts index 76cec74e92..a52533e4eb 100644 --- a/express-zod-api/src/routing.ts +++ b/express-zod-api/src/routing.ts @@ -5,10 +5,8 @@ import type { CommonConfig } from "./config-type"; import type { ContentType } from "./content-type"; import { Diagnostics } from "./diagnostics"; import type { AbstractEndpoint } from "./endpoint"; -import { isMethod } from "./method"; -import type { CORSMethod } from "./method"; -import { walkRouting } from "./routing-walker"; -import type { OnEndpoint } from "./routing-walker"; +import { isMethod, type CORSMethod } from "./method"; +import { walkRouting, type OnEndpoint } from "./routing-walker"; import { ServeStatic } from "./serve-static"; import type { GetLogger } from "./server-helpers"; import * as R from "ramda"; diff --git a/express-zod-api/src/schema-walker.ts b/express-zod-api/src/schema-walker.ts index be458eb19d..612bd338bb 100644 --- a/express-zod-api/src/schema-walker.ts +++ b/express-zod-api/src/schema-walker.ts @@ -1,4 +1,4 @@ -import type { EmptyObject, FlatObject } from "./common-helpers"; +import { type EmptyObject, type FlatObject } from "./common-helpers"; import { getBrand } from "@express-zod-api/zod-plugin"; import type { z } from "zod"; diff --git a/express-zod-api/src/server-helpers.ts b/express-zod-api/src/server-helpers.ts index 7be3b08127..b12456bf3f 100644 --- a/express-zod-api/src/server-helpers.ts +++ b/express-zod-api/src/server-helpers.ts @@ -1,8 +1,8 @@ import type fileUpload from "express-fileupload"; import { loadPeer } from "./peer-helpers"; -import type { AbstractResultHandler } from "./result-handler"; +import { type AbstractResultHandler } from "./result-handler"; import type { ActualLogger } from "./logger-helpers"; -import type { CommonConfig, ServerConfig } from "./config-type"; +import { type CommonConfig, type ServerConfig } from "./config-type"; import type { ErrorRequestHandler, RequestHandler, Request } from "express"; import createHttpError from "http-errors"; import { lastResortHandler } from "./last-resort"; diff --git a/express-zod-api/src/server.ts b/express-zod-api/src/server.ts index 8ed492a83f..c8f387218f 100644 --- a/express-zod-api/src/server.ts +++ b/express-zod-api/src/server.ts @@ -3,17 +3,16 @@ import type compression from "compression"; import http from "node:http"; import https from "node:https"; import { BuiltinLogger } from "./builtin-logger"; -import type { - AppConfig, - CommonConfig, - HttpConfig, - ServerConfig, +import { + type AppConfig, + type CommonConfig, + type HttpConfig, + type ServerConfig, } from "./config-type"; import { isLoggerInstance } from "./logger-helpers"; import { loadPeer } from "./peer-helpers"; import { defaultResultHandler } from "./result-handler"; -import { initRouting } from "./routing"; -import type { Parsers, Routing } from "./routing"; +import { initRouting, type Parsers, type Routing } from "./routing"; import { createLoggingMiddleware, createNotFoundHandler, diff --git a/express-zod-api/src/testing.ts b/express-zod-api/src/testing.ts index 4ce8a61b7e..b6ce76ab5c 100644 --- a/express-zod-api/src/testing.ts +++ b/express-zod-api/src/testing.ts @@ -1,13 +1,20 @@ import type { Request, Response } from "express"; -import { ensureError, getInput } from "./common-helpers"; -import type { FlatObject } from "./common-helpers"; +import { ensureError, getInput, type FlatObject } from "./common-helpers"; import type { CommonConfig } from "./config-type"; import type { AbstractEndpoint } from "./endpoint"; -import { isSeverity } from "./logger-helpers"; -import type { AbstractLogger, ActualLogger, Severity } from "./logger-helpers"; +import { + isSeverity, + type AbstractLogger, + type ActualLogger, + type Severity, +} from "./logger-helpers"; import { contentTypes } from "./content-type"; -import { createRequest, createResponse } from "node-mocks-http"; -import type { RequestOptions, ResponseOptions } from "node-mocks-http"; +import { + createRequest, + createResponse, + type RequestOptions, + type ResponseOptions, +} from "node-mocks-http"; import { AbstractMiddleware } from "./middleware"; import { defaultResultHandler } from "./result-handler"; diff --git a/express-zod-api/src/zts.ts b/express-zod-api/src/zts.ts index 659c4bd105..99de97fcd6 100644 --- a/express-zod-api/src/zts.ts +++ b/express-zod-api/src/zts.ts @@ -7,10 +7,12 @@ import { ezDateInBrand } from "./date-in-schema"; import { ezDateOutBrand } from "./date-out-schema"; import { hasCycle } from "./deep-checks"; import type { ProprietaryBrand } from "./proprietary-schemas"; -import { ezRawBrand } from "./raw-schema"; -import type { RawSchema } from "./raw-schema"; -import { walkSchema } from "./schema-walker"; -import type { FirstPartyKind, HandlingRules } from "./schema-walker"; +import { ezRawBrand, type RawSchema } from "./raw-schema"; +import { + walkSchema, + type FirstPartyKind, + type HandlingRules, +} from "./schema-walker"; import type { TypescriptAPI } from "./typescript-api"; import type { Producer, ZTSContext } from "./zts-helpers"; diff --git a/express-zod-api/tests/builtin-logger.spec.ts b/express-zod-api/tests/builtin-logger.spec.ts index 820d0ca8ab..02abaa49cf 100644 --- a/express-zod-api/tests/builtin-logger.spec.ts +++ b/express-zod-api/tests/builtin-logger.spec.ts @@ -1,6 +1,5 @@ import { performance } from "node:perf_hooks"; -import { BuiltinLogger } from "../src/builtin-logger"; -import type { BuiltinLoggerConfig } from "../src/builtin-logger"; +import { BuiltinLogger, type BuiltinLoggerConfig } from "../src/builtin-logger"; describe("BuiltinLogger", () => { beforeEach(() => { diff --git a/express-zod-api/tests/common-helpers.spec.ts b/express-zod-api/tests/common-helpers.spec.ts index 71a7ba598f..98b401b085 100644 --- a/express-zod-api/tests/common-helpers.spec.ts +++ b/express-zod-api/tests/common-helpers.spec.ts @@ -10,8 +10,9 @@ import { shouldHaveContent, getInputSources, emptySchema, + type EmptySchema, + type EmptyObject, } from "../src/common-helpers"; -import type { EmptySchema, EmptyObject } from "../src/common-helpers"; import { z } from "zod"; import { makeRequestMock } from "../src/testing"; import { methods } from "../src/method"; diff --git a/express-zod-api/tests/documentation-helpers.spec.ts b/express-zod-api/tests/documentation-helpers.spec.ts index 873ce09d35..208bbd8dd5 100644 --- a/express-zod-api/tests/documentation-helpers.spec.ts +++ b/express-zod-api/tests/documentation-helpers.spec.ts @@ -2,8 +2,8 @@ import type { SchemaObject } from "openapi3-ts/oas31"; import * as R from "ramda"; import { z } from "zod"; import { ez } from "../src"; -import type { OpenAPIContext } from "../src/documentation-helpers"; import { + type OpenAPIContext, depictRequestParams, depictSecurity, depictSecurityRefs, diff --git a/express-zod-api/tests/documentation.spec.ts b/express-zod-api/tests/documentation.spec.ts index 6b56c9645e..1e8b8a62d2 100644 --- a/express-zod-api/tests/documentation.spec.ts +++ b/express-zod-api/tests/documentation.spec.ts @@ -9,8 +9,9 @@ import { defaultEndpointsFactory, ez, ResultHandler, + type Depicter, + type Method, } from "../src"; -import type { Depicter, Method } from "../src"; import { contentTypes } from "../src/content-type"; import { z } from "zod"; import { givePort } from "../../tools/ports"; diff --git a/express-zod-api/tests/integration.spec.ts b/express-zod-api/tests/integration.spec.ts index 55ebfb5957..4ca6a2221a 100644 --- a/express-zod-api/tests/integration.spec.ts +++ b/express-zod-api/tests/integration.spec.ts @@ -5,8 +5,8 @@ import { Integration, defaultEndpointsFactory, ResultHandler, + type Producer, } from "../src"; -import type { Producer } from "../src"; describe("Integration", () => { const recursive1: z.ZodType = z.lazy(() => diff --git a/express-zod-api/tests/io-schema.spec.ts b/express-zod-api/tests/io-schema.spec.ts index 99d903cb90..7d17ea95f2 100644 --- a/express-zod-api/tests/io-schema.spec.ts +++ b/express-zod-api/tests/io-schema.spec.ts @@ -1,6 +1,5 @@ import { z } from "zod"; -import { ez } from "../src"; -import type { IOSchema } from "../src"; +import { ez, type IOSchema } from "../src"; import { makeFinalInputSchema, ensureExtension } from "../src/io-schema"; describe("I/O Schema and related helpers", () => { diff --git a/express-zod-api/tests/logger-helpers.spec.ts b/express-zod-api/tests/logger-helpers.spec.ts index 3e7c13dbdb..2ae7faadb3 100644 --- a/express-zod-api/tests/logger-helpers.spec.ts +++ b/express-zod-api/tests/logger-helpers.spec.ts @@ -6,8 +6,8 @@ import { isHidden, makeNumberFormat, formatDuration, + type AbstractLogger, } from "../src/logger-helpers"; -import type { AbstractLogger } from "../src/logger-helpers"; describe("Logger helpers", () => { describe("isSeverity()", () => { diff --git a/express-zod-api/tests/method.spec.ts b/express-zod-api/tests/method.spec.ts index b8d4139f64..6ed97cbd57 100644 --- a/express-zod-api/tests/method.spec.ts +++ b/express-zod-api/tests/method.spec.ts @@ -1,10 +1,12 @@ import * as R from "ramda"; -import { isMethod, methods, clientMethods } from "../src/method"; -import type { - Method, - ClientMethod, - SomeMethod, - CORSMethod, +import { + isMethod, + methods, + clientMethods, + type Method, + type ClientMethod, + type SomeMethod, + type CORSMethod, } from "../src/method"; describe("Method", () => { diff --git a/express-zod-api/tests/result-handler.spec.ts b/express-zod-api/tests/result-handler.spec.ts index 01335162c9..f1c3e998fe 100644 --- a/express-zod-api/tests/result-handler.spec.ts +++ b/express-zod-api/tests/result-handler.spec.ts @@ -8,8 +8,7 @@ import { ResultHandler, } from "../src"; import { ResultHandlerError } from "../src/errors"; -import { AbstractResultHandler } from "../src/result-handler"; -import type { Result } from "../src/result-handler"; +import { AbstractResultHandler, type Result } from "../src/result-handler"; import { makeLoggerMock, makeRequestMock, diff --git a/express-zod-api/tests/routing.spec.ts b/express-zod-api/tests/routing.spec.ts index 303381bdf7..691be65e35 100644 --- a/express-zod-api/tests/routing.spec.ts +++ b/express-zod-api/tests/routing.spec.ts @@ -10,8 +10,8 @@ import { ServeStatic, defaultResultHandler, ez, + type Routing, } from "../src"; -import type { Routing } from "../src"; import { makeLoggerMock, makeRequestMock, diff --git a/express-zod-api/tests/server-helpers.spec.ts b/express-zod-api/tests/server-helpers.spec.ts index f36550dc19..3bf7a55a27 100644 --- a/express-zod-api/tests/server-helpers.spec.ts +++ b/express-zod-api/tests/server-helpers.spec.ts @@ -13,8 +13,7 @@ import { installTerminationListener, localsID, } from "../src/server-helpers"; -import { defaultResultHandler, ResultHandler } from "../src"; -import type { CommonConfig } from "../src"; +import { defaultResultHandler, ResultHandler, type CommonConfig } from "../src"; import type { Request } from "express"; import { makeLoggerMock, diff --git a/express-zod-api/tests/server.spec.ts b/express-zod-api/tests/server.spec.ts index 16ecda1f9d..07b80bd0aa 100644 --- a/express-zod-api/tests/server.spec.ts +++ b/express-zod-api/tests/server.spec.ts @@ -21,8 +21,9 @@ import { createServer, defaultResultHandler, ez, + type AppConfig, + type ServerConfig, } from "../src"; -import type { AppConfig, ServerConfig } from "../src"; import express from "express"; describe("Server", () => { diff --git a/express-zod-api/tests/sse.spec.ts b/express-zod-api/tests/sse.spec.ts index b966aaec26..3fd64c5412 100644 --- a/express-zod-api/tests/sse.spec.ts +++ b/express-zod-api/tests/sse.spec.ts @@ -6,10 +6,10 @@ import { testMiddleware, EventStreamFactory, EndpointsFactory, + type FlatObject, } from "../src"; -import type { FlatObject } from "../src"; -import type { Emitter } from "../src/sse"; import { + type Emitter, ensureStream, formatEvent, makeEventSchema, diff --git a/express-zod-api/tests/system.spec.ts b/express-zod-api/tests/system.spec.ts index 93445e65ef..0c0c44182e 100644 --- a/express-zod-api/tests/system.spec.ts +++ b/express-zod-api/tests/system.spec.ts @@ -12,8 +12,8 @@ import { BuiltinLogger, Middleware, ez, + type Method, } from "../src"; -import type { Method } from "../src"; import { givePort } from "../../tools/ports"; import { setTimeout } from "node:timers/promises"; diff --git a/express-zod-api/tests/testing.spec.ts b/express-zod-api/tests/testing.spec.ts index 92ffeafe7d..89e184c73d 100644 --- a/express-zod-api/tests/testing.spec.ts +++ b/express-zod-api/tests/testing.spec.ts @@ -5,8 +5,8 @@ import { ResultHandler, testEndpoint, testMiddleware, + type CommonConfig, } from "../src"; -import type { CommonConfig } from "../src"; import type { Mock } from "vitest"; describe("Testing", () => { diff --git a/issue952-test/tags.ts b/issue952-test/tags.ts index 623cce76f0..5db4034954 100644 --- a/issue952-test/tags.ts +++ b/issue952-test/tags.ts @@ -1,5 +1,8 @@ -import { defaultEndpointsFactory, Documentation } from "express-zod-api"; -import type { TagOverrides } from "express-zod-api"; +import { + defaultEndpointsFactory, + Documentation, + type TagOverrides, +} from "express-zod-api"; declare module "express-zod-api" { export interface TagOverrides { From 037afe86059909ca0a93314363a22e43ab8eba64 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:47:53 +0100 Subject: [PATCH 06/15] fix(import): type only in common helpers. --- express-zod-api/src/common-helpers.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/express-zod-api/src/common-helpers.ts b/express-zod-api/src/common-helpers.ts index cf05c580b8..e0f1c9dec4 100644 --- a/express-zod-api/src/common-helpers.ts +++ b/express-zod-api/src/common-helpers.ts @@ -1,11 +1,7 @@ import type { Request } from "express"; import * as R from "ramda"; import { z } from "zod"; -import { - type CommonConfig, - type InputSource, - type InputSources, -} from "./config-type"; +import type { CommonConfig, InputSource, InputSources } from "./config-type"; import { contentTypes } from "./content-type"; import { type ClientMethod, From 85c076139fbcf950c6ed6a3217bb0a0a84c08c7c Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:48:40 +0100 Subject: [PATCH 07/15] fix(import): reduce diff in deep checks. --- express-zod-api/src/deep-checks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/express-zod-api/src/deep-checks.ts b/express-zod-api/src/deep-checks.ts index c1ea06e6ed..21dba433de 100644 --- a/express-zod-api/src/deep-checks.ts +++ b/express-zod-api/src/deep-checks.ts @@ -5,11 +5,11 @@ import { ezDateInBrand } from "./date-in-schema"; import { ezDateOutBrand } from "./date-out-schema"; import { DeepCheckError } from "./errors"; import { ezFormBrand } from "./form-schema"; +import type { IOSchema } from "./io-schema"; import { getBrand } from "@express-zod-api/zod-plugin"; import { type FirstPartyKind } from "./schema-walker"; import { ezUploadBrand } from "./upload-schema"; import { ezRawBrand } from "./raw-schema"; -import type { IOSchema } from "./io-schema"; interface NestedSchemaLookupProps { io: "input" | "output"; From e8eb1edf1afb58dc6ae667f5ac41e8739c4746d9 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:49:11 +0100 Subject: [PATCH 08/15] fix(import): single type only in deep checks. --- express-zod-api/src/deep-checks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/express-zod-api/src/deep-checks.ts b/express-zod-api/src/deep-checks.ts index 21dba433de..c2e7abfd2c 100644 --- a/express-zod-api/src/deep-checks.ts +++ b/express-zod-api/src/deep-checks.ts @@ -7,7 +7,7 @@ import { DeepCheckError } from "./errors"; import { ezFormBrand } from "./form-schema"; import type { IOSchema } from "./io-schema"; import { getBrand } from "@express-zod-api/zod-plugin"; -import { type FirstPartyKind } from "./schema-walker"; +import type { FirstPartyKind } from "./schema-walker"; import { ezUploadBrand } from "./upload-schema"; import { ezRawBrand } from "./raw-schema"; From bcb8ee5356433c7ab952fd99b3639431fe4a2f42 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:50:53 +0100 Subject: [PATCH 09/15] fix(import): reduce diff in doc helpers. --- express-zod-api/src/documentation-helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/express-zod-api/src/documentation-helpers.ts b/express-zod-api/src/documentation-helpers.ts index 2759ff76a0..5981ba6974 100644 --- a/express-zod-api/src/documentation-helpers.ts +++ b/express-zod-api/src/documentation-helpers.ts @@ -39,9 +39,9 @@ import type { IOSchema } from "./io-schema"; import { flattenIO } from "./json-schema-helpers"; import type { Alternatives } from "./logical-container"; import { getBrand } from "@express-zod-api/zod-plugin"; -import { ezRawBrand } from "./raw-schema"; import type { ClientMethod } from "./method"; import type { ProprietaryBrand } from "./proprietary-schemas"; +import { ezRawBrand } from "./raw-schema"; import type { FirstPartyKind } from "./schema-walker"; import type { Security } from "./security"; import { ezUploadBrand } from "./upload-schema"; From 6c5b8af4202aa1fa525b716a8424ac3a2950f25b Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:52:44 +0100 Subject: [PATCH 10/15] fix(import): endpoint. --- express-zod-api/src/endpoint.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/express-zod-api/src/endpoint.ts b/express-zod-api/src/endpoint.ts index e7d5403f79..a8c9ed744b 100644 --- a/express-zod-api/src/endpoint.ts +++ b/express-zod-api/src/endpoint.ts @@ -1,7 +1,7 @@ import type { Request, Response } from "express"; import * as R from "ramda"; import { z, globalRegistry } from "zod"; -import { type NormalizedResponse, type ResponseVariant } from "./api-response"; +import type { NormalizedResponse, ResponseVariant } from "./api-response"; import { findRequestTypeDefiningSchema } from "./deep-checks"; import { type FlatObject, @@ -22,12 +22,7 @@ import { lastResortHandler } from "./last-resort"; import type { ActualLogger } from "./logger-helpers"; import type { LogicalContainer } from "./logical-container"; import { getBrand } from "@express-zod-api/zod-plugin"; -import { - type ClientMethod, - type CORSMethod, - type Method, - type SomeMethod, -} from "./method"; +import type { ClientMethod, CORSMethod, Method, SomeMethod } from "./method"; import { AbstractMiddleware, ExpressMiddleware } from "./middleware"; import type { ContentType } from "./content-type"; import { ezRawBrand } from "./raw-schema"; From 888721fca7145e7591af803d130a46a5a1fbafa0 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:54:34 +0100 Subject: [PATCH 11/15] fix(import): result helpers. --- express-zod-api/src/result-helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/express-zod-api/src/result-helpers.ts b/express-zod-api/src/result-helpers.ts index 1fb81d74f9..6b50c40178 100644 --- a/express-zod-api/src/result-helpers.ts +++ b/express-zod-api/src/result-helpers.ts @@ -2,7 +2,7 @@ import type { Request } from "express"; import createHttpError, { HttpError, isHttpError } from "http-errors"; import * as R from "ramda"; import { globalRegistry, z } from "zod"; -import { type NormalizedResponse, type ResponseVariant } from "./api-response"; +import type { NormalizedResponse, ResponseVariant } from "./api-response"; import { combinations, getMessageFromError, From 4a44a9706f06f2b962222c3b763a522ab91b941d Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:55:24 +0100 Subject: [PATCH 12/15] fix(import): routing walker. --- express-zod-api/src/routing-walker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/express-zod-api/src/routing-walker.ts b/express-zod-api/src/routing-walker.ts index 7b81c73cc3..59a1269fdf 100644 --- a/express-zod-api/src/routing-walker.ts +++ b/express-zod-api/src/routing-walker.ts @@ -1,7 +1,7 @@ -import type { Routing } from "./routing"; import { AbstractEndpoint } from "./endpoint"; import { RoutingError } from "./errors"; import { isMethod, type ClientMethod, type Method } from "./method"; +import type { Routing } from "./routing"; import { ServeStatic, type StaticHandler } from "./serve-static"; import type { CommonConfig } from "./config-type"; From bd9f8b66f6d52c063db1107a7687d2464f0d9515 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:56:12 +0100 Subject: [PATCH 13/15] fix(import): schema walker. --- express-zod-api/src/schema-walker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/express-zod-api/src/schema-walker.ts b/express-zod-api/src/schema-walker.ts index 612bd338bb..be458eb19d 100644 --- a/express-zod-api/src/schema-walker.ts +++ b/express-zod-api/src/schema-walker.ts @@ -1,4 +1,4 @@ -import { type EmptyObject, type FlatObject } from "./common-helpers"; +import type { EmptyObject, FlatObject } from "./common-helpers"; import { getBrand } from "@express-zod-api/zod-plugin"; import type { z } from "zod"; From 1261ea41a43382242dd8cf08b3fddd82b068cc60 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:57:30 +0100 Subject: [PATCH 14/15] fix(import): server helpers. --- express-zod-api/src/server-helpers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/express-zod-api/src/server-helpers.ts b/express-zod-api/src/server-helpers.ts index b12456bf3f..7be3b08127 100644 --- a/express-zod-api/src/server-helpers.ts +++ b/express-zod-api/src/server-helpers.ts @@ -1,8 +1,8 @@ import type fileUpload from "express-fileupload"; import { loadPeer } from "./peer-helpers"; -import { type AbstractResultHandler } from "./result-handler"; +import type { AbstractResultHandler } from "./result-handler"; import type { ActualLogger } from "./logger-helpers"; -import { type CommonConfig, type ServerConfig } from "./config-type"; +import type { CommonConfig, ServerConfig } from "./config-type"; import type { ErrorRequestHandler, RequestHandler, Request } from "express"; import createHttpError from "http-errors"; import { lastResortHandler } from "./last-resort"; From 3121533ef0ac1dac14232798439b04b140dcdce6 Mon Sep 17 00:00:00 2001 From: Robin Tail Date: Wed, 25 Mar 2026 21:58:25 +0100 Subject: [PATCH 15/15] fix(import): server. --- express-zod-api/src/server.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/express-zod-api/src/server.ts b/express-zod-api/src/server.ts index c8f387218f..c74ba07bfd 100644 --- a/express-zod-api/src/server.ts +++ b/express-zod-api/src/server.ts @@ -3,11 +3,11 @@ import type compression from "compression"; import http from "node:http"; import https from "node:https"; import { BuiltinLogger } from "./builtin-logger"; -import { - type AppConfig, - type CommonConfig, - type HttpConfig, - type ServerConfig, +import type { + AppConfig, + CommonConfig, + HttpConfig, + ServerConfig, } from "./config-type"; import { isLoggerInstance } from "./logger-helpers"; import { loadPeer } from "./peer-helpers";