nav-new-publication-cli
Version:
Add new publication to the navigator web project
39 lines (36 loc) • 1.15 kB
text/typescript
import prompts from 'prompts';
import { PublicationData } from './readWritePublications';
import { PromptType } from 'prompts';
export interface PromptConfig {
type: PromptType | ((prev: any) => PromptType | null),
name: string,
message: string,
initial?: any,
choices?: any,
validate?: (value: any) => boolean | string,
errorMsg?: string,
process?: (value: string) => void,
}
const createPrompt = (promptConfig: PromptConfig): prompts.PromptObject => {
const {process, errorMsg, ...promptOpts } = promptConfig;
return {
...promptOpts,
onState: ({ value, aborted, exited }) => {
if(errorMsg && (aborted || exited)) {
throw new Error(errorMsg);
}
if(process) process(value);
}
}
};
export const createPrompts = async (config: PublicationData, key: string, promptConfig: PromptConfig | PromptConfig[]) => {
if(!config[key]) {
const promptsArray = Array.isArray(promptConfig) ? promptConfig : [promptConfig];
const values = await prompts(promptsArray.map(createPrompt));
return {
...config,
...values
}
}
return Promise.resolve(config);
}