init claude-code
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* 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(),
|
||||
}),
|
||||
]),
|
||||
)
|
||||
Reference in New Issue
Block a user