forked from ultraworkers/claw-code
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPermissionUpdateSchema.ts
More file actions
78 lines (75 loc) · 2.35 KB
/
Copy pathPermissionUpdateSchema.ts
File metadata and controls
78 lines (75 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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(),
}),
]),
)