diff --git a/.changeset/curly-peaches-do.md b/.changeset/curly-peaches-do.md new file mode 100644 index 00000000..045859a2 --- /dev/null +++ b/.changeset/curly-peaches-do.md @@ -0,0 +1,5 @@ +--- +"@svelte-add/core": minor +--- + +feat: added the shorthand `--default` flag to install the default adder options diff --git a/packages/core/adder/execute.ts b/packages/core/adder/execute.ts index 275d253d..3f2ce8c2 100644 --- a/packages/core/adder/execute.ts +++ b/packages/core/adder/execute.ts @@ -74,7 +74,7 @@ export async function executeAdders( let workingDirectory: string | null; if (isTesting) workingDirectory = remoteControlOptions.workingDirectory; - else workingDirectory = await determineWorkingDirectory(commonCliOptions.path); + else workingDirectory = determineWorkingDirectory(commonCliOptions.path); workingDirectory = await detectSvelteDirectory(workingDirectory); const createProject = workingDirectory == null; if (!workingDirectory) workingDirectory = process.cwd(); @@ -131,6 +131,16 @@ async function executePlan( if (!executionPlan.commonCliOptions.skipPreconditions) await validatePreconditions(adderDetails, executingAdder.name, executionPlan.workingDirectory, isTesting); + // applies the default option value to missing adder's cli options + if (executionPlan.commonCliOptions.default) { + for (const adder of adderDetails) { + const adderId = adder.config.metadata.id; + for (const [option, value] of Object.entries(adder.config.options)) { + executionPlan.cliOptionsByAdderId[adderId][option] ??= value.default; + } + } + } + // ask the user questions about unselected options await requestMissingOptionsFromUser(adderDetails, executionPlan); diff --git a/packages/core/adder/options.ts b/packages/core/adder/options.ts index 317232ef..637d8f75 100644 --- a/packages/core/adder/options.ts +++ b/packages/core/adder/options.ts @@ -37,8 +37,9 @@ export type OptionValues = { : never; }; -export type AvailableCliOptionKeys = "path" | "skipPreconditions" | "skipInstall"; +export type AvailableCliOptionKeys = keyof AvailableCliOptionKeyTypes; export type AvailableCliOptionKeyTypes = { + default: boolean; path: string; skipPreconditions: boolean; skipInstall: boolean; @@ -57,6 +58,14 @@ export type AvailableCliOption = { export type AvailableCliOptions = Record; export const availableCliOptions: AvailableCliOptions = { + default: { + cliArg: "default", + processedCliArg: "default", + type: "boolean", + default: false, + description: "Installs default adder options for unspecified options", + allowShorthand: true, + }, path: { cliArg: "path", processedCliArg: "path", @@ -168,6 +177,7 @@ export function ensureCorrectOptionTypes( export function extractCommonCliOptions(cliOptions: CliOptionValues) { const commonOptions: AvailableCliOptionValues = { + default: cliOptions[availableCliOptions.default.processedCliArg], path: cliOptions[availableCliOptions.path.processedCliArg], skipInstall: cliOptions[availableCliOptions.skipInstall.processedCliArg], skipPreconditions: cliOptions[availableCliOptions.skipPreconditions.processedCliArg], diff --git a/packages/core/utils/dependencies.ts b/packages/core/utils/dependencies.ts index 59876054..63405853 100644 --- a/packages/core/utils/dependencies.ts +++ b/packages/core/utils/dependencies.ts @@ -30,7 +30,6 @@ export async function suggestInstallingDependencies(workingDirectory: string) { } if (!selectedPm || !packageManagers[selectedPm]) { - console.log("Skipped installing dependencies"); return; } diff --git a/packages/dev-utils/utils/generate-readme.ts b/packages/dev-utils/utils/generate-readme.ts index 6e0e83de..93b20bb3 100644 --- a/packages/dev-utils/utils/generate-readme.ts +++ b/packages/dev-utils/utils/generate-readme.ts @@ -99,7 +99,7 @@ function generateCommonOptions(adderNpx: string) { markdown += `\n- \`${value.cliArg}\` (default: ${value.default}) - ${value.description}`; } - const firstOptionValue = options[0]; + const firstOptionValue = options.find((option) => option.cliArg === "path")!; markdown += `\n\n Option syntax