mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-18 08:35:10 +00:00
30 lines
924 B
TypeScript
30 lines
924 B
TypeScript
import { type Filesystem, type OpenAPIV3xDocument, dereference } from '@gitbook/openapi-parser';
|
|
|
|
const dereferenceCache = new WeakMap<Filesystem, Promise<OpenAPIV3xDocument>>();
|
|
|
|
/**
|
|
* Memoized version of `dereferenceSchema`.
|
|
*/
|
|
export function dereferenceFilesystem(filesystem: Filesystem): Promise<OpenAPIV3xDocument> {
|
|
if (dereferenceCache.has(filesystem)) {
|
|
return dereferenceCache.get(filesystem) as Promise<OpenAPIV3xDocument>;
|
|
}
|
|
|
|
const promise = baseDereferenceFilesystem(filesystem);
|
|
dereferenceCache.set(filesystem, promise);
|
|
return promise;
|
|
}
|
|
|
|
/**
|
|
* Dereference an OpenAPI schema.
|
|
*/
|
|
async function baseDereferenceFilesystem(filesystem: Filesystem): Promise<OpenAPIV3xDocument> {
|
|
const result = await dereference(filesystem);
|
|
|
|
if (!result.schema) {
|
|
throw new Error('Failed to dereference OpenAPI document');
|
|
}
|
|
|
|
return result.schema as OpenAPIV3xDocument;
|
|
}
|