create-react-native-library 0.55.1 → 0.55.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/exampleApp/generateExampleApp.js +3 -2
- package/lib/exampleApp/generateExampleApp.js.map +1 -1
- package/lib/index.js +23 -23
- package/lib/index.js.map +1 -1
- package/lib/inform.js +3 -1
- package/lib/inform.js.map +1 -1
- package/lib/prompt.js +286 -0
- package/lib/prompt.js.map +1 -0
- package/lib/template.js +2 -2
- package/lib/template.js.map +1 -1
- package/lib/utils/configureTools.js +2 -2
- package/lib/utils/configureTools.js.map +1 -1
- package/lib/utils/createMetadata.js +17 -0
- package/lib/utils/createMetadata.js.map +1 -0
- package/package.json +5 -8
- package/lib/input.js +0 -305
- package/lib/input.js.map +0 -1
- package/lib/utils/prompt.js +0 -182
- package/lib/utils/prompt.js.map +0 -1
package/lib/input.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","names":["_fsExtra","_interopRequireDefault","require","_githubUsername","_path","_validateNpmPackageName","_package","_constants","_spawn","_configureTools","e","__esModule","default","LANGUAGE_CHOICES","title","value","types","EXAMPLE_CHOICES","description","disabled","process","env","CRNL_ENABLE_TEST_APP","filter","choice","TYPE_CHOICES","acceptedArgs","exports","type","choices","map","SUPPORTED_REACT_NATIVE_VERSION","Object","keys","AVAILABLE_TOOLS","createQuestions","name","local","fullname","email","spawn","validateDirectory","input","targetPath","path","join","cwd","fs","pathExistsSync","stat","statSync","isDirectory","files","readdirSync","isEmpty","length","questions","pathExists","message","initial","_","answers","includes","sep","validate","basename","directory","validateNpmPackage","validForNewPackages","test","Boolean","authorEmail","username","githubUsername","authorUrl","slug","replace","values","entries","key","tool","selected","createMetadata","ignoredAnswers","libraryMetadata","fromEntries","answer","version"],"sources":["../src/input.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport githubUsername from 'github-username';\nimport path from 'path';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport type * as yargs from 'yargs';\nimport { version } from '../package.json';\nimport { SUPPORTED_REACT_NATIVE_VERSION } from './constants';\nimport type { Question } from './utils/prompt';\nimport { spawn } from './utils/spawn';\nimport { AVAILABLE_TOOLS } from './utils/configureTools';\n\nexport type ProjectLanguages = 'kotlin-objc' | 'kotlin-swift' | 'js';\n\nexport type ProjectType =\n | 'turbo-module'\n | 'fabric-view'\n | 'nitro-module'\n | 'nitro-view'\n | 'library';\n\nconst LANGUAGE_CHOICES: {\n title: string;\n value: ProjectLanguages;\n types: ProjectType[];\n}[] = [\n {\n title: 'Kotlin & Swift',\n value: 'kotlin-swift',\n types: ['nitro-module', 'nitro-view'],\n },\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: ['turbo-module', 'fabric-view'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = (\n [\n {\n title: 'App with Community CLI',\n value: 'vanilla',\n description: \"provides access to app's native code\",\n disabled: false,\n },\n {\n title: 'Test App by Microsoft',\n value: 'test-app',\n description: \"app's native code is abstracted away\",\n // Test App currently doesn't work with React Native 0.79.2\n // due to missing `Gemfile` in the template\n disabled: !process.env.CRNL_ENABLE_TEST_APP,\n },\n {\n title: 'App with Expo CLI',\n value: 'expo',\n description: 'managed expo app with web support',\n disabled: false,\n },\n ] as const\n).filter((choice) => !choice.disabled);\n\nconst TYPE_CHOICES: {\n title: string;\n value: ProjectType;\n description: string;\n}[] = [\n {\n title: 'Turbo module',\n value: 'turbo-module',\n description: 'integration for native APIs to JS',\n },\n {\n title: 'Fabric view',\n value: 'fabric-view',\n description: 'integration for native views to JS',\n },\n {\n title: 'Nitro module',\n value: 'nitro-module',\n description:\n 'type-safe, fast integration for native APIs to JS (experimental)',\n },\n {\n title: 'Nitro view',\n value: 'nitro-view',\n description:\n 'integration for native views to JS using nitro for prop parsing (experimental)',\n },\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'supports Expo Go and Web',\n },\n];\n\nexport const acceptedArgs = {\n 'slug': {\n description: 'Name of the npm package',\n type: 'string',\n },\n 'description': {\n description: 'Description of the npm package',\n type: 'string',\n },\n 'author-name': {\n description: 'Name of the package author',\n type: 'string',\n },\n 'author-email': {\n description: 'Email address of the package author',\n type: 'string',\n },\n 'author-url': {\n description: 'URL for the package author',\n type: 'string',\n },\n 'repo-url': {\n description: 'URL for the repository',\n type: 'string',\n },\n 'languages': {\n description: 'Languages you want to use',\n choices: LANGUAGE_CHOICES.map(({ value }) => value),\n },\n 'type': {\n description: 'Type of library you want to develop',\n choices: TYPE_CHOICES.map(({ value }) => value),\n },\n 'react-native-version': {\n description: 'Version of React Native to use',\n type: 'string',\n default: SUPPORTED_REACT_NATIVE_VERSION,\n },\n 'local': {\n description: 'Whether to create a local library',\n type: 'boolean',\n },\n 'example': {\n description: 'Type of the example app to create',\n type: 'string',\n choices: EXAMPLE_CHOICES.map(({ value }) => value),\n },\n 'tools': {\n description: 'Tools to configure',\n type: 'array',\n choices: Object.keys(AVAILABLE_TOOLS),\n },\n 'interactive': {\n description: 'Whether to run in interactive mode',\n type: 'boolean',\n },\n} as const satisfies Record<string, yargs.Options>;\n\nexport type ExampleApp = 'none' | 'test-app' | 'expo' | 'vanilla';\n\ntype PromptAnswers = {\n directory: string;\n slug: string;\n description: string;\n authorName: string;\n authorEmail: string;\n authorUrl: string;\n repoUrl: string;\n languages: ProjectLanguages;\n type: ProjectType;\n example: ExampleApp;\n tools: string[];\n local: boolean;\n};\n\nexport type Answers = PromptAnswers & {\n name?: string;\n reactNativeVersion?: string;\n interactive?: boolean;\n};\n\nexport async function createQuestions({\n name,\n local,\n}: {\n name?: string;\n local?: boolean;\n}) {\n let fullname, email;\n\n try {\n fullname = await spawn('git', ['config', '--get', 'user.name']);\n email = await spawn('git', ['config', '--get', 'user.email']);\n } catch (e) {\n // Ignore error\n }\n\n const validateDirectory = (input: string) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n const targetPath = path.join(process.cwd(), input);\n\n if (fs.pathExistsSync(targetPath)) {\n const stat = fs.statSync(targetPath);\n\n if (!stat.isDirectory()) {\n return 'Path exists and is not a directory';\n }\n\n const files = fs.readdirSync(targetPath);\n\n const isEmpty =\n files.length === 0 || (files.length === 1 && files[0] === '.git');\n\n if (!isEmpty) {\n return 'Directory already exists';\n }\n }\n\n return true;\n };\n\n const questions: Question<keyof PromptAnswers>[] = [\n {\n type:\n local == null &&\n (await fs.pathExists(path.join(process.cwd(), 'package.json')))\n ? 'confirm'\n : null,\n name: 'local',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n initial: local,\n default: false,\n },\n {\n type: (_, answers) => {\n if (\n name &&\n !(answers.local ?? local) &&\n validateDirectory(name) === true\n ) {\n return null;\n }\n\n return 'text';\n },\n name: 'directory',\n message: `Where do you want to create the library?`,\n initial: (_, answers) => {\n if ((answers.local ?? local) && name && !name?.includes(path.sep)) {\n return path.join('modules', name);\n }\n\n return name ?? '';\n },\n validate: validateDirectory,\n default: name,\n },\n {\n type: 'text',\n name: 'slug',\n message: 'What is the name of the npm package?',\n initial: (_, answers) => {\n const basename = path.basename(\n typeof answers.directory === 'string'\n ? answers.directory\n : (name ?? '')\n );\n\n if (validateNpmPackage(basename).validForNewPackages) {\n if (/^(@|react-native)/.test(basename)) {\n return basename;\n }\n\n return `react-native-${basename}`;\n }\n\n return '';\n },\n validate: (input) =>\n validateNpmPackage(input).validForNewPackages ||\n 'Must be a valid npm package name',\n },\n {\n type: 'text',\n name: 'description',\n message: 'What is the description for the package?',\n validate: (input) => Boolean(input) || 'Cannot be empty',\n },\n {\n type: (_, answers) => ((answers.local ?? local) ? null : 'text'),\n name: 'authorName',\n message: 'What is the name of package author?',\n initial: fullname,\n validate: (input) => Boolean(input) || 'Cannot be empty',\n },\n {\n type: (_, answers) => ((answers.local ?? local) ? null : 'text'),\n name: 'authorEmail',\n message: 'What is the email address for the package author?',\n initial: email,\n validate: (input) =>\n /^\\S+@\\S+$/.test(input) || 'Must be a valid email address',\n },\n {\n type: (_, answers) => ((answers.local ?? local) ? null : 'text'),\n name: 'authorUrl',\n message: 'What is the URL for the package author?',\n initial: async (_, answers) => {\n if (typeof answers.authorEmail !== 'string') {\n return '';\n }\n\n try {\n const username = await githubUsername(answers.authorEmail);\n\n if (username) {\n return `https://github.com/${username}`;\n }\n } catch (e) {\n // Ignore error\n }\n\n return '';\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n },\n {\n type: (_, answers) => ((answers.local ?? local) ? null : 'text'),\n name: 'repoUrl',\n message: 'What is the URL for the repository?',\n initial: (_, answers) => {\n if (\n typeof answers.authorUrl === 'string' &&\n typeof answers.slug === 'string' &&\n /^https?:\\/\\/github.com\\/[^/]+/.test(answers.authorUrl)\n ) {\n return `${answers.authorUrl}/${answers.slug\n .replace(/^@/, '')\n .replace(/\\//g, '-')}`;\n }\n\n return '';\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n },\n {\n type: 'select',\n name: 'type',\n message: 'What type of library do you want to develop?',\n choices: TYPE_CHOICES,\n },\n {\n type: 'select',\n name: 'languages',\n message: 'Which languages do you want to use?',\n choices: (_, values) => {\n return LANGUAGE_CHOICES.filter((choice) => {\n if (choice.types && typeof values.type === 'string') {\n // @ts-expect-error `includes doesn't support checking arbitrary types\n return choice.types.includes(values.type);\n }\n\n return true;\n });\n },\n },\n {\n type: 'select',\n name: 'example',\n message: 'What type of example app do you want to create?',\n choices: (_, values) => {\n if (local) {\n return [\n {\n title: 'None',\n value: 'none',\n },\n ];\n }\n\n return EXAMPLE_CHOICES.filter((choice) => {\n if (values.type) {\n return values.type === 'library'\n ? choice.value === 'expo'\n : choice.value !== 'expo';\n }\n\n return true;\n });\n },\n },\n {\n type: (_, answers) => ((answers.local ?? local) ? null : 'multiselect'),\n name: 'tools',\n message: 'Which tools do you want to configure?',\n choices: Object.entries(AVAILABLE_TOOLS).map(([key, tool]) => ({\n value: key,\n title: tool.name,\n description: tool.description,\n selected: true,\n })),\n },\n ];\n\n return questions;\n}\n\nexport function createMetadata(answers: Partial<PromptAnswers>) {\n // Some of the passed args can already be derived from the generated package.json file.\n const ignoredAnswers: (keyof Answers)[] = [\n 'name',\n 'directory',\n 'slug',\n 'description',\n 'authorName',\n 'authorEmail',\n 'authorUrl',\n 'repoUrl',\n 'example',\n 'reactNativeVersion',\n 'local',\n 'interactive',\n ];\n\n type AnswerEntries<T extends keyof PromptAnswers = keyof PromptAnswers> = [\n T,\n PromptAnswers[T],\n ][];\n\n const libraryMetadata = Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n (Object.entries(answers) as AnswerEntries).filter(\n ([answer]) => !ignoredAnswers.includes(answer)\n )\n );\n\n libraryMetadata.version = version;\n\n return libraryMetadata;\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,uBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAEA,IAAAI,QAAA,GAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AAEA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AAAyD,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAWzD,MAAMG,gBAIH,GAAG,CACJ;EACEC,KAAK,EAAE,gBAAgB;EACvBC,KAAK,EAAE,cAAc;EACrBC,KAAK,EAAE,CAAC,cAAc,EAAE,YAAY;AACtC,CAAC,EACD;EACEF,KAAK,EAAE,sBAAsB;EAC7BC,KAAK,EAAE,aAAa;EACpBC,KAAK,EAAE,CAAC,cAAc,EAAE,aAAa;AACvC,CAAC,EACD;EACEF,KAAK,EAAE,mCAAmC;EAC1CC,KAAK,EAAE,IAAI;EACXC,KAAK,EAAE,CAAC,SAAS;AACnB,CAAC,CACF;AAED,MAAMC,eAAe,GACnB,CACE;EACEH,KAAK,EAAE,wBAAwB;EAC/BC,KAAK,EAAE,SAAS;EAChBG,WAAW,EAAE,sCAAsC;EACnDC,QAAQ,EAAE;AACZ,CAAC,EACD;EACEL,KAAK,EAAE,uBAAuB;EAC9BC,KAAK,EAAE,UAAU;EACjBG,WAAW,EAAE,sCAAsC;EACnD;EACA;EACAC,QAAQ,EAAE,CAACC,OAAO,CAACC,GAAG,CAACC;AACzB,CAAC,EACD;EACER,KAAK,EAAE,mBAAmB;EAC1BC,KAAK,EAAE,MAAM;EACbG,WAAW,EAAE,mCAAmC;EAChDC,QAAQ,EAAE;AACZ,CAAC,CACF,CACDI,MAAM,CAAEC,MAAM,IAAK,CAACA,MAAM,CAACL,QAAQ,CAAC;AAEtC,MAAMM,YAIH,GAAG,CACJ;EACEX,KAAK,EAAE,cAAc;EACrBC,KAAK,EAAE,cAAc;EACrBG,WAAW,EAAE;AACf,CAAC,EACD;EACEJ,KAAK,EAAE,aAAa;EACpBC,KAAK,EAAE,aAAa;EACpBG,WAAW,EAAE;AACf,CAAC,EACD;EACEJ,KAAK,EAAE,cAAc;EACrBC,KAAK,EAAE,cAAc;EACrBG,WAAW,EACT;AACJ,CAAC,EACD;EACEJ,KAAK,EAAE,YAAY;EACnBC,KAAK,EAAE,YAAY;EACnBG,WAAW,EACT;AACJ,CAAC,EACD;EACEJ,KAAK,EAAE,oBAAoB;EAC3BC,KAAK,EAAE,SAAS;EAChBG,WAAW,EAAE;AACf,CAAC,CACF;AAEM,MAAMQ,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1B,MAAM,EAAE;IACNR,WAAW,EAAE,yBAAyB;IACtCU,IAAI,EAAE;EACR,CAAC;EACD,aAAa,EAAE;IACbV,WAAW,EAAE,gCAAgC;IAC7CU,IAAI,EAAE;EACR,CAAC;EACD,aAAa,EAAE;IACbV,WAAW,EAAE,4BAA4B;IACzCU,IAAI,EAAE;EACR,CAAC;EACD,cAAc,EAAE;IACdV,WAAW,EAAE,qCAAqC;IAClDU,IAAI,EAAE;EACR,CAAC;EACD,YAAY,EAAE;IACZV,WAAW,EAAE,4BAA4B;IACzCU,IAAI,EAAE;EACR,CAAC;EACD,UAAU,EAAE;IACVV,WAAW,EAAE,wBAAwB;IACrCU,IAAI,EAAE;EACR,CAAC;EACD,WAAW,EAAE;IACXV,WAAW,EAAE,2BAA2B;IACxCW,OAAO,EAAEhB,gBAAgB,CAACiB,GAAG,CAAC,CAAC;MAAEf;IAAM,CAAC,KAAKA,KAAK;EACpD,CAAC;EACD,MAAM,EAAE;IACNG,WAAW,EAAE,qCAAqC;IAClDW,OAAO,EAAEJ,YAAY,CAACK,GAAG,CAAC,CAAC;MAAEf;IAAM,CAAC,KAAKA,KAAK;EAChD,CAAC;EACD,sBAAsB,EAAE;IACtBG,WAAW,EAAE,gCAAgC;IAC7CU,IAAI,EAAE,QAAQ;IACdhB,OAAO,EAAEmB;EACX,CAAC;EACD,OAAO,EAAE;IACPb,WAAW,EAAE,mCAAmC;IAChDU,IAAI,EAAE;EACR,CAAC;EACD,SAAS,EAAE;IACTV,WAAW,EAAE,mCAAmC;IAChDU,IAAI,EAAE,QAAQ;IACdC,OAAO,EAAEZ,eAAe,CAACa,GAAG,CAAC,CAAC;MAAEf;IAAM,CAAC,KAAKA,KAAK;EACnD,CAAC;EACD,OAAO,EAAE;IACPG,WAAW,EAAE,oBAAoB;IACjCU,IAAI,EAAE,OAAO;IACbC,OAAO,EAAEG,MAAM,CAACC,IAAI,CAACC,+BAAe;EACtC,CAAC;EACD,aAAa,EAAE;IACbhB,WAAW,EAAE,oCAAoC;IACjDU,IAAI,EAAE;EACR;AACF,CAAkD;AAyB3C,eAAeO,eAAeA,CAAC;EACpCC,IAAI;EACJC;AAIF,CAAC,EAAE;EACD,IAAIC,QAAQ,EAAEC,KAAK;EAEnB,IAAI;IACFD,QAAQ,GAAG,MAAM,IAAAE,YAAK,EAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/DD,KAAK,GAAG,MAAM,IAAAC,YAAK,EAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;EAC/D,CAAC,CAAC,OAAO9B,CAAC,EAAE;IACV;EAAA;EAGF,MAAM+B,iBAAiB,GAAIC,KAAa,IAAK;IAC3C,IAAI,CAACA,KAAK,EAAE;MACV,OAAO,iBAAiB;IAC1B;IAEA,MAAMC,UAAU,GAAGC,aAAI,CAACC,IAAI,CAACzB,OAAO,CAAC0B,GAAG,CAAC,CAAC,EAAEJ,KAAK,CAAC;IAElD,IAAIK,gBAAE,CAACC,cAAc,CAACL,UAAU,CAAC,EAAE;MACjC,MAAMM,IAAI,GAAGF,gBAAE,CAACG,QAAQ,CAACP,UAAU,CAAC;MAEpC,IAAI,CAACM,IAAI,CAACE,WAAW,CAAC,CAAC,EAAE;QACvB,OAAO,oCAAoC;MAC7C;MAEA,MAAMC,KAAK,GAAGL,gBAAE,CAACM,WAAW,CAACV,UAAU,CAAC;MAExC,MAAMW,OAAO,GACXF,KAAK,CAACG,MAAM,KAAK,CAAC,IAAKH,KAAK,CAACG,MAAM,KAAK,CAAC,IAAIH,KAAK,CAAC,CAAC,CAAC,KAAK,MAAO;MAEnE,IAAI,CAACE,OAAO,EAAE;QACZ,OAAO,0BAA0B;MACnC;IACF;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAME,SAA0C,GAAG,CACjD;IACE5B,IAAI,EACFS,KAAK,IAAI,IAAI,KACZ,MAAMU,gBAAE,CAACU,UAAU,CAACb,aAAI,CAACC,IAAI,CAACzB,OAAO,CAAC0B,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC3D,SAAS,GACT,IAAI;IACVV,IAAI,EAAE,OAAO;IACbsB,OAAO,EAAE,kFAAkF;IAC3FC,OAAO,EAAEtB,KAAK;IACdzB,OAAO,EAAE;EACX,CAAC,EACD;IACEgB,IAAI,EAAEA,CAACgC,CAAC,EAAEC,OAAO,KAAK;MACpB,IACEzB,IAAI,IACJ,EAAEyB,OAAO,CAACxB,KAAK,IAAIA,KAAK,CAAC,IACzBI,iBAAiB,CAACL,IAAI,CAAC,KAAK,IAAI,EAChC;QACA,OAAO,IAAI;MACb;MAEA,OAAO,MAAM;IACf,CAAC;IACDA,IAAI,EAAE,WAAW;IACjBsB,OAAO,EAAE,0CAA0C;IACnDC,OAAO,EAAEA,CAACC,CAAC,EAAEC,OAAO,KAAK;MACvB,IAAI,CAACA,OAAO,CAACxB,KAAK,IAAIA,KAAK,KAAKD,IAAI,IAAI,CAACA,IAAI,EAAE0B,QAAQ,CAAClB,aAAI,CAACmB,GAAG,CAAC,EAAE;QACjE,OAAOnB,aAAI,CAACC,IAAI,CAAC,SAAS,EAAET,IAAI,CAAC;MACnC;MAEA,OAAOA,IAAI,IAAI,EAAE;IACnB,CAAC;IACD4B,QAAQ,EAAEvB,iBAAiB;IAC3B7B,OAAO,EAAEwB;EACX,CAAC,EACD;IACER,IAAI,EAAE,MAAM;IACZQ,IAAI,EAAE,MAAM;IACZsB,OAAO,EAAE,sCAAsC;IAC/CC,OAAO,EAAEA,CAACC,CAAC,EAAEC,OAAO,KAAK;MACvB,MAAMI,QAAQ,GAAGrB,aAAI,CAACqB,QAAQ,CAC5B,OAAOJ,OAAO,CAACK,SAAS,KAAK,QAAQ,GACjCL,OAAO,CAACK,SAAS,GAChB9B,IAAI,IAAI,EACf,CAAC;MAED,IAAI,IAAA+B,+BAAkB,EAACF,QAAQ,CAAC,CAACG,mBAAmB,EAAE;QACpD,IAAI,mBAAmB,CAACC,IAAI,CAACJ,QAAQ,CAAC,EAAE;UACtC,OAAOA,QAAQ;QACjB;QAEA,OAAO,gBAAgBA,QAAQ,EAAE;MACnC;MAEA,OAAO,EAAE;IACX,CAAC;IACDD,QAAQ,EAAGtB,KAAK,IACd,IAAAyB,+BAAkB,EAACzB,KAAK,CAAC,CAAC0B,mBAAmB,IAC7C;EACJ,CAAC,EACD;IACExC,IAAI,EAAE,MAAM;IACZQ,IAAI,EAAE,aAAa;IACnBsB,OAAO,EAAE,0CAA0C;IACnDM,QAAQ,EAAGtB,KAAK,IAAK4B,OAAO,CAAC5B,KAAK,CAAC,IAAI;EACzC,CAAC,EACD;IACEd,IAAI,EAAEA,CAACgC,CAAC,EAAEC,OAAO,KAAOA,OAAO,CAACxB,KAAK,IAAIA,KAAK,GAAI,IAAI,GAAG,MAAO;IAChED,IAAI,EAAE,YAAY;IAClBsB,OAAO,EAAE,qCAAqC;IAC9CC,OAAO,EAAErB,QAAQ;IACjB0B,QAAQ,EAAGtB,KAAK,IAAK4B,OAAO,CAAC5B,KAAK,CAAC,IAAI;EACzC,CAAC,EACD;IACEd,IAAI,EAAEA,CAACgC,CAAC,EAAEC,OAAO,KAAOA,OAAO,CAACxB,KAAK,IAAIA,KAAK,GAAI,IAAI,GAAG,MAAO;IAChED,IAAI,EAAE,aAAa;IACnBsB,OAAO,EAAE,mDAAmD;IAC5DC,OAAO,EAAEpB,KAAK;IACdyB,QAAQ,EAAGtB,KAAK,IACd,WAAW,CAAC2B,IAAI,CAAC3B,KAAK,CAAC,IAAI;EAC/B,CAAC,EACD;IACEd,IAAI,EAAEA,CAACgC,CAAC,EAAEC,OAAO,KAAOA,OAAO,CAACxB,KAAK,IAAIA,KAAK,GAAI,IAAI,GAAG,MAAO;IAChED,IAAI,EAAE,WAAW;IACjBsB,OAAO,EAAE,yCAAyC;IAClDC,OAAO,EAAE,MAAAA,CAAOC,CAAC,EAAEC,OAAO,KAAK;MAC7B,IAAI,OAAOA,OAAO,CAACU,WAAW,KAAK,QAAQ,EAAE;QAC3C,OAAO,EAAE;MACX;MAEA,IAAI;QACF,MAAMC,QAAQ,GAAG,MAAM,IAAAC,uBAAc,EAACZ,OAAO,CAACU,WAAW,CAAC;QAE1D,IAAIC,QAAQ,EAAE;UACZ,OAAO,sBAAsBA,QAAQ,EAAE;QACzC;MACF,CAAC,CAAC,OAAO9D,CAAC,EAAE;QACV;MAAA;MAGF,OAAO,EAAE;IACX,CAAC;IACDsD,QAAQ,EAAGtB,KAAK,IAAK,cAAc,CAAC2B,IAAI,CAAC3B,KAAK,CAAC,IAAI;EACrD,CAAC,EACD;IACEd,IAAI,EAAEA,CAACgC,CAAC,EAAEC,OAAO,KAAOA,OAAO,CAACxB,KAAK,IAAIA,KAAK,GAAI,IAAI,GAAG,MAAO;IAChED,IAAI,EAAE,SAAS;IACfsB,OAAO,EAAE,qCAAqC;IAC9CC,OAAO,EAAEA,CAACC,CAAC,EAAEC,OAAO,KAAK;MACvB,IACE,OAAOA,OAAO,CAACa,SAAS,KAAK,QAAQ,IACrC,OAAOb,OAAO,CAACc,IAAI,KAAK,QAAQ,IAChC,+BAA+B,CAACN,IAAI,CAACR,OAAO,CAACa,SAAS,CAAC,EACvD;QACA,OAAO,GAAGb,OAAO,CAACa,SAAS,IAAIb,OAAO,CAACc,IAAI,CACxCC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CACjBA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;MAC1B;MAEA,OAAO,EAAE;IACX,CAAC;IACDZ,QAAQ,EAAGtB,KAAK,IAAK,cAAc,CAAC2B,IAAI,CAAC3B,KAAK,CAAC,IAAI;EACrD,CAAC,EACD;IACEd,IAAI,EAAE,QAAQ;IACdQ,IAAI,EAAE,MAAM;IACZsB,OAAO,EAAE,8CAA8C;IACvD7B,OAAO,EAAEJ;EACX,CAAC,EACD;IACEG,IAAI,EAAE,QAAQ;IACdQ,IAAI,EAAE,WAAW;IACjBsB,OAAO,EAAE,qCAAqC;IAC9C7B,OAAO,EAAEA,CAAC+B,CAAC,EAAEiB,MAAM,KAAK;MACtB,OAAOhE,gBAAgB,CAACU,MAAM,CAAEC,MAAM,IAAK;QACzC,IAAIA,MAAM,CAACR,KAAK,IAAI,OAAO6D,MAAM,CAACjD,IAAI,KAAK,QAAQ,EAAE;UACnD;UACA,OAAOJ,MAAM,CAACR,KAAK,CAAC8C,QAAQ,CAACe,MAAM,CAACjD,IAAI,CAAC;QAC3C;QAEA,OAAO,IAAI;MACb,CAAC,CAAC;IACJ;EACF,CAAC,EACD;IACEA,IAAI,EAAE,QAAQ;IACdQ,IAAI,EAAE,SAAS;IACfsB,OAAO,EAAE,iDAAiD;IAC1D7B,OAAO,EAAEA,CAAC+B,CAAC,EAAEiB,MAAM,KAAK;MACtB,IAAIxC,KAAK,EAAE;QACT,OAAO,CACL;UACEvB,KAAK,EAAE,MAAM;UACbC,KAAK,EAAE;QACT,CAAC,CACF;MACH;MAEA,OAAOE,eAAe,CAACM,MAAM,CAAEC,MAAM,IAAK;QACxC,IAAIqD,MAAM,CAACjD,IAAI,EAAE;UACf,OAAOiD,MAAM,CAACjD,IAAI,KAAK,SAAS,GAC5BJ,MAAM,CAACT,KAAK,KAAK,MAAM,GACvBS,MAAM,CAACT,KAAK,KAAK,MAAM;QAC7B;QAEA,OAAO,IAAI;MACb,CAAC,CAAC;IACJ;EACF,CAAC,EACD;IACEa,IAAI,EAAEA,CAACgC,CAAC,EAAEC,OAAO,KAAOA,OAAO,CAACxB,KAAK,IAAIA,KAAK,GAAI,IAAI,GAAG,aAAc;IACvED,IAAI,EAAE,OAAO;IACbsB,OAAO,EAAE,uCAAuC;IAChD7B,OAAO,EAAEG,MAAM,CAAC8C,OAAO,CAAC5C,+BAAe,CAAC,CAACJ,GAAG,CAAC,CAAC,CAACiD,GAAG,EAAEC,IAAI,CAAC,MAAM;MAC7DjE,KAAK,EAAEgE,GAAG;MACVjE,KAAK,EAAEkE,IAAI,CAAC5C,IAAI;MAChBlB,WAAW,EAAE8D,IAAI,CAAC9D,WAAW;MAC7B+D,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC,CACF;EAED,OAAOzB,SAAS;AAClB;AAEO,SAAS0B,cAAcA,CAACrB,OAA+B,EAAE;EAC9D;EACA,MAAMsB,cAAiC,GAAG,CACxC,MAAM,EACN,WAAW,EACX,MAAM,EACN,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,OAAO,EACP,aAAa,CACd;EAOD,MAAMC,eAAe,GAAGpD,MAAM,CAACqD,WAAW;EACxC;EACCrD,MAAM,CAAC8C,OAAO,CAACjB,OAAO,CAAC,CAAmBtC,MAAM,CAC/C,CAAC,CAAC+D,MAAM,CAAC,KAAK,CAACH,cAAc,CAACrB,QAAQ,CAACwB,MAAM,CAC/C,CACF,CAAC;EAEDF,eAAe,CAACG,OAAO,GAAGA,gBAAO;EAEjC,OAAOH,eAAe;AACxB","ignoreList":[]}
|
package/lib/utils/prompt.js
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.prompt = prompt;
|
|
7
|
-
var _kleur = _interopRequireDefault(require("kleur"));
|
|
8
|
-
var _prompts = _interopRequireDefault(require("prompts"));
|
|
9
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
/**
|
|
11
|
-
* Wrapper around `prompts` with additional features:
|
|
12
|
-
*
|
|
13
|
-
* - Improved type-safety
|
|
14
|
-
* - Read answers from passed arguments
|
|
15
|
-
* - Skip questions with a single choice
|
|
16
|
-
* - Validate answers
|
|
17
|
-
* - Exit on canceling the prompt
|
|
18
|
-
* - Handle non-interactive mode
|
|
19
|
-
*/
|
|
20
|
-
async function prompt(questions, argv, options) {
|
|
21
|
-
const interactive = options?.interactive ?? (process.stdout.isTTY && process.env.TERM !== 'dumb' && !process.env.CI);
|
|
22
|
-
const onCancel = () => {
|
|
23
|
-
// Exit the CLI on Ctrl+C
|
|
24
|
-
process.exit(1);
|
|
25
|
-
};
|
|
26
|
-
const onError = message => {
|
|
27
|
-
console.log(message);
|
|
28
|
-
process.exit(1);
|
|
29
|
-
};
|
|
30
|
-
if (argv) {
|
|
31
|
-
validate(argv, questions, onError);
|
|
32
|
-
}
|
|
33
|
-
const defaultAnswers = {};
|
|
34
|
-
const promptQuestions = [];
|
|
35
|
-
if (Array.isArray(questions)) {
|
|
36
|
-
for (const question of questions) {
|
|
37
|
-
let promptQuestion = question;
|
|
38
|
-
|
|
39
|
-
// Skip questions which are passed as parameter and pass validation
|
|
40
|
-
const argValue = argv?.[question.name];
|
|
41
|
-
if (argValue && question.validate?.(String(argValue)) !== false) {
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
const {
|
|
45
|
-
type,
|
|
46
|
-
choices
|
|
47
|
-
} = question;
|
|
48
|
-
|
|
49
|
-
// Track default value from questions
|
|
50
|
-
if (type && question.default != null) {
|
|
51
|
-
// @ts-expect-error assume the passed value is correct
|
|
52
|
-
defaultAnswers[question.name] = question.default;
|
|
53
|
-
|
|
54
|
-
// Don't prompt questions with a valid default value when not interactive
|
|
55
|
-
if (!interactive && question.validate?.(String(question.default)) !== false) {
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Don't prompt questions with a single choice
|
|
61
|
-
if (type === 'select' && Array.isArray(question.choices) && question.choices.length === 1) {
|
|
62
|
-
const onlyChoice = question.choices[0];
|
|
63
|
-
if (onlyChoice?.value) {
|
|
64
|
-
// @ts-expect-error assume the passed value is correct
|
|
65
|
-
defaultAnswers[question.name] = onlyChoice.value;
|
|
66
|
-
}
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Don't prompt dynamic questions with a single choice
|
|
71
|
-
if (type === 'select' && typeof choices === 'function') {
|
|
72
|
-
promptQuestion = {
|
|
73
|
-
...question,
|
|
74
|
-
type: (prev, values) => {
|
|
75
|
-
const dynamicChoices = choices(prev, {
|
|
76
|
-
...argv,
|
|
77
|
-
...values
|
|
78
|
-
});
|
|
79
|
-
if (dynamicChoices && dynamicChoices.length === 1) {
|
|
80
|
-
const onlyChoice = dynamicChoices[0];
|
|
81
|
-
if (onlyChoice?.value) {
|
|
82
|
-
// @ts-expect-error assume the passed value is correct
|
|
83
|
-
defaultAnswers[question.name] = onlyChoice.value;
|
|
84
|
-
}
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
return type;
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
promptQuestions.push(promptQuestion);
|
|
92
|
-
}
|
|
93
|
-
} else {
|
|
94
|
-
promptQuestions.push(questions);
|
|
95
|
-
}
|
|
96
|
-
let promptAnswers;
|
|
97
|
-
if (interactive) {
|
|
98
|
-
promptAnswers = await (0, _prompts.default)(promptQuestions, {
|
|
99
|
-
...options,
|
|
100
|
-
onCancel
|
|
101
|
-
});
|
|
102
|
-
} else {
|
|
103
|
-
const missingQuestions = promptQuestions.reduce((acc, question) => {
|
|
104
|
-
let type = question.type;
|
|
105
|
-
if (typeof question.type === 'function') {
|
|
106
|
-
// @ts-expect-error assume the passed value is correct
|
|
107
|
-
type = question.type(null, argv, null);
|
|
108
|
-
}
|
|
109
|
-
if (type != null) {
|
|
110
|
-
acc.push(question.name.replace(/([A-Z]+)/g, '-$1').replace(/^-/, '').toLowerCase());
|
|
111
|
-
}
|
|
112
|
-
return acc;
|
|
113
|
-
}, []);
|
|
114
|
-
if (missingQuestions.length) {
|
|
115
|
-
onError(`Missing values for options: ${missingQuestions.map(q => _kleur.default.blue(q)).join(', ')}`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
const result = {
|
|
119
|
-
...argv,
|
|
120
|
-
...defaultAnswers,
|
|
121
|
-
...promptAnswers
|
|
122
|
-
};
|
|
123
|
-
validate(result, questions, onError);
|
|
124
|
-
|
|
125
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
function validate(argv, questions, onError) {
|
|
129
|
-
for (const [key, value] of Object.entries(argv)) {
|
|
130
|
-
if (value == null) {
|
|
131
|
-
continue;
|
|
132
|
-
}
|
|
133
|
-
const question = Array.isArray(questions) ? questions.find(q => q.name === key) : questions.name === key ? questions : null;
|
|
134
|
-
if (question == null) {
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
let validation;
|
|
138
|
-
|
|
139
|
-
// We also need to guard against invalid choices
|
|
140
|
-
// If we don't already have a validation message to provide a better error
|
|
141
|
-
if ('choices' in question) {
|
|
142
|
-
const choices = typeof question.choices === 'function' ? question.choices(undefined, argv) : question.choices;
|
|
143
|
-
if (choices) {
|
|
144
|
-
let type = question.type;
|
|
145
|
-
if (typeof question.type === 'function') {
|
|
146
|
-
type = question.type(null, argv);
|
|
147
|
-
}
|
|
148
|
-
if (type === 'multiselect') {
|
|
149
|
-
if (Array.isArray(value)) {
|
|
150
|
-
const invalidChoices = value.filter(val => choices.every(choice => choice.value !== val));
|
|
151
|
-
if (invalidChoices.length > 0) {
|
|
152
|
-
validation = `Must be an array of ${choices.map(choice => _kleur.default.green(choice.value)).join(', ')}`;
|
|
153
|
-
}
|
|
154
|
-
} else {
|
|
155
|
-
validation = 'Must be an array';
|
|
156
|
-
}
|
|
157
|
-
} else {
|
|
158
|
-
if (choices.every(choice => choice.value !== value)) {
|
|
159
|
-
if (choices.length > 1) {
|
|
160
|
-
validation = `Must be one of ${choices.map(choice => _kleur.default.green(choice.value)).join(', ')}`;
|
|
161
|
-
} else if (choices[0]) {
|
|
162
|
-
validation = `Must be '${_kleur.default.green(choices[0].value)}'`;
|
|
163
|
-
} else {
|
|
164
|
-
validation = false;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (validation == null && question.validate) {
|
|
171
|
-
validation = question.validate(String(value));
|
|
172
|
-
}
|
|
173
|
-
if (validation != null && validation !== true) {
|
|
174
|
-
let message = `Invalid value ${_kleur.default.red(String(value))} passed for ${_kleur.default.blue(key)}`;
|
|
175
|
-
if (typeof validation === 'string') {
|
|
176
|
-
message += `: ${validation}`;
|
|
177
|
-
}
|
|
178
|
-
onError(message);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
//# sourceMappingURL=prompt.js.map
|
package/lib/utils/prompt.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","names":["_kleur","_interopRequireDefault","require","_prompts","e","__esModule","default","prompt","questions","argv","options","interactive","process","stdout","isTTY","env","TERM","CI","onCancel","exit","onError","message","console","log","validate","defaultAnswers","promptQuestions","Array","isArray","question","promptQuestion","argValue","name","String","type","choices","length","onlyChoice","value","prev","values","dynamicChoices","push","promptAnswers","prompts","missingQuestions","reduce","acc","replace","toLowerCase","map","q","kleur","blue","join","result","key","Object","entries","find","validation","undefined","invalidChoices","filter","val","every","choice","green","red"],"sources":["../../src/utils/prompt.ts"],"sourcesContent":["import kleur from 'kleur';\nimport prompts, {\n type Answers,\n type InitialReturnValue,\n type PromptType,\n} from 'prompts';\n\ntype Choice = {\n title: string;\n value: string;\n description?: string;\n};\n\nexport type Question<T extends string> = {\n name: T;\n type:\n | PromptType\n | null\n | ((\n prev: unknown,\n values: Partial<Record<T, unknown>>\n ) => PromptType | null);\n message: string;\n validate?: (value: string) => boolean | string;\n choices?:\n | Choice[]\n | ((prev: unknown, values: Partial<Record<T, unknown>>) => Choice[]);\n initial?:\n | InitialReturnValue\n | ((\n prev: unknown,\n values: Partial<Record<T, unknown>>\n ) => InitialReturnValue | Promise<InitialReturnValue>);\n default?: InitialReturnValue;\n};\n\n/**\n * Wrapper around `prompts` with additional features:\n *\n * - Improved type-safety\n * - Read answers from passed arguments\n * - Skip questions with a single choice\n * - Validate answers\n * - Exit on canceling the prompt\n * - Handle non-interactive mode\n */\nexport async function prompt<\n PromptAnswers extends Record<string, unknown>,\n Argv extends Record<string, unknown> | undefined,\n>(\n questions:\n | Question<Extract<keyof PromptAnswers, string>>[]\n | Question<Extract<keyof PromptAnswers, string>>,\n argv: Argv,\n options: prompts.Options & {\n interactive: boolean | undefined;\n }\n): Promise<PromptAnswers & Argv> {\n const interactive =\n options?.interactive ??\n (process.stdout.isTTY && process.env.TERM !== 'dumb' && !process.env.CI);\n\n const onCancel = () => {\n // Exit the CLI on Ctrl+C\n process.exit(1);\n };\n\n const onError = (message: string) => {\n console.log(message);\n process.exit(1);\n };\n\n if (argv) {\n validate(argv, questions, onError);\n }\n\n const defaultAnswers = {};\n const promptQuestions: Question<Extract<keyof PromptAnswers, string>>[] = [];\n\n if (Array.isArray(questions)) {\n for (const question of questions) {\n let promptQuestion = question;\n\n // Skip questions which are passed as parameter and pass validation\n const argValue = argv?.[question.name];\n\n if (argValue && question.validate?.(String(argValue)) !== false) {\n continue;\n }\n\n const { type, choices } = question;\n\n // Track default value from questions\n if (type && question.default != null) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = question.default;\n\n // Don't prompt questions with a valid default value when not interactive\n if (\n !interactive &&\n question.validate?.(String(question.default)) !== false\n ) {\n continue;\n }\n }\n\n // Don't prompt questions with a single choice\n if (\n type === 'select' &&\n Array.isArray(question.choices) &&\n question.choices.length === 1\n ) {\n const onlyChoice = question.choices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = onlyChoice.value;\n }\n\n continue;\n }\n\n // Don't prompt dynamic questions with a single choice\n if (type === 'select' && typeof choices === 'function') {\n promptQuestion = {\n ...question,\n type: (prev, values) => {\n const dynamicChoices = choices(prev, { ...argv, ...values });\n\n if (dynamicChoices && dynamicChoices.length === 1) {\n const onlyChoice = dynamicChoices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = onlyChoice.value;\n }\n\n return null;\n }\n\n return type;\n },\n };\n }\n\n promptQuestions.push(promptQuestion);\n }\n } else {\n promptQuestions.push(questions);\n }\n\n let promptAnswers;\n\n if (interactive) {\n promptAnswers = await prompts(promptQuestions, {\n ...options,\n onCancel,\n });\n } else {\n const missingQuestions = promptQuestions.reduce<string[]>(\n (acc, question) => {\n let type = question.type;\n\n if (typeof question.type === 'function') {\n // @ts-expect-error assume the passed value is correct\n type = question.type(null, argv, null);\n }\n\n if (type != null) {\n acc.push(\n question.name\n .replace(/([A-Z]+)/g, '-$1')\n .replace(/^-/, '')\n .toLowerCase()\n );\n }\n\n return acc;\n },\n []\n );\n\n if (missingQuestions.length) {\n onError(\n `Missing values for options: ${missingQuestions\n .map((q) => kleur.blue(q))\n .join(', ')}`\n );\n }\n }\n\n const result = {\n ...argv,\n ...defaultAnswers,\n ...promptAnswers,\n };\n\n validate(result, questions, onError);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n return result as PromptAnswers & Argv;\n}\n\nfunction validate<T extends string>(\n argv: Partial<Answers<T>>,\n questions: Question<T>[] | Question<T>,\n onError: (message: string) => void\n) {\n for (const [key, value] of Object.entries(argv)) {\n if (value == null) {\n continue;\n }\n\n const question = Array.isArray(questions)\n ? questions.find((q) => q.name === key)\n : questions.name === key\n ? questions\n : null;\n\n if (question == null) {\n continue;\n }\n\n let validation;\n\n // We also need to guard against invalid choices\n // If we don't already have a validation message to provide a better error\n if ('choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(undefined, argv)\n : question.choices;\n\n if (choices) {\n let type = question.type;\n\n if (typeof question.type === 'function') {\n type = question.type(null, argv);\n }\n\n if (type === 'multiselect') {\n if (Array.isArray(value)) {\n const invalidChoices = value.filter((val) =>\n choices.every((choice) => choice.value !== val)\n );\n\n if (invalidChoices.length > 0) {\n validation = `Must be an array of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n }\n } else {\n validation = 'Must be an array';\n }\n } else {\n if (choices.every((choice) => choice.value !== value)) {\n if (choices.length > 1) {\n validation = `Must be one of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n } else if (choices[0]) {\n validation = `Must be '${kleur.green(choices[0].value)}'`;\n } else {\n validation = false;\n }\n }\n }\n }\n }\n\n if (validation == null && question.validate) {\n validation = question.validate(String(value));\n }\n\n if (validation != null && validation !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof validation === 'string') {\n message += `: ${validation}`;\n }\n\n onError(message);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|