|
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; |
|
} |
|
}; |
|
} |
|
|