/** * PZG Pro - Comment Parser * * Parses policy and PII annotations from Prisma schema comments */ export interface PolicyRule { type: 'read' | 'write' | 'deny' | 'update' | 'delete' | 'create'; subtype?: 'where' | 'fields' | 'values'; condition: string; field?: string; fields?: string[]; modelName?: string; operator?: 'in' | 'not_in' | 'equals' | 'not_equals' | 'contains' | 'starts_with' | 'ends_with' | '==' | '!='; contextVariable?: string; } export interface PIIRule { type: 'pii'; dataType: 'email' | 'phone' | 'ssn' | 'credit_card' | 'custom'; redactLogs?: boolean; maskType?: 'partial' | 'full' | 'hash'; field?: string; modelName?: string; } export interface TenantRule { type: 'tenant'; field: string; fields?: string[]; tenantType?: 'string' | 'number' | 'uuid'; tenantTypes?: ('string' | 'number' | 'uuid')[]; required?: boolean; modelName?: string; hierarchy?: { parent?: string; children?: string[]; depth?: number; }; sharding?: { strategy: 'hash' | 'range' | 'directory'; shardCount?: number; shardField?: string; }; inheritance?: { inheritsFrom?: string; cascadeDelete?: boolean; inheritanceType: 'single-table' | 'joined-table' | 'table-per-class'; }; validation?: { format?: 'uuid' | 'slug' | 'domain' | 'custom'; pattern?: string; length?: { min?: number; max?: number; }; enum?: string[]; }; performance?: { indexStrategy: 'btree' | 'hash' | 'gin' | 'gist'; partitioning?: 'range' | 'hash' | 'list'; caching?: { ttl: number; strategy: 'redis' | 'memory'; }; }; } export interface ModelPolicies { modelName: string; policies: PolicyRule[]; piiRules: PIIRule[]; tenantRules: TenantRule[]; } /** * Parse a Prisma schema file and extract all policy/PII rules */ export declare function parseSchemaComments(schemaContent: string): ModelPolicies[]; /** * Get tenant fields for a specific model */ export declare function getTenantFields(modelPolicies: ModelPolicies[]): Record; /** * Detect tenant fields automatically from field names (fallback) */ export declare function detectTenantFieldsFromSchema(schemaContent: string): Record; /** * Get all fields that have read restrictions for a model */ export declare function getReadRestrictedFields(modelPolicies: ModelPolicies): string[]; /** * Get all fields that have write restrictions for a model */ export declare function getWriteRestrictedFields(modelPolicies: ModelPolicies): string[]; /** * Get all PII fields for a model */ export declare function getPIIFields(modelPolicies: ModelPolicies): PIIRule[]; /** * Check if a field has a specific policy condition */ export declare function hasPolicy(modelPolicies: ModelPolicies, field: string, type: 'read' | 'write' | 'deny' | 'update' | 'delete' | 'create'): PolicyRule | undefined; /** * Get tenant isolation policies (where clauses) */ export declare function getTenantPolicies(modelPolicies: ModelPolicies): PolicyRule[]; /** * Get field-level restriction policies */ export declare function getFieldRestrictions(modelPolicies: ModelPolicies, operation: 'read' | 'update' | 'create'): PolicyRule[]; /** * Get value validation policies */ export declare function getValuePolicies(modelPolicies: ModelPolicies): PolicyRule[]; /** * Generate where clause for tenant isolation */ export declare function generateTenantWhereClause(policies: PolicyRule[], contextVar?: string): string;