gradio/js/_website/svelte.config.js
pngwn 204f3e13e1
fixes to website (#9615)
* fixes

* add changeset

* try something

* try 2

* fix

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
Co-authored-by: aliabd <ali.si3luwa@gmail.com>
2024-10-09 19:52:12 +01:00

144 lines
3.3 KiB
JavaScript

import adapter from "@sveltejs/adapter-static";
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
import { redirects } from "./src/routes/redirects.js";
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
import { mdsvex, code_highlighter } from "mdsvex";
import slugify from "@sindresorhus/slugify";
import { toString as to_string } from "hast-util-to-string";
const currentDir = path.dirname(fileURLToPath(import.meta.url));
let version = "4.0.0";
const get_version = async () => {
try {
const versionPath = path.join(
currentDir,
"src",
"lib",
"json",
"version.json"
);
if (!fs.existsSync(versionPath)) {
console.error(
"Using fallback version 4.0.0 as version.json was not found. Run `generate_jsons/generate.py` to get the latest version."
);
return version;
} else {
const versionData = fs.readFileSync(versionPath, "utf8");
const versionJson = JSON.parse(versionData);
version = versionJson.version;
}
} catch (error) {
console.error(
"Using fallback version 4.0.0 as version.json was not found. Run `generate_jsons/generate.py` to get the latest version."
);
}
return version;
};
get_version();
export function make_slug_processor() {
return function (name) {
const slug = slugify(name, { separator: "-", lowercase: true });
return slug;
};
}
const doc_slug = [];
function plugin() {
const get_slug = make_slug_processor();
return function transform(tree) {
tree.children.forEach((n) => {
if (n.type === "element" && ["h3"].includes(n.tagName)) {
const str_of_heading = to_string(n);
const slug = get_slug(str_of_heading);
doc_slug.push({
text: str_of_heading,
href: `#${slug}`,
level: parseInt(n.tagName.replace("h", ""))
});
if (!n.children) n.children = [];
n.properties.className = ["group", "header-tag"];
n.properties.id = [slug];
n.children.push({
type: "element",
tagName: "a",
properties: {
href: `#${slug}`,
className: ["invisible", "group-hover-visible"]
},
children: [
{
type: "element",
tagName: "img",
properties: {
src: "https://raw.githubusercontent.com/gradio-app/gradio/main/js/_website/src/lib/assets/img/anchor.svg",
className: ["anchor-img-small"]
},
children: []
}
]
});
}
});
};
}
/** @type {import('@sveltejs/kit').Config} */
const config = {
extensions: [".svelte", ".svx"],
preprocess: [
mdsvex({
extensions: [".svx"],
rehypePlugins: [plugin],
highlight: {
highlighter: async (code, lang) => {
const h = (await code_highlighter(code, lang, "")).replace(
/\{@html `|`\}/g,
""
);
return `<div class="codeblock"><CopyButton content={\`${code}\`}/>${h}</div>`;
}
}
}),
vitePreprocess()
],
kit: {
prerender: {
crawl: true,
entries: [
"*",
`/${version}/docs`,
`/${version}/guides`,
`/main/docs`,
`/main/guides`,
`/docs/js`,
`/docs/js/storybook`,
`/docs/js/`,
`/main/docs/js`,
`/main/docs/js/storybook`,
`/main/docs/js/`,
...Object.keys(redirects),
`/4.44.1/docs`,
`/4.44.1/guides`
],
handleMissingId: "warn"
},
files: {
lib: "src/lib"
},
adapter: adapter({
fallback: "404.html"
}),
paths: {
relative: false
}
}
};
export default config;