@apiture/api-ref-resolver
Version:
Tool to merge multiple OpenAPI or AsyncAPI documents that use JSON Reference links (`$ref`) to reference API definition elements across source files.
65 lines (64 loc) • 2.35 kB
TypeScript
/// <reference types="node" />
import { URL } from 'url';
import { JsonNavigation, JsonKey, JsonItem } from './JsonNavigation';
import type { RefObject } from './RefVisitor';
export declare type ApiObject = object | [] | string | boolean | null | number;
interface ApiResource {
url: URL;
api: ApiObject;
fragment?: string;
itemPath: JsonKey[];
}
export interface ApiRefOptions {
verbose?: boolean;
noMarkers?: boolean;
conflictStrategy?: 'error' | 'rename' | 'ignore';
outputFormat?: 'yaml' | 'json';
}
export interface ApiRefResolution {
api: ApiObject;
options: ApiRefOptions;
}
export declare class ApiRefResolver {
static readonly COMPONENT_REGEXP: RegExp;
private url;
private options;
private apiDocument;
private urlToApiObjectMap;
private alreadyRewritten;
private resolvedRefToRefMap;
private dateTime;
private changed;
static readonly TEMPORARY_MARKER = "x__resolved__";
static readonly RESOLVED_FROM_MARKER = "x-resolved-from";
static readonly RESOLVED_AT_MARKER = "x-resolved-at";
constructor(uri: string | URL, apiDocument?: ApiObject);
resolve(options?: ApiRefOptions): Promise<ApiRefResolution>;
cleanup(resolved: ApiObject): Promise<object>;
static deepClone: (obj: any) => any;
private replacementRefFor;
private rememberReplacementForRef;
private readFromFile;
private readFromUrl;
api(uri: string | URL): Promise<ApiResource>;
note(message: string): void;
static urlNonFragment(url: URL): URL;
private refResolvingVisitor;
private static urlFragment;
private relativeUrl;
private rewriteRefPaths;
private rewriteRefFragments;
private areRefsAlreadyRewritten;
private markRefsAlreadyRewritten;
private checkComponentConflict;
mergeRefObject(refObject: RefObject, apiElement: JsonItem): ApiObject;
private processComponentReplacement;
apiItem(api: ApiObject, itemPath: JsonKey[]): JsonItem;
sameComponentName(nav: JsonNavigation, componentKeys: JsonKey[]): boolean;
private isSimpleRef;
private processFullReplacement;
private processOtherReplacement;
tag(item: JsonItem, normalizedRefUrl: URL, nav: JsonNavigation | undefined, tagDateTime?: boolean): void;
taggable(item: JsonItem, nav: JsonNavigation): boolean;
}
export {};