79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
/**
|
|
* 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(),
|
|
}),
|
|
]),
|
|
)
|