**What** - Renames /admin-next -> /admin - Renames @medusajs/admin-sdk -> @medusajs/admin-bundler - Creates a new package called @medusajs/admin-sdk that will hold all tooling relevant to creating admin extensions. This is currently `defineRouteConfig` and `defineWidgetConfig`, but will eventually also export methods for adding custom fields, register translation, etc. - cc: @shahednasser we should update the examples in the docs so these functions are imported from `@medusajs/admin-sdk`. People will also need to install the package in their project, as it's no longer a transient dependency. - cc: @olivermrbl we might want to publish a changelog when this is merged, as it is a breaking change, and will require people to import the `defineXConfig` from the new package instead of `@medusajs/admin-shared`. - Updates CODEOWNERS so /admin packages does not require a review from the UI team.
110 lines
2.5 KiB
TypeScript
110 lines
2.5 KiB
TypeScript
import { VIRTUAL_MODULES } from "@medusajs/admin-shared"
|
|
import path from "path"
|
|
import { Config } from "tailwindcss"
|
|
import type { InlineConfig } from "vite"
|
|
|
|
import { BundlerOptions } from "../types"
|
|
|
|
export async function getViteConfig(
|
|
options: BundlerOptions
|
|
): Promise<InlineConfig> {
|
|
const { searchForWorkspaceRoot, mergeConfig } = await import("vite")
|
|
const { default: react } = await import("@vitejs/plugin-react")
|
|
const { default: medusa } = await import("@medusajs/admin-vite-plugin")
|
|
|
|
const getPort = await import("get-port")
|
|
const hmrPort = await getPort.default()
|
|
|
|
const root = path.resolve(__dirname, "./")
|
|
|
|
const backendUrl = options.backendUrl ?? ""
|
|
const storefrontUrl = options.storefrontUrl ?? ""
|
|
|
|
const baseConfig: InlineConfig = {
|
|
root,
|
|
base: options.path,
|
|
build: {
|
|
emptyOutDir: true,
|
|
outDir: path.resolve(process.cwd(), options.outDir),
|
|
},
|
|
optimizeDeps: {
|
|
include: ["@medusajs/dashboard", "react-dom/client"],
|
|
exclude: VIRTUAL_MODULES,
|
|
},
|
|
define: {
|
|
__BASE__: JSON.stringify(options.path),
|
|
__BACKEND_URL__: JSON.stringify(backendUrl),
|
|
__STOREFRONT_URL__: JSON.stringify(storefrontUrl),
|
|
},
|
|
server: {
|
|
fs: {
|
|
allow: [searchForWorkspaceRoot(process.cwd())],
|
|
},
|
|
hmr: {
|
|
port: hmrPort,
|
|
},
|
|
middlewareMode: true,
|
|
},
|
|
css: {
|
|
postcss: {
|
|
plugins: [
|
|
require("tailwindcss")({
|
|
config: createTailwindConfig(root, options.sources),
|
|
}),
|
|
],
|
|
},
|
|
},
|
|
plugins: [
|
|
react(),
|
|
medusa({
|
|
sources: options.sources,
|
|
}),
|
|
],
|
|
}
|
|
|
|
if (options.vite) {
|
|
const customConfig = options.vite(baseConfig)
|
|
|
|
return mergeConfig(baseConfig, customConfig)
|
|
}
|
|
|
|
return baseConfig
|
|
}
|
|
|
|
function createTailwindConfig(entry: string, sources: string[] = []) {
|
|
const root = path.join(entry, "**/*.{js,ts,jsx,tsx}")
|
|
const html = path.join(entry, "index.html")
|
|
|
|
let dashboard = ""
|
|
|
|
try {
|
|
dashboard = path.join(
|
|
path.dirname(require.resolve("@medusajs/dashboard")),
|
|
"**/*.{js,ts,jsx,tsx}"
|
|
)
|
|
} catch (_e) {
|
|
// ignore
|
|
}
|
|
|
|
let ui: string = ""
|
|
|
|
try {
|
|
ui = path.join(
|
|
path.dirname(require.resolve("@medusajs/ui")),
|
|
"**/*.{js,ts,jsx,tsx}"
|
|
)
|
|
} catch (_e) {
|
|
// ignore
|
|
}
|
|
|
|
const extensions = sources.map((s) => path.join(s, "**/*.{js,ts,jsx,tsx}"))
|
|
|
|
const config: Config = {
|
|
presets: [require("@medusajs/ui-preset")],
|
|
content: [html, root, dashboard, ui, ...extensions],
|
|
darkMode: "class",
|
|
}
|
|
|
|
return config
|
|
}
|