@schemashift/core 0.3.0 → 0.8.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/README.md +330 -41
- package/dist/index.cjs +1644 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +416 -11
- package/dist/index.d.ts +416 -11
- package/dist/index.js +1621 -1
- package/dist/index.js.map +1 -1
- package/package.json +18 -3
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Project, SourceFile } from 'ts-morph';
|
|
1
|
+
import { Project, CallExpression, Node, SourceFile } from 'ts-morph';
|
|
2
2
|
|
|
3
3
|
type SchemaLibrary = 'zod' | 'zod-v3' | 'yup' | 'joi' | 'io-ts' | 'valibot' | 'v4' | 'unknown';
|
|
4
4
|
interface SchemaInfo {
|
|
@@ -46,6 +46,215 @@ declare class SchemaAnalyzer {
|
|
|
46
46
|
getProject(): Project;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Represents a single method call in a chain.
|
|
51
|
+
* e.g., `.email()` or `.min(5, 'Too short')`
|
|
52
|
+
*/
|
|
53
|
+
interface MethodCallInfo {
|
|
54
|
+
name: string;
|
|
55
|
+
args: string[];
|
|
56
|
+
node: CallExpression;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Represents a full call chain like `yup.string().email().min(5)`.
|
|
60
|
+
*/
|
|
61
|
+
interface CallChainInfo {
|
|
62
|
+
/** The base expression before the first method, e.g., 'yup' or 'Joi' */
|
|
63
|
+
base: string;
|
|
64
|
+
/** The initial factory call, e.g., 'string' from `yup.string()` */
|
|
65
|
+
factoryMethod: string;
|
|
66
|
+
/** Arguments to the factory method */
|
|
67
|
+
factoryArgs: string[];
|
|
68
|
+
/** All chained method calls after the factory */
|
|
69
|
+
methods: MethodCallInfo[];
|
|
70
|
+
/** The outermost call expression node */
|
|
71
|
+
rootNode: CallExpression;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Parse a method call chain from the outermost CallExpression.
|
|
75
|
+
*
|
|
76
|
+
* Given `yup.string().email().min(5)`, returns:
|
|
77
|
+
* ```
|
|
78
|
+
* {
|
|
79
|
+
* base: 'yup',
|
|
80
|
+
* factoryMethod: 'string',
|
|
81
|
+
* factoryArgs: [],
|
|
82
|
+
* methods: [
|
|
83
|
+
* { name: 'email', args: [] },
|
|
84
|
+
* { name: 'min', args: ['5'] }
|
|
85
|
+
* ]
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* Returns `undefined` if the node is not a recognizable method chain
|
|
90
|
+
* (e.g., it's a standalone function call).
|
|
91
|
+
*/
|
|
92
|
+
declare function parseCallChain(node: CallExpression): CallChainInfo | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* Build a method chain string from parts.
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* buildCallChain('z', 'string', [], [
|
|
98
|
+
* { name: 'email', args: [] },
|
|
99
|
+
* { name: 'min', args: ['5'] },
|
|
100
|
+
* ])
|
|
101
|
+
* // => 'z.string().email().min(5)'
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
declare function buildCallChain(base: string, factoryMethod: string, factoryArgs: string[], methods: Array<{
|
|
105
|
+
name: string;
|
|
106
|
+
args: string[];
|
|
107
|
+
}>): string;
|
|
108
|
+
/**
|
|
109
|
+
* Check whether a node is inside a string literal or template literal.
|
|
110
|
+
*/
|
|
111
|
+
declare function isInsideStringLiteral(node: Node): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Check whether a node is inside a comment.
|
|
114
|
+
* Since ts-morph's AST doesn't include comment nodes in the tree,
|
|
115
|
+
* we check by position against leading/trailing comment ranges.
|
|
116
|
+
*/
|
|
117
|
+
declare function isInsideComment(node: Node, sourceFile: SourceFile): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Check if a call expression starts with a specific base identifier.
|
|
120
|
+
* Traverses into the chain to find the root identifier.
|
|
121
|
+
*
|
|
122
|
+
* e.g., `startsWithBase(node, 'yup')` returns true for `yup.string().email()`
|
|
123
|
+
*/
|
|
124
|
+
declare function startsWithBase(node: CallExpression, ...bases: string[]): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Transform a method chain by applying a mapping function to each method.
|
|
127
|
+
* Returns the rebuilt chain as a string, or undefined if no transformation was needed.
|
|
128
|
+
*
|
|
129
|
+
* The mapper receives each method and can return:
|
|
130
|
+
* - `{ name, args }` to transform the method
|
|
131
|
+
* - `null` to remove the method from the chain
|
|
132
|
+
* - `undefined` to keep it unchanged
|
|
133
|
+
* - An array to expand into multiple methods
|
|
134
|
+
*/
|
|
135
|
+
declare function transformMethodChain(chain: CallChainInfo, newBase: string, factoryMapper: (method: string, args: string[]) => {
|
|
136
|
+
name: string;
|
|
137
|
+
args: string[];
|
|
138
|
+
} | undefined, methodMapper: (method: MethodCallInfo) => {
|
|
139
|
+
name: string;
|
|
140
|
+
args: string[];
|
|
141
|
+
} | {
|
|
142
|
+
name: string;
|
|
143
|
+
args: string[];
|
|
144
|
+
}[] | null | undefined): string;
|
|
145
|
+
|
|
146
|
+
interface TransformHandler {
|
|
147
|
+
transform(sourceFile: SourceFile, options: TransformOptions): TransformResult;
|
|
148
|
+
}
|
|
149
|
+
declare class TransformEngine {
|
|
150
|
+
private handlers;
|
|
151
|
+
registerHandler(from: SchemaLibrary, to: SchemaLibrary, handler: TransformHandler): void;
|
|
152
|
+
getHandler(from: SchemaLibrary, to: SchemaLibrary): TransformHandler | undefined;
|
|
153
|
+
hasHandler(from: SchemaLibrary, to: SchemaLibrary): boolean;
|
|
154
|
+
getSupportedPaths(): Array<{
|
|
155
|
+
from: SchemaLibrary;
|
|
156
|
+
to: SchemaLibrary;
|
|
157
|
+
}>;
|
|
158
|
+
transform(sourceFile: SourceFile, from: SchemaLibrary, to: SchemaLibrary, options: TransformOptions): TransformResult;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
interface ChainStep {
|
|
162
|
+
from: SchemaLibrary;
|
|
163
|
+
to: SchemaLibrary;
|
|
164
|
+
}
|
|
165
|
+
interface ChainValidation {
|
|
166
|
+
valid: boolean;
|
|
167
|
+
errors: string[];
|
|
168
|
+
steps: ChainStep[];
|
|
169
|
+
}
|
|
170
|
+
interface ChainStepResult {
|
|
171
|
+
step: ChainStep;
|
|
172
|
+
result: TransformResult;
|
|
173
|
+
}
|
|
174
|
+
interface ChainResult {
|
|
175
|
+
success: boolean;
|
|
176
|
+
steps: ChainStepResult[];
|
|
177
|
+
finalCode?: string;
|
|
178
|
+
errors: string[];
|
|
179
|
+
}
|
|
180
|
+
declare class MigrationChain {
|
|
181
|
+
parseChain(chain: string): ChainStep[];
|
|
182
|
+
validateChain(steps: ChainStep[], engine: TransformEngine): ChainValidation;
|
|
183
|
+
executeChain(sourceCode: string, filePath: string, steps: ChainStep[], engine: TransformEngine): ChainResult;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
interface EcosystemIssue {
|
|
187
|
+
package: string;
|
|
188
|
+
installedVersion: string;
|
|
189
|
+
migration: string;
|
|
190
|
+
issue: string;
|
|
191
|
+
suggestion: string;
|
|
192
|
+
severity: 'info' | 'warning' | 'error';
|
|
193
|
+
category: 'orm' | 'form' | 'api' | 'validation-util' | 'openapi' | 'ui';
|
|
194
|
+
upgradeCommand?: string;
|
|
195
|
+
}
|
|
196
|
+
interface EcosystemReport {
|
|
197
|
+
dependencies: EcosystemIssue[];
|
|
198
|
+
warnings: string[];
|
|
199
|
+
blockers: string[];
|
|
200
|
+
}
|
|
201
|
+
declare class EcosystemAnalyzer {
|
|
202
|
+
analyze(projectPath: string, from: string, to: string): EcosystemReport;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
interface VersionIssue {
|
|
206
|
+
library: string;
|
|
207
|
+
detectedVersion: string;
|
|
208
|
+
issue: string;
|
|
209
|
+
suggestion: string;
|
|
210
|
+
severity: 'info' | 'warning' | 'error';
|
|
211
|
+
}
|
|
212
|
+
interface CompatibilityResult {
|
|
213
|
+
detectedVersions: Array<{
|
|
214
|
+
library: string;
|
|
215
|
+
version: string;
|
|
216
|
+
}>;
|
|
217
|
+
issues: VersionIssue[];
|
|
218
|
+
ecosystemIssues: EcosystemIssue[];
|
|
219
|
+
overallScore: number;
|
|
220
|
+
}
|
|
221
|
+
declare class CompatibilityAnalyzer {
|
|
222
|
+
private ecosystemAnalyzer;
|
|
223
|
+
detectVersions(projectPath: string): Array<{
|
|
224
|
+
library: string;
|
|
225
|
+
version: string;
|
|
226
|
+
}>;
|
|
227
|
+
checkCompatibility(projectPath: string, from?: string, to?: string): CompatibilityResult;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
type EffortLevel = 'trivial' | 'low' | 'moderate' | 'high' | 'extreme';
|
|
231
|
+
interface ComplexityWarning {
|
|
232
|
+
file: string;
|
|
233
|
+
line?: number;
|
|
234
|
+
message: string;
|
|
235
|
+
severity: 'info' | 'warning' | 'error';
|
|
236
|
+
}
|
|
237
|
+
interface FileComplexity {
|
|
238
|
+
filePath: string;
|
|
239
|
+
schemaCount: number;
|
|
240
|
+
advancedPatterns: string[];
|
|
241
|
+
chainDepth: number;
|
|
242
|
+
lineCount: number;
|
|
243
|
+
}
|
|
244
|
+
interface ComplexityEstimate {
|
|
245
|
+
effort: EffortLevel;
|
|
246
|
+
totalSchemas: number;
|
|
247
|
+
totalFiles: number;
|
|
248
|
+
advancedPatternCount: number;
|
|
249
|
+
files: FileComplexity[];
|
|
250
|
+
warnings: ComplexityWarning[];
|
|
251
|
+
riskAreas: string[];
|
|
252
|
+
}
|
|
253
|
+
declare class ComplexityEstimator {
|
|
254
|
+
estimate(files: SourceFile[]): ComplexityEstimate;
|
|
255
|
+
private calculateEffort;
|
|
256
|
+
}
|
|
257
|
+
|
|
49
258
|
interface SchemaShiftConfig {
|
|
50
259
|
include: string[];
|
|
51
260
|
exclude: string[];
|
|
@@ -65,7 +274,22 @@ interface SchemaShiftConfig {
|
|
|
65
274
|
dir?: string;
|
|
66
275
|
};
|
|
67
276
|
customRules?: CustomRule[];
|
|
277
|
+
suppressWarnings?: WarningSuppressionRule[];
|
|
68
278
|
ci?: boolean;
|
|
279
|
+
plugins?: string[];
|
|
280
|
+
governance?: {
|
|
281
|
+
rules: Record<string, GovernanceRuleConfig>;
|
|
282
|
+
failOnViolation?: boolean;
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
interface GovernanceRuleConfig {
|
|
286
|
+
enabled?: boolean;
|
|
287
|
+
pattern?: string;
|
|
288
|
+
threshold?: number;
|
|
289
|
+
}
|
|
290
|
+
interface WarningSuppressionRule {
|
|
291
|
+
code: string;
|
|
292
|
+
files?: string[];
|
|
69
293
|
}
|
|
70
294
|
interface CustomRule {
|
|
71
295
|
name: string;
|
|
@@ -81,23 +305,204 @@ interface CustomRule {
|
|
|
81
305
|
warning?: string;
|
|
82
306
|
};
|
|
83
307
|
}
|
|
308
|
+
declare function validateConfig(config: SchemaShiftConfig): {
|
|
309
|
+
valid: boolean;
|
|
310
|
+
errors: string[];
|
|
311
|
+
};
|
|
312
|
+
declare function shouldSuppressWarning(warning: string, filePath: string, rules: WarningSuppressionRule[]): boolean;
|
|
84
313
|
declare function loadConfig(configPath?: string): Promise<SchemaShiftConfig>;
|
|
85
314
|
|
|
315
|
+
interface DependencyGraphResult {
|
|
316
|
+
/** Files sorted in dependency order (dependencies first) */
|
|
317
|
+
sortedFiles: string[];
|
|
318
|
+
/** Map of file -> files it depends on */
|
|
319
|
+
dependencies: Map<string, string[]>;
|
|
320
|
+
/** Circular dependency warnings */
|
|
321
|
+
circularWarnings: string[];
|
|
322
|
+
/** Total cross-file schema references */
|
|
323
|
+
crossFileRefs: number;
|
|
324
|
+
}
|
|
325
|
+
declare class SchemaDependencyResolver {
|
|
326
|
+
resolve(project: Project, filePaths: string[]): DependencyGraphResult;
|
|
327
|
+
private findDependencies;
|
|
328
|
+
private detectCycles;
|
|
329
|
+
private topologicalSort;
|
|
330
|
+
private shortenPath;
|
|
331
|
+
}
|
|
332
|
+
interface MonorepoPackage {
|
|
333
|
+
name: string;
|
|
334
|
+
path: string;
|
|
335
|
+
schemaLibrary?: string;
|
|
336
|
+
dependencies: string[];
|
|
337
|
+
}
|
|
338
|
+
interface MonorepoInfo {
|
|
339
|
+
isMonorepo: boolean;
|
|
340
|
+
packages: MonorepoPackage[];
|
|
341
|
+
suggestedOrder: string[];
|
|
342
|
+
}
|
|
343
|
+
declare class MonorepoResolver {
|
|
344
|
+
detect(projectPath: string): boolean;
|
|
345
|
+
analyze(projectPath: string): MonorepoInfo;
|
|
346
|
+
private suggestOrder;
|
|
347
|
+
private resolveWorkspaceDirs;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
interface SchemaComplexity {
|
|
351
|
+
schemaName: string;
|
|
352
|
+
filePath: string;
|
|
353
|
+
library: SchemaLibrary;
|
|
354
|
+
lineNumber: number;
|
|
355
|
+
chainLength: number;
|
|
356
|
+
nestedDepth: number;
|
|
357
|
+
validationCount: number;
|
|
358
|
+
score: number;
|
|
359
|
+
level: 'low' | 'medium' | 'high' | 'critical';
|
|
360
|
+
}
|
|
361
|
+
interface MigrationReadiness {
|
|
362
|
+
from: SchemaLibrary;
|
|
363
|
+
to: SchemaLibrary;
|
|
364
|
+
totalSchemas: number;
|
|
365
|
+
supportedSchemas: number;
|
|
366
|
+
unsupportedPatterns: string[];
|
|
367
|
+
estimatedManualFixes: number;
|
|
368
|
+
readinessPercent: number;
|
|
369
|
+
riskLevel: 'low' | 'medium' | 'high' | 'critical';
|
|
370
|
+
}
|
|
371
|
+
interface LibraryVersionInfo {
|
|
372
|
+
library: string;
|
|
373
|
+
version: string;
|
|
374
|
+
}
|
|
375
|
+
interface DetailedAnalysisResult {
|
|
376
|
+
complexities: SchemaComplexity[];
|
|
377
|
+
averageComplexity: number;
|
|
378
|
+
maxComplexity: number;
|
|
379
|
+
libraryVersions: LibraryVersionInfo[];
|
|
380
|
+
readiness?: MigrationReadiness;
|
|
381
|
+
}
|
|
382
|
+
declare class DetailedAnalyzer {
|
|
383
|
+
analyzeComplexity(analyzer: SchemaAnalyzer): SchemaComplexity[];
|
|
384
|
+
analyzeReadiness(schemas: SchemaInfo[], from: SchemaLibrary, to: SchemaLibrary, supportedMethods: Set<string>): MigrationReadiness;
|
|
385
|
+
detectLibraryVersions(projectPath: string): LibraryVersionInfo[];
|
|
386
|
+
generateDetailedResult(complexities: SchemaComplexity[], projectPath: string, readiness?: MigrationReadiness): DetailedAnalysisResult;
|
|
387
|
+
private computeComplexity;
|
|
388
|
+
private countChainLength;
|
|
389
|
+
private countNestedDepth;
|
|
390
|
+
private countValidations;
|
|
391
|
+
private extractMethodNames;
|
|
392
|
+
private getLibraryPrefix;
|
|
393
|
+
private escapeRegex;
|
|
394
|
+
private detectFileLibrary;
|
|
395
|
+
private isSchemaExpression;
|
|
396
|
+
}
|
|
397
|
+
|
|
86
398
|
declare function detectSchemaLibrary(moduleSpecifier: string): SchemaLibrary;
|
|
399
|
+
interface FormLibraryDetection {
|
|
400
|
+
library: string;
|
|
401
|
+
importPath: string;
|
|
402
|
+
lineNumber: number;
|
|
403
|
+
}
|
|
404
|
+
declare function detectFormLibraries(sourceFile: SourceFile): FormLibraryDetection[];
|
|
87
405
|
|
|
88
|
-
interface
|
|
89
|
-
|
|
406
|
+
interface FormResolverResult {
|
|
407
|
+
success: boolean;
|
|
408
|
+
transformedCode: string;
|
|
409
|
+
changes: string[];
|
|
410
|
+
warnings: string[];
|
|
90
411
|
}
|
|
91
|
-
declare class
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
412
|
+
declare class FormResolverMigrator {
|
|
413
|
+
migrate(sourceFile: SourceFile, from: string, to: string): FormResolverResult;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
interface GovernanceViolation {
|
|
417
|
+
rule: string;
|
|
418
|
+
message: string;
|
|
419
|
+
filePath: string;
|
|
420
|
+
lineNumber: number;
|
|
421
|
+
schemaName: string;
|
|
422
|
+
severity: 'warning' | 'error';
|
|
423
|
+
fixable: boolean;
|
|
424
|
+
}
|
|
425
|
+
interface GovernanceResult {
|
|
426
|
+
violations: GovernanceViolation[];
|
|
427
|
+
filesScanned: number;
|
|
428
|
+
schemasChecked: number;
|
|
429
|
+
passed: boolean;
|
|
430
|
+
}
|
|
431
|
+
declare class GovernanceEngine {
|
|
432
|
+
private rules;
|
|
433
|
+
configure(rules: Record<string, GovernanceRuleConfig>): void;
|
|
434
|
+
analyze(project: Project): GovernanceResult;
|
|
435
|
+
private detectFileLibrary;
|
|
436
|
+
private isSchemaExpression;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
interface IncrementalState {
|
|
440
|
+
migrationId: string;
|
|
441
|
+
from: SchemaLibrary;
|
|
442
|
+
to: SchemaLibrary;
|
|
443
|
+
startedAt: string;
|
|
444
|
+
completedFiles: string[];
|
|
445
|
+
remainingFiles: string[];
|
|
446
|
+
failedFiles: string[];
|
|
447
|
+
}
|
|
448
|
+
declare class IncrementalTracker {
|
|
449
|
+
private stateDir;
|
|
450
|
+
private statePath;
|
|
451
|
+
constructor(projectPath: string);
|
|
452
|
+
start(files: string[], from: SchemaLibrary, to: SchemaLibrary): IncrementalState;
|
|
453
|
+
markComplete(filePath: string): void;
|
|
454
|
+
markFailed(filePath: string): void;
|
|
455
|
+
getState(): IncrementalState | null;
|
|
456
|
+
resume(): IncrementalState | null;
|
|
457
|
+
getNextBatch(batchSize: number): string[];
|
|
458
|
+
getProgress(): {
|
|
459
|
+
completed: number;
|
|
460
|
+
remaining: number;
|
|
461
|
+
failed: number;
|
|
462
|
+
total: number;
|
|
463
|
+
percent: number;
|
|
464
|
+
} | null;
|
|
465
|
+
clear(): void;
|
|
466
|
+
private saveState;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
interface PackageUpdatePlan {
|
|
470
|
+
add: Record<string, string>;
|
|
471
|
+
remove: string[];
|
|
472
|
+
warnings: string[];
|
|
473
|
+
}
|
|
474
|
+
declare class PackageUpdater {
|
|
475
|
+
plan(projectPath: string, from: string, to: string): PackageUpdatePlan;
|
|
476
|
+
apply(projectPath: string, plan: PackageUpdatePlan): void;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
interface SchemaShiftPlugin {
|
|
480
|
+
name: string;
|
|
481
|
+
version: string;
|
|
482
|
+
handlers?: Array<{
|
|
97
483
|
from: SchemaLibrary;
|
|
98
484
|
to: SchemaLibrary;
|
|
485
|
+
handler: TransformHandler;
|
|
99
486
|
}>;
|
|
100
|
-
|
|
487
|
+
rules?: CustomRule[];
|
|
488
|
+
}
|
|
489
|
+
interface PluginLoadResult {
|
|
490
|
+
loaded: SchemaShiftPlugin[];
|
|
491
|
+
errors: string[];
|
|
492
|
+
}
|
|
493
|
+
declare class PluginLoader {
|
|
494
|
+
loadPlugins(pluginPaths: string[]): Promise<PluginLoadResult>;
|
|
495
|
+
private validatePlugin;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
interface StandardSchemaInfo {
|
|
499
|
+
detected: boolean;
|
|
500
|
+
compatibleLibraries: Array<{
|
|
501
|
+
name: string;
|
|
502
|
+
version: string;
|
|
503
|
+
}>;
|
|
504
|
+
recommendation: string;
|
|
101
505
|
}
|
|
506
|
+
declare function detectStandardSchema(projectPath: string): StandardSchemaInfo;
|
|
102
507
|
|
|
103
|
-
export { type AnalysisResult, type CustomRule, SchemaAnalyzer, type SchemaInfo, type SchemaLibrary, type SchemaShiftConfig, TransformEngine, type TransformError, type TransformHandler, type TransformOptions, type TransformResult, detectSchemaLibrary, loadConfig };
|
|
508
|
+
export { type AnalysisResult, 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, EcosystemAnalyzer, type EcosystemIssue, type EcosystemReport, type EffortLevel, type FileComplexity, type FormLibraryDetection, FormResolverMigrator, type FormResolverResult, GovernanceEngine, type GovernanceResult, type GovernanceRuleConfig, type GovernanceViolation, type IncrementalState, IncrementalTracker, type LibraryVersionInfo, type MethodCallInfo, MigrationChain, type MigrationReadiness, type MonorepoInfo, type MonorepoPackage, MonorepoResolver, type PackageUpdatePlan, PackageUpdater, type PluginLoadResult, PluginLoader, SchemaAnalyzer, type SchemaComplexity, SchemaDependencyResolver, type SchemaInfo, type SchemaLibrary, type SchemaShiftConfig, type SchemaShiftPlugin, type StandardSchemaInfo, TransformEngine, type TransformError, type TransformHandler, type TransformOptions, type TransformResult, type VersionIssue, type WarningSuppressionRule, buildCallChain, detectFormLibraries, detectSchemaLibrary, detectStandardSchema, isInsideComment, isInsideStringLiteral, loadConfig, parseCallChain, shouldSuppressWarning, startsWithBase, transformMethodChain, validateConfig };
|