@wildo-ai/zod-decorators 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/__mocks__/mime.d.ts.map +1 -1
- package/dist/esm/__mocks__/mime.js.map +1 -1
- package/dist/esm/commons.d.ts.map +1 -1
- package/dist/esm/commons.js.map +1 -1
- package/dist/esm/currencies.shared.schemas.d.ts.map +1 -1
- package/dist/esm/currencies.shared.schemas.js.map +1 -1
- package/dist/esm/files/agent-file-formats.d.ts.map +1 -1
- package/dist/esm/files/agent-file-formats.js.map +1 -1
- package/dist/esm/files/extension-nature-map.d.ts.map +1 -1
- package/dist/esm/files/extension-nature-map.js.map +1 -1
- package/dist/esm/files/file-extensions.enum.d.ts.map +1 -1
- package/dist/esm/files/file-extensions.enum.js.map +1 -1
- package/dist/esm/files/mime-registry.d.ts.map +1 -1
- package/dist/esm/files/mime-registry.js.map +1 -1
- package/dist/esm/files/unified-registry.d.ts.map +1 -1
- package/dist/esm/files/unified-registry.js.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install-bigint-json-encoding.d.ts.map +1 -1
- package/dist/esm/install-bigint-json-encoding.js.map +1 -1
- package/dist/esm/testing/decorated-test-schemas.d.ts.map +1 -1
- package/dist/esm/testing/decorated-test-schemas.js.map +1 -1
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/zod-address.d.ts.map +1 -1
- package/dist/esm/zod-address.js.map +1 -1
- package/dist/esm/zod-bigdecimal.d.ts.map +1 -1
- package/dist/esm/zod-bigdecimal.js.map +1 -1
- package/dist/esm/zod-code.d.ts.map +1 -1
- package/dist/esm/zod-code.js.map +1 -1
- package/dist/esm/zod-color.d.ts.map +1 -1
- package/dist/esm/zod-color.js.map +1 -1
- package/dist/esm/zod-decorators.types.d.ts.map +1 -1
- package/dist/esm/zod-decorators.types.js.map +1 -1
- package/dist/esm/zod-duration.d.ts.map +1 -1
- package/dist/esm/zod-duration.js.map +1 -1
- package/dist/esm/zod-file.d.ts.map +1 -1
- package/dist/esm/zod-file.js.map +1 -1
- package/dist/esm/zod-money.d.ts.map +1 -1
- package/dist/esm/zod-money.js.map +1 -1
- package/dist/esm/zod-phone.d.ts.map +1 -1
- package/dist/esm/zod-phone.js.map +1 -1
- package/dist/esm/zod-range.d.ts.map +1 -1
- package/dist/esm/zod-range.js.map +1 -1
- package/dist/esm/zod-utils.shared.d.ts.map +1 -1
- package/dist/esm/zod-utils.shared.js.map +1 -1
- package/dist/esm/zod-versioned.d.ts.map +1 -1
- package/dist/esm/zod-versioned.js.map +1 -1
- package/dist/esm/zod.module-override.d.ts.map +1 -1
- package/dist/esm/zod.module-override.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-utils.shared.js","sourceRoot":"","sources":["../../../src/zod-utils.shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport type {\n ArrayUIParams, BigDecimalUIParams, BooleanUIParams, CodeUIParams,\n DateUIParams, DateTimeUIParams, DurationUIParams, EnumUIParams,\n FileUIParams, ForeignKeyUIParams, MoneyUIParams, NumberUIParams,\n ObjectUIParams, PhoneUIParams, StringUIParams, TimeUIParams,\n PrimitiveUIBaseParams, PrimitiveUIBaseEditParams, PrimitiveUIBaseDisplayParams,\n} from './zod-decorators.types';\nimport { BooleanEditMode, DisplayEmptyReason, EnumEditMode, EnumMultipleEditMode, NumberEditMode, StringEditMode } from './zod-decorators.types';\nimport { AutosaveFieldParams, BackendOnlyFieldParams, BusinessKeySetParams, WriteOnlySecretFieldParams, BigDecimalSchemaMetadata,\n DurationSchemaMetadata, CodeSchemaMetadata, DEFAULT_FOREIGN_KEY_DISPLAY_MODE, DiscriminatorFieldParams, FileGenerationSource, FileSchemaMetadata, ForeignKeyStructuralParams, ForeignKeyUIDisplayParams, MoneySchemaMetadata, CustomFieldMetadata, DecoratorInput, FieldSchemaType, FormFieldComponent, HiddenFieldParams, ImpersonalizeFieldParams, NotEditableFieldParams, OtpFieldParams, AddressSchemaMetadata, PhoneSchemaMetadata, PolymorphicFkVariant, RagSourceConfiguration, RangeConstraintValue, RangeSchemaMetadata, RangeType, SCHEMA_METADATA, SerializableZodSchema, SummaryFieldParams, ValidationMode, VersionedForeignKeySchemaMetadata, VersionedSchemaMetadata, ZodDecorator, UniqueFieldParams, VirtualFieldParams, TtlFieldParams, ShowWhenParams, RequestDtoWriteSemantics } from './zod-decorators.types';\nimport { z_range } from './zod-range';\nimport { addDecorators, getMetadataRecursive } from './zod.module-override';\n\n\n// Type guard to check if a schema has Zod v4 internals\n// Zod v4 can have two structures:\n// - Legacy: schema._zod.def.type (older Zod v4 builds)\n// - Current: schema.def.type with schema.type at root (newer Zod v4 builds)\nexport function hasZodInternals(schema: unknown): schema is { def: { type: string; [key: string]: unknown }; type?: string } {\n if (!schema || typeof schema !== 'object') return false;\n\n // First check for legacy structure: schema._zod.def.type\n if ('_zod' in schema) {\n const schemaObj = schema as unknown as Record<string, unknown>;\n const zodProp = schemaObj._zod;\n if (typeof zodProp === 'object' && zodProp !== null && 'def' in zodProp) {\n const zodObj = zodProp as Record<string, unknown>;\n const defProp = zodObj.def;\n if (typeof defProp === 'object' && defProp !== null && 'type' in defProp) {\n return true;\n }\n }\n }\n\n // Check for current structure: schema.def.type (with schema.type at root)\n if ('def' in schema) {\n const schemaObj = schema as unknown as Record<string, unknown>;\n const defProp = schemaObj.def;\n if (typeof defProp === 'object' && defProp !== null && 'type' in defProp) {\n return true;\n }\n }\n\n return false;\n}\n\n\n\n\n\n/**\n * Check if a schema has a specific decorator.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function hasDecorator(schema: z.ZodTypeAny, decorator: ZodDecorator): boolean {\n const metadata = getCustomFieldMetadata(schema);\n const value = metadata[decorator];\n\n // Handle different value types properly\n if (value !== undefined) {\n // For strings: non-empty = has decorator, empty = no decorator (defensive guard)\n if (typeof value === 'string') {\n return (value as string).length > 0;\n }\n // For numbers: any number including 0 = has decorator\n if (typeof value === 'number') {\n return true;\n }\n // For booleans: true = has decorator, false = no decorator\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'object' && value === null) {\n return false;\n }\n\n // For other types: truthy = has decorator\n return Boolean(value);\n }\n\n return false;\n}\n\n// =============================================================================\n// SCHEMA UNWRAPPING\n// =============================================================================\n\n/**\n * Unwrap optional, nullable, default, and other wrapper schemas\n * to get the underlying base schema\n */\nexport function unwrapSchema(schema: z.ZodTypeAny): z.ZodTypeAny {\n const type = getZodType(schema);\n\n switch (type) {\n case 'optional':\n case 'nullable': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'default': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'pipe': {\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n return inSchema ? unwrapSchema(inSchema) : schema;\n }\n case 'readonly': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'catch': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n default:\n return schema;\n }\n}\n\n/**\n * The same PATCH rule, one level down: inside a NESTED object field, a key the caller omits must not be\n * re-materialised from its `.default()` either.\n *\n * `toPatchOptionalField` peels the OUTER default of a top-level field, but an object field's own keys\n * kept theirs, so `{ privacy: { privacyLevel: 'minimal' } }` parsed to\n * `{ privacy: { privacyLevel: 'minimal', consentedPurposes: [] } }` — a write the caller never made, which\n * a downstream hook cannot tell apart from an explicit empty set (#534 review F1: a privacy-level change\n * read as a consent withdrawal). Zod 4 applies a default even inside `.optional()`, so the default must\n * be peeled, not wrapped.\n *\n * (`privacyLevel` itself was removed in #1280 — it was a stored preference nothing read. The example is\n * kept in its original terms because it is the account of a defect that actually happened; the rule it\n * motivates is about ANY nested key with a default, and is unchanged.)\n *\n * Scope, deliberately narrow:\n * - nested PLAIN object fields, recursively, through `optional` / `nullable` wrappers only. An object\n * nested inside a union, discriminated union, record, intersection, pipe/transform, `readonly` or `lazy`\n * is NOT peeled and keeps re-materialising its defaults — narrower than it could be, never wrong;\n * - an object carrying its own refinement is NOT peeled: a `.refine()` / `.superRefine()` may read a\n * defaulted key, and would see `undefined` (or throw) once that default stopped applying;\n * - a nested key WITH a default becomes optional without it; a nested key WITHOUT one keeps its declared\n * optionality — a replaced nested object must still carry what it requires;\n * - ARRAYS are left alone: an array element is sent whole, and its defaults describe a new element;\n * - the object is rebuilt with Zod's own `clone(def)`, so `strict` / `catchall` and refinements survive;\n * decorator metadata AND `z.globalRegistry` metadata (`.describe()`, `.meta()` — what MCP tool input\n * schemas are generated from) are copied onto every rebuilt schema, and inner schemas are SHARED,\n * never mutated, so the source schema is untouched.\n */\nfunction withoutNestedObjectDefaults(schema: z.ZodTypeAny): z.ZodTypeAny {\n const type = getZodType(schema);\n if (type === 'optional' || type === 'nullable') {\n const inner = getZodDefSchemaProperty(schema, 'innerType');\n if (!inner) return schema;\n const rebuiltInner = withoutNestedObjectDefaults(inner);\n if (rebuiltInner === inner) return schema;\n return copySchemaMetadata(schema, type === 'optional' ? rebuiltInner.optional() : rebuiltInner.nullable());\n }\n if (type !== 'object') return schema;\n\n const def = (schema as unknown as { _zod: { def: Record<string, unknown> } })._zod.def;\n if (Array.isArray(def.checks) && def.checks.length > 0) return schema;\n\n const shape = (schema as unknown as { shape: Record<string, z.ZodTypeAny> }).shape;\n const nextShape: Record<string, z.ZodTypeAny> = {};\n let changed = false;\n for (const [key, field] of Object.entries(shape)) {\n let next: z.ZodTypeAny;\n if (isZodDefault(field)) {\n const peeled = getZodDefSchemaProperty(field, 'innerType');\n next = peeled ? copySchemaMetadata(field, withoutNestedObjectDefaults(peeled).optional()) : field;\n } else {\n next = withoutNestedObjectDefaults(field);\n }\n if (next !== field) changed = true;\n nextShape[key] = next;\n }\n if (!changed) return schema;\n\n const rebuilt = (schema as unknown as { clone: (def: Record<string, unknown>) => z.ZodTypeAny }).clone({ ...def, shape: nextShape });\n return copySchemaMetadata(schema, rebuilt);\n}\n\n/** Carry decorator metadata from a source wrapper onto a rebuilt one; the source is never mutated. */\nfunction copySchemaMetadata(source: z.ZodTypeAny, target: z.ZodTypeAny): z.ZodTypeAny {\n const registered = z.globalRegistry.get(source);\n if (registered && !z.globalRegistry.has(target)) z.globalRegistry.add(target, registered);\n const metadata = (source as unknown as Record<symbol, unknown>)[SCHEMA_METADATA];\n if (metadata) {\n const record = target as unknown as Record<symbol, unknown>;\n record[SCHEMA_METADATA] = { ...((record[SCHEMA_METADATA] as Record<string, unknown>) ?? {}), ...(metadata as Record<string, unknown>) };\n }\n return target;\n}\n\n/**\n * Make a field OPTIONAL for a PATCH-style UPDATE DTO, peeling any OUTER\n * `.default()` wrapper first.\n *\n * PATCH semantics: a field the caller OMITS must be left untouched. A field\n * declared `z.number().default(0)` breaks this — Zod re-materialises `0` for the\n * absent key on every parse, so the derived `$set` silently CLOBBERS the stored\n * value with the default. (Live defect: a webhook delivery row's `attemptCount`\n * counter was reset to `0` by every status transition that did not set it, so\n * the retry cap `attemptCount >= MAX_ATTEMPTS` was never reached and dead\n * deliveries retried forever.)\n *\n * It is ALSO where the framework's field-CLEARING contract is admitted onto the wire. An optional\n * field additionally gains a `.nullable()` wrapper here, so a caller can distinguish the two\n * PATCH intents that an absent key alone cannot express:\n *\n * - key ABSENT → leave the stored value untouched (classic PATCH semantics, above);\n * - value NULL → this field has no value (clear it).\n *\n * Eligibility is decided by `fieldAdmitsAddedNullClear` — notably NOT by `isOptional()`, which\n * would wrongly admit `.default()` fields. Required fields keep rejecting `null`. The wrapper is\n * added INSIDE the optional (`ZodOptional<ZodNullable<…>>`) so the outer type stays `optional` for\n * every consumer that introspects it.\n *\n * Behaviour:\n * - Non-default fields: `fieldSchema.optional()`, plus a `.nullable()` wrapper when the field is\n * optional and does not already accept null.\n * - Default-wrapped fields: the outer `ZodDefault` is peeled, the inner schema\n * (keeping `.int()` / `.min()` / refinements) is made optional, and any\n * decorator metadata attached to the default wrapper (e.g.\n * `.default(0).isSummaryField()`) is carried onto the resulting optional so\n * `getMetadataRecursive` is unchanged. The inner schema is SHARED, never\n * mutated, so the source schema is left intact.\n *\n * Defaults remain correct for CREATE (a new row gets them) — this transform is\n * for the UPDATE DTO only.\n */\nexport function toPatchOptionalField(fieldSchema: z.ZodTypeAny): z.ZodTypeAny {\n const admitsNullClear = fieldAdmitsAddedNullClear(fieldSchema);\n\n if (!isZodDefault(fieldSchema)) {\n const nestedPatched = withoutNestedObjectDefaults(fieldSchema);\n return admitsNullClear ? nestedPatched.nullable().optional() : nestedPatched.optional();\n }\n\n const rawInnerType = getZodDefSchemaProperty(fieldSchema, 'innerType');\n if (!rawInnerType) return fieldSchema.optional();\n const innerType = withoutNestedObjectDefaults(rawInnerType);\n\n // A defaulted field is never null-clearable (see `fieldAdmitsAddedNullClear`), so the peeled\n // inner is made optional WITHOUT a nullable wrapper.\n const optionalInner = innerType.optional();\n const defaultWrapperMetadata = (fieldSchema as unknown as Record<symbol, unknown>)[SCHEMA_METADATA];\n if (defaultWrapperMetadata) {\n const optionalRecord = optionalInner as unknown as Record<symbol, unknown>;\n const existing = (optionalRecord[SCHEMA_METADATA] as Record<string, unknown>) ?? {};\n optionalRecord[SCHEMA_METADATA] = {\n ...existing,\n ...(defaultWrapperMetadata as Record<string, unknown>),\n };\n }\n return optionalInner;\n}\n\n/**\n * The value an edit control should contribute to form state, once a \"the user emptied this field\"\n * gesture has been normalised into the framework's single CLEARED representation.\n *\n * # Why a normalisation step has to exist at all\n *\n * An HTML form control cannot express \"no value\". The platform defines a form entry's value as a\n * string (or a `File`), and assigning `null` to `input.value` is coerced to `\"\"` at the DOM\n * boundary. So a user clearing a text box produces `''`, a user clearing a date picker produces\n * `undefined`, and neither of those is a wire representation of \"clear this field\". Left alone they\n * produce three different wrong outcomes: `''` fails a refined schema outright (a colour or phone\n * field could never be emptied once set), `''` passes a plain string schema and PERSISTS an empty\n * string as a second, redundant \"no data\" value, and `undefined` is dropped by `JSON.stringify` so\n * the clear silently never reaches the server at all.\n *\n * # What it normalises TO, and why not `undefined`\n *\n * Always `null`, never `undefined`. React Hook Form reserves `undefined` to mean \"fall back to\n * defaultValue\" and documents that calling `onChange` with it is not valid, so `undefined` is not a\n * representable field value there. `null` is the value RHF itself prescribes for a cleared field,\n * and it is the one sentinel that survives every downstream seam: the submission path keeps it, the\n * section-save path keeps it, and `JSON.stringify` keeps it.\n *\n * # Where this must be called\n *\n * At the ONE place a control's change reaches form state, before the value is handed to both the\n * form library and the autosave queue. Normalising later (at submit) is too late — validation has\n * already rejected the empty string — and normalising only for validation is the documented Formik\n * defect, where the schema validates a value the server never receives.\n *\n * # What it deliberately leaves alone\n *\n * - **Fields that cannot be cleared** — a required field, or one whose declaration otherwise\n * rejects null. Their empty value is returned untouched so validation still fails with the normal\n * message rather than being silently rewritten.\n * - **Password and OTP inputs** — an empty password box conventionally means \"unchanged\", never\n * \"remove the credential\". Removing a secret must be an explicit destructive action, not a blank\n * field.\n * - **Any non-empty value**, including `0` and `false`, which are values rather than absences.\n *\n * # Two entry points, because the caller's schema decides the question\n *\n * A form validates the operation's REQUEST DTO; inline edit on a display surface only ever holds\n * the resource's MAIN schema. Those two answer \"can this be cleared?\" differently and cannot be\n * told apart by shape, so the caller picks the entry point matching what it holds — see\n * `requestDtoFieldIsClearable` for why merging them is unsound. This is the REQUEST-DTO one.\n *\n * @param fieldSchema - the field as it appears on the operation's request DTO.\n * @param value - the raw value the control emitted.\n * @returns `null` when the gesture is a clear on a clearable field; otherwise `value` unchanged.\n */\nexport function normalizeClearedRequestDtoValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n return normalizeClearedValue(fieldSchema, value, requestDtoFieldIsClearable);\n}\n\n/**\n * `normalizeClearedFieldValue` for a caller holding the resource's MAIN schema — inline edit on a\n * display surface, and any edit control reasoning about its own declared field.\n *\n * Same contract, different question asked of the schema. See `mainSchemaFieldIsClearable`.\n */\nexport function normalizeClearedMainSchemaValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n return normalizeClearedValue(fieldSchema, value, mainSchemaFieldIsClearable);\n}\n\n/**\n * Mark an UPDATE request DTO object as written PATCH style (see `RequestDtoWriteSemantics`).\n *\n * The mark lives in the `SCHEMA_METADATA` bag because that bag is what every DTO rebuild carries\n * across (network-boundary coercion, templatable-file stripping, nested-relationship extension). It\n * is written COPY-ON-WRITE: rebuilds share one bag object between instances, so mutating it would\n * mark schemas that were never PATCH roots.\n */\nexport function markPatchRequestDtoObject<TSchema extends z.ZodTypeAny>(schema: TSchema): TSchema {\n const record = schema as unknown as Record<symbol, CustomFieldMetadata | undefined>;\n record[SCHEMA_METADATA] = { ...(record[SCHEMA_METADATA] ?? {}), requestDtoWriteSemantics: RequestDtoWriteSemantics.PATCH };\n return schema;\n}\n\n/**\n * Does this object follow the PATCH write rule — absent key untouched, `null` clears?\n *\n * Looks through optional, nullable and default wrappers. A UNION answers `true` when ANY option is a\n * PATCH object: a nested child's items are a union of an update branch (PATCH) and a create branch\n * (written whole), and a field cannot tell which one it is in. `true` keeps the stricter rule, under\n * which a required field stays unclearable; the other answer would let one read as clearable in the\n * update branch, where clearing it would be a silent no-op.\n */\nexport function objectFollowsPatchWriteRule(schema: z.ZodTypeAny | undefined): boolean {\n if (!schema) return false;\n const metadata = (schema as unknown as Record<symbol, CustomFieldMetadata | undefined>)[SCHEMA_METADATA];\n if (metadata?.requestDtoWriteSemantics === RequestDtoWriteSemantics.PATCH) return true;\n\n const type = getZodType(schema);\n if (type === 'optional' || type === 'nullable' || type === 'default') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? objectFollowsPatchWriteRule(innerSchema) : false;\n }\n if (type === 'union') {\n const options = getZodDefArrayProperty(schema, 'options') as z.ZodTypeAny[] | undefined;\n return (options ?? []).some((option) => objectFollowsPatchWriteRule(option));\n }\n return false;\n}\n\n/**\n * Is \"clear it\" meaningful for a field inside an object that is written WHOLE — an object value\n * nested in a field, an array item, or a CREATE request DTO?\n *\n * The declaration answers it, exactly as on a main schema: absence or null allowed → clearable, required\n * or defaulted → not. `requestDtoFieldIsClearable` (\"accepts null\") is the wrong question here: only a\n * PATCH root's direct fields get a null admitted, so it reported every nested optional field\n * unclearable, and an emptied nested address could never be saved (#989).\n */\nexport function valueObjectFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return mainSchemaFieldIsClearable(fieldSchema);\n}\n\n/**\n * `normalizeClearedFieldValue` for a field inside an object written WHOLE. The cleared value is ABSENCE\n * (`undefined`), or `null` only for a field that accepts null.\n *\n * Absence, because nothing else is safe there: the persistence layer removes only TOP-LEVEL cleared\n * fields, so a `null` nested in a stored object would be persisted as `null` and then fail the main\n * schema's `.optional()` on the next read.\n */\nexport function normalizeClearedValueObjectFieldValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n const normalized = normalizeClearedValue(fieldSchema, value, valueObjectFieldIsClearable);\n return normalized === null && !fieldSchema.safeParse(null).success ? undefined : normalized;\n}\n\nfunction normalizeClearedValue(\n fieldSchema: z.ZodTypeAny,\n value: unknown,\n isClearable: (fieldSchema: z.ZodTypeAny) => boolean,\n): unknown {\n if (!isEmptyFieldGesture(value)) return value;\n\n const editMode = getStringUI(fieldSchema)?.edit?.editMode;\n if (editMode === StringEditMode.PASSWORD || editMode === StringEditMode.OTP) return value;\n\n if (!isClearable(fieldSchema)) return value;\n\n return null;\n}\n\n/**\n * Is \"clear it\" a meaningful instruction for this field, as declared on an UPDATE REQUEST DTO?\n *\n * On a request DTO the answer is exactly \"does it accept null\", because `toPatchOptionalField` adds\n * a nullable wrapper to the clearable fields and to no others.\n *\n * **This must never be asked of a MAIN-schema field, and its sibling must never be asked of a DTO\n * field.** The two schemas cannot be told apart by shape, and each answers only its own question\n * correctly:\n *\n * - On a DTO, PATCH semantics make EVERY field optional, so a required field is shape-identical to\n * an optional one. \"Declares absence\" is therefore meaningless here and would report every\n * required field clearable.\n * - On a main schema, an `.optional()` field does NOT accept null, so \"accepts null\" would report\n * every ordinary optional field un-clearable.\n *\n * Merging them into one permissive predicate looks convenient and is unsound in the first\n * direction: it silently made required fields clearable, which a pin caught.\n */\nexport function requestDtoFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return fieldSchema.safeParse(null).success;\n}\n\n/**\n * Is \"clear it\" a meaningful instruction for this field, as declared on a resource's MAIN schema?\n *\n * Here the author's own declaration is the answer: a field that may be absent (`.optional()`) or\n * explicitly null (`.nullish()`) can be cleared; a required or defaulted one cannot. Read the\n * warning on `requestDtoFieldIsClearable` before using either.\n */\nexport function mainSchemaFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return fieldSchema.safeParse(null).success || fieldAdmitsAddedNullClear(fieldSchema);\n}\n\n/**\n * Is this value an edit control's way of saying \"the user emptied me\"?\n *\n * The three shapes are the three the framework's controls actually emit: `''` from the string,\n * enum and number families, `undefined` from the date/time family, and `null` from a control that\n * has already been normalised (so re-normalising is idempotent).\n */\nfunction isEmptyFieldGesture(value: unknown): boolean {\n return value === '' || value === undefined || value === null;\n}\n\n/**\n * Should an UPDATE DTO ADD a `.nullable()` wrapper to this field so a caller can CLEAR it?\n *\n * This is the eligibility half of the framework's field-clearing contract. The wire rule is\n * JSON-Merge-Patch shaped and has exactly one meaning: an ABSENT key leaves the stored value\n * untouched, and an explicit `null` means \"this field has no value\". The repository write boundary\n * then derives the STORAGE representation from the field's own declaration — `$unset` / SQL NULL\n * for a field whose schema rejects null, a stored null for one authored `.nullish()`.\n *\n * Three declarations must be told apart, and the distinction is not the one `isOptional()` draws:\n *\n * - **Optional (`.optional()`, `.nullish()`)** — the author said this field may have no value, so\n * clearing it is meaningful. ELIGIBLE.\n * - **Required (`z.string()`)** — no \"no value\" state exists. NOT eligible: `null` must keep\n * failing validation, which is also what the industry guidance prescribes (a field that cannot be\n * deleted answers 400 rather than silently ignoring the instruction).\n * - **Defaulted (`.default('x')`)** — `isOptional()` reports TRUE for these because the *input* may\n * be omitted, but the *output* type is non-optional: the schema guarantees a value is always\n * present, and the READ path validates against that guarantee. Clearing one would persist an\n * absence the resource's own main schema rejects, turning the next read into a 500. NOT eligible,\n * and this is precisely why this predicate exists instead of reusing `isOptional()`.\n *\n * A field that ALREADY accepts null (authored `.nullable()` / `.nullish()`) is reported `false` —\n * not because it cannot be cleared, but because nothing needs adding: it accepts `null` on its own,\n * and re-wrapping would emit a redundant nullable in the generated JSON Schema / OpenAPI document.\n *\n * @param fieldSchema - the field as declared on the resource's main schema.\n * @returns `true` only when a nullable wrapper must be ADDED for the field to be clearable.\n */\nexport function fieldAdmitsAddedNullClear(fieldSchema: z.ZodTypeAny): boolean {\n // A default makes the OUTPUT non-optional — see the JSDoc above. Checked first because\n // `ZodDefault` wraps an inner schema that is frequently optional-looking.\n if (isZodDefault(fieldSchema)) return false;\n\n if (!declaresAbsenceAsAValidState(fieldSchema)) return false;\n\n // Already null-accepting (`.nullable()` / `.nullish()`): clearable without any addition.\n return !fieldSchema.safeParse(null).success;\n}\n\n/**\n * Does this field's declaration allow the value to be ABSENT (i.e. accept `undefined`)?\n *\n * Deliberately NOT `isOptional()`: that helper answers \"may the user omit this input?\", which is\n * true for `.default()` fields, whereas this answers \"may this field legitimately hold no value?\",\n * which is false for them. Merging the two is what would make a defaulted field clearable.\n */\nfunction declaresAbsenceAsAValidState(fieldSchema: z.ZodTypeAny): boolean {\n if (isZodDefault(fieldSchema)) return false;\n if (isZodOptional(fieldSchema)) return true;\n\n const type = getZodType(fieldSchema);\n if (type === 'nullable' || type === 'pipe' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(fieldSchema, 'innerType') ?? getZodDefSchemaProperty(fieldSchema, 'in');\n return innerSchema ? declaresAbsenceAsAValidState(innerSchema) : false;\n }\n\n return false;\n}\n\n\n// =============================================================================\n// ZOD TYPE DETECTION HELPERS\n//\n// Helper function to safely get the type from a Zod v4 schema\n// Supports both structures:\n// - Legacy: schema._zod.def.type\n// - Current: schema.def.type (or schema.type at root)\n// Type values are lowercase strings like \"object\", \"array\", \"string\", etc.\n// =============================================================================\n\nexport function getZodType(schema: z.ZodTypeAny): string | undefined {\n // Guard against null/undefined schemas\n if (!schema || typeof schema !== 'object') {\n return undefined;\n }\n\n const def = getZodDef(schema);\n if (def?.type) return def.type;\n\n // Fallback: check schema.type at root level\n if ('type' in schema && typeof (schema as unknown as Record<string, unknown>).type === 'string') {\n return (schema as unknown as Record<string, unknown>).type as string;\n }\n\n return undefined;\n}\n\n/**\n * Type guard to check if a schema has a specific type\n * Uses Zod v4's type system where types are lowercase strings\n */\nexport function hasZodType(schema: z.ZodTypeAny, type: string): boolean {\n return getZodType(schema) === type;\n}\n\nexport function isZodObject(schema: z.ZodTypeAny): schema is z.ZodObject<any> {\n return hasZodType(schema, 'object');\n}\n\nexport function isZodArray(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'array');\n}\n\n/**\n * The same array schema with a different ELEMENT, keeping everything else it carries.\n *\n * Use this instead of `z.array(newElement)` whenever an existing array is being rewritten.\n * A fresh `z.array()` is a brand-new schema that carries none of the original's own checks, so\n * every authored `.min()` / `.max()` / `.length()` / `.nonempty()` is silently dropped — the\n * rewritten schema still parses, just without the constraint the author declared. That is\n * invisible to types and to any test that only feeds it valid data.\n *\n * It cost real time to find: all FOUR DTO-boundary walkers (templatable-file stripping,\n * network-boundary coercion, backend-only stripping, summary-field extraction) rebuilt arrays this\n * way, so an authored array constraint never reached the schema the controller and the repository\n * validate against. `reset_to_defaults` depended on exactly such a constraint to reject a request\n * naming no preference block, and without it the route answered HTTP 200 having written nothing.\n *\n * Native `.clone()` re-instantiates from the schema's own definition, so checks and error maps\n * survive by construction rather than by a copy loop that the next Zod version could outgrow.\n *\n * `z.globalRegistry` metadata (`.describe()`, `.meta()`) does NOT come with it: Zod links a clone to\n * its source, which is how a clone inherits that metadata, only when no new definition is passed,\n * and this always passes one. Measured, 2026-09-26: a billing-state `invoices` array lost its\n * description to date coercion, so the API reference published it undescribed (#1625). It is copied\n * explicitly below, without `id`, which names one schema and which Zod refuses to register twice.\n *\n * @param arraySchema - the array being rewritten. Returned untouched when it is not an array or\n * carries no element, so callers do not need to pre-check.\n * @param element - the replacement element schema.\n */\nexport function withArrayElement(arraySchema: z.ZodTypeAny, element: z.ZodTypeAny): z.ZodTypeAny {\n if (!isZodArray(arraySchema)) {\n return arraySchema;\n }\n\n const def = (arraySchema as unknown as { _zod?: { def?: Record<string, unknown> } })._zod?.def;\n if (!def) {\n return arraySchema;\n }\n\n const rebuilt = (arraySchema as unknown as { clone: (def: unknown) => z.ZodTypeAny }).clone({ ...def, element });\n const registered = z.globalRegistry.get(arraySchema) as Record<string, unknown> | undefined;\n if (registered !== undefined && !z.globalRegistry.has(rebuilt)) {\n const { id: _id, ...carried } = registered;\n if (Object.keys(carried).length > 0) z.globalRegistry.add(rebuilt, carried as never);\n }\n return rebuilt;\n}\n\nexport function isZodOptional(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'optional');\n}\n\nexport function isZodNullable(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'nullable');\n}\n\nexport function isZodDefault(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'default');\n}\n\nexport function isZodUnion(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'union');\n}\n\nexport function isZodIntersection(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'intersection');\n}\n\nexport function isZodLiteral(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'literal');\n}\n\nexport function isZodLazy(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'lazy');\n}\n\nexport function isZodTuple(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'tuple');\n}\n\nexport function isZodRecord(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'record');\n}\n\nexport function isZodSet(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'set');\n}\n\nexport function isZodPipe(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'pipe');\n}\n\nexport function isZodTransform(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n if (type === 'transform') return true;\n // In Zod v4, `.transform()` returns a pipe schema whose output is a transform schema.\n if (type === 'pipe') {\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n return outSchema ? getZodType(outSchema) === 'transform' : false;\n }\n return false;\n}\n\nexport function isZodCustom(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'custom');\n}\n\n\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nexport function isZodTypeAny(value: unknown): value is z.ZodTypeAny {\n return value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n hasZodInternals(value);\n}\n\n/**\n * Check if a union is discriminated (has discriminator property)\n * In Zod v4, discriminated unions have type: \"union\" with a discriminator property\n */\nexport function isDiscriminatedUnion(schema: z.ZodTypeAny): boolean {\n if (!isZodUnion(schema)) return false;\n return getZodDefStringProperty(schema, 'discriminator') !== undefined;\n}\n\n/**\n * Check if a schema is optional (can be undefined)\n */\nexport function isOptional(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n\n if (type === 'optional') return true;\n if (type === 'default') return true; // Has default, so not required from user\n\n if (type === 'nullable' || type === 'pipe' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType') ?? getZodDefSchemaProperty(schema, 'in');\n return innerSchema ? isOptional(innerSchema) : false;\n }\n\n return false;\n}\n\n/**\n * Check if a schema has refine/superRefine transformations\n * This triggers onChange validation mode\n */\nexport function hasRefine(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n\n // Check for pipe with refinement effect\n if (type === 'pipe') {\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n if (outSchema) {\n const outType = getZodType(outSchema);\n if (outType === 'custom') {\n // Custom type in pipe output usually indicates refinement\n return true;\n }\n }\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n return inSchema ? hasRefine(inSchema) : false;\n }\n\n // Check for custom type (refine creates these)\n if (type === 'custom') {\n return true;\n }\n\n // Unwrap wrappers and check inner\n if (type === 'optional' || type === 'nullable' || type === 'default' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? hasRefine(innerSchema) : false;\n }\n\n return false;\n}\n\n\n// =============================================================================\n// SCHEMA TYPE DETECTION\n// =============================================================================\n\n/**\n * Get the schema type category for component selection.\n *\n * Important: RANGE schemas (created by z_range()) are detected by their\n * SCHEMA_METADATA.rangeConfig before checking for object type. This allows range schemas\n * to be rendered with appropriate range components instead of as composite objects.\n */\nexport function getSchemaType(schema: z.ZodTypeAny): FieldSchemaType {\n // Check for range schema FIRST (before object check)\n // Range schemas are z.object({from, to}) with SCHEMA_METADATA.rangeConfig\n // isRangeSchema and getRangeType now handle unwrapping internally\n if (isRangeSchema(schema)) {\n // Return specialized range type based on the range's value type\n const rangeType = getRangeType(schema);\n switch (rangeType) {\n case RangeType.NUMBER:\n return FieldSchemaType.RANGE_NUMBER;\n case RangeType.DATE:\n return FieldSchemaType.RANGE_DATE;\n case RangeType.DATETIME:\n return FieldSchemaType.RANGE_DATETIME;\n case RangeType.TIME:\n return FieldSchemaType.RANGE_TIME;\n case RangeType.BIGDECIMAL:\n return FieldSchemaType.RANGE_BIGDECIMAL;\n case RangeType.MONEY:\n return FieldSchemaType.RANGE_MONEY;\n default:\n // z_range() only accepts valid RangeType values, so this should never happen\n return FieldSchemaType.UNKNOWN;\n }\n }\n\n // Check for money schemas (created by z_money())\n // isMoneySchema now handles unwrapping internally\n if (isMoneySchema(schema)) {\n return FieldSchemaType.MONEY;\n }\n\n // Check for bigdecimal schemas (created by z_bigdecimal())\n // isBigDecimalSchema now handles unwrapping internally\n if (isBigDecimalSchema(schema)) {\n return FieldSchemaType.BIGDECIMAL;\n }\n\n // Check for code schemas (created by z_code())\n // isCodeSchema now handles unwrapping internally\n if (isCodeSchema(schema)) {\n return FieldSchemaType.CODE;\n }\n\n // Check for file schemas (created by z_file())\n // isFileSchema now handles unwrapping internally\n if (isFileSchema(schema)) {\n return FieldSchemaType.FILE;\n }\n\n // Check for duration schemas (created by z_duration())\n if (isDurationSchema(schema)) {\n return FieldSchemaType.DURATION;\n }\n\n // Check for phone schemas (created by z_phone())\n if (isPhoneSchema(schema)) {\n return FieldSchemaType.PHONE;\n }\n\n // Check for address schemas (created by z_address()) — BEFORE the generic object case, which an\n // address would otherwise fall into as a plain OBJECT with no field of its own (#561).\n if (isAddressSchema(schema)) {\n return FieldSchemaType.ADDRESS;\n }\n\n // Check for versioned foreign key schemas (created by z_foreignKeyVersioned())\n if (isVersionedForeignKeySchema(schema)) {\n return FieldSchemaType.VERSIONED_FOREIGN_KEY;\n }\n\n // Check for versioned object schemas (created by versioned())\n if (isVersionedObjectSchema(schema)) {\n return FieldSchemaType.VERSIONED_OBJECT;\n }\n\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n switch (type) {\n case 'string': {\n // Check for datetime/time formats (z.iso.datetime(), z.iso.time())\n const format = getStringFormat(unwrapped);\n if (format === 'datetime') return FieldSchemaType.DATETIME;\n if (format === 'time') return FieldSchemaType.TIME;\n return FieldSchemaType.STRING;\n }\n case 'number':\n case 'int': return FieldSchemaType.NUMBER;\n case 'bigint': return FieldSchemaType.BIGINT;\n case 'boolean': return FieldSchemaType.BOOLEAN;\n case 'enum':\n return FieldSchemaType.ENUM;\n case 'literal': {\n // In Zod v4, literal values are stored in def.values as an array\n const values = getZodDefProperty(unwrapped, 'values') as unknown[] | undefined;\n const literalValue = values?.[0];\n if (literalValue === null || literalValue === undefined) {\n return FieldSchemaType.UNKNOWN;\n }\n // Infer type based on the value type\n switch (typeof literalValue) {\n case 'string':\n // String literals are treated as single-value enums (for select fields)\n return FieldSchemaType.ENUM;\n case 'number':\n case 'bigint':\n return FieldSchemaType.NUMBER;\n case 'boolean':\n return FieldSchemaType.BOOLEAN;\n default:\n return FieldSchemaType.UNKNOWN;\n }\n }\n /*\n * A `z.date()` is a DAY unless it declares itself a MOMENT.\n *\n * In Wildo a datetime is Date-based — an ISO-8601 string is a wire format for one, never the\n * model — so `ZodDate` is the carrier for both \"a day\" (`dueDate`) and \"a point in time\"\n * (`remindAt`). Nothing in the schema shape distinguishes them, which left `DATETIME`\n * effectively unreachable: every date classified as `DATE`, so every one of them EDITED through\n * the day picker and DISPLAYED through the day formatter, and a moment silently lost its hour\n * on both surfaces while `FormFieldDateTime` and `DisplayFieldDateTime` sat unreachable.\n *\n * The declaration is what distinguishes them, and it already exists: `dateTimeUI()` is applyable\n * to `ZodDate` precisely to say \"this value carries a time of day\". Reading it here means the\n * two renderer dispatchers — which both key on this classification alone — pick the datetime\n * pair without either of them learning a new rule.\n *\n * Scoped to the RENDERING classification on purpose: nothing in DTO building or persistence\n * branches on `DATE` vs `DATETIME` (checked), so this changes which control a field gets and\n * nothing about how its value is carried or stored.\n */\n case 'date': return getDateTimeUI(unwrapped) !== undefined ? FieldSchemaType.DATETIME : FieldSchemaType.DATE;\n case 'object': return FieldSchemaType.OBJECT;\n case 'array': return FieldSchemaType.ARRAY;\n case 'set': return FieldSchemaType.SET;\n case 'tuple': return FieldSchemaType.TUPLE;\n case 'record': return FieldSchemaType.RECORD;\n case 'map': return FieldSchemaType.MAP;\n case 'union': {\n // For unions, try to infer type from options\n // If all options are enums, treat as ENUM (combined values)\n // Otherwise, use the type of the first option\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n if (options.length === 0) return FieldSchemaType.UNKNOWN;\n\n // Check if all options are enums or string literals (treat as combined enum)\n const allEnumLike = options.every((opt: unknown) => {\n if (!isZodTypeAny(opt)) return false;\n const optType = getZodType(opt as z.ZodTypeAny);\n return optType === 'enum' || optType === 'literal';\n });\n\n if (allEnumLike) {\n return FieldSchemaType.ENUM;\n }\n\n // Otherwise, infer from the first option\n const firstOption = options[0];\n if (isZodTypeAny(firstOption)) {\n return getSchemaType(firstOption as z.ZodTypeAny);\n }\n\n return FieldSchemaType.UNKNOWN;\n }\n default: return FieldSchemaType.UNKNOWN;\n }\n}\n\n/**\n * Which classified schema types HOLD FIELDS — parts that are fields of the resource in their own right, each\n * labelled, displayed and validated under its own dotted path (`privacy.consentedPurposes`) — as opposed to\n * being ONE value whose parts belong to the value.\n *\n * A structured value is a Zod object too: `z_money()` is `{ amount, currency, decimals }`, `z_address()` is\n * `{ line1, …, coordinates }`, every `z_range()` is `{ from, to }`. But its parts are not fields. The value's\n * own component draws and names them (`LOW_LEVEL_FORM_FIELD_ADDRESS` carries `line1`, the money field reads the\n * currency through `system_enums`), so the resource has exactly ONE word for the whole value — its field label —\n * and no word for any part. Walking into a structured value as if it were a nested object is how the application\n * labelling planner came to generate, translate and ship `fields.amount.amount`, `fields.amount.currency` and\n * `fields.amount.decimals` for a money field no screen ever looked up (#1959).\n *\n * A `Record` over the whole enum rather than a list of either half, so a classification added tomorrow is a\n * compile error here until someone decides which it is — the label walk, the labelling planner, the frontend\n * label introspection and the validation summary all read this one answer through {@link isFieldContainerSchema}.\n *\n * `VERSIONED_OBJECT` holds fields: `versioned()` returns the application's own object with two hidden bookkeeping\n * fields added, and the display renders it through the plain object branch, child field by child field.\n */\nconst FIELD_SCHEMA_TYPE_HOLDS_FIELDS: Readonly<Record<FieldSchemaType, boolean>> = {\n [FieldSchemaType.OBJECT]: true,\n [FieldSchemaType.VERSIONED_OBJECT]: true,\n [FieldSchemaType.STRING]: false,\n [FieldSchemaType.NUMBER]: false,\n [FieldSchemaType.BIGINT]: false,\n [FieldSchemaType.BOOLEAN]: false,\n [FieldSchemaType.ENUM]: false,\n [FieldSchemaType.DATE]: false,\n /*\n * An ARRAY is not a container of FIELDS: its items are rows of one schema, and a walk that labels by field\n * steps through it to the item (index-free) and asks this question of the ITEM. SET, TUPLE, RECORD and MAP\n * are never walked for field labels at all.\n */\n [FieldSchemaType.ARRAY]: false,\n [FieldSchemaType.SET]: false,\n [FieldSchemaType.TUPLE]: false,\n [FieldSchemaType.RECORD]: false,\n [FieldSchemaType.MAP]: false,\n [FieldSchemaType.TIME]: false,\n [FieldSchemaType.DATETIME]: false,\n [FieldSchemaType.RANGE_NUMBER]: false,\n [FieldSchemaType.RANGE_DATE]: false,\n [FieldSchemaType.RANGE_DATETIME]: false,\n [FieldSchemaType.RANGE_TIME]: false,\n [FieldSchemaType.RANGE_BIGDECIMAL]: false,\n [FieldSchemaType.RANGE_MONEY]: false,\n [FieldSchemaType.MONEY]: false,\n [FieldSchemaType.BIGDECIMAL]: false,\n [FieldSchemaType.CODE]: false,\n [FieldSchemaType.FILE]: false,\n [FieldSchemaType.DURATION]: false,\n [FieldSchemaType.PHONE]: false,\n [FieldSchemaType.ADDRESS]: false,\n [FieldSchemaType.VERSIONED_FOREIGN_KEY]: false,\n [FieldSchemaType.UNKNOWN]: false,\n};\n\n/**\n * Does this schema HOLD FIELDS of the resource — so a walk that labels by field path descends into it — rather\n * than being a scalar or a structured value whose parts are its own (money, address, duration, code, file, every\n * range)? See {@link FIELD_SCHEMA_TYPE_HOLDS_FIELDS} for why the two are different and why the answer is read off\n * {@link getSchemaType} rather than off a list of value types.\n *\n * Takes the schema as declared, wrappers included: `getSchemaType` recognises every structured value through its\n * wrappers, so `z_money().optional()` answers `false` like `z_money()` does.\n *\n * @example\n * isFieldContainerSchema(z.object({ city: z.string() })); // true — `address.city` is a field\n * isFieldContainerSchema(z_address()); // false — `line1` is the address's, not the resource's\n */\nexport function isFieldContainerSchema(schema: z.ZodTypeAny): boolean {\n return FIELD_SCHEMA_TYPE_HOLDS_FIELDS[getSchemaType(schema)];\n}\n\n\n// =============================================================================\n// VALUE TYPE INFERENCE — the runtime twin of getSchemaType\n// =============================================================================\n\n/**\n * An ISO-8601 DATETIME: a calendar date, a `T` (or the JSON-ish space form), a clock time, and an\n * optional zone designator.\n *\n * The `T` is what makes this safe to recognise. No identifier, version, code or reference in this\n * codebase's data has that shape, so a string matching it is a datetime with as much certainty as\n * a declared schema would have given.\n */\nconst ISO_DATETIME_PATTERN = /^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:?\\d{2})?$/;\n\n/** An ISO-8601 CALENDAR DATE and nothing else. */\nconst ISO_DATE_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\n/**\n * Does this `YYYY-MM-DD` name a real day?\n *\n * `new Date('2026-02-30')` does not throw — it rolls over to 2 March — so a pattern match alone\n * would accept a string that is shaped like a date and is not one. Round-tripping the parsed parts\n * back out is what rejects it, and it is the difference between recognising dates and recognising\n * things with four digits, a dash and some numbers.\n */\nfunction namesARealCalendarDay(year: number, month: number, day: number): boolean {\n const parsed = new Date(Date.UTC(year, month - 1, day));\n return parsed.getUTCFullYear() === year\n && parsed.getUTCMonth() === month - 1\n && parsed.getUTCDate() === day;\n}\n\n/**\n * WHAT IS THIS VALUE, when no schema can say?\n *\n * The runtime twin of {@link getSchemaType}, and it exists for exactly one caller shape: a field\n * declared `z.unknown()`. That is a DELIBERATE posture — an outbound webhook's `payload`, an\n * integration's passthrough blob, a stored provider response — and the framework's answer used to\n * be a single one: pretty-print everything as JSON into the code viewer. Faithful, and wrong for\n * the common case, because most values inside such a payload are ordinary scalars. A name rendered\n * as `\"Ada\"` in a monospace code block, a flag as `true`, a timestamp as a quoted ISO string: each\n * is the value, and none of them is how that value reads anywhere else in the application.\n *\n * So when the schema cannot say, ask the value — and route a recognisable primitive to the\n * formatter that primitive would have had if it HAD been declared.\n *\n * ## `undefined` is an answer, and the important one\n *\n * An object, an array, `null`, a function, a symbol — anything this cannot name — returns\n * `undefined`, and the caller keeps the JSON rendering. That is the case the mechanism was built\n * for and it is not being taken away; what changes is that scalars stop going through it.\n *\n * ## What is deliberately NOT inferred\n *\n * - **A number is never a date.** `1789903936618` is a plausible epoch and also a plausible id,\n * counter, amount or checksum, and there is nothing in the value to tell them apart. Guessing\n * would silently reformat every large integer in every opaque payload as a date in 2026.\n * - **A numeric STRING stays a string.** `'42'` in a passthrough payload was sent as text by\n * whoever sent it; rendering it through the number formatter would apply grouping and locale\n * decimals to something that may be a code, a zip or a version segment.\n * - **`true`/`false` as strings stay strings**, for the same reason.\n * - **A bare `YYYY-MM-DD` IS taken as a date**, which is the one judgement call here. It is the\n * only shape in the list that something else could plausibly be, and the calendar round-trip\n * above is what keeps it from swallowing near-misses. In payload data this shape is a date\n * essentially always, and the cost of being wrong is a differently-formatted string rather than\n * a lost value.\n *\n * ## A string that CARRIES an object or array is that object, not a string\n *\n * The webhook `payload` named first above reaches the display SERIALIZED — a string whose content\n * is a JSON object — and `typeof` alone reads it as a string. The first version of this function\n * did exactly that, and the one case the mechanism promised to keep was the one it took away: the\n * delivery-log payload rendered as a single raw line in a paragraph, found by\n * `browser-settings-hub-webhooks` step 6 on its first run after this landed (#1411).\n *\n * So a string whose trimmed text opens with `{` or `[` AND parses to an object or array answers\n * `undefined`, and keeps the JSON rendering — which already unwraps a string-wrapped value\n * (`DisplayFieldJson`). The opening-character check keeps the parse off ordinary text, and the parse\n * keeps prose that merely starts with a bracket (\"[draft] …\") a string.\n *\n * ## An author who disagrees has the existing escape hatch\n *\n * `displayComponent` is resolved BEFORE this is consulted, so a field that must always render as\n * JSON says so and never reaches the inference.\n */\n/**\n * Does this string SERIALIZE an object or array? See \"A string that CARRIES an object or array\"\n * on {@link inferFieldSchemaTypeFromValue}. A JSON scalar (`\"42\"`, `\"true\"`) deliberately does not\n * count — those are the numeric and boolean strings that function keeps as strings on purpose.\n */\nfunction carriesJsonStructure(text: string): boolean {\n const trimmed = text.trim();\n const opener = trimmed.charAt(0);\n if (opener !== '{' && opener !== '[') return false;\n try {\n const parsed: unknown = JSON.parse(trimmed);\n return parsed !== null && typeof parsed === 'object';\n } catch {\n return false;\n }\n}\n\nexport function inferFieldSchemaTypeFromValue(value: unknown): FieldSchemaType | undefined {\n if (value instanceof Date) {\n return FieldSchemaType.DATETIME;\n }\n\n switch (typeof value) {\n case 'boolean':\n return FieldSchemaType.BOOLEAN;\n case 'bigint':\n return FieldSchemaType.BIGINT;\n case 'number':\n // Including NaN and the infinities, deliberately: `JSON.stringify(NaN)` is the string\n // `null`, so the JSON path would report a value that is not there. The number formatter\n // renders them as themselves.\n return FieldSchemaType.NUMBER;\n case 'string':\n break;\n default:\n return undefined;\n }\n\n const text = value as string;\n if (carriesJsonStructure(text)) {\n return undefined;\n }\n if (ISO_DATETIME_PATTERN.test(text) && !Number.isNaN(Date.parse(text))) {\n return FieldSchemaType.DATETIME;\n }\n\n const dateParts = ISO_DATE_PATTERN.exec(text);\n if (dateParts && namesARealCalendarDay(Number(dateParts[1]), Number(dateParts[2]), Number(dateParts[3]))) {\n return FieldSchemaType.DATE;\n }\n\n return FieldSchemaType.STRING;\n}\n\n\n// =============================================================================\n// ZOD HELPER GETTER\n// =============================================================================\n\n\n/**\n * Get the type string from a Zod v4 schema's internal structure.\n * Returns undefined if schema is not a valid Zod 4 schema.\n */\nfunction getZodTypeInternal(schema: z.ZodTypeAny): string | undefined {\n if (!schema || typeof schema !== 'object') return undefined;\n\n const zodProp = (schema as any)._zod;\n if (!zodProp || typeof zodProp !== 'object') return undefined;\n\n const def = zodProp.def;\n if (!def || typeof def !== 'object') return undefined;\n\n return typeof def.type === 'string' ? def.type : undefined;\n}\n\n\n/**\n * Get the shape of a Zod object schema.\n *\n * IMPORTANT: This function only returns valid Zod schema instances, not definitions.\n * In Zod 4, `def.shape` contains JSON-serializable definitions, not schema instances\n * with methods like safeParse.\n *\n * Prefer using getObjectShape() which handles unwrapping and validation.\n */\nexport function getZodObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> {\n if (!isZodObject(schema)) {\n return {};\n }\n\n // Use the improved getObjectShape which validates schema instances\n const shape = getObjectShape(schema);\n return shape ?? {};\n}\n\n/**\n * Field shape of an object schema OR a discriminated union, merged across ALL\n * variants. Unlike {@link getZodObjectShape} (which returns `{}` for a union),\n * this walks the union's variant options and merges their shapes, so callers that\n * need the full field set of a polymorphic resource — FK/ObjectId discovery,\n * field-access checks, etc. — see every variant's fields instead of nothing.\n *\n * For a field present in multiple variants the FIRST occurrence wins (variants\n * share the common base fields, so the common shape is identical across them).\n * Returns `{}` for non-object, non-union schemas.\n */\nexport function getMergedObjectOrUnionShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> {\n if (isZodObject(schema)) {\n return getZodObjectShape(schema);\n }\n if (isDiscriminatedUnion(schema)) {\n const options = getZodDefArrayProperty(schema, 'options') as z.ZodTypeAny[] | undefined;\n if (!options) {\n return {};\n }\n const merged: Record<string, z.ZodTypeAny> = {};\n for (const option of options) {\n const optionShape = isZodObject(option) ? getZodObjectShape(option) : {};\n for (const [fieldName, fieldSchema] of Object.entries(optionShape)) {\n if (!(fieldName in merged)) {\n merged[fieldName] = fieldSchema;\n }\n }\n }\n return merged;\n }\n return {};\n}\n\n/**\n * The key a union of OBJECTS is discriminated by — the declared one, or the one a plain `z.union` carries\n * structurally. `undefined` when the schema is not a union, or is a plain union no key discriminates.\n *\n * ## Why a plain union needs an answer\n *\n * `z.discriminatedUnion(key, …)` records its key; `z.union([V1, V2])` does not, even when every member\n * declares the same key as a literal and those literals never collide — which is exactly how a versioned\n * record is written (`schemaVersion: z.literal(1)` / `z.literal(2)`). Such a union IS discriminated; only\n * the spelling differs. Measured 2026-09-14 on the compliance programme's `documentationRequirements`\n * items (`z.union([V1, V2])`): the display resolved no member, so every item rendered an em-dash, and the\n * label walk collected no field inside them, so `governanceScope.subjectKind` could not be worded\n * anywhere (#1022).\n *\n * The real instance is one step less regular than that: V1 predates `schemaVersion` and does not declare it\n * at all, while V2 declares `z.literal(2)`. Both are `z.strictObject`s, so V1 REJECTS any value carrying the\n * key — its absence is as decisive as a literal.\n *\n * ## The inference, and why it cannot guess\n *\n * A key discriminates a plain union only when EVERY option is an object and, for that key:\n *\n * 1. every member either declares it as a bare `z.literal`, or omits it AND is strict (`z.strictObject`,\n * whose catchall is `never`) — a non-strict member that omits the key would also accept a value carrying it;\n * 2. the declared literal values are pairwise DISJOINT across members;\n * 3. at least one member declares it, and at most ONE member omits it.\n *\n * Under those conditions a value selects at most one member — by its literal, or by carrying no value for the\n * key (the one member that omits it) — so resolving by it is exact, the same guarantee\n * `z.discriminatedUnion` enforces at construction. Keys are tried in authoring order across the members, so\n * the answer is deterministic. A union that fails every key answers `undefined`, and callers keep treating\n * it as undiscriminated.\n *\n * One function, so the label walk (`collectResourceLabelFieldEntries`), the application label deciders and\n * the display ({@link resolveDiscriminatedUnionVariant}) agree about which unions have members at all.\n */\nexport function getUnionDiscriminatorKey(schema: z.ZodTypeAny): string | undefined {\n if (!isZodUnion(schema)) return undefined;\n const declared = getZodDefStringProperty(schema, 'discriminator');\n if (declared) return declared;\n\n const options = (getZodDefArrayProperty(schema, 'options') ?? []) as unknown[];\n if (options.length < 2) return undefined;\n if (!options.every((option) => isZodTypeAny(option) && isZodObject(option as z.ZodTypeAny))) return undefined;\n const members = options as z.ZodTypeAny[];\n const memberShapes = members.map((member) => getZodObjectShape(member));\n const candidateKeys = [...new Set(memberShapes.flatMap((shape) => Object.keys(shape)))];\n\n for (const key of candidateKeys) {\n const seenValues = new Set<unknown>();\n let declaringMembers = 0;\n let omittingMembers = 0;\n const discriminates = memberShapes.every((shape, index) => {\n const keySchema = shape[key] as z.ZodTypeAny | undefined;\n if (!keySchema) {\n omittingMembers += 1;\n return omittingMembers <= 1 && isStrictZodObject(members[index]);\n }\n if (!isZodLiteral(keySchema)) return false;\n const literalValues = getZodDefArrayProperty(keySchema, 'values') ?? [];\n if (literalValues.length === 0 || literalValues.some((literalValue) => seenValues.has(literalValue))) return false;\n for (const literalValue of literalValues) seenValues.add(literalValue);\n declaringMembers += 1;\n return true;\n });\n if (discriminates && declaringMembers > 0) return key;\n }\n return undefined;\n}\n\n/** A `z.strictObject` — its catchall is `never`, so it rejects every key its shape does not declare. */\nfunction isStrictZodObject(schema: z.ZodTypeAny): boolean {\n const catchall = getZodDefSchemaProperty(schema, 'catchall');\n return catchall !== undefined && getZodType(catchall) === 'never';\n}\n\n/**\n * The OBJECT members of a union that {@link getUnionDiscriminatorKey} discriminates — declared or plain —\n * in authoring order; `[]` for anything else. Pass the UNWRAPPED schema.\n *\n * For a declared discriminated union the non-object options are filtered out, as\n * `AutomatedLayoutFrontendUtils.getDiscriminatedUnionObjectOptions` does; a plain union has none (the\n * inference requires every option to be an object).\n */\nexport function getUnionObjectMembers(schema: z.ZodTypeAny): z.ZodObject<any>[] {\n if (!getUnionDiscriminatorKey(schema)) return [];\n const options = (getZodDefArrayProperty(schema, 'options') ?? []) as z.ZodTypeAny[];\n return options.filter((option): option is z.ZodObject<any> => isZodTypeAny(option) && isZodObject(option));\n}\n\n/**\n * Resolve the ONE variant of a discriminated union that a given value belongs to.\n *\n * Distinct from {@link getMergedObjectOrUnionShape}, and the difference is the point: merging every\n * variant answers \"what fields COULD this union carry\", which is what a schema-only caller (a\n * validator, a drift check) needs. A caller holding a VALUE can do better — the discriminator says\n * which variant this is, so the shape can be exactly that variant's, with no fields belonging to\n * the alternatives the value did not choose.\n *\n * The discriminator is {@link getUnionDiscriminatorKey}'s: declared, or carried structurally by a plain\n * `z.union` (#1022 — a versioned record's items). For such a plain union a value carrying NO discriminator\n * belongs to the one strict member that omits the key, when there is one; for a declared discriminated union\n * it belongs to none.\n *\n * Returns `null` when the schema is not a discriminated union, when the value carries no\n * discriminator its union can place, or when no variant matches it — all three are \"this caller cannot\n * narrow\", and a caller that renders should say nothing rather than guess a variant.\n */\nexport function resolveDiscriminatedUnionVariant(\n schema: z.ZodTypeAny,\n value: unknown,\n): z.ZodTypeAny | null {\n if (typeof value !== 'object' || value === null) return null;\n\n const discriminator = getUnionDiscriminatorKey(schema);\n if (!discriminator) return null;\n\n const discriminatorValue = (value as Record<string, unknown>)[discriminator];\n const options = (getZodDefArrayProperty(schema, 'options') ?? []) as z.ZodTypeAny[];\n if (discriminatorValue === undefined) {\n if (getZodDefStringProperty(schema, 'discriminator')) return null;\n return options.find((option) => isZodObject(option) && getZodObjectShape(option)[discriminator] === undefined) ?? null;\n }\n\n for (const option of options) {\n if (!isZodObject(option)) continue;\n const optionShape = getZodObjectShape(option);\n const discriminatorSchema = optionShape[discriminator];\n if (!discriminatorSchema) continue;\n /*\n * A variant's discriminator is a LITERAL (`z.literal(ICPArchetype.LEGAL_ENTITY)`), whose value\n * Zod 4 stores as an array under `values` — the same shape `getEnumValues` reads for the\n * literal case. Comparing against that is what makes the match exact rather than structural.\n */\n const literalValues = getZodDefArrayProperty(discriminatorSchema, 'values') ?? [];\n if (literalValues.includes(discriminatorValue)) return option;\n }\n return null;\n}\n\nexport function getZodDef(schema: z.ZodTypeAny): { type: string; [key: string]: unknown } | undefined {\n if (!hasZodInternals(schema)) return undefined;\n\n // First check legacy structure: schema._zod.def\n if ('_zod' in schema) {\n const zodProp = (schema as unknown as Record<string, unknown>)._zod;\n if (typeof zodProp === 'object' && zodProp !== null && 'def' in zodProp) {\n return (zodProp as { def: { type: string; [key: string]: unknown } }).def;\n }\n }\n\n // Use current structure: schema.def directly\n return (schema as unknown as { def: { type: string; [key: string]: unknown } }).def;\n}\n\nexport function getZodDefSchemaProperty(schema: z.ZodTypeAny, property: string): z.ZodTypeAny | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return isZodTypeAny(value) ? value : undefined;\n}\n\nexport function getZodDefArrayProperty(schema: z.ZodTypeAny, property: string): unknown[] | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return isArray(value) ? value : undefined;\n}\n\n/**\n * The payload of one entry of a schema's `checks` array.\n *\n * A CHECK IS ITSELF A ZOD INTERNAL, which is the whole reason this helper exists. Its own fields\n * live at `check._zod.def`, not on the check object, and they are keyed by a `check` discriminator\n * (`min_length`, `greater_than`, `string_format`, …) rather than by the Zod 3 `kind` property.\n *\n * Three readers in this file — {@link getStringFormat}, {@link getStringConstraints} and\n * {@link getNumberConstraints} — walked `checks` and read `check.kind`, which is `undefined` for\n * every check Zod 4 produces. None of them threw; each returned an empty answer, so a string with\n * `.max(120)` reported no maximum, a number with `.min(1)` reported no minimum, and `z.email()`\n * reported no format. Every consumer degraded silently: an `<input>` with no `maxLength`, no `min`,\n * and `type=\"text\"` where `type=\"email\"` was intended.\n */\nfunction getZodCheckDefinition(check: unknown): Record<string, unknown> | undefined {\n if (typeof check !== 'object' || check === null) return undefined;\n const internals = (check as { _zod?: unknown })._zod;\n if (typeof internals === 'object' && internals !== null && 'def' in internals) {\n const definition = (internals as { def: unknown }).def;\n if (typeof definition === 'object' && definition !== null) return definition as Record<string, unknown>;\n }\n // A check authored as a plain object (or a future Zod shape that flattens the payload) is read\n // directly rather than skipped — the discriminator lookup below tolerates a miss.\n return check as Record<string, unknown>;\n}\n\nexport function getZodDefStringProperty(schema: z.ZodTypeAny, property: string): string | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport function getZodDefFunctionProperty(schema: z.ZodTypeAny, property: string): (() => z.ZodTypeAny) | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n if (typeof value === 'function') {\n return value as () => z.ZodTypeAny;\n }\n return undefined;\n}\n\nexport function getZodDefProperty(schema: z.ZodTypeAny, property: string): unknown {\n const def = getZodDef(schema);\n return def?.[property];\n}\n\n/**\n * Get the inner schema from a pipe type (for transforms/refinements)\n * In Zod v4, pipe types have def.in and def.out\n * For most cases, we want def.in (the input schema before transformation)\n */\nexport function getPipeInputSchema(schema: z.ZodTypeAny): z.ZodTypeAny | undefined {\n if (!isZodPipe(schema)) return undefined;\n return getZodDefSchemaProperty(schema, 'in');\n}\n\n\n\n/**\n * Get all custom field metadata from a schema, traversing through wrapper types\n * (optional, nullable, default, pipe, readonly, catch, array, effects).\n * Always returns an object (never undefined) — empty `{}` if no metadata found.\n *\n * Delegates to the unified getMetadataRecursive from zod.module-override.ts.\n */\nexport function getCustomFieldMetadata(schema: z.ZodTypeAny): CustomFieldMetadata {\n if (!schema) {\n return {};\n }\n return getMetadataRecursive(schema) ?? {};\n}\n\n\n// =============================================================================\n// GENERIC {primitive}UI CROSS-CUTTING READERS\n// =============================================================================\n\n/**\n * All `*_UI` decorator keys. Used by cross-cutting readers to extract\n * base params (`edit`, `display`) from whichever primitive UI decorator\n * is present on a schema, without needing to know the concrete primitive.\n */\nconst UI_DECORATOR_KEYS = [\n ZodDecorator.BOOLEAN_UI, ZodDecorator.STRING_UI, ZodDecorator.NUMBER_UI,\n ZodDecorator.ENUM_UI, ZodDecorator.DATE_UI, ZodDecorator.DATETIME_UI,\n ZodDecorator.TIME_UI, ZodDecorator.MONEY_UI, ZodDecorator.CODE_UI,\n ZodDecorator.FILE_UI, ZodDecorator.DURATION_UI, ZodDecorator.PHONE_UI,\n ZodDecorator.BIGDECIMAL_UI, ZodDecorator.FOREIGN_KEY_UI,\n ZodDecorator.ARRAY_UI, ZodDecorator.OBJECT_UI,\n] as const;\n\n/**\n * Extract the edit-context base params from whichever `{primitive}UI` decorator\n * is present on the schema. Works generically because all `*UIEditParams`\n * extend `PrimitiveUIBaseEditParams`.\n *\n * Use this for cross-cutting concerns (validationMode, autosave, tooltip, etc.)\n * where the consumer doesn't know the concrete primitive type.\n */\nexport function getFieldUIEditConfig(schema: z.ZodTypeAny): PrimitiveUIBaseEditParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && 'edit' in params) {\n return (params as PrimitiveUIBaseParams).edit;\n }\n }\n return undefined;\n}\n\n/**\n * Extract the display-context base params from whichever `{primitive}UI` decorator\n * is present on the schema. Works generically because all `*UIDisplayParams`\n * extend `PrimitiveUIBaseDisplayParams`.\n *\n * Use this for cross-cutting concerns (tooltip, inlineEditable, etc.)\n * where the consumer doesn't know the concrete primitive type.\n */\nexport function getFieldUIDisplayConfig(schema: z.ZodTypeAny): PrimitiveUIBaseDisplayParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && 'display' in params) {\n return (params as PrimitiveUIBaseParams).display;\n }\n }\n return undefined;\n}\n\n/**\n * Display-context base params resolved for the SUMMARY context (cards, list\n * items, FK reference previews): `summaryOverride` merged over `display`,\n * key-by-key. A field with no `summaryOverride` behaves exactly as in the\n * regular display context.\n *\n * Summary renderers (the `ResourceSummaryDisplayer` pipeline) call this instead\n * of {@link getFieldUIDisplayConfig}; everything else keeps reading the plain\n * display params. The same merge convention applies to the primitive-specific\n * params (`getEnumUI(s)` consumers merge `{...ui.display, ...ui.summaryOverride}`\n * when rendering a summary surface).\n */\nexport function getFieldUISummaryDisplayConfig(schema: z.ZodTypeAny): PrimitiveUIBaseDisplayParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && ('display' in params || 'summaryOverride' in params)) {\n const typed = params as PrimitiveUIBaseParams;\n if (!typed.display && !typed.summaryOverride) return undefined;\n return { ...typed.display, ...typed.summaryOverride };\n }\n }\n return undefined;\n}\n\n// =============================================================================\n// TOOLTIP DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Check if a field should show a tooltip in display mode.\n * Reads from `{primitive}UI.display.tooltip` (boolean flag).\n * The actual tooltip text comes from the i18n label system, NOT from the decorator.\n */\nexport function hasTooltipForDisplay(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.tooltip === true;\n}\n\n/**\n * Check if a field should show a tooltip in edit mode.\n * Reads from `{primitive}UI.edit.tooltip` (boolean flag).\n * The actual tooltip text comes from the i18n label system, NOT from the decorator.\n */\nexport function hasTooltipForEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIEditConfig(schema)?.tooltip === true;\n}\n\n\n/**\n * Check if a field is marked as draft-relaxed (validation is relaxed in draft mode).\n *\n * @param schema - Zod schema to check\n * @returns true if the field is draft-relaxed\n *\n * @example\n * if (isDraftRelaxed(schema) && isDraftMode) {\n * // Skip strict validation for this field\n * }\n */\nexport function isDraftRelaxed(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_DRAFT_RELAXED] === true;\n}\n\n\n/**\n * FIX-P5-H1: Get showWhen parameters from a field schema.\n * Returns the conditional visibility configuration if present.\n *\n * @param schema - The field schema to get showWhen params from\n * @returns ShowWhenParams if decorator was applied, undefined otherwise\n *\n * @example\n * const showWhenParams = getShowWhenParams(fieldSchema);\n * if (showWhenParams) {\n * // Evaluate visibility based on conditions\n * const isVisible = evaluateShowWhenConditions(showWhenParams, formValues);\n * }\n */\nexport function getShowWhenParams(schema: z.ZodTypeAny): ShowWhenParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.SHOW_WHEN] as ShowWhenParams | undefined;\n}\n\n\n// =============================================================================\n// Enhanced Primitive Helpers\n// =============================================================================\n\n\n// ------------------------------------------------------------\n// STRING SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n\n/**\n * Keep the TIGHTER of two bounds a schema declares, so several constraints compose the way the\n * validator composes them: every lower bound must be cleared, so the highest governs, and every\n * upper bound must be respected, so the lowest does.\n *\n * `undefined` means \"nothing declared yet\" and always loses, which is what makes these safe to fold\n * over a checks array in any order.\n */\nfunction tightestLowerBound(current: number | undefined, candidate: number): number {\n return current === undefined ? candidate : Math.max(current, candidate);\n}\n\nfunction tightestUpperBound(current: number | undefined, candidate: number): number {\n return current === undefined ? candidate : Math.min(current, candidate);\n}\n\n/**\n * String format types detected from schema\n */\nexport type StringFormat = 'email' | 'url' | 'uuid' | 'cuid' | 'cuid2' | 'ulid' | 'regex' | 'datetime' | 'time' | 'ip' | null;\n\n\n/**\n * The format a string schema declares — `email`, `url`, `datetime`, … — or `null` for a plain one.\n *\n * Zod 4 expresses a format TWO ways and both are read here, because an author picks between them\n * freely and the rendered field must not depend on which they chose:\n *\n * - a dedicated schema type (`z.email()`, `z.iso.datetime()`) carries `def.format` and no checks;\n * - a chained refinement (`z.string().email()`) carries a `string_format` CHECK whose own\n * definition names the format.\n *\n * `ipv4` and `ipv6` both answer `'ip'`: this vocabulary exists to choose an input type and a\n * display treatment, and those are the same for either family.\n */\nexport function getStringFormat(schema: z.ZodTypeAny): StringFormat {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'string') {\n return null;\n }\n\n const declared = getZodDefStringProperty(unwrapped, 'format');\n const fromDeclaration = normalizeStringFormat(declared);\n if (fromDeclaration) return fromDeclaration;\n\n for (const check of getZodDefArrayProperty(unwrapped, 'checks') ?? []) {\n const definition = getZodCheckDefinition(check);\n if (definition?.check !== 'string_format') continue;\n const fromCheck = normalizeStringFormat(definition.format);\n if (fromCheck) return fromCheck;\n }\n\n return null;\n}\n\n/**\n * Zod's format name → this vocabulary. Unknown names answer `null` rather than being passed\n * through, because every consumer switches on {@link StringFormat} and an unrecognised value would\n * fall to a default anyway — but as a widened type, which is how a format nobody handles ends up\n * silently typed as one that is handled.\n */\nfunction normalizeStringFormat(value: unknown): StringFormat {\n switch (value) {\n case 'email': return 'email';\n case 'url': return 'url';\n case 'uuid': return 'uuid';\n case 'cuid': return 'cuid';\n case 'cuid2': return 'cuid2';\n case 'ulid': return 'ulid';\n case 'regex': return 'regex';\n case 'datetime': return 'datetime';\n case 'time': return 'time';\n // Both IP families answer the same thing — see the note on `getStringFormat`.\n case 'ip':\n case 'ipv4':\n case 'ipv6': return 'ip';\n default: return null;\n }\n}\n\n/**\n * Get min/max length constraints from string schema\n */\nexport function getStringConstraints(schema: z.ZodTypeAny): { minLength?: number; maxLength?: number } {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'string') {\n return {};\n }\n\n const result: { minLength?: number; maxLength?: number } = {};\n\n // Zod 4 keys these by a `check` discriminator and names the bound after the constraint\n // (`minimum` / `maximum` / `length`), where Zod 3 used `kind` plus a shared `value`.\n //\n // Bounds ACCUMULATE toward the tightest rather than being assigned, because a schema may carry\n // several and the last one authored is not the one that governs. `z.string().min(3).nonempty()`\n // is ordinary authoring — a business floor plus a sanity floor — and assigning would report\n // `minLength: 1` for a schema that rejects `\"ab\"`. The same reasoning the truncation and the\n // exclusive-bound branches already follow: a hint looser than the schema invites a value the\n // server refuses, which is worse than no hint at all.\n for (const check of getZodDefArrayProperty(unwrapped, 'checks') ?? []) {\n const definition = getZodCheckDefinition(check);\n if (!definition) continue;\n const minimum = definition.minimum;\n const maximum = definition.maximum;\n const exactLength = definition.length;\n\n if (definition.check === 'min_length' && typeof minimum === 'number') {\n result.minLength = tightestLowerBound(result.minLength, minimum);\n }\n if (definition.check === 'max_length' && typeof maximum === 'number') {\n result.maxLength = tightestUpperBound(result.maxLength, maximum);\n }\n if (definition.check === 'length_equals' && typeof exactLength === 'number') {\n result.minLength = tightestLowerBound(result.minLength, exactLength);\n result.maxLength = tightestUpperBound(result.maxLength, exactLength);\n }\n }\n\n return result;\n}\n\n\n// ------------------------------------------------------------\n// NUMBER SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get min/max value constraints from number schema\n */\nexport function getNumberConstraints(schema: z.ZodTypeAny): {\n min?: number;\n max?: number;\n step?: number;\n isInt?: boolean;\n} {\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n if (type !== 'number' && type !== 'int') {\n return {};\n }\n\n const result: { min?: number; max?: number; step?: number; isInt?: boolean } = {};\n\n if (type === 'int') {\n result.isInt = true;\n result.step = 1;\n }\n\n // Zod 4 names a bound by DIRECTION rather than by role — `greater_than` / `less_than`, each\n // carrying an `inclusive` flag — where Zod 3 had `min` / `max`. Integer-ness is a `number_format`\n // check (`z.number().int()`) or the schema type itself (`z.int()`), never a `kind: 'int'`.\n //\n // Read INTEGER-NESS FIRST, in its own pass, because an exclusive bound cannot be translated\n // without knowing it — see below.\n //\n // It arrives the same TWO ways a string format does, and both must be read: `z.number().int()`\n // adds a `number_format` CHECK, while `z.int()` is its own schema type carrying `def.format` and\n // no checks at all. Reading only the check left `z.int()` — the shorter and more idiomatic\n // spelling — reporting no integer constraint and therefore no step.\n const declaredNumberFormat = getZodDefStringProperty(unwrapped, 'format');\n if (typeof declaredNumberFormat === 'string' && declaredNumberFormat.includes('int')) {\n result.isInt = true;\n result.step = 1;\n }\n\n const checks = getZodDefArrayProperty(unwrapped, 'checks') ?? [];\n for (const check of checks) {\n const definition = getZodCheckDefinition(check);\n if (definition?.check === 'number_format' && typeof definition.format === 'string' && definition.format.includes('int')) {\n result.isInt = true;\n result.step = 1;\n }\n }\n\n for (const check of checks) {\n const definition = getZodCheckDefinition(check);\n if (!definition) continue;\n const value = definition.value;\n if (typeof value !== 'number') continue;\n const inclusive = definition.inclusive === true;\n\n if (definition.check === 'greater_than') {\n // An EXCLUSIVE bound has no HTML equivalent: `min` is inclusive, so writing the raw value\n // would ADMIT a number the schema rejects — `z.number().positive()` becoming `min=\"0\"` and\n // accepting zero. On an integer the next representable value is exact, so it translates; on a\n // float there is no honest answer and the constraint is left unstated rather than stated\n // wrongly. A field with no hint still validates; a field with a wrong hint invites a value\n // the server refuses.\n //\n // And for the same reason the result ACCUMULATES toward the tightest bound instead of being\n // assigned: `z.number().int().min(5).positive()` carries two lower bounds, and taking the\n // last would report `min: 1` for a schema that rejects 1 through 4.\n if (inclusive) result.min = tightestLowerBound(result.min, value);\n else if (result.isInt) result.min = tightestLowerBound(result.min, value + 1);\n }\n if (definition.check === 'less_than') {\n if (inclusive) result.max = tightestUpperBound(result.max, value);\n else if (result.isInt) result.max = tightestUpperBound(result.max, value - 1);\n }\n if (definition.check === 'multiple_of') {\n result.step = value;\n }\n }\n\n return result;\n}\n\n// ------------------------------------------------------------\n// ENUM SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Extract enum values from z.enum (Zod 4)\n * In Zod 4, both z.enum() and z.enum() create schemas with type 'enum'\n * - z.enum(['a', 'b', 'c']) - def.entries is an object map (e.g. { a: 'a', b: 'b' })\n * - z.enum(TypeScriptEnum) / z.enum(TypeScriptEnum) - def.entries is the enum object map\n */\nexport function getEnumValues(schema: z.ZodTypeAny): string[] {\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n // A string literal is a vocabulary — usually of one value (`z.literal('value')`), and in Zod 4\n // legitimately of several (`z.literal(['a', 'b'])`), which stores every value in `def.values`.\n // EVERY string value is the vocabulary: reading only `values[0]` planned and worded one value of a\n // multi-value discriminator and rendered every other member's row raw (#1096). Non-string literals\n // (numbers, booleans, null) are not select-field vocabularies and contribute nothing.\n if (type === 'literal') {\n const values = (getZodDefProperty(unwrapped, 'values') as unknown[] | undefined) ?? [];\n return values.filter((value): value is string => typeof value === 'string');\n }\n\n // Handle union types - combine enum values from all options\n // This handles cases like z.union([z.enum(A), z.enum(B)])\n if (type === 'union') {\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n const allValues: string[] = [];\n const seenValues = new Set<string>();\n\n for (const opt of options) {\n if (isZodTypeAny(opt)) {\n const optValues = getEnumValues(opt as z.ZodTypeAny);\n for (const val of optValues) {\n if (!seenValues.has(val)) {\n seenValues.add(val);\n allValues.push(val);\n }\n }\n }\n }\n\n return allValues;\n }\n\n if (type !== 'enum') {\n return [];\n }\n\n // In Zod v4.1.x, enum values are stored in def.entries (object map).\n const entries = getZodDefProperty(unwrapped, 'entries');\n if (!entries || typeof entries !== 'object') return [];\n\n const values: string[] = [];\n for (const key of Object.keys(entries as Record<string, unknown>)) {\n const value = (entries as Record<string, unknown>)[key];\n // For numeric enums, TypeScript creates reverse mappings: entries[\"0\"] = \"A\", entries[\"A\"] = 0\n if (typeof value === 'string') {\n // Skip reverse mapping values where key is numeric (e.g., \"0\" -> \"A\")\n if (!Number.isNaN(Number(key))) continue;\n values.push(value);\n } else if (typeof value === 'number') {\n values.push(String(value));\n }\n }\n return values;\n}\n\n\n// ------------------------------------------------------------\n// OBJECT SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Validates that an object contains actual Zod schema instances (not definitions).\n * A valid Zod 4 schema instance has either:\n * - _zod property (internal structure)\n * - safeParse method (public API)\n */\nfunction isValidSchemaShape(shape: Record<string, unknown>): shape is Record<string, z.ZodTypeAny> {\n // Skip $-prefixed keys (Zod v4 internals like $id, $brand) when picking\n // the representative entry to validate — their values are primitives, not schemas.\n const keys = Object.keys(shape);\n const firstUserKey = keys.find(k => !k.startsWith('$'));\n if (!firstUserKey) return keys.length === 0; // Only internal keys or empty → valid if empty\n\n const firstValue = shape[firstUserKey];\n if (!firstValue || typeof firstValue !== 'object') return false;\n\n const hasZodInternals = '_zod' in firstValue;\n const hasSafeParse = 'safeParse' in firstValue && typeof (firstValue as Record<string, unknown>).safeParse === 'function';\n\n return hasZodInternals || hasSafeParse;\n}\n\ndeclare const console: { warn(...args: unknown[]): void };\n\n/**\n * Strips Zod v4 internal properties (e.g. $id, $brand) from a shape record.\n * These are runtime metadata, not user-defined fields, and leak into\n * Object.entries() when iterating the raw .shape object.\n *\n * Uses warn-once to avoid log flooding (same pattern as _warnedStorageProviders in zod-file.ts).\n * This is a low-level shared lib used by both frontend and backend — console.warn\n * is the only available logging primitive here (no injected logger).\n */\nconst _warnedInternalKeys = new Set<string>();\n\nfunction stripZodInternalKeys(shape: Record<string, z.ZodTypeAny>): Record<string, z.ZodTypeAny> {\n const keys = Object.keys(shape);\n const internalKeys = keys.filter(k => k.startsWith('$'));\n if (internalKeys.length === 0) return shape;\n\n const warnKey = internalKeys.sort().join(',');\n if (!_warnedInternalKeys.has(warnKey)) {\n _warnedInternalKeys.add(warnKey);\n console.warn(\n `[getObjectShape] Stripping Zod internal keys from shape: [${internalKeys.join(', ')}]. ` +\n `If a legitimate user-defined field starts with '$', this filter is incorrect. ` +\n `Stripped keys had values: ${internalKeys.map(k => `${k}=${typeof shape[k] === 'object' ? 'object' : shape[k]}`).join(', ')}`\n );\n }\n\n const clean: Record<string, z.ZodTypeAny> = {};\n for (const k of keys) {\n if (!k.startsWith('$')) clean[k] = shape[k];\n }\n return clean;\n}\n\n/**\n * Get the shape of an object schema.\n *\n * IMPORTANT: In Zod 4, `def.shape` contains schema DEFINITIONS (JSON-serializable),\n * NOT schema instances with methods. This function validates that returned shapes\n * contain actual Zod schema instances.\n *\n * If the schema is wrapped (e.g., with .default()), it will be unwrapped first.\n */\n/**\n * Resolve ONE field's declared schema from an object-like root, seeing through a discriminated\n * union.\n *\n * `getObjectShape()` deliberately returns `null` for a union, which is correct for its own contract\n * but useless to a caller that only needs to ask a question about a single named field. Polymorphic\n * resources (`createSchemaFamily` output) present exactly that shape, so a caller using\n * `getObjectShape()` alone silently answers \"field unknown\" for every field of every polymorphic\n * resource — the failure mode that once left polymorphic form fields unlabelled.\n *\n * Union handling returns the FIRST variant that declares the name. Variants of one resource family\n * share a field's declaration for any field they have in common, so the first match is\n * representative; a caller needing per-variant precision must narrow the union itself first.\n *\n * @param schema - object, or discriminated union of objects (wrappers are unwrapped).\n * @param fieldName - top-level field name.\n * @returns the field's declared schema, or `undefined` when no variant declares it.\n */\nexport function getObjectLikeFieldSchema(schema: z.ZodTypeAny, fieldName: string): z.ZodTypeAny | undefined {\n const directShape = getObjectShape(schema);\n if (directShape) return directShape[fieldName];\n\n const unwrapped = unwrapSchema(schema);\n if (!isZodUnion(unwrapped)) return undefined;\n\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n for (const option of options) {\n const optionShape = getObjectShape(option as z.ZodTypeAny);\n const fieldSchema = optionShape?.[fieldName];\n if (fieldSchema) return fieldSchema;\n }\n\n return undefined;\n}\n\nexport function getObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'object') {\n return null;\n }\n\n // Try public .shape property - this should contain actual schema instances\n if ('shape' in unwrapped && typeof unwrapped.shape === 'object' && unwrapped.shape !== null) {\n const shape = unwrapped.shape as Record<string, unknown>;\n\n // Validate that the shape contains actual Zod schemas, not definitions\n if (isValidSchemaShape(shape)) {\n return stripZodInternalKeys(shape as Record<string, z.ZodTypeAny>);\n }\n // Shape exists but contains corrupted definitions - will be caught by fail-fast below\n }\n\n // Try accessing shape through _zod internals (Zod 4 structure)\n // In some Zod 4 versions, _zod.def.shape might still contain actual schema instances\n if ('_zod' in unwrapped) {\n const zodInternals = (unwrapped as unknown as { _zod: { def?: { shape?: Record<string, unknown> } } })._zod;\n if (zodInternals?.def?.shape && typeof zodInternals.def.shape === 'object') {\n const shape = zodInternals.def.shape;\n\n // Validate that it contains actual schema instances\n if (isValidSchemaShape(shape)) {\n return stripZodInternalKeys(shape as Record<string, z.ZodTypeAny>);\n }\n }\n }\n\n // FAIL-FAST: Do NOT return corrupted schemas silently\n // Throw with diagnostic info to identify the corruption source\n if ('shape' in unwrapped && typeof unwrapped.shape === 'object' && unwrapped.shape !== null) {\n const shape = unwrapped.shape as Record<string, unknown>;\n const firstKey = Object.keys(shape)[0];\n const firstValue = shape[firstKey];\n const firstValueKeys = firstValue && typeof firstValue === 'object'\n ? Object.keys(firstValue as object).slice(0, 10).join(', ')\n : 'N/A';\n\n throw new Error(\n `[getObjectShape] Schema shape contains corrupted objects (not valid Zod schemas). ` +\n `First field \"${firstKey}\" is missing safeParse method. ` +\n `Keys on corrupted object: [${firstValueKeys}]. ` +\n `This usually means the schema was JSON.stringify/parsed or incorrectly cloned.`\n );\n }\n\n // Also check _zod.def.shape - same fail-fast approach\n if ('_zod' in unwrapped) {\n const zodInternals = (unwrapped as unknown as { _zod: { def?: { shape?: Record<string, unknown> } } })._zod;\n if (zodInternals?.def?.shape && typeof zodInternals.def.shape === 'object') {\n const shape = zodInternals.def.shape;\n const firstKey = Object.keys(shape)[0];\n const firstValue = shape[firstKey];\n const firstValueKeys = firstValue && typeof firstValue === 'object'\n ? Object.keys(firstValue as object).slice(0, 10).join(', ')\n : 'N/A';\n\n throw new Error(\n `[getObjectShape] _zod.def.shape contains corrupted objects (not valid Zod schemas). ` +\n `First field \"${firstKey}\" is missing safeParse. ` +\n `Keys: [${firstValueKeys}]. ` +\n `This usually means the schema was JSON.stringify/parsed or incorrectly cloned.`\n );\n }\n }\n\n return null;\n}\n\n/**\n * Get the keys of an object schema shape\n */\nexport function getObjectKeys(schema: z.ZodTypeAny): string[] {\n const shape = getObjectShape(schema);\n return shape ? Object.keys(shape) : [];\n}\n\n/**\n * Extract all flattened paths from a Zod schema.\n * Recursively traverses object schemas to build dot-notation paths (e.g., 'field.nestedField').\n * Handles optional, nullable, array, and union types.\n *\n * @param zodSchema - The Zod schema to extract paths from\n * @param prefix - Current path prefix (used for recursion)\n * @param schemaDepthCounters - Map to track depth per schema instance (prevents infinite recursion)\n * @param maxDepthPerSchema - Maximum depth to traverse per schema instance (default: 3)\n * @returns Array of flattened dot-notation paths\n */\nexport function extractFlattenedPathsFromZodSchema(\n zodSchema: z.ZodTypeAny,\n prefix: string = '',\n schemaDepthCounters: Map<any, number> = new Map(),\n maxDepthPerSchema: number = 3\n): string[] {\n const paths: string[] = [];\n\n if (!zodSchema) {\n return paths;\n }\n\n // Check depth for this specific schema instance to prevent infinite recursion\n const currentDepth = schemaDepthCounters.get(zodSchema) || 0;\n if (currentDepth >= maxDepthPerSchema) {\n return paths;\n }\n\n // Increment depth counter for this schema\n schemaDepthCounters.set(zodSchema, currentDepth + 1);\n\n try {\n const zodType = getZodType(zodSchema);\n\n switch (zodType) {\n case 'object': {\n // Extract shape from zod object using public API\n const shape = getZodObjectShape(zodSchema);\n\n Object.entries(shape).forEach(([fieldName, fieldSchema]) => {\n const currentPath = prefix ? `${prefix}.${fieldName}` : fieldName;\n\n // Add the current path\n paths.push(currentPath);\n\n // Recursively process nested objects\n const nestedPaths = extractFlattenedPathsFromZodSchema(\n fieldSchema as z.ZodTypeAny,\n currentPath,\n new Map(schemaDepthCounters) // Pass a copy to avoid shared state issues\n );\n paths.push(...nestedPaths);\n });\n break;\n }\n\n case 'optional': {\n // Process the inner type for optional fields\n const innerType = getZodDefSchemaProperty(zodSchema, 'innerType');\n if (innerType) {\n const innerPaths = extractFlattenedPathsFromZodSchema(\n innerType,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...innerPaths);\n }\n break;\n }\n\n case 'nullable': {\n // Process the inner type for nullable fields\n const innerType = getZodDefSchemaProperty(zodSchema, 'innerType');\n if (innerType) {\n const innerPaths = extractFlattenedPathsFromZodSchema(\n innerType,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...innerPaths);\n }\n break;\n }\n\n case 'array': {\n // For arrays, extract paths from the element type\n // This allows finding nested fields in array elements (e.g., \"items.organizationId\")\n const element = getZodDefSchemaProperty(zodSchema, 'element');\n if (element) {\n const elementPaths = extractFlattenedPathsFromZodSchema(\n element,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...elementPaths);\n }\n break;\n }\n\n case 'union': {\n // For unions, try to extract paths from all possible schemas\n const options = getZodDefArrayProperty(zodSchema, 'options') || [];\n options.forEach((option: unknown) => {\n if (option && typeof option === 'object' && hasZodInternals(option)) {\n const unionPaths = extractFlattenedPathsFromZodSchema(\n option as unknown as z.ZodTypeAny,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...unionPaths);\n }\n });\n break;\n }\n\n default: {\n // For primitive types (string, number, boolean, etc.), no nested paths\n break;\n }\n }\n } catch (error) {\n // Silently handle errors - return paths collected so far\n }\n\n // Decrement depth counter when done processing this schema\n schemaDepthCounters.set(zodSchema, currentDepth);\n return paths;\n}\n\n// ------------------------------------------------------------\n// ARRAY SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the item schema from an array schema\n */\nexport function getArrayItemSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'array') {\n return null;\n }\n\n const element = getZodDefSchemaProperty(unwrapped, 'element');\n return element ?? null;\n}\n\n/**\n * How many items an array schema admits — `z.array(x).min(1).max(3)`.\n *\n * READS ZOD 4, and did not until 2026-09-20: it looked for `def.minLength` / `def.maxLength`\n * carrying a `{ value }` object, which is the ZOD 3 shape. Zod 4 puts array bounds in `def.checks`\n * under a `check` discriminator (`min_length` / `max_length` / `length_equals`) with the bound\n * named after the constraint, exactly as the string reader above already handles. So this returned\n * `{}` for every array ever declared — measured, all three of `.min(1).max(2)`, `.max(1)` and no\n * bound at all answered the same thing.\n *\n * The cost was silent and total: an author could write `.max(3)` on a multi-select and get no\n * limit, no disabled options and no hint, with the only enforcement left at submit — and the one\n * control that read this looked, in its source, exactly like a control that honoured it.\n *\n * Bounds ACCUMULATE toward the tightest, for the same reason the string reader states: a schema\n * may carry several (`.min(1).nonempty()` is ordinary authoring) and the last one authored is not\n * the one that governs. A hint looser than the schema invites a value the server refuses, which is\n * worse than no hint at all.\n */\nexport function getArrayConstraints(schema: z.ZodTypeAny): { minLength?: number; maxLength?: number } {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'array') {\n return {};\n }\n\n const result: { minLength?: number; maxLength?: number } = {};\n\n for (const check of getZodDefArrayProperty(unwrapped, 'checks') ?? []) {\n const definition = getZodCheckDefinition(check);\n if (!definition) continue;\n const minimum = definition.minimum;\n const maximum = definition.maximum;\n const exactLength = definition.length;\n\n if (definition.check === 'min_length' && typeof minimum === 'number') {\n result.minLength = tightestLowerBound(result.minLength, minimum);\n }\n if (definition.check === 'max_length' && typeof maximum === 'number') {\n result.maxLength = tightestUpperBound(result.maxLength, maximum);\n }\n if (definition.check === 'length_equals' && typeof exactLength === 'number') {\n result.minLength = tightestLowerBound(result.minLength, exactLength);\n result.maxLength = tightestUpperBound(result.maxLength, exactLength);\n }\n }\n\n return result;\n}\n\n// ------------------------------------------------------------\n// RECORD/MAP SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the value schema from a record schema.\n *\n * A record's keys are DATA rather than declared fields, so it has no `shape` and\n * {@link getObjectShape} correctly answers `null` for one. What a consumer still needs is the\n * single schema every entry's value shares — enough to render each entry through the ordinary\n * field dispatch instead of as raw text.\n *\n * That is not hypothetical: `FieldSchemaType.RECORD` had no display branch at all until\n * 2026-09-18, so a record field fell through `DisplayValueDispatcher` to its \"unsupported type\"\n * chip and rendered an ERROR over data that was fully present — measured on four settings panes\n * (an organization's `Limits` and `Limit overrides`, and SSO's `Domain verification status` on\n * both the organization and application surfaces). This function existed the whole time; the\n * display simply never called it.\n *\n * Unwraps first, so an `.optional()` / `.default()` / `.nullable()` record answers like a bare one.\n */\nexport function getRecordValueSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'record') {\n return null;\n }\n\n const valueSchema = getZodDefSchemaProperty(unwrapped, 'valueType');\n return valueSchema ?? null;\n}\n\n/**\n * The KEY schema of a RECORD, or `null` when the schema is not a record — {@link getRecordValueSchema}'s twin.\n *\n * A record's keys are data, but they can still belong to a named vocabulary: an organization's `limits` is keyed by\n * limit identifiers, declared `z.record(z.string().systemEnum('Limit'), …)`, and a display reads each key's word\n * through the vocabulary the key schema names (#1851) instead of printing the identifier.\n *\n * Unwraps first, like {@link getRecordValueSchema}.\n */\nexport function getRecordKeySchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'record') {\n return null;\n }\n\n const keySchema = getZodDefSchemaProperty(unwrapped, 'keyType');\n return keySchema ?? null;\n}\n\n/**\n * The element schema of a SET, or `null` when the schema is not a set.\n *\n * Sibling of {@link getRecordValueSchema} and {@link getMapSchemas}, and added for the same reason\n * that one records: `FieldSchemaType.SET` classified correctly and had no display branch, so a set\n * field fell through `DisplayValueDispatcher` to its \"unsupported type\" chip and rendered an ERROR\n * over data that was fully present. A set is an ARRAY without order or duplicates, so its element\n * schema is the only thing a renderer needs to treat it as one.\n *\n * Unwraps first, so an `.optional()` / `.default()` / `.nullable()` set answers like a bare one.\n */\nexport function getSetValueSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'set') {\n return null;\n }\n\n return getZodDefSchemaProperty(unwrapped, 'valueType') ?? null;\n}\n\n/**\n * The positional item schemas of a TUPLE, or `null` when the schema is not a tuple.\n *\n * A tuple differs from an array in exactly one way that matters to a renderer: each POSITION has\n * its own schema, so the items cannot share one element type. Returning the list lets a display\n * branch pair `value[i]` with `items[i]` and render each position as the type it actually is,\n * rather than formatting the whole tuple as text.\n *\n * Unwraps first, like its siblings.\n */\nexport function getTupleItemSchemas(schema: z.ZodTypeAny): readonly z.ZodTypeAny[] | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'tuple') {\n return null;\n }\n\n const items = getZodDefProperty(unwrapped, 'items');\n return Array.isArray(items) ? (items as z.ZodTypeAny[]) : null;\n}\n\n/**\n * Get the key and value schemas from a map schema\n */\nexport function getMapSchemas(schema: z.ZodTypeAny): { keySchema: z.ZodTypeAny; valueSchema: z.ZodTypeAny } | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'map') {\n return null;\n }\n\n const keySchema = getZodDefSchemaProperty(unwrapped, 'keyType');\n const valueSchema = getZodDefSchemaProperty(unwrapped, 'valueType');\n\n if (keySchema && valueSchema) {\n return { keySchema, valueSchema };\n }\n\n return null;\n}\n\n// ------------------------------------------------------------\n// DEFAULT VALUE UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the default value from a schema if it has one\n */\nexport function getDefaultValue(schema: z.ZodTypeAny): unknown | undefined {\n const type = getZodType(schema);\n\n if (type === 'default') {\n const defaultValue = getZodDefProperty(schema, 'defaultValue');\n if (typeof defaultValue === 'function') {\n return defaultValue();\n }\n return defaultValue;\n }\n\n if (type === 'optional' || type === 'nullable') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? getDefaultValue(innerSchema) : undefined;\n }\n\n return undefined;\n}\n\n\n// =============================================================================\n// DB related\n// =============================================================================\n\nexport function isDBIndexed(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_DB_INDEXED);\n}\n\n/** @see isForeignKeyField — alias for backward compatibility */\nexport function isForeignKey(schema: z.ZodTypeAny): boolean {\n return isForeignKeyField(schema);\n}\n\n/** @see isUniqueField — alias for backward compatibility */\nexport function isUnique(schema: z.ZodTypeAny): boolean {\n return isUniqueField(schema);\n}\n\n/** @see getUniqueFieldParams — alias for backward compatibility */\nexport function getUniqueParams(schema: z.ZodTypeAny): UniqueFieldParams | undefined {\n return getUniqueFieldParams(schema);\n}\n\n/**\n * Check if a field is a primary key.\n * Primary keys are automatically: excludeFromCreate, isHidden, isUnique, isDBIndexed\n * @see isPrimaryKeyField — alias for backward compatibility\n */\nexport function isPrimaryKey(schema: z.ZodTypeAny): boolean {\n return isPrimaryKeyField(schema);\n}\n\n/**\n * Check if a field has a TTL (Time To Live) decorator.\n * TTL fields are used for MongoDB document expiration.\n */\nexport function hasTtl(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.TTL);\n}\n\n/**\n * Get TTL field params from a schema.\n * Returns undefined if the schema is not a TTL field.\n */\nexport function getTtlParams(schema: z.ZodTypeAny): TtlFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.TTL];\n}\n\n// =============================================================================\n// DECORATOR READER FUNCTIONS (using getMetadataRecursive — recursive unwrapping)\n// These handle .optional(), .nullable(), .default(), .refine(), array wrappers etc.\n// =============================================================================\n\n/**\n * Get the structural FK params (polymorphicVariants) from `IS_FOREIGN_KEY`.\n * Returns undefined if the schema is not a foreign key.\n */\nexport function getForeignKeyParams(schema: z.ZodTypeAny): ForeignKeyStructuralParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_FOREIGN_KEY];\n\n if (value === undefined) return undefined;\n if (value === true) return {};\n\n return value as ForeignKeyStructuralParams;\n}\n\n/**\n * Get FK UI display params from `FOREIGN_KEY_UI.display`. Returns mode, linkable, displayPresetOverride.\n *\n * When the FK exists but authors no explicit `display` config, `mode` falls back to\n * {@link DEFAULT_FOREIGN_KEY_DISPLAY_MODE} — the single source for that default. Do not\n * restate a `ForeignKeyDisplayMode` member here: a second declaration of the\n * default is how this surface and the display preset came to disagree.\n */\nexport function getForeignKeyUIDisplay(schema: z.ZodTypeAny): ForeignKeyUIDisplayParams | undefined {\n if (!isForeignKeyField(schema)) return undefined;\n\n const metadata = getCustomFieldMetadata(schema);\n const uiParams = metadata[ZodDecorator.FOREIGN_KEY_UI] as ForeignKeyUIParams | undefined;\n const display = uiParams?.display;\n\n return { mode: DEFAULT_FOREIGN_KEY_DISPLAY_MODE, ...display };\n}\n\n/**\n * Get the polymorphic variants from a foreign key field.\n * Returns the array of PolymorphicFkVariant if the FK is polymorphic, or undefined.\n */\nexport function getPolymorphicFkVariants(schema: z.ZodTypeAny): PolymorphicFkVariant[] | undefined {\n const params = getForeignKeyParams(schema);\n return params?.polymorphicVariants;\n}\n\n/**\n * Resolve the per-record DISCRIMINATED polymorphic FK declaration, if any.\n *\n * Returns `{ discriminatorField, variants }` only when the FK is a single\n * SHARED field pointing at a polymorphic branch group — i.e. BOTH a\n * `polymorphicDiscriminatorField` AND at least one `polymorphicVariants` entry\n * are declared. Returns `undefined` for plain FKs and for rename-only\n * polymorphic FKs (variants present, no discriminator field).\n *\n * Consumers (registry FK→type map builders, FK display/link resolution) use\n * this as the signal that the FK resolves to a different branch PER RECORD: the\n * holder record's `discriminatorField` value is matched against each variant's\n * `discriminatorValue` to pick the branch. See\n * {@link ForeignKeyStructuralParams.polymorphicDiscriminatorField}.\n */\nexport function getDiscriminatedPolymorphicForeignKey(\n schema: z.ZodTypeAny,\n): { discriminatorField: string; variants: PolymorphicFkVariant[] } | undefined {\n const params = getForeignKeyParams(schema);\n const discriminatorField = params?.polymorphicDiscriminatorField;\n const variants = params?.polymorphicVariants;\n if (!discriminatorField || !variants || variants.length === 0) return undefined;\n return { discriminatorField, variants };\n}\n\n/**\n * Check if a schema field is a foreign key (recursive traversal through wrappers).\n */\nexport function isForeignKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_FOREIGN_KEY] !== undefined;\n}\n\n/**\n * Check if a schema field has the isSummaryField decorator.\n */\nexport function isSummaryField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_SUMMARY_FIELD] !== undefined;\n}\n\n/**\n * Get the isSummaryField decorator parameters.\n * @returns SummaryFieldParams or default empty object if decorator is used without params\n */\nexport function getSummaryFieldParams(schema: z.ZodTypeAny): SummaryFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_SUMMARY_FIELD];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as SummaryFieldParams;\n}\n\n/**\n * Check if a schema field has the isBackendOnly decorator.\n */\nexport function isBackendOnlyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_BACKEND_ONLY] !== undefined;\n}\n\n/**\n * Get the isBackendOnly decorator parameters.\n */\nexport function getBackendOnlyParams(schema: z.ZodTypeAny): BackendOnlyFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_BACKEND_ONLY];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as BackendOnlyFieldParams;\n}\n\n/**\n * Check if a schema field has the isWriteOnlySecret decorator.\n */\nexport function isWriteOnlySecretField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_WRITE_ONLY_SECRET] !== undefined;\n}\n\n/**\n * Read a field's stored impersonalization params, declared via the fluent\n * `.impersonalizeWith(treatment, options?)` method or the equivalent\n * `addImpersonalizeWith(schema, treatment, options?)` helper.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. This matters because the retention guards `safeParse` the OUTER wrapper, and\n * treatments are commonly declared on `.nullish()` fields (`REMOVE` writes `null`).\n *\n * The decorator chokepoint normalizes both authoring forms to the params object, so the stored\n * value is always an object. The bare-string branch below is a defensive read for metadata written\n * by any path that bypassed the chokepoint — it keeps a legal treatment legible rather than\n * silently reading as UNTREATED, which is the PII-leak failure mode this decorator exists to\n * prevent.\n */\n/**\n * Read a field's declared portability provenance — where its value came from — set via the fluent\n * `.portabilityProvenance(provenance)` method or `addPortabilityProvenance(schema, provenance)`.\n *\n * Returns the raw string; the saas-models layer types it as `DataPortabilityProvenance`\n * (zod-decorators sits below saas-models and cannot import the enum).\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()` — the same wrapper-transparency `getImpersonalizeTreatment` needs, and for the same\n * reason: personal-data fields are commonly optional.\n *\n * `undefined` means the field carries NO declaration of its own. That is not an error — the field\n * inherits its resource's `portabilityPolicy.defaultProvenance`, and only if THAT is absent too\n * does an Art. 20 export refuse. Resolving that fallback chain belongs to the resource factory,\n * which knows the resource; this reader answers only \"did the field itself say?\".\n */\nexport function getPortabilityProvenance(schema: z.ZodTypeAny): string | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.PORTABILITY_PROVENANCE];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/**\n * WHICH KINDS of personal data does this field hold? Returns the declared `PersonalDataCategory`\n * values (as opaque strings — this package sits below `saas-models` and cannot import the enum),\n * or `undefined` when the field carries no declaration.\n *\n * Set via the fluent `.dataCategories(...)` method or `addDataCategories(schema, ...)`. Always an\n * ARRAY, deduped and non-empty: the decorator chokepoint normalizes a single-value authoring form\n * on the way in, so a caller never has to handle two shapes.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was written before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. An optional field is the common shape for exactly the data a notice enumerates, so\n * a reader that missed the wrapper would under-report — the silent direction.\n *\n * `undefined` is the correct and common answer: most fields hold no personal data and carry no\n * declaration. It is ABSENCE, not an empty array, that the compliance gap report reads — the\n * chokepoint refuses to store an empty declaration for that reason.\n *\n * @wildo_source:part:start zod.decorators.data-categories facet:layer:shared facet:family:decorator facet:kind:api facet:audience:app-developer\n */\nexport function getDataCategories(schema: z.ZodTypeAny): readonly string[] | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.DATA_CATEGORIES];\n return Array.isArray(value) && value.length > 0 ? (value as readonly string[]) : undefined;\n}\n/** @wildo_source:part:end zod.decorators.data-categories */\n\n/**\n * Is this field's VALUE recorded on the resource-operation audit event when an operation changes\n * it? Set via the fluent `.isAuditEvidence()` method or `addAuditEvidence(schema)`.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * marker whether it was declared before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. That matters here in both directions: a nullable `suspendedUntil` is exactly the\n * kind of lifecycle field worth marking, and a marker the reader missed would silently drop the\n * evidence rather than fail.\n *\n * `false` is the correct and common answer — the audit event still records that the field CHANGED\n * (by name); only its before/after VALUES are withheld. Withholding is the default on purpose:\n * audit rows reach the immutable ledger, which cannot be scrubbed.\n *\n * ⚠️ This is the WRITE-side question. The READ-side one (\"was this value disclosed?\") is answered\n * only by `isBackendOnly({ isReturnedAtCreation: true })`, which fires a `FIELD_ACCESS` event when a\n * server-minted secret is first exposed. The two are independent claims; neither implies the other.\n */\nexport function isAuditEvidenceField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_AUDIT_EVIDENCE] === true;\n}\n\nfunction getImpersonalizeParams(schema: z.ZodTypeAny): ImpersonalizeFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IMPERSONALIZE_WITH];\n if (typeof value === 'string') return { treatment: value };\n if (value !== null && typeof value === 'object' && typeof (value as ImpersonalizeFieldParams).treatment === 'string') {\n return value as ImpersonalizeFieldParams;\n }\n return undefined;\n}\n\n/**\n * Get a field's impersonalization scrub treatment (a `RedactionType` value). Returns the raw\n * string; the saas-models layer types it as `RedactionType` (zod-decorators is below saas-models\n * and cannot import it). `undefined` means the field carries no treatment and is left intact.\n */\nexport function getImpersonalizeTreatment(schema: z.ZodTypeAny): string | undefined {\n return getImpersonalizeParams(schema)?.treatment;\n}\n\n/**\n * @wildo_source:part:start zod.decorators.rag-source facet:layer:shared facet:family:decorator facet:kind:api facet:audience:app-developer\n *\n * Read a field's stored RAG-source configuration, declared via the fluent `.ragSource(config?)`\n * method, the `addRagSource(schema, config?)` helper, or `z_file({ ragSource })`.\n *\n * Import from `@wildo-ai/zod-decorators`. Use it in custom implementations or checks that need to\n * ask \"is this field part of the retrieval corpus?\" — never to re-derive the corpus itself, which\n * the framework already does.\n *\n * `undefined` means the field is NOT a retrieval-corpus source — presence of the returned object is\n * the declaration itself (there is no `enabled` flag), and a bare `.ragSource()` reads back as `{}`\n * because the decorator chokepoint normalizes an omitted config to the empty object.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()` — corpus-source fields (descriptions, knowledge bodies) are routinely optional.\n * This is the ONE detection door: `RagSourceFieldDetection` in the backend walks resource schemas\n * with it, uniformly for plain string fields and `z_file()` fields.\n */\nexport function getRagSourceConfig(schema: z.ZodTypeAny): RagSourceConfiguration | undefined {\n const metadata = getMetadataRecursive(schema);\n // Typed as the normalized object, but read defensively as `unknown`: metadata written by any\n // path that bypassed the chokepoint's normalization (a raw `true` sentinel) must still read as\n // \"declared, default config\" rather than silently reading as NOT-a-source, which would drop the\n // field from every downstream seam (detection, chunk store, erasure).\n const value = metadata?.[ZodDecorator.RAG_SOURCE] as unknown;\n if (value === undefined || value === null || value === false) return undefined;\n return typeof value === 'object' ? (value as RagSourceConfiguration) : {};\n}\n/** @wildo_source:part:end zod.decorators.rag-source */\n\n/**\n * Get a field's `MASK` override value — the literal written in place of the field, instead of the\n * framework mask constant. `undefined` means \"use the constant\".\n *\n * Authored for CONSTRAINED string fields (`z.email()`, `z.uuid()`, `.min(n)`) that the default\n * constant cannot satisfy. See {@link ImpersonalizeFieldParams} for the contract; the saas-models\n * boot guard validates the value against the field's own schema and rejects it on a non-`MASK`\n * treatment.\n */\nexport function getImpersonalizeMaskValue(schema: z.ZodTypeAny): string | undefined {\n return getImpersonalizeParams(schema)?.maskValue;\n}\n\n/**\n * Get the isWriteOnlySecret decorator parameters.\n */\nexport function getWriteOnlySecretParams(schema: z.ZodTypeAny): WriteOnlySecretFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_WRITE_ONLY_SECRET];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as WriteOnlySecretFieldParams;\n}\n\n/**\n * Check if a schema field has the isDiscriminator decorator.\n */\nexport function isDiscriminatorField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_DISCRIMINATOR] !== undefined;\n}\n\n/**\n * Get the isDiscriminator decorator parameters.\n */\nexport function getDiscriminatorParams(schema: z.ZodTypeAny): DiscriminatorFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_DISCRIMINATOR];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as DiscriminatorFieldParams;\n}\n\n/**\n * Check if a schema field has the excludeFromCreate decorator.\n */\nexport function isExcludedFromCreate(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.EXCLUDE_FROM_CREATE] !== undefined;\n}\n\n/**\n * Check if a schema field has the excludeFromUpdate decorator.\n */\nexport function isExcludedFromUpdate(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.EXCLUDE_FROM_UPDATE] !== undefined;\n}\n\n/**\n * Check if a schema field is hidden (recursive traversal through wrappers).\n */\nexport function isHiddenField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_HIDDEN] !== undefined;\n}\n\n/**\n * Get the isHidden decorator parameters.\n * Returns default params (hidden in both display and edit) when decorator is used without params.\n */\nexport function getHiddenFieldParams(schema: z.ZodTypeAny): HiddenFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_HIDDEN];\n if (value === undefined) return undefined;\n // Default: hidden in both display and edit mode when decorator is used without params\n if (value === true) return { display: true, edit: true };\n return value as HiddenFieldParams;\n}\n\n/**\n * Check if a schema field is not editable (recursive traversal through wrappers).\n */\nexport function isNotEditableField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_NOT_EDITABLE] !== undefined;\n}\n\n/**\n * Get the isNotEditable decorator parameters.\n */\nexport function getNotEditableFieldParams(schema: z.ZodTypeAny): NotEditableFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_NOT_EDITABLE];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as NotEditableFieldParams;\n}\n\n/**\n * Check if a schema field has the isUnique decorator (recursive traversal through wrappers).\n */\nexport function isUniqueField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_UNIQUE] !== undefined;\n}\n\n/**\n * Get the isUnique decorator parameters (recursive traversal through wrappers).\n * Returns default params { scope: 'global', sparse: true } when decorator is used without params.\n */\nexport function getUniqueFieldParams(schema: z.ZodTypeAny): UniqueFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_UNIQUE];\n if (value === undefined) return undefined;\n if (value === true) return { scope: 'global', sparse: true }; // Default params from original getUniqueParams\n return value as UniqueFieldParams;\n}\n\n/**\n * The NAME of the field an object schema marks as its primary key, or `undefined`.\n *\n * ## Why this is not `resourceFieldIdentifier`\n *\n * A resource has two different id-shaped names and they are not interchangeable:\n *\n * - `resourceFieldIdentifier` (`organizationSsoConfigId`, `todoId`) is the URL PARAMETER name. It\n * appears in routes and in contextual parameters. A response payload does not generally carry it.\n * - the PRIMARY KEY field (`_id`) is what the row calls its own identity, and is what a payload\n * actually contains.\n *\n * Conflating them is a real defect rather than a hypothetical one. `ResourceAutomaticDisplayer`'s\n * READ-bootstrap fallback — the path that exists so a row without an id in its URL can still be\n * identified once its data arrives — read `data[resourceFieldIdentifier]`. For an ordinary resource\n * the fallback never runs (the id is in the URL, so the earlier branch returns), and for a\n * CONTEXT-ADDRESSED SINGLETON, which is the only shape that needs it, the key is absent from the\n * payload and the lookup yields `undefined`.\n *\n * Measured 2026-09-19 on the running application: `organizationSsoConfig` loads\n * `[\"_id\", \"enforcement\", \"domains\", …]` while the fallback asked for `organizationSsoConfigId`. So\n * the resource id stayed undefined after a successful READ, the mutation manager could not attach\n * (it is keyed on that id), and `canInlineEdit` was false — which is why every settings singleton in\n * the product was silently read-only, and why declaring `inlineEditable` on one would have changed\n * nothing.\n *\n * Returns the FIRST field marked `.isPrimaryKey()`. A schema declaring several is malformed; a\n * schema declaring none — a DTO projection, a nested object — yields `undefined`, and every caller\n * treats that as \"no id\", which is the safe reading.\n */\nexport function getPrimaryKeyFieldName(schema: z.ZodTypeAny): string | undefined {\n const shape = getZodObjectShape(schema);\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n if (isPrimaryKeyField(fieldSchema)) {\n return fieldName;\n }\n }\n return undefined;\n}\n\n/**\n * Check if a schema field has the isPrimaryKey decorator (recursive traversal through wrappers).\n */\nexport function isPrimaryKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_PRIMARY_KEY] === true;\n}\n\n// =============================================================================\n// BUSINESS KEY HELPERS (data-seeding subsystem)\n// =============================================================================\n\n/**\n * Check if a schema field has the `isBusinessKey` decorator (recursive\n * traversal through wrappers — `optional`, `nullable`, etc.).\n *\n * A business key is the **declaration-side identity** used by the data-seeding\n * subsystem to upsert / upgrade / sync seeded rows independently from the\n * random `_id` (`isPrimaryKey`). See `.cursor/plans/seeding-first-class.md`\n * §3.3 for the semantic contract.\n */\nexport function isBusinessKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_BUSINESS_KEY] === true;\n}\n\n/**\n * Read the composite business key declared on an object schema via\n * `businessKeySet([...])` (object-level decorator). Returns the ordered\n * list of field names, or `undefined` if no composite key is declared.\n *\n * The composite key is the schema-level analog of `isBusinessKey` — used\n * when identity is `(orgId, templateKey)` rather than a single field. See\n * `.cursor/plans/seeding-first-class.md` §3.3.\n */\nexport function getBusinessKeySet(schema: z.ZodTypeAny): string[] | undefined {\n return getBusinessKeySetParams(schema)?.fields;\n}\n\n/**\n * Read the FULL composite-business-key declaration, not just its field list.\n *\n * `getBusinessKeySet` answers \"what identifies a row\" and is all the seeding filter builder needs.\n * The storage adapter needs more: which members take a row out of the constraint when absent\n * (`skipRowsMissing`), and which error the API should raise when the resulting index is violated\n * (`conflictMessageReference`). Both are properties OF the key, so they are read from the same\n * declaration rather than re-derived — a second source would be free to disagree with the first.\n */\nexport function getBusinessKeySetParams(schema: z.ZodTypeAny): BusinessKeySetParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const params = metadata?.[ZodDecorator.OBJECT_BUSINESS_KEY_SET];\n return params?.fields ? params : undefined;\n}\n\n/**\n * Convenience predicate: does the schema declare any business key\n * identity (single field-level marker OR composite object-level set)?\n */\nexport function hasBusinessKey(schema: z.ZodTypeAny): boolean {\n return isBusinessKeyField(schema) || getBusinessKeySet(schema) !== undefined;\n}\n\n/**\n * Get all metadata for a schema field (non-recursive, direct access only).\n */\nexport function getFieldMetadata(schema: z.ZodTypeAny): CustomFieldMetadata | undefined {\n return (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n}\n\n/**\n * Get all metadata for a schema field, traversing through wrapper types.\n */\nexport function getFieldMetadataRecursive(schema: z.ZodTypeAny): CustomFieldMetadata | undefined {\n return getMetadataRecursive(schema);\n}\n\n// =============================================================================\n// RANGE SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a range schema (created by z_range()).\n * Detects by the presence of rangeConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isRangeSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.rangeConfig?.isRange === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.rangeConfig?.isRange === true;\n }\n\n return false;\n}\n\n/**\n * Get the range metadata from a schema.\n * Returns undefined if not a range schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getRangeMetadata(schema: z.ZodTypeAny): RangeSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.rangeConfig?.isRange) {\n return schemaMetadata.rangeConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.rangeConfig?.isRange) {\n return unwrappedMetadata.rangeConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get the range type from a schema.\n * Returns undefined if not a range schema.\n */\nexport function getRangeType(schema: z.ZodTypeAny): RangeType | undefined {\n return getRangeMetadata(schema)?.type;\n}\n\n// =============================================================================\n// CURRENCY SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a money schema (created by z_money()).\n * Detects by the presence of moneyConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isMoneySchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.moneyConfig?.isMoney === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.moneyConfig?.isMoney === true;\n }\n\n return false;\n}\n\n/**\n * Get the money metadata from a schema.\n * Returns undefined if not a money schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getMoneyMetadata(schema: z.ZodTypeAny): MoneySchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.moneyConfig?.isMoney) {\n return schemaMetadata.moneyConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.moneyConfig?.isMoney) {\n return unwrappedMetadata.moneyConfig;\n }\n }\n\n return undefined;\n}\n\n// =============================================================================\n// BIGDECIMAL SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a bigdecimal schema (created by z_bigdecimal()).\n * Detects by the presence of bigDecimalConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isBigDecimalSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.bigDecimalConfig?.isBigDecimal === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.bigDecimalConfig?.isBigDecimal === true;\n }\n\n return false;\n}\n\n/**\n * Get the bigdecimal metadata from a schema.\n * Returns undefined if not a bigdecimal schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getBigDecimalMetadata(schema: z.ZodTypeAny): BigDecimalSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.bigDecimalConfig?.isBigDecimal) {\n return schemaMetadata.bigDecimalConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.bigDecimalConfig?.isBigDecimal) {\n return unwrappedMetadata.bigDecimalConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get bigdecimal constraints from schema metadata.\n * Returns min, max, precision from the bigdecimal schema configuration.\n */\nexport function getBigDecimalConstraints(schema: z.ZodTypeAny): {\n min?: string;\n max?: string;\n precision?: number;\n} {\n const metadata = getBigDecimalMetadata(schema);\n if (!metadata) {\n return {};\n }\n\n return {\n min: metadata.min,\n max: metadata.max,\n precision: metadata.precision,\n };\n}\n\n// =============================================================================\n// DURATION SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a duration schema (created by z_duration()).\n * Detects by the presence of durationConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isDurationSchema(schema: z.ZodTypeAny): boolean {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.durationConfig?.isDuration === true) {\n return true;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.durationConfig?.isDuration === true;\n }\n\n return false;\n}\n\n/**\n * Get the duration metadata from a schema.\n * Returns undefined if not a duration schema.\n */\nexport function getDurationMetadata(schema: z.ZodTypeAny): DurationSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.durationConfig?.isDuration) {\n return schemaMetadata.durationConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.durationConfig?.isDuration) {\n return unwrappedMetadata.durationConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get duration constraints from schema metadata.\n */\nexport function getDurationConstraints(schema: z.ZodTypeAny): {\n minValue?: number;\n maxValue?: number;\n allowedUnits?: string[];\n} {\n const metadata = getDurationMetadata(schema);\n if (!metadata) {\n return {};\n }\n\n return {\n minValue: metadata.minValue,\n maxValue: metadata.maxValue,\n allowedUnits: metadata.allowedUnits,\n };\n}\n\n/**\n * Check if a schema is an address schema (created by z_address()).\n * Detects by the presence of addressConfig in SCHEMA_METADATA, on the schema or its unwrapped inner schema.\n */\nexport function isAddressSchema(schema: z.ZodTypeAny): boolean {\n return getAddressMetadata(schema) !== undefined;\n}\n\n/**\n * Get the address metadata from a schema, or undefined when it is not an address schema.\n */\nexport function getAddressMetadata(schema: z.ZodTypeAny): AddressSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.addressConfig?.isAddress === true) {\n return schemaMetadata.addressConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.addressConfig?.isAddress === true) {\n return unwrappedMetadata.addressConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a phone schema (created by z_phone()).\n * Detects by the presence of phoneConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isPhoneSchema(schema: z.ZodTypeAny): boolean {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.phoneConfig?.isPhone === true) {\n return true;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.phoneConfig?.isPhone === true;\n }\n\n return false;\n}\n\n/**\n * Get the phone metadata from a schema.\n * Returns undefined if not a phone schema.\n */\nexport function getPhoneMetadata(schema: z.ZodTypeAny): PhoneSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.phoneConfig?.isPhone) {\n return schemaMetadata.phoneConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.phoneConfig?.isPhone) {\n return unwrappedMetadata.phoneConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a code schema created by z_code().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isCodeSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.codeConfig?.isCode === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.codeConfig?.isCode === true;\n }\n\n return false;\n}\n\n/**\n * Get code schema metadata if this is a code schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getCodeMetadata(schema: z.ZodTypeAny): CodeSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.codeConfig?.isCode) {\n return schemaMetadata.codeConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.codeConfig?.isCode) {\n return unwrappedMetadata.codeConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a file schema created by z_file().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isFileSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.fileConfig?.isFile === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.fileConfig?.isFile === true;\n }\n\n return false;\n}\n\n/**\n * Check if a file schema is generated from a backend-bound PDF template.\n *\n * This helper intentionally keys off frontend-safe metadata only. Runtime\n * template objects are bound later by backend resource configuration and must\n * not leak into shared schema metadata.\n */\nexport function isTemplatableFileField(schema: z.ZodTypeAny): boolean {\n const fileMetadata = getFileMetadata(schema);\n return fileMetadata?.generation?.source === FileGenerationSource.PDF_TEMPLATE;\n}\n\n/**\n * Get file schema metadata if this is a file schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getFileMetadata(schema: z.ZodTypeAny): FileSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.fileConfig?.isFile) {\n return schemaMetadata.fileConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.fileConfig?.isFile) {\n return unwrappedMetadata.fileConfig;\n }\n }\n\n return undefined;\n}\n\n// -----------------------------------------------------------------------------\n// VERSIONED SCHEMA HELPERS\n// -----------------------------------------------------------------------------\n\n/**\n * Check if a schema is a versioned foreign key schema created by z_foreignKeyVersioned().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isVersionedForeignKeySchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey === true;\n }\n\n return false;\n}\n\n/**\n * Get versioned foreign key schema metadata if this is a versioned foreign key schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getVersionedForeignKeyMetadata(schema: z.ZodTypeAny): VersionedForeignKeySchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey) {\n return schemaMetadata.versionedForeignKeyConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey) {\n return unwrappedMetadata.versionedForeignKeyConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a versioned object schema created by versioned().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isVersionedObjectSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedConfig?.isVersioned === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.versionedConfig?.isVersioned === true;\n }\n\n return false;\n}\n\n/**\n * Get versioned schema metadata if this is a versioned object schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getVersionedObjectMetadata(schema: z.ZodTypeAny): VersionedSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedConfig?.isVersioned) {\n return schemaMetadata.versionedConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.versionedConfig?.isVersioned) {\n return unwrappedMetadata.versionedConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if the 'from' field is optional in a range schema.\n */\nexport function isRangeFromOptional(schema: z.ZodTypeAny): boolean | undefined {\n return getRangeMetadata(schema)?.fromOptional;\n}\n\n/**\n * Check if the 'to' field is optional in a range schema.\n */\nexport function isRangeToOptional(schema: z.ZodTypeAny): boolean | undefined {\n return getRangeMetadata(schema)?.toOptional;\n}\n\n/**\n * Get the min constraint from a range schema.\n */\nexport function getRangeMin(schema: z.ZodTypeAny): RangeConstraintValue | undefined {\n return getRangeMetadata(schema)?.min;\n}\n\n/**\n * Get the max constraint from a range schema.\n */\nexport function getRangeMax(schema: z.ZodTypeAny): RangeConstraintValue | undefined {\n return getRangeMetadata(schema)?.max;\n}\n\n\n// =============================================================================\n// FORM FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the form component from `{primitive}UI.edit.component`.\n * Returns undefined if no form component is specified.\n */\nexport function getFormFieldComponent(schema: z.ZodTypeAny): FormFieldComponent | undefined {\n return getFieldUIEditConfig(schema)?.component;\n}\n\n/**\n * Check if a field should be hidden based on the current context.\n * @param schema - The Zod schema to check\n * @param context - Optional context with mode ('display' | 'edit') and operation name\n */\nexport function shouldHideField(\n schema: z.ZodTypeAny,\n context?: { mode?: 'display' | 'edit'; operation?: string }\n): boolean {\n if (!hasHiddenDecorator(schema)) {\n return false;\n }\n\n const hidden = getHiddenFieldMetadata(schema);\n\n // If hidden is true, always hide\n if (hidden === true) {\n return true;\n }\n\n // Check mode-specific hiding\n if (context?.mode === 'display' && hidden?.display) {\n return true;\n }\n if (context?.mode === 'edit' && hidden?.edit) {\n return true;\n }\n\n // Check operation-specific hiding\n if (context?.operation && hidden?.operations?.includes(context.operation)) {\n return true;\n }\n\n return false;\n}\n\n\n\n// -----------------------------------------------------------------------------\n// Form Component Check Functions (isFormXX)\n// -----------------------------------------------------------------------------\n\nexport function isFormInput(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.INPUT;\n}\n\n/**\n * Does the author declare TEXTAREA on the CROSS-CUTTING `edit.component` axis?\n *\n * This is a question about the DECLARATION, not about what the field renders\n * as, and the distinction is load-bearing: a field declaring the per-type\n * `edit.editMode: TEXTAREA` edits as a textarea and this predicate answers\n * `false` for it. Asking this when you meant the rendering question is exactly\n * how the inline editor came to bind Enter as \"save\" inside a textarea.\n *\n * For \"does this field edit into a multi-line control\", ask\n * `isMultilineEditField`, which resolves both axes.\n */\nexport function isFormTextarea(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.TEXTAREA;\n}\n\nexport function isFormSelect(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SELECT;\n}\n\nexport function isFormRadioGroup(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.RADIO_GROUP;\n}\n\nexport function isFormCheckbox(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.CHECKBOX;\n}\n\nexport function isFormCheckboxGroup(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.CHECKBOX_GROUP;\n}\n\nexport function isFormSwitch(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SWITCH;\n}\n\nexport function isFormSlider(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SLIDER;\n}\n\nexport function isFormDate(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.DATE;\n}\n\n\n// -----------------------------------------------------------------------------\n// EDIT-MODE RESOLUTION — the ONE reconciliation of the two edit axes\n// -----------------------------------------------------------------------------\n//\n// A field's editing shape is declared on TWO axes and they overlap:\n//\n// `{primitive}UI.edit.editMode` — per-type, closed per type (`StringEditMode`\n// cannot name a slider), read by every\n// `FormField{Type}` component;\n// `{primitive}UI.edit.component` — cross-cutting `FormFieldComponent`, one\n// vocabulary spanning every type.\n//\n// Neither half of the system used to read both, so whichever axis an author\n// picked, something was wrong: the RENDER path (`FormFieldString` and its\n// siblings) read only `editMode`, so an authored `component: TEXTAREA` rendered\n// a single-line input — live on six declarations, including the engine's own\n// billing presets. The INLINE-EDIT keyboard path (`DisplayFieldEditable`) read\n// only `component` through `isFormTextarea`, so a field that correctly declares\n// `editMode: TEXTAREA` was treated as single-line and Enter saved instead of\n// inserting a newline.\n//\n// These resolvers are that one source. Precedence is the contract already\n// written on `PrimitiveUIBaseEditParams.component` — \"Type-specific `editMode`\n// takes precedence\" — so the per-type axis wins and the cross-cutting one is\n// the fallback rather than a competitor.\n//\n// Only members that name the SAME control on both sides are mapped. A\n// `FormFieldComponent` member with no counterpart (`TOGGLE`-less booleans,\n// `COLOR`/`PASSWORD`/`OTP`/`MARKDOWN` strings) simply has no mapping, and\n// `CHECKBOX_GROUP` is deliberately absent: it is an ARRAY-of-enum control\n// reached through `AutomatedArrayField`, never through `FormFieldEnum`, so\n// mapping it to an enum edit mode would claim a route that does not exist.\n\nconst STRING_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, StringEditMode>> = {\n [FormFieldComponent.INPUT]: StringEditMode.INPUT,\n [FormFieldComponent.TEXTAREA]: StringEditMode.TEXTAREA,\n};\n\nconst BOOLEAN_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, BooleanEditMode>> = {\n [FormFieldComponent.CHECKBOX]: BooleanEditMode.CHECKBOX,\n [FormFieldComponent.SWITCH]: BooleanEditMode.SWITCH,\n [FormFieldComponent.RADIO_GROUP]: BooleanEditMode.RADIO,\n};\n\nconst ENUM_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, EnumEditMode>> = {\n [FormFieldComponent.SELECT]: EnumEditMode.SELECT,\n [FormFieldComponent.RADIO_GROUP]: EnumEditMode.RADIO,\n};\n\n/**\n * The MULTIPLE-selection twin of the map above, for the other `edit` axis an author can use.\n *\n * `CHECKBOX_GROUP` is deliberately absent from the single-select map — the test\n * `does NOT map CHECKBOX_GROUP onto an enum mode` pins that, because a checkbox group is an\n * array-of-enum control and has no single-select meaning. It belongs HERE, where it does, and it\n * is the only member: `FormFieldComponent` has no `COMBOBOX`, which is why the searchable multi\n * had to borrow `EnumEditMode.COMBOBOX` before this vocabulary existed.\n */\nconst ENUM_MULTIPLE_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, EnumMultipleEditMode>> = {\n [FormFieldComponent.CHECKBOX_GROUP]: EnumMultipleEditMode.CHECKBOX,\n};\n\nconst NUMBER_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, NumberEditMode>> = {\n [FormFieldComponent.INPUT]: NumberEditMode.INPUT,\n [FormFieldComponent.SLIDER]: NumberEditMode.SLIDER,\n};\n\n/** Resolve the shape a string field edits as, honoring both edit axes. */\nexport function resolveStringEditMode(schema: z.ZodTypeAny): StringEditMode {\n const declared = getStringUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? STRING_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? StringEditMode.INPUT;\n}\n\n/** Resolve the shape a boolean field edits as, honoring both edit axes. */\nexport function resolveBooleanEditMode(schema: z.ZodTypeAny): BooleanEditMode {\n const declared = getBooleanUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? BOOLEAN_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? BooleanEditMode.SWITCH;\n}\n\n/** Resolve the shape an enum field edits as, honoring both edit axes. */\nexport function resolveEnumEditMode(schema: z.ZodTypeAny): EnumEditMode {\n const declared = getEnumUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? ENUM_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? EnumEditMode.SELECT;\n}\n\n/**\n * Resolve the shape an ARRAY OF ENUM VALUES edits as.\n *\n * Takes the ELEMENT schema, which is where `enumUI()` lives. The default is CHECKBOX and not the\n * single vocabulary's SELECT: a checkbox group is the one multiple control that says \"any number\n * of these\" without the reader having to open it first, and it is what an undeclared enum array\n * has always rendered as.\n */\nexport function resolveEnumMultipleEditMode(itemSchema: z.ZodTypeAny): EnumMultipleEditMode {\n const declared = getEnumUI(itemSchema)?.edit?.multipleEditMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(itemSchema);\n return (component !== undefined ? ENUM_MULTIPLE_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? EnumMultipleEditMode.CHECKBOX;\n}\n\n/** Resolve the shape a number field edits as, honoring both edit axes. */\nexport function resolveNumberEditMode(schema: z.ZodTypeAny): NumberEditMode {\n const declared = getNumberUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? NUMBER_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? NumberEditMode.INPUT;\n}\n\n/**\n * Does this field edit into a control where Enter inserts a newline rather than\n * submitting? Asked by the inline editor to decide its Enter binding, and the\n * reason it must go through the resolver: the answer is true whether the author\n * declared `editMode: TEXTAREA` or `component: TEXTAREA`, and `isFormTextarea`\n * only ever saw the second.\n */\nexport function isMultilineEditField(schema: z.ZodTypeAny): boolean {\n return resolveStringEditMode(schema) === StringEditMode.TEXTAREA;\n}\n\n\n// =============================================================================\n// HIDDEN FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the hidden field metadata from schema decorator.\n * Returns undefined if no hidden decorator is set.\n * Returns true if field is hidden in all cases.\n * Returns HiddenFieldParams if conditional hiding is configured.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function getHiddenFieldMetadata(schema: z.ZodTypeAny): HiddenFieldParams | true | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_HIDDEN];\n}\n\n/**\n * Check if a schema has a hidden decorator.\n */\nexport function hasHiddenDecorator(schema: z.ZodTypeAny): boolean {\n return getHiddenFieldMetadata(schema) !== undefined;\n}\n\n/**\n * Check if a field should be hidden for display mode.\n * @param schema - The Zod schema to check\n * @returns true if the field should be hidden in display mode\n */\nexport function isHiddenForDisplay(schema: z.ZodTypeAny): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.display === true;\n}\n\n/**\n * Check if a field should be hidden for edit mode.\n * @param schema - The Zod schema to check\n * @returns true if the field should be hidden in edit mode\n */\nexport function isHiddenForEdit(schema: z.ZodTypeAny): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.edit === true;\n}\n\n/**\n * Check if a field should be hidden for a specific operation.\n * @param schema - The Zod schema to check\n * @param operation - The operation identifier (e.g., 'create', 'update')\n * @returns true if the field should be hidden for the given operation\n */\nexport function isHiddenForOperation(schema: z.ZodTypeAny, operation: string): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.operations?.includes(operation) ?? false;\n}\n\n// =============================================================================\n// NOT EDITABLE FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the not editable field metadata from schema decorator.\n * Returns undefined if no isNotEditable decorator is set.\n * Returns true if field is not editable for all operations.\n * Returns NotEditableFieldParams if operation-specific.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function getNotEditableFieldMetadata(schema: z.ZodTypeAny): NotEditableFieldParams | true | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_NOT_EDITABLE];\n}\n\n/**\n * Check if a schema has a isNotEditable decorator.\n */\nexport function hasNotEditableDecorator(schema: z.ZodTypeAny): boolean {\n return getNotEditableFieldMetadata(schema) !== undefined;\n}\n\n/**\n * Check if a field is not editable for a specific operation (or all operations).\n * @param schema - The Zod schema to check\n * @param operation - Optional operation identifier. If not provided, checks if not editable for all operations.\n * @returns true if the field is not editable\n */\nexport function isNotEditableForOperation(schema: z.ZodTypeAny, operation?: string): boolean {\n const notEditable = getNotEditableFieldMetadata(schema);\n if (notEditable === undefined) return false;\n\n // If true, not editable for all operations\n if (notEditable === true) return true;\n\n // If no operations specified in params, not editable for all operations\n if (!notEditable.operations || notEditable.operations.length === 0) return true;\n\n // If operation is provided, check if it matches\n if (operation) {\n return notEditable.operations.includes(operation);\n }\n\n // Operation not provided but params have specific operations - not editable only for those\n return false;\n}\n\n\n\n// ============================================================================\n// SORTABLE FIELD HELPERS (now absorbed into ARRAY_UI)\n// ============================================================================\n// Sortable configuration is now managed via arrayUI({ edit: { isSortable, dnd, upDownIcons } }).\n// The .isSortable() convenience composite sets ARRAY_UI metadata directly.\n\n\n// ============================================================================\n// INLINE EDITABLE FIELD HELPERS\n// ============================================================================\n\n/**\n * Resolved inline editable params with all defaults applied.\n */\nexport interface ResolvedInlineEditableParams {\n mode: 'direct' | 'button';\n saveOn: 'blur' | 'explicit';\n showSaveButton: boolean;\n showCancelButton: boolean;\n}\n\n/**\n * The readable stand-in for an unresolvable foreign key, taken from the record that HOLDS it.\n *\n * Returns the value of the sibling named by `foreignKeyUI.display.labelFallbackField`, or\n * `undefined` when the field declares none, the record is absent, or the sibling is empty. Every\n * caller treats `undefined` as \"fall through to the id\", which is the behaviour before this existed\n * — so a field that declares nothing renders exactly as it did.\n *\n * Non-string siblings are refused rather than coerced: a label is text, and `String(someObject)`\n * would put `[object Object]` on screen, which is worse than the id it replaced.\n */\nexport function resolveForeignKeyLabelFallback(\n schema: z.ZodTypeAny | undefined,\n record: Record<string, unknown> | undefined | null,\n): string | undefined {\n if (!schema || !record) return undefined;\n const fallbackField = getForeignKeyUIDisplay(schema)?.labelFallbackField;\n if (!fallbackField) return undefined;\n const raw = record[fallbackField];\n return typeof raw === 'string' && raw.length > 0 ? raw : undefined;\n}\n\n/**\n * WHY this field has nothing to show — see {@link DisplayEmptyReason}.\n *\n * `isCollectionEmptiness` is supplied by the CALL SITE, because only the renderer knows which kind\n * of emptiness it met: the dispatcher reaches its empty branches separately for a null scalar, a\n * zero-length array, a keyless object and an entryless record. Re-deriving that from the value here\n * would be a second, weaker answer to a question the caller has already answered exactly — and it\n * would get `[]` on a field whose schema says OBJECT wrong.\n *\n * The remaining split is `.excludeFromUpdate()`: a field the UPDATE contract strips is one the\n * operator cannot fill, so its emptiness is the system's to resolve, not theirs. That predicate is\n * the same one {@link isEligibleForLayoutDefaultInlineEdit} uses to decide whether to offer a\n * control, which is what keeps the two answers consistent: a field that gets no control also does\n * not get a word inviting input.\n */\nexport function resolveDisplayEmptyReason(\n schema: z.ZodTypeAny | undefined,\n isCollectionEmptiness: boolean,\n): DisplayEmptyReason {\n if (isCollectionEmptiness) return DisplayEmptyReason.NONE;\n if (schema && isExcludedFromUpdate(schema)) return DisplayEmptyReason.NOT_PROVIDED;\n return DisplayEmptyReason.NOT_SET;\n}\n\n/**\n * The component label key that words a given empty reason.\n *\n * One named mapping rather than a ternary at each of the dispatcher's four empty branches — the\n * shape `.claude/rules/invariant-call-site-enumeration.md` exists to refuse. It is TOTAL over the\n * vocabulary (`Record<DisplayEmptyReason, string>`), so a reason added tomorrow is a compile error\n * here rather than a silent fallthrough to the generic word.\n *\n * `noValue` is deliberately KEPT as the NOT_SET key rather than renamed. It is already declared,\n * already realised in every application's generated tree, and already the right words for that\n * case; renaming it would restale every label unit in every application to say the same thing.\n */\nexport const DISPLAY_EMPTY_REASON_LABEL_KEYS: Record<DisplayEmptyReason, string> = {\n [DisplayEmptyReason.NOT_SET]: 'noValue',\n [DisplayEmptyReason.NONE]: 'noValueNone',\n [DisplayEmptyReason.NOT_PROVIDED]: 'noValueNotProvided',\n};\n\n/**\n * Does this field DECLARE that it is inline-editable?\n *\n * Reads `{primitive}UI.display.inlineEditable`, which is `boolean | {…}`.\n *\n * ## `false` means FALSE — corrected 2026-09-19\n *\n * This used to be `inlineEditable != null`, so an authored `inlineEditable: false` answered TRUE\n * and the field was routed to `DisplayFieldEditable` exactly like an opted-IN one. There,\n * `getInlineEditableParams` returns `undefined` for `false` and the component falls back to\n * `DEFAULT_INLINE_EDIT_PARAMS` — so the explicit opt-out produced the DEFAULT inline editor. An\n * author writing `false` got the opposite of what they asked for, with nothing to grep for.\n *\n * Nothing in the repository authored `false` at the time of the fix (measured: zero occurrences\n * across `engine/`, `platform/` and both dogfood applications), so no behaviour changed on the day.\n * What changed is that the opt-out became REAL, which is what\n * {@link ResourceLayoutInlineEditDefault} needs: a layout-level default is only safe if a single\n * field can decline it.\n */\nexport function hasInlineEditableDecorator(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.inlineEditable != null\n && getFieldUIDisplayConfig(schema)?.inlineEditable !== false;\n}\n\n/**\n * Has this field explicitly DECLINED inline editing?\n *\n * Distinct from `!hasInlineEditableDecorator(schema)`, and the distinction is the whole point of\n * the layout-level default: a field that says nothing is a candidate for the default, while a field\n * that says `false` has opted out and must stay read-only even under a layout that turns the\n * default on.\n */\nexport function declinesInlineEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.inlineEditable === false;\n}\n\n/**\n * Would a layout whose `defaultInlineEdit` is on make THIS field editable in place?\n *\n * The predicate is derived from what the field already declares about itself, rather than from a\n * hand-kept list of editable field names — so a field added to a settings schema tomorrow is\n * covered without anyone remembering to add it, and a field that is not writable is never offered a\n * control that would fail on save.\n *\n * A field qualifies when ALL of these hold:\n *\n * - it has not DECLINED (`inlineEditable: false`) — an explicit author decision outranks a default;\n * - it is not `.excludeFromUpdate()` — the UPDATE DTO strips it, so a control here would collect a\n * value the server silently discards. That is worse than no control, because the row appears to\n * save and does not;\n * - it is not `.isHidden()` for display — a field nobody may read is not a field anybody may write.\n *\n * ## The primary key needs no clause of its own — measured, not assumed\n *\n * An `isPrimaryKey(schema)` guard was written here first, on the reasoning that an identity is not a\n * setting. It is UNREACHABLE: `.isPrimaryKey()` already reports `isHiddenForDisplay() === true`, so\n * the hidden clause below decides every primary key before a dedicated clause could. Deleting it\n * left all ten pins green, which is how it was found.\n *\n * It is removed rather than kept \"for safety\". An unreachable guard is not defence in depth — it is\n * an untested claim that reads like coverage (`.claude/rules/invariant-call-site-enumeration.md`\n * #19, #25), and the next author would have reasonably assumed it was load-bearing. The N/A is\n * stated here instead. If a primary key ever stops being hidden for display, this is the paragraph\n * that has to be re-read.\n *\n * Note what is deliberately NOT tested: the field's TYPE. A boolean, a string, an enum and an array\n * are all legitimately editable in place, and the display dispatcher already routes each to the\n * right control (`DisplayFieldEditableArray` for arrays, the switch fast-path for booleans). Adding\n * a type filter here would silently re-narrow what the layout author asked for.\n */\nexport function isEligibleForLayoutDefaultInlineEdit(schema: z.ZodTypeAny): boolean {\n if (declinesInlineEdit(schema)) return false;\n if (isExcludedFromUpdate(schema)) return false;\n if (isHiddenForDisplay(schema)) return false;\n return true;\n}\n\n/**\n * Get the resolved inline editable params from `{primitive}UI.display.inlineEditable`.\n * Handles both `true` shorthand and full object config.\n */\nexport function getInlineEditableParams(schema: z.ZodTypeAny): ResolvedInlineEditableParams | undefined {\n const config = getFieldUIDisplayConfig(schema)?.inlineEditable;\n if (config == null) return undefined;\n\n if (config === true) {\n return { mode: 'direct', saveOn: 'blur', showSaveButton: false, showCancelButton: true };\n }\n if (config === false) return undefined;\n\n const saveOn = config.saveOn ?? 'blur';\n const showSaveButton = config.showSaveButton ?? (saveOn === 'explicit');\n return {\n mode: config.mode ?? 'direct',\n saveOn,\n showSaveButton,\n showCancelButton: config.showCancelButton ?? true,\n };\n}\n\n\n// ============================================================================\n// ZOD .describe() UTILITY (NOT for UI descriptions — developer/AI/API docs only)\n// ============================================================================\n\n/**\n * Extract the `.describe()` text from a Zod schema, unwrapping optional/nullable/default wrappers.\n * Returns undefined if no `.describe(\"...\")` is set.\n *\n * **IMPORTANT**: Zod `.describe(\"...\")` is for developer documentation, AI prompting systems,\n * and API documentation generation. It is NOT used for UI field descriptions — those are\n * managed through `{primitive}UI.display.showDescription` + i18n system.\n *\n * In Zod 4, `.describe(\"...\")` sets the `.description` property on the schema.\n * When `.optional()`, `.nullable()`, or `.default()` wrap the schema, the description\n * may live on the inner schema. We check both levels.\n */\nexport function getZodDescription(schema: z.ZodTypeAny): string | undefined {\n // Check outer schema first\n if (schema.description) return schema.description;\n\n // Unwrap optional/nullable/default to check inner schema\n const inner = (schema as any)._zod?.innerType ?? (schema as any).unwrap?.();\n if (inner?.description) return inner.description;\n\n return undefined;\n}\n\n// ============================================================================\n// FIELD DESCRIPTION HELPERS (opt-in i18n key generation, mirrors tooltip pattern)\n// ============================================================================\n\n/**\n * Check if a field should have a description i18n key generated for **display** mode.\n *\n * Reads from `{primitive}UI.display.showDescription` (boolean flag).\n * This follows the same opt-in pattern as tooltips: only generate i18n keys for\n * fields that explicitly declare intent via a decorator.\n *\n * **NOTE**: Zod `.describe(\"...\")` is NOT an opt-in signal for UI descriptions.\n * `.describe()` serves a different purpose (developer docs, AI prompting, API docs).\n * UI field descriptions are purely decorator-driven + i18n-resolved.\n *\n * @param schema - The Zod schema to check\n * @returns true if a description i18n key should be generated for display mode\n */\nexport function hasDescriptionForDisplay(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.showDescription === true;\n}\n\n/**\n * Check if a field should have a description i18n key generated for **edit** mode.\n *\n * Reads from `{primitive}UI.edit.showDescription` (boolean flag).\n * If a field declares it wants a description, both display AND edit i18n keys are generated\n * so translators can provide mode-appropriate text.\n *\n * @param schema - The Zod schema to check\n * @returns true if a description i18n key should be generated for edit mode\n */\nexport function hasDescriptionForEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIEditConfig(schema)?.showDescription === true;\n}\n\n// ============================================================================\n// BOOLEAN DISPLAY POLICY HELPERS\n// ============================================================================\n\n/**\n * Check if a string schema should render as a password input.\n * Checks IS_PASSWORD structural marker first, then STRING_UI editMode fallback.\n */\nexport function isPasswordField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_PASSWORD]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'password';\n}\n\n/**\n * Check if a string schema should render as an OTP input.\n * Checks IS_OTP structural marker first, then STRING_UI editMode fallback.\n */\nexport function isOtpField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_OTP]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'otp';\n}\n\n/**\n * Check if a string schema should render as a color input.\n * Checks IS_COLOR structural marker first, then STRING_UI editMode fallback.\n */\nexport function isColorField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_COLOR]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'color';\n}\n\n/**\n * Get OTP field params from a schema.\n * Returns the OTP params with defaults merged in if the decorator is present.\n * Defaults: maxLength=6\n */\nexport function getOtpFieldParams(schema: z.ZodTypeAny): OtpFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n const otpParams = metadata?.[ZodDecorator.IS_OTP];\n\n if (!otpParams) {\n return undefined;\n }\n\n // If params is true (enabled without params), return defaults\n if (otpParams === true) {\n return { maxLength: 6 };\n }\n\n // Merge with defaults\n return {\n maxLength: 6,\n ...otpParams,\n };\n}\n\n/**\n * Get the system enum name from a schema's metadata.\n * Returns the name string (e.g. 'AvailableCurrency') if the .systemEnum() decorator is set,\n * or undefined if the field is not a system enum.\n */\nexport function getSystemEnumName(schema: z.ZodTypeAny): string | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.SYSTEM_ENUM];\n}\n\n\n//===============================================\n// SERIALIZATION (Zod 4)\n//===============================================\n\n/**\n * Serialize a Zod schema to a JSON-serializable format.\n * Uses Zod 4 internal structure (_zod.def.type).\n */\nexport function serializeZodSchema(schema: z.ZodTypeAny | undefined, seen: Set<z.ZodTypeAny> = new Set()): SerializableZodSchema | null {\n if (!schema) return null;\n\n // Avoid circular refs\n if (seen.has(schema)) {\n return { type: 'lazy' };\n }\n seen.add(schema);\n\n // Helper to add optional/nullable flags\n function withOptionals(base: SerializableZodSchema, optional?: boolean, nullable?: boolean): SerializableZodSchema {\n return {\n ...base,\n ...(optional ? { optional: true } : {}),\n ...(nullable ? { nullable: true } : {})\n };\n }\n\n // Unwrap wrappers and track optional/nullable state (Zod 4 structure)\n const unwrapWithFlags = (s: z.ZodTypeAny): { inner: z.ZodTypeAny; optional: boolean; nullable: boolean } => {\n let cur = s;\n let optional = false;\n let nullable = false;\n\n let type = getZodType(cur);\n\n // Iteratively unwrap wrappers\n while (type) {\n switch (type) {\n case 'optional':\n optional = true;\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'nullable':\n nullable = true;\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'default':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'pipe':\n // For pipe/effects, prefer the output schema for serialization\n cur = getZodDefSchemaProperty(cur, 'out') ?? getZodDefSchemaProperty(cur, 'in') ?? cur;\n break;\n case 'readonly':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'catch':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n default:\n // Not a wrapper type, stop unwrapping\n return { inner: cur, optional, nullable };\n }\n type = getZodType(cur);\n }\n\n return { inner: cur, optional, nullable };\n };\n\n const { inner, optional, nullable } = unwrapWithFlags(schema);\n\n // Get custom field metadata from the ORIGINAL schema (not inner)\n // This ensures we find decorators at any wrapper level\n const metadata = getCustomFieldMetadata(schema);\n\n // Also check for range metadata (stored in SCHEMA_METADATA.rangeConfig)\n const rangeMetadata = getRangeMetadata(schema) ?? getRangeMetadata(inner);\n\n const withMeta = (o: SerializableZodSchema): SerializableZodSchema => {\n const hasMeta = metadata && Object.keys(metadata).length > 0;\n const hasRangeMeta = rangeMetadata !== undefined;\n\n if (!hasMeta && !hasRangeMeta) return o;\n\n // Merge custom field metadata with range metadata if present\n const fullMetadata: CustomFieldMetadata = {\n ...metadata,\n ...(hasRangeMeta ? { rangeType: rangeMetadata.type, rangeConfig: rangeMetadata } : {}),\n };\n\n return { ...o, metadata: fullMetadata };\n };\n\n // Get type from Zod 4 structure (_zod.def.type)\n const type = getZodType(inner);\n\n switch (type) {\n case 'string': {\n const description = (inner as z.ZodString).description;\n return withOptionals(withMeta({ type: 'string', ...(description ? { description } : {}) }), optional, nullable);\n }\n case 'number':\n case 'int':\n return withOptionals(withMeta({ type: 'number' }), optional, nullable);\n case 'bigint':\n return withOptionals(withMeta({ type: 'bigint' }), optional, nullable);\n case 'boolean':\n return withOptionals(withMeta({ type: 'boolean' }), optional, nullable);\n case 'date':\n return withOptionals(withMeta({ type: 'date' }), optional, nullable);\n case 'any':\n return withOptionals(withMeta({ type: 'any' }), optional, nullable);\n case 'unknown':\n return withOptionals(withMeta({ type: 'unknown' }), optional, nullable);\n case 'literal': {\n // In Zod 4 a literal's value lives in def.values (an ARRAY — z.literal(['a','b'])\n // is legal in v4); the legacy Zod-3 def.value is always undefined in v4. Reading\n // def.value alone emitted { type: 'literal', value: undefined } for EVERY literal,\n // which then round-tripped through deserializeZodSchema as z.literal(undefined).\n // Read def.values first, fall back to def.value, and take the first non-nullish\n // entry — preserving string/number/boolean literals. (A bare z.literal(null) has no\n // non-nullish entry and legitimately serializes as value: undefined.) Mirrors the\n // Zod-4 literal read in zod-to-mongoose-schema-convertor.backend.service.ts.\n const literalValues = (getZodDefArrayProperty(inner, 'values') ?? [getZodDefProperty(inner, 'value')])\n .filter((entry) => entry !== undefined && entry !== null);\n const value = literalValues[0];\n // A multi-value literal (`z.literal(['a', 'b'])`) carries EVERY value it admits (#1106): serialized\n // as `value: 'a'` alone it round-tripped as `z.literal('a')` and refused `b`. `value` stays the first\n // entry for the single-value case every reader already understands; `values` is present only when\n // there is more than one, and the deserializer prefers it.\n return withOptionals(withMeta({ type: 'literal', value, ...(literalValues.length > 1 ? { values: literalValues } : {}) }), optional, nullable);\n }\n case 'enum': {\n // In Zod 4, both z.enum() and z.enum() use type 'enum'\n // Use the existing getEnumValues helper which handles both cases\n const values = getEnumValues(inner);\n return withOptionals(withMeta({ type: 'enum', values }), optional, nullable);\n }\n case 'array': {\n const element = getZodDefSchemaProperty(inner, 'element');\n return withOptionals(withMeta({\n type: 'array',\n element: serializeZodSchema(element, new Set(seen))!\n }), optional, nullable);\n }\n case 'set': {\n const element = getZodDefSchemaProperty(inner, 'valueType');\n return withOptionals(withMeta({\n type: 'set',\n element: serializeZodSchema(element, new Set(seen))!\n }), optional, nullable);\n }\n case 'tuple': {\n const items = getZodDefArrayProperty(inner, 'items') ?? [];\n return withOptionals(withMeta({\n type: 'tuple',\n items: items\n .filter((o): o is z.ZodTypeAny => isZodTypeAny(o))\n .map(o => serializeZodSchema(o, new Set(seen))!)\n }), optional, nullable);\n }\n case 'record': {\n const keySchema = getZodDefSchemaProperty(inner, 'keyType');\n const valueSchema = getZodDefSchemaProperty(inner, 'valueType');\n return withOptionals(withMeta({\n type: 'record',\n key: serializeZodSchema(keySchema, new Set(seen))!,\n value: serializeZodSchema(valueSchema, new Set(seen))!\n }), optional, nullable);\n }\n case 'union': {\n const options = getZodDefArrayProperty(inner, 'options') ?? [];\n return withOptionals(withMeta({\n type: 'union',\n options: options\n .filter((o): o is z.ZodTypeAny => isZodTypeAny(o))\n .map(o => serializeZodSchema(o, new Set(seen))!)\n }), optional, nullable);\n }\n case 'object': {\n // Use the existing getZodObjectShape helper (Zod 4 uses .shape property)\n const shape = getZodObjectShape(inner);\n const props: Record<string, SerializableZodSchema> = {};\n for (const [k, v] of Object.entries(shape)) {\n props[k] = serializeZodSchema(v, new Set(seen)) || { type: 'unknown' };\n }\n return withOptionals(withMeta({ type: 'object', properties: props }), optional, nullable);\n }\n case 'lazy':\n return withOptionals(withMeta({ type: 'lazy' }), optional, nullable);\n default:\n return withOptionals(withMeta({ type: 'unknown' }), optional, nullable);\n }\n}\n\n\n\n/**\n * Deserialize a SerializableZodSchema back into a Zod schema.\n * - Reconstructs approximate Zod types from the descriptor\n * - Re-applies optional/nullable wrappers\n * - Re-applies SCHEMA_METADATA as decorators when possible\n */\nexport function deserializeZodSchema(desc: SerializableZodSchema | null | undefined): any {\n if (!desc) return undefined;\n\n const applyOptionalNullable = (schema: z.ZodTypeAny, d: SerializableZodSchema): z.ZodTypeAny => {\n let s: z.ZodTypeAny = schema;\n if ((d as any).optional) s = s.optional();\n if ((d as any).nullable) s = s.nullable();\n return s;\n };\n\n const applyMetadata = <T extends z.ZodTypeAny>(schema: T, metadata?: CustomFieldMetadata): T => {\n if (!metadata || Object.keys(metadata).length === 0) return schema;\n const decorators: DecoratorInput[] = [];\n\n // Boolean decorators (no params)\n if (metadata[ZodDecorator.IS_DB_INDEXED]) {\n decorators.push(ZodDecorator.IS_DB_INDEXED);\n }\n if (metadata[ZodDecorator.IS_FOREIGN_KEY]) {\n decorators.push(ZodDecorator.IS_FOREIGN_KEY);\n }\n\n // Hidden decorator (HiddenFieldParams | true)\n const hidden = metadata[ZodDecorator.IS_HIDDEN];\n if (hidden !== undefined) {\n decorators.push({\n ref: ZodDecorator.IS_HIDDEN,\n params: hidden === true ? undefined : hidden\n });\n }\n\n // Not editable decorator (NotEditableFieldParams | true)\n const notEditable = metadata[ZodDecorator.IS_NOT_EDITABLE];\n if (notEditable !== undefined) {\n decorators.push({\n ref: ZodDecorator.IS_NOT_EDITABLE,\n params: notEditable === true ? undefined : notEditable\n });\n }\n\n // Array UI decorator (ArrayUIParams) — also carries absorbed isSortable config\n const arrayUI = metadata[ZodDecorator.ARRAY_UI];\n if (arrayUI !== undefined) {\n decorators.push({\n ref: ZodDecorator.ARRAY_UI,\n params: arrayUI\n });\n }\n\n // Object UI decorator (ObjectUIParams)\n const objectUI = metadata[ZodDecorator.OBJECT_UI];\n if (objectUI !== undefined) {\n decorators.push({\n ref: ZodDecorator.OBJECT_UI,\n params: objectUI\n });\n }\n\n return (decorators.length > 0 ? addDecorators(schema, decorators) : schema) as T;\n };\n\n const build = (d: SerializableZodSchema): z.ZodTypeAny => {\n switch (d.type) {\n case 'string': {\n let s = z.string();\n // Note: description is used for API docs; set if present\n if ((d as any).description) s = s.describe((d as any).description);\n s = applyMetadata(s, (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'number': {\n const s = applyMetadata(z.number(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'bigint': {\n const s = applyMetadata(z.bigint(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'boolean': {\n const s = applyMetadata(z.boolean(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'date': {\n const s = applyMetadata(z.date(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'any': {\n const s = applyMetadata(z.any(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'unknown': {\n const s = applyMetadata(z.unknown(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'literal': {\n // `values` is the whole admitted set of a multi-value literal (#1106); `value` alone is a single one.\n const literalValues = (d as any).values as unknown[] | undefined;\n const s = applyMetadata(z.literal((literalValues && literalValues.length > 1 ? literalValues : (d as any).value) as any), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'enum': {\n const values = (d as any).values as string[];\n // If values are missing/empty, fall back to string (cannot build z.enum([]))\n const base = values && values.length > 0\n ? z.enum(values as [string, ...string[]])\n : z.string();\n const s = applyMetadata(base, (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'array': {\n const el = build((d as any).element);\n const s = applyMetadata(z.array(el), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'set': {\n const el = build((d as any).element);\n const s = applyMetadata(z.set(el), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'tuple': {\n const items = ((d as any).items as SerializableZodSchema[]).map(build);\n const s = applyMetadata(\n items.length >= 1\n ? z.tuple(items as [z.ZodTypeAny, ...z.ZodTypeAny[]])\n : z.tuple([z.any()]),\n (d as any).metadata\n );\n return applyOptionalNullable(s as any, d);\n }\n case 'record': {\n const val = build((d as any).value);\n // Zod records only support string keys; fall back to string keys for non-string keys\n const keyDesc = (d as any).key as SerializableZodSchema | undefined;\n const keySchema = keyDesc && keyDesc.type === 'string' ? z.string() : z.string();\n const s = applyMetadata(z.record(keySchema, val), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'union': {\n const options = ((d as any).options as SerializableZodSchema[]).map(build);\n const s = applyMetadata(options.length >= 2 ? z.union(options as [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]]) : (options[0] || z.any()), (d as any).metadata);\n return applyOptionalNullable(s as any, d);\n }\n case 'object': {\n const metadata = (d as any).metadata as CustomFieldMetadata | undefined;\n const rangeConfig = metadata?.rangeConfig;\n\n // Check if this is a range schema (has rangeConfig metadata)\n if (rangeConfig && rangeConfig.type) {\n const rangeSchema = z_range(rangeConfig.type, {\n fromOptional: rangeConfig.fromOptional,\n toOptional: rangeConfig.toOptional,\n min: rangeConfig.min,\n max: rangeConfig.max,\n });\n // Apply other decorators (excluding range-specific ones that are already applied)\n const metadataWithoutRange = { ...metadata };\n delete metadataWithoutRange.rangeType;\n delete metadataWithoutRange.rangeConfig;\n const s = applyMetadata(rangeSchema, metadataWithoutRange);\n return applyOptionalNullable(s, d);\n }\n\n // Regular object schema\n const props = (d as any).properties as Record<string, SerializableZodSchema>;\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [k, v] of Object.entries(props || {})) {\n shape[k] = build(v as SerializableZodSchema) || z.unknown();\n }\n const s = applyMetadata(z.object(shape), metadata);\n return applyOptionalNullable(s, d);\n }\n case 'lazy': {\n // Cannot reconstruct true lazy structure; fallback\n const s = applyMetadata(z.any(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n default: {\n const s = applyMetadata(z.unknown(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n }\n };\n\n return build(desc);\n}\n\n\n\n// =============================================================================\n// VIRTUAL FIELD UTILITIES\n// =============================================================================\n\n/**\n * Check if a schema is marked as a virtual field.\n * Virtual fields are computed at runtime and not stored in the database.\n */\nexport function isVirtualField(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_VIRTUAL);\n}\n\n\n/**\n * Get the virtual field parameters from a schema.\n * Returns undefined if the field is not virtual.\n */\nexport function getVirtualFieldParams(schema: z.ZodTypeAny): VirtualFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n const virtualMetadata = metadata[ZodDecorator.IS_VIRTUAL];\n\n if (!virtualMetadata) return undefined;\n\n return virtualMetadata as VirtualFieldParams;\n}\n\n/**\n * Get the dependencies declared for a virtual field.\n * Returns an empty array if no dependencies are declared or the field is not virtual.\n */\nexport function getVirtualFieldDependencies(schema: z.ZodTypeAny): string[] {\n const params = getVirtualFieldParams(schema);\n return params?.dependencies ?? [];\n}\n\n/**\n * Check if a virtual field needs object context (parents/children) for computation.\n */\nexport function virtualFieldNeedsObjectContext(schema: z.ZodTypeAny): boolean {\n const params = getVirtualFieldParams(schema);\n return params?.needsObjectContext ?? false;\n}\n\n/**\n * Check if a virtual field needs user context for computation.\n */\nexport function virtualFieldNeedsUserContext(schema: z.ZodTypeAny): boolean {\n const params = getVirtualFieldParams(schema);\n return params?.needsUserContext ?? false;\n}\n\n\n// =============================================================================\n// FORM SCHEMA PREPARATION UTILITIES\n// =============================================================================\n\n/**\n * Operation type for schema preparation.\n */\nexport type FormSchemaOperationType = 'CREATE' | 'UPDATE' | 'READ';\n\n/**\n * Options for prepareFormSchema utility.\n */\nexport interface PrepareFormSchemaOptions {\n /**\n * The operation type (CREATE, UPDATE, or READ).\n * Used to filter excludeFromCreate/excludeFromUpdate fields.\n */\n operationType: FormSchemaOperationType;\n\n /**\n * Whether the form is in draft mode.\n * When true, fields with isDraftRelaxed() become optional.\n * @default false\n */\n isDraftMode?: boolean;\n\n /**\n * Optional operation that behaves like a core operation.\n * For example, 'DUPLICATE' might behave like 'CREATE'.\n */\n operationLike?: FormSchemaOperationType;\n}\n\n/**\n * Check if a field should be excluded from form validation based on its decorators.\n */\nexport function shouldExcludeFieldFromForm(\n fieldSchema: z.ZodTypeAny,\n operationType: FormSchemaOperationType\n): boolean {\n // Exclude virtual fields (computed at runtime)\n if (hasDecorator(fieldSchema, ZodDecorator.IS_VIRTUAL)) {\n return true;\n }\n\n // Exclude backend-only fields (never sent to frontend)\n if (hasDecorator(fieldSchema, ZodDecorator.IS_BACKEND_ONLY)) {\n return true;\n }\n\n // Exclude hidden fields (but respect edit: false param which means visible in edit mode)\n const hiddenMetadata = getHiddenFieldMetadata(fieldSchema);\n if (hiddenMetadata !== undefined) {\n // If hiddenMetadata is true (no params), field is hidden everywhere\n if (hiddenMetadata === true) {\n return true;\n }\n // If hiddenMetadata has params, check the edit flag\n // edit: false means \"NOT hidden in edit mode\" (visible in forms)\n // edit: true or undefined means \"hidden in edit mode\"\n if (hiddenMetadata.edit !== false) {\n return true;\n }\n // edit: false - field is visible in forms, don't exclude\n }\n\n // Exclude excludeFromCreate fields for CREATE operations\n if (operationType === 'CREATE' && hasDecorator(fieldSchema, ZodDecorator.EXCLUDE_FROM_CREATE)) {\n return true;\n }\n\n // Exclude excludeFromUpdate fields for UPDATE operations\n if (operationType === 'UPDATE' && hasDecorator(fieldSchema, ZodDecorator.EXCLUDE_FROM_UPDATE)) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if a field has isDraftRelaxed decorator.\n */\nexport function isDraftRelaxedField(fieldSchema: z.ZodTypeAny): boolean {\n return hasDecorator(fieldSchema, ZodDecorator.IS_DRAFT_RELAXED);\n}\n\n/**\n * Prepare a schema for form validation by filtering out fields that shouldn't be validated\n * and adjusting optionality based on draft mode.\n *\n * This function:\n * - Removes virtual fields\n * - Removes backend-only fields\n * - Removes hidden fields\n * - Removes excludeFromCreate fields (for CREATE operations)\n * - Removes excludeFromUpdate fields (for UPDATE operations)\n * - Makes isDraftRelaxed fields optional when in draft mode\n *\n * **WARNING: Schema-level refinements (.refine(), .superRefine()) are NOT carried over.**\n * The returned schema is a new z.object() with the filtered shape — any cross-field\n * validation defined via refinements on the original schema will be silently lost.\n * This is intentional for draft mode (draft = relaxed validation), but callers using\n * this outside of draft mode should be aware that cross-field rules won't apply.\n * For non-draft form validation, use the original schema (e.g., operation.requestDto) directly.\n *\n * @param schema - The original object schema\n * @param options - Preparation options\n * @returns A new schema suitable for form validation (without schema-level refinements)\n */\nexport function prepareFormSchema<T extends z.ZodObject<z.ZodRawShape>>(\n schema: T,\n options: PrepareFormSchemaOptions\n): z.ZodObject<z.ZodRawShape> {\n const { operationType, isDraftMode = false, operationLike } = options;\n const effectiveOperationType = operationLike ?? operationType;\n\n // Get the shape of the object schema\n const shape = schema.shape as Record<string, z.ZodTypeAny>;\n const newShape: Record<string, z.ZodTypeAny> = {};\n\n // Process each field\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n // Skip fields that should be excluded\n if (shouldExcludeFieldFromForm(fieldSchema, effectiveOperationType)) {\n continue;\n }\n\n // If in draft mode and field is draft-relaxed, make it optional\n if (isDraftMode && isDraftRelaxedField(fieldSchema)) {\n // Wrap in optional if not already optional\n if (!isOptional(fieldSchema)) {\n newShape[fieldName] = fieldSchema.optional();\n } else {\n newShape[fieldName] = fieldSchema;\n }\n } else {\n newShape[fieldName] = fieldSchema;\n }\n }\n\n // Create new object schema with filtered shape\n const newSchema = z.object(newShape);\n\n // M5: Preserve schema-level metadata from original schema (e.g., isHidden, showWhen)\n // Use double assertion via unknown to handle symbol indexing safely\n type SchemaWithMetadata = { [key: symbol]: unknown };\n const schemaAsAny = schema as unknown as SchemaWithMetadata;\n const originalMetadata = schemaAsAny[SCHEMA_METADATA];\n if (originalMetadata && typeof originalMetadata === 'object') {\n const newSchemaAsAny = newSchema as unknown as SchemaWithMetadata;\n newSchemaAsAny[SCHEMA_METADATA] = { ...(originalMetadata as Record<string, unknown>) };\n }\n\n // Note: We don't copy schema-level refinements in draft mode to avoid cross-field validation\n // For non-draft mode, refinements should ideally be copied but that requires deeper schema introspection\n return newSchema;\n}\n\n/**\n * Check if a schema field is marked as ephemeral (transient response-only data).\n * Ephemeral fields are shown once (e.g., API keys upon creation) and not persisted in the UI.\n */\nexport function isEphemeralField(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_EPHEMERAL);\n}\n\n\n// =============================================================================\n// Unified {primitive}UI Reader Functions\n// =============================================================================\n// Return the full nested structure: { display?, summaryOverride?, edit? }.\n// Consumers access context-specific params via e.g. getStringUI(s)?.edit?.editMode.\n\nexport function getBooleanUI(schema: z.ZodTypeAny): BooleanUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.BOOLEAN_UI];\n}\nexport function hasBooleanUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.BOOLEAN_UI);\n}\n\nexport function getStringUI(schema: z.ZodTypeAny): StringUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.STRING_UI];\n}\nexport function hasStringUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.STRING_UI);\n}\n\nexport function getNumberUI(schema: z.ZodTypeAny): NumberUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.NUMBER_UI];\n}\nexport function hasNumberUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.NUMBER_UI);\n}\n\nexport function getEnumUI(schema: z.ZodTypeAny): EnumUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.ENUM_UI];\n}\nexport function hasEnumUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.ENUM_UI);\n}\n\nexport function getDateUI(schema: z.ZodTypeAny): DateUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DATE_UI];\n}\nexport function hasDateUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DATE_UI);\n}\n\nexport function getDateTimeUI(schema: z.ZodTypeAny): DateTimeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DATETIME_UI];\n}\nexport function hasDateTimeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DATETIME_UI);\n}\n\nexport function getTimeUI(schema: z.ZodTypeAny): TimeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.TIME_UI];\n}\nexport function hasTimeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.TIME_UI);\n}\n\nexport function getMoneyUI(schema: z.ZodTypeAny): MoneyUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.MONEY_UI];\n}\nexport function hasMoneyUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.MONEY_UI);\n}\n\nexport function getCodeUI(schema: z.ZodTypeAny): CodeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.CODE_UI];\n}\nexport function hasCodeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.CODE_UI);\n}\n\nexport function getFileUI(schema: z.ZodTypeAny): FileUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.FILE_UI];\n}\nexport function hasFileUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.FILE_UI);\n}\n\nexport function getDurationUI(schema: z.ZodTypeAny): DurationUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DURATION_UI];\n}\nexport function hasDurationUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DURATION_UI);\n}\n\nexport function getPhoneUI(schema: z.ZodTypeAny): PhoneUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.PHONE_UI];\n}\nexport function hasPhoneUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.PHONE_UI);\n}\n\nexport function getBigDecimalUI(schema: z.ZodTypeAny): BigDecimalUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.BIGDECIMAL_UI];\n}\nexport function hasBigDecimalUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.BIGDECIMAL_UI);\n}\n\nexport function getForeignKeyUI(schema: z.ZodTypeAny): ForeignKeyUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.FOREIGN_KEY_UI];\n}\nexport function hasForeignKeyUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.FOREIGN_KEY_UI);\n}\n\nexport function getArrayUI(schema: z.ZodTypeAny): ArrayUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.ARRAY_UI];\n}\nexport function hasArrayUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.ARRAY_UI);\n}\n\nexport function getObjectUI(schema: z.ZodTypeAny): ObjectUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.OBJECT_UI];\n}\nexport function hasObjectUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.OBJECT_UI);\n}\n\n\n"]}
|
|
1
|
+
{"version":3,"file":"zod-utils.shared.js","sourceRoot":"","sources":["../../src/zod-utils.shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport type {\n ArrayUIParams, BigDecimalUIParams, BooleanUIParams, CodeUIParams,\n DateUIParams, DateTimeUIParams, DurationUIParams, EnumUIParams,\n FileUIParams, ForeignKeyUIParams, MoneyUIParams, NumberUIParams,\n ObjectUIParams, PhoneUIParams, StringUIParams, TimeUIParams,\n PrimitiveUIBaseParams, PrimitiveUIBaseEditParams, PrimitiveUIBaseDisplayParams,\n} from './zod-decorators.types';\nimport { BooleanEditMode, DisplayEmptyReason, EnumEditMode, EnumMultipleEditMode, NumberEditMode, StringEditMode } from './zod-decorators.types';\nimport { AutosaveFieldParams, BackendOnlyFieldParams, BusinessKeySetParams, WriteOnlySecretFieldParams, BigDecimalSchemaMetadata,\n DurationSchemaMetadata, CodeSchemaMetadata, DEFAULT_FOREIGN_KEY_DISPLAY_MODE, DiscriminatorFieldParams, FileGenerationSource, FileSchemaMetadata, ForeignKeyStructuralParams, ForeignKeyUIDisplayParams, MoneySchemaMetadata, CustomFieldMetadata, DecoratorInput, FieldSchemaType, FormFieldComponent, HiddenFieldParams, ImpersonalizeFieldParams, NotEditableFieldParams, OtpFieldParams, AddressSchemaMetadata, PhoneSchemaMetadata, PolymorphicFkVariant, RagSourceConfiguration, RangeConstraintValue, RangeSchemaMetadata, RangeType, SCHEMA_METADATA, SerializableZodSchema, SummaryFieldParams, ValidationMode, VersionedForeignKeySchemaMetadata, VersionedSchemaMetadata, ZodDecorator, UniqueFieldParams, VirtualFieldParams, TtlFieldParams, ShowWhenParams, RequestDtoWriteSemantics } from './zod-decorators.types';\nimport { z_range } from './zod-range';\nimport { addDecorators, getMetadataRecursive } from './zod.module-override';\n\n\n// Type guard to check if a schema has Zod v4 internals\n// Zod v4 can have two structures:\n// - Legacy: schema._zod.def.type (older Zod v4 builds)\n// - Current: schema.def.type with schema.type at root (newer Zod v4 builds)\nexport function hasZodInternals(schema: unknown): schema is { def: { type: string; [key: string]: unknown }; type?: string } {\n if (!schema || typeof schema !== 'object') return false;\n\n // First check for legacy structure: schema._zod.def.type\n if ('_zod' in schema) {\n const schemaObj = schema as unknown as Record<string, unknown>;\n const zodProp = schemaObj._zod;\n if (typeof zodProp === 'object' && zodProp !== null && 'def' in zodProp) {\n const zodObj = zodProp as Record<string, unknown>;\n const defProp = zodObj.def;\n if (typeof defProp === 'object' && defProp !== null && 'type' in defProp) {\n return true;\n }\n }\n }\n\n // Check for current structure: schema.def.type (with schema.type at root)\n if ('def' in schema) {\n const schemaObj = schema as unknown as Record<string, unknown>;\n const defProp = schemaObj.def;\n if (typeof defProp === 'object' && defProp !== null && 'type' in defProp) {\n return true;\n }\n }\n\n return false;\n}\n\n\n\n\n\n/**\n * Check if a schema has a specific decorator.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function hasDecorator(schema: z.ZodTypeAny, decorator: ZodDecorator): boolean {\n const metadata = getCustomFieldMetadata(schema);\n const value = metadata[decorator];\n\n // Handle different value types properly\n if (value !== undefined) {\n // For strings: non-empty = has decorator, empty = no decorator (defensive guard)\n if (typeof value === 'string') {\n return (value as string).length > 0;\n }\n // For numbers: any number including 0 = has decorator\n if (typeof value === 'number') {\n return true;\n }\n // For booleans: true = has decorator, false = no decorator\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'object' && value === null) {\n return false;\n }\n\n // For other types: truthy = has decorator\n return Boolean(value);\n }\n\n return false;\n}\n\n// =============================================================================\n// SCHEMA UNWRAPPING\n// =============================================================================\n\n/**\n * Unwrap optional, nullable, default, and other wrapper schemas\n * to get the underlying base schema\n */\nexport function unwrapSchema(schema: z.ZodTypeAny): z.ZodTypeAny {\n const type = getZodType(schema);\n\n switch (type) {\n case 'optional':\n case 'nullable': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'default': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'pipe': {\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n return inSchema ? unwrapSchema(inSchema) : schema;\n }\n case 'readonly': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'catch': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n default:\n return schema;\n }\n}\n\n/**\n * The same PATCH rule, one level down: inside a NESTED object field, a key the caller omits must not be\n * re-materialised from its `.default()` either.\n *\n * `toPatchOptionalField` peels the OUTER default of a top-level field, but an object field's own keys\n * kept theirs, so `{ privacy: { privacyLevel: 'minimal' } }` parsed to\n * `{ privacy: { privacyLevel: 'minimal', consentedPurposes: [] } }` — a write the caller never made, which\n * a downstream hook cannot tell apart from an explicit empty set (#534 review F1: a privacy-level change\n * read as a consent withdrawal). Zod 4 applies a default even inside `.optional()`, so the default must\n * be peeled, not wrapped.\n *\n * (`privacyLevel` itself was removed in #1280 — it was a stored preference nothing read. The example is\n * kept in its original terms because it is the account of a defect that actually happened; the rule it\n * motivates is about ANY nested key with a default, and is unchanged.)\n *\n * Scope, deliberately narrow:\n * - nested PLAIN object fields, recursively, through `optional` / `nullable` wrappers only. An object\n * nested inside a union, discriminated union, record, intersection, pipe/transform, `readonly` or `lazy`\n * is NOT peeled and keeps re-materialising its defaults — narrower than it could be, never wrong;\n * - an object carrying its own refinement is NOT peeled: a `.refine()` / `.superRefine()` may read a\n * defaulted key, and would see `undefined` (or throw) once that default stopped applying;\n * - a nested key WITH a default becomes optional without it; a nested key WITHOUT one keeps its declared\n * optionality — a replaced nested object must still carry what it requires;\n * - ARRAYS are left alone: an array element is sent whole, and its defaults describe a new element;\n * - the object is rebuilt with Zod's own `clone(def)`, so `strict` / `catchall` and refinements survive;\n * decorator metadata AND `z.globalRegistry` metadata (`.describe()`, `.meta()` — what MCP tool input\n * schemas are generated from) are copied onto every rebuilt schema, and inner schemas are SHARED,\n * never mutated, so the source schema is untouched.\n */\nfunction withoutNestedObjectDefaults(schema: z.ZodTypeAny): z.ZodTypeAny {\n const type = getZodType(schema);\n if (type === 'optional' || type === 'nullable') {\n const inner = getZodDefSchemaProperty(schema, 'innerType');\n if (!inner) return schema;\n const rebuiltInner = withoutNestedObjectDefaults(inner);\n if (rebuiltInner === inner) return schema;\n return copySchemaMetadata(schema, type === 'optional' ? rebuiltInner.optional() : rebuiltInner.nullable());\n }\n if (type !== 'object') return schema;\n\n const def = (schema as unknown as { _zod: { def: Record<string, unknown> } })._zod.def;\n if (Array.isArray(def.checks) && def.checks.length > 0) return schema;\n\n const shape = (schema as unknown as { shape: Record<string, z.ZodTypeAny> }).shape;\n const nextShape: Record<string, z.ZodTypeAny> = {};\n let changed = false;\n for (const [key, field] of Object.entries(shape)) {\n let next: z.ZodTypeAny;\n if (isZodDefault(field)) {\n const peeled = getZodDefSchemaProperty(field, 'innerType');\n next = peeled ? copySchemaMetadata(field, withoutNestedObjectDefaults(peeled).optional()) : field;\n } else {\n next = withoutNestedObjectDefaults(field);\n }\n if (next !== field) changed = true;\n nextShape[key] = next;\n }\n if (!changed) return schema;\n\n const rebuilt = (schema as unknown as { clone: (def: Record<string, unknown>) => z.ZodTypeAny }).clone({ ...def, shape: nextShape });\n return copySchemaMetadata(schema, rebuilt);\n}\n\n/** Carry decorator metadata from a source wrapper onto a rebuilt one; the source is never mutated. */\nfunction copySchemaMetadata(source: z.ZodTypeAny, target: z.ZodTypeAny): z.ZodTypeAny {\n const registered = z.globalRegistry.get(source);\n if (registered && !z.globalRegistry.has(target)) z.globalRegistry.add(target, registered);\n const metadata = (source as unknown as Record<symbol, unknown>)[SCHEMA_METADATA];\n if (metadata) {\n const record = target as unknown as Record<symbol, unknown>;\n record[SCHEMA_METADATA] = { ...((record[SCHEMA_METADATA] as Record<string, unknown>) ?? {}), ...(metadata as Record<string, unknown>) };\n }\n return target;\n}\n\n/**\n * Make a field OPTIONAL for a PATCH-style UPDATE DTO, peeling any OUTER\n * `.default()` wrapper first.\n *\n * PATCH semantics: a field the caller OMITS must be left untouched. A field\n * declared `z.number().default(0)` breaks this — Zod re-materialises `0` for the\n * absent key on every parse, so the derived `$set` silently CLOBBERS the stored\n * value with the default. (Live defect: a webhook delivery row's `attemptCount`\n * counter was reset to `0` by every status transition that did not set it, so\n * the retry cap `attemptCount >= MAX_ATTEMPTS` was never reached and dead\n * deliveries retried forever.)\n *\n * It is ALSO where the framework's field-CLEARING contract is admitted onto the wire. An optional\n * field additionally gains a `.nullable()` wrapper here, so a caller can distinguish the two\n * PATCH intents that an absent key alone cannot express:\n *\n * - key ABSENT → leave the stored value untouched (classic PATCH semantics, above);\n * - value NULL → this field has no value (clear it).\n *\n * Eligibility is decided by `fieldAdmitsAddedNullClear` — notably NOT by `isOptional()`, which\n * would wrongly admit `.default()` fields. Required fields keep rejecting `null`. The wrapper is\n * added INSIDE the optional (`ZodOptional<ZodNullable<…>>`) so the outer type stays `optional` for\n * every consumer that introspects it.\n *\n * Behaviour:\n * - Non-default fields: `fieldSchema.optional()`, plus a `.nullable()` wrapper when the field is\n * optional and does not already accept null.\n * - Default-wrapped fields: the outer `ZodDefault` is peeled, the inner schema\n * (keeping `.int()` / `.min()` / refinements) is made optional, and any\n * decorator metadata attached to the default wrapper (e.g.\n * `.default(0).isSummaryField()`) is carried onto the resulting optional so\n * `getMetadataRecursive` is unchanged. The inner schema is SHARED, never\n * mutated, so the source schema is left intact.\n *\n * Defaults remain correct for CREATE (a new row gets them) — this transform is\n * for the UPDATE DTO only.\n */\nexport function toPatchOptionalField(fieldSchema: z.ZodTypeAny): z.ZodTypeAny {\n const admitsNullClear = fieldAdmitsAddedNullClear(fieldSchema);\n\n if (!isZodDefault(fieldSchema)) {\n const nestedPatched = withoutNestedObjectDefaults(fieldSchema);\n return admitsNullClear ? nestedPatched.nullable().optional() : nestedPatched.optional();\n }\n\n const rawInnerType = getZodDefSchemaProperty(fieldSchema, 'innerType');\n if (!rawInnerType) return fieldSchema.optional();\n const innerType = withoutNestedObjectDefaults(rawInnerType);\n\n // A defaulted field is never null-clearable (see `fieldAdmitsAddedNullClear`), so the peeled\n // inner is made optional WITHOUT a nullable wrapper.\n const optionalInner = innerType.optional();\n const defaultWrapperMetadata = (fieldSchema as unknown as Record<symbol, unknown>)[SCHEMA_METADATA];\n if (defaultWrapperMetadata) {\n const optionalRecord = optionalInner as unknown as Record<symbol, unknown>;\n const existing = (optionalRecord[SCHEMA_METADATA] as Record<string, unknown>) ?? {};\n optionalRecord[SCHEMA_METADATA] = {\n ...existing,\n ...(defaultWrapperMetadata as Record<string, unknown>),\n };\n }\n return optionalInner;\n}\n\n/**\n * The value an edit control should contribute to form state, once a \"the user emptied this field\"\n * gesture has been normalised into the framework's single CLEARED representation.\n *\n * # Why a normalisation step has to exist at all\n *\n * An HTML form control cannot express \"no value\". The platform defines a form entry's value as a\n * string (or a `File`), and assigning `null` to `input.value` is coerced to `\"\"` at the DOM\n * boundary. So a user clearing a text box produces `''`, a user clearing a date picker produces\n * `undefined`, and neither of those is a wire representation of \"clear this field\". Left alone they\n * produce three different wrong outcomes: `''` fails a refined schema outright (a colour or phone\n * field could never be emptied once set), `''` passes a plain string schema and PERSISTS an empty\n * string as a second, redundant \"no data\" value, and `undefined` is dropped by `JSON.stringify` so\n * the clear silently never reaches the server at all.\n *\n * # What it normalises TO, and why not `undefined`\n *\n * Always `null`, never `undefined`. React Hook Form reserves `undefined` to mean \"fall back to\n * defaultValue\" and documents that calling `onChange` with it is not valid, so `undefined` is not a\n * representable field value there. `null` is the value RHF itself prescribes for a cleared field,\n * and it is the one sentinel that survives every downstream seam: the submission path keeps it, the\n * section-save path keeps it, and `JSON.stringify` keeps it.\n *\n * # Where this must be called\n *\n * At the ONE place a control's change reaches form state, before the value is handed to both the\n * form library and the autosave queue. Normalising later (at submit) is too late — validation has\n * already rejected the empty string — and normalising only for validation is the documented Formik\n * defect, where the schema validates a value the server never receives.\n *\n * # What it deliberately leaves alone\n *\n * - **Fields that cannot be cleared** — a required field, or one whose declaration otherwise\n * rejects null. Their empty value is returned untouched so validation still fails with the normal\n * message rather than being silently rewritten.\n * - **Password and OTP inputs** — an empty password box conventionally means \"unchanged\", never\n * \"remove the credential\". Removing a secret must be an explicit destructive action, not a blank\n * field.\n * - **Any non-empty value**, including `0` and `false`, which are values rather than absences.\n *\n * # Two entry points, because the caller's schema decides the question\n *\n * A form validates the operation's REQUEST DTO; inline edit on a display surface only ever holds\n * the resource's MAIN schema. Those two answer \"can this be cleared?\" differently and cannot be\n * told apart by shape, so the caller picks the entry point matching what it holds — see\n * `requestDtoFieldIsClearable` for why merging them is unsound. This is the REQUEST-DTO one.\n *\n * @param fieldSchema - the field as it appears on the operation's request DTO.\n * @param value - the raw value the control emitted.\n * @returns `null` when the gesture is a clear on a clearable field; otherwise `value` unchanged.\n */\nexport function normalizeClearedRequestDtoValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n return normalizeClearedValue(fieldSchema, value, requestDtoFieldIsClearable);\n}\n\n/**\n * `normalizeClearedFieldValue` for a caller holding the resource's MAIN schema — inline edit on a\n * display surface, and any edit control reasoning about its own declared field.\n *\n * Same contract, different question asked of the schema. See `mainSchemaFieldIsClearable`.\n */\nexport function normalizeClearedMainSchemaValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n return normalizeClearedValue(fieldSchema, value, mainSchemaFieldIsClearable);\n}\n\n/**\n * Mark an UPDATE request DTO object as written PATCH style (see `RequestDtoWriteSemantics`).\n *\n * The mark lives in the `SCHEMA_METADATA` bag because that bag is what every DTO rebuild carries\n * across (network-boundary coercion, templatable-file stripping, nested-relationship extension). It\n * is written COPY-ON-WRITE: rebuilds share one bag object between instances, so mutating it would\n * mark schemas that were never PATCH roots.\n */\nexport function markPatchRequestDtoObject<TSchema extends z.ZodTypeAny>(schema: TSchema): TSchema {\n const record = schema as unknown as Record<symbol, CustomFieldMetadata | undefined>;\n record[SCHEMA_METADATA] = { ...(record[SCHEMA_METADATA] ?? {}), requestDtoWriteSemantics: RequestDtoWriteSemantics.PATCH };\n return schema;\n}\n\n/**\n * Does this object follow the PATCH write rule — absent key untouched, `null` clears?\n *\n * Looks through optional, nullable and default wrappers. A UNION answers `true` when ANY option is a\n * PATCH object: a nested child's items are a union of an update branch (PATCH) and a create branch\n * (written whole), and a field cannot tell which one it is in. `true` keeps the stricter rule, under\n * which a required field stays unclearable; the other answer would let one read as clearable in the\n * update branch, where clearing it would be a silent no-op.\n */\nexport function objectFollowsPatchWriteRule(schema: z.ZodTypeAny | undefined): boolean {\n if (!schema) return false;\n const metadata = (schema as unknown as Record<symbol, CustomFieldMetadata | undefined>)[SCHEMA_METADATA];\n if (metadata?.requestDtoWriteSemantics === RequestDtoWriteSemantics.PATCH) return true;\n\n const type = getZodType(schema);\n if (type === 'optional' || type === 'nullable' || type === 'default') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? objectFollowsPatchWriteRule(innerSchema) : false;\n }\n if (type === 'union') {\n const options = getZodDefArrayProperty(schema, 'options') as z.ZodTypeAny[] | undefined;\n return (options ?? []).some((option) => objectFollowsPatchWriteRule(option));\n }\n return false;\n}\n\n/**\n * Is \"clear it\" meaningful for a field inside an object that is written WHOLE — an object value\n * nested in a field, an array item, or a CREATE request DTO?\n *\n * The declaration answers it, exactly as on a main schema: absence or null allowed → clearable, required\n * or defaulted → not. `requestDtoFieldIsClearable` (\"accepts null\") is the wrong question here: only a\n * PATCH root's direct fields get a null admitted, so it reported every nested optional field\n * unclearable, and an emptied nested address could never be saved (#989).\n */\nexport function valueObjectFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return mainSchemaFieldIsClearable(fieldSchema);\n}\n\n/**\n * `normalizeClearedFieldValue` for a field inside an object written WHOLE. The cleared value is ABSENCE\n * (`undefined`), or `null` only for a field that accepts null.\n *\n * Absence, because nothing else is safe there: the persistence layer removes only TOP-LEVEL cleared\n * fields, so a `null` nested in a stored object would be persisted as `null` and then fail the main\n * schema's `.optional()` on the next read.\n */\nexport function normalizeClearedValueObjectFieldValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n const normalized = normalizeClearedValue(fieldSchema, value, valueObjectFieldIsClearable);\n return normalized === null && !fieldSchema.safeParse(null).success ? undefined : normalized;\n}\n\nfunction normalizeClearedValue(\n fieldSchema: z.ZodTypeAny,\n value: unknown,\n isClearable: (fieldSchema: z.ZodTypeAny) => boolean,\n): unknown {\n if (!isEmptyFieldGesture(value)) return value;\n\n const editMode = getStringUI(fieldSchema)?.edit?.editMode;\n if (editMode === StringEditMode.PASSWORD || editMode === StringEditMode.OTP) return value;\n\n if (!isClearable(fieldSchema)) return value;\n\n return null;\n}\n\n/**\n * Is \"clear it\" a meaningful instruction for this field, as declared on an UPDATE REQUEST DTO?\n *\n * On a request DTO the answer is exactly \"does it accept null\", because `toPatchOptionalField` adds\n * a nullable wrapper to the clearable fields and to no others.\n *\n * **This must never be asked of a MAIN-schema field, and its sibling must never be asked of a DTO\n * field.** The two schemas cannot be told apart by shape, and each answers only its own question\n * correctly:\n *\n * - On a DTO, PATCH semantics make EVERY field optional, so a required field is shape-identical to\n * an optional one. \"Declares absence\" is therefore meaningless here and would report every\n * required field clearable.\n * - On a main schema, an `.optional()` field does NOT accept null, so \"accepts null\" would report\n * every ordinary optional field un-clearable.\n *\n * Merging them into one permissive predicate looks convenient and is unsound in the first\n * direction: it silently made required fields clearable, which a pin caught.\n */\nexport function requestDtoFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return fieldSchema.safeParse(null).success;\n}\n\n/**\n * Is \"clear it\" a meaningful instruction for this field, as declared on a resource's MAIN schema?\n *\n * Here the author's own declaration is the answer: a field that may be absent (`.optional()`) or\n * explicitly null (`.nullish()`) can be cleared; a required or defaulted one cannot. Read the\n * warning on `requestDtoFieldIsClearable` before using either.\n */\nexport function mainSchemaFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return fieldSchema.safeParse(null).success || fieldAdmitsAddedNullClear(fieldSchema);\n}\n\n/**\n * Is this value an edit control's way of saying \"the user emptied me\"?\n *\n * The three shapes are the three the framework's controls actually emit: `''` from the string,\n * enum and number families, `undefined` from the date/time family, and `null` from a control that\n * has already been normalised (so re-normalising is idempotent).\n */\nfunction isEmptyFieldGesture(value: unknown): boolean {\n return value === '' || value === undefined || value === null;\n}\n\n/**\n * Should an UPDATE DTO ADD a `.nullable()` wrapper to this field so a caller can CLEAR it?\n *\n * This is the eligibility half of the framework's field-clearing contract. The wire rule is\n * JSON-Merge-Patch shaped and has exactly one meaning: an ABSENT key leaves the stored value\n * untouched, and an explicit `null` means \"this field has no value\". The repository write boundary\n * then derives the STORAGE representation from the field's own declaration — `$unset` / SQL NULL\n * for a field whose schema rejects null, a stored null for one authored `.nullish()`.\n *\n * Three declarations must be told apart, and the distinction is not the one `isOptional()` draws:\n *\n * - **Optional (`.optional()`, `.nullish()`)** — the author said this field may have no value, so\n * clearing it is meaningful. ELIGIBLE.\n * - **Required (`z.string()`)** — no \"no value\" state exists. NOT eligible: `null` must keep\n * failing validation, which is also what the industry guidance prescribes (a field that cannot be\n * deleted answers 400 rather than silently ignoring the instruction).\n * - **Defaulted (`.default('x')`)** — `isOptional()` reports TRUE for these because the *input* may\n * be omitted, but the *output* type is non-optional: the schema guarantees a value is always\n * present, and the READ path validates against that guarantee. Clearing one would persist an\n * absence the resource's own main schema rejects, turning the next read into a 500. NOT eligible,\n * and this is precisely why this predicate exists instead of reusing `isOptional()`.\n *\n * A field that ALREADY accepts null (authored `.nullable()` / `.nullish()`) is reported `false` —\n * not because it cannot be cleared, but because nothing needs adding: it accepts `null` on its own,\n * and re-wrapping would emit a redundant nullable in the generated JSON Schema / OpenAPI document.\n *\n * @param fieldSchema - the field as declared on the resource's main schema.\n * @returns `true` only when a nullable wrapper must be ADDED for the field to be clearable.\n */\nexport function fieldAdmitsAddedNullClear(fieldSchema: z.ZodTypeAny): boolean {\n // A default makes the OUTPUT non-optional — see the JSDoc above. Checked first because\n // `ZodDefault` wraps an inner schema that is frequently optional-looking.\n if (isZodDefault(fieldSchema)) return false;\n\n if (!declaresAbsenceAsAValidState(fieldSchema)) return false;\n\n // Already null-accepting (`.nullable()` / `.nullish()`): clearable without any addition.\n return !fieldSchema.safeParse(null).success;\n}\n\n/**\n * Does this field's declaration allow the value to be ABSENT (i.e. accept `undefined`)?\n *\n * Deliberately NOT `isOptional()`: that helper answers \"may the user omit this input?\", which is\n * true for `.default()` fields, whereas this answers \"may this field legitimately hold no value?\",\n * which is false for them. Merging the two is what would make a defaulted field clearable.\n */\nfunction declaresAbsenceAsAValidState(fieldSchema: z.ZodTypeAny): boolean {\n if (isZodDefault(fieldSchema)) return false;\n if (isZodOptional(fieldSchema)) return true;\n\n const type = getZodType(fieldSchema);\n if (type === 'nullable' || type === 'pipe' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(fieldSchema, 'innerType') ?? getZodDefSchemaProperty(fieldSchema, 'in');\n return innerSchema ? declaresAbsenceAsAValidState(innerSchema) : false;\n }\n\n return false;\n}\n\n\n// =============================================================================\n// ZOD TYPE DETECTION HELPERS\n//\n// Helper function to safely get the type from a Zod v4 schema\n// Supports both structures:\n// - Legacy: schema._zod.def.type\n// - Current: schema.def.type (or schema.type at root)\n// Type values are lowercase strings like \"object\", \"array\", \"string\", etc.\n// =============================================================================\n\nexport function getZodType(schema: z.ZodTypeAny): string | undefined {\n // Guard against null/undefined schemas\n if (!schema || typeof schema !== 'object') {\n return undefined;\n }\n\n const def = getZodDef(schema);\n if (def?.type) return def.type;\n\n // Fallback: check schema.type at root level\n if ('type' in schema && typeof (schema as unknown as Record<string, unknown>).type === 'string') {\n return (schema as unknown as Record<string, unknown>).type as string;\n }\n\n return undefined;\n}\n\n/**\n * Type guard to check if a schema has a specific type\n * Uses Zod v4's type system where types are lowercase strings\n */\nexport function hasZodType(schema: z.ZodTypeAny, type: string): boolean {\n return getZodType(schema) === type;\n}\n\nexport function isZodObject(schema: z.ZodTypeAny): schema is z.ZodObject<any> {\n return hasZodType(schema, 'object');\n}\n\nexport function isZodArray(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'array');\n}\n\n/**\n * The same array schema with a different ELEMENT, keeping everything else it carries.\n *\n * Use this instead of `z.array(newElement)` whenever an existing array is being rewritten.\n * A fresh `z.array()` is a brand-new schema that carries none of the original's own checks, so\n * every authored `.min()` / `.max()` / `.length()` / `.nonempty()` is silently dropped — the\n * rewritten schema still parses, just without the constraint the author declared. That is\n * invisible to types and to any test that only feeds it valid data.\n *\n * It cost real time to find: all FOUR DTO-boundary walkers (templatable-file stripping,\n * network-boundary coercion, backend-only stripping, summary-field extraction) rebuilt arrays this\n * way, so an authored array constraint never reached the schema the controller and the repository\n * validate against. `reset_to_defaults` depended on exactly such a constraint to reject a request\n * naming no preference block, and without it the route answered HTTP 200 having written nothing.\n *\n * Native `.clone()` re-instantiates from the schema's own definition, so checks and error maps\n * survive by construction rather than by a copy loop that the next Zod version could outgrow.\n *\n * `z.globalRegistry` metadata (`.describe()`, `.meta()`) does NOT come with it: Zod links a clone to\n * its source, which is how a clone inherits that metadata, only when no new definition is passed,\n * and this always passes one. Measured, 2026-09-26: a billing-state `invoices` array lost its\n * description to date coercion, so the API reference published it undescribed (#1625). It is copied\n * explicitly below, without `id`, which names one schema and which Zod refuses to register twice.\n *\n * @param arraySchema - the array being rewritten. Returned untouched when it is not an array or\n * carries no element, so callers do not need to pre-check.\n * @param element - the replacement element schema.\n */\nexport function withArrayElement(arraySchema: z.ZodTypeAny, element: z.ZodTypeAny): z.ZodTypeAny {\n if (!isZodArray(arraySchema)) {\n return arraySchema;\n }\n\n const def = (arraySchema as unknown as { _zod?: { def?: Record<string, unknown> } })._zod?.def;\n if (!def) {\n return arraySchema;\n }\n\n const rebuilt = (arraySchema as unknown as { clone: (def: unknown) => z.ZodTypeAny }).clone({ ...def, element });\n const registered = z.globalRegistry.get(arraySchema) as Record<string, unknown> | undefined;\n if (registered !== undefined && !z.globalRegistry.has(rebuilt)) {\n const { id: _id, ...carried } = registered;\n if (Object.keys(carried).length > 0) z.globalRegistry.add(rebuilt, carried as never);\n }\n return rebuilt;\n}\n\nexport function isZodOptional(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'optional');\n}\n\nexport function isZodNullable(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'nullable');\n}\n\nexport function isZodDefault(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'default');\n}\n\nexport function isZodUnion(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'union');\n}\n\nexport function isZodIntersection(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'intersection');\n}\n\nexport function isZodLiteral(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'literal');\n}\n\nexport function isZodLazy(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'lazy');\n}\n\nexport function isZodTuple(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'tuple');\n}\n\nexport function isZodRecord(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'record');\n}\n\nexport function isZodSet(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'set');\n}\n\nexport function isZodPipe(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'pipe');\n}\n\nexport function isZodTransform(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n if (type === 'transform') return true;\n // In Zod v4, `.transform()` returns a pipe schema whose output is a transform schema.\n if (type === 'pipe') {\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n return outSchema ? getZodType(outSchema) === 'transform' : false;\n }\n return false;\n}\n\nexport function isZodCustom(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'custom');\n}\n\n\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nexport function isZodTypeAny(value: unknown): value is z.ZodTypeAny {\n return value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n hasZodInternals(value);\n}\n\n/**\n * Check if a union is discriminated (has discriminator property)\n * In Zod v4, discriminated unions have type: \"union\" with a discriminator property\n */\nexport function isDiscriminatedUnion(schema: z.ZodTypeAny): boolean {\n if (!isZodUnion(schema)) return false;\n return getZodDefStringProperty(schema, 'discriminator') !== undefined;\n}\n\n/**\n * Check if a schema is optional (can be undefined)\n */\nexport function isOptional(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n\n if (type === 'optional') return true;\n if (type === 'default') return true; // Has default, so not required from user\n\n if (type === 'nullable' || type === 'pipe' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType') ?? getZodDefSchemaProperty(schema, 'in');\n return innerSchema ? isOptional(innerSchema) : false;\n }\n\n return false;\n}\n\n/**\n * Check if a schema has refine/superRefine transformations\n * This triggers onChange validation mode\n */\nexport function hasRefine(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n\n // Check for pipe with refinement effect\n if (type === 'pipe') {\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n if (outSchema) {\n const outType = getZodType(outSchema);\n if (outType === 'custom') {\n // Custom type in pipe output usually indicates refinement\n return true;\n }\n }\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n return inSchema ? hasRefine(inSchema) : false;\n }\n\n // Check for custom type (refine creates these)\n if (type === 'custom') {\n return true;\n }\n\n // Unwrap wrappers and check inner\n if (type === 'optional' || type === 'nullable' || type === 'default' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? hasRefine(innerSchema) : false;\n }\n\n return false;\n}\n\n\n// =============================================================================\n// SCHEMA TYPE DETECTION\n// =============================================================================\n\n/**\n * Get the schema type category for component selection.\n *\n * Important: RANGE schemas (created by z_range()) are detected by their\n * SCHEMA_METADATA.rangeConfig before checking for object type. This allows range schemas\n * to be rendered with appropriate range components instead of as composite objects.\n */\nexport function getSchemaType(schema: z.ZodTypeAny): FieldSchemaType {\n // Check for range schema FIRST (before object check)\n // Range schemas are z.object({from, to}) with SCHEMA_METADATA.rangeConfig\n // isRangeSchema and getRangeType now handle unwrapping internally\n if (isRangeSchema(schema)) {\n // Return specialized range type based on the range's value type\n const rangeType = getRangeType(schema);\n switch (rangeType) {\n case RangeType.NUMBER:\n return FieldSchemaType.RANGE_NUMBER;\n case RangeType.DATE:\n return FieldSchemaType.RANGE_DATE;\n case RangeType.DATETIME:\n return FieldSchemaType.RANGE_DATETIME;\n case RangeType.TIME:\n return FieldSchemaType.RANGE_TIME;\n case RangeType.BIGDECIMAL:\n return FieldSchemaType.RANGE_BIGDECIMAL;\n case RangeType.MONEY:\n return FieldSchemaType.RANGE_MONEY;\n default:\n // z_range() only accepts valid RangeType values, so this should never happen\n return FieldSchemaType.UNKNOWN;\n }\n }\n\n // Check for money schemas (created by z_money())\n // isMoneySchema now handles unwrapping internally\n if (isMoneySchema(schema)) {\n return FieldSchemaType.MONEY;\n }\n\n // Check for bigdecimal schemas (created by z_bigdecimal())\n // isBigDecimalSchema now handles unwrapping internally\n if (isBigDecimalSchema(schema)) {\n return FieldSchemaType.BIGDECIMAL;\n }\n\n // Check for code schemas (created by z_code())\n // isCodeSchema now handles unwrapping internally\n if (isCodeSchema(schema)) {\n return FieldSchemaType.CODE;\n }\n\n // Check for file schemas (created by z_file())\n // isFileSchema now handles unwrapping internally\n if (isFileSchema(schema)) {\n return FieldSchemaType.FILE;\n }\n\n // Check for duration schemas (created by z_duration())\n if (isDurationSchema(schema)) {\n return FieldSchemaType.DURATION;\n }\n\n // Check for phone schemas (created by z_phone())\n if (isPhoneSchema(schema)) {\n return FieldSchemaType.PHONE;\n }\n\n // Check for address schemas (created by z_address()) — BEFORE the generic object case, which an\n // address would otherwise fall into as a plain OBJECT with no field of its own (#561).\n if (isAddressSchema(schema)) {\n return FieldSchemaType.ADDRESS;\n }\n\n // Check for versioned foreign key schemas (created by z_foreignKeyVersioned())\n if (isVersionedForeignKeySchema(schema)) {\n return FieldSchemaType.VERSIONED_FOREIGN_KEY;\n }\n\n // Check for versioned object schemas (created by versioned())\n if (isVersionedObjectSchema(schema)) {\n return FieldSchemaType.VERSIONED_OBJECT;\n }\n\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n switch (type) {\n case 'string': {\n // Check for datetime/time formats (z.iso.datetime(), z.iso.time())\n const format = getStringFormat(unwrapped);\n if (format === 'datetime') return FieldSchemaType.DATETIME;\n if (format === 'time') return FieldSchemaType.TIME;\n return FieldSchemaType.STRING;\n }\n case 'number':\n case 'int': return FieldSchemaType.NUMBER;\n case 'bigint': return FieldSchemaType.BIGINT;\n case 'boolean': return FieldSchemaType.BOOLEAN;\n case 'enum':\n return FieldSchemaType.ENUM;\n case 'literal': {\n // In Zod v4, literal values are stored in def.values as an array\n const values = getZodDefProperty(unwrapped, 'values') as unknown[] | undefined;\n const literalValue = values?.[0];\n if (literalValue === null || literalValue === undefined) {\n return FieldSchemaType.UNKNOWN;\n }\n // Infer type based on the value type\n switch (typeof literalValue) {\n case 'string':\n // String literals are treated as single-value enums (for select fields)\n return FieldSchemaType.ENUM;\n case 'number':\n case 'bigint':\n return FieldSchemaType.NUMBER;\n case 'boolean':\n return FieldSchemaType.BOOLEAN;\n default:\n return FieldSchemaType.UNKNOWN;\n }\n }\n /*\n * A `z.date()` is a DAY unless it declares itself a MOMENT.\n *\n * In Wildo a datetime is Date-based — an ISO-8601 string is a wire format for one, never the\n * model — so `ZodDate` is the carrier for both \"a day\" (`dueDate`) and \"a point in time\"\n * (`remindAt`). Nothing in the schema shape distinguishes them, which left `DATETIME`\n * effectively unreachable: every date classified as `DATE`, so every one of them EDITED through\n * the day picker and DISPLAYED through the day formatter, and a moment silently lost its hour\n * on both surfaces while `FormFieldDateTime` and `DisplayFieldDateTime` sat unreachable.\n *\n * The declaration is what distinguishes them, and it already exists: `dateTimeUI()` is applyable\n * to `ZodDate` precisely to say \"this value carries a time of day\". Reading it here means the\n * two renderer dispatchers — which both key on this classification alone — pick the datetime\n * pair without either of them learning a new rule.\n *\n * Scoped to the RENDERING classification on purpose: nothing in DTO building or persistence\n * branches on `DATE` vs `DATETIME` (checked), so this changes which control a field gets and\n * nothing about how its value is carried or stored.\n */\n case 'date': return getDateTimeUI(unwrapped) !== undefined ? FieldSchemaType.DATETIME : FieldSchemaType.DATE;\n case 'object': return FieldSchemaType.OBJECT;\n case 'array': return FieldSchemaType.ARRAY;\n case 'set': return FieldSchemaType.SET;\n case 'tuple': return FieldSchemaType.TUPLE;\n case 'record': return FieldSchemaType.RECORD;\n case 'map': return FieldSchemaType.MAP;\n case 'union': {\n // For unions, try to infer type from options\n // If all options are enums, treat as ENUM (combined values)\n // Otherwise, use the type of the first option\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n if (options.length === 0) return FieldSchemaType.UNKNOWN;\n\n // Check if all options are enums or string literals (treat as combined enum)\n const allEnumLike = options.every((opt: unknown) => {\n if (!isZodTypeAny(opt)) return false;\n const optType = getZodType(opt as z.ZodTypeAny);\n return optType === 'enum' || optType === 'literal';\n });\n\n if (allEnumLike) {\n return FieldSchemaType.ENUM;\n }\n\n // Otherwise, infer from the first option\n const firstOption = options[0];\n if (isZodTypeAny(firstOption)) {\n return getSchemaType(firstOption as z.ZodTypeAny);\n }\n\n return FieldSchemaType.UNKNOWN;\n }\n default: return FieldSchemaType.UNKNOWN;\n }\n}\n\n/**\n * Which classified schema types HOLD FIELDS — parts that are fields of the resource in their own right, each\n * labelled, displayed and validated under its own dotted path (`privacy.consentedPurposes`) — as opposed to\n * being ONE value whose parts belong to the value.\n *\n * A structured value is a Zod object too: `z_money()` is `{ amount, currency, decimals }`, `z_address()` is\n * `{ line1, …, coordinates }`, every `z_range()` is `{ from, to }`. But its parts are not fields. The value's\n * own component draws and names them (`LOW_LEVEL_FORM_FIELD_ADDRESS` carries `line1`, the money field reads the\n * currency through `system_enums`), so the resource has exactly ONE word for the whole value — its field label —\n * and no word for any part. Walking into a structured value as if it were a nested object is how the application\n * labelling planner came to generate, translate and ship `fields.amount.amount`, `fields.amount.currency` and\n * `fields.amount.decimals` for a money field no screen ever looked up (#1959).\n *\n * A `Record` over the whole enum rather than a list of either half, so a classification added tomorrow is a\n * compile error here until someone decides which it is — the label walk, the labelling planner, the frontend\n * label introspection and the validation summary all read this one answer through {@link isFieldContainerSchema}.\n *\n * `VERSIONED_OBJECT` holds fields: `versioned()` returns the application's own object with two hidden bookkeeping\n * fields added, and the display renders it through the plain object branch, child field by child field.\n */\nconst FIELD_SCHEMA_TYPE_HOLDS_FIELDS: Readonly<Record<FieldSchemaType, boolean>> = {\n [FieldSchemaType.OBJECT]: true,\n [FieldSchemaType.VERSIONED_OBJECT]: true,\n [FieldSchemaType.STRING]: false,\n [FieldSchemaType.NUMBER]: false,\n [FieldSchemaType.BIGINT]: false,\n [FieldSchemaType.BOOLEAN]: false,\n [FieldSchemaType.ENUM]: false,\n [FieldSchemaType.DATE]: false,\n /*\n * An ARRAY is not a container of FIELDS: its items are rows of one schema, and a walk that labels by field\n * steps through it to the item (index-free) and asks this question of the ITEM. SET, TUPLE, RECORD and MAP\n * are never walked for field labels at all.\n */\n [FieldSchemaType.ARRAY]: false,\n [FieldSchemaType.SET]: false,\n [FieldSchemaType.TUPLE]: false,\n [FieldSchemaType.RECORD]: false,\n [FieldSchemaType.MAP]: false,\n [FieldSchemaType.TIME]: false,\n [FieldSchemaType.DATETIME]: false,\n [FieldSchemaType.RANGE_NUMBER]: false,\n [FieldSchemaType.RANGE_DATE]: false,\n [FieldSchemaType.RANGE_DATETIME]: false,\n [FieldSchemaType.RANGE_TIME]: false,\n [FieldSchemaType.RANGE_BIGDECIMAL]: false,\n [FieldSchemaType.RANGE_MONEY]: false,\n [FieldSchemaType.MONEY]: false,\n [FieldSchemaType.BIGDECIMAL]: false,\n [FieldSchemaType.CODE]: false,\n [FieldSchemaType.FILE]: false,\n [FieldSchemaType.DURATION]: false,\n [FieldSchemaType.PHONE]: false,\n [FieldSchemaType.ADDRESS]: false,\n [FieldSchemaType.VERSIONED_FOREIGN_KEY]: false,\n [FieldSchemaType.UNKNOWN]: false,\n};\n\n/**\n * Does this schema HOLD FIELDS of the resource — so a walk that labels by field path descends into it — rather\n * than being a scalar or a structured value whose parts are its own (money, address, duration, code, file, every\n * range)? See {@link FIELD_SCHEMA_TYPE_HOLDS_FIELDS} for why the two are different and why the answer is read off\n * {@link getSchemaType} rather than off a list of value types.\n *\n * Takes the schema as declared, wrappers included: `getSchemaType` recognises every structured value through its\n * wrappers, so `z_money().optional()` answers `false` like `z_money()` does.\n *\n * @example\n * isFieldContainerSchema(z.object({ city: z.string() })); // true — `address.city` is a field\n * isFieldContainerSchema(z_address()); // false — `line1` is the address's, not the resource's\n */\nexport function isFieldContainerSchema(schema: z.ZodTypeAny): boolean {\n return FIELD_SCHEMA_TYPE_HOLDS_FIELDS[getSchemaType(schema)];\n}\n\n\n// =============================================================================\n// VALUE TYPE INFERENCE — the runtime twin of getSchemaType\n// =============================================================================\n\n/**\n * An ISO-8601 DATETIME: a calendar date, a `T` (or the JSON-ish space form), a clock time, and an\n * optional zone designator.\n *\n * The `T` is what makes this safe to recognise. No identifier, version, code or reference in this\n * codebase's data has that shape, so a string matching it is a datetime with as much certainty as\n * a declared schema would have given.\n */\nconst ISO_DATETIME_PATTERN = /^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:?\\d{2})?$/;\n\n/** An ISO-8601 CALENDAR DATE and nothing else. */\nconst ISO_DATE_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\n/**\n * Does this `YYYY-MM-DD` name a real day?\n *\n * `new Date('2026-02-30')` does not throw — it rolls over to 2 March — so a pattern match alone\n * would accept a string that is shaped like a date and is not one. Round-tripping the parsed parts\n * back out is what rejects it, and it is the difference between recognising dates and recognising\n * things with four digits, a dash and some numbers.\n */\nfunction namesARealCalendarDay(year: number, month: number, day: number): boolean {\n const parsed = new Date(Date.UTC(year, month - 1, day));\n return parsed.getUTCFullYear() === year\n && parsed.getUTCMonth() === month - 1\n && parsed.getUTCDate() === day;\n}\n\n/**\n * WHAT IS THIS VALUE, when no schema can say?\n *\n * The runtime twin of {@link getSchemaType}, and it exists for exactly one caller shape: a field\n * declared `z.unknown()`. That is a DELIBERATE posture — an outbound webhook's `payload`, an\n * integration's passthrough blob, a stored provider response — and the framework's answer used to\n * be a single one: pretty-print everything as JSON into the code viewer. Faithful, and wrong for\n * the common case, because most values inside such a payload are ordinary scalars. A name rendered\n * as `\"Ada\"` in a monospace code block, a flag as `true`, a timestamp as a quoted ISO string: each\n * is the value, and none of them is how that value reads anywhere else in the application.\n *\n * So when the schema cannot say, ask the value — and route a recognisable primitive to the\n * formatter that primitive would have had if it HAD been declared.\n *\n * ## `undefined` is an answer, and the important one\n *\n * An object, an array, `null`, a function, a symbol — anything this cannot name — returns\n * `undefined`, and the caller keeps the JSON rendering. That is the case the mechanism was built\n * for and it is not being taken away; what changes is that scalars stop going through it.\n *\n * ## What is deliberately NOT inferred\n *\n * - **A number is never a date.** `1789903936618` is a plausible epoch and also a plausible id,\n * counter, amount or checksum, and there is nothing in the value to tell them apart. Guessing\n * would silently reformat every large integer in every opaque payload as a date in 2026.\n * - **A numeric STRING stays a string.** `'42'` in a passthrough payload was sent as text by\n * whoever sent it; rendering it through the number formatter would apply grouping and locale\n * decimals to something that may be a code, a zip or a version segment.\n * - **`true`/`false` as strings stay strings**, for the same reason.\n * - **A bare `YYYY-MM-DD` IS taken as a date**, which is the one judgement call here. It is the\n * only shape in the list that something else could plausibly be, and the calendar round-trip\n * above is what keeps it from swallowing near-misses. In payload data this shape is a date\n * essentially always, and the cost of being wrong is a differently-formatted string rather than\n * a lost value.\n *\n * ## A string that CARRIES an object or array is that object, not a string\n *\n * The webhook `payload` named first above reaches the display SERIALIZED — a string whose content\n * is a JSON object — and `typeof` alone reads it as a string. The first version of this function\n * did exactly that, and the one case the mechanism promised to keep was the one it took away: the\n * delivery-log payload rendered as a single raw line in a paragraph, found by\n * `browser-settings-hub-webhooks` step 6 on its first run after this landed (#1411).\n *\n * So a string whose trimmed text opens with `{` or `[` AND parses to an object or array answers\n * `undefined`, and keeps the JSON rendering — which already unwraps a string-wrapped value\n * (`DisplayFieldJson`). The opening-character check keeps the parse off ordinary text, and the parse\n * keeps prose that merely starts with a bracket (\"[draft] …\") a string.\n *\n * ## An author who disagrees has the existing escape hatch\n *\n * `displayComponent` is resolved BEFORE this is consulted, so a field that must always render as\n * JSON says so and never reaches the inference.\n */\n/**\n * Does this string SERIALIZE an object or array? See \"A string that CARRIES an object or array\"\n * on {@link inferFieldSchemaTypeFromValue}. A JSON scalar (`\"42\"`, `\"true\"`) deliberately does not\n * count — those are the numeric and boolean strings that function keeps as strings on purpose.\n */\nfunction carriesJsonStructure(text: string): boolean {\n const trimmed = text.trim();\n const opener = trimmed.charAt(0);\n if (opener !== '{' && opener !== '[') return false;\n try {\n const parsed: unknown = JSON.parse(trimmed);\n return parsed !== null && typeof parsed === 'object';\n } catch {\n return false;\n }\n}\n\nexport function inferFieldSchemaTypeFromValue(value: unknown): FieldSchemaType | undefined {\n if (value instanceof Date) {\n return FieldSchemaType.DATETIME;\n }\n\n switch (typeof value) {\n case 'boolean':\n return FieldSchemaType.BOOLEAN;\n case 'bigint':\n return FieldSchemaType.BIGINT;\n case 'number':\n // Including NaN and the infinities, deliberately: `JSON.stringify(NaN)` is the string\n // `null`, so the JSON path would report a value that is not there. The number formatter\n // renders them as themselves.\n return FieldSchemaType.NUMBER;\n case 'string':\n break;\n default:\n return undefined;\n }\n\n const text = value as string;\n if (carriesJsonStructure(text)) {\n return undefined;\n }\n if (ISO_DATETIME_PATTERN.test(text) && !Number.isNaN(Date.parse(text))) {\n return FieldSchemaType.DATETIME;\n }\n\n const dateParts = ISO_DATE_PATTERN.exec(text);\n if (dateParts && namesARealCalendarDay(Number(dateParts[1]), Number(dateParts[2]), Number(dateParts[3]))) {\n return FieldSchemaType.DATE;\n }\n\n return FieldSchemaType.STRING;\n}\n\n\n// =============================================================================\n// ZOD HELPER GETTER\n// =============================================================================\n\n\n/**\n * Get the type string from a Zod v4 schema's internal structure.\n * Returns undefined if schema is not a valid Zod 4 schema.\n */\nfunction getZodTypeInternal(schema: z.ZodTypeAny): string | undefined {\n if (!schema || typeof schema !== 'object') return undefined;\n\n const zodProp = (schema as any)._zod;\n if (!zodProp || typeof zodProp !== 'object') return undefined;\n\n const def = zodProp.def;\n if (!def || typeof def !== 'object') return undefined;\n\n return typeof def.type === 'string' ? def.type : undefined;\n}\n\n\n/**\n * Get the shape of a Zod object schema.\n *\n * IMPORTANT: This function only returns valid Zod schema instances, not definitions.\n * In Zod 4, `def.shape` contains JSON-serializable definitions, not schema instances\n * with methods like safeParse.\n *\n * Prefer using getObjectShape() which handles unwrapping and validation.\n */\nexport function getZodObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> {\n if (!isZodObject(schema)) {\n return {};\n }\n\n // Use the improved getObjectShape which validates schema instances\n const shape = getObjectShape(schema);\n return shape ?? {};\n}\n\n/**\n * Field shape of an object schema OR a discriminated union, merged across ALL\n * variants. Unlike {@link getZodObjectShape} (which returns `{}` for a union),\n * this walks the union's variant options and merges their shapes, so callers that\n * need the full field set of a polymorphic resource — FK/ObjectId discovery,\n * field-access checks, etc. — see every variant's fields instead of nothing.\n *\n * For a field present in multiple variants the FIRST occurrence wins (variants\n * share the common base fields, so the common shape is identical across them).\n * Returns `{}` for non-object, non-union schemas.\n */\nexport function getMergedObjectOrUnionShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> {\n if (isZodObject(schema)) {\n return getZodObjectShape(schema);\n }\n if (isDiscriminatedUnion(schema)) {\n const options = getZodDefArrayProperty(schema, 'options') as z.ZodTypeAny[] | undefined;\n if (!options) {\n return {};\n }\n const merged: Record<string, z.ZodTypeAny> = {};\n for (const option of options) {\n const optionShape = isZodObject(option) ? getZodObjectShape(option) : {};\n for (const [fieldName, fieldSchema] of Object.entries(optionShape)) {\n if (!(fieldName in merged)) {\n merged[fieldName] = fieldSchema;\n }\n }\n }\n return merged;\n }\n return {};\n}\n\n/**\n * The key a union of OBJECTS is discriminated by — the declared one, or the one a plain `z.union` carries\n * structurally. `undefined` when the schema is not a union, or is a plain union no key discriminates.\n *\n * ## Why a plain union needs an answer\n *\n * `z.discriminatedUnion(key, …)` records its key; `z.union([V1, V2])` does not, even when every member\n * declares the same key as a literal and those literals never collide — which is exactly how a versioned\n * record is written (`schemaVersion: z.literal(1)` / `z.literal(2)`). Such a union IS discriminated; only\n * the spelling differs. Measured 2026-09-14 on the compliance programme's `documentationRequirements`\n * items (`z.union([V1, V2])`): the display resolved no member, so every item rendered an em-dash, and the\n * label walk collected no field inside them, so `governanceScope.subjectKind` could not be worded\n * anywhere (#1022).\n *\n * The real instance is one step less regular than that: V1 predates `schemaVersion` and does not declare it\n * at all, while V2 declares `z.literal(2)`. Both are `z.strictObject`s, so V1 REJECTS any value carrying the\n * key — its absence is as decisive as a literal.\n *\n * ## The inference, and why it cannot guess\n *\n * A key discriminates a plain union only when EVERY option is an object and, for that key:\n *\n * 1. every member either declares it as a bare `z.literal`, or omits it AND is strict (`z.strictObject`,\n * whose catchall is `never`) — a non-strict member that omits the key would also accept a value carrying it;\n * 2. the declared literal values are pairwise DISJOINT across members;\n * 3. at least one member declares it, and at most ONE member omits it.\n *\n * Under those conditions a value selects at most one member — by its literal, or by carrying no value for the\n * key (the one member that omits it) — so resolving by it is exact, the same guarantee\n * `z.discriminatedUnion` enforces at construction. Keys are tried in authoring order across the members, so\n * the answer is deterministic. A union that fails every key answers `undefined`, and callers keep treating\n * it as undiscriminated.\n *\n * One function, so the label walk (`collectResourceLabelFieldEntries`), the application label deciders and\n * the display ({@link resolveDiscriminatedUnionVariant}) agree about which unions have members at all.\n */\nexport function getUnionDiscriminatorKey(schema: z.ZodTypeAny): string | undefined {\n if (!isZodUnion(schema)) return undefined;\n const declared = getZodDefStringProperty(schema, 'discriminator');\n if (declared) return declared;\n\n const options = (getZodDefArrayProperty(schema, 'options') ?? []) as unknown[];\n if (options.length < 2) return undefined;\n if (!options.every((option) => isZodTypeAny(option) && isZodObject(option as z.ZodTypeAny))) return undefined;\n const members = options as z.ZodTypeAny[];\n const memberShapes = members.map((member) => getZodObjectShape(member));\n const candidateKeys = [...new Set(memberShapes.flatMap((shape) => Object.keys(shape)))];\n\n for (const key of candidateKeys) {\n const seenValues = new Set<unknown>();\n let declaringMembers = 0;\n let omittingMembers = 0;\n const discriminates = memberShapes.every((shape, index) => {\n const keySchema = shape[key] as z.ZodTypeAny | undefined;\n if (!keySchema) {\n omittingMembers += 1;\n return omittingMembers <= 1 && isStrictZodObject(members[index]);\n }\n if (!isZodLiteral(keySchema)) return false;\n const literalValues = getZodDefArrayProperty(keySchema, 'values') ?? [];\n if (literalValues.length === 0 || literalValues.some((literalValue) => seenValues.has(literalValue))) return false;\n for (const literalValue of literalValues) seenValues.add(literalValue);\n declaringMembers += 1;\n return true;\n });\n if (discriminates && declaringMembers > 0) return key;\n }\n return undefined;\n}\n\n/** A `z.strictObject` — its catchall is `never`, so it rejects every key its shape does not declare. */\nfunction isStrictZodObject(schema: z.ZodTypeAny): boolean {\n const catchall = getZodDefSchemaProperty(schema, 'catchall');\n return catchall !== undefined && getZodType(catchall) === 'never';\n}\n\n/**\n * The OBJECT members of a union that {@link getUnionDiscriminatorKey} discriminates — declared or plain —\n * in authoring order; `[]` for anything else. Pass the UNWRAPPED schema.\n *\n * For a declared discriminated union the non-object options are filtered out, as\n * `AutomatedLayoutFrontendUtils.getDiscriminatedUnionObjectOptions` does; a plain union has none (the\n * inference requires every option to be an object).\n */\nexport function getUnionObjectMembers(schema: z.ZodTypeAny): z.ZodObject<any>[] {\n if (!getUnionDiscriminatorKey(schema)) return [];\n const options = (getZodDefArrayProperty(schema, 'options') ?? []) as z.ZodTypeAny[];\n return options.filter((option): option is z.ZodObject<any> => isZodTypeAny(option) && isZodObject(option));\n}\n\n/**\n * Resolve the ONE variant of a discriminated union that a given value belongs to.\n *\n * Distinct from {@link getMergedObjectOrUnionShape}, and the difference is the point: merging every\n * variant answers \"what fields COULD this union carry\", which is what a schema-only caller (a\n * validator, a drift check) needs. A caller holding a VALUE can do better — the discriminator says\n * which variant this is, so the shape can be exactly that variant's, with no fields belonging to\n * the alternatives the value did not choose.\n *\n * The discriminator is {@link getUnionDiscriminatorKey}'s: declared, or carried structurally by a plain\n * `z.union` (#1022 — a versioned record's items). For such a plain union a value carrying NO discriminator\n * belongs to the one strict member that omits the key, when there is one; for a declared discriminated union\n * it belongs to none.\n *\n * Returns `null` when the schema is not a discriminated union, when the value carries no\n * discriminator its union can place, or when no variant matches it — all three are \"this caller cannot\n * narrow\", and a caller that renders should say nothing rather than guess a variant.\n */\nexport function resolveDiscriminatedUnionVariant(\n schema: z.ZodTypeAny,\n value: unknown,\n): z.ZodTypeAny | null {\n if (typeof value !== 'object' || value === null) return null;\n\n const discriminator = getUnionDiscriminatorKey(schema);\n if (!discriminator) return null;\n\n const discriminatorValue = (value as Record<string, unknown>)[discriminator];\n const options = (getZodDefArrayProperty(schema, 'options') ?? []) as z.ZodTypeAny[];\n if (discriminatorValue === undefined) {\n if (getZodDefStringProperty(schema, 'discriminator')) return null;\n return options.find((option) => isZodObject(option) && getZodObjectShape(option)[discriminator] === undefined) ?? null;\n }\n\n for (const option of options) {\n if (!isZodObject(option)) continue;\n const optionShape = getZodObjectShape(option);\n const discriminatorSchema = optionShape[discriminator];\n if (!discriminatorSchema) continue;\n /*\n * A variant's discriminator is a LITERAL (`z.literal(ICPArchetype.LEGAL_ENTITY)`), whose value\n * Zod 4 stores as an array under `values` — the same shape `getEnumValues` reads for the\n * literal case. Comparing against that is what makes the match exact rather than structural.\n */\n const literalValues = getZodDefArrayProperty(discriminatorSchema, 'values') ?? [];\n if (literalValues.includes(discriminatorValue)) return option;\n }\n return null;\n}\n\nexport function getZodDef(schema: z.ZodTypeAny): { type: string; [key: string]: unknown } | undefined {\n if (!hasZodInternals(schema)) return undefined;\n\n // First check legacy structure: schema._zod.def\n if ('_zod' in schema) {\n const zodProp = (schema as unknown as Record<string, unknown>)._zod;\n if (typeof zodProp === 'object' && zodProp !== null && 'def' in zodProp) {\n return (zodProp as { def: { type: string; [key: string]: unknown } }).def;\n }\n }\n\n // Use current structure: schema.def directly\n return (schema as unknown as { def: { type: string; [key: string]: unknown } }).def;\n}\n\nexport function getZodDefSchemaProperty(schema: z.ZodTypeAny, property: string): z.ZodTypeAny | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return isZodTypeAny(value) ? value : undefined;\n}\n\nexport function getZodDefArrayProperty(schema: z.ZodTypeAny, property: string): unknown[] | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return isArray(value) ? value : undefined;\n}\n\n/**\n * The payload of one entry of a schema's `checks` array.\n *\n * A CHECK IS ITSELF A ZOD INTERNAL, which is the whole reason this helper exists. Its own fields\n * live at `check._zod.def`, not on the check object, and they are keyed by a `check` discriminator\n * (`min_length`, `greater_than`, `string_format`, …) rather than by the Zod 3 `kind` property.\n *\n * Three readers in this file — {@link getStringFormat}, {@link getStringConstraints} and\n * {@link getNumberConstraints} — walked `checks` and read `check.kind`, which is `undefined` for\n * every check Zod 4 produces. None of them threw; each returned an empty answer, so a string with\n * `.max(120)` reported no maximum, a number with `.min(1)` reported no minimum, and `z.email()`\n * reported no format. Every consumer degraded silently: an `<input>` with no `maxLength`, no `min`,\n * and `type=\"text\"` where `type=\"email\"` was intended.\n */\nfunction getZodCheckDefinition(check: unknown): Record<string, unknown> | undefined {\n if (typeof check !== 'object' || check === null) return undefined;\n const internals = (check as { _zod?: unknown })._zod;\n if (typeof internals === 'object' && internals !== null && 'def' in internals) {\n const definition = (internals as { def: unknown }).def;\n if (typeof definition === 'object' && definition !== null) return definition as Record<string, unknown>;\n }\n // A check authored as a plain object (or a future Zod shape that flattens the payload) is read\n // directly rather than skipped — the discriminator lookup below tolerates a miss.\n return check as Record<string, unknown>;\n}\n\nexport function getZodDefStringProperty(schema: z.ZodTypeAny, property: string): string | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport function getZodDefFunctionProperty(schema: z.ZodTypeAny, property: string): (() => z.ZodTypeAny) | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n if (typeof value === 'function') {\n return value as () => z.ZodTypeAny;\n }\n return undefined;\n}\n\nexport function getZodDefProperty(schema: z.ZodTypeAny, property: string): unknown {\n const def = getZodDef(schema);\n return def?.[property];\n}\n\n/**\n * Get the inner schema from a pipe type (for transforms/refinements)\n * In Zod v4, pipe types have def.in and def.out\n * For most cases, we want def.in (the input schema before transformation)\n */\nexport function getPipeInputSchema(schema: z.ZodTypeAny): z.ZodTypeAny | undefined {\n if (!isZodPipe(schema)) return undefined;\n return getZodDefSchemaProperty(schema, 'in');\n}\n\n\n\n/**\n * Get all custom field metadata from a schema, traversing through wrapper types\n * (optional, nullable, default, pipe, readonly, catch, array, effects).\n * Always returns an object (never undefined) — empty `{}` if no metadata found.\n *\n * Delegates to the unified getMetadataRecursive from zod.module-override.ts.\n */\nexport function getCustomFieldMetadata(schema: z.ZodTypeAny): CustomFieldMetadata {\n if (!schema) {\n return {};\n }\n return getMetadataRecursive(schema) ?? {};\n}\n\n\n// =============================================================================\n// GENERIC {primitive}UI CROSS-CUTTING READERS\n// =============================================================================\n\n/**\n * All `*_UI` decorator keys. Used by cross-cutting readers to extract\n * base params (`edit`, `display`) from whichever primitive UI decorator\n * is present on a schema, without needing to know the concrete primitive.\n */\nconst UI_DECORATOR_KEYS = [\n ZodDecorator.BOOLEAN_UI, ZodDecorator.STRING_UI, ZodDecorator.NUMBER_UI,\n ZodDecorator.ENUM_UI, ZodDecorator.DATE_UI, ZodDecorator.DATETIME_UI,\n ZodDecorator.TIME_UI, ZodDecorator.MONEY_UI, ZodDecorator.CODE_UI,\n ZodDecorator.FILE_UI, ZodDecorator.DURATION_UI, ZodDecorator.PHONE_UI,\n ZodDecorator.BIGDECIMAL_UI, ZodDecorator.FOREIGN_KEY_UI,\n ZodDecorator.ARRAY_UI, ZodDecorator.OBJECT_UI,\n] as const;\n\n/**\n * Extract the edit-context base params from whichever `{primitive}UI` decorator\n * is present on the schema. Works generically because all `*UIEditParams`\n * extend `PrimitiveUIBaseEditParams`.\n *\n * Use this for cross-cutting concerns (validationMode, autosave, tooltip, etc.)\n * where the consumer doesn't know the concrete primitive type.\n */\nexport function getFieldUIEditConfig(schema: z.ZodTypeAny): PrimitiveUIBaseEditParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && 'edit' in params) {\n return (params as PrimitiveUIBaseParams).edit;\n }\n }\n return undefined;\n}\n\n/**\n * Extract the display-context base params from whichever `{primitive}UI` decorator\n * is present on the schema. Works generically because all `*UIDisplayParams`\n * extend `PrimitiveUIBaseDisplayParams`.\n *\n * Use this for cross-cutting concerns (tooltip, inlineEditable, etc.)\n * where the consumer doesn't know the concrete primitive type.\n */\nexport function getFieldUIDisplayConfig(schema: z.ZodTypeAny): PrimitiveUIBaseDisplayParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && 'display' in params) {\n return (params as PrimitiveUIBaseParams).display;\n }\n }\n return undefined;\n}\n\n/**\n * Display-context base params resolved for the SUMMARY context (cards, list\n * items, FK reference previews): `summaryOverride` merged over `display`,\n * key-by-key. A field with no `summaryOverride` behaves exactly as in the\n * regular display context.\n *\n * Summary renderers (the `ResourceSummaryDisplayer` pipeline) call this instead\n * of {@link getFieldUIDisplayConfig}; everything else keeps reading the plain\n * display params. The same merge convention applies to the primitive-specific\n * params (`getEnumUI(s)` consumers merge `{...ui.display, ...ui.summaryOverride}`\n * when rendering a summary surface).\n */\nexport function getFieldUISummaryDisplayConfig(schema: z.ZodTypeAny): PrimitiveUIBaseDisplayParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && ('display' in params || 'summaryOverride' in params)) {\n const typed = params as PrimitiveUIBaseParams;\n if (!typed.display && !typed.summaryOverride) return undefined;\n return { ...typed.display, ...typed.summaryOverride };\n }\n }\n return undefined;\n}\n\n// =============================================================================\n// TOOLTIP DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Check if a field should show a tooltip in display mode.\n * Reads from `{primitive}UI.display.tooltip` (boolean flag).\n * The actual tooltip text comes from the i18n label system, NOT from the decorator.\n */\nexport function hasTooltipForDisplay(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.tooltip === true;\n}\n\n/**\n * Check if a field should show a tooltip in edit mode.\n * Reads from `{primitive}UI.edit.tooltip` (boolean flag).\n * The actual tooltip text comes from the i18n label system, NOT from the decorator.\n */\nexport function hasTooltipForEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIEditConfig(schema)?.tooltip === true;\n}\n\n\n/**\n * Check if a field is marked as draft-relaxed (validation is relaxed in draft mode).\n *\n * @param schema - Zod schema to check\n * @returns true if the field is draft-relaxed\n *\n * @example\n * if (isDraftRelaxed(schema) && isDraftMode) {\n * // Skip strict validation for this field\n * }\n */\nexport function isDraftRelaxed(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_DRAFT_RELAXED] === true;\n}\n\n\n/**\n * FIX-P5-H1: Get showWhen parameters from a field schema.\n * Returns the conditional visibility configuration if present.\n *\n * @param schema - The field schema to get showWhen params from\n * @returns ShowWhenParams if decorator was applied, undefined otherwise\n *\n * @example\n * const showWhenParams = getShowWhenParams(fieldSchema);\n * if (showWhenParams) {\n * // Evaluate visibility based on conditions\n * const isVisible = evaluateShowWhenConditions(showWhenParams, formValues);\n * }\n */\nexport function getShowWhenParams(schema: z.ZodTypeAny): ShowWhenParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.SHOW_WHEN] as ShowWhenParams | undefined;\n}\n\n\n// =============================================================================\n// Enhanced Primitive Helpers\n// =============================================================================\n\n\n// ------------------------------------------------------------\n// STRING SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n\n/**\n * Keep the TIGHTER of two bounds a schema declares, so several constraints compose the way the\n * validator composes them: every lower bound must be cleared, so the highest governs, and every\n * upper bound must be respected, so the lowest does.\n *\n * `undefined` means \"nothing declared yet\" and always loses, which is what makes these safe to fold\n * over a checks array in any order.\n */\nfunction tightestLowerBound(current: number | undefined, candidate: number): number {\n return current === undefined ? candidate : Math.max(current, candidate);\n}\n\nfunction tightestUpperBound(current: number | undefined, candidate: number): number {\n return current === undefined ? candidate : Math.min(current, candidate);\n}\n\n/**\n * String format types detected from schema\n */\nexport type StringFormat = 'email' | 'url' | 'uuid' | 'cuid' | 'cuid2' | 'ulid' | 'regex' | 'datetime' | 'time' | 'ip' | null;\n\n\n/**\n * The format a string schema declares — `email`, `url`, `datetime`, … — or `null` for a plain one.\n *\n * Zod 4 expresses a format TWO ways and both are read here, because an author picks between them\n * freely and the rendered field must not depend on which they chose:\n *\n * - a dedicated schema type (`z.email()`, `z.iso.datetime()`) carries `def.format` and no checks;\n * - a chained refinement (`z.string().email()`) carries a `string_format` CHECK whose own\n * definition names the format.\n *\n * `ipv4` and `ipv6` both answer `'ip'`: this vocabulary exists to choose an input type and a\n * display treatment, and those are the same for either family.\n */\nexport function getStringFormat(schema: z.ZodTypeAny): StringFormat {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'string') {\n return null;\n }\n\n const declared = getZodDefStringProperty(unwrapped, 'format');\n const fromDeclaration = normalizeStringFormat(declared);\n if (fromDeclaration) return fromDeclaration;\n\n for (const check of getZodDefArrayProperty(unwrapped, 'checks') ?? []) {\n const definition = getZodCheckDefinition(check);\n if (definition?.check !== 'string_format') continue;\n const fromCheck = normalizeStringFormat(definition.format);\n if (fromCheck) return fromCheck;\n }\n\n return null;\n}\n\n/**\n * Zod's format name → this vocabulary. Unknown names answer `null` rather than being passed\n * through, because every consumer switches on {@link StringFormat} and an unrecognised value would\n * fall to a default anyway — but as a widened type, which is how a format nobody handles ends up\n * silently typed as one that is handled.\n */\nfunction normalizeStringFormat(value: unknown): StringFormat {\n switch (value) {\n case 'email': return 'email';\n case 'url': return 'url';\n case 'uuid': return 'uuid';\n case 'cuid': return 'cuid';\n case 'cuid2': return 'cuid2';\n case 'ulid': return 'ulid';\n case 'regex': return 'regex';\n case 'datetime': return 'datetime';\n case 'time': return 'time';\n // Both IP families answer the same thing — see the note on `getStringFormat`.\n case 'ip':\n case 'ipv4':\n case 'ipv6': return 'ip';\n default: return null;\n }\n}\n\n/**\n * Get min/max length constraints from string schema\n */\nexport function getStringConstraints(schema: z.ZodTypeAny): { minLength?: number; maxLength?: number } {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'string') {\n return {};\n }\n\n const result: { minLength?: number; maxLength?: number } = {};\n\n // Zod 4 keys these by a `check` discriminator and names the bound after the constraint\n // (`minimum` / `maximum` / `length`), where Zod 3 used `kind` plus a shared `value`.\n //\n // Bounds ACCUMULATE toward the tightest rather than being assigned, because a schema may carry\n // several and the last one authored is not the one that governs. `z.string().min(3).nonempty()`\n // is ordinary authoring — a business floor plus a sanity floor — and assigning would report\n // `minLength: 1` for a schema that rejects `\"ab\"`. The same reasoning the truncation and the\n // exclusive-bound branches already follow: a hint looser than the schema invites a value the\n // server refuses, which is worse than no hint at all.\n for (const check of getZodDefArrayProperty(unwrapped, 'checks') ?? []) {\n const definition = getZodCheckDefinition(check);\n if (!definition) continue;\n const minimum = definition.minimum;\n const maximum = definition.maximum;\n const exactLength = definition.length;\n\n if (definition.check === 'min_length' && typeof minimum === 'number') {\n result.minLength = tightestLowerBound(result.minLength, minimum);\n }\n if (definition.check === 'max_length' && typeof maximum === 'number') {\n result.maxLength = tightestUpperBound(result.maxLength, maximum);\n }\n if (definition.check === 'length_equals' && typeof exactLength === 'number') {\n result.minLength = tightestLowerBound(result.minLength, exactLength);\n result.maxLength = tightestUpperBound(result.maxLength, exactLength);\n }\n }\n\n return result;\n}\n\n\n// ------------------------------------------------------------\n// NUMBER SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get min/max value constraints from number schema\n */\nexport function getNumberConstraints(schema: z.ZodTypeAny): {\n min?: number;\n max?: number;\n step?: number;\n isInt?: boolean;\n} {\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n if (type !== 'number' && type !== 'int') {\n return {};\n }\n\n const result: { min?: number; max?: number; step?: number; isInt?: boolean } = {};\n\n if (type === 'int') {\n result.isInt = true;\n result.step = 1;\n }\n\n // Zod 4 names a bound by DIRECTION rather than by role — `greater_than` / `less_than`, each\n // carrying an `inclusive` flag — where Zod 3 had `min` / `max`. Integer-ness is a `number_format`\n // check (`z.number().int()`) or the schema type itself (`z.int()`), never a `kind: 'int'`.\n //\n // Read INTEGER-NESS FIRST, in its own pass, because an exclusive bound cannot be translated\n // without knowing it — see below.\n //\n // It arrives the same TWO ways a string format does, and both must be read: `z.number().int()`\n // adds a `number_format` CHECK, while `z.int()` is its own schema type carrying `def.format` and\n // no checks at all. Reading only the check left `z.int()` — the shorter and more idiomatic\n // spelling — reporting no integer constraint and therefore no step.\n const declaredNumberFormat = getZodDefStringProperty(unwrapped, 'format');\n if (typeof declaredNumberFormat === 'string' && declaredNumberFormat.includes('int')) {\n result.isInt = true;\n result.step = 1;\n }\n\n const checks = getZodDefArrayProperty(unwrapped, 'checks') ?? [];\n for (const check of checks) {\n const definition = getZodCheckDefinition(check);\n if (definition?.check === 'number_format' && typeof definition.format === 'string' && definition.format.includes('int')) {\n result.isInt = true;\n result.step = 1;\n }\n }\n\n for (const check of checks) {\n const definition = getZodCheckDefinition(check);\n if (!definition) continue;\n const value = definition.value;\n if (typeof value !== 'number') continue;\n const inclusive = definition.inclusive === true;\n\n if (definition.check === 'greater_than') {\n // An EXCLUSIVE bound has no HTML equivalent: `min` is inclusive, so writing the raw value\n // would ADMIT a number the schema rejects — `z.number().positive()` becoming `min=\"0\"` and\n // accepting zero. On an integer the next representable value is exact, so it translates; on a\n // float there is no honest answer and the constraint is left unstated rather than stated\n // wrongly. A field with no hint still validates; a field with a wrong hint invites a value\n // the server refuses.\n //\n // And for the same reason the result ACCUMULATES toward the tightest bound instead of being\n // assigned: `z.number().int().min(5).positive()` carries two lower bounds, and taking the\n // last would report `min: 1` for a schema that rejects 1 through 4.\n if (inclusive) result.min = tightestLowerBound(result.min, value);\n else if (result.isInt) result.min = tightestLowerBound(result.min, value + 1);\n }\n if (definition.check === 'less_than') {\n if (inclusive) result.max = tightestUpperBound(result.max, value);\n else if (result.isInt) result.max = tightestUpperBound(result.max, value - 1);\n }\n if (definition.check === 'multiple_of') {\n result.step = value;\n }\n }\n\n return result;\n}\n\n// ------------------------------------------------------------\n// ENUM SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Extract enum values from z.enum (Zod 4)\n * In Zod 4, both z.enum() and z.enum() create schemas with type 'enum'\n * - z.enum(['a', 'b', 'c']) - def.entries is an object map (e.g. { a: 'a', b: 'b' })\n * - z.enum(TypeScriptEnum) / z.enum(TypeScriptEnum) - def.entries is the enum object map\n */\nexport function getEnumValues(schema: z.ZodTypeAny): string[] {\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n // A string literal is a vocabulary — usually of one value (`z.literal('value')`), and in Zod 4\n // legitimately of several (`z.literal(['a', 'b'])`), which stores every value in `def.values`.\n // EVERY string value is the vocabulary: reading only `values[0]` planned and worded one value of a\n // multi-value discriminator and rendered every other member's row raw (#1096). Non-string literals\n // (numbers, booleans, null) are not select-field vocabularies and contribute nothing.\n if (type === 'literal') {\n const values = (getZodDefProperty(unwrapped, 'values') as unknown[] | undefined) ?? [];\n return values.filter((value): value is string => typeof value === 'string');\n }\n\n // Handle union types - combine enum values from all options\n // This handles cases like z.union([z.enum(A), z.enum(B)])\n if (type === 'union') {\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n const allValues: string[] = [];\n const seenValues = new Set<string>();\n\n for (const opt of options) {\n if (isZodTypeAny(opt)) {\n const optValues = getEnumValues(opt as z.ZodTypeAny);\n for (const val of optValues) {\n if (!seenValues.has(val)) {\n seenValues.add(val);\n allValues.push(val);\n }\n }\n }\n }\n\n return allValues;\n }\n\n if (type !== 'enum') {\n return [];\n }\n\n // In Zod v4.1.x, enum values are stored in def.entries (object map).\n const entries = getZodDefProperty(unwrapped, 'entries');\n if (!entries || typeof entries !== 'object') return [];\n\n const values: string[] = [];\n for (const key of Object.keys(entries as Record<string, unknown>)) {\n const value = (entries as Record<string, unknown>)[key];\n // For numeric enums, TypeScript creates reverse mappings: entries[\"0\"] = \"A\", entries[\"A\"] = 0\n if (typeof value === 'string') {\n // Skip reverse mapping values where key is numeric (e.g., \"0\" -> \"A\")\n if (!Number.isNaN(Number(key))) continue;\n values.push(value);\n } else if (typeof value === 'number') {\n values.push(String(value));\n }\n }\n return values;\n}\n\n\n// ------------------------------------------------------------\n// OBJECT SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Validates that an object contains actual Zod schema instances (not definitions).\n * A valid Zod 4 schema instance has either:\n * - _zod property (internal structure)\n * - safeParse method (public API)\n */\nfunction isValidSchemaShape(shape: Record<string, unknown>): shape is Record<string, z.ZodTypeAny> {\n // Skip $-prefixed keys (Zod v4 internals like $id, $brand) when picking\n // the representative entry to validate — their values are primitives, not schemas.\n const keys = Object.keys(shape);\n const firstUserKey = keys.find(k => !k.startsWith('$'));\n if (!firstUserKey) return keys.length === 0; // Only internal keys or empty → valid if empty\n\n const firstValue = shape[firstUserKey];\n if (!firstValue || typeof firstValue !== 'object') return false;\n\n const hasZodInternals = '_zod' in firstValue;\n const hasSafeParse = 'safeParse' in firstValue && typeof (firstValue as Record<string, unknown>).safeParse === 'function';\n\n return hasZodInternals || hasSafeParse;\n}\n\ndeclare const console: { warn(...args: unknown[]): void };\n\n/**\n * Strips Zod v4 internal properties (e.g. $id, $brand) from a shape record.\n * These are runtime metadata, not user-defined fields, and leak into\n * Object.entries() when iterating the raw .shape object.\n *\n * Uses warn-once to avoid log flooding (same pattern as _warnedStorageProviders in zod-file.ts).\n * This is a low-level shared lib used by both frontend and backend — console.warn\n * is the only available logging primitive here (no injected logger).\n */\nconst _warnedInternalKeys = new Set<string>();\n\nfunction stripZodInternalKeys(shape: Record<string, z.ZodTypeAny>): Record<string, z.ZodTypeAny> {\n const keys = Object.keys(shape);\n const internalKeys = keys.filter(k => k.startsWith('$'));\n if (internalKeys.length === 0) return shape;\n\n const warnKey = internalKeys.sort().join(',');\n if (!_warnedInternalKeys.has(warnKey)) {\n _warnedInternalKeys.add(warnKey);\n console.warn(\n `[getObjectShape] Stripping Zod internal keys from shape: [${internalKeys.join(', ')}]. ` +\n `If a legitimate user-defined field starts with '$', this filter is incorrect. ` +\n `Stripped keys had values: ${internalKeys.map(k => `${k}=${typeof shape[k] === 'object' ? 'object' : shape[k]}`).join(', ')}`\n );\n }\n\n const clean: Record<string, z.ZodTypeAny> = {};\n for (const k of keys) {\n if (!k.startsWith('$')) clean[k] = shape[k];\n }\n return clean;\n}\n\n/**\n * Get the shape of an object schema.\n *\n * IMPORTANT: In Zod 4, `def.shape` contains schema DEFINITIONS (JSON-serializable),\n * NOT schema instances with methods. This function validates that returned shapes\n * contain actual Zod schema instances.\n *\n * If the schema is wrapped (e.g., with .default()), it will be unwrapped first.\n */\n/**\n * Resolve ONE field's declared schema from an object-like root, seeing through a discriminated\n * union.\n *\n * `getObjectShape()` deliberately returns `null` for a union, which is correct for its own contract\n * but useless to a caller that only needs to ask a question about a single named field. Polymorphic\n * resources (`createSchemaFamily` output) present exactly that shape, so a caller using\n * `getObjectShape()` alone silently answers \"field unknown\" for every field of every polymorphic\n * resource — the failure mode that once left polymorphic form fields unlabelled.\n *\n * Union handling returns the FIRST variant that declares the name. Variants of one resource family\n * share a field's declaration for any field they have in common, so the first match is\n * representative; a caller needing per-variant precision must narrow the union itself first.\n *\n * @param schema - object, or discriminated union of objects (wrappers are unwrapped).\n * @param fieldName - top-level field name.\n * @returns the field's declared schema, or `undefined` when no variant declares it.\n */\nexport function getObjectLikeFieldSchema(schema: z.ZodTypeAny, fieldName: string): z.ZodTypeAny | undefined {\n const directShape = getObjectShape(schema);\n if (directShape) return directShape[fieldName];\n\n const unwrapped = unwrapSchema(schema);\n if (!isZodUnion(unwrapped)) return undefined;\n\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n for (const option of options) {\n const optionShape = getObjectShape(option as z.ZodTypeAny);\n const fieldSchema = optionShape?.[fieldName];\n if (fieldSchema) return fieldSchema;\n }\n\n return undefined;\n}\n\nexport function getObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'object') {\n return null;\n }\n\n // Try public .shape property - this should contain actual schema instances\n if ('shape' in unwrapped && typeof unwrapped.shape === 'object' && unwrapped.shape !== null) {\n const shape = unwrapped.shape as Record<string, unknown>;\n\n // Validate that the shape contains actual Zod schemas, not definitions\n if (isValidSchemaShape(shape)) {\n return stripZodInternalKeys(shape as Record<string, z.ZodTypeAny>);\n }\n // Shape exists but contains corrupted definitions - will be caught by fail-fast below\n }\n\n // Try accessing shape through _zod internals (Zod 4 structure)\n // In some Zod 4 versions, _zod.def.shape might still contain actual schema instances\n if ('_zod' in unwrapped) {\n const zodInternals = (unwrapped as unknown as { _zod: { def?: { shape?: Record<string, unknown> } } })._zod;\n if (zodInternals?.def?.shape && typeof zodInternals.def.shape === 'object') {\n const shape = zodInternals.def.shape;\n\n // Validate that it contains actual schema instances\n if (isValidSchemaShape(shape)) {\n return stripZodInternalKeys(shape as Record<string, z.ZodTypeAny>);\n }\n }\n }\n\n // FAIL-FAST: Do NOT return corrupted schemas silently\n // Throw with diagnostic info to identify the corruption source\n if ('shape' in unwrapped && typeof unwrapped.shape === 'object' && unwrapped.shape !== null) {\n const shape = unwrapped.shape as Record<string, unknown>;\n const firstKey = Object.keys(shape)[0];\n const firstValue = shape[firstKey];\n const firstValueKeys = firstValue && typeof firstValue === 'object'\n ? Object.keys(firstValue as object).slice(0, 10).join(', ')\n : 'N/A';\n\n throw new Error(\n `[getObjectShape] Schema shape contains corrupted objects (not valid Zod schemas). ` +\n `First field \"${firstKey}\" is missing safeParse method. ` +\n `Keys on corrupted object: [${firstValueKeys}]. ` +\n `This usually means the schema was JSON.stringify/parsed or incorrectly cloned.`\n );\n }\n\n // Also check _zod.def.shape - same fail-fast approach\n if ('_zod' in unwrapped) {\n const zodInternals = (unwrapped as unknown as { _zod: { def?: { shape?: Record<string, unknown> } } })._zod;\n if (zodInternals?.def?.shape && typeof zodInternals.def.shape === 'object') {\n const shape = zodInternals.def.shape;\n const firstKey = Object.keys(shape)[0];\n const firstValue = shape[firstKey];\n const firstValueKeys = firstValue && typeof firstValue === 'object'\n ? Object.keys(firstValue as object).slice(0, 10).join(', ')\n : 'N/A';\n\n throw new Error(\n `[getObjectShape] _zod.def.shape contains corrupted objects (not valid Zod schemas). ` +\n `First field \"${firstKey}\" is missing safeParse. ` +\n `Keys: [${firstValueKeys}]. ` +\n `This usually means the schema was JSON.stringify/parsed or incorrectly cloned.`\n );\n }\n }\n\n return null;\n}\n\n/**\n * Get the keys of an object schema shape\n */\nexport function getObjectKeys(schema: z.ZodTypeAny): string[] {\n const shape = getObjectShape(schema);\n return shape ? Object.keys(shape) : [];\n}\n\n/**\n * Extract all flattened paths from a Zod schema.\n * Recursively traverses object schemas to build dot-notation paths (e.g., 'field.nestedField').\n * Handles optional, nullable, array, and union types.\n *\n * @param zodSchema - The Zod schema to extract paths from\n * @param prefix - Current path prefix (used for recursion)\n * @param schemaDepthCounters - Map to track depth per schema instance (prevents infinite recursion)\n * @param maxDepthPerSchema - Maximum depth to traverse per schema instance (default: 3)\n * @returns Array of flattened dot-notation paths\n */\nexport function extractFlattenedPathsFromZodSchema(\n zodSchema: z.ZodTypeAny,\n prefix: string = '',\n schemaDepthCounters: Map<any, number> = new Map(),\n maxDepthPerSchema: number = 3\n): string[] {\n const paths: string[] = [];\n\n if (!zodSchema) {\n return paths;\n }\n\n // Check depth for this specific schema instance to prevent infinite recursion\n const currentDepth = schemaDepthCounters.get(zodSchema) || 0;\n if (currentDepth >= maxDepthPerSchema) {\n return paths;\n }\n\n // Increment depth counter for this schema\n schemaDepthCounters.set(zodSchema, currentDepth + 1);\n\n try {\n const zodType = getZodType(zodSchema);\n\n switch (zodType) {\n case 'object': {\n // Extract shape from zod object using public API\n const shape = getZodObjectShape(zodSchema);\n\n Object.entries(shape).forEach(([fieldName, fieldSchema]) => {\n const currentPath = prefix ? `${prefix}.${fieldName}` : fieldName;\n\n // Add the current path\n paths.push(currentPath);\n\n // Recursively process nested objects\n const nestedPaths = extractFlattenedPathsFromZodSchema(\n fieldSchema as z.ZodTypeAny,\n currentPath,\n new Map(schemaDepthCounters) // Pass a copy to avoid shared state issues\n );\n paths.push(...nestedPaths);\n });\n break;\n }\n\n case 'optional': {\n // Process the inner type for optional fields\n const innerType = getZodDefSchemaProperty(zodSchema, 'innerType');\n if (innerType) {\n const innerPaths = extractFlattenedPathsFromZodSchema(\n innerType,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...innerPaths);\n }\n break;\n }\n\n case 'nullable': {\n // Process the inner type for nullable fields\n const innerType = getZodDefSchemaProperty(zodSchema, 'innerType');\n if (innerType) {\n const innerPaths = extractFlattenedPathsFromZodSchema(\n innerType,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...innerPaths);\n }\n break;\n }\n\n case 'array': {\n // For arrays, extract paths from the element type\n // This allows finding nested fields in array elements (e.g., \"items.organizationId\")\n const element = getZodDefSchemaProperty(zodSchema, 'element');\n if (element) {\n const elementPaths = extractFlattenedPathsFromZodSchema(\n element,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...elementPaths);\n }\n break;\n }\n\n case 'union': {\n // For unions, try to extract paths from all possible schemas\n const options = getZodDefArrayProperty(zodSchema, 'options') || [];\n options.forEach((option: unknown) => {\n if (option && typeof option === 'object' && hasZodInternals(option)) {\n const unionPaths = extractFlattenedPathsFromZodSchema(\n option as unknown as z.ZodTypeAny,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...unionPaths);\n }\n });\n break;\n }\n\n default: {\n // For primitive types (string, number, boolean, etc.), no nested paths\n break;\n }\n }\n } catch (error) {\n // Silently handle errors - return paths collected so far\n }\n\n // Decrement depth counter when done processing this schema\n schemaDepthCounters.set(zodSchema, currentDepth);\n return paths;\n}\n\n// ------------------------------------------------------------\n// ARRAY SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the item schema from an array schema\n */\nexport function getArrayItemSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'array') {\n return null;\n }\n\n const element = getZodDefSchemaProperty(unwrapped, 'element');\n return element ?? null;\n}\n\n/**\n * How many items an array schema admits — `z.array(x).min(1).max(3)`.\n *\n * READS ZOD 4, and did not until 2026-09-20: it looked for `def.minLength` / `def.maxLength`\n * carrying a `{ value }` object, which is the ZOD 3 shape. Zod 4 puts array bounds in `def.checks`\n * under a `check` discriminator (`min_length` / `max_length` / `length_equals`) with the bound\n * named after the constraint, exactly as the string reader above already handles. So this returned\n * `{}` for every array ever declared — measured, all three of `.min(1).max(2)`, `.max(1)` and no\n * bound at all answered the same thing.\n *\n * The cost was silent and total: an author could write `.max(3)` on a multi-select and get no\n * limit, no disabled options and no hint, with the only enforcement left at submit — and the one\n * control that read this looked, in its source, exactly like a control that honoured it.\n *\n * Bounds ACCUMULATE toward the tightest, for the same reason the string reader states: a schema\n * may carry several (`.min(1).nonempty()` is ordinary authoring) and the last one authored is not\n * the one that governs. A hint looser than the schema invites a value the server refuses, which is\n * worse than no hint at all.\n */\nexport function getArrayConstraints(schema: z.ZodTypeAny): { minLength?: number; maxLength?: number } {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'array') {\n return {};\n }\n\n const result: { minLength?: number; maxLength?: number } = {};\n\n for (const check of getZodDefArrayProperty(unwrapped, 'checks') ?? []) {\n const definition = getZodCheckDefinition(check);\n if (!definition) continue;\n const minimum = definition.minimum;\n const maximum = definition.maximum;\n const exactLength = definition.length;\n\n if (definition.check === 'min_length' && typeof minimum === 'number') {\n result.minLength = tightestLowerBound(result.minLength, minimum);\n }\n if (definition.check === 'max_length' && typeof maximum === 'number') {\n result.maxLength = tightestUpperBound(result.maxLength, maximum);\n }\n if (definition.check === 'length_equals' && typeof exactLength === 'number') {\n result.minLength = tightestLowerBound(result.minLength, exactLength);\n result.maxLength = tightestUpperBound(result.maxLength, exactLength);\n }\n }\n\n return result;\n}\n\n// ------------------------------------------------------------\n// RECORD/MAP SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the value schema from a record schema.\n *\n * A record's keys are DATA rather than declared fields, so it has no `shape` and\n * {@link getObjectShape} correctly answers `null` for one. What a consumer still needs is the\n * single schema every entry's value shares — enough to render each entry through the ordinary\n * field dispatch instead of as raw text.\n *\n * That is not hypothetical: `FieldSchemaType.RECORD` had no display branch at all until\n * 2026-09-18, so a record field fell through `DisplayValueDispatcher` to its \"unsupported type\"\n * chip and rendered an ERROR over data that was fully present — measured on four settings panes\n * (an organization's `Limits` and `Limit overrides`, and SSO's `Domain verification status` on\n * both the organization and application surfaces). This function existed the whole time; the\n * display simply never called it.\n *\n * Unwraps first, so an `.optional()` / `.default()` / `.nullable()` record answers like a bare one.\n */\nexport function getRecordValueSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'record') {\n return null;\n }\n\n const valueSchema = getZodDefSchemaProperty(unwrapped, 'valueType');\n return valueSchema ?? null;\n}\n\n/**\n * The KEY schema of a RECORD, or `null` when the schema is not a record — {@link getRecordValueSchema}'s twin.\n *\n * A record's keys are data, but they can still belong to a named vocabulary: an organization's `limits` is keyed by\n * limit identifiers, declared `z.record(z.string().systemEnum('Limit'), …)`, and a display reads each key's word\n * through the vocabulary the key schema names (#1851) instead of printing the identifier.\n *\n * Unwraps first, like {@link getRecordValueSchema}.\n */\nexport function getRecordKeySchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'record') {\n return null;\n }\n\n const keySchema = getZodDefSchemaProperty(unwrapped, 'keyType');\n return keySchema ?? null;\n}\n\n/**\n * The element schema of a SET, or `null` when the schema is not a set.\n *\n * Sibling of {@link getRecordValueSchema} and {@link getMapSchemas}, and added for the same reason\n * that one records: `FieldSchemaType.SET` classified correctly and had no display branch, so a set\n * field fell through `DisplayValueDispatcher` to its \"unsupported type\" chip and rendered an ERROR\n * over data that was fully present. A set is an ARRAY without order or duplicates, so its element\n * schema is the only thing a renderer needs to treat it as one.\n *\n * Unwraps first, so an `.optional()` / `.default()` / `.nullable()` set answers like a bare one.\n */\nexport function getSetValueSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'set') {\n return null;\n }\n\n return getZodDefSchemaProperty(unwrapped, 'valueType') ?? null;\n}\n\n/**\n * The positional item schemas of a TUPLE, or `null` when the schema is not a tuple.\n *\n * A tuple differs from an array in exactly one way that matters to a renderer: each POSITION has\n * its own schema, so the items cannot share one element type. Returning the list lets a display\n * branch pair `value[i]` with `items[i]` and render each position as the type it actually is,\n * rather than formatting the whole tuple as text.\n *\n * Unwraps first, like its siblings.\n */\nexport function getTupleItemSchemas(schema: z.ZodTypeAny): readonly z.ZodTypeAny[] | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'tuple') {\n return null;\n }\n\n const items = getZodDefProperty(unwrapped, 'items');\n return Array.isArray(items) ? (items as z.ZodTypeAny[]) : null;\n}\n\n/**\n * Get the key and value schemas from a map schema\n */\nexport function getMapSchemas(schema: z.ZodTypeAny): { keySchema: z.ZodTypeAny; valueSchema: z.ZodTypeAny } | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'map') {\n return null;\n }\n\n const keySchema = getZodDefSchemaProperty(unwrapped, 'keyType');\n const valueSchema = getZodDefSchemaProperty(unwrapped, 'valueType');\n\n if (keySchema && valueSchema) {\n return { keySchema, valueSchema };\n }\n\n return null;\n}\n\n// ------------------------------------------------------------\n// DEFAULT VALUE UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the default value from a schema if it has one\n */\nexport function getDefaultValue(schema: z.ZodTypeAny): unknown | undefined {\n const type = getZodType(schema);\n\n if (type === 'default') {\n const defaultValue = getZodDefProperty(schema, 'defaultValue');\n if (typeof defaultValue === 'function') {\n return defaultValue();\n }\n return defaultValue;\n }\n\n if (type === 'optional' || type === 'nullable') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? getDefaultValue(innerSchema) : undefined;\n }\n\n return undefined;\n}\n\n\n// =============================================================================\n// DB related\n// =============================================================================\n\nexport function isDBIndexed(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_DB_INDEXED);\n}\n\n/** @see isForeignKeyField — alias for backward compatibility */\nexport function isForeignKey(schema: z.ZodTypeAny): boolean {\n return isForeignKeyField(schema);\n}\n\n/** @see isUniqueField — alias for backward compatibility */\nexport function isUnique(schema: z.ZodTypeAny): boolean {\n return isUniqueField(schema);\n}\n\n/** @see getUniqueFieldParams — alias for backward compatibility */\nexport function getUniqueParams(schema: z.ZodTypeAny): UniqueFieldParams | undefined {\n return getUniqueFieldParams(schema);\n}\n\n/**\n * Check if a field is a primary key.\n * Primary keys are automatically: excludeFromCreate, isHidden, isUnique, isDBIndexed\n * @see isPrimaryKeyField — alias for backward compatibility\n */\nexport function isPrimaryKey(schema: z.ZodTypeAny): boolean {\n return isPrimaryKeyField(schema);\n}\n\n/**\n * Check if a field has a TTL (Time To Live) decorator.\n * TTL fields are used for MongoDB document expiration.\n */\nexport function hasTtl(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.TTL);\n}\n\n/**\n * Get TTL field params from a schema.\n * Returns undefined if the schema is not a TTL field.\n */\nexport function getTtlParams(schema: z.ZodTypeAny): TtlFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.TTL];\n}\n\n// =============================================================================\n// DECORATOR READER FUNCTIONS (using getMetadataRecursive — recursive unwrapping)\n// These handle .optional(), .nullable(), .default(), .refine(), array wrappers etc.\n// =============================================================================\n\n/**\n * Get the structural FK params (polymorphicVariants) from `IS_FOREIGN_KEY`.\n * Returns undefined if the schema is not a foreign key.\n */\nexport function getForeignKeyParams(schema: z.ZodTypeAny): ForeignKeyStructuralParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_FOREIGN_KEY];\n\n if (value === undefined) return undefined;\n if (value === true) return {};\n\n return value as ForeignKeyStructuralParams;\n}\n\n/**\n * Get FK UI display params from `FOREIGN_KEY_UI.display`. Returns mode, linkable, displayPresetOverride.\n *\n * When the FK exists but authors no explicit `display` config, `mode` falls back to\n * {@link DEFAULT_FOREIGN_KEY_DISPLAY_MODE} — the single source for that default. Do not\n * restate a `ForeignKeyDisplayMode` member here: a second declaration of the\n * default is how this surface and the display preset came to disagree.\n */\nexport function getForeignKeyUIDisplay(schema: z.ZodTypeAny): ForeignKeyUIDisplayParams | undefined {\n if (!isForeignKeyField(schema)) return undefined;\n\n const metadata = getCustomFieldMetadata(schema);\n const uiParams = metadata[ZodDecorator.FOREIGN_KEY_UI] as ForeignKeyUIParams | undefined;\n const display = uiParams?.display;\n\n return { mode: DEFAULT_FOREIGN_KEY_DISPLAY_MODE, ...display };\n}\n\n/**\n * Get the polymorphic variants from a foreign key field.\n * Returns the array of PolymorphicFkVariant if the FK is polymorphic, or undefined.\n */\nexport function getPolymorphicFkVariants(schema: z.ZodTypeAny): PolymorphicFkVariant[] | undefined {\n const params = getForeignKeyParams(schema);\n return params?.polymorphicVariants;\n}\n\n/**\n * Resolve the per-record DISCRIMINATED polymorphic FK declaration, if any.\n *\n * Returns `{ discriminatorField, variants }` only when the FK is a single\n * SHARED field pointing at a polymorphic branch group — i.e. BOTH a\n * `polymorphicDiscriminatorField` AND at least one `polymorphicVariants` entry\n * are declared. Returns `undefined` for plain FKs and for rename-only\n * polymorphic FKs (variants present, no discriminator field).\n *\n * Consumers (registry FK→type map builders, FK display/link resolution) use\n * this as the signal that the FK resolves to a different branch PER RECORD: the\n * holder record's `discriminatorField` value is matched against each variant's\n * `discriminatorValue` to pick the branch. See\n * {@link ForeignKeyStructuralParams.polymorphicDiscriminatorField}.\n */\nexport function getDiscriminatedPolymorphicForeignKey(\n schema: z.ZodTypeAny,\n): { discriminatorField: string; variants: PolymorphicFkVariant[] } | undefined {\n const params = getForeignKeyParams(schema);\n const discriminatorField = params?.polymorphicDiscriminatorField;\n const variants = params?.polymorphicVariants;\n if (!discriminatorField || !variants || variants.length === 0) return undefined;\n return { discriminatorField, variants };\n}\n\n/**\n * Check if a schema field is a foreign key (recursive traversal through wrappers).\n */\nexport function isForeignKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_FOREIGN_KEY] !== undefined;\n}\n\n/**\n * Check if a schema field has the isSummaryField decorator.\n */\nexport function isSummaryField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_SUMMARY_FIELD] !== undefined;\n}\n\n/**\n * Get the isSummaryField decorator parameters.\n * @returns SummaryFieldParams or default empty object if decorator is used without params\n */\nexport function getSummaryFieldParams(schema: z.ZodTypeAny): SummaryFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_SUMMARY_FIELD];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as SummaryFieldParams;\n}\n\n/**\n * Check if a schema field has the isBackendOnly decorator.\n */\nexport function isBackendOnlyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_BACKEND_ONLY] !== undefined;\n}\n\n/**\n * Get the isBackendOnly decorator parameters.\n */\nexport function getBackendOnlyParams(schema: z.ZodTypeAny): BackendOnlyFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_BACKEND_ONLY];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as BackendOnlyFieldParams;\n}\n\n/**\n * Check if a schema field has the isWriteOnlySecret decorator.\n */\nexport function isWriteOnlySecretField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_WRITE_ONLY_SECRET] !== undefined;\n}\n\n/**\n * Read a field's stored impersonalization params, declared via the fluent\n * `.impersonalizeWith(treatment, options?)` method or the equivalent\n * `addImpersonalizeWith(schema, treatment, options?)` helper.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. This matters because the retention guards `safeParse` the OUTER wrapper, and\n * treatments are commonly declared on `.nullish()` fields (`REMOVE` writes `null`).\n *\n * The decorator chokepoint normalizes both authoring forms to the params object, so the stored\n * value is always an object. The bare-string branch below is a defensive read for metadata written\n * by any path that bypassed the chokepoint — it keeps a legal treatment legible rather than\n * silently reading as UNTREATED, which is the PII-leak failure mode this decorator exists to\n * prevent.\n */\n/**\n * Read a field's declared portability provenance — where its value came from — set via the fluent\n * `.portabilityProvenance(provenance)` method or `addPortabilityProvenance(schema, provenance)`.\n *\n * Returns the raw string; the saas-models layer types it as `DataPortabilityProvenance`\n * (zod-decorators sits below saas-models and cannot import the enum).\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()` — the same wrapper-transparency `getImpersonalizeTreatment` needs, and for the same\n * reason: personal-data fields are commonly optional.\n *\n * `undefined` means the field carries NO declaration of its own. That is not an error — the field\n * inherits its resource's `portabilityPolicy.defaultProvenance`, and only if THAT is absent too\n * does an Art. 20 export refuse. Resolving that fallback chain belongs to the resource factory,\n * which knows the resource; this reader answers only \"did the field itself say?\".\n */\nexport function getPortabilityProvenance(schema: z.ZodTypeAny): string | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.PORTABILITY_PROVENANCE];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/**\n * WHICH KINDS of personal data does this field hold? Returns the declared `PersonalDataCategory`\n * values (as opaque strings — this package sits below `saas-models` and cannot import the enum),\n * or `undefined` when the field carries no declaration.\n *\n * Set via the fluent `.dataCategories(...)` method or `addDataCategories(schema, ...)`. Always an\n * ARRAY, deduped and non-empty: the decorator chokepoint normalizes a single-value authoring form\n * on the way in, so a caller never has to handle two shapes.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was written before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. An optional field is the common shape for exactly the data a notice enumerates, so\n * a reader that missed the wrapper would under-report — the silent direction.\n *\n * `undefined` is the correct and common answer: most fields hold no personal data and carry no\n * declaration. It is ABSENCE, not an empty array, that the compliance gap report reads — the\n * chokepoint refuses to store an empty declaration for that reason.\n *\n * @wildo_source:part:start zod.decorators.data-categories facet:layer:shared facet:family:decorator facet:kind:api facet:audience:app-developer\n */\nexport function getDataCategories(schema: z.ZodTypeAny): readonly string[] | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.DATA_CATEGORIES];\n return Array.isArray(value) && value.length > 0 ? (value as readonly string[]) : undefined;\n}\n/** @wildo_source:part:end zod.decorators.data-categories */\n\n/**\n * Is this field's VALUE recorded on the resource-operation audit event when an operation changes\n * it? Set via the fluent `.isAuditEvidence()` method or `addAuditEvidence(schema)`.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * marker whether it was declared before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. That matters here in both directions: a nullable `suspendedUntil` is exactly the\n * kind of lifecycle field worth marking, and a marker the reader missed would silently drop the\n * evidence rather than fail.\n *\n * `false` is the correct and common answer — the audit event still records that the field CHANGED\n * (by name); only its before/after VALUES are withheld. Withholding is the default on purpose:\n * audit rows reach the immutable ledger, which cannot be scrubbed.\n *\n * ⚠️ This is the WRITE-side question. The READ-side one (\"was this value disclosed?\") is answered\n * only by `isBackendOnly({ isReturnedAtCreation: true })`, which fires a `FIELD_ACCESS` event when a\n * server-minted secret is first exposed. The two are independent claims; neither implies the other.\n */\nexport function isAuditEvidenceField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_AUDIT_EVIDENCE] === true;\n}\n\nfunction getImpersonalizeParams(schema: z.ZodTypeAny): ImpersonalizeFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IMPERSONALIZE_WITH];\n if (typeof value === 'string') return { treatment: value };\n if (value !== null && typeof value === 'object' && typeof (value as ImpersonalizeFieldParams).treatment === 'string') {\n return value as ImpersonalizeFieldParams;\n }\n return undefined;\n}\n\n/**\n * Get a field's impersonalization scrub treatment (a `RedactionType` value). Returns the raw\n * string; the saas-models layer types it as `RedactionType` (zod-decorators is below saas-models\n * and cannot import it). `undefined` means the field carries no treatment and is left intact.\n */\nexport function getImpersonalizeTreatment(schema: z.ZodTypeAny): string | undefined {\n return getImpersonalizeParams(schema)?.treatment;\n}\n\n/**\n * @wildo_source:part:start zod.decorators.rag-source facet:layer:shared facet:family:decorator facet:kind:api facet:audience:app-developer\n *\n * Read a field's stored RAG-source configuration, declared via the fluent `.ragSource(config?)`\n * method, the `addRagSource(schema, config?)` helper, or `z_file({ ragSource })`.\n *\n * Import from `@wildo-ai/zod-decorators`. Use it in custom implementations or checks that need to\n * ask \"is this field part of the retrieval corpus?\" — never to re-derive the corpus itself, which\n * the framework already does.\n *\n * `undefined` means the field is NOT a retrieval-corpus source — presence of the returned object is\n * the declaration itself (there is no `enabled` flag), and a bare `.ragSource()` reads back as `{}`\n * because the decorator chokepoint normalizes an omitted config to the empty object.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()` — corpus-source fields (descriptions, knowledge bodies) are routinely optional.\n * This is the ONE detection door: `RagSourceFieldDetection` in the backend walks resource schemas\n * with it, uniformly for plain string fields and `z_file()` fields.\n */\nexport function getRagSourceConfig(schema: z.ZodTypeAny): RagSourceConfiguration | undefined {\n const metadata = getMetadataRecursive(schema);\n // Typed as the normalized object, but read defensively as `unknown`: metadata written by any\n // path that bypassed the chokepoint's normalization (a raw `true` sentinel) must still read as\n // \"declared, default config\" rather than silently reading as NOT-a-source, which would drop the\n // field from every downstream seam (detection, chunk store, erasure).\n const value = metadata?.[ZodDecorator.RAG_SOURCE] as unknown;\n if (value === undefined || value === null || value === false) return undefined;\n return typeof value === 'object' ? (value as RagSourceConfiguration) : {};\n}\n/** @wildo_source:part:end zod.decorators.rag-source */\n\n/**\n * Get a field's `MASK` override value — the literal written in place of the field, instead of the\n * framework mask constant. `undefined` means \"use the constant\".\n *\n * Authored for CONSTRAINED string fields (`z.email()`, `z.uuid()`, `.min(n)`) that the default\n * constant cannot satisfy. See {@link ImpersonalizeFieldParams} for the contract; the saas-models\n * boot guard validates the value against the field's own schema and rejects it on a non-`MASK`\n * treatment.\n */\nexport function getImpersonalizeMaskValue(schema: z.ZodTypeAny): string | undefined {\n return getImpersonalizeParams(schema)?.maskValue;\n}\n\n/**\n * Get the isWriteOnlySecret decorator parameters.\n */\nexport function getWriteOnlySecretParams(schema: z.ZodTypeAny): WriteOnlySecretFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_WRITE_ONLY_SECRET];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as WriteOnlySecretFieldParams;\n}\n\n/**\n * Check if a schema field has the isDiscriminator decorator.\n */\nexport function isDiscriminatorField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_DISCRIMINATOR] !== undefined;\n}\n\n/**\n * Get the isDiscriminator decorator parameters.\n */\nexport function getDiscriminatorParams(schema: z.ZodTypeAny): DiscriminatorFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_DISCRIMINATOR];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as DiscriminatorFieldParams;\n}\n\n/**\n * Check if a schema field has the excludeFromCreate decorator.\n */\nexport function isExcludedFromCreate(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.EXCLUDE_FROM_CREATE] !== undefined;\n}\n\n/**\n * Check if a schema field has the excludeFromUpdate decorator.\n */\nexport function isExcludedFromUpdate(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.EXCLUDE_FROM_UPDATE] !== undefined;\n}\n\n/**\n * Check if a schema field is hidden (recursive traversal through wrappers).\n */\nexport function isHiddenField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_HIDDEN] !== undefined;\n}\n\n/**\n * Get the isHidden decorator parameters.\n * Returns default params (hidden in both display and edit) when decorator is used without params.\n */\nexport function getHiddenFieldParams(schema: z.ZodTypeAny): HiddenFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_HIDDEN];\n if (value === undefined) return undefined;\n // Default: hidden in both display and edit mode when decorator is used without params\n if (value === true) return { display: true, edit: true };\n return value as HiddenFieldParams;\n}\n\n/**\n * Check if a schema field is not editable (recursive traversal through wrappers).\n */\nexport function isNotEditableField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_NOT_EDITABLE] !== undefined;\n}\n\n/**\n * Get the isNotEditable decorator parameters.\n */\nexport function getNotEditableFieldParams(schema: z.ZodTypeAny): NotEditableFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_NOT_EDITABLE];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as NotEditableFieldParams;\n}\n\n/**\n * Check if a schema field has the isUnique decorator (recursive traversal through wrappers).\n */\nexport function isUniqueField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_UNIQUE] !== undefined;\n}\n\n/**\n * Get the isUnique decorator parameters (recursive traversal through wrappers).\n * Returns default params { scope: 'global', sparse: true } when decorator is used without params.\n */\nexport function getUniqueFieldParams(schema: z.ZodTypeAny): UniqueFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_UNIQUE];\n if (value === undefined) return undefined;\n if (value === true) return { scope: 'global', sparse: true }; // Default params from original getUniqueParams\n return value as UniqueFieldParams;\n}\n\n/**\n * The NAME of the field an object schema marks as its primary key, or `undefined`.\n *\n * ## Why this is not `resourceFieldIdentifier`\n *\n * A resource has two different id-shaped names and they are not interchangeable:\n *\n * - `resourceFieldIdentifier` (`organizationSsoConfigId`, `todoId`) is the URL PARAMETER name. It\n * appears in routes and in contextual parameters. A response payload does not generally carry it.\n * - the PRIMARY KEY field (`_id`) is what the row calls its own identity, and is what a payload\n * actually contains.\n *\n * Conflating them is a real defect rather than a hypothetical one. `ResourceAutomaticDisplayer`'s\n * READ-bootstrap fallback — the path that exists so a row without an id in its URL can still be\n * identified once its data arrives — read `data[resourceFieldIdentifier]`. For an ordinary resource\n * the fallback never runs (the id is in the URL, so the earlier branch returns), and for a\n * CONTEXT-ADDRESSED SINGLETON, which is the only shape that needs it, the key is absent from the\n * payload and the lookup yields `undefined`.\n *\n * Measured 2026-09-19 on the running application: `organizationSsoConfig` loads\n * `[\"_id\", \"enforcement\", \"domains\", …]` while the fallback asked for `organizationSsoConfigId`. So\n * the resource id stayed undefined after a successful READ, the mutation manager could not attach\n * (it is keyed on that id), and `canInlineEdit` was false — which is why every settings singleton in\n * the product was silently read-only, and why declaring `inlineEditable` on one would have changed\n * nothing.\n *\n * Returns the FIRST field marked `.isPrimaryKey()`. A schema declaring several is malformed; a\n * schema declaring none — a DTO projection, a nested object — yields `undefined`, and every caller\n * treats that as \"no id\", which is the safe reading.\n */\nexport function getPrimaryKeyFieldName(schema: z.ZodTypeAny): string | undefined {\n const shape = getZodObjectShape(schema);\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n if (isPrimaryKeyField(fieldSchema)) {\n return fieldName;\n }\n }\n return undefined;\n}\n\n/**\n * Check if a schema field has the isPrimaryKey decorator (recursive traversal through wrappers).\n */\nexport function isPrimaryKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_PRIMARY_KEY] === true;\n}\n\n// =============================================================================\n// BUSINESS KEY HELPERS (data-seeding subsystem)\n// =============================================================================\n\n/**\n * Check if a schema field has the `isBusinessKey` decorator (recursive\n * traversal through wrappers — `optional`, `nullable`, etc.).\n *\n * A business key is the **declaration-side identity** used by the data-seeding\n * subsystem to upsert / upgrade / sync seeded rows independently from the\n * random `_id` (`isPrimaryKey`). See `.cursor/plans/seeding-first-class.md`\n * §3.3 for the semantic contract.\n */\nexport function isBusinessKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_BUSINESS_KEY] === true;\n}\n\n/**\n * Read the composite business key declared on an object schema via\n * `businessKeySet([...])` (object-level decorator). Returns the ordered\n * list of field names, or `undefined` if no composite key is declared.\n *\n * The composite key is the schema-level analog of `isBusinessKey` — used\n * when identity is `(orgId, templateKey)` rather than a single field. See\n * `.cursor/plans/seeding-first-class.md` §3.3.\n */\nexport function getBusinessKeySet(schema: z.ZodTypeAny): string[] | undefined {\n return getBusinessKeySetParams(schema)?.fields;\n}\n\n/**\n * Read the FULL composite-business-key declaration, not just its field list.\n *\n * `getBusinessKeySet` answers \"what identifies a row\" and is all the seeding filter builder needs.\n * The storage adapter needs more: which members take a row out of the constraint when absent\n * (`skipRowsMissing`), and which error the API should raise when the resulting index is violated\n * (`conflictMessageReference`). Both are properties OF the key, so they are read from the same\n * declaration rather than re-derived — a second source would be free to disagree with the first.\n */\nexport function getBusinessKeySetParams(schema: z.ZodTypeAny): BusinessKeySetParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const params = metadata?.[ZodDecorator.OBJECT_BUSINESS_KEY_SET];\n return params?.fields ? params : undefined;\n}\n\n/**\n * Convenience predicate: does the schema declare any business key\n * identity (single field-level marker OR composite object-level set)?\n */\nexport function hasBusinessKey(schema: z.ZodTypeAny): boolean {\n return isBusinessKeyField(schema) || getBusinessKeySet(schema) !== undefined;\n}\n\n/**\n * Get all metadata for a schema field (non-recursive, direct access only).\n */\nexport function getFieldMetadata(schema: z.ZodTypeAny): CustomFieldMetadata | undefined {\n return (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n}\n\n/**\n * Get all metadata for a schema field, traversing through wrapper types.\n */\nexport function getFieldMetadataRecursive(schema: z.ZodTypeAny): CustomFieldMetadata | undefined {\n return getMetadataRecursive(schema);\n}\n\n// =============================================================================\n// RANGE SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a range schema (created by z_range()).\n * Detects by the presence of rangeConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isRangeSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.rangeConfig?.isRange === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.rangeConfig?.isRange === true;\n }\n\n return false;\n}\n\n/**\n * Get the range metadata from a schema.\n * Returns undefined if not a range schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getRangeMetadata(schema: z.ZodTypeAny): RangeSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.rangeConfig?.isRange) {\n return schemaMetadata.rangeConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.rangeConfig?.isRange) {\n return unwrappedMetadata.rangeConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get the range type from a schema.\n * Returns undefined if not a range schema.\n */\nexport function getRangeType(schema: z.ZodTypeAny): RangeType | undefined {\n return getRangeMetadata(schema)?.type;\n}\n\n// =============================================================================\n// CURRENCY SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a money schema (created by z_money()).\n * Detects by the presence of moneyConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isMoneySchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.moneyConfig?.isMoney === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.moneyConfig?.isMoney === true;\n }\n\n return false;\n}\n\n/**\n * Get the money metadata from a schema.\n * Returns undefined if not a money schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getMoneyMetadata(schema: z.ZodTypeAny): MoneySchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.moneyConfig?.isMoney) {\n return schemaMetadata.moneyConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.moneyConfig?.isMoney) {\n return unwrappedMetadata.moneyConfig;\n }\n }\n\n return undefined;\n}\n\n// =============================================================================\n// BIGDECIMAL SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a bigdecimal schema (created by z_bigdecimal()).\n * Detects by the presence of bigDecimalConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isBigDecimalSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.bigDecimalConfig?.isBigDecimal === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.bigDecimalConfig?.isBigDecimal === true;\n }\n\n return false;\n}\n\n/**\n * Get the bigdecimal metadata from a schema.\n * Returns undefined if not a bigdecimal schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getBigDecimalMetadata(schema: z.ZodTypeAny): BigDecimalSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.bigDecimalConfig?.isBigDecimal) {\n return schemaMetadata.bigDecimalConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.bigDecimalConfig?.isBigDecimal) {\n return unwrappedMetadata.bigDecimalConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get bigdecimal constraints from schema metadata.\n * Returns min, max, precision from the bigdecimal schema configuration.\n */\nexport function getBigDecimalConstraints(schema: z.ZodTypeAny): {\n min?: string;\n max?: string;\n precision?: number;\n} {\n const metadata = getBigDecimalMetadata(schema);\n if (!metadata) {\n return {};\n }\n\n return {\n min: metadata.min,\n max: metadata.max,\n precision: metadata.precision,\n };\n}\n\n// =============================================================================\n// DURATION SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a duration schema (created by z_duration()).\n * Detects by the presence of durationConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isDurationSchema(schema: z.ZodTypeAny): boolean {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.durationConfig?.isDuration === true) {\n return true;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.durationConfig?.isDuration === true;\n }\n\n return false;\n}\n\n/**\n * Get the duration metadata from a schema.\n * Returns undefined if not a duration schema.\n */\nexport function getDurationMetadata(schema: z.ZodTypeAny): DurationSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.durationConfig?.isDuration) {\n return schemaMetadata.durationConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.durationConfig?.isDuration) {\n return unwrappedMetadata.durationConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get duration constraints from schema metadata.\n */\nexport function getDurationConstraints(schema: z.ZodTypeAny): {\n minValue?: number;\n maxValue?: number;\n allowedUnits?: string[];\n} {\n const metadata = getDurationMetadata(schema);\n if (!metadata) {\n return {};\n }\n\n return {\n minValue: metadata.minValue,\n maxValue: metadata.maxValue,\n allowedUnits: metadata.allowedUnits,\n };\n}\n\n/**\n * Check if a schema is an address schema (created by z_address()).\n * Detects by the presence of addressConfig in SCHEMA_METADATA, on the schema or its unwrapped inner schema.\n */\nexport function isAddressSchema(schema: z.ZodTypeAny): boolean {\n return getAddressMetadata(schema) !== undefined;\n}\n\n/**\n * Get the address metadata from a schema, or undefined when it is not an address schema.\n */\nexport function getAddressMetadata(schema: z.ZodTypeAny): AddressSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.addressConfig?.isAddress === true) {\n return schemaMetadata.addressConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.addressConfig?.isAddress === true) {\n return unwrappedMetadata.addressConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a phone schema (created by z_phone()).\n * Detects by the presence of phoneConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isPhoneSchema(schema: z.ZodTypeAny): boolean {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.phoneConfig?.isPhone === true) {\n return true;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.phoneConfig?.isPhone === true;\n }\n\n return false;\n}\n\n/**\n * Get the phone metadata from a schema.\n * Returns undefined if not a phone schema.\n */\nexport function getPhoneMetadata(schema: z.ZodTypeAny): PhoneSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.phoneConfig?.isPhone) {\n return schemaMetadata.phoneConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.phoneConfig?.isPhone) {\n return unwrappedMetadata.phoneConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a code schema created by z_code().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isCodeSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.codeConfig?.isCode === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.codeConfig?.isCode === true;\n }\n\n return false;\n}\n\n/**\n * Get code schema metadata if this is a code schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getCodeMetadata(schema: z.ZodTypeAny): CodeSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.codeConfig?.isCode) {\n return schemaMetadata.codeConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.codeConfig?.isCode) {\n return unwrappedMetadata.codeConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a file schema created by z_file().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isFileSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.fileConfig?.isFile === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.fileConfig?.isFile === true;\n }\n\n return false;\n}\n\n/**\n * Check if a file schema is generated from a backend-bound PDF template.\n *\n * This helper intentionally keys off frontend-safe metadata only. Runtime\n * template objects are bound later by backend resource configuration and must\n * not leak into shared schema metadata.\n */\nexport function isTemplatableFileField(schema: z.ZodTypeAny): boolean {\n const fileMetadata = getFileMetadata(schema);\n return fileMetadata?.generation?.source === FileGenerationSource.PDF_TEMPLATE;\n}\n\n/**\n * Get file schema metadata if this is a file schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getFileMetadata(schema: z.ZodTypeAny): FileSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.fileConfig?.isFile) {\n return schemaMetadata.fileConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.fileConfig?.isFile) {\n return unwrappedMetadata.fileConfig;\n }\n }\n\n return undefined;\n}\n\n// -----------------------------------------------------------------------------\n// VERSIONED SCHEMA HELPERS\n// -----------------------------------------------------------------------------\n\n/**\n * Check if a schema is a versioned foreign key schema created by z_foreignKeyVersioned().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isVersionedForeignKeySchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey === true;\n }\n\n return false;\n}\n\n/**\n * Get versioned foreign key schema metadata if this is a versioned foreign key schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getVersionedForeignKeyMetadata(schema: z.ZodTypeAny): VersionedForeignKeySchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey) {\n return schemaMetadata.versionedForeignKeyConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey) {\n return unwrappedMetadata.versionedForeignKeyConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a versioned object schema created by versioned().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isVersionedObjectSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedConfig?.isVersioned === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.versionedConfig?.isVersioned === true;\n }\n\n return false;\n}\n\n/**\n * Get versioned schema metadata if this is a versioned object schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getVersionedObjectMetadata(schema: z.ZodTypeAny): VersionedSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedConfig?.isVersioned) {\n return schemaMetadata.versionedConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.versionedConfig?.isVersioned) {\n return unwrappedMetadata.versionedConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if the 'from' field is optional in a range schema.\n */\nexport function isRangeFromOptional(schema: z.ZodTypeAny): boolean | undefined {\n return getRangeMetadata(schema)?.fromOptional;\n}\n\n/**\n * Check if the 'to' field is optional in a range schema.\n */\nexport function isRangeToOptional(schema: z.ZodTypeAny): boolean | undefined {\n return getRangeMetadata(schema)?.toOptional;\n}\n\n/**\n * Get the min constraint from a range schema.\n */\nexport function getRangeMin(schema: z.ZodTypeAny): RangeConstraintValue | undefined {\n return getRangeMetadata(schema)?.min;\n}\n\n/**\n * Get the max constraint from a range schema.\n */\nexport function getRangeMax(schema: z.ZodTypeAny): RangeConstraintValue | undefined {\n return getRangeMetadata(schema)?.max;\n}\n\n\n// =============================================================================\n// FORM FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the form component from `{primitive}UI.edit.component`.\n * Returns undefined if no form component is specified.\n */\nexport function getFormFieldComponent(schema: z.ZodTypeAny): FormFieldComponent | undefined {\n return getFieldUIEditConfig(schema)?.component;\n}\n\n/**\n * Check if a field should be hidden based on the current context.\n * @param schema - The Zod schema to check\n * @param context - Optional context with mode ('display' | 'edit') and operation name\n */\nexport function shouldHideField(\n schema: z.ZodTypeAny,\n context?: { mode?: 'display' | 'edit'; operation?: string }\n): boolean {\n if (!hasHiddenDecorator(schema)) {\n return false;\n }\n\n const hidden = getHiddenFieldMetadata(schema);\n\n // If hidden is true, always hide\n if (hidden === true) {\n return true;\n }\n\n // Check mode-specific hiding\n if (context?.mode === 'display' && hidden?.display) {\n return true;\n }\n if (context?.mode === 'edit' && hidden?.edit) {\n return true;\n }\n\n // Check operation-specific hiding\n if (context?.operation && hidden?.operations?.includes(context.operation)) {\n return true;\n }\n\n return false;\n}\n\n\n\n// -----------------------------------------------------------------------------\n// Form Component Check Functions (isFormXX)\n// -----------------------------------------------------------------------------\n\nexport function isFormInput(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.INPUT;\n}\n\n/**\n * Does the author declare TEXTAREA on the CROSS-CUTTING `edit.component` axis?\n *\n * This is a question about the DECLARATION, not about what the field renders\n * as, and the distinction is load-bearing: a field declaring the per-type\n * `edit.editMode: TEXTAREA` edits as a textarea and this predicate answers\n * `false` for it. Asking this when you meant the rendering question is exactly\n * how the inline editor came to bind Enter as \"save\" inside a textarea.\n *\n * For \"does this field edit into a multi-line control\", ask\n * `isMultilineEditField`, which resolves both axes.\n */\nexport function isFormTextarea(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.TEXTAREA;\n}\n\nexport function isFormSelect(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SELECT;\n}\n\nexport function isFormRadioGroup(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.RADIO_GROUP;\n}\n\nexport function isFormCheckbox(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.CHECKBOX;\n}\n\nexport function isFormCheckboxGroup(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.CHECKBOX_GROUP;\n}\n\nexport function isFormSwitch(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SWITCH;\n}\n\nexport function isFormSlider(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SLIDER;\n}\n\nexport function isFormDate(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.DATE;\n}\n\n\n// -----------------------------------------------------------------------------\n// EDIT-MODE RESOLUTION — the ONE reconciliation of the two edit axes\n// -----------------------------------------------------------------------------\n//\n// A field's editing shape is declared on TWO axes and they overlap:\n//\n// `{primitive}UI.edit.editMode` — per-type, closed per type (`StringEditMode`\n// cannot name a slider), read by every\n// `FormField{Type}` component;\n// `{primitive}UI.edit.component` — cross-cutting `FormFieldComponent`, one\n// vocabulary spanning every type.\n//\n// Neither half of the system used to read both, so whichever axis an author\n// picked, something was wrong: the RENDER path (`FormFieldString` and its\n// siblings) read only `editMode`, so an authored `component: TEXTAREA` rendered\n// a single-line input — live on six declarations, including the engine's own\n// billing presets. The INLINE-EDIT keyboard path (`DisplayFieldEditable`) read\n// only `component` through `isFormTextarea`, so a field that correctly declares\n// `editMode: TEXTAREA` was treated as single-line and Enter saved instead of\n// inserting a newline.\n//\n// These resolvers are that one source. Precedence is the contract already\n// written on `PrimitiveUIBaseEditParams.component` — \"Type-specific `editMode`\n// takes precedence\" — so the per-type axis wins and the cross-cutting one is\n// the fallback rather than a competitor.\n//\n// Only members that name the SAME control on both sides are mapped. A\n// `FormFieldComponent` member with no counterpart (`TOGGLE`-less booleans,\n// `COLOR`/`PASSWORD`/`OTP`/`MARKDOWN` strings) simply has no mapping, and\n// `CHECKBOX_GROUP` is deliberately absent: it is an ARRAY-of-enum control\n// reached through `AutomatedArrayField`, never through `FormFieldEnum`, so\n// mapping it to an enum edit mode would claim a route that does not exist.\n\nconst STRING_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, StringEditMode>> = {\n [FormFieldComponent.INPUT]: StringEditMode.INPUT,\n [FormFieldComponent.TEXTAREA]: StringEditMode.TEXTAREA,\n};\n\nconst BOOLEAN_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, BooleanEditMode>> = {\n [FormFieldComponent.CHECKBOX]: BooleanEditMode.CHECKBOX,\n [FormFieldComponent.SWITCH]: BooleanEditMode.SWITCH,\n [FormFieldComponent.RADIO_GROUP]: BooleanEditMode.RADIO,\n};\n\nconst ENUM_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, EnumEditMode>> = {\n [FormFieldComponent.SELECT]: EnumEditMode.SELECT,\n [FormFieldComponent.RADIO_GROUP]: EnumEditMode.RADIO,\n};\n\n/**\n * The MULTIPLE-selection twin of the map above, for the other `edit` axis an author can use.\n *\n * `CHECKBOX_GROUP` is deliberately absent from the single-select map — the test\n * `does NOT map CHECKBOX_GROUP onto an enum mode` pins that, because a checkbox group is an\n * array-of-enum control and has no single-select meaning. It belongs HERE, where it does, and it\n * is the only member: `FormFieldComponent` has no `COMBOBOX`, which is why the searchable multi\n * had to borrow `EnumEditMode.COMBOBOX` before this vocabulary existed.\n */\nconst ENUM_MULTIPLE_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, EnumMultipleEditMode>> = {\n [FormFieldComponent.CHECKBOX_GROUP]: EnumMultipleEditMode.CHECKBOX,\n};\n\nconst NUMBER_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, NumberEditMode>> = {\n [FormFieldComponent.INPUT]: NumberEditMode.INPUT,\n [FormFieldComponent.SLIDER]: NumberEditMode.SLIDER,\n};\n\n/** Resolve the shape a string field edits as, honoring both edit axes. */\nexport function resolveStringEditMode(schema: z.ZodTypeAny): StringEditMode {\n const declared = getStringUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? STRING_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? StringEditMode.INPUT;\n}\n\n/** Resolve the shape a boolean field edits as, honoring both edit axes. */\nexport function resolveBooleanEditMode(schema: z.ZodTypeAny): BooleanEditMode {\n const declared = getBooleanUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? BOOLEAN_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? BooleanEditMode.SWITCH;\n}\n\n/** Resolve the shape an enum field edits as, honoring both edit axes. */\nexport function resolveEnumEditMode(schema: z.ZodTypeAny): EnumEditMode {\n const declared = getEnumUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? ENUM_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? EnumEditMode.SELECT;\n}\n\n/**\n * Resolve the shape an ARRAY OF ENUM VALUES edits as.\n *\n * Takes the ELEMENT schema, which is where `enumUI()` lives. The default is CHECKBOX and not the\n * single vocabulary's SELECT: a checkbox group is the one multiple control that says \"any number\n * of these\" without the reader having to open it first, and it is what an undeclared enum array\n * has always rendered as.\n */\nexport function resolveEnumMultipleEditMode(itemSchema: z.ZodTypeAny): EnumMultipleEditMode {\n const declared = getEnumUI(itemSchema)?.edit?.multipleEditMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(itemSchema);\n return (component !== undefined ? ENUM_MULTIPLE_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? EnumMultipleEditMode.CHECKBOX;\n}\n\n/** Resolve the shape a number field edits as, honoring both edit axes. */\nexport function resolveNumberEditMode(schema: z.ZodTypeAny): NumberEditMode {\n const declared = getNumberUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? NUMBER_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? NumberEditMode.INPUT;\n}\n\n/**\n * Does this field edit into a control where Enter inserts a newline rather than\n * submitting? Asked by the inline editor to decide its Enter binding, and the\n * reason it must go through the resolver: the answer is true whether the author\n * declared `editMode: TEXTAREA` or `component: TEXTAREA`, and `isFormTextarea`\n * only ever saw the second.\n */\nexport function isMultilineEditField(schema: z.ZodTypeAny): boolean {\n return resolveStringEditMode(schema) === StringEditMode.TEXTAREA;\n}\n\n\n// =============================================================================\n// HIDDEN FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the hidden field metadata from schema decorator.\n * Returns undefined if no hidden decorator is set.\n * Returns true if field is hidden in all cases.\n * Returns HiddenFieldParams if conditional hiding is configured.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function getHiddenFieldMetadata(schema: z.ZodTypeAny): HiddenFieldParams | true | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_HIDDEN];\n}\n\n/**\n * Check if a schema has a hidden decorator.\n */\nexport function hasHiddenDecorator(schema: z.ZodTypeAny): boolean {\n return getHiddenFieldMetadata(schema) !== undefined;\n}\n\n/**\n * Check if a field should be hidden for display mode.\n * @param schema - The Zod schema to check\n * @returns true if the field should be hidden in display mode\n */\nexport function isHiddenForDisplay(schema: z.ZodTypeAny): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.display === true;\n}\n\n/**\n * Check if a field should be hidden for edit mode.\n * @param schema - The Zod schema to check\n * @returns true if the field should be hidden in edit mode\n */\nexport function isHiddenForEdit(schema: z.ZodTypeAny): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.edit === true;\n}\n\n/**\n * Check if a field should be hidden for a specific operation.\n * @param schema - The Zod schema to check\n * @param operation - The operation identifier (e.g., 'create', 'update')\n * @returns true if the field should be hidden for the given operation\n */\nexport function isHiddenForOperation(schema: z.ZodTypeAny, operation: string): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.operations?.includes(operation) ?? false;\n}\n\n// =============================================================================\n// NOT EDITABLE FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the not editable field metadata from schema decorator.\n * Returns undefined if no isNotEditable decorator is set.\n * Returns true if field is not editable for all operations.\n * Returns NotEditableFieldParams if operation-specific.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function getNotEditableFieldMetadata(schema: z.ZodTypeAny): NotEditableFieldParams | true | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_NOT_EDITABLE];\n}\n\n/**\n * Check if a schema has a isNotEditable decorator.\n */\nexport function hasNotEditableDecorator(schema: z.ZodTypeAny): boolean {\n return getNotEditableFieldMetadata(schema) !== undefined;\n}\n\n/**\n * Check if a field is not editable for a specific operation (or all operations).\n * @param schema - The Zod schema to check\n * @param operation - Optional operation identifier. If not provided, checks if not editable for all operations.\n * @returns true if the field is not editable\n */\nexport function isNotEditableForOperation(schema: z.ZodTypeAny, operation?: string): boolean {\n const notEditable = getNotEditableFieldMetadata(schema);\n if (notEditable === undefined) return false;\n\n // If true, not editable for all operations\n if (notEditable === true) return true;\n\n // If no operations specified in params, not editable for all operations\n if (!notEditable.operations || notEditable.operations.length === 0) return true;\n\n // If operation is provided, check if it matches\n if (operation) {\n return notEditable.operations.includes(operation);\n }\n\n // Operation not provided but params have specific operations - not editable only for those\n return false;\n}\n\n\n\n// ============================================================================\n// SORTABLE FIELD HELPERS (now absorbed into ARRAY_UI)\n// ============================================================================\n// Sortable configuration is now managed via arrayUI({ edit: { isSortable, dnd, upDownIcons } }).\n// The .isSortable() convenience composite sets ARRAY_UI metadata directly.\n\n\n// ============================================================================\n// INLINE EDITABLE FIELD HELPERS\n// ============================================================================\n\n/**\n * Resolved inline editable params with all defaults applied.\n */\nexport interface ResolvedInlineEditableParams {\n mode: 'direct' | 'button';\n saveOn: 'blur' | 'explicit';\n showSaveButton: boolean;\n showCancelButton: boolean;\n}\n\n/**\n * The readable stand-in for an unresolvable foreign key, taken from the record that HOLDS it.\n *\n * Returns the value of the sibling named by `foreignKeyUI.display.labelFallbackField`, or\n * `undefined` when the field declares none, the record is absent, or the sibling is empty. Every\n * caller treats `undefined` as \"fall through to the id\", which is the behaviour before this existed\n * — so a field that declares nothing renders exactly as it did.\n *\n * Non-string siblings are refused rather than coerced: a label is text, and `String(someObject)`\n * would put `[object Object]` on screen, which is worse than the id it replaced.\n */\nexport function resolveForeignKeyLabelFallback(\n schema: z.ZodTypeAny | undefined,\n record: Record<string, unknown> | undefined | null,\n): string | undefined {\n if (!schema || !record) return undefined;\n const fallbackField = getForeignKeyUIDisplay(schema)?.labelFallbackField;\n if (!fallbackField) return undefined;\n const raw = record[fallbackField];\n return typeof raw === 'string' && raw.length > 0 ? raw : undefined;\n}\n\n/**\n * WHY this field has nothing to show — see {@link DisplayEmptyReason}.\n *\n * `isCollectionEmptiness` is supplied by the CALL SITE, because only the renderer knows which kind\n * of emptiness it met: the dispatcher reaches its empty branches separately for a null scalar, a\n * zero-length array, a keyless object and an entryless record. Re-deriving that from the value here\n * would be a second, weaker answer to a question the caller has already answered exactly — and it\n * would get `[]` on a field whose schema says OBJECT wrong.\n *\n * The remaining split is `.excludeFromUpdate()`: a field the UPDATE contract strips is one the\n * operator cannot fill, so its emptiness is the system's to resolve, not theirs. That predicate is\n * the same one {@link isEligibleForLayoutDefaultInlineEdit} uses to decide whether to offer a\n * control, which is what keeps the two answers consistent: a field that gets no control also does\n * not get a word inviting input.\n */\nexport function resolveDisplayEmptyReason(\n schema: z.ZodTypeAny | undefined,\n isCollectionEmptiness: boolean,\n): DisplayEmptyReason {\n if (isCollectionEmptiness) return DisplayEmptyReason.NONE;\n if (schema && isExcludedFromUpdate(schema)) return DisplayEmptyReason.NOT_PROVIDED;\n return DisplayEmptyReason.NOT_SET;\n}\n\n/**\n * The component label key that words a given empty reason.\n *\n * One named mapping rather than a ternary at each of the dispatcher's four empty branches — the\n * shape `.claude/rules/invariant-call-site-enumeration.md` exists to refuse. It is TOTAL over the\n * vocabulary (`Record<DisplayEmptyReason, string>`), so a reason added tomorrow is a compile error\n * here rather than a silent fallthrough to the generic word.\n *\n * `noValue` is deliberately KEPT as the NOT_SET key rather than renamed. It is already declared,\n * already realised in every application's generated tree, and already the right words for that\n * case; renaming it would restale every label unit in every application to say the same thing.\n */\nexport const DISPLAY_EMPTY_REASON_LABEL_KEYS: Record<DisplayEmptyReason, string> = {\n [DisplayEmptyReason.NOT_SET]: 'noValue',\n [DisplayEmptyReason.NONE]: 'noValueNone',\n [DisplayEmptyReason.NOT_PROVIDED]: 'noValueNotProvided',\n};\n\n/**\n * Does this field DECLARE that it is inline-editable?\n *\n * Reads `{primitive}UI.display.inlineEditable`, which is `boolean | {…}`.\n *\n * ## `false` means FALSE — corrected 2026-09-19\n *\n * This used to be `inlineEditable != null`, so an authored `inlineEditable: false` answered TRUE\n * and the field was routed to `DisplayFieldEditable` exactly like an opted-IN one. There,\n * `getInlineEditableParams` returns `undefined` for `false` and the component falls back to\n * `DEFAULT_INLINE_EDIT_PARAMS` — so the explicit opt-out produced the DEFAULT inline editor. An\n * author writing `false` got the opposite of what they asked for, with nothing to grep for.\n *\n * Nothing in the repository authored `false` at the time of the fix (measured: zero occurrences\n * across `engine/`, `platform/` and both dogfood applications), so no behaviour changed on the day.\n * What changed is that the opt-out became REAL, which is what\n * {@link ResourceLayoutInlineEditDefault} needs: a layout-level default is only safe if a single\n * field can decline it.\n */\nexport function hasInlineEditableDecorator(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.inlineEditable != null\n && getFieldUIDisplayConfig(schema)?.inlineEditable !== false;\n}\n\n/**\n * Has this field explicitly DECLINED inline editing?\n *\n * Distinct from `!hasInlineEditableDecorator(schema)`, and the distinction is the whole point of\n * the layout-level default: a field that says nothing is a candidate for the default, while a field\n * that says `false` has opted out and must stay read-only even under a layout that turns the\n * default on.\n */\nexport function declinesInlineEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.inlineEditable === false;\n}\n\n/**\n * Would a layout whose `defaultInlineEdit` is on make THIS field editable in place?\n *\n * The predicate is derived from what the field already declares about itself, rather than from a\n * hand-kept list of editable field names — so a field added to a settings schema tomorrow is\n * covered without anyone remembering to add it, and a field that is not writable is never offered a\n * control that would fail on save.\n *\n * A field qualifies when ALL of these hold:\n *\n * - it has not DECLINED (`inlineEditable: false`) — an explicit author decision outranks a default;\n * - it is not `.excludeFromUpdate()` — the UPDATE DTO strips it, so a control here would collect a\n * value the server silently discards. That is worse than no control, because the row appears to\n * save and does not;\n * - it is not `.isHidden()` for display — a field nobody may read is not a field anybody may write.\n *\n * ## The primary key needs no clause of its own — measured, not assumed\n *\n * An `isPrimaryKey(schema)` guard was written here first, on the reasoning that an identity is not a\n * setting. It is UNREACHABLE: `.isPrimaryKey()` already reports `isHiddenForDisplay() === true`, so\n * the hidden clause below decides every primary key before a dedicated clause could. Deleting it\n * left all ten pins green, which is how it was found.\n *\n * It is removed rather than kept \"for safety\". An unreachable guard is not defence in depth — it is\n * an untested claim that reads like coverage (`.claude/rules/invariant-call-site-enumeration.md`\n * #19, #25), and the next author would have reasonably assumed it was load-bearing. The N/A is\n * stated here instead. If a primary key ever stops being hidden for display, this is the paragraph\n * that has to be re-read.\n *\n * Note what is deliberately NOT tested: the field's TYPE. A boolean, a string, an enum and an array\n * are all legitimately editable in place, and the display dispatcher already routes each to the\n * right control (`DisplayFieldEditableArray` for arrays, the switch fast-path for booleans). Adding\n * a type filter here would silently re-narrow what the layout author asked for.\n */\nexport function isEligibleForLayoutDefaultInlineEdit(schema: z.ZodTypeAny): boolean {\n if (declinesInlineEdit(schema)) return false;\n if (isExcludedFromUpdate(schema)) return false;\n if (isHiddenForDisplay(schema)) return false;\n return true;\n}\n\n/**\n * Get the resolved inline editable params from `{primitive}UI.display.inlineEditable`.\n * Handles both `true` shorthand and full object config.\n */\nexport function getInlineEditableParams(schema: z.ZodTypeAny): ResolvedInlineEditableParams | undefined {\n const config = getFieldUIDisplayConfig(schema)?.inlineEditable;\n if (config == null) return undefined;\n\n if (config === true) {\n return { mode: 'direct', saveOn: 'blur', showSaveButton: false, showCancelButton: true };\n }\n if (config === false) return undefined;\n\n const saveOn = config.saveOn ?? 'blur';\n const showSaveButton = config.showSaveButton ?? (saveOn === 'explicit');\n return {\n mode: config.mode ?? 'direct',\n saveOn,\n showSaveButton,\n showCancelButton: config.showCancelButton ?? true,\n };\n}\n\n\n// ============================================================================\n// ZOD .describe() UTILITY (NOT for UI descriptions — developer/AI/API docs only)\n// ============================================================================\n\n/**\n * Extract the `.describe()` text from a Zod schema, unwrapping optional/nullable/default wrappers.\n * Returns undefined if no `.describe(\"...\")` is set.\n *\n * **IMPORTANT**: Zod `.describe(\"...\")` is for developer documentation, AI prompting systems,\n * and API documentation generation. It is NOT used for UI field descriptions — those are\n * managed through `{primitive}UI.display.showDescription` + i18n system.\n *\n * In Zod 4, `.describe(\"...\")` sets the `.description` property on the schema.\n * When `.optional()`, `.nullable()`, or `.default()` wrap the schema, the description\n * may live on the inner schema. We check both levels.\n */\nexport function getZodDescription(schema: z.ZodTypeAny): string | undefined {\n // Check outer schema first\n if (schema.description) return schema.description;\n\n // Unwrap optional/nullable/default to check inner schema\n const inner = (schema as any)._zod?.innerType ?? (schema as any).unwrap?.();\n if (inner?.description) return inner.description;\n\n return undefined;\n}\n\n// ============================================================================\n// FIELD DESCRIPTION HELPERS (opt-in i18n key generation, mirrors tooltip pattern)\n// ============================================================================\n\n/**\n * Check if a field should have a description i18n key generated for **display** mode.\n *\n * Reads from `{primitive}UI.display.showDescription` (boolean flag).\n * This follows the same opt-in pattern as tooltips: only generate i18n keys for\n * fields that explicitly declare intent via a decorator.\n *\n * **NOTE**: Zod `.describe(\"...\")` is NOT an opt-in signal for UI descriptions.\n * `.describe()` serves a different purpose (developer docs, AI prompting, API docs).\n * UI field descriptions are purely decorator-driven + i18n-resolved.\n *\n * @param schema - The Zod schema to check\n * @returns true if a description i18n key should be generated for display mode\n */\nexport function hasDescriptionForDisplay(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.showDescription === true;\n}\n\n/**\n * Check if a field should have a description i18n key generated for **edit** mode.\n *\n * Reads from `{primitive}UI.edit.showDescription` (boolean flag).\n * If a field declares it wants a description, both display AND edit i18n keys are generated\n * so translators can provide mode-appropriate text.\n *\n * @param schema - The Zod schema to check\n * @returns true if a description i18n key should be generated for edit mode\n */\nexport function hasDescriptionForEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIEditConfig(schema)?.showDescription === true;\n}\n\n// ============================================================================\n// BOOLEAN DISPLAY POLICY HELPERS\n// ============================================================================\n\n/**\n * Check if a string schema should render as a password input.\n * Checks IS_PASSWORD structural marker first, then STRING_UI editMode fallback.\n */\nexport function isPasswordField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_PASSWORD]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'password';\n}\n\n/**\n * Check if a string schema should render as an OTP input.\n * Checks IS_OTP structural marker first, then STRING_UI editMode fallback.\n */\nexport function isOtpField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_OTP]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'otp';\n}\n\n/**\n * Check if a string schema should render as a color input.\n * Checks IS_COLOR structural marker first, then STRING_UI editMode fallback.\n */\nexport function isColorField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_COLOR]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'color';\n}\n\n/**\n * Get OTP field params from a schema.\n * Returns the OTP params with defaults merged in if the decorator is present.\n * Defaults: maxLength=6\n */\nexport function getOtpFieldParams(schema: z.ZodTypeAny): OtpFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n const otpParams = metadata?.[ZodDecorator.IS_OTP];\n\n if (!otpParams) {\n return undefined;\n }\n\n // If params is true (enabled without params), return defaults\n if (otpParams === true) {\n return { maxLength: 6 };\n }\n\n // Merge with defaults\n return {\n maxLength: 6,\n ...otpParams,\n };\n}\n\n/**\n * Get the system enum name from a schema's metadata.\n * Returns the name string (e.g. 'AvailableCurrency') if the .systemEnum() decorator is set,\n * or undefined if the field is not a system enum.\n */\nexport function getSystemEnumName(schema: z.ZodTypeAny): string | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.SYSTEM_ENUM];\n}\n\n\n//===============================================\n// SERIALIZATION (Zod 4)\n//===============================================\n\n/**\n * Serialize a Zod schema to a JSON-serializable format.\n * Uses Zod 4 internal structure (_zod.def.type).\n */\nexport function serializeZodSchema(schema: z.ZodTypeAny | undefined, seen: Set<z.ZodTypeAny> = new Set()): SerializableZodSchema | null {\n if (!schema) return null;\n\n // Avoid circular refs\n if (seen.has(schema)) {\n return { type: 'lazy' };\n }\n seen.add(schema);\n\n // Helper to add optional/nullable flags\n function withOptionals(base: SerializableZodSchema, optional?: boolean, nullable?: boolean): SerializableZodSchema {\n return {\n ...base,\n ...(optional ? { optional: true } : {}),\n ...(nullable ? { nullable: true } : {})\n };\n }\n\n // Unwrap wrappers and track optional/nullable state (Zod 4 structure)\n const unwrapWithFlags = (s: z.ZodTypeAny): { inner: z.ZodTypeAny; optional: boolean; nullable: boolean } => {\n let cur = s;\n let optional = false;\n let nullable = false;\n\n let type = getZodType(cur);\n\n // Iteratively unwrap wrappers\n while (type) {\n switch (type) {\n case 'optional':\n optional = true;\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'nullable':\n nullable = true;\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'default':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'pipe':\n // For pipe/effects, prefer the output schema for serialization\n cur = getZodDefSchemaProperty(cur, 'out') ?? getZodDefSchemaProperty(cur, 'in') ?? cur;\n break;\n case 'readonly':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'catch':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n default:\n // Not a wrapper type, stop unwrapping\n return { inner: cur, optional, nullable };\n }\n type = getZodType(cur);\n }\n\n return { inner: cur, optional, nullable };\n };\n\n const { inner, optional, nullable } = unwrapWithFlags(schema);\n\n // Get custom field metadata from the ORIGINAL schema (not inner)\n // This ensures we find decorators at any wrapper level\n const metadata = getCustomFieldMetadata(schema);\n\n // Also check for range metadata (stored in SCHEMA_METADATA.rangeConfig)\n const rangeMetadata = getRangeMetadata(schema) ?? getRangeMetadata(inner);\n\n const withMeta = (o: SerializableZodSchema): SerializableZodSchema => {\n const hasMeta = metadata && Object.keys(metadata).length > 0;\n const hasRangeMeta = rangeMetadata !== undefined;\n\n if (!hasMeta && !hasRangeMeta) return o;\n\n // Merge custom field metadata with range metadata if present\n const fullMetadata: CustomFieldMetadata = {\n ...metadata,\n ...(hasRangeMeta ? { rangeType: rangeMetadata.type, rangeConfig: rangeMetadata } : {}),\n };\n\n return { ...o, metadata: fullMetadata };\n };\n\n // Get type from Zod 4 structure (_zod.def.type)\n const type = getZodType(inner);\n\n switch (type) {\n case 'string': {\n const description = (inner as z.ZodString).description;\n return withOptionals(withMeta({ type: 'string', ...(description ? { description } : {}) }), optional, nullable);\n }\n case 'number':\n case 'int':\n return withOptionals(withMeta({ type: 'number' }), optional, nullable);\n case 'bigint':\n return withOptionals(withMeta({ type: 'bigint' }), optional, nullable);\n case 'boolean':\n return withOptionals(withMeta({ type: 'boolean' }), optional, nullable);\n case 'date':\n return withOptionals(withMeta({ type: 'date' }), optional, nullable);\n case 'any':\n return withOptionals(withMeta({ type: 'any' }), optional, nullable);\n case 'unknown':\n return withOptionals(withMeta({ type: 'unknown' }), optional, nullable);\n case 'literal': {\n // In Zod 4 a literal's value lives in def.values (an ARRAY — z.literal(['a','b'])\n // is legal in v4); the legacy Zod-3 def.value is always undefined in v4. Reading\n // def.value alone emitted { type: 'literal', value: undefined } for EVERY literal,\n // which then round-tripped through deserializeZodSchema as z.literal(undefined).\n // Read def.values first, fall back to def.value, and take the first non-nullish\n // entry — preserving string/number/boolean literals. (A bare z.literal(null) has no\n // non-nullish entry and legitimately serializes as value: undefined.) Mirrors the\n // Zod-4 literal read in zod-to-mongoose-schema-convertor.backend.service.ts.\n const literalValues = (getZodDefArrayProperty(inner, 'values') ?? [getZodDefProperty(inner, 'value')])\n .filter((entry) => entry !== undefined && entry !== null);\n const value = literalValues[0];\n // A multi-value literal (`z.literal(['a', 'b'])`) carries EVERY value it admits (#1106): serialized\n // as `value: 'a'` alone it round-tripped as `z.literal('a')` and refused `b`. `value` stays the first\n // entry for the single-value case every reader already understands; `values` is present only when\n // there is more than one, and the deserializer prefers it.\n return withOptionals(withMeta({ type: 'literal', value, ...(literalValues.length > 1 ? { values: literalValues } : {}) }), optional, nullable);\n }\n case 'enum': {\n // In Zod 4, both z.enum() and z.enum() use type 'enum'\n // Use the existing getEnumValues helper which handles both cases\n const values = getEnumValues(inner);\n return withOptionals(withMeta({ type: 'enum', values }), optional, nullable);\n }\n case 'array': {\n const element = getZodDefSchemaProperty(inner, 'element');\n return withOptionals(withMeta({\n type: 'array',\n element: serializeZodSchema(element, new Set(seen))!\n }), optional, nullable);\n }\n case 'set': {\n const element = getZodDefSchemaProperty(inner, 'valueType');\n return withOptionals(withMeta({\n type: 'set',\n element: serializeZodSchema(element, new Set(seen))!\n }), optional, nullable);\n }\n case 'tuple': {\n const items = getZodDefArrayProperty(inner, 'items') ?? [];\n return withOptionals(withMeta({\n type: 'tuple',\n items: items\n .filter((o): o is z.ZodTypeAny => isZodTypeAny(o))\n .map(o => serializeZodSchema(o, new Set(seen))!)\n }), optional, nullable);\n }\n case 'record': {\n const keySchema = getZodDefSchemaProperty(inner, 'keyType');\n const valueSchema = getZodDefSchemaProperty(inner, 'valueType');\n return withOptionals(withMeta({\n type: 'record',\n key: serializeZodSchema(keySchema, new Set(seen))!,\n value: serializeZodSchema(valueSchema, new Set(seen))!\n }), optional, nullable);\n }\n case 'union': {\n const options = getZodDefArrayProperty(inner, 'options') ?? [];\n return withOptionals(withMeta({\n type: 'union',\n options: options\n .filter((o): o is z.ZodTypeAny => isZodTypeAny(o))\n .map(o => serializeZodSchema(o, new Set(seen))!)\n }), optional, nullable);\n }\n case 'object': {\n // Use the existing getZodObjectShape helper (Zod 4 uses .shape property)\n const shape = getZodObjectShape(inner);\n const props: Record<string, SerializableZodSchema> = {};\n for (const [k, v] of Object.entries(shape)) {\n props[k] = serializeZodSchema(v, new Set(seen)) || { type: 'unknown' };\n }\n return withOptionals(withMeta({ type: 'object', properties: props }), optional, nullable);\n }\n case 'lazy':\n return withOptionals(withMeta({ type: 'lazy' }), optional, nullable);\n default:\n return withOptionals(withMeta({ type: 'unknown' }), optional, nullable);\n }\n}\n\n\n\n/**\n * Deserialize a SerializableZodSchema back into a Zod schema.\n * - Reconstructs approximate Zod types from the descriptor\n * - Re-applies optional/nullable wrappers\n * - Re-applies SCHEMA_METADATA as decorators when possible\n */\nexport function deserializeZodSchema(desc: SerializableZodSchema | null | undefined): any {\n if (!desc) return undefined;\n\n const applyOptionalNullable = (schema: z.ZodTypeAny, d: SerializableZodSchema): z.ZodTypeAny => {\n let s: z.ZodTypeAny = schema;\n if ((d as any).optional) s = s.optional();\n if ((d as any).nullable) s = s.nullable();\n return s;\n };\n\n const applyMetadata = <T extends z.ZodTypeAny>(schema: T, metadata?: CustomFieldMetadata): T => {\n if (!metadata || Object.keys(metadata).length === 0) return schema;\n const decorators: DecoratorInput[] = [];\n\n // Boolean decorators (no params)\n if (metadata[ZodDecorator.IS_DB_INDEXED]) {\n decorators.push(ZodDecorator.IS_DB_INDEXED);\n }\n if (metadata[ZodDecorator.IS_FOREIGN_KEY]) {\n decorators.push(ZodDecorator.IS_FOREIGN_KEY);\n }\n\n // Hidden decorator (HiddenFieldParams | true)\n const hidden = metadata[ZodDecorator.IS_HIDDEN];\n if (hidden !== undefined) {\n decorators.push({\n ref: ZodDecorator.IS_HIDDEN,\n params: hidden === true ? undefined : hidden\n });\n }\n\n // Not editable decorator (NotEditableFieldParams | true)\n const notEditable = metadata[ZodDecorator.IS_NOT_EDITABLE];\n if (notEditable !== undefined) {\n decorators.push({\n ref: ZodDecorator.IS_NOT_EDITABLE,\n params: notEditable === true ? undefined : notEditable\n });\n }\n\n // Array UI decorator (ArrayUIParams) — also carries absorbed isSortable config\n const arrayUI = metadata[ZodDecorator.ARRAY_UI];\n if (arrayUI !== undefined) {\n decorators.push({\n ref: ZodDecorator.ARRAY_UI,\n params: arrayUI\n });\n }\n\n // Object UI decorator (ObjectUIParams)\n const objectUI = metadata[ZodDecorator.OBJECT_UI];\n if (objectUI !== undefined) {\n decorators.push({\n ref: ZodDecorator.OBJECT_UI,\n params: objectUI\n });\n }\n\n return (decorators.length > 0 ? addDecorators(schema, decorators) : schema) as T;\n };\n\n const build = (d: SerializableZodSchema): z.ZodTypeAny => {\n switch (d.type) {\n case 'string': {\n let s = z.string();\n // Note: description is used for API docs; set if present\n if ((d as any).description) s = s.describe((d as any).description);\n s = applyMetadata(s, (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'number': {\n const s = applyMetadata(z.number(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'bigint': {\n const s = applyMetadata(z.bigint(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'boolean': {\n const s = applyMetadata(z.boolean(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'date': {\n const s = applyMetadata(z.date(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'any': {\n const s = applyMetadata(z.any(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'unknown': {\n const s = applyMetadata(z.unknown(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'literal': {\n // `values` is the whole admitted set of a multi-value literal (#1106); `value` alone is a single one.\n const literalValues = (d as any).values as unknown[] | undefined;\n const s = applyMetadata(z.literal((literalValues && literalValues.length > 1 ? literalValues : (d as any).value) as any), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'enum': {\n const values = (d as any).values as string[];\n // If values are missing/empty, fall back to string (cannot build z.enum([]))\n const base = values && values.length > 0\n ? z.enum(values as [string, ...string[]])\n : z.string();\n const s = applyMetadata(base, (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'array': {\n const el = build((d as any).element);\n const s = applyMetadata(z.array(el), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'set': {\n const el = build((d as any).element);\n const s = applyMetadata(z.set(el), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'tuple': {\n const items = ((d as any).items as SerializableZodSchema[]).map(build);\n const s = applyMetadata(\n items.length >= 1\n ? z.tuple(items as [z.ZodTypeAny, ...z.ZodTypeAny[]])\n : z.tuple([z.any()]),\n (d as any).metadata\n );\n return applyOptionalNullable(s as any, d);\n }\n case 'record': {\n const val = build((d as any).value);\n // Zod records only support string keys; fall back to string keys for non-string keys\n const keyDesc = (d as any).key as SerializableZodSchema | undefined;\n const keySchema = keyDesc && keyDesc.type === 'string' ? z.string() : z.string();\n const s = applyMetadata(z.record(keySchema, val), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'union': {\n const options = ((d as any).options as SerializableZodSchema[]).map(build);\n const s = applyMetadata(options.length >= 2 ? z.union(options as [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]]) : (options[0] || z.any()), (d as any).metadata);\n return applyOptionalNullable(s as any, d);\n }\n case 'object': {\n const metadata = (d as any).metadata as CustomFieldMetadata | undefined;\n const rangeConfig = metadata?.rangeConfig;\n\n // Check if this is a range schema (has rangeConfig metadata)\n if (rangeConfig && rangeConfig.type) {\n const rangeSchema = z_range(rangeConfig.type, {\n fromOptional: rangeConfig.fromOptional,\n toOptional: rangeConfig.toOptional,\n min: rangeConfig.min,\n max: rangeConfig.max,\n });\n // Apply other decorators (excluding range-specific ones that are already applied)\n const metadataWithoutRange = { ...metadata };\n delete metadataWithoutRange.rangeType;\n delete metadataWithoutRange.rangeConfig;\n const s = applyMetadata(rangeSchema, metadataWithoutRange);\n return applyOptionalNullable(s, d);\n }\n\n // Regular object schema\n const props = (d as any).properties as Record<string, SerializableZodSchema>;\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [k, v] of Object.entries(props || {})) {\n shape[k] = build(v as SerializableZodSchema) || z.unknown();\n }\n const s = applyMetadata(z.object(shape), metadata);\n return applyOptionalNullable(s, d);\n }\n case 'lazy': {\n // Cannot reconstruct true lazy structure; fallback\n const s = applyMetadata(z.any(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n default: {\n const s = applyMetadata(z.unknown(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n }\n };\n\n return build(desc);\n}\n\n\n\n// =============================================================================\n// VIRTUAL FIELD UTILITIES\n// =============================================================================\n\n/**\n * Check if a schema is marked as a virtual field.\n * Virtual fields are computed at runtime and not stored in the database.\n */\nexport function isVirtualField(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_VIRTUAL);\n}\n\n\n/**\n * Get the virtual field parameters from a schema.\n * Returns undefined if the field is not virtual.\n */\nexport function getVirtualFieldParams(schema: z.ZodTypeAny): VirtualFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n const virtualMetadata = metadata[ZodDecorator.IS_VIRTUAL];\n\n if (!virtualMetadata) return undefined;\n\n return virtualMetadata as VirtualFieldParams;\n}\n\n/**\n * Get the dependencies declared for a virtual field.\n * Returns an empty array if no dependencies are declared or the field is not virtual.\n */\nexport function getVirtualFieldDependencies(schema: z.ZodTypeAny): string[] {\n const params = getVirtualFieldParams(schema);\n return params?.dependencies ?? [];\n}\n\n/**\n * Check if a virtual field needs object context (parents/children) for computation.\n */\nexport function virtualFieldNeedsObjectContext(schema: z.ZodTypeAny): boolean {\n const params = getVirtualFieldParams(schema);\n return params?.needsObjectContext ?? false;\n}\n\n/**\n * Check if a virtual field needs user context for computation.\n */\nexport function virtualFieldNeedsUserContext(schema: z.ZodTypeAny): boolean {\n const params = getVirtualFieldParams(schema);\n return params?.needsUserContext ?? false;\n}\n\n\n// =============================================================================\n// FORM SCHEMA PREPARATION UTILITIES\n// =============================================================================\n\n/**\n * Operation type for schema preparation.\n */\nexport type FormSchemaOperationType = 'CREATE' | 'UPDATE' | 'READ';\n\n/**\n * Options for prepareFormSchema utility.\n */\nexport interface PrepareFormSchemaOptions {\n /**\n * The operation type (CREATE, UPDATE, or READ).\n * Used to filter excludeFromCreate/excludeFromUpdate fields.\n */\n operationType: FormSchemaOperationType;\n\n /**\n * Whether the form is in draft mode.\n * When true, fields with isDraftRelaxed() become optional.\n * @default false\n */\n isDraftMode?: boolean;\n\n /**\n * Optional operation that behaves like a core operation.\n * For example, 'DUPLICATE' might behave like 'CREATE'.\n */\n operationLike?: FormSchemaOperationType;\n}\n\n/**\n * Check if a field should be excluded from form validation based on its decorators.\n */\nexport function shouldExcludeFieldFromForm(\n fieldSchema: z.ZodTypeAny,\n operationType: FormSchemaOperationType\n): boolean {\n // Exclude virtual fields (computed at runtime)\n if (hasDecorator(fieldSchema, ZodDecorator.IS_VIRTUAL)) {\n return true;\n }\n\n // Exclude backend-only fields (never sent to frontend)\n if (hasDecorator(fieldSchema, ZodDecorator.IS_BACKEND_ONLY)) {\n return true;\n }\n\n // Exclude hidden fields (but respect edit: false param which means visible in edit mode)\n const hiddenMetadata = getHiddenFieldMetadata(fieldSchema);\n if (hiddenMetadata !== undefined) {\n // If hiddenMetadata is true (no params), field is hidden everywhere\n if (hiddenMetadata === true) {\n return true;\n }\n // If hiddenMetadata has params, check the edit flag\n // edit: false means \"NOT hidden in edit mode\" (visible in forms)\n // edit: true or undefined means \"hidden in edit mode\"\n if (hiddenMetadata.edit !== false) {\n return true;\n }\n // edit: false - field is visible in forms, don't exclude\n }\n\n // Exclude excludeFromCreate fields for CREATE operations\n if (operationType === 'CREATE' && hasDecorator(fieldSchema, ZodDecorator.EXCLUDE_FROM_CREATE)) {\n return true;\n }\n\n // Exclude excludeFromUpdate fields for UPDATE operations\n if (operationType === 'UPDATE' && hasDecorator(fieldSchema, ZodDecorator.EXCLUDE_FROM_UPDATE)) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if a field has isDraftRelaxed decorator.\n */\nexport function isDraftRelaxedField(fieldSchema: z.ZodTypeAny): boolean {\n return hasDecorator(fieldSchema, ZodDecorator.IS_DRAFT_RELAXED);\n}\n\n/**\n * Prepare a schema for form validation by filtering out fields that shouldn't be validated\n * and adjusting optionality based on draft mode.\n *\n * This function:\n * - Removes virtual fields\n * - Removes backend-only fields\n * - Removes hidden fields\n * - Removes excludeFromCreate fields (for CREATE operations)\n * - Removes excludeFromUpdate fields (for UPDATE operations)\n * - Makes isDraftRelaxed fields optional when in draft mode\n *\n * **WARNING: Schema-level refinements (.refine(), .superRefine()) are NOT carried over.**\n * The returned schema is a new z.object() with the filtered shape — any cross-field\n * validation defined via refinements on the original schema will be silently lost.\n * This is intentional for draft mode (draft = relaxed validation), but callers using\n * this outside of draft mode should be aware that cross-field rules won't apply.\n * For non-draft form validation, use the original schema (e.g., operation.requestDto) directly.\n *\n * @param schema - The original object schema\n * @param options - Preparation options\n * @returns A new schema suitable for form validation (without schema-level refinements)\n */\nexport function prepareFormSchema<T extends z.ZodObject<z.ZodRawShape>>(\n schema: T,\n options: PrepareFormSchemaOptions\n): z.ZodObject<z.ZodRawShape> {\n const { operationType, isDraftMode = false, operationLike } = options;\n const effectiveOperationType = operationLike ?? operationType;\n\n // Get the shape of the object schema\n const shape = schema.shape as Record<string, z.ZodTypeAny>;\n const newShape: Record<string, z.ZodTypeAny> = {};\n\n // Process each field\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n // Skip fields that should be excluded\n if (shouldExcludeFieldFromForm(fieldSchema, effectiveOperationType)) {\n continue;\n }\n\n // If in draft mode and field is draft-relaxed, make it optional\n if (isDraftMode && isDraftRelaxedField(fieldSchema)) {\n // Wrap in optional if not already optional\n if (!isOptional(fieldSchema)) {\n newShape[fieldName] = fieldSchema.optional();\n } else {\n newShape[fieldName] = fieldSchema;\n }\n } else {\n newShape[fieldName] = fieldSchema;\n }\n }\n\n // Create new object schema with filtered shape\n const newSchema = z.object(newShape);\n\n // M5: Preserve schema-level metadata from original schema (e.g., isHidden, showWhen)\n // Use double assertion via unknown to handle symbol indexing safely\n type SchemaWithMetadata = { [key: symbol]: unknown };\n const schemaAsAny = schema as unknown as SchemaWithMetadata;\n const originalMetadata = schemaAsAny[SCHEMA_METADATA];\n if (originalMetadata && typeof originalMetadata === 'object') {\n const newSchemaAsAny = newSchema as unknown as SchemaWithMetadata;\n newSchemaAsAny[SCHEMA_METADATA] = { ...(originalMetadata as Record<string, unknown>) };\n }\n\n // Note: We don't copy schema-level refinements in draft mode to avoid cross-field validation\n // For non-draft mode, refinements should ideally be copied but that requires deeper schema introspection\n return newSchema;\n}\n\n/**\n * Check if a schema field is marked as ephemeral (transient response-only data).\n * Ephemeral fields are shown once (e.g., API keys upon creation) and not persisted in the UI.\n */\nexport function isEphemeralField(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_EPHEMERAL);\n}\n\n\n// =============================================================================\n// Unified {primitive}UI Reader Functions\n// =============================================================================\n// Return the full nested structure: { display?, summaryOverride?, edit? }.\n// Consumers access context-specific params via e.g. getStringUI(s)?.edit?.editMode.\n\nexport function getBooleanUI(schema: z.ZodTypeAny): BooleanUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.BOOLEAN_UI];\n}\nexport function hasBooleanUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.BOOLEAN_UI);\n}\n\nexport function getStringUI(schema: z.ZodTypeAny): StringUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.STRING_UI];\n}\nexport function hasStringUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.STRING_UI);\n}\n\nexport function getNumberUI(schema: z.ZodTypeAny): NumberUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.NUMBER_UI];\n}\nexport function hasNumberUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.NUMBER_UI);\n}\n\nexport function getEnumUI(schema: z.ZodTypeAny): EnumUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.ENUM_UI];\n}\nexport function hasEnumUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.ENUM_UI);\n}\n\nexport function getDateUI(schema: z.ZodTypeAny): DateUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DATE_UI];\n}\nexport function hasDateUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DATE_UI);\n}\n\nexport function getDateTimeUI(schema: z.ZodTypeAny): DateTimeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DATETIME_UI];\n}\nexport function hasDateTimeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DATETIME_UI);\n}\n\nexport function getTimeUI(schema: z.ZodTypeAny): TimeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.TIME_UI];\n}\nexport function hasTimeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.TIME_UI);\n}\n\nexport function getMoneyUI(schema: z.ZodTypeAny): MoneyUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.MONEY_UI];\n}\nexport function hasMoneyUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.MONEY_UI);\n}\n\nexport function getCodeUI(schema: z.ZodTypeAny): CodeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.CODE_UI];\n}\nexport function hasCodeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.CODE_UI);\n}\n\nexport function getFileUI(schema: z.ZodTypeAny): FileUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.FILE_UI];\n}\nexport function hasFileUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.FILE_UI);\n}\n\nexport function getDurationUI(schema: z.ZodTypeAny): DurationUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DURATION_UI];\n}\nexport function hasDurationUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DURATION_UI);\n}\n\nexport function getPhoneUI(schema: z.ZodTypeAny): PhoneUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.PHONE_UI];\n}\nexport function hasPhoneUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.PHONE_UI);\n}\n\nexport function getBigDecimalUI(schema: z.ZodTypeAny): BigDecimalUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.BIGDECIMAL_UI];\n}\nexport function hasBigDecimalUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.BIGDECIMAL_UI);\n}\n\nexport function getForeignKeyUI(schema: z.ZodTypeAny): ForeignKeyUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.FOREIGN_KEY_UI];\n}\nexport function hasForeignKeyUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.FOREIGN_KEY_UI);\n}\n\nexport function getArrayUI(schema: z.ZodTypeAny): ArrayUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.ARRAY_UI];\n}\nexport function hasArrayUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.ARRAY_UI);\n}\n\nexport function getObjectUI(schema: z.ZodTypeAny): ObjectUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.OBJECT_UI];\n}\nexport function hasObjectUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.OBJECT_UI);\n}\n\n\n"]}
|