Core Package
The @ci-dokumentor/core
package contains the fundamental building blocks and abstractions that power the entire CI Dokumentor ecosystem.
Overview
The core package provides:
- Services - Core business logic and orchestration
- Adapters - Interface implementations for various platforms
- Interfaces - Contracts for extensibility
- Dependencies - Dependency injection container setup
Key Components
Services
RepositoryService
Manages repository information and platform detection:
class RepositoryService {
getSupportedRepositoryPlatforms(): string[];
autoDetectRepositoryPlatform(): Promise<string | null>;
getRepository(): Promise<Repository>;
}
Repository Model:
type Repository = {
owner: string;
name: string;
url: string;
fullName: string; // owner/name format
logo?: string;
license?: {
name: string;
spdxId: string | null;
url: string | null;
};
};
Note: The runtime Repository
type in source also includes optional contributing
metadata (a small object with a url
field) used by some generator adapters.
GeneratorService
Manages CI/CD platform adapters and documentation generation
FormatterService
Handles content formatting and output adapters
Interfaces
RepositoryProvider
Interface for repository platform providers:
interface RepositoryProvider<
Options extends RepositoryOptions = RepositoryOptions,
> {
getPlatformName(): string;
/**
* Priority used during auto-detection. Higher values are checked first.
*/
getPriority(): number;
/**
* Check whether this provider supports the current repository context
*/
supports(): Promise<boolean>;
/**
* Return repository information
*/
getRepository(): Promise<Repository>;
/**
* Optional: provide CLI option descriptors specific to this provider
*/
getOptions(): RepositoryOptionsDescriptors<Options>;
/**
* Optional: apply runtime option values to the provider
*/
setOptions(options: Partial<Options>): void;
}
GeneratorAdapter
Interface for CI/CD platform adapters:
interface GeneratorAdapter {
getPlatformName(): string;
getSupportedSections(): string[];
supportsSource(source: string): boolean;
getDocumentationPath(source: string): string;
generateDocumentation(args: {
source: string;
sections: GenerateSectionsOptions;
rendererAdapter: RendererAdapter;
repositoryProvider: RepositoryProvider;
}): Promise<void>;
}
FormatterAdapter
Interface for content formatters:
interface FormatterAdapter {
supportsLanguage(language: FormatterLanguage): boolean;
heading(input: ReadableContent, level?: number): ReadableContent;
center(input: ReadableContent): ReadableContent;
comment(input: ReadableContent): ReadableContent;
paragraph(input: ReadableContent): ReadableContent;
bold(input: ReadableContent): ReadableContent;
italic(input: ReadableContent): ReadableContent;
code(input: ReadableContent, language?: ReadableContent): ReadableContent;
inlineCode(input: ReadableContent): ReadableContent;
link(text: ReadableContent, url: ReadableContent): ReadableContent;
image(
url: ReadableContent,
altText: ReadableContent,
options?: { width?: string; align?: string },
): ReadableContent;
table(headers: ReadableContent[], rows: ReadableContent[][]): ReadableContent;
badge(
label: ReadableContent,
message: ReadableContent,
color?: ReadableContent,
): ReadableContent;
lineBreak(): ReadableContent;
}
MarkdownFormatterAdapter
Provides Markdown-specific formatting capabilities.
RendererAdapter
Interface for rendering/finalization adapters (used by generator adapters to produce output or diffs):
interface RendererAdapter {
initialize(
destination: string,
formatterAdapter: FormatterAdapter,
): Promise<void>;
getFormatterAdapter(): FormatterAdapter;
writeSection(sectionIdentifier: string, data: ReadableContent): Promise<void>;
/**
* Finalize rendering and return an optional string (for example a diff)
*/
finalize(): Promise<string | undefined>;
}
FileRendererAdapter
Handles file system operations for documentation output.
DiffRendererAdapter
Generates diffs between existing and new documentation.
Dependency Injection
The core package uses InversifyJS for dependency injection. The container is set up in container.ts
and provides bindings for all services and adapters.
Usage
The core package is used by other packages in the CI Dokumentor ecosystem:
- CLI Package - Uses
RepositoryService
andGeneratorService
for command execution - Repository Packages - Implement
RepositoryProvider
interface - CI/CD Packages - Implement
GeneratorAdapter
interface
Building
# Build the core package
nx build core
# Run tests
nx test core
# Run linting
nx lint core
Testing
Testing for the core package is covered by the centralized developer testing guide: ../developers/testing
(see packages/docs/content/developers/testing.md
). For package-specific tests, open the spec files under packages/core/src/**/*.spec.ts
.
Related Packages
- CLI Package - Command-line interface built on core
- Repository Git - Git repository provider implementation
- Repository GitHub - GitHub-specific repository provider
- CI/CD GitHub Actions - GitHub Actions manifest parser and generator