packages/jsii-config/lib/prompt.ts (48 lines of code) (raw):

import { PackageJson } from '@jsii/spec'; import * as inquirer from 'inquirer'; import getQuestions from './questions'; import { BasePackageJson } from './schema'; import { getNestedValue, removeEmptyValues } from './util'; interface PromptAnswers extends PackageJson { jsiiTargets: string[]; } function getPassThroughValues(current: BasePackageJson): { readonly metadata?: any; } { const metadata = getNestedValue(['jsii', 'metadata'], current); return { ...(metadata ? { metadata } : {}), }; } /* * Takes current config and prompts for new values * * Uses any values already present as defaults for the prompt */ export default async function getAnswers( current: BasePackageJson, ): Promise<PackageJson> { const answers = (await inquirer.prompt( getQuestions(current), )) as PromptAnswers; const { jsiiTargets: _1, tsconfig: _2, ...config } = removeEmptyValues(answers); const confirmInput = await inquirer.prompt({ type: 'confirm', message: `Confirm Jsii Config\n${JSON.stringify( config, null, 2, )}\nSelect no to revise`, name: 'confirm', }); const newConfig = { ...config, jsii: { ...config.jsii, ...getPassThroughValues(current), }, }; if (confirmInput.confirm) { return newConfig; } return getAnswers(newConfig); }