diff --git a/.changeset/lovely-pots-tap.md b/.changeset/lovely-pots-tap.md new file mode 100644 index 0000000000..853d812bb3 --- /dev/null +++ b/.changeset/lovely-pots-tap.md @@ -0,0 +1,3 @@ +--- + +--- diff --git a/packages/rspeedy/core/src/cli/build.ts b/packages/rspeedy/core/src/cli/build.ts index fdab475ba2..2fd49209f2 100644 --- a/packages/rspeedy/core/src/cli/build.ts +++ b/packages/rspeedy/core/src/cli/build.ts @@ -6,10 +6,9 @@ import { logger } from '@rsbuild/core' import type { Command } from 'commander' import type { CommonOptions } from './commands.js' -import type { CreateRspeedyOptions } from '../create-rspeedy.js' import { exit } from './exit.js' -import { loadConfig } from '../config/loadConfig.js' import { createRspeedy } from '../create-rspeedy.js' +import { init } from './init.js' import { isCI } from '../utils/is-ci.js' export type BuildOptions = CommonOptions & { @@ -26,27 +25,9 @@ export async function build( const shouldExit = process.env['RSDOCTOR'] !== 'true' || isCI() try { - const { content: rspeedyConfig } = await loadConfig({ - cwd, - configPath: buildOptions.config, - }) - - const options: CreateRspeedyOptions = { - cwd, - rspeedyConfig, - } - - if (buildOptions.noEnv) { - options.loadEnv = false - } else if (buildOptions.envMode) { - options.loadEnv = { mode: buildOptions.envMode } - } - - if (buildOptions.environment) { - options.environment = buildOptions.environment - } + const { createRspeedyOptions } = await init(cwd, buildOptions) - const rspeedy = await createRspeedy(options) + const rspeedy = await createRspeedy(createRspeedyOptions) await rspeedy.build() } catch (error) { diff --git a/packages/rspeedy/core/src/cli/dev.ts b/packages/rspeedy/core/src/cli/dev.ts index 97e7cb49d6..c5ac98b5b3 100644 --- a/packages/rspeedy/core/src/cli/dev.ts +++ b/packages/rspeedy/core/src/cli/dev.ts @@ -9,10 +9,9 @@ import type { Command } from 'commander' import color from 'picocolors' import type { CommonOptions } from './commands.js' -import { loadConfig, resolveConfigPath } from '../config/loadConfig.js' import { createRspeedy } from '../create-rspeedy.js' -import type { CreateRspeedyOptions } from '../create-rspeedy.js' import { exit } from './exit.js' +import { init } from './init.js' export interface DevOptions extends CommonOptions { base?: string | undefined @@ -26,17 +25,10 @@ export async function dev( ): Promise { let onBeforeRestart: (() => Promise)[] = [] try { - const configPath = resolveConfigPath(cwd, devOptions.config) - - const { content: rspeedyConfig } = await loadConfig({ + const { rspeedyConfig, configPath, createRspeedyOptions } = await init( cwd, - configPath, - }) - - if (devOptions.base) { - rspeedyConfig.server ??= {} - rspeedyConfig.server.base = devOptions.base - } + devOptions, + ) const watchedFiles = [configPath] @@ -65,22 +57,7 @@ export async function dev( }, ) - const options: CreateRspeedyOptions = { - cwd, - rspeedyConfig, - } - - if (devOptions.noEnv) { - options.loadEnv = false - } else if (devOptions.envMode) { - options.loadEnv = { mode: devOptions.envMode } - } - - if (devOptions.environment) { - options.environment = devOptions.environment - } - - const rspeedy = await createRspeedy(options) + const rspeedy = await createRspeedy(createRspeedyOptions) const server = await rspeedy.createDevServer() diff --git a/packages/rspeedy/core/src/cli/init.ts b/packages/rspeedy/core/src/cli/init.ts new file mode 100644 index 0000000000..b306defa95 --- /dev/null +++ b/packages/rspeedy/core/src/cli/init.ts @@ -0,0 +1,46 @@ +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import type { Config } from '../config/index.js' +import { loadConfig } from '../config/loadConfig.js' +import type { CreateRspeedyOptions } from '../create-rspeedy.js' +import type { BuildOptions } from './build.js' +import type { DevOptions } from './dev.js' +import type { InspectOptions } from './inspect.js' +import type { PreviewOptions } from './preview.js' + +export async function init( + cwd: string, + options: BuildOptions | DevOptions | InspectOptions | PreviewOptions, +): Promise<{ + configPath: string + createRspeedyOptions: CreateRspeedyOptions + rspeedyConfig: Config +}> { + const { content: rspeedyConfig, configPath } = await loadConfig({ + cwd, + configPath: options.config, + }) + + const createRspeedyOptions: CreateRspeedyOptions = { + cwd, + rspeedyConfig, + } + + if (options.noEnv) { + createRspeedyOptions.loadEnv = false + } else if (options.envMode) { + createRspeedyOptions.loadEnv = { mode: options.envMode } + } + + if ('base' in options && options.base) { + rspeedyConfig.server ??= {} + rspeedyConfig.server.base = options.base + } + + if ('environment' in options && options.environment) { + createRspeedyOptions.environment = options.environment + } + + return { createRspeedyOptions, configPath, rspeedyConfig } +} diff --git a/packages/rspeedy/core/src/cli/inspect.ts b/packages/rspeedy/core/src/cli/inspect.ts index 6c775883cc..cc157c44a8 100644 --- a/packages/rspeedy/core/src/cli/inspect.ts +++ b/packages/rspeedy/core/src/cli/inspect.ts @@ -8,9 +8,8 @@ import type { Command } from 'commander' import type { CommonOptions } from './commands.js' import { exit } from './exit.js' -import { loadConfig } from '../config/loadConfig.js' import { createRspeedy } from '../create-rspeedy.js' -import type { CreateRspeedyOptions } from '../create-rspeedy.js' +import { init } from './init.js' export interface InspectOptions extends CommonOptions { mode?: 'production' | 'development' | undefined @@ -24,23 +23,8 @@ export async function inspect( inspectOptions: InspectOptions, ): Promise { try { - const { content: rspeedyConfig } = await loadConfig({ - cwd, - configPath: inspectOptions.config, - }) - - const options: CreateRspeedyOptions = { - cwd, - rspeedyConfig, - } - - if (inspectOptions.noEnv) { - options.loadEnv = false - } else if (inspectOptions.envMode) { - options.loadEnv = { mode: inspectOptions.envMode } - } - - const rspeedy = await createRspeedy(options) + const { createRspeedyOptions } = await init(cwd, inspectOptions) + const rspeedy = await createRspeedy(createRspeedyOptions) await rspeedy.inspectConfig({ mode: inspectOptions.mode diff --git a/packages/rspeedy/core/src/cli/preview.ts b/packages/rspeedy/core/src/cli/preview.ts index 814d3575a2..67a7477bab 100644 --- a/packages/rspeedy/core/src/cli/preview.ts +++ b/packages/rspeedy/core/src/cli/preview.ts @@ -9,9 +9,8 @@ import color from 'picocolors' import type { CommonOptions } from './commands.js' import { exit } from './exit.js' -import { loadConfig, resolveConfigPath } from '../config/loadConfig.js' import { createRspeedy } from '../create-rspeedy.js' -import type { CreateRspeedyOptions } from '../create-rspeedy.js' +import { init } from './init.js' export interface PreviewOptions extends CommonOptions { base?: string | undefined @@ -23,30 +22,9 @@ export async function preview( previewOptions: PreviewOptions, ): Promise { try { - const configPath = resolveConfigPath(cwd, previewOptions.config) + const { createRspeedyOptions } = await init(cwd, previewOptions) - const { content: rspeedyConfig } = await loadConfig({ - cwd, - configPath, - }) - - if (previewOptions.base) { - rspeedyConfig.server ??= {} - rspeedyConfig.server.base = previewOptions.base - } - - const options: CreateRspeedyOptions = { - cwd, - rspeedyConfig, - } - - if (previewOptions.noEnv) { - options.loadEnv = false - } else if (previewOptions.envMode) { - options.loadEnv = { mode: previewOptions.envMode } - } - - const rspeedy = await createRspeedy(options) + const rspeedy = await createRspeedy(createRspeedyOptions) await rspeedy.initConfigs()