UNPKG

@mintlify/scraping

Version:

Scrape documentation frameworks to Mintlify docs

139 lines (129 loc) 4.07 kB
import { mkdtemp, rm, writeFile } from 'node:fs/promises'; import os from 'node:os'; import path from 'node:path'; import { describe, expect, it, beforeEach, afterEach } from 'vitest'; import { convertTypedoc } from '../src/sdk/converters/typedoc.js'; const project = { id: 0, name: '@auth0/example', kind: 1, children: [ { id: 1, name: 'Client', kind: 128, comment: { summary: [ { kind: 'text', text: 'A client for the [API](https://example.com). Second sentence.' }, ], }, children: [ { id: 2, name: 'constructor', kind: 512, signatures: [ { id: 3, name: 'new Client', kind: 16384, parameters: [ { id: 4, name: 'options', kind: 32768, type: { type: 'reference', name: 'ClientOptions' }, comment: { summary: [{ kind: 'text', text: 'The options.' }] }, }, ], type: { type: 'reference', name: 'Client', target: 1 }, }, ], }, { id: 5, name: 'token', kind: 1024, flags: { isOptional: true }, type: { type: 'union', types: [ { type: 'intrinsic', name: 'string' }, { type: 'intrinsic', name: 'undefined' }, ], }, comment: { summary: [{ kind: 'text', text: 'The current token.' }] }, }, { id: 6, name: 'login', kind: 2048, signatures: [ { id: 7, name: 'login', kind: 4096, comment: { summary: [ { kind: 'text', text: 'Logs in. See ' }, { kind: 'inline-tag', text: 'ClientOptions', target: 8 }, ], }, type: { type: 'reference', name: 'Promise', typeArguments: [{ type: 'intrinsic', name: 'void' }], }, }, ], }, ], }, { id: 8, name: 'ClientOptions', kind: 256, children: [ { id: 9, name: 'domain', kind: 1024, type: { type: 'intrinsic', name: 'string' }, }, ], }, { id: 10, name: 'hidden', kind: 64, flags: { isPrivate: true }, signatures: [] }, ], }; describe('convertTypedoc', () => { let directory: string; beforeEach(async () => { directory = await mkdtemp(path.join(os.tmpdir(), 'typedoc-')); }); afterEach(async () => { await rm(directory, { recursive: true, force: true }); }); it('converts a typedoc project into pages and groups', async () => { const artifact = path.join(directory, 'typedoc.json'); await writeFile(artifact, JSON.stringify(project)); const reference = await convertTypedoc(artifact); expect(reference.groups).toEqual([ { group: 'Classes', pages: ['classes/Client'] }, { group: 'Interfaces', pages: ['interfaces/ClientOptions'] }, ]); const client = reference.pages.find((page) => page.slug === 'classes/Client'); expect(client).toBeDefined(); expect(client?.title).toBe('Client'); expect(client?.tag).toBe('CLASS'); expect(client?.description).toBe('A client for the API.'); expect(client?.content).toContain('## Constructor'); expect(client?.content).toContain('new Client(options: ClientOptions): Client'); expect(client?.content).toContain( '<ResponseField name={"options"} type={"ClientOptions"} required>' ); expect(client?.content).toContain('<ResponseField name={"token"} type={"string | undefined"}>'); expect(client?.content).toContain('### login()'); expect(client?.content).toContain('[ClientOptions](/interfaces/ClientOptions)'); expect(client?.content).not.toContain('hidden'); }); });