gradio / js /preview /src /plugins.ts
mindmime's picture
Upload folder using huggingface_hub
a03b3ba verified
import type { Plugin, PluginOption } from "vite";
import { svelte } from "@sveltejs/vite-plugin-svelte";
import { transform } from "sucrase";
import { viteCommonjs } from "@originjs/vite-plugin-commonjs";
import sucrase from "@rollup/plugin-sucrase";
import { createLogger } from "vite";
import { join } from "path";
const svelte_codes_to_ignore: Record<string, string> = {
"reactive-component": "Icon"
};
const RE_SVELTE_IMPORT =
/import\s+([\w*{},\s]+)\s+from\s+['"](svelte|svelte\/internal)['"]/g;
const RE_BARE_SVELTE_IMPORT = /import ("|')svelte(\/\w+)*("|')(;)*/g;
export const plugins: PluginOption[] = [
viteCommonjs() as Plugin,
svelte({
onwarn(warning, handler) {
if (
svelte_codes_to_ignore.hasOwnProperty(warning.code) &&
svelte_codes_to_ignore[warning.code] &&
warning.message.includes(svelte_codes_to_ignore[warning.code])
) {
return;
}
handler!(warning);
},
prebundleSvelteLibraries: false,
hot: true,
compilerOptions: {
discloseVersion: false
},
preprocess: [
{
script: ({ attributes, filename, content }) => {
if (attributes.lang === "ts") {
const compiledCode = transform(content, {
transforms: ["typescript"],
keepUnusedImports: true
});
return {
code: compiledCode.code,
map: compiledCode.sourceMap
};
}
}
}
]
}) as unknown as Plugin,
sucrase({
transforms: ["typescript"],
include: ["**/*.ts", "**/*.tsx"]
}) as unknown as Plugin
];
interface GradioPluginOptions {
mode: "dev" | "build";
svelte_dir: string;
backend_port?: number;
imports?: string;
}
export function make_gradio_plugin({
mode,
svelte_dir,
backend_port,
imports
}: GradioPluginOptions): Plugin {
return {
name: "gradio",
enforce: "pre",
transform(code) {
const new_code = code
.replace(RE_SVELTE_IMPORT, (str, $1, $2) => {
const identifier = $1.trim().startsWith("* as")
? $1.replace("* as", "").trim()
: $1.trim();
return `const ${identifier.replace(
" as ",
": "
)} = window.__gradio__svelte__internal;`;
})
.replace(RE_BARE_SVELTE_IMPORT, "");
return {
code: new_code,
map: null
};
},
resolveId(id) {
if (
id !== "svelte" &&
id !== "svelte/internal" &&
id.startsWith("svelte/")
) {
return join(svelte_dir, "svelte-submodules.js");
}
},
transformIndexHtml(html) {
return mode === "dev"
? [
{
tag: "script",
children: `window.__GRADIO_DEV__ = "dev";
window.__GRADIO__SERVER_PORT__ = ${backend_port};
window.__GRADIO__CC__ = ${imports};`
}
]
: undefined;
}
};
}