workspace-conformance 1.0.0 → 1.1.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 +25 -3
- package/dist/cli.js +423 -109
- package/dist/index.cjs +456 -104
- package/dist/index.d.cts +245 -83
- package/dist/index.d.ts +245 -83
- package/dist/index.js +455 -106
- package/package.json +4 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ConfigFileOptions, LayoutConfig, RankSkipOptions, Section } from "@exadev/config";
|
|
2
|
+
import { IViolation } from "dependency-cruiser";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
import { CompilerOptions } from "ts-morph";
|
|
4
5
|
//#region src/check.d.ts
|
|
@@ -53,6 +54,77 @@ type CheckFunction<Options> = (context: CheckContext<Options>) => Promise<readon
|
|
|
53
54
|
*/
|
|
54
55
|
type LayoutCheckFunction<Options> = (context: LayoutCheckContext<Options>) => Promise<readonly Violation[]>;
|
|
55
56
|
//#endregion
|
|
57
|
+
//#region src/migrations/adapters.d.ts
|
|
58
|
+
/**
|
|
59
|
+
* Which of several things in a deploy tool's config the generator's output belongs to.
|
|
60
|
+
*/
|
|
61
|
+
interface DeploySelector {
|
|
62
|
+
/**
|
|
63
|
+
* The binding of the database, when the config declares more than one.
|
|
64
|
+
*/
|
|
65
|
+
readonly database?: string;
|
|
66
|
+
/**
|
|
67
|
+
* The named environment whose settings apply instead of the top-level ones.
|
|
68
|
+
*/
|
|
69
|
+
readonly environment?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* What a deploy tool's config says about the directory it applies migrations from.
|
|
73
|
+
*/
|
|
74
|
+
type DeployDirectory = {
|
|
75
|
+
readonly directory: string;
|
|
76
|
+
readonly none?: never;
|
|
77
|
+
} | {
|
|
78
|
+
readonly none: string;
|
|
79
|
+
readonly directory?: never;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* A schema generator, for the cross-check between where it writes migrations and where the deploy tool applies them from. The data of a config file is already read; an adapter only knows where in it the directory is.
|
|
83
|
+
*/
|
|
84
|
+
interface GeneratorAdapter {
|
|
85
|
+
/**
|
|
86
|
+
* The names the config file may have, by precedence. The extension decides how the file is read.
|
|
87
|
+
*/
|
|
88
|
+
readonly configFiles: readonly [string, ...string[]];
|
|
89
|
+
/**
|
|
90
|
+
* Matches a shell command that applies migrations with the generator itself, bypassing the deploy tool.
|
|
91
|
+
*/
|
|
92
|
+
readonly applyCommand: RegExp;
|
|
93
|
+
/**
|
|
94
|
+
* The command as it is written, for messages.
|
|
95
|
+
*/
|
|
96
|
+
readonly applyCommandName: string;
|
|
97
|
+
/**
|
|
98
|
+
* The directory the generator writes migrations to, as the config writes it (relative to the config file's directory) or the generator's default when the config sets none. Throws `ConformanceError` when the config is not of a shape the adapter can read.
|
|
99
|
+
*/
|
|
100
|
+
readonly outputDirectory: (config: unknown, file: string) => string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A deploy tool that applies migrations from a directory.
|
|
104
|
+
*/
|
|
105
|
+
interface DeployToolAdapter {
|
|
106
|
+
/**
|
|
107
|
+
* The names the config file may have, by precedence. The extension decides how the file is read.
|
|
108
|
+
*/
|
|
109
|
+
readonly configFiles: readonly [string, ...string[]];
|
|
110
|
+
/**
|
|
111
|
+
* The directory the tool applies migrations from, as the config writes it (relative to the config file's directory) or the tool's default when the config sets none. Throws `ConformanceError` when the config is not of a shape the adapter can read or `selector` is needed and absent.
|
|
112
|
+
*/
|
|
113
|
+
readonly migrationsDirectory: (config: unknown, file: string, selector: DeploySelector) => DeployDirectory;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The generators that have an adapter.
|
|
117
|
+
*/
|
|
118
|
+
declare const generatorNames: readonly ["drizzle-kit"];
|
|
119
|
+
/**
|
|
120
|
+
* The deploy tools that have an adapter.
|
|
121
|
+
*/
|
|
122
|
+
declare const deployToolNames: readonly ["wrangler"];
|
|
123
|
+
type GeneratorName = (typeof generatorNames)[number];
|
|
124
|
+
type DeployToolName = (typeof deployToolNames)[number];
|
|
125
|
+
export declare const generators: Readonly<Record<GeneratorName, GeneratorAdapter>>;
|
|
126
|
+
export declare const deployTools: Readonly<Record<DeployToolName, DeployToolAdapter>>;
|
|
127
|
+
//#endregion
|
|
56
128
|
//#region src/options.d.ts
|
|
57
129
|
/**
|
|
58
130
|
* Options of the `aggregate-mappers` check: every aggregate type a contract exports has a mapper file in the place the template names.
|
|
@@ -177,6 +249,39 @@ interface DockerfilePackageManagerOptions {
|
|
|
177
249
|
*/
|
|
178
250
|
readonly packageJson?: string;
|
|
179
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Options of the `migrations-directory` check: the directory a schema generator writes migrations to is the one the deploy tool applies them from, and no script applies them with the generator.
|
|
254
|
+
*/
|
|
255
|
+
interface MigrationsDirectoryOptions {
|
|
256
|
+
/**
|
|
257
|
+
* The schema generator, which has an adapter that knows its config file and where in it the output directory is.
|
|
258
|
+
*/
|
|
259
|
+
readonly generator: GeneratorName;
|
|
260
|
+
/**
|
|
261
|
+
* The deploy tool, which has an adapter that knows its config file and where in it the migrations directory is.
|
|
262
|
+
*/
|
|
263
|
+
readonly deployTool: DeployToolName;
|
|
264
|
+
/**
|
|
265
|
+
* The generator's config file, relative to the directory the checks run in. The first of the adapter's default file names that exists when omitted.
|
|
266
|
+
*/
|
|
267
|
+
readonly generatorConfig?: string;
|
|
268
|
+
/**
|
|
269
|
+
* The deploy tool's config file. The first of the adapter's default file names that exists when omitted.
|
|
270
|
+
*/
|
|
271
|
+
readonly deployConfig?: string;
|
|
272
|
+
/**
|
|
273
|
+
* The binding of the database the generator writes migrations for. Needed when the deploy config declares more than one; the only one is used when omitted.
|
|
274
|
+
*/
|
|
275
|
+
readonly database?: string;
|
|
276
|
+
/**
|
|
277
|
+
* The named environment of the deploy config to read instead of its top-level settings.
|
|
278
|
+
*/
|
|
279
|
+
readonly environment?: string;
|
|
280
|
+
/**
|
|
281
|
+
* Globs of the `package.json` files whose scripts are searched for the generator's apply command. Every `package.json` at any depth when omitted.
|
|
282
|
+
*/
|
|
283
|
+
readonly packageJsons?: readonly string[];
|
|
284
|
+
}
|
|
180
285
|
/**
|
|
181
286
|
* The options of every check, by check name.
|
|
182
287
|
*/
|
|
@@ -192,6 +297,7 @@ interface CheckOptionsByName {
|
|
|
192
297
|
readonly "single-storybook": SingleStorybookOptions;
|
|
193
298
|
readonly "commit-types": CommitTypesOptions;
|
|
194
299
|
readonly "dockerfile-package-manager": DockerfilePackageManagerOptions;
|
|
300
|
+
readonly "migrations-directory": MigrationsDirectoryOptions;
|
|
195
301
|
}
|
|
196
302
|
/**
|
|
197
303
|
* The name of a check.
|
|
@@ -238,6 +344,116 @@ export declare const commitTypes: CheckFunction<CommitTypesOptions>;
|
|
|
238
344
|
*/
|
|
239
345
|
export declare const dockerfilePackageManager: CheckFunction<DockerfilePackageManagerOptions>;
|
|
240
346
|
//#endregion
|
|
347
|
+
//#region src/workspace/packages.d.ts
|
|
348
|
+
/**
|
|
349
|
+
* A package directory found under the workspace root, before the layout classifies it.
|
|
350
|
+
*/
|
|
351
|
+
interface DiscoveredPackage {
|
|
352
|
+
/**
|
|
353
|
+
* Relative to the workspace root, with `/` separators.
|
|
354
|
+
*/
|
|
355
|
+
readonly dir: string;
|
|
356
|
+
/**
|
|
357
|
+
* The manifest's `name`; a manifest may omit it.
|
|
358
|
+
*/
|
|
359
|
+
readonly name: string | undefined;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* A workspace package as the layout sees it.
|
|
363
|
+
*/
|
|
364
|
+
interface WorkspacePackage extends DiscoveredPackage {
|
|
365
|
+
/**
|
|
366
|
+
* The name of the group whose root is the longest prefix of the package directory.
|
|
367
|
+
*/
|
|
368
|
+
readonly group: string;
|
|
369
|
+
/**
|
|
370
|
+
* The rank from `nameRanks`, else the group's rank, else `defaultRank`; `undefined` when none of them applies.
|
|
371
|
+
*/
|
|
372
|
+
readonly rank: number | undefined;
|
|
373
|
+
/**
|
|
374
|
+
* The slice the group's `slice` rule derives; `undefined` for a group without one and for a package that yields none.
|
|
375
|
+
*/
|
|
376
|
+
readonly slice: string | undefined;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Classify discovered packages by the layout: group, rank and slice. Pure.
|
|
380
|
+
*
|
|
381
|
+
* A package no group owns is a configuration error, because every check would otherwise skip it without saying so. Nested package directories are one too: the checks attribute a file to the package whose directory is its prefix, which is ambiguous for a package inside another. A `namePrefix` slice takes the longest slice value that a `segment` group produced and that prefixes the package's unscoped name; a package without a name has no such slice.
|
|
382
|
+
*/
|
|
383
|
+
export declare function classifyPackages(discovered: readonly DiscoveredPackage[], layout: LayoutConfig): readonly WorkspacePackage[];
|
|
384
|
+
//#endregion
|
|
385
|
+
//#region src/workspace/rules.d.ts
|
|
386
|
+
/**
|
|
387
|
+
* A forbidden-dependency rule in the shape dependency-cruiser takes: a dependency from a file matching `from` to a file matching `to` is a violation.
|
|
388
|
+
*/
|
|
389
|
+
interface ImportRule {
|
|
390
|
+
readonly name: string;
|
|
391
|
+
readonly severity: "error";
|
|
392
|
+
readonly comment: string;
|
|
393
|
+
readonly from: {
|
|
394
|
+
readonly path?: string;
|
|
395
|
+
};
|
|
396
|
+
readonly to: {
|
|
397
|
+
readonly path?: string;
|
|
398
|
+
readonly circular?: boolean;
|
|
399
|
+
readonly couldNotResolve?: boolean;
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* A regular expression, as source text, matching every file inside any of the packages. The trailing `/` keeps `packages/a` from matching `packages/ab`.
|
|
404
|
+
*/
|
|
405
|
+
export declare function packagesPattern(packages: readonly WorkspacePackage[]): string;
|
|
406
|
+
/**
|
|
407
|
+
* One rule per rank that has a higher rank above it: files of a package at that rank may not import a package at a strictly higher rank. A rule compares no numbers, so the ordering is expanded into path alternations here. Each rule comes with a `-by-name` rule for imports that do not resolve to a file.
|
|
408
|
+
*/
|
|
409
|
+
export declare function uphillRules(packages: readonly WorkspacePackage[]): readonly ImportRule[];
|
|
410
|
+
/**
|
|
411
|
+
* One rule per rank with a package more than `rankSkip.maxDistance` ranks below it that is not an exempt rank.
|
|
412
|
+
*/
|
|
413
|
+
export declare function rankSkipRules(packages: readonly WorkspacePackage[], rankSkip: RankSkipOptions): readonly ImportRule[];
|
|
414
|
+
/**
|
|
415
|
+
* One rule per slice: a package in it may not import a package that has a different slice. A package without a slice is in none and is never restricted.
|
|
416
|
+
*/
|
|
417
|
+
export declare function crossSliceRules(packages: readonly WorkspacePackage[]): readonly ImportRule[];
|
|
418
|
+
/**
|
|
419
|
+
* Two rules per isolated pair, one for each direction.
|
|
420
|
+
*/
|
|
421
|
+
export declare function isolatedGroupRules(packages: readonly WorkspacePackage[], isolatedGroups: NonNullable<LayoutConfig["isolatedGroups"]>): readonly ImportRule[];
|
|
422
|
+
/**
|
|
423
|
+
* The rule that forbids any import cycle among the packages' files.
|
|
424
|
+
*/
|
|
425
|
+
export declare function cycleRule(): ImportRule;
|
|
426
|
+
//#endregion
|
|
427
|
+
//#region src/checks/import-graph.d.ts
|
|
428
|
+
/**
|
|
429
|
+
* What a check's report may need to know about the workspace the graph was cruised over.
|
|
430
|
+
*/
|
|
431
|
+
interface ImportScope {
|
|
432
|
+
readonly cwd: string;
|
|
433
|
+
/**
|
|
434
|
+
* The workspace root; finding paths are relative to it.
|
|
435
|
+
*/
|
|
436
|
+
readonly root: string;
|
|
437
|
+
readonly packages: readonly WorkspacePackage[];
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* How an import check takes part in a shared cruise: the rules it adds and how it reads its own findings. Findings are routed to a check by the names of the rules it generated, so those names must differ from every other check's.
|
|
441
|
+
*/
|
|
442
|
+
interface ImportCheckSpec {
|
|
443
|
+
/**
|
|
444
|
+
* The check's name; the violation code is `<name>/<reason>`.
|
|
445
|
+
*/
|
|
446
|
+
readonly name: string;
|
|
447
|
+
/**
|
|
448
|
+
* The forbidden rules for the workspace's packages. Throws `ConformanceError` when the layout does not configure what the check needs.
|
|
449
|
+
*/
|
|
450
|
+
readonly rules: (packages: readonly WorkspacePackage[], layout: LayoutConfig) => readonly ImportRule[];
|
|
451
|
+
/**
|
|
452
|
+
* The violations for the findings of this check's rules, in a stable order.
|
|
453
|
+
*/
|
|
454
|
+
readonly report: (findings: readonly IViolation[], scope: ImportScope) => readonly Violation[];
|
|
455
|
+
}
|
|
456
|
+
//#endregion
|
|
241
457
|
//#region src/checks/import-cross-slice.d.ts
|
|
242
458
|
/**
|
|
243
459
|
* A package imports a package in a different slice.
|
|
@@ -276,6 +492,14 @@ export declare const importUphill: LayoutCheckFunction<ImportGraphOptions>;
|
|
|
276
492
|
*/
|
|
277
493
|
export declare const instructionSymlinks: CheckFunction<InstructionSymlinksOptions>;
|
|
278
494
|
//#endregion
|
|
495
|
+
//#region src/checks/migrations-directory.d.ts
|
|
496
|
+
/**
|
|
497
|
+
* The directory a schema generator writes migrations to is the one the deploy tool applies them from, and no script applies them with the generator instead of the deploy tool. The generator and the deploy tool are named in the options and each has an adapter that knows its config file names and where in them the directory is; both directories are resolved against the directory of the file that sets them.
|
|
498
|
+
*
|
|
499
|
+
* The config files are read as data: JSON, JSONC and TOML are parsed, and a module (a generator's TypeScript config) is evaluated, so it must be trusted.
|
|
500
|
+
*/
|
|
501
|
+
export declare const migrationsDirectory: CheckFunction<MigrationsDirectoryOptions>;
|
|
502
|
+
//#endregion
|
|
279
503
|
//#region src/checks/single-storybook.d.ts
|
|
280
504
|
/**
|
|
281
505
|
* At most one Storybook exists, in the permitted directory (the workspace root unless the options say otherwise), and none in a package such as a UI package. A Storybook is a `.storybook` directory.
|
|
@@ -321,9 +545,9 @@ interface RunInput {
|
|
|
321
545
|
readonly configFiles: ConfigFileOptions | undefined;
|
|
322
546
|
}
|
|
323
547
|
/**
|
|
324
|
-
*
|
|
548
|
+
* What every registered check has, whichever way it runs.
|
|
325
549
|
*/
|
|
326
|
-
interface
|
|
550
|
+
interface RegisteredCheckBase<Name extends CheckName> {
|
|
327
551
|
readonly name: Name;
|
|
328
552
|
readonly description: string;
|
|
329
553
|
/**
|
|
@@ -334,8 +558,26 @@ interface RegisteredCheck<Name extends CheckName> {
|
|
|
334
558
|
* Whether the `checks` map turns this check on.
|
|
335
559
|
*/
|
|
336
560
|
readonly isEnabled: (checks: ChecksConfig) => boolean;
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* A check that runs on its own.
|
|
564
|
+
*/
|
|
565
|
+
interface StandaloneCheck<Name extends CheckName> extends RegisteredCheckBase<Name> {
|
|
337
566
|
readonly run: (input: RunInput) => Promise<readonly Violation[]>;
|
|
338
567
|
}
|
|
568
|
+
/**
|
|
569
|
+
* An import check. It has no `run` of its own: it always joins a cruise shared with the other import checks of the run, so there is one path from the registry to dependency-cruiser.
|
|
570
|
+
*/
|
|
571
|
+
interface ImportGraphCheck<Name extends CheckName> extends RegisteredCheckBase<Name> {
|
|
572
|
+
readonly importGraph: {
|
|
573
|
+
readonly spec: ImportCheckSpec;
|
|
574
|
+
readonly optionsOf: (checks: ChecksConfig) => ImportGraphOptions | undefined;
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* A check bound to its place in the `checks` map.
|
|
579
|
+
*/
|
|
580
|
+
type RegisteredCheck<Name extends CheckName> = StandaloneCheck<Name> | ImportGraphCheck<Name>;
|
|
339
581
|
/**
|
|
340
582
|
* Every check, by name, in the order they run. The key is the name used in the `checks` map, on the command line and in violation codes.
|
|
341
583
|
*/
|
|
@@ -478,84 +720,4 @@ export declare function proveExhaustive(input: {
|
|
|
478
720
|
readonly compilerOptions?: CompilerOptions;
|
|
479
721
|
}): ExhaustivenessProof;
|
|
480
722
|
//#endregion
|
|
481
|
-
|
|
482
|
-
/**
|
|
483
|
-
* A package directory found under the workspace root, before the layout classifies it.
|
|
484
|
-
*/
|
|
485
|
-
interface DiscoveredPackage {
|
|
486
|
-
/**
|
|
487
|
-
* Relative to the workspace root, with `/` separators.
|
|
488
|
-
*/
|
|
489
|
-
readonly dir: string;
|
|
490
|
-
/**
|
|
491
|
-
* The manifest's `name`; a manifest may omit it.
|
|
492
|
-
*/
|
|
493
|
-
readonly name: string | undefined;
|
|
494
|
-
}
|
|
495
|
-
/**
|
|
496
|
-
* A workspace package as the layout sees it.
|
|
497
|
-
*/
|
|
498
|
-
interface WorkspacePackage extends DiscoveredPackage {
|
|
499
|
-
/**
|
|
500
|
-
* The name of the group whose root is the longest prefix of the package directory.
|
|
501
|
-
*/
|
|
502
|
-
readonly group: string;
|
|
503
|
-
/**
|
|
504
|
-
* The rank from `nameRanks`, else the group's rank, else `defaultRank`; `undefined` when none of them applies.
|
|
505
|
-
*/
|
|
506
|
-
readonly rank: number | undefined;
|
|
507
|
-
/**
|
|
508
|
-
* The slice the group's `slice` rule derives; `undefined` for a group without one and for a package that yields none.
|
|
509
|
-
*/
|
|
510
|
-
readonly slice: string | undefined;
|
|
511
|
-
}
|
|
512
|
-
/**
|
|
513
|
-
* Classify discovered packages by the layout: group, rank and slice. Pure.
|
|
514
|
-
*
|
|
515
|
-
* A package no group owns is a configuration error, because every check would otherwise skip it without saying so. Nested package directories are one too: the checks attribute a file to the package whose directory is its prefix, which is ambiguous for a package inside another. A `namePrefix` slice takes the longest slice value that a `segment` group produced and that prefixes the package's unscoped name; a package without a name has no such slice.
|
|
516
|
-
*/
|
|
517
|
-
export declare function classifyPackages(discovered: readonly DiscoveredPackage[], layout: LayoutConfig): readonly WorkspacePackage[];
|
|
518
|
-
//#endregion
|
|
519
|
-
//#region src/workspace/rules.d.ts
|
|
520
|
-
/**
|
|
521
|
-
* A forbidden-dependency rule in the shape dependency-cruiser takes: a dependency from a file matching `from` to a file matching `to` is a violation.
|
|
522
|
-
*/
|
|
523
|
-
interface ImportRule {
|
|
524
|
-
readonly name: string;
|
|
525
|
-
readonly severity: "error";
|
|
526
|
-
readonly comment: string;
|
|
527
|
-
readonly from: {
|
|
528
|
-
readonly path?: string;
|
|
529
|
-
};
|
|
530
|
-
readonly to: {
|
|
531
|
-
readonly path?: string;
|
|
532
|
-
readonly circular?: boolean;
|
|
533
|
-
readonly couldNotResolve?: boolean;
|
|
534
|
-
};
|
|
535
|
-
}
|
|
536
|
-
/**
|
|
537
|
-
* A regular expression, as source text, matching every file inside any of the packages. The trailing `/` keeps `packages/a` from matching `packages/ab`.
|
|
538
|
-
*/
|
|
539
|
-
export declare function packagesPattern(packages: readonly WorkspacePackage[]): string;
|
|
540
|
-
/**
|
|
541
|
-
* One rule per rank that has a higher rank above it: files of a package at that rank may not import a package at a strictly higher rank. A rule compares no numbers, so the ordering is expanded into path alternations here. Each rule comes with a `-by-name` rule for imports that do not resolve to a file.
|
|
542
|
-
*/
|
|
543
|
-
export declare function uphillRules(packages: readonly WorkspacePackage[]): readonly ImportRule[];
|
|
544
|
-
/**
|
|
545
|
-
* One rule per rank with a package more than `rankSkip.maxDistance` ranks below it that is not an exempt rank.
|
|
546
|
-
*/
|
|
547
|
-
export declare function rankSkipRules(packages: readonly WorkspacePackage[], rankSkip: RankSkipOptions): readonly ImportRule[];
|
|
548
|
-
/**
|
|
549
|
-
* One rule per slice: a package in it may not import a package that has a different slice. A package without a slice is in none and is never restricted.
|
|
550
|
-
*/
|
|
551
|
-
export declare function crossSliceRules(packages: readonly WorkspacePackage[]): readonly ImportRule[];
|
|
552
|
-
/**
|
|
553
|
-
* Two rules per isolated pair, one for each direction.
|
|
554
|
-
*/
|
|
555
|
-
export declare function isolatedGroupRules(packages: readonly WorkspacePackage[], isolatedGroups: NonNullable<LayoutConfig["isolatedGroups"]>): readonly ImportRule[];
|
|
556
|
-
/**
|
|
557
|
-
* The rule that forbids any import cycle among the packages' files.
|
|
558
|
-
*/
|
|
559
|
-
export declare function cycleRule(): ImportRule;
|
|
560
|
-
//#endregion
|
|
561
|
-
export type { AggregateMappersOptions, CaseRemoval, CheckContext, CheckFunction, CheckName, CheckOptionsByName, CheckResult, ChecksConfig, CommandTypesOptions, CommitTypesOptions, ConformanceConfig, DiscoveredPackage, DockerfilePackageManagerOptions, ExhaustivenessProof, ImportGraphOptions, InstructionSymlinksOptions, LayoutCheckContext, LayoutCheckFunction, RegisteredCheck, RunChecksOptions, RunResult, SingleStorybookOptions, SourceLocation, TypeErrorReport, Violation, WorkspacePackage };
|
|
723
|
+
export type { AggregateMappersOptions, CaseRemoval, CheckContext, CheckFunction, CheckName, CheckOptionsByName, CheckResult, ChecksConfig, CommandTypesOptions, CommitTypesOptions, ConformanceConfig, DeployDirectory, DeploySelector, DeployToolAdapter, DeployToolName, DiscoveredPackage, DockerfilePackageManagerOptions, ExhaustivenessProof, GeneratorAdapter, GeneratorName, ImportGraphOptions, InstructionSymlinksOptions, LayoutCheckContext, LayoutCheckFunction, MigrationsDirectoryOptions, RegisteredCheck, RunChecksOptions, RunResult, SingleStorybookOptions, SourceLocation, TypeErrorReport, Violation, WorkspacePackage };
|