diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 85b777e6..782e57ee 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,3 +1,4 @@ +export * from './node/config' export { createDevToolsContext } from './node/context' export { DevTools } from './node/plugins' export { createDevToolsMiddleware } from './node/server' diff --git a/packages/core/src/node/config.ts b/packages/core/src/node/config.ts new file mode 100644 index 00000000..16b5191e --- /dev/null +++ b/packages/core/src/node/config.ts @@ -0,0 +1,35 @@ +import type { StartOptions } from './cli-commands' +import { isObject } from './utils' + +export interface DevToolsConfig extends Partial { + enabled: boolean + /** + * Disable client authentication. + * + * Beware that if you disable client authentication, + * any browsers can connect to the devtools and access to your server and filesystem. + * (including other devices, if you open server `host` option to LAN or WAN) + * + * @default true + */ + clientAuth?: boolean +} + +export interface ResolvedDevToolsConfig { + config: Omit & { host: string } + enabled: boolean +} + +export function normalizeDevToolsConfig( + config: DevToolsConfig | boolean | undefined, + host: string, +): ResolvedDevToolsConfig { + return { + enabled: config === true || !!(config && config.enabled), + config: { + ...(isObject(config) ? config : {}), + clientAuth: isObject(config) ? (config.clientAuth ?? true) : true, + host: isObject(config) ? (config.host ?? host) : host, + }, + } +} diff --git a/packages/core/src/node/utils.ts b/packages/core/src/node/utils.ts new file mode 100644 index 00000000..4b3c10e0 --- /dev/null +++ b/packages/core/src/node/utils.ts @@ -0,0 +1,3 @@ +export function isObject(value: unknown): value is Record { + return Object.prototype.toString.call(value) === '[object Object]' +} diff --git a/test/exports/@vitejs/devtools.yaml b/test/exports/@vitejs/devtools.yaml index 76311d2c..d21dfabc 100644 --- a/test/exports/@vitejs/devtools.yaml +++ b/test/exports/@vitejs/devtools.yaml @@ -2,6 +2,7 @@ createDevToolsContext: function createDevToolsMiddleware: function DevTools: function + normalizeDevToolsConfig: function ./cli-commands: build: function start: function