30 lines
830 B
TypeScript
30 lines
830 B
TypeScript
import { promises as fs } from "fs"
|
|
import { parseDocument } from "yaml"
|
|
import { OpenAPI } from "types"
|
|
import dereference from "./dereference"
|
|
import { unstable_cache } from "next/cache"
|
|
|
|
async function getSchemaContent_(schemaPath: string, baseSchemasPath: string) {
|
|
const schemaContent = await fs.readFile(schemaPath, "utf-8")
|
|
const schema = parseDocument(schemaContent).toJS() as OpenAPI.SchemaObject
|
|
|
|
// resolve references in schema
|
|
const dereferencedDocument = await dereference({
|
|
basePath: baseSchemasPath,
|
|
schemas: [schema],
|
|
})
|
|
|
|
return {
|
|
dereferencedDocument,
|
|
originalSchema: schema,
|
|
}
|
|
}
|
|
|
|
const getSchemaContent = unstable_cache(
|
|
async (schemaPath: string, baseSchemasPath: string) =>
|
|
getSchemaContent_(schemaPath, baseSchemasPath),
|
|
["tag-schema"]
|
|
)
|
|
|
|
export default getSchemaContent
|