@schemashift/core 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -46,6 +46,71 @@ declare class SchemaAnalyzer {
46
46
  getProject(): Project;
47
47
  }
48
48
 
49
+ /**
50
+ * Approval Workflow for SchemaShift
51
+ *
52
+ * Provides review gates before executing migrations on shared codebases.
53
+ * Pending migrations are stored in `.schemashift/pending/`.
54
+ */
55
+ type ApprovalStatus = 'pending' | 'approved' | 'rejected';
56
+ interface MigrationRequest {
57
+ id: string;
58
+ from: string;
59
+ to: string;
60
+ files: string[];
61
+ requestedBy: string;
62
+ requestedAt: string;
63
+ status: ApprovalStatus;
64
+ reviewedBy?: string;
65
+ reviewedAt?: string;
66
+ reason?: string;
67
+ metadata?: Record<string, unknown>;
68
+ }
69
+ interface ApprovalDecision {
70
+ requestId: string;
71
+ status: 'approved' | 'rejected';
72
+ reviewedBy: string;
73
+ reason?: string;
74
+ }
75
+ interface ApprovalSummary {
76
+ pending: number;
77
+ approved: number;
78
+ rejected: number;
79
+ total: number;
80
+ }
81
+ /**
82
+ * Manages migration approval workflows with file-based persistence.
83
+ */
84
+ declare class ApprovalManager {
85
+ private pendingDir;
86
+ constructor(projectPath: string);
87
+ /**
88
+ * Create a new migration request for review.
89
+ */
90
+ createRequest(from: string, to: string, files: string[], requestedBy: string, metadata?: Record<string, unknown>): MigrationRequest;
91
+ /**
92
+ * Review (approve or reject) a pending migration request.
93
+ */
94
+ review(decision: ApprovalDecision): MigrationRequest;
95
+ /**
96
+ * Get a specific migration request by ID.
97
+ */
98
+ getRequest(id: string): MigrationRequest | null;
99
+ /**
100
+ * List all migration requests, optionally filtered by status.
101
+ */
102
+ listRequests(status?: ApprovalStatus): MigrationRequest[];
103
+ /**
104
+ * Get summary counts of all requests.
105
+ */
106
+ getSummary(): ApprovalSummary;
107
+ /**
108
+ * Check if a migration has been approved.
109
+ */
110
+ isApproved(requestId: string): boolean;
111
+ private ensureDir;
112
+ }
113
+
49
114
  /**
50
115
  * Represents a single method call in a chain.
51
116
  * e.g., `.email()` or `.min(5, 'Too short')`
@@ -232,6 +297,12 @@ declare class MigrationAuditLog {
232
297
  * Clear the audit log.
233
298
  */
234
299
  clear(): void;
300
+ /**
301
+ * Export a compliance report in SOC2 or HIPAA format.
302
+ */
303
+ exportComplianceReport(format: 'soc2' | 'hipaa'): string;
304
+ private generateSoc2Report;
305
+ private generateHipaaReport;
235
306
  private collectMetadata;
236
307
  private write;
237
308
  private hashContent;
@@ -392,8 +463,13 @@ interface ComplexityEstimate {
392
463
  warnings: ComplexityWarning[];
393
464
  riskAreas: string[];
394
465
  }
466
+ interface DurationEstimate {
467
+ label: string;
468
+ rangeMinutes: [number, number];
469
+ }
395
470
  declare class ComplexityEstimator {
396
471
  estimate(files: SourceFile[]): ComplexityEstimate;
472
+ estimateDuration(estimate: ComplexityEstimate): DurationEstimate;
397
473
  private calculateEffort;
398
474
  }
399
475
 
@@ -454,6 +530,46 @@ declare function validateConfig(config: SchemaShiftConfig): {
454
530
  declare function shouldSuppressWarning(warning: string, filePath: string, rules: WarningSuppressionRule[]): boolean;
455
531
  declare function loadConfig(configPath?: string): Promise<SchemaShiftConfig>;
456
532
 
533
+ /**
534
+ * Cross-Field Validation Pattern Helpers
535
+ *
536
+ * Provides reusable patterns for common cross-field validation scenarios.
537
+ * Generates `.superRefine()` code snippets for use during migration.
538
+ */
539
+ interface CrossFieldPattern {
540
+ name: string;
541
+ description: string;
542
+ zodCode: string;
543
+ }
544
+ /**
545
+ * Generate a `.superRefine()` snippet for conditional required fields.
546
+ * When `conditionField` has a truthy value, `requiredField` becomes required.
547
+ */
548
+ declare function requireIf(conditionField: string, requiredField: string): CrossFieldPattern;
549
+ /**
550
+ * Generate a `.superRefine()` snippet requiring at least one of the given fields.
551
+ */
552
+ declare function requireOneOf(fields: string[]): CrossFieldPattern;
553
+ /**
554
+ * Generate a `.superRefine()` snippet for mutually exclusive fields.
555
+ * Only one of the given fields can have a value at a time.
556
+ */
557
+ declare function mutuallyExclusive(fields: string[]): CrossFieldPattern;
558
+ /**
559
+ * Generate a `.superRefine()` snippet for dependent fields.
560
+ * When `primaryField` is set, all `dependentFields` become required.
561
+ */
562
+ declare function dependentFields(primaryField: string, dependents: string[]): CrossFieldPattern;
563
+ /**
564
+ * Generate a `.superRefine()` snippet for conditional validation.
565
+ * When `conditionField` equals `conditionValue`, apply validation on `targetField`.
566
+ */
567
+ declare function conditionalValidation(conditionField: string, conditionValue: string, targetField: string, validationMessage: string): CrossFieldPattern;
568
+ /**
569
+ * Detect common cross-field patterns in Yup `.when()` calls and suggest Zod equivalents.
570
+ */
571
+ declare function suggestCrossFieldPattern(whenCode: string): CrossFieldPattern | null;
572
+
457
573
  interface DependencyGraphResult {
458
574
  /** Files sorted in dependency order (dependencies first) */
459
575
  sortedFiles: string[];
@@ -691,6 +807,50 @@ declare class GovernanceEngine {
691
807
  private isSchemaExpression;
692
808
  }
693
809
 
810
+ interface FixResult {
811
+ success: boolean;
812
+ fixedCode?: string;
813
+ explanation: string;
814
+ rule: string;
815
+ lineNumber: number;
816
+ }
817
+ interface FixSummary {
818
+ totalViolations: number;
819
+ fixed: number;
820
+ skipped: number;
821
+ results: FixResult[];
822
+ }
823
+ /**
824
+ * GovernanceFixer applies auto-fixes for governance violations.
825
+ * Supports fixing: no-any-schemas, require-descriptions, require-max-length, naming-convention.
826
+ */
827
+ declare class GovernanceFixer {
828
+ private defaultMaxLength;
829
+ /**
830
+ * Set the default max length appended by the require-max-length fix.
831
+ */
832
+ setDefaultMaxLength(length: number): void;
833
+ /**
834
+ * Check if a violation is auto-fixable.
835
+ */
836
+ canFix(violation: GovernanceViolation): boolean;
837
+ /**
838
+ * Fix a single violation in a source file.
839
+ * Returns the fixed code for the entire file.
840
+ */
841
+ fix(violation: GovernanceViolation, sourceCode: string): FixResult;
842
+ /**
843
+ * Fix all fixable violations in a source file.
844
+ * Applies fixes from bottom to top to preserve line numbers.
845
+ */
846
+ fixAll(violations: GovernanceViolation[], sourceCode: string): FixSummary;
847
+ private fixNoAny;
848
+ private fixRequireDescription;
849
+ private fixRequireMaxLength;
850
+ private fixNamingConvention;
851
+ private fixRequireSafeParse;
852
+ }
853
+
694
854
  /**
695
855
  * Governance Rule Templates
696
856
  *
@@ -726,6 +886,42 @@ declare function getGovernanceTemplatesByCategory(category: GovernanceTemplate['
726
886
  */
727
887
  declare function getGovernanceTemplateNames(): string[];
728
888
 
889
+ interface GraphNode {
890
+ filePath: string;
891
+ shortPath: string;
892
+ schemaLibrary?: string;
893
+ schemaCount: number;
894
+ }
895
+ interface GraphExportOptions {
896
+ /** Color-code nodes by schema library */
897
+ colorByLibrary?: boolean;
898
+ /** Highlight circular dependencies in red */
899
+ highlightCircular?: boolean;
900
+ /** Only show files using a specific library */
901
+ filterLibrary?: string;
902
+ /** File metadata for enriched graph display */
903
+ nodeMetadata?: Map<string, {
904
+ library?: string;
905
+ schemaCount?: number;
906
+ }>;
907
+ }
908
+ /**
909
+ * Exports dependency graphs in DOT (Graphviz) and Mermaid formats.
910
+ */
911
+ declare class GraphExporter {
912
+ /**
913
+ * Export dependency graph as DOT format for Graphviz.
914
+ */
915
+ exportDot(graph: DependencyGraphResult, options?: GraphExportOptions): string;
916
+ /**
917
+ * Export dependency graph as Mermaid diagram syntax.
918
+ */
919
+ exportMermaid(graph: DependencyGraphResult, options?: GraphExportOptions): string;
920
+ private shortenPath;
921
+ private toNodeId;
922
+ private toMermaidId;
923
+ }
924
+
729
925
  interface IncrementalState {
730
926
  migrationId: string;
731
927
  from: SchemaLibrary;
@@ -752,10 +948,144 @@ declare class IncrementalTracker {
752
948
  total: number;
753
949
  percent: number;
754
950
  } | null;
951
+ /**
952
+ * Get a canary batch — a percentage of remaining files, sorted simplest first.
953
+ * Used for phased rollouts where you migrate a small batch, verify, then continue.
954
+ */
955
+ getCanaryBatch(percent: number, fileSizes?: Map<string, number>): string[];
755
956
  clear(): void;
756
957
  private saveState;
757
958
  }
758
959
 
960
+ interface MigrationTemplateStep {
961
+ from: string;
962
+ to: string;
963
+ description: string;
964
+ }
965
+ interface MigrationPreCheck {
966
+ description: string;
967
+ command?: string;
968
+ }
969
+ interface MigrationPostStep {
970
+ description: string;
971
+ command?: string;
972
+ }
973
+ interface PackageChange {
974
+ action: 'install' | 'remove' | 'upgrade';
975
+ package: string;
976
+ version?: string;
977
+ }
978
+ interface MigrationTemplate {
979
+ name: string;
980
+ description: string;
981
+ category: 'form-migration' | 'framework-upgrade' | 'library-switch' | 'monorepo';
982
+ migrationSteps: MigrationTemplateStep[];
983
+ preChecks: MigrationPreCheck[];
984
+ postSteps: MigrationPostStep[];
985
+ packageChanges: PackageChange[];
986
+ recommendedFlags: string[];
987
+ estimatedEffort: 'trivial' | 'low' | 'moderate' | 'high';
988
+ }
989
+ /**
990
+ * Get a migration template by name.
991
+ */
992
+ declare function getMigrationTemplate(name: string): MigrationTemplate | undefined;
993
+ /**
994
+ * Get all available migration template names.
995
+ */
996
+ declare function getMigrationTemplateNames(): string[];
997
+ /**
998
+ * Get all templates for a specific category.
999
+ */
1000
+ declare function getMigrationTemplatesByCategory(category: MigrationTemplate['category']): MigrationTemplate[];
1001
+ /**
1002
+ * Get all built-in migration templates.
1003
+ */
1004
+ declare function getAllMigrationTemplates(): MigrationTemplate[];
1005
+ /**
1006
+ * Validate a custom migration template.
1007
+ */
1008
+ declare function validateMigrationTemplate(template: MigrationTemplate): {
1009
+ valid: boolean;
1010
+ errors: string[];
1011
+ };
1012
+
1013
+ /**
1014
+ * Webhook Notification System for SchemaShift
1015
+ *
1016
+ * Sends migration event notifications to external services
1017
+ * (Slack, Teams, Zapier, custom webhooks, etc.)
1018
+ */
1019
+ type MigrationEventType = 'migration_started' | 'migration_completed' | 'migration_failed' | 'governance_violation' | 'drift_detected';
1020
+ interface MigrationEvent {
1021
+ type: MigrationEventType;
1022
+ timestamp: string;
1023
+ project?: string;
1024
+ details: Record<string, unknown>;
1025
+ }
1026
+ interface NotificationResult {
1027
+ success: boolean;
1028
+ statusCode?: number;
1029
+ error?: string;
1030
+ }
1031
+ type WebhookType = 'generic' | 'slack' | 'teams';
1032
+ interface WebhookConfig {
1033
+ url: string;
1034
+ events?: MigrationEventType[];
1035
+ headers?: Record<string, string>;
1036
+ secret?: string;
1037
+ type?: WebhookType;
1038
+ }
1039
+ /**
1040
+ * Send migration event notifications via webhooks.
1041
+ */
1042
+ declare class WebhookNotifier {
1043
+ private webhooks;
1044
+ constructor(webhooks: WebhookConfig[]);
1045
+ /**
1046
+ * Create a migration event with current timestamp.
1047
+ */
1048
+ createEvent(type: MigrationEventType, details: Record<string, unknown>, project?: string): MigrationEvent;
1049
+ /**
1050
+ * Send an event to all matching webhooks.
1051
+ */
1052
+ send(event: MigrationEvent): Promise<NotificationResult[]>;
1053
+ /**
1054
+ * Format event as Slack Block Kit message.
1055
+ */
1056
+ formatSlackPayload(event: MigrationEvent): Record<string, unknown>;
1057
+ /**
1058
+ * Format event as Microsoft Teams Adaptive Card.
1059
+ */
1060
+ formatTeamsPayload(event: MigrationEvent): Record<string, unknown>;
1061
+ private getEventEmoji;
1062
+ private getEventTitle;
1063
+ /**
1064
+ * Send event to a single webhook endpoint.
1065
+ */
1066
+ private sendToWebhook;
1067
+ /**
1068
+ * Convenience: send a migration_started event.
1069
+ */
1070
+ notifyMigrationStarted(from: string, to: string, fileCount: number, project?: string): Promise<NotificationResult[]>;
1071
+ /**
1072
+ * Convenience: send a migration_completed event.
1073
+ */
1074
+ notifyMigrationCompleted(from: string, to: string, fileCount: number, warningCount: number, project?: string): Promise<NotificationResult[]>;
1075
+ /**
1076
+ * Convenience: send a migration_failed event.
1077
+ */
1078
+ notifyMigrationFailed(from: string, to: string, error: string, project?: string): Promise<NotificationResult[]>;
1079
+ /**
1080
+ * Convenience: send a governance_violation event.
1081
+ */
1082
+ notifyGovernanceViolation(violationCount: number, rules: string[], project?: string): Promise<NotificationResult[]>;
1083
+ /**
1084
+ * Convenience: send a drift_detected event.
1085
+ */
1086
+ notifyDriftDetected(modifiedFiles: number, addedFiles: number, removedFiles: number, project?: string): Promise<NotificationResult[]>;
1087
+ }
1088
+
759
1089
  interface PackageUpdatePlan {
760
1090
  add: Record<string, string>;
761
1091
  remove: string[];
@@ -822,6 +1152,56 @@ declare class PluginLoader {
822
1152
  private validatePlugin;
823
1153
  }
824
1154
 
1155
+ interface VerificationSample {
1156
+ name: string;
1157
+ input: unknown;
1158
+ expectedValid: boolean;
1159
+ }
1160
+ interface SchemaVerificationResult {
1161
+ schemaName: string;
1162
+ filePath: string;
1163
+ totalSamples: number;
1164
+ matchingSamples: number;
1165
+ mismatches: VerificationMismatch[];
1166
+ parityScore: number;
1167
+ }
1168
+ interface VerificationMismatch {
1169
+ sampleName: string;
1170
+ input: unknown;
1171
+ sourceResult: {
1172
+ valid: boolean;
1173
+ error?: string;
1174
+ };
1175
+ targetResult: {
1176
+ valid: boolean;
1177
+ error?: string;
1178
+ };
1179
+ }
1180
+ interface VerificationReport {
1181
+ from: string;
1182
+ to: string;
1183
+ totalSchemas: number;
1184
+ results: SchemaVerificationResult[];
1185
+ overallParityScore: number;
1186
+ timestamp: string;
1187
+ }
1188
+ /**
1189
+ * Extracts schema definition names from source file text.
1190
+ */
1191
+ declare function extractSchemaNames(sourceText: string): string[];
1192
+ /**
1193
+ * Generates test samples based on detected schema patterns.
1194
+ */
1195
+ declare function generateSamples(sourceText: string, schemaName: string, maxSamples: number): VerificationSample[];
1196
+ /**
1197
+ * Creates a verification report comparing source and target schemas.
1198
+ */
1199
+ declare function createVerificationReport(from: string, to: string, results: SchemaVerificationResult[]): VerificationReport;
1200
+ /**
1201
+ * Format verification report for terminal output.
1202
+ */
1203
+ declare function formatVerificationReport(report: VerificationReport): string;
1204
+
825
1205
  interface StandardSchemaInfo {
826
1206
  detected: boolean;
827
1207
  compatibleLibraries: Array<{
@@ -834,6 +1214,38 @@ interface StandardSchemaInfo {
834
1214
  }
835
1215
  declare function detectStandardSchema(projectPath: string): StandardSchemaInfo;
836
1216
 
1217
+ interface StandardSchemaAdvisory {
1218
+ shouldConsiderAdapter: boolean;
1219
+ reason: string;
1220
+ adapterExample?: string;
1221
+ migrationAdvantages: string[];
1222
+ adapterAdvantages: string[];
1223
+ recommendation: 'migrate' | 'adapter' | 'either';
1224
+ }
1225
+ /**
1226
+ * Advises whether to do a full migration or use Standard Schema adapters.
1227
+ *
1228
+ * When both source and target libraries support Standard Schema 1.0,
1229
+ * users may not need a full migration — they can use adapters instead.
1230
+ */
1231
+ declare class StandardSchemaAdvisor {
1232
+ /**
1233
+ * Check if a schema library supports Standard Schema.
1234
+ */
1235
+ supportsStandardSchema(library: SchemaLibrary | string): boolean;
1236
+ /**
1237
+ * Generate advisory for a given migration path.
1238
+ */
1239
+ advise(from: SchemaLibrary | string, to: SchemaLibrary | string): StandardSchemaAdvisory;
1240
+ /**
1241
+ * Analyze a project and provide advisory based on detected libraries.
1242
+ */
1243
+ adviseFromProject(projectPath: string, from: SchemaLibrary | string, to: SchemaLibrary | string): StandardSchemaAdvisory & {
1244
+ projectInfo: StandardSchemaInfo;
1245
+ };
1246
+ private generateAdapterExample;
1247
+ }
1248
+
837
1249
  interface ScaffoldedTest {
838
1250
  filePath: string;
839
1251
  testCode: string;
@@ -894,4 +1306,4 @@ declare class TypeDedupDetector {
894
1306
  private namesRelated;
895
1307
  }
896
1308
 
897
- export { type AnalysisResult, type AuditEntry, type AuditEntryMetadata, type AuditLog, type BehavioralAnalysisResult, type BehavioralCategory, type BehavioralWarning, BehavioralWarningAnalyzer, BundleEstimator, type BundleSizeEstimate, type CallChainInfo, type ChainResult, type ChainStep, type ChainStepResult, type ChainValidation, CompatibilityAnalyzer, type CompatibilityResult, type ComplexityEstimate, ComplexityEstimator, type ComplexityWarning, type CustomRule, type DependencyGraphResult, type DetailedAnalysisResult, DetailedAnalyzer, DriftDetector, type DriftModification, type DriftResult, type DuplicateTypeCandidate, EcosystemAnalyzer, type EcosystemIssue, type EcosystemReport, type EffortLevel, type FileComplexity, type FormLibraryDetection, FormResolverMigrator, type FormResolverResult, GOVERNANCE_TEMPLATES, GovernanceEngine, type GovernanceResult, type GovernanceRuleConfig, type GovernanceRuleFunction, type GovernanceTemplate, type GovernanceViolation, type IncrementalState, IncrementalTracker, type LibraryBundleInfo, type LibraryVersionInfo, type MethodCallInfo, MigrationAuditLog, MigrationChain, type MigrationReadiness, type MonorepoInfo, type MonorepoPackage, MonorepoResolver, type PackageUpdatePlan, PackageUpdater, type ParallelBatch, type PerformanceAnalysisResult, PerformanceAnalyzer, type PerformanceCategory, type PerformanceWarning, type PluginLoadResult, PluginLoader, type ScaffoldedTest, SchemaAnalyzer, type SchemaComplexity, SchemaDependencyResolver, type SchemaFileSnapshot, type SchemaInfo, type SchemaLibrary, type SchemaShiftConfig, type SchemaShiftPlugin, type SchemaSnapshot, type StandardSchemaInfo, type TestScaffoldResult, TestScaffolder, TransformEngine, type TransformError, type TransformHandler, type TransformOptions, type TransformResult, TypeDedupDetector, type TypeDedupResult, type VersionIssue, type WarningSuppressionRule, type WorkspaceManager, buildCallChain, computeParallelBatches, detectFormLibraries, detectSchemaLibrary, detectStandardSchema, getGovernanceTemplate, getGovernanceTemplateNames, getGovernanceTemplatesByCategory, isInsideComment, isInsideStringLiteral, loadConfig, parseCallChain, shouldSuppressWarning, startsWithBase, transformMethodChain, validateConfig };
1309
+ export { type AnalysisResult, type ApprovalDecision, ApprovalManager, type ApprovalStatus, type ApprovalSummary, type AuditEntry, type AuditEntryMetadata, type AuditLog, type BehavioralAnalysisResult, type BehavioralCategory, type BehavioralWarning, BehavioralWarningAnalyzer, BundleEstimator, type BundleSizeEstimate, type CallChainInfo, type ChainResult, type ChainStep, type ChainStepResult, type ChainValidation, CompatibilityAnalyzer, type CompatibilityResult, type ComplexityEstimate, ComplexityEstimator, type ComplexityWarning, type CrossFieldPattern, type CustomRule, type DependencyGraphResult, type DetailedAnalysisResult, DetailedAnalyzer, DriftDetector, type DriftModification, type DriftResult, type DuplicateTypeCandidate, type DurationEstimate, EcosystemAnalyzer, type EcosystemIssue, type EcosystemReport, type EffortLevel, type FileComplexity, type FixResult, type FixSummary, type FormLibraryDetection, FormResolverMigrator, type FormResolverResult, GOVERNANCE_TEMPLATES, GovernanceEngine, GovernanceFixer, type GovernanceResult, type GovernanceRuleConfig, type GovernanceRuleFunction, type GovernanceTemplate, type GovernanceViolation, type GraphExportOptions, GraphExporter, type GraphNode, type IncrementalState, IncrementalTracker, type LibraryBundleInfo, type LibraryVersionInfo, type MethodCallInfo, MigrationAuditLog, MigrationChain, type MigrationEvent, type MigrationEventType, type MigrationReadiness, type MigrationRequest, type MigrationTemplate, type MigrationTemplateStep, type MonorepoInfo, type MonorepoPackage, MonorepoResolver, type NotificationResult, type PackageChange, type PackageUpdatePlan, PackageUpdater, type ParallelBatch, type PerformanceAnalysisResult, PerformanceAnalyzer, type PerformanceCategory, type PerformanceWarning, type PluginLoadResult, PluginLoader, type ScaffoldedTest, SchemaAnalyzer, type SchemaComplexity, SchemaDependencyResolver, type SchemaFileSnapshot, type SchemaInfo, type SchemaLibrary, type SchemaShiftConfig, type SchemaShiftPlugin, type SchemaSnapshot, type SchemaVerificationResult, StandardSchemaAdvisor, type StandardSchemaAdvisory, type StandardSchemaInfo, type TestScaffoldResult, TestScaffolder, TransformEngine, type TransformError, type TransformHandler, type TransformOptions, type TransformResult, TypeDedupDetector, type TypeDedupResult, type VerificationMismatch, type VerificationReport, type VerificationSample, type VersionIssue, type WarningSuppressionRule, type WebhookConfig, WebhookNotifier, type WebhookType, type WorkspaceManager, buildCallChain, computeParallelBatches, conditionalValidation, createVerificationReport, dependentFields, detectFormLibraries, detectSchemaLibrary, detectStandardSchema, extractSchemaNames, formatVerificationReport, generateSamples, getAllMigrationTemplates, getGovernanceTemplate, getGovernanceTemplateNames, getGovernanceTemplatesByCategory, getMigrationTemplate, getMigrationTemplateNames, getMigrationTemplatesByCategory, isInsideComment, isInsideStringLiteral, loadConfig, mutuallyExclusive, parseCallChain, requireIf, requireOneOf, shouldSuppressWarning, startsWithBase, suggestCrossFieldPattern, transformMethodChain, validateConfig, validateMigrationTemplate };