Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 24 additions & 20 deletions packages/js-api-generator/build.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
import {
Application,
DeclarationReflection,
Options,
PageEvent,
Reflection,
SignatureReflection,
TSConfigReader,
type RouterTarget,
type TypeDocOptions,
} from 'typedoc';
import {
MarkdownPageEvent,
MarkdownTheme,
MarkdownThemeContext,
type MarkdownApplication,
type PluginOptions,
} from 'typedoc-plugin-markdown';
import { existsSync, readFileSync, writeFileSync } from 'node:fs';

const typeDocConfigBaseOptions: Partial<TypeDocOptions | PluginOptions> = {
type ConfigOptions = Partial<Omit<TypeDocOptions, 'outputs'> & PluginOptions>;

const typeDocConfigBaseOptions: ConfigOptions = {
// TypeDoc options
// https://typedoc.org/options/
githubPages: false,
Expand All @@ -43,7 +43,7 @@ const typeDocConfigBaseOptions: Partial<TypeDocOptions | PluginOptions> = {

async function generator() {
if (existsSync('../tauri/packages/api/node_modules')) {
const coreJsOptions: Partial<TypeDocOptions> = {
const coreJsOptions: ConfigOptions = {
entryPoints: ['../tauri/packages/api/src/index.ts'],
tsconfig: '../tauri/packages/api/tsconfig.json',
gitRevision: 'dev',
Expand Down Expand Up @@ -101,7 +101,7 @@ async function generator() {
);

plugins.forEach(async (plugin) => {
const pluginJsOptions: Partial<TypeDocOptions> = {
const pluginJsOptions: ConfigOptions = {
entryPoints: [`../plugins-workspace/plugins/${plugin}/guest-js/index.ts`],
tsconfig: `../plugins-workspace/plugins/${plugin}/tsconfig.json`,
gitRevision: 'v2',
Expand All @@ -121,7 +121,7 @@ async function generator() {
}

if (existsSync('../tauri/packages/api/node_modules')) {
const coreJsOptions: Partial<TypeDocOptions> = {
const coreJsOptions: ConfigOptions = {
entryPoints: ['../tauri/packages/api/src/index.ts'],
tsconfig: '../tauri/packages/api/tsconfig.json',
gitRevision: 'dev',
Expand All @@ -139,28 +139,30 @@ async function generator() {
}

// Adapted from https://github.com/HiDeoo/starlight-typedoc
async function generateDocs(options: Partial<TypeDocOptions>) {
async function generateDocs(options: ConfigOptions) {
const outputDir = `../../src/content/docs${options.publicPath}`;

const app = await Application.bootstrapWithPlugins(options);
const app = await Application.bootstrapWithPlugins({
...options,
outputs: [{ name: 'markdown', path: outputDir }],
});
app.options.addReader(new TSConfigReader());
// @ts-ignore
app.renderer.defineTheme('tauri-theme', TauriTheme);

app.renderer.on(PageEvent.END, (event: PageEvent<DeclarationReflection>) => {
app.renderer.on(PageEvent.END, (event: PageEvent<RouterTarget>) => {
pageEventEnd(event);
});

const project = await app.convert();

if (project) {
await app.generateDocs(project, outputDir);
await app.generateOutputs(project);
}
}

// Adds frontmatter to the top of the file
// Adapted from https://github.com/HiDeoo/starlight-typedoc
function pageEventEnd(event: PageEvent<DeclarationReflection>) {
function pageEventEnd(event: PageEvent<RouterTarget>) {
if (!event.contents) {
return;
}
Expand All @@ -186,7 +188,7 @@ class TauriThemeRenderContext extends MarkdownThemeContext {
this.partials = {
...this.partials,
// Formats `@source` to be a single line
sources: (model: DeclarationReflection | SignatureReflection, options: object) => {
sources: (model, options) => {
if (!model.sources) {
return '';
}
Expand Down Expand Up @@ -229,16 +231,18 @@ class TauriThemeRenderContext extends MarkdownThemeContext {
}

// Adapted from https://github.com/HiDeoo/starlight-typedoc/blob/d95072e218004276942a5132ec8a4e3561425903/packages/starlight-typedoc/src/libs/theme.ts#L28
override getRelativeUrl = (url: string) => {
override urlTo(reflection: Reflection): string {
const url = super.urlTo(reflection);

if (/^(http|ftp)s?:\/\//.test(url)) {
return url;
}

url = decodeURI(
super.getRelativeUrl(url).replaceAll('.md', '/').replaceAll('.', '').toLowerCase()
).replaceAll('\\', '/');
return url;
};
return decodeURI(url.replaceAll('.md', '/').replaceAll('.', '').toLowerCase()).replaceAll(
'\\',
'/'
);
}
}

// Overrides and extensions based on https://github.com/tgreyuk/typedoc-plugin-markdown/blob/next/packages/typedoc-plugin-markdown/docs/usage/customizing.md
Expand Down
6 changes: 3 additions & 3 deletions packages/js-api-generator/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
"private": "true",
"dependencies": {
"github-slugger": "^2.0.0",
"typedoc": "0.26.6",
"typedoc-plugin-markdown": "4.2.6",
"typedoc-plugin-mdn-links": "3.2.11",
"typedoc": "0.28.19",
"typedoc-plugin-markdown": "4.12.0",
"typedoc-plugin-mdn-links": "5.1.1",
"typescript": "5.9"
}
}
Loading
Loading