@alveolus/arch 0.0.0-stage → 0.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.
@@ -0,0 +1,599 @@
1
+ import { Project } from "ts-morph";
2
+ //#region src/architecture/allowed-packages.d.ts
3
+ type PackageDependencies = Readonly<Record<string, true | readonly string[]>>;
4
+ export declare class AllowedPackages {
5
+ private readonly packages;
6
+ constructor(packages?: PackageDependencies);
7
+ has(packageName: string): boolean;
8
+ forbiddenNames(packageName: string, names: readonly string[]): readonly string[];
9
+ allowedNames(packageName: string): readonly string[];
10
+ with(other: AllowedPackages): AllowedPackages;
11
+ }
12
+ //#endregion
13
+ //#region src/conventions/core-api.d.ts
14
+ declare const coreKinds: readonly ["AggregateRoot", "Entity", "ValueObject", "Identifier", "DomainEvent", "DomainError", "DomainService", "Port", "CommandRepository", "QueryRepository", "CommandHandler", "QueryHandler", "EventTranslator", "EventPublisher", "Outbox", "UnitOfWork"];
15
+ type CoreKind = (typeof coreKinds)[number];
16
+ declare const coreMarkers: readonly ["OpenHostService", "AntiCorruptionLayer"];
17
+ type CoreMarker = (typeof coreMarkers)[number];
18
+ //#endregion
19
+ //#region src/conventions/layers.d.ts
20
+ declare const layers: readonly ["domain", "application", "published-language", "driven", "driving"];
21
+ type Layer = (typeof layers)[number];
22
+ //#endregion
23
+ //#region src/conventions/building-blocks.d.ts
24
+ interface PlaceSpec {
25
+ readonly layer: Layer;
26
+ readonly folder?: string;
27
+ readonly suffix?: string;
28
+ }
29
+ //#endregion
30
+ //#region src/model/classes/named-type.d.ts
31
+ interface NamedType {
32
+ readonly name: string;
33
+ readonly packageName: string | undefined;
34
+ }
35
+ //#endregion
36
+ //#region src/model/classes/class-type.d.ts
37
+ declare class ClassType {
38
+ readonly name: string;
39
+ readonly declaredIn: string | undefined;
40
+ readonly lineage: readonly NamedType[];
41
+ constructor(name: string, declaredIn: string | undefined, lineage: readonly NamedType[]);
42
+ get key(): string;
43
+ get isInstalled(): boolean;
44
+ }
45
+ //#endregion
46
+ //#region src/model/classes/heritage.d.ts
47
+ interface TypeArgument {
48
+ readonly parameter: string;
49
+ readonly line: number;
50
+ readonly types: readonly ClassType[];
51
+ }
52
+ interface Heritage {
53
+ readonly isByName: boolean;
54
+ readonly typeArguments: readonly TypeArgument[];
55
+ }
56
+ //#endregion
57
+ //#region src/model/classes/return-shape.d.ts
58
+ interface ReturnShape {
59
+ readonly alias: NamedType | undefined;
60
+ readonly union: readonly NamedType[];
61
+ }
62
+ //#endregion
63
+ //#region src/model/classes/member.d.ts
64
+ type MemberKind = "field" | "constructor parameter" | "method" | "getter" | "setter";
65
+ type Visibility = "public" | "protected" | "private";
66
+ interface MemberProps {
67
+ readonly name: string;
68
+ readonly line: number;
69
+ readonly kind: MemberKind;
70
+ readonly visibility: Visibility;
71
+ readonly isStatic: boolean;
72
+ readonly isParameterProperty: boolean;
73
+ readonly isCallable: boolean;
74
+ readonly valueTypes: readonly ClassType[];
75
+ readonly parameterTypes: readonly ClassType[];
76
+ readonly returns: ReturnShape | undefined;
77
+ }
78
+ declare class Member {
79
+ readonly name: string;
80
+ readonly line: number;
81
+ readonly kind: MemberKind;
82
+ readonly visibility: Visibility;
83
+ readonly isStatic: boolean;
84
+ readonly isParameterProperty: boolean;
85
+ readonly isCallable: boolean;
86
+ readonly valueTypes: readonly ClassType[];
87
+ readonly parameterTypes: readonly ClassType[];
88
+ readonly returns: ReturnShape | undefined;
89
+ constructor(props: MemberProps);
90
+ get isPublicInstance(): boolean;
91
+ get isField(): boolean;
92
+ }
93
+ //#endregion
94
+ //#region src/model/classes/class-declaration.d.ts
95
+ interface ClassDeclarationProps {
96
+ readonly name: string;
97
+ readonly line: number;
98
+ readonly isAbstract: boolean;
99
+ readonly type: ClassType;
100
+ readonly heritage: Heritage | undefined;
101
+ readonly implemented: readonly NamedType[];
102
+ readonly members: readonly Member[];
103
+ }
104
+ declare class ClassDeclaration {
105
+ readonly name: string;
106
+ readonly line: number;
107
+ readonly isAbstract: boolean;
108
+ readonly type: ClassType;
109
+ readonly heritage: Heritage | undefined;
110
+ readonly implemented: readonly NamedType[];
111
+ readonly members: readonly Member[];
112
+ constructor(props: ClassDeclarationProps);
113
+ get heldMembers(): Member[];
114
+ get publicSurface(): Member[];
115
+ get typeArguments(): readonly TypeArgument[];
116
+ get extendsByName(): boolean;
117
+ get isStaticOnly(): boolean;
118
+ private isDeclared;
119
+ }
120
+ //#endregion
121
+ //#region src/model/dependencies/dependency.d.ts
122
+ type DependencyForm = "import" | "re-export" | "inline type" | "dynamic import" | "require" | "global";
123
+ type TargetVisibility = "analysed" | "ignored" | "unresolved";
124
+ type DependencyTarget = {
125
+ readonly kind: "file";
126
+ readonly path: string;
127
+ readonly visibility: TargetVisibility;
128
+ } | {
129
+ readonly kind: "package";
130
+ readonly name: string;
131
+ };
132
+ declare class Dependency {
133
+ readonly line: number;
134
+ readonly form: DependencyForm;
135
+ readonly specifier: string;
136
+ readonly names: readonly string[];
137
+ readonly target: DependencyTarget;
138
+ constructor(line: number, form: DependencyForm, specifier: string, names: readonly string[], target: DependencyTarget);
139
+ get label(): string;
140
+ isOnPackage(name: string): boolean;
141
+ }
142
+ //#endregion
143
+ //#region src/model/dependencies/global-use.d.ts
144
+ type GlobalOrigin = "ecmascript" | "host";
145
+ type GlobalEffect = "clock" | "randomness";
146
+ declare class GlobalUse {
147
+ readonly line: number;
148
+ readonly name: string;
149
+ readonly origin: GlobalOrigin;
150
+ readonly effect: GlobalEffect | undefined;
151
+ constructor(line: number, name: string, origin: GlobalOrigin, effect: GlobalEffect | undefined);
152
+ }
153
+ //#endregion
154
+ //#region src/model/statements/disable-comment.d.ts
155
+ declare class DisableComment {
156
+ readonly line: number;
157
+ readonly text: string;
158
+ constructor(line: number, text: string);
159
+ get target(): number;
160
+ }
161
+ //#endregion
162
+ //#region src/model/statements/throw.d.ts
163
+ type ThrowForm = "throw" | "Promise.reject";
164
+ declare class Throw {
165
+ readonly line: number;
166
+ readonly form: ThrowForm;
167
+ constructor(line: number, form: ThrowForm);
168
+ }
169
+ //#endregion
170
+ //#region src/model/statements/top-level-statement.d.ts
171
+ type StatementKind = "function" | "enum" | "namespace" | "mutable variable" | "computed constant" | "class expression" | "statement";
172
+ declare class TopLevelStatement {
173
+ readonly kind: StatementKind;
174
+ readonly name: string;
175
+ readonly line: number;
176
+ constructor(kind: StatementKind, name: string, line: number);
177
+ }
178
+ //#endregion
179
+ //#region src/model/source-file.d.ts
180
+ interface SourceFileProps {
181
+ readonly path: string;
182
+ readonly text: string;
183
+ readonly dependencies: readonly Dependency[];
184
+ readonly classes: readonly ClassDeclaration[];
185
+ readonly statements: readonly TopLevelStatement[];
186
+ readonly throws: readonly Throw[];
187
+ readonly globals: readonly GlobalUse[];
188
+ readonly disables: readonly DisableComment[];
189
+ }
190
+ declare class SourceFile {
191
+ readonly path: string;
192
+ readonly dependencies: readonly Dependency[];
193
+ readonly classes: readonly ClassDeclaration[];
194
+ readonly statements: readonly TopLevelStatement[];
195
+ readonly throws: readonly Throw[];
196
+ readonly globals: readonly GlobalUse[];
197
+ readonly disables: readonly DisableComment[];
198
+ private readonly lines;
199
+ constructor(props: SourceFileProps);
200
+ lineText(line: number): string;
201
+ disableAbove(line: number): DisableComment | undefined;
202
+ classNamed(name: string): ClassDeclaration | undefined;
203
+ }
204
+ //#endregion
205
+ //#region src/model/project.d.ts
206
+ declare class Project$1 {
207
+ readonly directory: string;
208
+ readonly files: readonly SourceFile[];
209
+ private readonly filesByPath;
210
+ constructor(directory: string, files: readonly SourceFile[]);
211
+ file(path: string): SourceFile | undefined;
212
+ classOf(type: ClassType): ClassDeclaration | undefined;
213
+ relativePath(path: string): string;
214
+ }
215
+ //#endregion
216
+ //#region src/architecture/core-api.d.ts
217
+ declare class CoreApi {
218
+ get packageName(): string;
219
+ kindsOf(type: ClassType): CoreKind[];
220
+ markersOf(implemented: readonly NamedType[]): CoreMarker[];
221
+ isResult(shape: ReturnShape): boolean;
222
+ isDomainSymbol(name: string): boolean;
223
+ isPublishedLanguageSymbol(name: string): boolean;
224
+ private isKind;
225
+ private isMarker;
226
+ private isCore;
227
+ }
228
+ //#endregion
229
+ //#region src/architecture/paths/location.d.ts
230
+ type Area = "context" | "shared-kernel" | "root" | "outside";
231
+ type Unseen = "ignored" | "unresolved";
232
+ interface LocationProps {
233
+ readonly area: Area;
234
+ readonly context?: string;
235
+ readonly layer?: Layer;
236
+ readonly folder?: string;
237
+ readonly foldersInLayer?: readonly string[];
238
+ readonly fileName: string;
239
+ readonly isCompositionRoot?: boolean;
240
+ readonly unseen?: Unseen;
241
+ }
242
+ declare class Location {
243
+ readonly area: Area;
244
+ readonly context: string | undefined;
245
+ readonly layer: Layer | undefined;
246
+ readonly folder: string | undefined;
247
+ readonly foldersInLayer: readonly string[];
248
+ readonly fileName: string;
249
+ readonly isCompositionRoot: boolean;
250
+ readonly unseen: Unseen | undefined;
251
+ constructor(props: LocationProps);
252
+ get isInBoundedContext(): boolean;
253
+ get isInSharedKernel(): boolean;
254
+ get isAtRoot(): boolean;
255
+ get isOutside(): boolean;
256
+ get isInLayer(): boolean;
257
+ isSameContextAs(other: Location): boolean;
258
+ isOtherBoundedContextThan(other: Location): boolean;
259
+ }
260
+ //#endregion
261
+ //#region src/architecture/paths/place.d.ts
262
+ declare class Place {
263
+ readonly layer: Layer;
264
+ readonly folder: string | undefined;
265
+ readonly suffix: string | undefined;
266
+ constructor(spec: PlaceSpec);
267
+ fits(location: Location): boolean;
268
+ }
269
+ //#endregion
270
+ //#region src/architecture/building-blocks.d.ts
271
+ interface MarkedPlace {
272
+ readonly marker: CoreMarker;
273
+ readonly place: Place;
274
+ }
275
+ declare class BuildingBlocks {
276
+ private readonly core;
277
+ constructor(core: CoreApi);
278
+ placeOf(declaration: ClassDeclaration): Place | undefined;
279
+ markedPlacesOf(declaration: ClassDeclaration): MarkedPlace[];
280
+ foldersOf(layer: "domain" | "application"): readonly string[];
281
+ }
282
+ //#endregion
283
+ //#region src/architecture/context-map.d.ts
284
+ type Upstreams = Readonly<Record<string, readonly string[]>>;
285
+ declare class ContextMap {
286
+ private readonly upstreams;
287
+ constructor(upstreams: Upstreams);
288
+ static ofEdges(edges: readonly {
289
+ readonly from: string;
290
+ readonly to: string;
291
+ }[]): ContextMap;
292
+ get contexts(): string[];
293
+ allows(from: string, to: string): boolean;
294
+ cycle(): string[] | undefined;
295
+ cycleThrough(from: string, to: string): boolean;
296
+ private cycleFrom;
297
+ private reaches;
298
+ }
299
+ //#endregion
300
+ //#region src/architecture/layers.d.ts
301
+ declare class Layers {
302
+ isLayer(name: string): name is Layer;
303
+ importableFrom(layer: Exclude<Layer, "domain">): readonly Layer[];
304
+ }
305
+ //#endregion
306
+ //#region src/architecture/settings.d.ts
307
+ interface ContextFolder {
308
+ readonly name: string;
309
+ readonly dir: string;
310
+ readonly isSharedKernel: boolean;
311
+ }
312
+ type ExtraFolders = Readonly<Partial<Record<"domain" | "application", readonly string[]>>>;
313
+ interface Settings {
314
+ readonly rootDir: string;
315
+ readonly contextFolders: readonly ContextFolder[];
316
+ readonly compositionRoot: string;
317
+ readonly extraFolders: ExtraFolders;
318
+ readonly contextMap: ContextMap | undefined;
319
+ readonly domainDependencies: AllowedPackages;
320
+ readonly applicationDependencies: AllowedPackages;
321
+ }
322
+ //#endregion
323
+ //#region src/architecture/paths/layer-shape.d.ts
324
+ type ShapeIssue = {
325
+ readonly kind: "directlyInLayer" | "tooDeep";
326
+ readonly layer: "domain" | "application";
327
+ readonly example: string;
328
+ } | {
329
+ readonly kind: "unknownFolder";
330
+ readonly layer: "domain" | "application";
331
+ readonly folder: string;
332
+ readonly folders: readonly string[];
333
+ } | {
334
+ readonly kind: "nestedPublishedLanguage" | "drivenWithoutTechnology" | "drivenTooDeep" | "drivingWithoutTechnology";
335
+ };
336
+ //#endregion
337
+ //#region src/architecture/architecture.d.ts
338
+ type FileTarget$1 = Extract<DependencyTarget, {
339
+ kind: "file";
340
+ }>;
341
+ export declare class Architecture {
342
+ readonly project: Project$1;
343
+ private readonly settings;
344
+ readonly core: CoreApi;
345
+ readonly layers: Layers;
346
+ readonly blocks: BuildingBlocks;
347
+ private readonly shape;
348
+ private readonly layout;
349
+ private readonly locations;
350
+ constructor(project: Project$1, settings: Settings);
351
+ get files(): readonly SourceFile[];
352
+ get domainDependencies(): AllowedPackages;
353
+ get applicationDependencies(): AllowedPackages;
354
+ get contextMap(): ContextMap | undefined;
355
+ locationOf(file: SourceFile): Location;
356
+ locationOfTarget(target: FileTarget$1): Location;
357
+ shapeIssueOf(location: Location): ShapeIssue | undefined;
358
+ relativePath(path: string): string;
359
+ kindsOf(subject: ClassType | ClassDeclaration): CoreKind[];
360
+ kindOf(subject: ClassType | ClassDeclaration): CoreKind | undefined;
361
+ is(subject: ClassType | ClassDeclaration, kind: CoreKind): boolean;
362
+ isBuildingBlock(subject: ClassType | ClassDeclaration): boolean;
363
+ implementsMarker(declaration: ClassDeclaration, marker: CoreMarker): boolean;
364
+ returnsResult(member: Member): boolean;
365
+ classOf(type: ClassType): ClassDeclaration | undefined;
366
+ private locate;
367
+ private typeOf;
368
+ }
369
+ //#endregion
370
+ //#region src/rules/framework/finding.d.ts
371
+ type FindingData = Readonly<Record<string, string | number>>;
372
+ interface Finding<MessageId extends string = string> {
373
+ readonly file: SourceFile;
374
+ readonly line: number;
375
+ readonly symbol: string;
376
+ readonly messageId: MessageId;
377
+ readonly data: FindingData;
378
+ }
379
+ //#endregion
380
+ //#region src/rules/framework/wording.d.ts
381
+ type FileTarget = Extract<DependencyTarget, {
382
+ kind: "file";
383
+ }>;
384
+ declare class Wording {
385
+ target(target: FileTarget, architecture: Architecture): string;
386
+ location(location: Location): string;
387
+ place(place: Place): string;
388
+ }
389
+ //#endregion
390
+ //#region src/rules/framework/rule.d.ts
391
+ interface RuleMeta<Id extends string, MessageId extends string> {
392
+ readonly id: Id;
393
+ readonly description: string;
394
+ readonly messages: Readonly<Record<MessageId, string>>;
395
+ }
396
+ export declare abstract class Rule<Id extends string = string, MessageId extends string = string> {
397
+ abstract readonly meta: RuleMeta<Id, MessageId>;
398
+ protected readonly wording: Wording;
399
+ abstract check(architecture: Architecture): Finding<MessageId>[];
400
+ protected finding(file: SourceFile, line: number, symbol: string, messageId: MessageId, data?: FindingData): Finding<MessageId>;
401
+ }
402
+ //#endregion
403
+ //#region src/rules/tooling/no-loose-disable.rule.d.ts
404
+ type MessageId = "noRule" | "unknownRule" | "noReason" | "unused";
405
+ declare class NoLooseDisableRule extends Rule<"tooling/no-loose-disable", MessageId> {
406
+ private readonly knownRules;
407
+ readonly meta: RuleMeta<"tooling/no-loose-disable", MessageId>;
408
+ constructor(knownRules: readonly string[]);
409
+ check(architecture: Architecture): Finding<MessageId>[];
410
+ unused(file: SourceFile, comment: DisableComment): Finding<MessageId>;
411
+ private malformed;
412
+ }
413
+ //#endregion
414
+ //#region src/rules/registry.d.ts
415
+ declare const ruleIds: readonly ["strategic/no-cross-context-import", "strategic/no-leaky-host-service", "strategic/no-unmapped-context", "strategic/no-fat-shared-kernel", "layers/no-impure-domain", "layers/no-outward-import", "layers/no-portless-adapter", "layers/no-driving-shortcut", "tactical/no-aggregate-reference", "tactical/no-public-field", "tactical/no-foreign-command-dependency", "tactical/no-foreign-query-dependency", "tactical/no-stateful-service", "tactical/no-thrown-failure", "tactical/no-misplaced-class", "tactical/no-loose-code", "tooling/no-loose-disable"];
416
+ type RuleId = (typeof ruleIds)[number];
417
+ export declare class RuleRegistry {
418
+ readonly rules: readonly Rule<RuleId>[];
419
+ get looseDisable(): NoLooseDisableRule;
420
+ get ids(): RuleId[];
421
+ }
422
+ //#endregion
423
+ //#region src/check/violation.d.ts
424
+ type Severity = "error" | "warn" | "info";
425
+ interface Violation {
426
+ readonly rule: RuleId;
427
+ readonly severity: Severity;
428
+ readonly file: string;
429
+ readonly line: number;
430
+ readonly symbol: string;
431
+ readonly message: string;
432
+ readonly fingerprint: string;
433
+ }
434
+ //#endregion
435
+ //#region src/check/baseline.d.ts
436
+ export declare class Baseline {
437
+ private readonly entries;
438
+ static readonly fileName = "alveolus.baseline.json";
439
+ private constructor();
440
+ static of(violations: readonly Violation[]): Baseline;
441
+ static load(path: string): Promise<Baseline>;
442
+ get size(): number;
443
+ get outdatedEntries(): number;
444
+ newViolations(violations: readonly Violation[]): Violation[];
445
+ staleEntries(violations: readonly Violation[]): number;
446
+ private match;
447
+ save(path: string): Promise<void>;
448
+ private keyOf;
449
+ }
450
+ //#endregion
451
+ //#region src/importer/importer.d.ts
452
+ interface ImportScope {
453
+ readonly projectDir: string;
454
+ readonly rootDir: string;
455
+ isIgnored(path: string): boolean;
456
+ }
457
+ export declare abstract class Importer {
458
+ abstract read(scope: ImportScope): Project$1;
459
+ abstract resolves(packageName: string, scope: ImportScope): boolean;
460
+ }
461
+ //#endregion
462
+ //#region src/importer/ts-morph/ts-morph-importer.d.ts
463
+ export declare class TsMorphImporter extends Importer {
464
+ private readonly sources;
465
+ private readonly classes;
466
+ private readonly statements;
467
+ private readonly disables;
468
+ private readonly throws;
469
+ constructor(sources: Project);
470
+ static fromTsConfig(tsConfigFilePath: string): TsMorphImporter;
471
+ resolves(packageName: string, scope: ImportScope): boolean;
472
+ read(scope: ImportScope): Project$1;
473
+ private readFile;
474
+ private globalUsesOf;
475
+ private isInside;
476
+ }
477
+ //#endregion
478
+ //#region src/check/checker.d.ts
479
+ interface CheckSettings extends ImportScope, Settings {
480
+ severityOf(rule: RuleId): Severity | "off";
481
+ }
482
+ interface Suppressed {
483
+ readonly violation: Violation;
484
+ readonly reason: string;
485
+ }
486
+ interface CheckOutcome {
487
+ readonly files: number;
488
+ readonly violations: Violation[];
489
+ readonly suppressed: Suppressed[];
490
+ }
491
+ export declare class Checker {
492
+ private readonly importer;
493
+ private readonly rules;
494
+ private readonly fingerprint;
495
+ constructor(importer: Importer, rules: readonly Rule<RuleId>[]);
496
+ check(settings: CheckSettings): CheckOutcome;
497
+ run(rule: Rule<RuleId>, architecture: Architecture): Violation[];
498
+ private collect;
499
+ private collectUnusedDisables;
500
+ private violationOf;
501
+ private messageOf;
502
+ private fill;
503
+ private compare;
504
+ }
505
+ //#endregion
506
+ //#region src/check/report.d.ts
507
+ interface ReportInput {
508
+ readonly files: number;
509
+ readonly violations: readonly Violation[];
510
+ readonly suppressed: readonly Suppressed[];
511
+ readonly baselined: number;
512
+ readonly stale: number;
513
+ }
514
+ export declare class Report {
515
+ private readonly input;
516
+ private readonly colors;
517
+ constructor(input: ReportInput, colored?: boolean);
518
+ text(): string;
519
+ json(): string;
520
+ sarif(rules: readonly RuleMeta<string, string>[]): string;
521
+ private byFile;
522
+ private block;
523
+ private severity;
524
+ private summary;
525
+ private counts;
526
+ }
527
+ //#endregion
528
+ //#region src/cli/cli.d.ts
529
+ interface Output {
530
+ write(text: string): unknown;
531
+ }
532
+ export declare class Cli {
533
+ private readonly stdout;
534
+ private readonly stderr;
535
+ private readonly cwd;
536
+ private readonly colored;
537
+ private exitCode;
538
+ constructor(stdout: Output, stderr: Output, cwd: string, colored?: boolean);
539
+ run(args: readonly string[]): Promise<number>;
540
+ private program;
541
+ private withOptions;
542
+ private check;
543
+ private render;
544
+ private warnOutdated;
545
+ private baseline;
546
+ private analyze;
547
+ private fail;
548
+ }
549
+ //#endregion
550
+ //#region src/config/alveolus-config.d.ts
551
+ type RuleSetting = "error" | "warn" | "info" | "off";
552
+ interface LayoutConfig {
553
+ readonly extraFolders?: Readonly<Partial<Record<"domain" | "application", readonly string[]>>>;
554
+ }
555
+ interface AlveolusConfig {
556
+ readonly root: string;
557
+ readonly tsconfig?: string;
558
+ readonly boundedContexts: Readonly<Record<string, string>>;
559
+ readonly sharedKernel?: string;
560
+ readonly contextMap?: Upstreams;
561
+ readonly compositionRoot?: string;
562
+ readonly domainDependencies?: PackageDependencies;
563
+ readonly applicationDependencies?: PackageDependencies;
564
+ readonly ignore?: readonly string[];
565
+ readonly layout?: LayoutConfig;
566
+ readonly rules?: Readonly<Partial<Record<RuleId, RuleSetting>>>;
567
+ }
568
+ //#endregion
569
+ //#region src/config/config.d.ts
570
+ export declare class Config implements CheckSettings {
571
+ readonly projectDir: string;
572
+ readonly rootDir: string;
573
+ readonly tsConfigPath: string;
574
+ readonly compositionRoot: string;
575
+ readonly domainDependencies: AllowedPackages;
576
+ readonly applicationDependencies: AllowedPackages;
577
+ readonly contextFolders: readonly ContextFolder[];
578
+ readonly extraFolders: ExtraFolders;
579
+ readonly contextMap: ContextMap | undefined;
580
+ private readonly ignored;
581
+ private readonly rules;
582
+ constructor(config: AlveolusConfig, projectDir: string);
583
+ private validContextMap;
584
+ isIgnored(path: string): boolean;
585
+ severityOf(rule: RuleId): Severity | "off";
586
+ }
587
+ //#endregion
588
+ //#region src/config/config-loader.d.ts
589
+ export declare class ConfigLoader {
590
+ static readonly fileName = "alveolus.config.ts";
591
+ load(projectDir: string, configFile?: string): Promise<Config>;
592
+ private validate;
593
+ }
594
+ //#endregion
595
+ //#region src/config/define-config.d.ts
596
+ export declare function defineConfig(config: AlveolusConfig): AlveolusConfig;
597
+ //#endregion
598
+ export type { AlveolusConfig, CheckSettings, Finding, FindingData, ImportScope, PackageDependencies, RuleId, RuleMeta, RuleSetting, Settings, Violation };
599
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":["Project","FileTarget","Project","Project","MorphProject","Project"],"sources":["../src/architecture/allowed-packages.ts","../src/conventions/core-api.ts","../src/conventions/layers.ts","../src/conventions/building-blocks.ts","../src/model/classes/named-type.ts","../src/model/classes/class-type.ts","../src/model/classes/heritage.ts","../src/model/classes/return-shape.ts","../src/model/classes/member.ts","../src/model/classes/class-declaration.ts","../src/model/dependencies/dependency.ts","../src/model/dependencies/global-use.ts","../src/model/statements/disable-comment.ts","../src/model/statements/throw.ts","../src/model/statements/top-level-statement.ts","../src/model/source-file.ts","../src/model/project.ts","../src/architecture/core-api.ts","../src/architecture/paths/location.ts","../src/architecture/paths/place.ts","../src/architecture/building-blocks.ts","../src/architecture/context-map.ts","../src/architecture/layers.ts","../src/architecture/settings.ts","../src/architecture/paths/layer-shape.ts","../src/architecture/architecture.ts","../src/rules/framework/finding.ts","../src/rules/framework/wording.ts","../src/rules/framework/rule.ts","../src/rules/tooling/no-loose-disable.rule.ts","../src/rules/registry.ts","../src/check/violation.ts","../src/check/baseline.ts","../src/importer/importer.ts","../src/importer/ts-morph/ts-morph-importer.ts","../src/check/checker.ts","../src/check/report.ts","../src/cli/cli.ts","../src/config/alveolus-config.ts","../src/config/config.ts","../src/config/config-loader.ts","../src/config/define-config.ts"],"mappings":"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"}
package/dist/index.mjs ADDED
@@ -0,0 +1,9 @@
1
+ import { a as Config, c as RuleRegistry, d as AllowedPackages, f as Baseline, i as ConfigLoader, l as Rule, n as TsMorphImporter, o as Report, r as Importer, s as Checker, t as Cli, u as Architecture } from "./cli-CwPCGjDg.mjs";
2
+ //#region src/config/define-config.ts
3
+ function defineConfig(config) {
4
+ return config;
5
+ }
6
+ //#endregion
7
+ export { AllowedPackages, Architecture, Baseline, Checker, Cli, Config, ConfigLoader, Importer, Report, Rule, RuleRegistry, TsMorphImporter, defineConfig };
8
+
9
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/config/define-config.ts"],"sourcesContent":["import type { AlveolusConfig } from \"./alveolus-config.ts\";\n\nexport function defineConfig(config: AlveolusConfig): AlveolusConfig {\n\treturn config;\n}\n"],"mappings":";;AAEA,SAAgB,aAAa,QAAwC;CACpE,OAAO;AACR"}
package/package.json CHANGED
@@ -1,6 +1,55 @@
1
1
  {
2
+ "bin": {
3
+ "alveolus": "./dist/bin.mjs"
4
+ },
5
+ "dependencies": {
6
+ "commander": "^15.0.0",
7
+ "jiti": "^2.7.0",
8
+ "picocolors": "^1.1.1",
9
+ "ts-morph": "^28.0.0",
10
+ "zod": "^4.6.5"
11
+ },
12
+ "description": "Architecture checks that keep a Domain-Driven Design project from drifting",
13
+ "devDependencies": {
14
+ "@alveolus/core": "0.1.0"
15
+ },
16
+ "engines": {
17
+ "node": ">=24"
18
+ },
19
+ "exports": {
20
+ ".": "./dist/index.mjs",
21
+ "./bin": "./dist/bin.mjs",
22
+ "./package.json": "./package.json"
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "homepage": "https://alveolus.dev/",
28
+ "keywords": [
29
+ "ddd",
30
+ "domain-driven-design",
31
+ "typescript",
32
+ "architecture",
33
+ "architecture-testing",
34
+ "linter",
35
+ "bounded-context",
36
+ "hexagonal-architecture",
37
+ "clean-architecture",
38
+ "dependency-rules",
39
+ "cli"
40
+ ],
41
+ "license": "MIT",
2
42
  "name": "@alveolus/arch",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
43
+ "repository": {
44
+ "directory": "packages/arch",
45
+ "type": "git",
46
+ "url": "git+https://github.com/alveolusjs/alveolus.git"
47
+ },
48
+ "sideEffects": false,
49
+ "type": "module",
50
+ "version": "0.1.0",
51
+ "scripts": {
52
+ "build": "tsdown",
53
+ "typecheck": "tsc -p tsconfig.json"
54
+ }
6
55
  }