# types/manifest.types.ts

> 59 lines of code and 10 definitions.

Tree: GovLab Docs
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/docs#file-docs-types-manifest-types-ts
Source text: https://banes-lab.com/source/docs/types/manifest.types.ts.txt

Listed in [types](https://banes-lab.com/api/source/docs/types.md), after [types/location.types.ts](https://banes-lab.com/source/docs/types/location.types.ts.md) and before [types/markdown.types.ts](https://banes-lab.com/source/docs/types/markdown.types.ts.md).

## Definitions

- `CatalogEntry` (interface_declaration, line 5, exported)
- `ManifestModule` (interface_declaration, line 11, exported)
- `PluginContext` (interface_declaration, line 22, exported)
- `ManifestSection` (interface_declaration, line 27, exported)
- `ManifestPlugin` (interface_declaration, line 32, exported)
- `QueryCriteria` (interface_declaration, line 39, exported)
- `DiscoverOptions` (interface_declaration, line 48, exported)
- `UserRegistries` (interface_declaration, line 53, exported)
- `RegistryExtensions` (interface_declaration, line 60, exported)
- `Relationship` (interface_declaration, line 66, exported)

## Contained in

- [types](https://banes-lab.com/anatomy/docs/folder-docs-types.md)

## Source

```typescript
import type { DocForm } from "#types/location.types";
import type { DocVerb } from "#types/reference.types";
import type { Manifest } from "#types/readme.types";

export interface CatalogEntry {
    [key: string]: unknown;
    category: string | null;
    value: string;
}

export interface ManifestModule {
    dir: string;
    group: string;
    label: string;
    manifest: Manifest;
    pkg: Record<string, unknown>;
    relPath: string;
    slug: string;
    ecosystemHint?: string;
}

export interface PluginContext {
    module: ManifestModule;
    requires: (slug: string) => string[];
}

export interface ManifestSection {
    keys?: string[];
    validate?: (manifest: Manifest) => string[];
}

export interface ManifestPlugin {
    name: string;
    section?: ManifestSection;
    contribute?: (manifest: Manifest, entry: CatalogEntry, context?: PluginContext) => void;
    filter?: (manifest: Manifest, module?: ManifestModule) => boolean;
}

export interface QueryCriteria {
    group?: string;
    maturity?: string;
    ecosystem?: string;
    capability?: string;
    domain?: string;
    visibility?: string;
}

export interface DiscoverOptions {
    allowDot?: ReadonlySet<string>;
    isShaped?: (manifest: Manifest) => boolean;
}

export interface UserRegistries {
    activityVerbs: Readonly<Record<string, string>>;
    concerns: readonly string[];
    forms: Readonly<Record<string, DocForm>>;
    refVerbs: Readonly<Record<string, DocVerb>>;
}

export interface RegistryExtensions {
    concerns: unknown[];
    forms: unknown[];
    refVerbs: unknown[];
}

export interface Relationship {
    package: string;
    reason: string;
}
```
