π File detail
utils/permissions/PermissionUpdateSchema.ts
π― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes permissionUpdateDestinationSchema and permissionUpdateSchema β mainly functions, hooks, or classes. Dependencies touch schema validation. It composes internal code from types, lazySchema, PermissionMode, and PermissionRule (relative imports). What the file header says: 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.
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
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.
π€ Exports (heuristic)
permissionUpdateDestinationSchemapermissionUpdateSchema
π External import roots
Package roots from from "β¦" (relative paths omitted).
zod
π₯οΈ Source preview
/**
* 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(),
}),
]),
)