From 588b44863824b2f95c5a2295bf6e447fba5469aa Mon Sep 17 00:00:00 2001 From: Max Holman Date: Wed, 2 Sep 2026 15:13:38 +0800 Subject: [PATCH 1/2] feat!: generate a validator-agnostic hono.ts using Standard Schema hono-valibot.ts becomes hono.ts: the generated middleware validates through schema['~standard'].validate() and reports failures with PublicValidationError from @block65/rest-client v14, so the Hono integration no longer imports valibot and the schema engine is swappable behind a single import. BREAKING CHANGE: the generated file is now hono.ts (was hono-valibot.ts) and requires @block65/rest-client >= 14, which replaces PublicValibotHonoError with PublicValidationError. Co-Authored-By: Claude Fable 5 --- .../__snapshots__/nullables.test.ts.snap | 17 +- __tests__/fixtures/docker/hono-valibot.ts | 1140 ----------------- __tests__/fixtures/docker/hono.ts | 840 ++++++++++++ __tests__/fixtures/openai/hono-valibot.ts | 899 ------------- __tests__/fixtures/openai/hono.ts | 671 ++++++++++ .../petstore/PublicValibotHonoError.ts | 19 - __tests__/fixtures/petstore/hono-valibot.ts | 61 - __tests__/fixtures/petstore/hono.ts | 53 + __tests__/fixtures/test1/hono-valibot.ts | 208 --- __tests__/fixtures/test1/hono.ts | 162 +++ __tests__/nullables.test.ts | 2 +- lib/{hono-valibot.ts => hono.ts} | 55 +- lib/process-document.ts | 22 +- package.json | 5 +- pnpm-lock.yaml | 16 +- 15 files changed, 1786 insertions(+), 2384 deletions(-) delete mode 100644 __tests__/fixtures/docker/hono-valibot.ts create mode 100644 __tests__/fixtures/docker/hono.ts delete mode 100644 __tests__/fixtures/openai/hono-valibot.ts create mode 100644 __tests__/fixtures/openai/hono.ts delete mode 100644 __tests__/fixtures/petstore/PublicValibotHonoError.ts delete mode 100644 __tests__/fixtures/petstore/hono-valibot.ts create mode 100644 __tests__/fixtures/petstore/hono.ts delete mode 100644 __tests__/fixtures/test1/hono-valibot.ts create mode 100644 __tests__/fixtures/test1/hono.ts rename lib/{hono-valibot.ts => hono.ts} (59%) diff --git a/__tests__/__snapshots__/nullables.test.ts.snap b/__tests__/__snapshots__/nullables.test.ts.snap index c82eb19..47ee566 100644 --- a/__tests__/__snapshots__/nullables.test.ts.snap +++ b/__tests__/__snapshots__/nullables.test.ts.snap @@ -106,23 +106,22 @@ export const uploadDataCommandHeaderSchema = v.object({ exports[`header parameters 5`] = ` "import { validator } from "hono/validator"; -import * as v from "valibot"; -import { PublicValibotHonoError } from "@block65/rest-client"; +import type { StandardSchemaV1 } from "@standard-schema/spec"; +import { PublicValidationError } from "@block65/rest-client"; import { uploadDataCommandParamsSchema } from "./valibot.js"; -function toPublicValibotHonoError(err: unknown): never { +async function standardParse(schema: TSchema, value: unknown): Promise> { - if (err instanceof v.ValiError) { - throw PublicValibotHonoError.from(err); + const result = await schema["~standard"].validate(value); + if (result.issues) { + throw PublicValidationError.fromIssues(result.issues); } - throw err; + return result.value; } export const uploadData = [ - validator("param", (value) => { - return v.parseAsync(uploadDataCommandParamsSchema, value).catch(toPublicValibotHonoError); - }), + validator("param", (value) => standardParse(uploadDataCommandParamsSchema, value)), ] as const; " `; diff --git a/__tests__/fixtures/docker/hono-valibot.ts b/__tests__/fixtures/docker/hono-valibot.ts deleted file mode 100644 index 50f46c6..0000000 --- a/__tests__/fixtures/docker/hono-valibot.ts +++ /dev/null @@ -1,1140 +0,0 @@ -import { PublicValibotHonoError } from "@block65/rest-client"; -/** - * This file was auto generated by @block65/openapi-codegen - * - * WARN: Do not edit directly. - * - * Generated on 2026-06-09T09:18:39.851Z - * - */ -import { validator } from "hono/validator"; -import * as v from "valibot"; -import { - buildPruneCommandQuerySchema, - configCreateCommandBodySchema, - configDeleteCommandParamsSchema, - configInspectCommandParamsSchema, - configListCommandQuerySchema, - configUpdateCommandBodySchema, - configUpdateCommandParamsSchema, - configUpdateCommandQuerySchema, - containerArchiveCommandParamsSchema, - containerArchiveCommandQuerySchema, - containerArchiveInfoCommandParamsSchema, - containerArchiveInfoCommandQuerySchema, - containerAttachCommandParamsSchema, - containerAttachCommandQuerySchema, - containerAttachWebsocketCommandParamsSchema, - containerAttachWebsocketCommandQuerySchema, - containerChangesCommandParamsSchema, - containerCreateCommandBodySchema, - containerCreateCommandQuerySchema, - containerDeleteCommandParamsSchema, - containerDeleteCommandQuerySchema, - containerExecCommandBodySchema, - containerExecCommandParamsSchema, - containerExportCommandParamsSchema, - containerInspectCommandParamsSchema, - containerInspectCommandQuerySchema, - containerKillCommandParamsSchema, - containerKillCommandQuerySchema, - containerListCommandQuerySchema, - containerLogsCommandParamsSchema, - containerLogsCommandQuerySchema, - containerPauseCommandParamsSchema, - containerPruneCommandQuerySchema, - containerRenameCommandParamsSchema, - containerRenameCommandQuerySchema, - containerResizeCommandParamsSchema, - containerResizeCommandQuerySchema, - containerRestartCommandParamsSchema, - containerRestartCommandQuerySchema, - containerStartCommandParamsSchema, - containerStartCommandQuerySchema, - containerStatsCommandParamsSchema, - containerStatsCommandQuerySchema, - containerStopCommandParamsSchema, - containerStopCommandQuerySchema, - containerTopCommandParamsSchema, - containerTopCommandQuerySchema, - containerUnpauseCommandParamsSchema, - containerUpdateCommandBodySchema, - containerUpdateCommandParamsSchema, - containerWaitCommandParamsSchema, - containerWaitCommandQuerySchema, - distributionInspectCommandParamsSchema, - execInspectCommandParamsSchema, - execResizeCommandParamsSchema, - execResizeCommandQuerySchema, - execStartCommandBodySchema, - execStartCommandParamsSchema, - getPluginPrivilegesCommandQuerySchema, - imageBuildCommandQuerySchema, - imageCommitCommandBodySchema, - imageCommitCommandQuerySchema, - imageCreateCommandQuerySchema, - imageDeleteCommandParamsSchema, - imageDeleteCommandQuerySchema, - imageGetAllCommandQuerySchema, - imageGetCommandParamsSchema, - imageHistoryCommandParamsSchema, - imageInspectCommandParamsSchema, - imageListCommandQuerySchema, - imageLoadCommandQuerySchema, - imagePruneCommandQuerySchema, - imagePushCommandParamsSchema, - imagePushCommandQuerySchema, - imageSearchCommandQuerySchema, - imageTagCommandParamsSchema, - imageTagCommandQuerySchema, - networkConnectCommandBodySchema, - networkConnectCommandParamsSchema, - networkCreateCommandBodySchema, - networkDeleteCommandParamsSchema, - networkDisconnectCommandBodySchema, - networkDisconnectCommandParamsSchema, - networkInspectCommandParamsSchema, - networkInspectCommandQuerySchema, - networkListCommandQuerySchema, - networkPruneCommandQuerySchema, - nodeDeleteCommandParamsSchema, - nodeDeleteCommandQuerySchema, - nodeInspectCommandParamsSchema, - nodeListCommandQuerySchema, - nodeUpdateCommandBodySchema, - nodeUpdateCommandParamsSchema, - nodeUpdateCommandQuerySchema, - pluginCreateCommandQuerySchema, - pluginDeleteCommandParamsSchema, - pluginDeleteCommandQuerySchema, - pluginDisableCommandParamsSchema, - pluginDisableCommandQuerySchema, - pluginEnableCommandParamsSchema, - pluginEnableCommandQuerySchema, - pluginInspectCommandParamsSchema, - pluginListCommandQuerySchema, - pluginPullCommandBodySchema, - pluginPullCommandQuerySchema, - pluginPushCommandParamsSchema, - pluginSetCommandBodySchema, - pluginSetCommandParamsSchema, - pluginUpgradeCommandBodySchema, - pluginUpgradeCommandParamsSchema, - pluginUpgradeCommandQuerySchema, - putContainerArchiveCommandParamsSchema, - putContainerArchiveCommandQuerySchema, - secretCreateCommandBodySchema, - secretDeleteCommandParamsSchema, - secretInspectCommandParamsSchema, - secretListCommandQuerySchema, - secretUpdateCommandBodySchema, - secretUpdateCommandParamsSchema, - secretUpdateCommandQuerySchema, - serviceCreateCommandBodySchema, - serviceDeleteCommandParamsSchema, - serviceInspectCommandParamsSchema, - serviceInspectCommandQuerySchema, - serviceListCommandQuerySchema, - serviceLogsCommandParamsSchema, - serviceLogsCommandQuerySchema, - serviceUpdateCommandBodySchema, - serviceUpdateCommandParamsSchema, - serviceUpdateCommandQuerySchema, - swarmInitCommandBodySchema, - swarmJoinCommandBodySchema, - swarmLeaveCommandQuerySchema, - swarmUnlockCommandBodySchema, - swarmUpdateCommandBodySchema, - swarmUpdateCommandQuerySchema, - systemAuthCommandBodySchema, - systemDataUsageCommandQuerySchema, - systemEventsCommandQuerySchema, - taskInspectCommandParamsSchema, - taskListCommandQuerySchema, - taskLogsCommandParamsSchema, - taskLogsCommandQuerySchema, - volumeCreateCommandBodySchema, - volumeDeleteCommandParamsSchema, - volumeDeleteCommandQuerySchema, - volumeInspectCommandParamsSchema, - volumeListCommandQuerySchema, - volumePruneCommandQuerySchema, - volumeUpdateCommandBodySchema, - volumeUpdateCommandParamsSchema, - volumeUpdateCommandQuerySchema, -} from "./valibot.js"; - -function toPublicValibotHonoError(err: unknown): never { - if (err instanceof v.ValiError) { - throw PublicValibotHonoError.from(err); - } - throw err; -} - -export const containerList = [ - validator("query", (value) => { - return v - .parseAsync(containerListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerCreate = [ - validator("json", (value) => { - return v - .parseAsync(containerCreateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerCreateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerInspect = [ - validator("param", (value) => { - return v - .parseAsync(containerInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerInspectCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerTop = [ - validator("param", (value) => { - return v - .parseAsync(containerTopCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerTopCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerLogs = [ - validator("param", (value) => { - return v - .parseAsync(containerLogsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerLogsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerChanges = [ - validator("param", (value) => { - return v - .parseAsync(containerChangesCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerExport = [ - validator("param", (value) => { - return v - .parseAsync(containerExportCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerStats = [ - validator("param", (value) => { - return v - .parseAsync(containerStatsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerStatsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerResize = [ - validator("param", (value) => { - return v - .parseAsync(containerResizeCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerResizeCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerStart = [ - validator("param", (value) => { - return v - .parseAsync(containerStartCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerStartCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerStop = [ - validator("param", (value) => { - return v - .parseAsync(containerStopCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerStopCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerRestart = [ - validator("param", (value) => { - return v - .parseAsync(containerRestartCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerRestartCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerKill = [ - validator("param", (value) => { - return v - .parseAsync(containerKillCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerKillCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerUpdate = [ - validator("json", (value) => { - return v - .parseAsync(containerUpdateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(containerUpdateCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerRename = [ - validator("param", (value) => { - return v - .parseAsync(containerRenameCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerRenameCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerPause = [ - validator("param", (value) => { - return v - .parseAsync(containerPauseCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerUnpause = [ - validator("param", (value) => { - return v - .parseAsync(containerUnpauseCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerAttach = [ - validator("param", (value) => { - return v - .parseAsync(containerAttachCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerAttachCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerAttachWebsocket = [ - validator("param", (value) => { - return v - .parseAsync(containerAttachWebsocketCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerAttachWebsocketCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerWait = [ - validator("param", (value) => { - return v - .parseAsync(containerWaitCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerWaitCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerDelete = [ - validator("param", (value) => { - return v - .parseAsync(containerDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerDeleteCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerArchive = [ - validator("param", (value) => { - return v - .parseAsync(containerArchiveCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerArchiveCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const putContainerArchive = [ - validator("param", (value) => { - return v - .parseAsync(putContainerArchiveCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(putContainerArchiveCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerArchiveInfo = [ - validator("param", (value) => { - return v - .parseAsync(containerArchiveInfoCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(containerArchiveInfoCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerPrune = [ - validator("query", (value) => { - return v - .parseAsync(containerPruneCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageList = [ - validator("query", (value) => { - return v - .parseAsync(imageListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageBuild = [ - validator("query", (value) => { - return v - .parseAsync(imageBuildCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const buildPrune = [ - validator("query", (value) => { - return v - .parseAsync(buildPruneCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageCreate = [ - validator("query", (value) => { - return v - .parseAsync(imageCreateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageInspect = [ - validator("param", (value) => { - return v - .parseAsync(imageInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageHistory = [ - validator("param", (value) => { - return v - .parseAsync(imageHistoryCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imagePush = [ - validator("param", (value) => { - return v - .parseAsync(imagePushCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(imagePushCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageTag = [ - validator("param", (value) => { - return v - .parseAsync(imageTagCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(imageTagCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageDelete = [ - validator("param", (value) => { - return v - .parseAsync(imageDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(imageDeleteCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageSearch = [ - validator("query", (value) => { - return v - .parseAsync(imageSearchCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imagePrune = [ - validator("query", (value) => { - return v - .parseAsync(imagePruneCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const systemAuth = [ - validator("json", (value) => { - return v - .parseAsync(systemAuthCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const systemInfo = [] as const; -export const systemVersion = [] as const; -export const systemPing = [] as const; -export const systemPingHead = [] as const; -export const imageCommit = [ - validator("json", (value) => { - return v - .parseAsync(imageCommitCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(imageCommitCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const systemEvents = [ - validator("query", (value) => { - return v - .parseAsync(systemEventsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const systemDataUsage = [ - validator("query", (value) => { - return v - .parseAsync(systemDataUsageCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageGet = [ - validator("param", (value) => { - return v - .parseAsync(imageGetCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageGetAll = [ - validator("query", (value) => { - return v - .parseAsync(imageGetAllCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const imageLoad = [ - validator("query", (value) => { - return v - .parseAsync(imageLoadCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const containerExec = [ - validator("json", (value) => { - return v - .parseAsync(containerExecCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(containerExecCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const execStart = [ - validator("json", (value) => { - return v - .parseAsync(execStartCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(execStartCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const execResize = [ - validator("param", (value) => { - return v - .parseAsync(execResizeCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(execResizeCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const execInspect = [ - validator("param", (value) => { - return v - .parseAsync(execInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const volumeList = [ - validator("query", (value) => { - return v - .parseAsync(volumeListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const volumeCreate = [ - validator("json", (value) => { - return v - .parseAsync(volumeCreateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const volumeInspect = [ - validator("param", (value) => { - return v - .parseAsync(volumeInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const volumeUpdate = [ - validator("json", (value) => { - return v - .parseAsync(volumeUpdateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(volumeUpdateCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(volumeUpdateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const volumeDelete = [ - validator("param", (value) => { - return v - .parseAsync(volumeDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(volumeDeleteCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const volumePrune = [ - validator("query", (value) => { - return v - .parseAsync(volumePruneCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const networkList = [ - validator("query", (value) => { - return v - .parseAsync(networkListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const networkInspect = [ - validator("param", (value) => { - return v - .parseAsync(networkInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(networkInspectCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const networkDelete = [ - validator("param", (value) => { - return v - .parseAsync(networkDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const networkCreate = [ - validator("json", (value) => { - return v - .parseAsync(networkCreateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const networkConnect = [ - validator("json", (value) => { - return v - .parseAsync(networkConnectCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(networkConnectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const networkDisconnect = [ - validator("json", (value) => { - return v - .parseAsync(networkDisconnectCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(networkDisconnectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const networkPrune = [ - validator("query", (value) => { - return v - .parseAsync(networkPruneCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginList = [ - validator("query", (value) => { - return v - .parseAsync(pluginListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getPluginPrivileges = [ - validator("query", (value) => { - return v - .parseAsync(getPluginPrivilegesCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginPull = [ - validator("json", (value) => { - return v - .parseAsync(pluginPullCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(pluginPullCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginInspect = [ - validator("param", (value) => { - return v - .parseAsync(pluginInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginDelete = [ - validator("param", (value) => { - return v - .parseAsync(pluginDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(pluginDeleteCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginEnable = [ - validator("param", (value) => { - return v - .parseAsync(pluginEnableCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(pluginEnableCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginDisable = [ - validator("param", (value) => { - return v - .parseAsync(pluginDisableCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(pluginDisableCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginUpgrade = [ - validator("json", (value) => { - return v - .parseAsync(pluginUpgradeCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(pluginUpgradeCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(pluginUpgradeCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginCreate = [ - validator("query", (value) => { - return v - .parseAsync(pluginCreateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginPush = [ - validator("param", (value) => { - return v - .parseAsync(pluginPushCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const pluginSet = [ - validator("json", (value) => { - return v - .parseAsync(pluginSetCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(pluginSetCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const nodeList = [ - validator("query", (value) => { - return v - .parseAsync(nodeListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const nodeInspect = [ - validator("param", (value) => { - return v - .parseAsync(nodeInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const nodeDelete = [ - validator("param", (value) => { - return v - .parseAsync(nodeDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(nodeDeleteCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const nodeUpdate = [ - validator("json", (value) => { - return v - .parseAsync(nodeUpdateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(nodeUpdateCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(nodeUpdateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const swarmInspect = [] as const; -export const swarmInit = [ - validator("json", (value) => { - return v - .parseAsync(swarmInitCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const swarmJoin = [ - validator("json", (value) => { - return v - .parseAsync(swarmJoinCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const swarmLeave = [ - validator("query", (value) => { - return v - .parseAsync(swarmLeaveCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const swarmUpdate = [ - validator("json", (value) => { - return v - .parseAsync(swarmUpdateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(swarmUpdateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const swarmUnlockkey = [] as const; -export const swarmUnlock = [ - validator("json", (value) => { - return v - .parseAsync(swarmUnlockCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const serviceList = [ - validator("query", (value) => { - return v - .parseAsync(serviceListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const serviceCreate = [ - validator("json", (value) => { - return v - .parseAsync(serviceCreateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const serviceInspect = [ - validator("param", (value) => { - return v - .parseAsync(serviceInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(serviceInspectCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const serviceDelete = [ - validator("param", (value) => { - return v - .parseAsync(serviceDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const serviceUpdate = [ - validator("json", (value) => { - return v - .parseAsync(serviceUpdateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(serviceUpdateCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(serviceUpdateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const serviceLogs = [ - validator("param", (value) => { - return v - .parseAsync(serviceLogsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(serviceLogsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const taskList = [ - validator("query", (value) => { - return v - .parseAsync(taskListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const taskInspect = [ - validator("param", (value) => { - return v - .parseAsync(taskInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const taskLogs = [ - validator("param", (value) => { - return v - .parseAsync(taskLogsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(taskLogsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const secretList = [ - validator("query", (value) => { - return v - .parseAsync(secretListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const secretCreate = [ - validator("json", (value) => { - return v - .parseAsync(secretCreateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const secretInspect = [ - validator("param", (value) => { - return v - .parseAsync(secretInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const secretDelete = [ - validator("param", (value) => { - return v - .parseAsync(secretDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const secretUpdate = [ - validator("json", (value) => { - return v - .parseAsync(secretUpdateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(secretUpdateCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(secretUpdateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const configList = [ - validator("query", (value) => { - return v - .parseAsync(configListCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const configCreate = [ - validator("json", (value) => { - return v - .parseAsync(configCreateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const configInspect = [ - validator("param", (value) => { - return v - .parseAsync(configInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const configDelete = [ - validator("param", (value) => { - return v - .parseAsync(configDeleteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const configUpdate = [ - validator("json", (value) => { - return v - .parseAsync(configUpdateCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(configUpdateCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(configUpdateCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const distributionInspect = [ - validator("param", (value) => { - return v - .parseAsync(distributionInspectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const session = [] as const; diff --git a/__tests__/fixtures/docker/hono.ts b/__tests__/fixtures/docker/hono.ts new file mode 100644 index 0000000..15aeeb7 --- /dev/null +++ b/__tests__/fixtures/docker/hono.ts @@ -0,0 +1,840 @@ +import { PublicValidationError } from "@block65/rest-client"; +import type { StandardSchemaV1 } from "@standard-schema/spec"; +/** + * This file was auto generated by @block65/openapi-codegen + * + * WARN: Do not edit directly. + * + * Generated on 2026-09-02T06:50:52.273Z (rev a58a86a27b52546215cc313505eb28b4) + * + */ +import { validator } from "hono/validator"; +import { + buildPruneCommandQuerySchema, + configCreateCommandBodySchema, + configDeleteCommandParamsSchema, + configInspectCommandParamsSchema, + configListCommandQuerySchema, + configUpdateCommandBodySchema, + configUpdateCommandParamsSchema, + configUpdateCommandQuerySchema, + containerArchiveCommandParamsSchema, + containerArchiveCommandQuerySchema, + containerArchiveInfoCommandParamsSchema, + containerArchiveInfoCommandQuerySchema, + containerAttachCommandParamsSchema, + containerAttachCommandQuerySchema, + containerAttachWebsocketCommandParamsSchema, + containerAttachWebsocketCommandQuerySchema, + containerChangesCommandParamsSchema, + containerCreateCommandBodySchema, + containerCreateCommandQuerySchema, + containerDeleteCommandParamsSchema, + containerDeleteCommandQuerySchema, + containerExecCommandBodySchema, + containerExecCommandParamsSchema, + containerExportCommandParamsSchema, + containerInspectCommandParamsSchema, + containerInspectCommandQuerySchema, + containerKillCommandParamsSchema, + containerKillCommandQuerySchema, + containerListCommandQuerySchema, + containerLogsCommandParamsSchema, + containerLogsCommandQuerySchema, + containerPauseCommandParamsSchema, + containerPruneCommandQuerySchema, + containerRenameCommandParamsSchema, + containerRenameCommandQuerySchema, + containerResizeCommandParamsSchema, + containerResizeCommandQuerySchema, + containerRestartCommandParamsSchema, + containerRestartCommandQuerySchema, + containerStartCommandParamsSchema, + containerStartCommandQuerySchema, + containerStatsCommandParamsSchema, + containerStatsCommandQuerySchema, + containerStopCommandParamsSchema, + containerStopCommandQuerySchema, + containerTopCommandParamsSchema, + containerTopCommandQuerySchema, + containerUnpauseCommandParamsSchema, + containerUpdateCommandBodySchema, + containerUpdateCommandParamsSchema, + containerWaitCommandParamsSchema, + containerWaitCommandQuerySchema, + distributionInspectCommandParamsSchema, + execInspectCommandParamsSchema, + execResizeCommandParamsSchema, + execResizeCommandQuerySchema, + execStartCommandBodySchema, + execStartCommandParamsSchema, + getPluginPrivilegesCommandQuerySchema, + imageBuildCommandQuerySchema, + imageCommitCommandBodySchema, + imageCommitCommandQuerySchema, + imageCreateCommandQuerySchema, + imageDeleteCommandParamsSchema, + imageDeleteCommandQuerySchema, + imageGetAllCommandQuerySchema, + imageGetCommandParamsSchema, + imageHistoryCommandParamsSchema, + imageInspectCommandParamsSchema, + imageListCommandQuerySchema, + imageLoadCommandQuerySchema, + imagePruneCommandQuerySchema, + imagePushCommandParamsSchema, + imagePushCommandQuerySchema, + imageSearchCommandQuerySchema, + imageTagCommandParamsSchema, + imageTagCommandQuerySchema, + networkConnectCommandBodySchema, + networkConnectCommandParamsSchema, + networkCreateCommandBodySchema, + networkDeleteCommandParamsSchema, + networkDisconnectCommandBodySchema, + networkDisconnectCommandParamsSchema, + networkInspectCommandParamsSchema, + networkInspectCommandQuerySchema, + networkListCommandQuerySchema, + networkPruneCommandQuerySchema, + nodeDeleteCommandParamsSchema, + nodeDeleteCommandQuerySchema, + nodeInspectCommandParamsSchema, + nodeListCommandQuerySchema, + nodeUpdateCommandBodySchema, + nodeUpdateCommandParamsSchema, + nodeUpdateCommandQuerySchema, + pluginCreateCommandQuerySchema, + pluginDeleteCommandParamsSchema, + pluginDeleteCommandQuerySchema, + pluginDisableCommandParamsSchema, + pluginDisableCommandQuerySchema, + pluginEnableCommandParamsSchema, + pluginEnableCommandQuerySchema, + pluginInspectCommandParamsSchema, + pluginListCommandQuerySchema, + pluginPullCommandBodySchema, + pluginPullCommandQuerySchema, + pluginPushCommandParamsSchema, + pluginSetCommandBodySchema, + pluginSetCommandParamsSchema, + pluginUpgradeCommandBodySchema, + pluginUpgradeCommandParamsSchema, + pluginUpgradeCommandQuerySchema, + putContainerArchiveCommandParamsSchema, + putContainerArchiveCommandQuerySchema, + secretCreateCommandBodySchema, + secretDeleteCommandParamsSchema, + secretInspectCommandParamsSchema, + secretListCommandQuerySchema, + secretUpdateCommandBodySchema, + secretUpdateCommandParamsSchema, + secretUpdateCommandQuerySchema, + serviceCreateCommandBodySchema, + serviceDeleteCommandParamsSchema, + serviceInspectCommandParamsSchema, + serviceInspectCommandQuerySchema, + serviceListCommandQuerySchema, + serviceLogsCommandParamsSchema, + serviceLogsCommandQuerySchema, + serviceUpdateCommandBodySchema, + serviceUpdateCommandParamsSchema, + serviceUpdateCommandQuerySchema, + swarmInitCommandBodySchema, + swarmJoinCommandBodySchema, + swarmLeaveCommandQuerySchema, + swarmUnlockCommandBodySchema, + swarmUpdateCommandBodySchema, + swarmUpdateCommandQuerySchema, + systemAuthCommandBodySchema, + systemDataUsageCommandQuerySchema, + systemEventsCommandQuerySchema, + taskInspectCommandParamsSchema, + taskListCommandQuerySchema, + taskLogsCommandParamsSchema, + taskLogsCommandQuerySchema, + volumeCreateCommandBodySchema, + volumeDeleteCommandParamsSchema, + volumeDeleteCommandQuerySchema, + volumeInspectCommandParamsSchema, + volumeListCommandQuerySchema, + volumePruneCommandQuerySchema, + volumeUpdateCommandBodySchema, + volumeUpdateCommandParamsSchema, + volumeUpdateCommandQuerySchema, +} from "./valibot.js"; + +async function standardParse( + schema: TSchema, + value: unknown, +): Promise> { + const result = await schema["~standard"].validate(value); + if (result.issues) { + throw PublicValidationError.fromIssues(result.issues); + } + return result.value; +} + +export const containerList = [ + validator("query", (value) => + standardParse(containerListCommandQuerySchema, value), + ), +] as const; +export const containerCreate = [ + validator("json", (value) => + standardParse(containerCreateCommandBodySchema, value), + ), + validator("query", (value) => + standardParse(containerCreateCommandQuerySchema, value), + ), +] as const; +export const containerInspect = [ + validator("param", (value) => + standardParse(containerInspectCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerInspectCommandQuerySchema, value), + ), +] as const; +export const containerTop = [ + validator("param", (value) => + standardParse(containerTopCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerTopCommandQuerySchema, value), + ), +] as const; +export const containerLogs = [ + validator("param", (value) => + standardParse(containerLogsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerLogsCommandQuerySchema, value), + ), +] as const; +export const containerChanges = [ + validator("param", (value) => + standardParse(containerChangesCommandParamsSchema, value), + ), +] as const; +export const containerExport = [ + validator("param", (value) => + standardParse(containerExportCommandParamsSchema, value), + ), +] as const; +export const containerStats = [ + validator("param", (value) => + standardParse(containerStatsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerStatsCommandQuerySchema, value), + ), +] as const; +export const containerResize = [ + validator("param", (value) => + standardParse(containerResizeCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerResizeCommandQuerySchema, value), + ), +] as const; +export const containerStart = [ + validator("param", (value) => + standardParse(containerStartCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerStartCommandQuerySchema, value), + ), +] as const; +export const containerStop = [ + validator("param", (value) => + standardParse(containerStopCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerStopCommandQuerySchema, value), + ), +] as const; +export const containerRestart = [ + validator("param", (value) => + standardParse(containerRestartCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerRestartCommandQuerySchema, value), + ), +] as const; +export const containerKill = [ + validator("param", (value) => + standardParse(containerKillCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerKillCommandQuerySchema, value), + ), +] as const; +export const containerUpdate = [ + validator("json", (value) => + standardParse(containerUpdateCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(containerUpdateCommandParamsSchema, value), + ), +] as const; +export const containerRename = [ + validator("param", (value) => + standardParse(containerRenameCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerRenameCommandQuerySchema, value), + ), +] as const; +export const containerPause = [ + validator("param", (value) => + standardParse(containerPauseCommandParamsSchema, value), + ), +] as const; +export const containerUnpause = [ + validator("param", (value) => + standardParse(containerUnpauseCommandParamsSchema, value), + ), +] as const; +export const containerAttach = [ + validator("param", (value) => + standardParse(containerAttachCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerAttachCommandQuerySchema, value), + ), +] as const; +export const containerAttachWebsocket = [ + validator("param", (value) => + standardParse(containerAttachWebsocketCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerAttachWebsocketCommandQuerySchema, value), + ), +] as const; +export const containerWait = [ + validator("param", (value) => + standardParse(containerWaitCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerWaitCommandQuerySchema, value), + ), +] as const; +export const containerDelete = [ + validator("param", (value) => + standardParse(containerDeleteCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerDeleteCommandQuerySchema, value), + ), +] as const; +export const containerArchive = [ + validator("param", (value) => + standardParse(containerArchiveCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerArchiveCommandQuerySchema, value), + ), +] as const; +export const putContainerArchive = [ + validator("param", (value) => + standardParse(putContainerArchiveCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(putContainerArchiveCommandQuerySchema, value), + ), +] as const; +export const containerArchiveInfo = [ + validator("param", (value) => + standardParse(containerArchiveInfoCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(containerArchiveInfoCommandQuerySchema, value), + ), +] as const; +export const containerPrune = [ + validator("query", (value) => + standardParse(containerPruneCommandQuerySchema, value), + ), +] as const; +export const imageList = [ + validator("query", (value) => + standardParse(imageListCommandQuerySchema, value), + ), +] as const; +export const imageBuild = [ + validator("query", (value) => + standardParse(imageBuildCommandQuerySchema, value), + ), +] as const; +export const buildPrune = [ + validator("query", (value) => + standardParse(buildPruneCommandQuerySchema, value), + ), +] as const; +export const imageCreate = [ + validator("query", (value) => + standardParse(imageCreateCommandQuerySchema, value), + ), +] as const; +export const imageInspect = [ + validator("param", (value) => + standardParse(imageInspectCommandParamsSchema, value), + ), +] as const; +export const imageHistory = [ + validator("param", (value) => + standardParse(imageHistoryCommandParamsSchema, value), + ), +] as const; +export const imagePush = [ + validator("param", (value) => + standardParse(imagePushCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(imagePushCommandQuerySchema, value), + ), +] as const; +export const imageTag = [ + validator("param", (value) => + standardParse(imageTagCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(imageTagCommandQuerySchema, value), + ), +] as const; +export const imageDelete = [ + validator("param", (value) => + standardParse(imageDeleteCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(imageDeleteCommandQuerySchema, value), + ), +] as const; +export const imageSearch = [ + validator("query", (value) => + standardParse(imageSearchCommandQuerySchema, value), + ), +] as const; +export const imagePrune = [ + validator("query", (value) => + standardParse(imagePruneCommandQuerySchema, value), + ), +] as const; +export const systemAuth = [ + validator("json", (value) => + standardParse(systemAuthCommandBodySchema, value), + ), +] as const; +export const systemInfo = [] as const; +export const systemVersion = [] as const; +export const systemPing = [] as const; +export const systemPingHead = [] as const; +export const imageCommit = [ + validator("json", (value) => + standardParse(imageCommitCommandBodySchema, value), + ), + validator("query", (value) => + standardParse(imageCommitCommandQuerySchema, value), + ), +] as const; +export const systemEvents = [ + validator("query", (value) => + standardParse(systemEventsCommandQuerySchema, value), + ), +] as const; +export const systemDataUsage = [ + validator("query", (value) => + standardParse(systemDataUsageCommandQuerySchema, value), + ), +] as const; +export const imageGet = [ + validator("param", (value) => + standardParse(imageGetCommandParamsSchema, value), + ), +] as const; +export const imageGetAll = [ + validator("query", (value) => + standardParse(imageGetAllCommandQuerySchema, value), + ), +] as const; +export const imageLoad = [ + validator("query", (value) => + standardParse(imageLoadCommandQuerySchema, value), + ), +] as const; +export const containerExec = [ + validator("json", (value) => + standardParse(containerExecCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(containerExecCommandParamsSchema, value), + ), +] as const; +export const execStart = [ + validator("json", (value) => + standardParse(execStartCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(execStartCommandParamsSchema, value), + ), +] as const; +export const execResize = [ + validator("param", (value) => + standardParse(execResizeCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(execResizeCommandQuerySchema, value), + ), +] as const; +export const execInspect = [ + validator("param", (value) => + standardParse(execInspectCommandParamsSchema, value), + ), +] as const; +export const volumeList = [ + validator("query", (value) => + standardParse(volumeListCommandQuerySchema, value), + ), +] as const; +export const volumeCreate = [ + validator("json", (value) => + standardParse(volumeCreateCommandBodySchema, value), + ), +] as const; +export const volumeInspect = [ + validator("param", (value) => + standardParse(volumeInspectCommandParamsSchema, value), + ), +] as const; +export const volumeUpdate = [ + validator("json", (value) => + standardParse(volumeUpdateCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(volumeUpdateCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(volumeUpdateCommandQuerySchema, value), + ), +] as const; +export const volumeDelete = [ + validator("param", (value) => + standardParse(volumeDeleteCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(volumeDeleteCommandQuerySchema, value), + ), +] as const; +export const volumePrune = [ + validator("query", (value) => + standardParse(volumePruneCommandQuerySchema, value), + ), +] as const; +export const networkList = [ + validator("query", (value) => + standardParse(networkListCommandQuerySchema, value), + ), +] as const; +export const networkInspect = [ + validator("param", (value) => + standardParse(networkInspectCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(networkInspectCommandQuerySchema, value), + ), +] as const; +export const networkDelete = [ + validator("param", (value) => + standardParse(networkDeleteCommandParamsSchema, value), + ), +] as const; +export const networkCreate = [ + validator("json", (value) => + standardParse(networkCreateCommandBodySchema, value), + ), +] as const; +export const networkConnect = [ + validator("json", (value) => + standardParse(networkConnectCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(networkConnectCommandParamsSchema, value), + ), +] as const; +export const networkDisconnect = [ + validator("json", (value) => + standardParse(networkDisconnectCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(networkDisconnectCommandParamsSchema, value), + ), +] as const; +export const networkPrune = [ + validator("query", (value) => + standardParse(networkPruneCommandQuerySchema, value), + ), +] as const; +export const pluginList = [ + validator("query", (value) => + standardParse(pluginListCommandQuerySchema, value), + ), +] as const; +export const getPluginPrivileges = [ + validator("query", (value) => + standardParse(getPluginPrivilegesCommandQuerySchema, value), + ), +] as const; +export const pluginPull = [ + validator("json", (value) => + standardParse(pluginPullCommandBodySchema, value), + ), + validator("query", (value) => + standardParse(pluginPullCommandQuerySchema, value), + ), +] as const; +export const pluginInspect = [ + validator("param", (value) => + standardParse(pluginInspectCommandParamsSchema, value), + ), +] as const; +export const pluginDelete = [ + validator("param", (value) => + standardParse(pluginDeleteCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(pluginDeleteCommandQuerySchema, value), + ), +] as const; +export const pluginEnable = [ + validator("param", (value) => + standardParse(pluginEnableCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(pluginEnableCommandQuerySchema, value), + ), +] as const; +export const pluginDisable = [ + validator("param", (value) => + standardParse(pluginDisableCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(pluginDisableCommandQuerySchema, value), + ), +] as const; +export const pluginUpgrade = [ + validator("json", (value) => + standardParse(pluginUpgradeCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(pluginUpgradeCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(pluginUpgradeCommandQuerySchema, value), + ), +] as const; +export const pluginCreate = [ + validator("query", (value) => + standardParse(pluginCreateCommandQuerySchema, value), + ), +] as const; +export const pluginPush = [ + validator("param", (value) => + standardParse(pluginPushCommandParamsSchema, value), + ), +] as const; +export const pluginSet = [ + validator("json", (value) => + standardParse(pluginSetCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(pluginSetCommandParamsSchema, value), + ), +] as const; +export const nodeList = [ + validator("query", (value) => + standardParse(nodeListCommandQuerySchema, value), + ), +] as const; +export const nodeInspect = [ + validator("param", (value) => + standardParse(nodeInspectCommandParamsSchema, value), + ), +] as const; +export const nodeDelete = [ + validator("param", (value) => + standardParse(nodeDeleteCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(nodeDeleteCommandQuerySchema, value), + ), +] as const; +export const nodeUpdate = [ + validator("json", (value) => + standardParse(nodeUpdateCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(nodeUpdateCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(nodeUpdateCommandQuerySchema, value), + ), +] as const; +export const swarmInspect = [] as const; +export const swarmInit = [ + validator("json", (value) => + standardParse(swarmInitCommandBodySchema, value), + ), +] as const; +export const swarmJoin = [ + validator("json", (value) => + standardParse(swarmJoinCommandBodySchema, value), + ), +] as const; +export const swarmLeave = [ + validator("query", (value) => + standardParse(swarmLeaveCommandQuerySchema, value), + ), +] as const; +export const swarmUpdate = [ + validator("json", (value) => + standardParse(swarmUpdateCommandBodySchema, value), + ), + validator("query", (value) => + standardParse(swarmUpdateCommandQuerySchema, value), + ), +] as const; +export const swarmUnlockkey = [] as const; +export const swarmUnlock = [ + validator("json", (value) => + standardParse(swarmUnlockCommandBodySchema, value), + ), +] as const; +export const serviceList = [ + validator("query", (value) => + standardParse(serviceListCommandQuerySchema, value), + ), +] as const; +export const serviceCreate = [ + validator("json", (value) => + standardParse(serviceCreateCommandBodySchema, value), + ), +] as const; +export const serviceInspect = [ + validator("param", (value) => + standardParse(serviceInspectCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(serviceInspectCommandQuerySchema, value), + ), +] as const; +export const serviceDelete = [ + validator("param", (value) => + standardParse(serviceDeleteCommandParamsSchema, value), + ), +] as const; +export const serviceUpdate = [ + validator("json", (value) => + standardParse(serviceUpdateCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(serviceUpdateCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(serviceUpdateCommandQuerySchema, value), + ), +] as const; +export const serviceLogs = [ + validator("param", (value) => + standardParse(serviceLogsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(serviceLogsCommandQuerySchema, value), + ), +] as const; +export const taskList = [ + validator("query", (value) => + standardParse(taskListCommandQuerySchema, value), + ), +] as const; +export const taskInspect = [ + validator("param", (value) => + standardParse(taskInspectCommandParamsSchema, value), + ), +] as const; +export const taskLogs = [ + validator("param", (value) => + standardParse(taskLogsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(taskLogsCommandQuerySchema, value), + ), +] as const; +export const secretList = [ + validator("query", (value) => + standardParse(secretListCommandQuerySchema, value), + ), +] as const; +export const secretCreate = [ + validator("json", (value) => + standardParse(secretCreateCommandBodySchema, value), + ), +] as const; +export const secretInspect = [ + validator("param", (value) => + standardParse(secretInspectCommandParamsSchema, value), + ), +] as const; +export const secretDelete = [ + validator("param", (value) => + standardParse(secretDeleteCommandParamsSchema, value), + ), +] as const; +export const secretUpdate = [ + validator("json", (value) => + standardParse(secretUpdateCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(secretUpdateCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(secretUpdateCommandQuerySchema, value), + ), +] as const; +export const configList = [ + validator("query", (value) => + standardParse(configListCommandQuerySchema, value), + ), +] as const; +export const configCreate = [ + validator("json", (value) => + standardParse(configCreateCommandBodySchema, value), + ), +] as const; +export const configInspect = [ + validator("param", (value) => + standardParse(configInspectCommandParamsSchema, value), + ), +] as const; +export const configDelete = [ + validator("param", (value) => + standardParse(configDeleteCommandParamsSchema, value), + ), +] as const; +export const configUpdate = [ + validator("json", (value) => + standardParse(configUpdateCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(configUpdateCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(configUpdateCommandQuerySchema, value), + ), +] as const; +export const distributionInspect = [ + validator("param", (value) => + standardParse(distributionInspectCommandParamsSchema, value), + ), +] as const; +export const session = [] as const; diff --git a/__tests__/fixtures/openai/hono-valibot.ts b/__tests__/fixtures/openai/hono-valibot.ts deleted file mode 100644 index 5ff13be..0000000 --- a/__tests__/fixtures/openai/hono-valibot.ts +++ /dev/null @@ -1,899 +0,0 @@ -import { PublicValibotHonoError } from "@block65/rest-client"; -/** - * This file was auto generated by @block65/openapi-codegen - * - * WARN: Do not edit directly. - * - * Generated on 2026-06-09T09:17:36.716Z - * - */ -import { validator } from "hono/validator"; -import * as v from "valibot"; -import { - addUploadPartCommandParamsSchema, - archiveProjectCommandParamsSchema, - cancelBatchCommandParamsSchema, - cancelFineTuningJobCommandParamsSchema, - cancelRunCommandParamsSchema, - cancelUploadCommandParamsSchema, - cancelVectorStoreFileBatchCommandParamsSchema, - completeUploadCommandBodySchema, - completeUploadCommandParamsSchema, - createAssistantCommandBodySchema, - createBatchCommandBodySchema, - createChatCompletionCommandBodySchema, - createCompletionCommandBodySchema, - createEmbeddingCommandBodySchema, - createFineTuningJobCommandBodySchema, - createImageCommandBodySchema, - createMessageCommandBodySchema, - createMessageCommandParamsSchema, - createModerationCommandBodySchema, - createProjectCommandBodySchema, - createProjectServiceAccountCommandBodySchema, - createProjectServiceAccountCommandParamsSchema, - createProjectUserCommandBodySchema, - createProjectUserCommandParamsSchema, - createRunCommandBodySchema, - createRunCommandParamsSchema, - createRunCommandQuerySchema, - createSpeechCommandBodySchema, - createThreadAndRunCommandBodySchema, - createThreadCommandBodySchema, - createUploadCommandBodySchema, - createVectorStoreCommandBodySchema, - createVectorStoreFileBatchCommandBodySchema, - createVectorStoreFileBatchCommandParamsSchema, - createVectorStoreFileCommandBodySchema, - createVectorStoreFileCommandParamsSchema, - deleteAssistantCommandParamsSchema, - deleteFileCommandParamsSchema, - deleteInviteCommandParamsSchema, - deleteMessageCommandParamsSchema, - deleteModelCommandParamsSchema, - deleteProjectApiKeyCommandParamsSchema, - deleteProjectServiceAccountCommandParamsSchema, - deleteProjectUserCommandParamsSchema, - deleteThreadCommandParamsSchema, - deleteUserCommandParamsSchema, - deleteVectorStoreCommandParamsSchema, - deleteVectorStoreFileCommandParamsSchema, - downloadFileCommandParamsSchema, - getAssistantCommandParamsSchema, - getMessageCommandParamsSchema, - getRunCommandParamsSchema, - getRunStepCommandParamsSchema, - getRunStepCommandQuerySchema, - getThreadCommandParamsSchema, - getVectorStoreCommandParamsSchema, - getVectorStoreFileBatchCommandParamsSchema, - getVectorStoreFileCommandParamsSchema, - inviteUserCommandBodySchema, - listAssistantsCommandQuerySchema, - listAuditLogsCommandQuerySchema, - listBatchesCommandQuerySchema, - listFilesCommandQuerySchema, - listFilesInVectorStoreBatchCommandParamsSchema, - listFilesInVectorStoreBatchCommandQuerySchema, - listFineTuningEventsCommandParamsSchema, - listFineTuningEventsCommandQuerySchema, - listFineTuningJobCheckpointsCommandParamsSchema, - listFineTuningJobCheckpointsCommandQuerySchema, - listInvitesCommandQuerySchema, - listMessagesCommandParamsSchema, - listMessagesCommandQuerySchema, - listPaginatedFineTuningJobsCommandQuerySchema, - listProjectApiKeysCommandParamsSchema, - listProjectApiKeysCommandQuerySchema, - listProjectServiceAccountsCommandParamsSchema, - listProjectServiceAccountsCommandQuerySchema, - listProjectUsersCommandParamsSchema, - listProjectUsersCommandQuerySchema, - listProjectsCommandQuerySchema, - listRunStepsCommandParamsSchema, - listRunStepsCommandQuerySchema, - listRunsCommandParamsSchema, - listRunsCommandQuerySchema, - listUsersCommandQuerySchema, - listVectorStoreFilesCommandParamsSchema, - listVectorStoreFilesCommandQuerySchema, - listVectorStoresCommandQuerySchema, - modifyAssistantCommandBodySchema, - modifyAssistantCommandParamsSchema, - modifyMessageCommandBodySchema, - modifyMessageCommandParamsSchema, - modifyProjectCommandBodySchema, - modifyProjectCommandParamsSchema, - modifyProjectUserCommandBodySchema, - modifyProjectUserCommandParamsSchema, - modifyRunCommandBodySchema, - modifyRunCommandParamsSchema, - modifyThreadCommandBodySchema, - modifyThreadCommandParamsSchema, - modifyUserCommandBodySchema, - modifyUserCommandParamsSchema, - modifyVectorStoreCommandBodySchema, - modifyVectorStoreCommandParamsSchema, - retrieveBatchCommandParamsSchema, - retrieveFileCommandParamsSchema, - retrieveFineTuningJobCommandParamsSchema, - retrieveInviteCommandParamsSchema, - retrieveModelCommandParamsSchema, - retrieveProjectApiKeyCommandParamsSchema, - retrieveProjectCommandParamsSchema, - retrieveProjectServiceAccountCommandParamsSchema, - retrieveProjectUserCommandParamsSchema, - retrieveUserCommandParamsSchema, - submitToolOuputsToRunCommandBodySchema, - submitToolOuputsToRunCommandParamsSchema, -} from "./valibot.js"; - -function toPublicValibotHonoError(err: unknown): never { - if (err instanceof v.ValiError) { - throw PublicValibotHonoError.from(err); - } - throw err; -} - -export const createChatCompletion = [ - validator("json", (value) => { - return v - .parseAsync(createChatCompletionCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createCompletion = [ - validator("json", (value) => { - return v - .parseAsync(createCompletionCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createImage = [ - validator("json", (value) => { - return v - .parseAsync(createImageCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createImageEdit = [] as const; -export const createImageVariation = [] as const; -export const createEmbedding = [ - validator("json", (value) => { - return v - .parseAsync(createEmbeddingCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createSpeech = [ - validator("json", (value) => { - return v - .parseAsync(createSpeechCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createTranscription = [] as const; -export const createTranslation = [] as const; -export const listFiles = [ - validator("query", (value) => { - return v - .parseAsync(listFilesCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createFile = [] as const; -export const deleteFile = [ - validator("param", (value) => { - return v - .parseAsync(deleteFileCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveFile = [ - validator("param", (value) => { - return v - .parseAsync(retrieveFileCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const downloadFile = [ - validator("param", (value) => { - return v - .parseAsync(downloadFileCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createUpload = [ - validator("json", (value) => { - return v - .parseAsync(createUploadCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const addUploadPart = [ - validator("param", (value) => { - return v - .parseAsync(addUploadPartCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const completeUpload = [ - validator("json", (value) => { - return v - .parseAsync(completeUploadCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(completeUploadCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const cancelUpload = [ - validator("param", (value) => { - return v - .parseAsync(cancelUploadCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createFineTuningJob = [ - validator("json", (value) => { - return v - .parseAsync(createFineTuningJobCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listPaginatedFineTuningJobs = [ - validator("query", (value) => { - return v - .parseAsync(listPaginatedFineTuningJobsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveFineTuningJob = [ - validator("param", (value) => { - return v - .parseAsync(retrieveFineTuningJobCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listFineTuningEvents = [ - validator("param", (value) => { - return v - .parseAsync(listFineTuningEventsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listFineTuningEventsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const cancelFineTuningJob = [ - validator("param", (value) => { - return v - .parseAsync(cancelFineTuningJobCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listFineTuningJobCheckpoints = [ - validator("param", (value) => { - return v - .parseAsync(listFineTuningJobCheckpointsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listFineTuningJobCheckpointsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listModels = [] as const; -export const retrieveModel = [ - validator("param", (value) => { - return v - .parseAsync(retrieveModelCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteModel = [ - validator("param", (value) => { - return v - .parseAsync(deleteModelCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createModeration = [ - validator("json", (value) => { - return v - .parseAsync(createModerationCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listAssistants = [ - validator("query", (value) => { - return v - .parseAsync(listAssistantsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createAssistant = [ - validator("json", (value) => { - return v - .parseAsync(createAssistantCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getAssistant = [ - validator("param", (value) => { - return v - .parseAsync(getAssistantCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const modifyAssistant = [ - validator("json", (value) => { - return v - .parseAsync(modifyAssistantCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(modifyAssistantCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteAssistant = [ - validator("param", (value) => { - return v - .parseAsync(deleteAssistantCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createThread = [ - validator("json", (value) => { - return v - .parseAsync(createThreadCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getThread = [ - validator("param", (value) => { - return v - .parseAsync(getThreadCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const modifyThread = [ - validator("json", (value) => { - return v - .parseAsync(modifyThreadCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(modifyThreadCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteThread = [ - validator("param", (value) => { - return v - .parseAsync(deleteThreadCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listMessages = [ - validator("param", (value) => { - return v - .parseAsync(listMessagesCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listMessagesCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createMessage = [ - validator("json", (value) => { - return v - .parseAsync(createMessageCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(createMessageCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getMessage = [ - validator("param", (value) => { - return v - .parseAsync(getMessageCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const modifyMessage = [ - validator("json", (value) => { - return v - .parseAsync(modifyMessageCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(modifyMessageCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteMessage = [ - validator("param", (value) => { - return v - .parseAsync(deleteMessageCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createThreadAndRun = [ - validator("json", (value) => { - return v - .parseAsync(createThreadAndRunCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listRuns = [ - validator("param", (value) => { - return v - .parseAsync(listRunsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listRunsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createRun = [ - validator("json", (value) => { - return v - .parseAsync(createRunCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(createRunCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(createRunCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getRun = [ - validator("param", (value) => { - return v - .parseAsync(getRunCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const modifyRun = [ - validator("json", (value) => { - return v - .parseAsync(modifyRunCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(modifyRunCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const submitToolOuputsToRun = [ - validator("json", (value) => { - return v - .parseAsync(submitToolOuputsToRunCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(submitToolOuputsToRunCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const cancelRun = [ - validator("param", (value) => { - return v - .parseAsync(cancelRunCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listRunSteps = [ - validator("param", (value) => { - return v - .parseAsync(listRunStepsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listRunStepsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getRunStep = [ - validator("param", (value) => { - return v - .parseAsync(getRunStepCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(getRunStepCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listVectorStores = [ - validator("query", (value) => { - return v - .parseAsync(listVectorStoresCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createVectorStore = [ - validator("json", (value) => { - return v - .parseAsync(createVectorStoreCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getVectorStore = [ - validator("param", (value) => { - return v - .parseAsync(getVectorStoreCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const modifyVectorStore = [ - validator("json", (value) => { - return v - .parseAsync(modifyVectorStoreCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(modifyVectorStoreCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteVectorStore = [ - validator("param", (value) => { - return v - .parseAsync(deleteVectorStoreCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listVectorStoreFiles = [ - validator("param", (value) => { - return v - .parseAsync(listVectorStoreFilesCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listVectorStoreFilesCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createVectorStoreFile = [ - validator("json", (value) => { - return v - .parseAsync(createVectorStoreFileCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(createVectorStoreFileCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getVectorStoreFile = [ - validator("param", (value) => { - return v - .parseAsync(getVectorStoreFileCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteVectorStoreFile = [ - validator("param", (value) => { - return v - .parseAsync(deleteVectorStoreFileCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createVectorStoreFileBatch = [ - validator("json", (value) => { - return v - .parseAsync(createVectorStoreFileBatchCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(createVectorStoreFileBatchCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getVectorStoreFileBatch = [ - validator("param", (value) => { - return v - .parseAsync(getVectorStoreFileBatchCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const cancelVectorStoreFileBatch = [ - validator("param", (value) => { - return v - .parseAsync(cancelVectorStoreFileBatchCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listFilesInVectorStoreBatch = [ - validator("param", (value) => { - return v - .parseAsync(listFilesInVectorStoreBatchCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listFilesInVectorStoreBatchCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createBatch = [ - validator("json", (value) => { - return v - .parseAsync(createBatchCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listBatches = [ - validator("query", (value) => { - return v - .parseAsync(listBatchesCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveBatch = [ - validator("param", (value) => { - return v - .parseAsync(retrieveBatchCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const cancelBatch = [ - validator("param", (value) => { - return v - .parseAsync(cancelBatchCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listauditlogs = [ - validator("query", (value) => { - return v - .parseAsync(listAuditLogsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listinvites = [ - validator("query", (value) => { - return v - .parseAsync(listInvitesCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const inviteUser = [ - validator("json", (value) => { - return v - .parseAsync(inviteUserCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveinvite = [ - validator("param", (value) => { - return v - .parseAsync(retrieveInviteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteinvite = [ - validator("param", (value) => { - return v - .parseAsync(deleteInviteCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listusers = [ - validator("query", (value) => { - return v - .parseAsync(listUsersCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveuser = [ - validator("param", (value) => { - return v - .parseAsync(retrieveUserCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const modifyuser = [ - validator("json", (value) => { - return v - .parseAsync(modifyUserCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(modifyUserCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteuser = [ - validator("param", (value) => { - return v - .parseAsync(deleteUserCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listprojects = [ - validator("query", (value) => { - return v - .parseAsync(listProjectsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createproject = [ - validator("json", (value) => { - return v - .parseAsync(createProjectCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveproject = [ - validator("param", (value) => { - return v - .parseAsync(retrieveProjectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const modifyproject = [ - validator("json", (value) => { - return v - .parseAsync(modifyProjectCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(modifyProjectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const archiveproject = [ - validator("param", (value) => { - return v - .parseAsync(archiveProjectCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listprojectusers = [ - validator("param", (value) => { - return v - .parseAsync(listProjectUsersCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listProjectUsersCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createprojectuser = [ - validator("json", (value) => { - return v - .parseAsync(createProjectUserCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(createProjectUserCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveprojectuser = [ - validator("param", (value) => { - return v - .parseAsync(retrieveProjectUserCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const modifyprojectuser = [ - validator("json", (value) => { - return v - .parseAsync(modifyProjectUserCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(modifyProjectUserCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteprojectuser = [ - validator("param", (value) => { - return v - .parseAsync(deleteProjectUserCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listprojectserviceaccounts = [ - validator("param", (value) => { - return v - .parseAsync(listProjectServiceAccountsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listProjectServiceAccountsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createprojectserviceaccount = [ - validator("json", (value) => { - return v - .parseAsync(createProjectServiceAccountCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(createProjectServiceAccountCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveprojectserviceaccount = [ - validator("param", (value) => { - return v - .parseAsync(retrieveProjectServiceAccountCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteprojectserviceaccount = [ - validator("param", (value) => { - return v - .parseAsync(deleteProjectServiceAccountCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listprojectapikeys = [ - validator("param", (value) => { - return v - .parseAsync(listProjectApiKeysCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), - validator("query", (value) => { - return v - .parseAsync(listProjectApiKeysCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const retrieveprojectapikey = [ - validator("param", (value) => { - return v - .parseAsync(retrieveProjectApiKeyCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deleteprojectapikey = [ - validator("param", (value) => { - return v - .parseAsync(deleteProjectApiKeyCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; diff --git a/__tests__/fixtures/openai/hono.ts b/__tests__/fixtures/openai/hono.ts new file mode 100644 index 0000000..133e75e --- /dev/null +++ b/__tests__/fixtures/openai/hono.ts @@ -0,0 +1,671 @@ +import { PublicValidationError } from "@block65/rest-client"; +import type { StandardSchemaV1 } from "@standard-schema/spec"; +/** + * This file was auto generated by @block65/openapi-codegen + * + * WARN: Do not edit directly. + * + * Generated on 2026-09-02T06:48:37.791Z (rev 0b662cef5ddf1b9f903e207afbb88df2) + * + */ +import { validator } from "hono/validator"; +import { + addUploadPartCommandParamsSchema, + archiveProjectCommandParamsSchema, + cancelBatchCommandParamsSchema, + cancelFineTuningJobCommandParamsSchema, + cancelRunCommandParamsSchema, + cancelUploadCommandParamsSchema, + cancelVectorStoreFileBatchCommandParamsSchema, + completeUploadCommandBodySchema, + completeUploadCommandParamsSchema, + createAssistantCommandBodySchema, + createBatchCommandBodySchema, + createChatCompletionCommandBodySchema, + createCompletionCommandBodySchema, + createEmbeddingCommandBodySchema, + createFineTuningJobCommandBodySchema, + createImageCommandBodySchema, + createMessageCommandBodySchema, + createMessageCommandParamsSchema, + createModerationCommandBodySchema, + createProjectCommandBodySchema, + createProjectServiceAccountCommandBodySchema, + createProjectServiceAccountCommandParamsSchema, + createProjectUserCommandBodySchema, + createProjectUserCommandParamsSchema, + createRunCommandBodySchema, + createRunCommandParamsSchema, + createRunCommandQuerySchema, + createSpeechCommandBodySchema, + createThreadAndRunCommandBodySchema, + createThreadCommandBodySchema, + createUploadCommandBodySchema, + createVectorStoreCommandBodySchema, + createVectorStoreFileBatchCommandBodySchema, + createVectorStoreFileBatchCommandParamsSchema, + createVectorStoreFileCommandBodySchema, + createVectorStoreFileCommandParamsSchema, + deleteAssistantCommandParamsSchema, + deleteFileCommandParamsSchema, + deleteInviteCommandParamsSchema, + deleteMessageCommandParamsSchema, + deleteModelCommandParamsSchema, + deleteProjectApiKeyCommandParamsSchema, + deleteProjectServiceAccountCommandParamsSchema, + deleteProjectUserCommandParamsSchema, + deleteThreadCommandParamsSchema, + deleteUserCommandParamsSchema, + deleteVectorStoreCommandParamsSchema, + deleteVectorStoreFileCommandParamsSchema, + downloadFileCommandParamsSchema, + getAssistantCommandParamsSchema, + getMessageCommandParamsSchema, + getRunCommandParamsSchema, + getRunStepCommandParamsSchema, + getRunStepCommandQuerySchema, + getThreadCommandParamsSchema, + getVectorStoreCommandParamsSchema, + getVectorStoreFileBatchCommandParamsSchema, + getVectorStoreFileCommandParamsSchema, + inviteUserCommandBodySchema, + listAssistantsCommandQuerySchema, + listAuditLogsCommandQuerySchema, + listBatchesCommandQuerySchema, + listFilesCommandQuerySchema, + listFilesInVectorStoreBatchCommandParamsSchema, + listFilesInVectorStoreBatchCommandQuerySchema, + listFineTuningEventsCommandParamsSchema, + listFineTuningEventsCommandQuerySchema, + listFineTuningJobCheckpointsCommandParamsSchema, + listFineTuningJobCheckpointsCommandQuerySchema, + listInvitesCommandQuerySchema, + listMessagesCommandParamsSchema, + listMessagesCommandQuerySchema, + listPaginatedFineTuningJobsCommandQuerySchema, + listProjectApiKeysCommandParamsSchema, + listProjectApiKeysCommandQuerySchema, + listProjectServiceAccountsCommandParamsSchema, + listProjectServiceAccountsCommandQuerySchema, + listProjectUsersCommandParamsSchema, + listProjectUsersCommandQuerySchema, + listProjectsCommandQuerySchema, + listRunStepsCommandParamsSchema, + listRunStepsCommandQuerySchema, + listRunsCommandParamsSchema, + listRunsCommandQuerySchema, + listUsersCommandQuerySchema, + listVectorStoreFilesCommandParamsSchema, + listVectorStoreFilesCommandQuerySchema, + listVectorStoresCommandQuerySchema, + modifyAssistantCommandBodySchema, + modifyAssistantCommandParamsSchema, + modifyMessageCommandBodySchema, + modifyMessageCommandParamsSchema, + modifyProjectCommandBodySchema, + modifyProjectCommandParamsSchema, + modifyProjectUserCommandBodySchema, + modifyProjectUserCommandParamsSchema, + modifyRunCommandBodySchema, + modifyRunCommandParamsSchema, + modifyThreadCommandBodySchema, + modifyThreadCommandParamsSchema, + modifyUserCommandBodySchema, + modifyUserCommandParamsSchema, + modifyVectorStoreCommandBodySchema, + modifyVectorStoreCommandParamsSchema, + retrieveBatchCommandParamsSchema, + retrieveFileCommandParamsSchema, + retrieveFineTuningJobCommandParamsSchema, + retrieveInviteCommandParamsSchema, + retrieveModelCommandParamsSchema, + retrieveProjectApiKeyCommandParamsSchema, + retrieveProjectCommandParamsSchema, + retrieveProjectServiceAccountCommandParamsSchema, + retrieveProjectUserCommandParamsSchema, + retrieveUserCommandParamsSchema, + submitToolOuputsToRunCommandBodySchema, + submitToolOuputsToRunCommandParamsSchema, +} from "./valibot.js"; + +async function standardParse( + schema: TSchema, + value: unknown, +): Promise> { + const result = await schema["~standard"].validate(value); + if (result.issues) { + throw PublicValidationError.fromIssues(result.issues); + } + return result.value; +} + +export const createChatCompletion = [ + validator("json", (value) => + standardParse(createChatCompletionCommandBodySchema, value), + ), +] as const; +export const createCompletion = [ + validator("json", (value) => + standardParse(createCompletionCommandBodySchema, value), + ), +] as const; +export const createImage = [ + validator("json", (value) => + standardParse(createImageCommandBodySchema, value), + ), +] as const; +export const createImageEdit = [] as const; +export const createImageVariation = [] as const; +export const createEmbedding = [ + validator("json", (value) => + standardParse(createEmbeddingCommandBodySchema, value), + ), +] as const; +export const createSpeech = [ + validator("json", (value) => + standardParse(createSpeechCommandBodySchema, value), + ), +] as const; +export const createTranscription = [] as const; +export const createTranslation = [] as const; +export const listFiles = [ + validator("query", (value) => + standardParse(listFilesCommandQuerySchema, value), + ), +] as const; +export const createFile = [] as const; +export const deleteFile = [ + validator("param", (value) => + standardParse(deleteFileCommandParamsSchema, value), + ), +] as const; +export const retrieveFile = [ + validator("param", (value) => + standardParse(retrieveFileCommandParamsSchema, value), + ), +] as const; +export const downloadFile = [ + validator("param", (value) => + standardParse(downloadFileCommandParamsSchema, value), + ), +] as const; +export const createUpload = [ + validator("json", (value) => + standardParse(createUploadCommandBodySchema, value), + ), +] as const; +export const addUploadPart = [ + validator("param", (value) => + standardParse(addUploadPartCommandParamsSchema, value), + ), +] as const; +export const completeUpload = [ + validator("json", (value) => + standardParse(completeUploadCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(completeUploadCommandParamsSchema, value), + ), +] as const; +export const cancelUpload = [ + validator("param", (value) => + standardParse(cancelUploadCommandParamsSchema, value), + ), +] as const; +export const createFineTuningJob = [ + validator("json", (value) => + standardParse(createFineTuningJobCommandBodySchema, value), + ), +] as const; +export const listPaginatedFineTuningJobs = [ + validator("query", (value) => + standardParse(listPaginatedFineTuningJobsCommandQuerySchema, value), + ), +] as const; +export const retrieveFineTuningJob = [ + validator("param", (value) => + standardParse(retrieveFineTuningJobCommandParamsSchema, value), + ), +] as const; +export const listFineTuningEvents = [ + validator("param", (value) => + standardParse(listFineTuningEventsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listFineTuningEventsCommandQuerySchema, value), + ), +] as const; +export const cancelFineTuningJob = [ + validator("param", (value) => + standardParse(cancelFineTuningJobCommandParamsSchema, value), + ), +] as const; +export const listFineTuningJobCheckpoints = [ + validator("param", (value) => + standardParse(listFineTuningJobCheckpointsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listFineTuningJobCheckpointsCommandQuerySchema, value), + ), +] as const; +export const listModels = [] as const; +export const retrieveModel = [ + validator("param", (value) => + standardParse(retrieveModelCommandParamsSchema, value), + ), +] as const; +export const deleteModel = [ + validator("param", (value) => + standardParse(deleteModelCommandParamsSchema, value), + ), +] as const; +export const createModeration = [ + validator("json", (value) => + standardParse(createModerationCommandBodySchema, value), + ), +] as const; +export const listAssistants = [ + validator("query", (value) => + standardParse(listAssistantsCommandQuerySchema, value), + ), +] as const; +export const createAssistant = [ + validator("json", (value) => + standardParse(createAssistantCommandBodySchema, value), + ), +] as const; +export const getAssistant = [ + validator("param", (value) => + standardParse(getAssistantCommandParamsSchema, value), + ), +] as const; +export const modifyAssistant = [ + validator("json", (value) => + standardParse(modifyAssistantCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(modifyAssistantCommandParamsSchema, value), + ), +] as const; +export const deleteAssistant = [ + validator("param", (value) => + standardParse(deleteAssistantCommandParamsSchema, value), + ), +] as const; +export const createThread = [ + validator("json", (value) => + standardParse(createThreadCommandBodySchema, value), + ), +] as const; +export const getThread = [ + validator("param", (value) => + standardParse(getThreadCommandParamsSchema, value), + ), +] as const; +export const modifyThread = [ + validator("json", (value) => + standardParse(modifyThreadCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(modifyThreadCommandParamsSchema, value), + ), +] as const; +export const deleteThread = [ + validator("param", (value) => + standardParse(deleteThreadCommandParamsSchema, value), + ), +] as const; +export const listMessages = [ + validator("param", (value) => + standardParse(listMessagesCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listMessagesCommandQuerySchema, value), + ), +] as const; +export const createMessage = [ + validator("json", (value) => + standardParse(createMessageCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(createMessageCommandParamsSchema, value), + ), +] as const; +export const getMessage = [ + validator("param", (value) => + standardParse(getMessageCommandParamsSchema, value), + ), +] as const; +export const modifyMessage = [ + validator("json", (value) => + standardParse(modifyMessageCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(modifyMessageCommandParamsSchema, value), + ), +] as const; +export const deleteMessage = [ + validator("param", (value) => + standardParse(deleteMessageCommandParamsSchema, value), + ), +] as const; +export const createThreadAndRun = [ + validator("json", (value) => + standardParse(createThreadAndRunCommandBodySchema, value), + ), +] as const; +export const listRuns = [ + validator("param", (value) => + standardParse(listRunsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listRunsCommandQuerySchema, value), + ), +] as const; +export const createRun = [ + validator("json", (value) => + standardParse(createRunCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(createRunCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(createRunCommandQuerySchema, value), + ), +] as const; +export const getRun = [ + validator("param", (value) => + standardParse(getRunCommandParamsSchema, value), + ), +] as const; +export const modifyRun = [ + validator("json", (value) => + standardParse(modifyRunCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(modifyRunCommandParamsSchema, value), + ), +] as const; +export const submitToolOuputsToRun = [ + validator("json", (value) => + standardParse(submitToolOuputsToRunCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(submitToolOuputsToRunCommandParamsSchema, value), + ), +] as const; +export const cancelRun = [ + validator("param", (value) => + standardParse(cancelRunCommandParamsSchema, value), + ), +] as const; +export const listRunSteps = [ + validator("param", (value) => + standardParse(listRunStepsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listRunStepsCommandQuerySchema, value), + ), +] as const; +export const getRunStep = [ + validator("param", (value) => + standardParse(getRunStepCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(getRunStepCommandQuerySchema, value), + ), +] as const; +export const listVectorStores = [ + validator("query", (value) => + standardParse(listVectorStoresCommandQuerySchema, value), + ), +] as const; +export const createVectorStore = [ + validator("json", (value) => + standardParse(createVectorStoreCommandBodySchema, value), + ), +] as const; +export const getVectorStore = [ + validator("param", (value) => + standardParse(getVectorStoreCommandParamsSchema, value), + ), +] as const; +export const modifyVectorStore = [ + validator("json", (value) => + standardParse(modifyVectorStoreCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(modifyVectorStoreCommandParamsSchema, value), + ), +] as const; +export const deleteVectorStore = [ + validator("param", (value) => + standardParse(deleteVectorStoreCommandParamsSchema, value), + ), +] as const; +export const listVectorStoreFiles = [ + validator("param", (value) => + standardParse(listVectorStoreFilesCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listVectorStoreFilesCommandQuerySchema, value), + ), +] as const; +export const createVectorStoreFile = [ + validator("json", (value) => + standardParse(createVectorStoreFileCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(createVectorStoreFileCommandParamsSchema, value), + ), +] as const; +export const getVectorStoreFile = [ + validator("param", (value) => + standardParse(getVectorStoreFileCommandParamsSchema, value), + ), +] as const; +export const deleteVectorStoreFile = [ + validator("param", (value) => + standardParse(deleteVectorStoreFileCommandParamsSchema, value), + ), +] as const; +export const createVectorStoreFileBatch = [ + validator("json", (value) => + standardParse(createVectorStoreFileBatchCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(createVectorStoreFileBatchCommandParamsSchema, value), + ), +] as const; +export const getVectorStoreFileBatch = [ + validator("param", (value) => + standardParse(getVectorStoreFileBatchCommandParamsSchema, value), + ), +] as const; +export const cancelVectorStoreFileBatch = [ + validator("param", (value) => + standardParse(cancelVectorStoreFileBatchCommandParamsSchema, value), + ), +] as const; +export const listFilesInVectorStoreBatch = [ + validator("param", (value) => + standardParse(listFilesInVectorStoreBatchCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listFilesInVectorStoreBatchCommandQuerySchema, value), + ), +] as const; +export const createBatch = [ + validator("json", (value) => + standardParse(createBatchCommandBodySchema, value), + ), +] as const; +export const listBatches = [ + validator("query", (value) => + standardParse(listBatchesCommandQuerySchema, value), + ), +] as const; +export const retrieveBatch = [ + validator("param", (value) => + standardParse(retrieveBatchCommandParamsSchema, value), + ), +] as const; +export const cancelBatch = [ + validator("param", (value) => + standardParse(cancelBatchCommandParamsSchema, value), + ), +] as const; +export const listauditlogs = [ + validator("query", (value) => + standardParse(listAuditLogsCommandQuerySchema, value), + ), +] as const; +export const listinvites = [ + validator("query", (value) => + standardParse(listInvitesCommandQuerySchema, value), + ), +] as const; +export const inviteUser = [ + validator("json", (value) => + standardParse(inviteUserCommandBodySchema, value), + ), +] as const; +export const retrieveinvite = [ + validator("param", (value) => + standardParse(retrieveInviteCommandParamsSchema, value), + ), +] as const; +export const deleteinvite = [ + validator("param", (value) => + standardParse(deleteInviteCommandParamsSchema, value), + ), +] as const; +export const listusers = [ + validator("query", (value) => + standardParse(listUsersCommandQuerySchema, value), + ), +] as const; +export const retrieveuser = [ + validator("param", (value) => + standardParse(retrieveUserCommandParamsSchema, value), + ), +] as const; +export const modifyuser = [ + validator("json", (value) => + standardParse(modifyUserCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(modifyUserCommandParamsSchema, value), + ), +] as const; +export const deleteuser = [ + validator("param", (value) => + standardParse(deleteUserCommandParamsSchema, value), + ), +] as const; +export const listprojects = [ + validator("query", (value) => + standardParse(listProjectsCommandQuerySchema, value), + ), +] as const; +export const createproject = [ + validator("json", (value) => + standardParse(createProjectCommandBodySchema, value), + ), +] as const; +export const retrieveproject = [ + validator("param", (value) => + standardParse(retrieveProjectCommandParamsSchema, value), + ), +] as const; +export const modifyproject = [ + validator("json", (value) => + standardParse(modifyProjectCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(modifyProjectCommandParamsSchema, value), + ), +] as const; +export const archiveproject = [ + validator("param", (value) => + standardParse(archiveProjectCommandParamsSchema, value), + ), +] as const; +export const listprojectusers = [ + validator("param", (value) => + standardParse(listProjectUsersCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listProjectUsersCommandQuerySchema, value), + ), +] as const; +export const createprojectuser = [ + validator("json", (value) => + standardParse(createProjectUserCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(createProjectUserCommandParamsSchema, value), + ), +] as const; +export const retrieveprojectuser = [ + validator("param", (value) => + standardParse(retrieveProjectUserCommandParamsSchema, value), + ), +] as const; +export const modifyprojectuser = [ + validator("json", (value) => + standardParse(modifyProjectUserCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(modifyProjectUserCommandParamsSchema, value), + ), +] as const; +export const deleteprojectuser = [ + validator("param", (value) => + standardParse(deleteProjectUserCommandParamsSchema, value), + ), +] as const; +export const listprojectserviceaccounts = [ + validator("param", (value) => + standardParse(listProjectServiceAccountsCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listProjectServiceAccountsCommandQuerySchema, value), + ), +] as const; +export const createprojectserviceaccount = [ + validator("json", (value) => + standardParse(createProjectServiceAccountCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(createProjectServiceAccountCommandParamsSchema, value), + ), +] as const; +export const retrieveprojectserviceaccount = [ + validator("param", (value) => + standardParse(retrieveProjectServiceAccountCommandParamsSchema, value), + ), +] as const; +export const deleteprojectserviceaccount = [ + validator("param", (value) => + standardParse(deleteProjectServiceAccountCommandParamsSchema, value), + ), +] as const; +export const listprojectapikeys = [ + validator("param", (value) => + standardParse(listProjectApiKeysCommandParamsSchema, value), + ), + validator("query", (value) => + standardParse(listProjectApiKeysCommandQuerySchema, value), + ), +] as const; +export const retrieveprojectapikey = [ + validator("param", (value) => + standardParse(retrieveProjectApiKeyCommandParamsSchema, value), + ), +] as const; +export const deleteprojectapikey = [ + validator("param", (value) => + standardParse(deleteProjectApiKeyCommandParamsSchema, value), + ), +] as const; diff --git a/__tests__/fixtures/petstore/PublicValibotHonoError.ts b/__tests__/fixtures/petstore/PublicValibotHonoError.ts deleted file mode 100644 index 67819ee..0000000 --- a/__tests__/fixtures/petstore/PublicValibotHonoError.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { CustomError } from "@block65/custom-error"; -import type * as v from "valibot"; - -export class PublicValibotHonoError extends CustomError { - static from( - err: v.ValiError< - | v.BaseSchema> - | v.BaseSchemaAsync> - >, - ) { - return new PublicValibotHonoError(err.message, err).addDetail({ - violations: err.issues.map((issue) => ({ - field: issue.path?.join(".") || "", - description: issue.message, - })), - description: err.message, - }); - } -} diff --git a/__tests__/fixtures/petstore/hono-valibot.ts b/__tests__/fixtures/petstore/hono-valibot.ts deleted file mode 100644 index 53d6654..0000000 --- a/__tests__/fixtures/petstore/hono-valibot.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { PublicValibotHonoError } from "@block65/rest-client"; -/** - * This file was auto generated by @block65/openapi-codegen - * - * WARN: Do not edit directly. - * - * Generated on 2026-06-09T09:17:26.648Z - * - */ -import { validator } from "hono/validator"; -import * as v from "valibot"; -import { - addPetCommandBodySchema, - deletePetCommandParamsSchema, - findPetByIdCommandParamsSchema, - findPetWrappedCommandParamsSchema, - findPetsCommandQuerySchema, -} from "./valibot.js"; - -function toPublicValibotHonoError(err: unknown): never { - if (err instanceof v.ValiError) { - throw PublicValibotHonoError.from(err); - } - throw err; -} - -export const findPets = [ - validator("query", (value) => { - return v - .parseAsync(findPetsCommandQuerySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const addPet = [ - validator("json", (value) => { - return v - .parseAsync(addPetCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const findpetbyid = [ - validator("param", (value) => { - return v - .parseAsync(findPetByIdCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deletePet = [ - validator("param", (value) => { - return v - .parseAsync(deletePetCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const findPetWrapped = [ - validator("param", (value) => { - return v - .parseAsync(findPetWrappedCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; diff --git a/__tests__/fixtures/petstore/hono.ts b/__tests__/fixtures/petstore/hono.ts new file mode 100644 index 0000000..9cecfbe --- /dev/null +++ b/__tests__/fixtures/petstore/hono.ts @@ -0,0 +1,53 @@ +import { PublicValidationError } from "@block65/rest-client"; +import type { StandardSchemaV1 } from "@standard-schema/spec"; +/** + * This file was auto generated by @block65/openapi-codegen + * + * WARN: Do not edit directly. + * + * Generated on 2026-09-02T06:46:59.013Z (rev 1624960f9ee835fe8e0e4b3f96e97255) + * + */ +import { validator } from "hono/validator"; +import { + addPetCommandBodySchema, + deletePetCommandParamsSchema, + findPetByIdCommandParamsSchema, + findPetWrappedCommandParamsSchema, + findPetsCommandQuerySchema, +} from "./valibot.js"; + +async function standardParse( + schema: TSchema, + value: unknown, +): Promise> { + const result = await schema["~standard"].validate(value); + if (result.issues) { + throw PublicValidationError.fromIssues(result.issues); + } + return result.value; +} + +export const findPets = [ + validator("query", (value) => + standardParse(findPetsCommandQuerySchema, value), + ), +] as const; +export const addPet = [ + validator("json", (value) => standardParse(addPetCommandBodySchema, value)), +] as const; +export const findpetbyid = [ + validator("param", (value) => + standardParse(findPetByIdCommandParamsSchema, value), + ), +] as const; +export const deletePet = [ + validator("param", (value) => + standardParse(deletePetCommandParamsSchema, value), + ), +] as const; +export const findPetWrapped = [ + validator("param", (value) => + standardParse(findPetWrappedCommandParamsSchema, value), + ), +] as const; diff --git a/__tests__/fixtures/test1/hono-valibot.ts b/__tests__/fixtures/test1/hono-valibot.ts deleted file mode 100644 index 7c85c69..0000000 --- a/__tests__/fixtures/test1/hono-valibot.ts +++ /dev/null @@ -1,208 +0,0 @@ -import { PublicValibotHonoError } from "@block65/rest-client"; -/** - * This file was auto generated by @block65/openapi-codegen - * - * WARN: Do not edit directly. - * - * Generated on 2026-06-09T09:17:30.892Z - * - */ -import { validator } from "hono/validator"; -import * as v from "valibot"; -import { - cancelSubscriptionCommandParamsSchema, - createBillingAccountCommandBodySchema, - createBillingSubscriptionCommandBodySchema, - createBillingSubscriptionCommandParamsSchema, - createPaymentMethodCommandParamsSchema, - deletePaymentMethodCommandParamsSchema, - getBillingAccountCommandParamsSchema, - getBillingAccountPortalCommandBodySchema, - getBillingAccountPortalCommandParamsSchema, - getOperationCommandParamsSchema, - getPaymentMethodCommandParamsSchema, - getPaymentMethodFromStripeCommandParamsSchema, - importBillingDataCommandParamsSchema, - linkBillingAccountCommandBodySchema, - linkBillingAccountCommandParamsSchema, - listBillingSubscriptionsCommandParamsSchema, - listPaymentMethodsCommandParamsSchema, - updateBillingAccountCommandBodySchema, - updateBillingAccountCommandParamsSchema, - updateBillingSubscriptionCommandBodySchema, - updateBillingSubscriptionCommandParamsSchema, - updateBillingSubscriptionPromoCodeCommandBodySchema, - updateBillingSubscriptionPromoCodeCommandParamsSchema, - updatePaymentMethodCommandBodySchema, - updatePaymentMethodCommandParamsSchema, -} from "./valibot.js"; - -function toPublicValibotHonoError(err: unknown): never { - if (err instanceof v.ValiError) { - throw PublicValibotHonoError.from(err); - } - throw err; -} - -export const importBillingData = [ - validator("param", (value) => { - return v - .parseAsync(importBillingDataCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getOperation = [ - validator("param", (value) => { - return v - .parseAsync(getOperationCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listBillingAccounts = [] as const; -export const createBillingAccount = [ - validator("json", (value) => { - return v - .parseAsync(createBillingAccountCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getBillingAccount = [ - validator("param", (value) => { - return v - .parseAsync(getBillingAccountCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const updateBillingAccount = [ - validator("json", (value) => { - return v - .parseAsync(updateBillingAccountCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(updateBillingAccountCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getBillingAccountPortal = [ - validator("json", (value) => { - return v - .parseAsync(getBillingAccountPortalCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(getBillingAccountPortalCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const linkBillingAccount = [ - validator("json", (value) => { - return v - .parseAsync(linkBillingAccountCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(linkBillingAccountCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listPaymentMethods = [ - validator("param", (value) => { - return v - .parseAsync(listPaymentMethodsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createPaymentMethod = [ - validator("param", (value) => { - return v - .parseAsync(createPaymentMethodCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getPaymentMethodFromStripe = [ - validator("param", (value) => { - return v - .parseAsync(getPaymentMethodFromStripeCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const getPaymentMethod = [ - validator("param", (value) => { - return v - .parseAsync(getPaymentMethodCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const updatePaymentMethod = [ - validator("json", (value) => { - return v - .parseAsync(updatePaymentMethodCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(updatePaymentMethodCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const deletePaymentMethod = [ - validator("param", (value) => { - return v - .parseAsync(deletePaymentMethodCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const listBillingSubscriptions = [ - validator("param", (value) => { - return v - .parseAsync(listBillingSubscriptionsCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const createBillingSubscription = [ - validator("json", (value) => { - return v - .parseAsync(createBillingSubscriptionCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(createBillingSubscriptionCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const updateBillingSubscription = [ - validator("json", (value) => { - return v - .parseAsync(updateBillingSubscriptionCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(updateBillingSubscriptionCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const cancelSubscription = [ - validator("param", (value) => { - return v - .parseAsync(cancelSubscriptionCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; -export const updateBillingSubscriptionPromoCode = [ - validator("json", (value) => { - return v - .parseAsync(updateBillingSubscriptionPromoCodeCommandBodySchema, value) - .catch(toPublicValibotHonoError); - }), - validator("param", (value) => { - return v - .parseAsync(updateBillingSubscriptionPromoCodeCommandParamsSchema, value) - .catch(toPublicValibotHonoError); - }), -] as const; diff --git a/__tests__/fixtures/test1/hono.ts b/__tests__/fixtures/test1/hono.ts new file mode 100644 index 0000000..1449ff5 --- /dev/null +++ b/__tests__/fixtures/test1/hono.ts @@ -0,0 +1,162 @@ +import { PublicValidationError } from "@block65/rest-client"; +import type { StandardSchemaV1 } from "@standard-schema/spec"; +/** + * This file was auto generated by @block65/openapi-codegen + * + * WARN: Do not edit directly. + * + * Generated on 2026-09-02T06:47:29.085Z (rev 0d4a775044bc0242a271cc11ed388cd9) + * + */ +import { validator } from "hono/validator"; +import { + cancelSubscriptionCommandParamsSchema, + createBillingAccountCommandBodySchema, + createBillingSubscriptionCommandBodySchema, + createBillingSubscriptionCommandParamsSchema, + createPaymentMethodCommandParamsSchema, + deletePaymentMethodCommandParamsSchema, + getBillingAccountCommandParamsSchema, + getBillingAccountPortalCommandBodySchema, + getBillingAccountPortalCommandParamsSchema, + getOperationCommandParamsSchema, + getPaymentMethodCommandParamsSchema, + getPaymentMethodFromStripeCommandParamsSchema, + importBillingDataCommandParamsSchema, + linkBillingAccountCommandBodySchema, + linkBillingAccountCommandParamsSchema, + listBillingSubscriptionsCommandParamsSchema, + listPaymentMethodsCommandParamsSchema, + updateBillingAccountCommandBodySchema, + updateBillingAccountCommandParamsSchema, + updateBillingSubscriptionCommandBodySchema, + updateBillingSubscriptionCommandParamsSchema, + updateBillingSubscriptionPromoCodeCommandBodySchema, + updateBillingSubscriptionPromoCodeCommandParamsSchema, + updatePaymentMethodCommandBodySchema, + updatePaymentMethodCommandParamsSchema, +} from "./valibot.js"; + +async function standardParse( + schema: TSchema, + value: unknown, +): Promise> { + const result = await schema["~standard"].validate(value); + if (result.issues) { + throw PublicValidationError.fromIssues(result.issues); + } + return result.value; +} + +export const importBillingData = [ + validator("param", (value) => + standardParse(importBillingDataCommandParamsSchema, value), + ), +] as const; +export const getOperation = [ + validator("param", (value) => + standardParse(getOperationCommandParamsSchema, value), + ), +] as const; +export const listBillingAccounts = [] as const; +export const createBillingAccount = [ + validator("json", (value) => + standardParse(createBillingAccountCommandBodySchema, value), + ), +] as const; +export const getBillingAccount = [ + validator("param", (value) => + standardParse(getBillingAccountCommandParamsSchema, value), + ), +] as const; +export const updateBillingAccount = [ + validator("json", (value) => + standardParse(updateBillingAccountCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(updateBillingAccountCommandParamsSchema, value), + ), +] as const; +export const getBillingAccountPortal = [ + validator("json", (value) => + standardParse(getBillingAccountPortalCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(getBillingAccountPortalCommandParamsSchema, value), + ), +] as const; +export const linkBillingAccount = [ + validator("json", (value) => + standardParse(linkBillingAccountCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(linkBillingAccountCommandParamsSchema, value), + ), +] as const; +export const listPaymentMethods = [ + validator("param", (value) => + standardParse(listPaymentMethodsCommandParamsSchema, value), + ), +] as const; +export const createPaymentMethod = [ + validator("param", (value) => + standardParse(createPaymentMethodCommandParamsSchema, value), + ), +] as const; +export const getPaymentMethodFromStripe = [ + validator("param", (value) => + standardParse(getPaymentMethodFromStripeCommandParamsSchema, value), + ), +] as const; +export const getPaymentMethod = [ + validator("param", (value) => + standardParse(getPaymentMethodCommandParamsSchema, value), + ), +] as const; +export const updatePaymentMethod = [ + validator("json", (value) => + standardParse(updatePaymentMethodCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(updatePaymentMethodCommandParamsSchema, value), + ), +] as const; +export const deletePaymentMethod = [ + validator("param", (value) => + standardParse(deletePaymentMethodCommandParamsSchema, value), + ), +] as const; +export const listBillingSubscriptions = [ + validator("param", (value) => + standardParse(listBillingSubscriptionsCommandParamsSchema, value), + ), +] as const; +export const createBillingSubscription = [ + validator("json", (value) => + standardParse(createBillingSubscriptionCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(createBillingSubscriptionCommandParamsSchema, value), + ), +] as const; +export const updateBillingSubscription = [ + validator("json", (value) => + standardParse(updateBillingSubscriptionCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(updateBillingSubscriptionCommandParamsSchema, value), + ), +] as const; +export const cancelSubscription = [ + validator("param", (value) => + standardParse(cancelSubscriptionCommandParamsSchema, value), + ), +] as const; +export const updateBillingSubscriptionPromoCode = [ + validator("json", (value) => + standardParse(updateBillingSubscriptionPromoCodeCommandBodySchema, value), + ), + validator("param", (value) => + standardParse(updateBillingSubscriptionPromoCodeCommandParamsSchema, value), + ), +] as const; diff --git a/__tests__/nullables.test.ts b/__tests__/nullables.test.ts index 724cb55..b3d8b59 100644 --- a/__tests__/nullables.test.ts +++ b/__tests__/nullables.test.ts @@ -353,7 +353,7 @@ test("header parameters", async () => { expect(result.commandsFile.getText()).toMatchSnapshot(); expect(result.commandsValidatedFile.getText()).toMatchSnapshot(); expect(result.valibotFile.getText()).toMatchSnapshot(); - expect(result.honoValibotFile.getText()).toMatchSnapshot(); + expect(result.honoFile.getText()).toMatchSnapshot(); }); test("input-only mode omits wire schemas", async () => { diff --git a/lib/hono-valibot.ts b/lib/hono.ts similarity index 59% rename from lib/hono-valibot.ts rename to lib/hono.ts index 93c5f3d..ee74b8a 100644 --- a/lib/hono-valibot.ts +++ b/lib/hono.ts @@ -3,15 +3,13 @@ import camelcase from "camelcase"; import type { Project, SourceFile } from "ts-morph"; import { VariableDeclarationKind } from "ts-morph"; -export function createHonoValibotFile( +export function createHonoFile( project: Project, outputDir: string, ): SourceFile { - const file = project.createSourceFile( - join(outputDir, "hono-valibot.ts"), - "", - { overwrite: true }, - ); + const file = project.createSourceFile(join(outputDir, "hono.ts"), "", { + overwrite: true, + }); file.addImportDeclaration({ moduleSpecifier: "hono/validator", @@ -19,32 +17,39 @@ export function createHonoValibotFile( }); file.addImportDeclaration({ - moduleSpecifier: "valibot", - namespaceImport: "v", + moduleSpecifier: "@standard-schema/spec", + namedImports: ["StandardSchemaV1"], + isTypeOnly: true, }); file.addImportDeclaration({ moduleSpecifier: "@block65/rest-client", - namedImports: ["PublicValibotHonoError"], + namedImports: ["PublicValidationError"], }); file.addFunction({ - name: "toPublicValibotHonoError", - parameters: [{ name: "err", type: "unknown" }], - returnType: "never", + name: "standardParse", + isAsync: true, + typeParameters: [{ name: "TSchema", constraint: "StandardSchemaV1" }], + parameters: [ + { name: "schema", type: "TSchema" }, + { name: "value", type: "unknown" }, + ], + returnType: "Promise>", statements: ` - if (err instanceof v.ValiError) { - throw PublicValibotHonoError.from(err); + const result = await schema["~standard"].validate(value); + if (result.issues) { + throw PublicValidationError.fromIssues(result.issues); } - throw err; + return result.value; `, }); return file; } -export function createHonoValibotMiddleware( - honoValibotFile: SourceFile, +export function createHonoMiddleware( + honoFile: SourceFile, exportName: string, schemas: { json?: string; @@ -54,7 +59,7 @@ export function createHonoValibotMiddleware( header?: string; }, ): void { - honoValibotFile.addVariableStatement({ + honoFile.addVariableStatement({ isExported: true, declarationKind: VariableDeclarationKind.Const, declarations: [ @@ -70,14 +75,8 @@ export function createHonoValibotMiddleware( ([t]) => t !== "header" && t !== "response", )) { writer.writeLine( - `validator(${JSON.stringify(target)}, (value) => {`, + `validator(${JSON.stringify(target)}, (value) => standardParse(${schemaName}, value)),`, ); - writer.indent(() => { - writer.writeLine( - `return v.parseAsync(${schemaName}, value).catch(toPublicValibotHonoError);`, - ); - }); - writer.writeLine("}),"); } }); writer.write("] as const"); @@ -87,15 +86,15 @@ export function createHonoValibotMiddleware( }); } -export function addValibotImportsToHonoValibotFile( - honoValibotFile: SourceFile, +export function addSchemaImportsToHonoFile( + honoFile: SourceFile, schemaNames: string[], ): void { if (schemaNames.length === 0) { return; } - honoValibotFile.addImportDeclaration({ + honoFile.addImportDeclaration({ moduleSpecifier: "./valibot.js", namedImports: schemaNames.toSorted(), }); diff --git a/lib/process-document.ts b/lib/process-document.ts index edca56d..e63c30a 100644 --- a/lib/process-document.ts +++ b/lib/process-document.ts @@ -19,10 +19,10 @@ import { } from "ts-morph"; import type { Simplify } from "type-fest"; import { - addValibotImportsToHonoValibotFile, - createHonoValibotFile, - createHonoValibotMiddleware, -} from "./hono-valibot.ts"; + addSchemaImportsToHonoFile, + createHonoFile, + createHonoMiddleware, +} from "./hono.ts"; import { registerTypesFromSchema, schemaToType } from "./process-schema.ts"; import { camelCase, @@ -1031,7 +1031,7 @@ export async function processOpenApiDocument( // Defer static schema attachment to commands-validated.ts. The lean // commands.ts file carries no schema imports — body/param/query - // schemas aren't read by rest-client anyway (hono-valibot.ts imports + // schemas aren't read by rest-client anyway (hono.ts imports // directly from valibot.ts for server middleware), and the response // schema lives on the validated subclass. // Wire variant is what rest-client + hono consume; falls back to @@ -1410,8 +1410,8 @@ export async function processOpenApiDocument( commandsValidatedFile.fixUnusedIdentifiers(); valibotFile.fixUnusedIdentifiers(); - // Generate hono-valibot file - const honoValibotFile = createHonoValibotFile(project, outputDir); + // Generate hono file + const honoFile = createHonoFile(project, outputDir); // Collect all schema names needed const schemaImports = new Set(); @@ -1424,14 +1424,14 @@ export async function processOpenApiDocument( } // Add imports from valibot.ts - addValibotImportsToHonoValibotFile(honoValibotFile, [...schemaImports]); + addSchemaImportsToHonoFile(honoFile, [...schemaImports]); // Generate middleware exports for each operation for (const op of allOperations) { - createHonoValibotMiddleware(honoValibotFile, op.exportName, op.schemas); + createHonoMiddleware(honoFile, op.exportName, op.schemas); } - honoValibotFile.fixUnusedIdentifiers(); + honoFile.fixUnusedIdentifiers(); return { commandsFile, @@ -1439,7 +1439,7 @@ export async function processOpenApiDocument( typesFile, mainFile, valibotFile, - honoValibotFile, + honoFile, enumsFile, }; } diff --git a/package.json b/package.json index c94c02f..4e40afc 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ }, "devDependencies": { "@block65/custom-error": "^14.1.0", - "@block65/rest-client": "^13.1.0", + "@block65/rest-client": "^14.0.0", + "@standard-schema/spec": "^1.1.0", "@tsconfig/node24": "^24.0.4", "@tsconfig/strictest": "^2.0.8", "@types/node": "^25.9.2", @@ -49,7 +50,7 @@ }, "peerDependencies": { "@block65/custom-error": "^14.1.0", - "@block65/rest-client": "^13.1.0", + "@block65/rest-client": "^14.0.0", "hono": "^4.12.23", "valibot": "^1.4.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3c8c49..5603488 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,8 +34,11 @@ importers: specifier: ^14.1.0 version: 14.1.0 '@block65/rest-client': - specifier: ^13.1.0 - version: 13.1.0(valibot@1.4.1(typescript@6.0.3)) + specifier: ^14.0.0 + version: 14.0.0(valibot@1.4.1(typescript@6.0.3)) + '@standard-schema/spec': + specifier: ^1.1.0 + version: 1.1.0 '@tsconfig/node24': specifier: ^24.0.4 version: 24.0.4 @@ -93,10 +96,10 @@ packages: '@block65/custom-error@14.1.0': resolution: {integrity: sha512-smbcm4A4TwTwKDxJz639scvwCSVtU8qmk/Em2n9P5NT2JLGeK/beRI8acUS/yuAK04LYQrjfDqUFSva4472OcQ==} - '@block65/rest-client@13.1.0': - resolution: {integrity: sha512-l/iM1VkV07BOBdPnrKbWjlKeflHLTFPIBGbWpRR4cbQQIJuLSyRaekvLlNarF+56lkZ4/kCfuVxJTgKrpVND8A==} + '@block65/rest-client@14.0.0': + resolution: {integrity: sha512-ErjE6EHsona8OgA2yoZWXdYPcs5xvDa8jS86tltaORbTki8BoQNM0VWMtZLGqIy6zt0hunLPDvyuWIViZKN7gA==} peerDependencies: - valibot: ^1.0.0 + valibot: ^1.4.1 peerDependenciesMeta: valibot: optional: true @@ -983,9 +986,10 @@ snapshots: dependencies: serialize-error: 13.0.1 - '@block65/rest-client@13.1.0(valibot@1.4.1(typescript@6.0.3))': + '@block65/rest-client@14.0.0(valibot@1.4.1(typescript@6.0.3))': dependencies: '@block65/custom-error': 14.1.0 + '@standard-schema/spec': 1.1.0 p-retry: 8.0.0 optionalDependencies: valibot: 1.4.1(typescript@6.0.3) From 6d341de174c09164395cc9e9dd948eebdc7ecf3a Mon Sep 17 00:00:00 2001 From: Max Holman Date: Wed, 2 Sep 2026 15:13:38 +0800 Subject: [PATCH 2/2] feat: leave generated files untouched when their content is unchanged The banner now carries a hash of the raw emitter output alongside the date; when a rebuild produces output hashing to the stamp already in the file, the write is skipped entirely. The comparison never sees the formatted text, so downstream formatters can't defeat it, and the 'Generated on' date only moves when the content does. Co-Authored-By: Claude Fable 5 --- .../fixtures/docker/commands-validated.ts | 2 +- __tests__/fixtures/docker/commands.ts | 2 +- __tests__/fixtures/docker/enums.ts | 2 +- __tests__/fixtures/docker/main.ts | 2 +- __tests__/fixtures/docker/types.ts | 2 +- __tests__/fixtures/docker/valibot.ts | 2 +- .../fixtures/openai/commands-validated.ts | 2 +- __tests__/fixtures/openai/commands.ts | 2 +- __tests__/fixtures/openai/enums.ts | 2 +- __tests__/fixtures/openai/main.ts | 2 +- __tests__/fixtures/openai/types.ts | 2 +- __tests__/fixtures/openai/valibot.ts | 2 +- .../fixtures/petstore/commands-validated.ts | 2 +- __tests__/fixtures/petstore/commands.ts | 2 +- __tests__/fixtures/petstore/main.ts | 2 +- __tests__/fixtures/petstore/types.ts | 2 +- __tests__/fixtures/petstore/valibot.ts | 2 +- .../fixtures/test1/commands-validated.ts | 2 +- __tests__/fixtures/test1/commands.ts | 2 +- __tests__/fixtures/test1/enums.ts | 2 +- __tests__/fixtures/test1/main.ts | 2 +- __tests__/fixtures/test1/types.ts | 2 +- __tests__/fixtures/test1/valibot.ts | 2 +- lib/build.ts | 39 +++++++++++++------ 24 files changed, 51 insertions(+), 34 deletions(-) diff --git a/__tests__/fixtures/docker/commands-validated.ts b/__tests__/fixtures/docker/commands-validated.ts index 140fa47..bfe2688 100644 --- a/__tests__/fixtures/docker/commands-validated.ts +++ b/__tests__/fixtures/docker/commands-validated.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:18:39.851Z + * Generated on 2026-09-02T06:50:52.307Z (rev 849d2ab9133fcb2a14ee14ff782a9b1c) * */ /** eslint-disable max-classes */ diff --git a/__tests__/fixtures/docker/commands.ts b/__tests__/fixtures/docker/commands.ts index dd63b0f..f5bbc8c 100644 --- a/__tests__/fixtures/docker/commands.ts +++ b/__tests__/fixtures/docker/commands.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:18:39.851Z + * Generated on 2026-09-02T06:50:50.056Z (rev 7b147ca0b88e6b555f4f9a5e18d17f53) * */ /** eslint-disable max-classes */ diff --git a/__tests__/fixtures/docker/enums.ts b/__tests__/fixtures/docker/enums.ts index acf6bea..82911fd 100644 --- a/__tests__/fixtures/docker/enums.ts +++ b/__tests__/fixtures/docker/enums.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:18:39.851Z + * Generated on 2026-09-02T06:50:52.317Z (rev 829fd9f0a511b204e1eed4924527927b) * */ /** diff --git a/__tests__/fixtures/docker/main.ts b/__tests__/fixtures/docker/main.ts index c5d955e..7ab8c44 100644 --- a/__tests__/fixtures/docker/main.ts +++ b/__tests__/fixtures/docker/main.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:18:39.851Z + * Generated on 2026-09-02T06:50:50.541Z (rev 58de2e8988d1887aa3674def93a3f438) * */ import { diff --git a/__tests__/fixtures/docker/types.ts b/__tests__/fixtures/docker/types.ts index 69b5c09..564d1d3 100644 --- a/__tests__/fixtures/docker/types.ts +++ b/__tests__/fixtures/docker/types.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:18:39.851Z + * Generated on 2026-09-02T06:50:50.156Z (rev 62542d7746647f792d6ff83347d682c9) * */ import type { Jsonifiable, UndefinedOnPartialDeep } from "type-fest"; diff --git a/__tests__/fixtures/docker/valibot.ts b/__tests__/fixtures/docker/valibot.ts index d73aaa3..8d40785 100644 --- a/__tests__/fixtures/docker/valibot.ts +++ b/__tests__/fixtures/docker/valibot.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:18:39.851Z + * Generated on 2026-09-02T06:50:50.557Z (rev f21d316668b7a29382a1d94d2b4efb32) * */ import * as v from "valibot"; diff --git a/__tests__/fixtures/openai/commands-validated.ts b/__tests__/fixtures/openai/commands-validated.ts index 41813a9..40e3af7 100644 --- a/__tests__/fixtures/openai/commands-validated.ts +++ b/__tests__/fixtures/openai/commands-validated.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:36.716Z + * Generated on 2026-09-02T06:48:37.814Z (rev 9c586c6cd3b6f9d902e16c1b55e764ca) * */ /** eslint-disable max-classes */ diff --git a/__tests__/fixtures/openai/commands.ts b/__tests__/fixtures/openai/commands.ts index 71fd8a0..5e07995 100644 --- a/__tests__/fixtures/openai/commands.ts +++ b/__tests__/fixtures/openai/commands.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:36.716Z + * Generated on 2026-09-02T06:48:37.094Z (rev 91f4e2248d61c60590434de8fcd2d200) * */ /** eslint-disable max-classes */ diff --git a/__tests__/fixtures/openai/enums.ts b/__tests__/fixtures/openai/enums.ts index ff52e70..d9a3a40 100644 --- a/__tests__/fixtures/openai/enums.ts +++ b/__tests__/fixtures/openai/enums.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:36.716Z + * Generated on 2026-09-02T06:48:37.833Z (rev b88a787c96c9710608d0e7d95dcd195e) * */ /** The role of the author of a message */ diff --git a/__tests__/fixtures/openai/main.ts b/__tests__/fixtures/openai/main.ts index 4918a59..c2ee296 100644 --- a/__tests__/fixtures/openai/main.ts +++ b/__tests__/fixtures/openai/main.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:36.716Z + * Generated on 2026-09-02T06:48:37.323Z (rev 3a38968a76e2e1a599ebd4bfb356dd90) * */ import { diff --git a/__tests__/fixtures/openai/types.ts b/__tests__/fixtures/openai/types.ts index 8125b91..423bfc5 100644 --- a/__tests__/fixtures/openai/types.ts +++ b/__tests__/fixtures/openai/types.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:36.716Z + * Generated on 2026-09-02T06:48:37.172Z (rev 4c3c0dbbe0176a5d0dc247ea0eeb36db) * */ import type { Jsonifiable, UndefinedOnPartialDeep } from "type-fest"; diff --git a/__tests__/fixtures/openai/valibot.ts b/__tests__/fixtures/openai/valibot.ts index 26e69ec..e72910e 100644 --- a/__tests__/fixtures/openai/valibot.ts +++ b/__tests__/fixtures/openai/valibot.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:36.716Z + * Generated on 2026-09-02T06:48:37.334Z (rev df9b206378179b4d04211d8b52bb9dc1) * */ import * as v from "valibot"; diff --git a/__tests__/fixtures/petstore/commands-validated.ts b/__tests__/fixtures/petstore/commands-validated.ts index bd859a5..e703c72 100644 --- a/__tests__/fixtures/petstore/commands-validated.ts +++ b/__tests__/fixtures/petstore/commands-validated.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:26.648Z + * Generated on 2026-09-02T06:46:59.018Z (rev b99c2835e3bb260a18d4ee3fd099d40f) * */ /** eslint-disable max-classes */ diff --git a/__tests__/fixtures/petstore/commands.ts b/__tests__/fixtures/petstore/commands.ts index 0e21cc8..97bf681 100644 --- a/__tests__/fixtures/petstore/commands.ts +++ b/__tests__/fixtures/petstore/commands.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:26.648Z + * Generated on 2026-09-02T06:46:58.977Z (rev 39173c31da87c621d0130dcfd3176611) * */ /** eslint-disable max-classes */ diff --git a/__tests__/fixtures/petstore/main.ts b/__tests__/fixtures/petstore/main.ts index 1fbc3bf..9c3b59e 100644 --- a/__tests__/fixtures/petstore/main.ts +++ b/__tests__/fixtures/petstore/main.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:26.648Z + * Generated on 2026-09-02T06:46:58.998Z (rev c82580757663b9c3a72f0677fdf303aa) * */ import { diff --git a/__tests__/fixtures/petstore/types.ts b/__tests__/fixtures/petstore/types.ts index a325523..a532801 100644 --- a/__tests__/fixtures/petstore/types.ts +++ b/__tests__/fixtures/petstore/types.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:26.648Z + * Generated on 2026-09-02T06:46:58.991Z (rev ba39f344891e60d7b6684b4505d0d7c3) * */ import type { UndefinedOnPartialDeep } from "type-fest"; diff --git a/__tests__/fixtures/petstore/valibot.ts b/__tests__/fixtures/petstore/valibot.ts index 991e021..420fb9e 100644 --- a/__tests__/fixtures/petstore/valibot.ts +++ b/__tests__/fixtures/petstore/valibot.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:26.648Z + * Generated on 2026-09-02T06:46:59.002Z (rev d50866d543f40787b269c953152070c3) * */ import * as v from "valibot"; diff --git a/__tests__/fixtures/test1/commands-validated.ts b/__tests__/fixtures/test1/commands-validated.ts index 2d71ba4..21ce1a9 100644 --- a/__tests__/fixtures/test1/commands-validated.ts +++ b/__tests__/fixtures/test1/commands-validated.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:30.892Z + * Generated on 2026-09-02T06:47:29.095Z (rev 27b0e377b8f23b99910fed036d148bea) * */ /** eslint-disable max-classes */ diff --git a/__tests__/fixtures/test1/commands.ts b/__tests__/fixtures/test1/commands.ts index 5443713..df3f6ec 100644 --- a/__tests__/fixtures/test1/commands.ts +++ b/__tests__/fixtures/test1/commands.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:30.892Z + * Generated on 2026-09-02T06:47:28.988Z (rev 54c0bfa225dd51846825714196acca64) * */ /** eslint-disable max-classes */ diff --git a/__tests__/fixtures/test1/enums.ts b/__tests__/fixtures/test1/enums.ts index 864ef8f..7c5180d 100644 --- a/__tests__/fixtures/test1/enums.ts +++ b/__tests__/fixtures/test1/enums.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:30.892Z + * Generated on 2026-09-02T06:47:29.101Z (rev 6e0ac5f0811859a075f1b40b4001cc15) * */ export const nullableStatus = ["active", "paused", "cancelled"] as const; diff --git a/__tests__/fixtures/test1/main.ts b/__tests__/fixtures/test1/main.ts index c28da93..3a3486c 100644 --- a/__tests__/fixtures/test1/main.ts +++ b/__tests__/fixtures/test1/main.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:30.892Z + * Generated on 2026-09-02T06:47:29.035Z (rev 283c76ce021b35c752ebe4def51cd486) * */ import { diff --git a/__tests__/fixtures/test1/types.ts b/__tests__/fixtures/test1/types.ts index 1471049..ab685e0 100644 --- a/__tests__/fixtures/test1/types.ts +++ b/__tests__/fixtures/test1/types.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:30.892Z + * Generated on 2026-09-02T06:47:29.016Z (rev 1a6ed54de7af70701ab758c0ac1553bd) * */ import type { Jsonifiable, UndefinedOnPartialDeep } from "type-fest"; diff --git a/__tests__/fixtures/test1/valibot.ts b/__tests__/fixtures/test1/valibot.ts index cca4d52..8092927 100644 --- a/__tests__/fixtures/test1/valibot.ts +++ b/__tests__/fixtures/test1/valibot.ts @@ -3,7 +3,7 @@ * * WARN: Do not edit directly. * - * Generated on 2026-06-09T09:17:30.892Z + * Generated on 2026-09-02T06:47:29.040Z (rev 34a7feb953b29908bf66a3a8104b7ad1) * */ import * as v from "valibot"; diff --git a/lib/build.ts b/lib/build.ts index a6f928c..c928f0e 100644 --- a/lib/build.ts +++ b/lib/build.ts @@ -1,4 +1,5 @@ -import { writeFile } from "node:fs/promises"; +import { createHash } from "node:crypto"; +import { readFile, writeFile } from "node:fs/promises"; import type { oas31 } from "openapi3-ts"; import { type CodegenOptions, @@ -15,13 +16,14 @@ export async function build( with: { type: "json" }, })) as { default: oas31.OpenAPIObject }; - const banner = ` + const banner = (rev: string) => + ` /** * This file was auto generated by @block65/openapi-codegen * * WARN: Do not edit directly. * - * Generated on ${new Date().toISOString()} + * Generated on ${new Date().toISOString()} (rev ${rev}) * */`.trim(); @@ -31,7 +33,7 @@ export async function build( typesFile, mainFile, valibotFile, - honoValibotFile, + honoFile, enumsFile, } = await processOpenApiDocument(outputDir, apischema.default, tags, options); @@ -40,7 +42,7 @@ export async function build( typesFile, mainFile, valibotFile, - honoValibotFile, + honoFile, ...(commandsValidatedFile.getStatements().length > 0 ? [commandsValidatedFile] : []), @@ -52,16 +54,31 @@ export async function build( // eslint-disable-next-line no-restricted-syntax for await (const file of files) { - try { - file.insertStatements(0, banner); - file.formatText(); + // The existing file has usually been reformatted (oxfmt etc.), so its + // bytes never match the raw emitter output. Instead of comparing text, + // each file's banner carries a hash of the raw output that produced it: + // when the fresh output hashes to the stamp already in the file, the + // content is unchanged and the file (and its date) is left untouched. + const rev = createHash("sha256") + .update(file.getFullText()) + .digest("hex") + .slice(0, 32); - await file.save(); + const existing = await readFile(file.getFilePath(), "utf8").catch( + () => undefined, + ); + + if (existing?.includes(`(rev ${rev})`)) { + continue; + } - await writeFile(file.getFilePath(), file.getFullText()); + try { + file.insertStatements(0, banner(rev)); + file.formatText(); } catch (err) { console.warn(err); - await writeFile(file.getFilePath(), file.getFullText()); } + + await writeFile(file.getFilePath(), file.getFullText()); } }