Skip to content

Commit

Permalink
feat(shared): add addViteOptimizeDepsNeedsInterop
Browse files Browse the repository at this point in the history
  • Loading branch information
Mister-Hope committed Dec 12, 2023
1 parent dc0db36 commit 552bf31
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 72 deletions.
6 changes: 6 additions & 0 deletions packages/md-enhance/src/node/plugin.ts
Expand Up @@ -22,6 +22,7 @@ import {
addCustomElement,
addViteOptimizeDepsExclude,
addViteOptimizeDepsInclude,
addViteOptimizeDepsNeedsInterop,
addViteSsrExternal,
addViteSsrNoExternal,
chainWebpack,
Expand Down Expand Up @@ -285,6 +286,11 @@ export const mdEnhancePlugin =

if (status.kotlinPlayground) {
addViteOptimizeDepsInclude(bundlerOptions, app, "kotlin-playground");
addViteOptimizeDepsNeedsInterop(
bundlerOptions,
app,
"kotlin-playground",
);
addViteSsrExternal(bundlerOptions, app, "kotlin-playground");
}

Expand Down
133 changes: 61 additions & 72 deletions packages/shared/src/node/bundler/vite/viteHelper.ts
Expand Up @@ -7,126 +7,115 @@ import { detectPackageManager } from "../../utils/index.js";
import { getBundlerName } from "../getBundler.js";

/**
* Add modules to Vite `optimizeDeps.include` list
* Add Vite config
*
* @param bundlerOptions VuePress Bundler config
* @param app VuePress Node App
* @param config Vite config
*/
export const addViteOptimizeDepsInclude = (
export const addViteConfig = (
bundlerOptions: unknown,
app: App,
module: string | string[],
config: Record<string, unknown>,
): void => {
if (
getBundlerName(app) === "vite" &&
("OPTIMIZE_DEPS" in process.env
? Boolean(process.env["OPTIMIZE_DEPS"])
: detectPackageManager() !== "pnpm")
) {
if (getBundlerName(app) === "vite") {
const viteBundlerOptions = <ViteBundlerOptions>bundlerOptions;

viteBundlerOptions.viteOptions = mergeViteConfig(
viteBundlerOptions.viteOptions || {},
{
optimizeDeps: {
include: isString(module) ? [module] : module,
},
},
);

viteBundlerOptions.viteOptions.optimizeDeps!.include = Array.from(
new Set(viteBundlerOptions.viteOptions.optimizeDeps!.include),
config,
);
}
};

/**
* Add modules to Vite `optimizeDeps.exclude` list
* Add modules to Vite `optimizeDeps.include` list
*
* @param bundlerOptions VuePress Bundler config
* @param app VuePress Node App
*/
export const addViteOptimizeDepsExclude = (
export const addViteOptimizeDepsInclude = (
bundlerOptions: unknown,
app: App,
module: string | string[],
): void => {
if (getBundlerName(app) === "vite") {
const viteBundlerOptions = <ViteBundlerOptions>bundlerOptions;

viteBundlerOptions.viteOptions = mergeViteConfig(
viteBundlerOptions.viteOptions || {},
{
optimizeDeps: {
exclude: isString(module) ? [module] : module,
},
if (
"OPTIMIZE_DEPS" in process.env
? Boolean(process.env["OPTIMIZE_DEPS"])
: detectPackageManager() !== "pnpm"
)
addViteConfig(bundlerOptions, app, {
optimizeDeps: {
include: isString(module) ? [module] : module,
},
);

viteBundlerOptions.viteOptions.optimizeDeps!.exclude = Array.from(
new Set(viteBundlerOptions.viteOptions.optimizeDeps!.exclude),
);
}
});
};

/**
* Add modules to Vite `ssr.external` list
* Add modules to Vite `optimizeDeps.exclude` list
*
* @param bundlerOptions VuePress Bundler config
* @param app VuePress Node App
*/
export const addViteSsrExternal = (
export const addViteOptimizeDepsExclude = (
bundlerOptions: unknown,
app: App,
module: string | string[],
): void => {
if (getBundlerName(app) === "vite") {
const viteBundlerOptions = <ViteBundlerOptions>bundlerOptions;

viteBundlerOptions.viteOptions = mergeViteConfig(
viteBundlerOptions.viteOptions || {},
{
ssr: {
external: isString(module) ? [module] : module,
},
},
);
}
addViteConfig(bundlerOptions, app, {
optimizeDeps: {
exclude: isString(module) ? [module] : module,
},
});
};

/**
* Add modules to Vite `ssr.noExternal` list
* Add modules to Vite `optimizeDeps.needsInterop` list
*
* @param bundlerOptions VuePress Bundler config
* @param app VuePress Node App
*/
export const addViteSsrNoExternal = (
export const addViteOptimizeDepsNeedsInterop = (
bundlerOptions: unknown,
app: App,
module: string | string[],
): void => {
if (getBundlerName(app) === "vite") {
const viteBundlerOptions = <ViteBundlerOptions>bundlerOptions;

viteBundlerOptions.viteOptions = mergeViteConfig(
viteBundlerOptions.viteOptions || {},
{
ssr: {
noExternal: isString(module) ? [module] : module,
},
},
);
}
addViteConfig(bundlerOptions, app, {
optimizeDeps: {
needsInterop: isString(module) ? [module] : module,
},
});
};

export const addViteConfig = (
/**
* Add modules to Vite `ssr.external` list
*
* @param bundlerOptions VuePress Bundler config
* @param app VuePress Node App
*/
export const addViteSsrExternal = (
bundlerOptions: unknown,
app: App,
config: Record<string, unknown>,
module: string | string[],
): void => {
if (getBundlerName(app) === "vite") {
const viteBundlerOptions = <ViteBundlerOptions>bundlerOptions;
addViteConfig(bundlerOptions, app, {
ssr: {
external: isString(module) ? [module] : module,
},
});
};

viteBundlerOptions.viteOptions = mergeViteConfig(
viteBundlerOptions.viteOptions || {},
config,
);
}
/**
* Add modules to Vite `ssr.noExternal` list
*/
export const addViteSsrNoExternal = (
bundlerOptions: unknown,
app: App,
module: string | string[],
): void => {
addViteConfig(bundlerOptions, app, {
ssr: {
noExternal: isString(module) ? [module] : module,
},
});
};

0 comments on commit 552bf31

Please sign in to comment.