diff --git a/docs/contributing/frontend/workflows.md b/docs/contributing/frontend/workflows.md index b190003884..533419e070 100644 --- a/docs/contributing/frontend/workflows.md +++ b/docs/contributing/frontend/workflows.md @@ -297,7 +297,7 @@ Migration logic is in [migrations.ts]. [pydantic]: https://github.com/pydantic/pydantic 'pydantic' -[zod]: https://github.com/colinhacks/zod 'zod/v4' +[zod]: https://github.com/colinhacks/zod 'zod' [openapi-types]: https://github.com/kogosoftwarellc/open-api/tree/main/packages/openapi-types 'openapi-types' [reactflow]: https://github.com/xyflow/xyflow 'reactflow' [reactflow-concepts]: https://reactflow.dev/learn/concepts/terms-and-definitions diff --git a/invokeai/frontend/web/package.json b/invokeai/frontend/web/package.json index a0a528ddac..dbe513e6c7 100644 --- a/invokeai/frontend/web/package.json +++ b/invokeai/frontend/web/package.json @@ -103,7 +103,7 @@ "use-debounce": "^10.0.5", "use-device-pixel-ratio": "^1.1.2", "uuid": "^11.1.0", - "zod": "^3.25.67", + "zod": "^4.0.5", "zod-validation-error": "^3.5.2" }, "peerDependencies": { diff --git a/invokeai/frontend/web/pnpm-lock.yaml b/invokeai/frontend/web/pnpm-lock.yaml index 25198cbbd8..b1dc0efc00 100644 --- a/invokeai/frontend/web/pnpm-lock.yaml +++ b/invokeai/frontend/web/pnpm-lock.yaml @@ -201,11 +201,11 @@ importers: specifier: ^11.1.0 version: 11.1.0 zod: - specifier: ^3.25.67 - version: 3.25.76 + specifier: ^4.0.5 + version: 4.0.5 zod-validation-error: specifier: ^3.5.2 - version: 3.5.3(zod@3.25.76) + version: 3.5.3(zod@4.0.5) devDependencies: '@eslint/compat': specifier: ^1.3.1 @@ -4543,6 +4543,9 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.0.5: + resolution: {integrity: sha512-/5UuuRPStvHXu7RS+gmvRf4NXrNxpSllGwDnCBcJZtQsKrviYXm54yDGV2KYNLT5kq0lHGcl7lqWJLgSaG+tgA==} + zustand@4.5.7: resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} engines: {node: '>=12.7.0'} @@ -9103,8 +9106,14 @@ snapshots: dependencies: zod: 3.25.76 + zod-validation-error@3.5.3(zod@4.0.5): + dependencies: + zod: 4.0.5 + zod@3.25.76: {} + zod@4.0.5: {} + zustand@4.5.7(@types/react@18.3.23)(immer@10.1.1)(react@18.3.1): dependencies: use-sync-external-store: 1.5.0(react@18.3.1) diff --git a/invokeai/frontend/web/src/app/logging/logger.ts b/invokeai/frontend/web/src/app/logging/logger.ts index 8299f9f3ad..6b0cb1a298 100644 --- a/invokeai/frontend/web/src/app/logging/logger.ts +++ b/invokeai/frontend/web/src/app/logging/logger.ts @@ -2,7 +2,7 @@ import { createLogWriter } from '@roarr/browser-log-writer'; import { atom } from 'nanostores'; import type { Logger, MessageSerializer } from 'roarr'; import { ROARR, Roarr } from 'roarr'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const serializeMessage: MessageSerializer = (message) => { return JSON.stringify(message); diff --git a/invokeai/frontend/web/src/common/util/zodUtils.ts b/invokeai/frontend/web/src/common/util/zodUtils.ts index 634a06b8b1..10506736e1 100644 --- a/invokeai/frontend/web/src/common/util/zodUtils.ts +++ b/invokeai/frontend/web/src/common/util/zodUtils.ts @@ -1,4 +1,4 @@ -import type { z } from 'zod/v4'; +import type { z } from 'zod'; /** * Helper to create a type guard from a zod schema. The type guard will infer the schema's TS type. diff --git a/invokeai/frontend/web/src/features/controlLayers/components/Transform/TransformFitToBboxButtons.tsx b/invokeai/frontend/web/src/features/controlLayers/components/Transform/TransformFitToBboxButtons.tsx index 8fb8f3dacb..b76e7632f1 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/Transform/TransformFitToBboxButtons.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/Transform/TransformFitToBboxButtons.tsx @@ -6,7 +6,7 @@ import { memo, useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import type { Equals } from 'tsafe'; import { assert } from 'tsafe'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zMode = z.enum(['fill', 'contain', 'cover']); type Mode = z.infer; diff --git a/invokeai/frontend/web/src/features/controlLayers/store/canvasSettingsSlice.ts b/invokeai/frontend/web/src/features/controlLayers/store/canvasSettingsSlice.ts index 3352847fba..ed0768da58 100644 --- a/invokeai/frontend/web/src/features/controlLayers/store/canvasSettingsSlice.ts +++ b/invokeai/frontend/web/src/features/controlLayers/store/canvasSettingsSlice.ts @@ -2,7 +2,7 @@ import type { PayloadAction, Selector } from '@reduxjs/toolkit'; import { createSelector, createSlice } from '@reduxjs/toolkit'; import type { PersistConfig, RootState } from 'app/store/store'; import { zRgbaColor } from 'features/controlLayers/store/types'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zAutoSwitchMode = z.enum(['off', 'switch_on_start', 'switch_on_finish']); diff --git a/invokeai/frontend/web/src/features/controlLayers/store/filters.ts b/invokeai/frontend/web/src/features/controlLayers/store/filters.ts index 091905b51f..9373031e11 100644 --- a/invokeai/frontend/web/src/features/controlLayers/store/filters.ts +++ b/invokeai/frontend/web/src/features/controlLayers/store/filters.ts @@ -4,7 +4,7 @@ import { zModelIdentifierField } from 'features/nodes/types/common'; import { Graph } from 'features/nodes/util/graph/generation/Graph'; import type { ControlLoRAModelConfig, ControlNetModelConfig, T2IAdapterModelConfig } from 'services/api/types'; import { assert } from 'tsafe'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zAjustImageChannels = z.enum([ 'Red (RGBA)', diff --git a/invokeai/frontend/web/src/features/controlLayers/store/types.test.ts b/invokeai/frontend/web/src/features/controlLayers/store/types.test.ts index a8701580ba..43d217c423 100644 --- a/invokeai/frontend/web/src/features/controlLayers/store/types.test.ts +++ b/invokeai/frontend/web/src/features/controlLayers/store/types.test.ts @@ -21,7 +21,7 @@ import type { Invocation } from 'services/api/types'; import type { Equals } from 'tsafe'; import { assert } from 'tsafe'; import { describe, test } from 'vitest'; -import type { z } from 'zod/v4'; +import type { z } from 'zod'; import type { CanvasEntityIdentifier, diff --git a/invokeai/frontend/web/src/features/controlLayers/store/types.ts b/invokeai/frontend/web/src/features/controlLayers/store/types.ts index 661b0097ea..85dc44e38f 100644 --- a/invokeai/frontend/web/src/features/controlLayers/store/types.ts +++ b/invokeai/frontend/web/src/features/controlLayers/store/types.ts @@ -31,7 +31,7 @@ import { } from 'features/parameters/types/parameterSchemas'; import { getImageDTOSafe } from 'services/api/endpoints/images'; import type { JsonObject } from 'type-fest'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zId = z.string().min(1); const zName = z.string().min(1).nullable(); diff --git a/invokeai/frontend/web/src/features/dnd/FullscreenDropzone.tsx b/invokeai/frontend/web/src/features/dnd/FullscreenDropzone.tsx index bb890ed7eb..f10b5b9d59 100644 --- a/invokeai/frontend/web/src/features/dnd/FullscreenDropzone.tsx +++ b/invokeai/frontend/web/src/features/dnd/FullscreenDropzone.tsx @@ -20,7 +20,7 @@ import { useTranslation } from 'react-i18next'; import { uploadImages } from 'services/api/endpoints/images'; import { useBoardName } from 'services/api/hooks/useBoardName'; import type { UploadImageArg } from 'services/api/types'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const ACCEPTED_IMAGE_TYPES = ['image/png', 'image/jpg', 'image/jpeg', 'image/webp']; const ACCEPTED_FILE_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.webp']; diff --git a/invokeai/frontend/web/src/features/dynamicPrompts/store/dynamicPromptsSlice.ts b/invokeai/frontend/web/src/features/dynamicPrompts/store/dynamicPromptsSlice.ts index bb4a2b8041..741c415f38 100644 --- a/invokeai/frontend/web/src/features/dynamicPrompts/store/dynamicPromptsSlice.ts +++ b/invokeai/frontend/web/src/features/dynamicPrompts/store/dynamicPromptsSlice.ts @@ -2,7 +2,7 @@ import type { PayloadAction, Selector } from '@reduxjs/toolkit'; import { createSelector, createSlice } from '@reduxjs/toolkit'; import type { PersistConfig, RootState } from 'app/store/store'; import { buildZodTypeGuard } from 'common/util/zodUtils'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zSeedBehaviour = z.enum(['PER_ITERATION', 'PER_PROMPT']); export const isSeedBehaviour = buildZodTypeGuard(zSeedBehaviour); diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsListSortControls.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsListSortControls.tsx index ccf4137e3d..e4ed79189b 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsListSortControls.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsListSortControls.tsx @@ -5,7 +5,7 @@ import { selectBoardsListOrderBy, selectBoardsListOrderDir } from 'features/gall import { boardsListOrderByChanged, boardsListOrderDirChanged } from 'features/gallery/store/gallerySlice'; import { memo, useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zOrderBy = z.enum(['created_at', 'board_name']); type OrderBy = z.infer; diff --git a/invokeai/frontend/web/src/features/metadata/parsing.tsx b/invokeai/frontend/web/src/features/metadata/parsing.tsx index b01ee5cc2a..34e032473f 100644 --- a/invokeai/frontend/web/src/features/metadata/parsing.tsx +++ b/invokeai/frontend/web/src/features/metadata/parsing.tsx @@ -92,7 +92,7 @@ import { useTranslation } from 'react-i18next'; import { modelsApi } from 'services/api/endpoints/models'; import type { AnyModelConfig, ModelType } from 'services/api/types'; import { assert } from 'tsafe'; -import z from 'zod/v4'; +import z from 'zod'; const MetadataLabel = ({ i18nKey }: { i18nKey: string }) => { const { t } = useTranslation(); diff --git a/invokeai/frontend/web/src/features/nodes/components/sidePanel/workflow/WorkflowLibrary/WorkflowSortControl.tsx b/invokeai/frontend/web/src/features/nodes/components/sidePanel/workflow/WorkflowLibrary/WorkflowSortControl.tsx index 322f8d775c..8f58e2a7c0 100644 --- a/invokeai/frontend/web/src/features/nodes/components/sidePanel/workflow/WorkflowLibrary/WorkflowSortControl.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/sidePanel/workflow/WorkflowLibrary/WorkflowSortControl.tsx @@ -11,7 +11,7 @@ import { import type { ChangeEvent } from 'react'; import { useCallback, useEffect, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zOrderBy = z.enum(['opened_at', 'created_at', 'updated_at', 'name']); type OrderBy = z.infer; diff --git a/invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts b/invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts index 40182f8cfc..018ce29b4b 100644 --- a/invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts +++ b/invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts @@ -127,7 +127,7 @@ import { import { atom, computed } from 'nanostores'; import type { MouseEvent } from 'react'; import type { UndoableOptions } from 'redux-undo'; -import type { z } from 'zod/v4'; +import type { z } from 'zod'; import type { PendingConnection, Templates } from './types'; diff --git a/invokeai/frontend/web/src/features/nodes/types/common.ts b/invokeai/frontend/web/src/features/nodes/types/common.ts index e674949e44..1c9b4ec8ee 100644 --- a/invokeai/frontend/web/src/features/nodes/types/common.ts +++ b/invokeai/frontend/web/src/features/nodes/types/common.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; // #region Field data schemas export const zImageField = z.object({ diff --git a/invokeai/frontend/web/src/features/nodes/types/field.ts b/invokeai/frontend/web/src/features/nodes/types/field.ts index 4021f85fbf..af5132b394 100644 --- a/invokeai/frontend/web/src/features/nodes/types/field.ts +++ b/invokeai/frontend/web/src/features/nodes/types/field.ts @@ -6,7 +6,7 @@ import MersenneTwister from 'mtwist'; import { boardsApi } from 'services/api/endpoints/boards'; import { utilitiesApi } from 'services/api/endpoints/utilities'; import { assert } from 'tsafe'; -import { z } from 'zod/v4'; +import { z } from 'zod'; import type { ImageField } from './common'; import { zBoardField, zColorField, zImageField, zModelIdentifierField, zSchedulerField } from './common'; diff --git a/invokeai/frontend/web/src/features/nodes/types/invocation.ts b/invokeai/frontend/web/src/features/nodes/types/invocation.ts index 4c018fb887..c2435ecfb8 100644 --- a/invokeai/frontend/web/src/features/nodes/types/invocation.ts +++ b/invokeai/frontend/web/src/features/nodes/types/invocation.ts @@ -1,5 +1,5 @@ import type { Edge, Node } from '@xyflow/react'; -import { z } from 'zod/v4'; +import { z } from 'zod'; import { zClassification, zProgressImage } from './common'; import { zFieldInputInstance, zFieldInputTemplate, zFieldOutputTemplate } from './field'; diff --git a/invokeai/frontend/web/src/features/nodes/types/semver.ts b/invokeai/frontend/web/src/features/nodes/types/semver.ts index c14b88a43a..3ba330eac4 100644 --- a/invokeai/frontend/web/src/features/nodes/types/semver.ts +++ b/invokeai/frontend/web/src/features/nodes/types/semver.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; // Schemas and types for working with semver diff --git a/invokeai/frontend/web/src/features/nodes/types/v1/workflowV1.ts b/invokeai/frontend/web/src/features/nodes/types/v1/workflowV1.ts index b25dbef7c0..35361ad230 100644 --- a/invokeai/frontend/web/src/features/nodes/types/v1/workflowV1.ts +++ b/invokeai/frontend/web/src/features/nodes/types/v1/workflowV1.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; // WorkflowV1 Schema diff --git a/invokeai/frontend/web/src/features/nodes/types/v2/common.ts b/invokeai/frontend/web/src/features/nodes/types/v2/common.ts index eb598e946f..8613076132 100644 --- a/invokeai/frontend/web/src/features/nodes/types/v2/common.ts +++ b/invokeai/frontend/web/src/features/nodes/types/v2/common.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; // #region Field data schemas export const zImageField = z.object({ diff --git a/invokeai/frontend/web/src/features/nodes/types/v2/field.ts b/invokeai/frontend/web/src/features/nodes/types/v2/field.ts index a3085228e5..b4e7e68b06 100644 --- a/invokeai/frontend/web/src/features/nodes/types/v2/field.ts +++ b/invokeai/frontend/web/src/features/nodes/types/v2/field.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; import { zBoardField, diff --git a/invokeai/frontend/web/src/features/nodes/types/v2/invocation.ts b/invokeai/frontend/web/src/features/nodes/types/v2/invocation.ts index 02f13c781f..7f5d985938 100644 --- a/invokeai/frontend/web/src/features/nodes/types/v2/invocation.ts +++ b/invokeai/frontend/web/src/features/nodes/types/v2/invocation.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; import { zFieldInputInstance, zFieldOutputInstance } from './field'; import { zSemVer } from './semver'; diff --git a/invokeai/frontend/web/src/features/nodes/types/v2/semver.ts b/invokeai/frontend/web/src/features/nodes/types/v2/semver.ts index 2a93f85b49..1b76577938 100644 --- a/invokeai/frontend/web/src/features/nodes/types/v2/semver.ts +++ b/invokeai/frontend/web/src/features/nodes/types/v2/semver.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; // Schemas and types for working with semver diff --git a/invokeai/frontend/web/src/features/nodes/types/v2/workflow.ts b/invokeai/frontend/web/src/features/nodes/types/v2/workflow.ts index 299adabda7..511a28cdc3 100644 --- a/invokeai/frontend/web/src/features/nodes/types/v2/workflow.ts +++ b/invokeai/frontend/web/src/features/nodes/types/v2/workflow.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; import { zFieldIdentifier } from './field'; import { zInvocationNodeData, zNotesNodeData } from './invocation'; diff --git a/invokeai/frontend/web/src/features/nodes/types/workflow.ts b/invokeai/frontend/web/src/features/nodes/types/workflow.ts index 237f0cc855..5f73f8fcb0 100644 --- a/invokeai/frontend/web/src/features/nodes/types/workflow.ts +++ b/invokeai/frontend/web/src/features/nodes/types/workflow.ts @@ -1,5 +1,5 @@ import { getPrefixedId } from 'features/controlLayers/konva/util'; -import { z } from 'zod/v4'; +import { z } from 'zod'; import type { FieldType } from './field'; import { zFieldIdentifier } from './field'; diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/generation/Graph.test.ts b/invokeai/frontend/web/src/features/nodes/util/graph/generation/Graph.test.ts index c5032271c4..24ef712357 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/generation/Graph.test.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/generation/Graph.test.ts @@ -3,7 +3,7 @@ import { Graph } from 'features/nodes/util/graph/generation/Graph'; import type { AnyInvocation, Invocation } from 'services/api/types'; import { assert, AssertionError, is } from 'tsafe'; import { describe, expect, it } from 'vitest'; -import { z } from 'zod/v4'; +import { z } from 'zod'; describe('Graph', () => { describe('constructor', () => { diff --git a/invokeai/frontend/web/src/features/nodes/util/workflow/migrations.ts b/invokeai/frontend/web/src/features/nodes/util/workflow/migrations.ts index 70f9f45e04..32971a02d0 100644 --- a/invokeai/frontend/web/src/features/nodes/util/workflow/migrations.ts +++ b/invokeai/frontend/web/src/features/nodes/util/workflow/migrations.ts @@ -13,7 +13,7 @@ import { zWorkflowV2 } from 'features/nodes/types/v2/workflow'; import type { WorkflowV3 } from 'features/nodes/types/workflow'; import { zWorkflowV3 } from 'features/nodes/types/workflow'; import { t } from 'i18next'; -import { z } from 'zod/v4'; +import { z } from 'zod'; /** * Helper schema to extract the version from a workflow. diff --git a/invokeai/frontend/web/src/features/parameters/types/parameterSchemas.ts b/invokeai/frontend/web/src/features/parameters/types/parameterSchemas.ts index 356ee91ab7..5421ae162f 100644 --- a/invokeai/frontend/web/src/features/parameters/types/parameterSchemas.ts +++ b/invokeai/frontend/web/src/features/parameters/types/parameterSchemas.ts @@ -2,7 +2,7 @@ import { NUMPY_RAND_MAX } from 'app/constants'; import { roundToMultiple } from 'common/util/roundDownToMultiple'; import { buildZodTypeGuard } from 'common/util/zodUtils'; import { zModelIdentifierField, zSchedulerField } from 'features/nodes/types/common'; -import { z } from 'zod/v4'; +import { z } from 'zod'; /** * Schemas, types and type guards for parameters. diff --git a/invokeai/frontend/web/src/features/system/store/types.ts b/invokeai/frontend/web/src/features/system/store/types.ts index 4695bbda85..d2d9e456e1 100644 --- a/invokeai/frontend/web/src/features/system/store/types.ts +++ b/invokeai/frontend/web/src/features/system/store/types.ts @@ -1,5 +1,5 @@ import type { LogLevel, LogNamespace } from 'app/logging/logger'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zLanguage = z.enum([ 'ar', diff --git a/invokeai/frontend/web/src/features/system/store/zodSchemas.ts b/invokeai/frontend/web/src/features/system/store/zodSchemas.ts index 4ea013b18a..9d66f5ae88 100644 --- a/invokeai/frontend/web/src/features/system/store/zodSchemas.ts +++ b/invokeai/frontend/web/src/features/system/store/zodSchemas.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/v4'; +import { z } from 'zod'; export const zPydanticValidationError = z.object({ status: z.literal(422), diff --git a/invokeai/frontend/web/src/features/ui/store/uiTypes.ts b/invokeai/frontend/web/src/features/ui/store/uiTypes.ts index 61b2ab02f7..b6e6bdee16 100644 --- a/invokeai/frontend/web/src/features/ui/store/uiTypes.ts +++ b/invokeai/frontend/web/src/features/ui/store/uiTypes.ts @@ -1,6 +1,6 @@ import { deepClone } from 'common/util/deepClone'; import { isPlainObject } from 'es-toolkit'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const zTabName = z.enum(['generate', 'canvas', 'upscaling', 'workflows', 'models', 'queue']); export type TabName = z.infer; diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useValidateAndLoadWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useValidateAndLoadWorkflow.ts index e39bc23d4c..39d5a9cd91 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useValidateAndLoadWorkflow.ts +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useValidateAndLoadWorkflow.ts @@ -15,7 +15,7 @@ import { t } from 'i18next'; import { useCallback } from 'react'; import { serializeError } from 'serialize-error'; import { checkBoardAccess, checkImageAccess, checkModelAccess } from 'services/api/hooks/accessChecks'; -import { z } from 'zod/v4'; +import { z } from 'zod'; import { fromZodError } from 'zod-validation-error/v4'; const log = logger('workflows'); diff --git a/invokeai/frontend/web/src/services/api/authToastMiddleware.ts b/invokeai/frontend/web/src/services/api/authToastMiddleware.ts index 987efcd326..94dfaca2da 100644 --- a/invokeai/frontend/web/src/services/api/authToastMiddleware.ts +++ b/invokeai/frontend/web/src/services/api/authToastMiddleware.ts @@ -3,7 +3,7 @@ import { isRejectedWithValue } from '@reduxjs/toolkit'; import { $toastMap } from 'app/store/nanostores/toastMap'; import { toast } from 'features/toast/toast'; import { t } from 'i18next'; -import { z } from 'zod/v4'; +import { z } from 'zod'; const trialUsageErrorSubstring = 'usage allotment for the free trial'; const trialUsageErrorCode = 'USAGE_LIMIT_TRIAL';