"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = promptQuestionsAsync; function _prompt() { const data = _interopRequireDefault(require("../../prompt")); _prompt = function () { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Generates CocoaPod name in format `Namepart1Namepart2Namepart3`. * For these with `expo` as `partname1` would generate `EXNamepart2...`. * @param {string} moduleName - provided module name, expects format: `namepart1-namepart2-namepart3` */ const generateCocoaPodDefaultName = moduleName => { const wordsToUpperCase = s => s.toLowerCase().split('-').map(s => s.charAt(0).toUpperCase() + s.substring(1)).join(''); if (moduleName.toLowerCase().startsWith('expo')) { return `EX${wordsToUpperCase(moduleName.substring(4))}`; } return wordsToUpperCase(moduleName); }; /** * Generates java package name in format `namepart1.namepart2.namepart3`. * @param {string} moduleName - provided module name, expects format: `namepart1-namepart2-namepart3` */ const generateJavaModuleDefaultName = moduleName => { const wordsToJavaModule = s => s.toLowerCase().split('-').join(''); if (moduleName.toLowerCase().startsWith('expo')) { return `expo.modules.${wordsToJavaModule(moduleName.substring(4))}`; } return wordsToJavaModule(moduleName); }; /** * Generates JS/TS module name in format `Namepart1Namepart2Namepart3`. * @param {string} moduleName - provided module name, expects format: `namepart1-namepart2-namepart3` */ const generateInCodeModuleDefaultName = moduleName => { return moduleName.toLowerCase().split('-').map(s => s.charAt(0).toUpperCase() + s.substring(1)).join(''); }; /** * Generates questions * @param {string} [suggestedModuleName] */ const generateQuestions = suggestedModuleName => [{ name: 'npmModuleName', message: 'How would you like to call your module in JS/npm? (eg. expo-camera)', default: suggestedModuleName, validate: answer => { return !answer.length ? 'Module name cannot be empty' : /[A-Z]/.test(answer) ? 'Module name connot contain any upper case characters' : /\s/.test(answer) ? 'Module name cannot contain any whitespaces' : true; } }, { name: 'podName', message: 'How would you like to call your module in CocoaPods? (eg. EXCamera)', default: ({ npmModuleName }) => generateCocoaPodDefaultName(npmModuleName), validate: answer => !answer.length ? 'CocoaPod name cannot be empty' : /\s/.test(answer) ? 'CocoaPod name cannot contain any whitespaces' : true }, { name: 'javaPackage', message: 'How would you like to call your module in Java? (eg. expo.modules.camera)', default: ({ npmModuleName }) => generateJavaModuleDefaultName(npmModuleName), validate: answer => !answer.length ? 'Java Package name cannot be empty' : /\s/.test(answer) ? 'Java Package name cannot contain any whitespaces' : true }, { name: 'jsModuleName', message: 'How would you like to call your module in JS/TS codebase (eg. ExpoCamera)?', default: ({ npmModuleName }) => generateInCodeModuleDefaultName(npmModuleName), validate: answer => !answer.length ? 'Module name cannot be empty' : /\s/.test(answer) ? 'Module name cannot contain any whitespaces' : true }]; /** * Prompt user about new module namings. * @param {string} [suggestedModuleName] - suggested module name that would be used to generate all sugestions for each question * @returns {Promise<{ npmModuleName: string, podName: string, javaPackage: string, jsModuleName: string }>} - user's answers */ async function promptQuestionsAsync(suggestedModuleName) { return await (0, _prompt().default)(generateQuestions(suggestedModuleName)); } //# sourceMappingURL=../../__sourcemaps__/commands/generate-module/promptQuestionsAsync.js.map