import type { PackIndexEntry } from '@forgeax/engine-types'; import type { PackError } from './errors.js'; import { type MetaInventoryDocument, type ScanOptions, type ScanSourceDeclaration } from './scanner.js'; type CatalogImportMeta = Pick & { readonly source: string; readonly sourceRevision?: string; readonly buildPack?: boolean; }; export type CatalogBuildErrorCode = 'catalog-meta-schema-invalid' | 'catalog-scan-failed' | 'catalog-raw-source-unsupported' | 'catalog-scriptable-pack-invalid' | 'catalog-host-kind-conflict'; export interface CatalogBuildError { readonly code: CatalogBuildErrorCode; readonly path: string; readonly message: string; readonly expected?: string; readonly actual?: string; readonly hint?: string; readonly subjects?: readonly string[]; readonly cause?: PackError; } export type CatalogAuthority = 'authoritative' | 'degraded'; export interface CatalogBuildResult { readonly schemaVersion: 'catalog-legacy-v1'; readonly entries: readonly PackIndexEntry[]; readonly authority: CatalogAuthority; readonly diagnostics: readonly CatalogBuildError[]; readonly declarations: ReadonlyMap; readonly sourceDeclarations: ReadonlyMap; } export type CatalogProducerVisibility = (input: Pick) => boolean | Promise; export interface CatalogImporterPolicy { readonly disposition: 'publish' | 'exclude' | 'missing'; readonly expected: string; readonly hint: string; readonly hostProvided: boolean; } export interface CatalogBuildProjectionOptions { readonly base?: string; readonly scanOptions?: ScanOptions; readonly importerPolicy: (importer: string) => CatalogImporterPolicy; readonly visibility?: CatalogProducerVisibility; /** * Project physical source paths into a stable host-owned logical identity. * Scanner/declaration maps retain physical paths for I/O; only Catalog rows * use this projection so symlink farms cannot change publication identity. */ readonly sourceIdentityFor?: (sourcePath: string) => string; } /** * Project one physical source path into the catalog's browser-safe logical * locator. Physical paths remain the scanner/declaration keys; only catalog * rows use this projection. */ export declare function catalogSourcePathFor(cwd: string, path: string, sourceIdentityFor: CatalogBuildProjectionOptions['sourceIdentityFor']): string; export declare function metaPathForGuid(declarations: ReadonlyMap, guid: string): string | undefined; export declare function buildCatalogProjection(roots: readonly string[], options: CatalogBuildProjectionOptions): Promise; export {}; //# sourceMappingURL=catalog-builder.d.ts.map