| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /**
- * Zod schemas for permission updates.
- *
- * This file is intentionally kept minimal with no complex dependencies
- * so it can be safely imported by src/types/hooks.ts without creating
- * circular dependencies.
- */
- import z from 'zod/v4'
- // Types extracted to src/types/permissions.ts to break import cycles
- import type {
- PermissionUpdate,
- PermissionUpdateDestination,
- } from '../../types/permissions.js'
- import { lazySchema } from '../lazySchema.js'
- import { externalPermissionModeSchema } from './PermissionMode.js'
- import {
- permissionBehaviorSchema,
- permissionRuleValueSchema,
- } from './PermissionRule.js'
- // Re-export for backwards compatibility
- export type { PermissionUpdate, PermissionUpdateDestination }
- /**
- * PermissionUpdateDestination is where a new permission rule should be saved to.
- */
- export const permissionUpdateDestinationSchema = lazySchema(() =>
- z.enum([
- // User settings (global)
- 'userSettings',
- // Project settings (shared per-directory)
- 'projectSettings',
- // Local settings (gitignored)
- 'localSettings',
- // In-memory for the current session only
- 'session',
- // From the command line arguments
- 'cliArg',
- ]),
- )
- export const permissionUpdateSchema = lazySchema(() =>
- z.discriminatedUnion('type', [
- z.object({
- type: z.literal('addRules'),
- rules: z.array(permissionRuleValueSchema()),
- behavior: permissionBehaviorSchema(),
- destination: permissionUpdateDestinationSchema(),
- }),
- z.object({
- type: z.literal('replaceRules'),
- rules: z.array(permissionRuleValueSchema()),
- behavior: permissionBehaviorSchema(),
- destination: permissionUpdateDestinationSchema(),
- }),
- z.object({
- type: z.literal('removeRules'),
- rules: z.array(permissionRuleValueSchema()),
- behavior: permissionBehaviorSchema(),
- destination: permissionUpdateDestinationSchema(),
- }),
- z.object({
- type: z.literal('setMode'),
- mode: externalPermissionModeSchema(),
- destination: permissionUpdateDestinationSchema(),
- }),
- z.object({
- type: z.literal('addDirectories'),
- directories: z.array(z.string()),
- destination: permissionUpdateDestinationSchema(),
- }),
- z.object({
- type: z.literal('removeDirectories'),
- directories: z.array(z.string()),
- destination: permissionUpdateDestinationSchema(),
- }),
- ]),
- )
|