"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