{"version":3,"sources":["expo.js"],"names":["loginOrRegister","user","appJsonPath","join","process","cwd","JSON","readFile","appJson","parse","expo","ios","bundleIdentifier","platform","console","log","cyan","prompt","name","message","iosBundleIdentifier","android","package","androidPackage","writeFile","detachAsync","stdin","pause","resolve","toString","pkgJson","main","devDependencies","scripts","start","build","eject","versionsAsync","versions","sdkTag","sdkVersions","sdkVersion","expoReactNativeTag","reactNativeVersion","silent","code","green","warn","yellow","detach","getCurrentUserAsync","currentUser","loggedInQuestions","type","nickname","choices","value","stayLoggedIn","logoutAsync","questions","action","githubAuthAsync","registerAsync","usernamePasswordAuthAsync","loginAsync","Error","validate","validator","answers","data","username","password","val","trim","registeredUser","AUTH_CLIENT_ID","initialize"],"mappings":"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","file":"expo.js","sourcesContent":["// @flow\n\nimport chalk from 'chalk';\nimport fse from 'fs-extra';\nimport inquirer from 'inquirer';\nimport path from 'path';\nimport install from '../util/install';\n\nimport { Detach, User as UserManager, Versions } from 'xdl';\n\nimport type { User } from 'xdl/build/User';\n\nconst AUTH_CLIENT_ID = 'MGQh3rK3WZFWhJ91BShagHggMOhrE6nR';\nUserManager.initialize(AUTH_CLIENT_ID);\n\nexport async function detach() {\n const user = await loginOrRegister();\n\n const appJsonPath = path.join(process.cwd(), 'app.json');\n const appJson = JSON.parse(await fse.readFile(appJsonPath));\n\n if ((!appJson.expo.ios || !appJson.expo.ios.bundleIdentifier) && process.platform === 'darwin') {\n console.log(\n `\nYou'll need to specify an iOS bundle identifier. It must be unique on the App Store if you want to\npublish it there. See this StackOverflow question for more information:\n ${chalk.cyan('https://stackoverflow.com/questions/11347470/what-does-bundle-identifier-mean-in-the-ios-project')}\n`\n );\n const { iosBundleIdentifier } = await inquirer.prompt([\n {\n name: 'iosBundleIdentifier',\n message: 'What would you like your iOS bundle identifier to be?',\n },\n ]);\n\n appJson.expo.ios = appJson.expo.ios || {};\n appJson.expo.ios.bundleIdentifier = iosBundleIdentifier;\n }\n\n // check for android.package field, prompt interactively\n if (!appJson.expo.android || !appJson.expo.android.package) {\n console.log(\n `\nYou'll need to specify an Android package name. It must be unique on the Play Store if you want to\npublish it there. See this StackOverflow question for more information:\n ${chalk.cyan('https://stackoverflow.com/questions/6273892/android-package-name-convention')}\n`\n );\n\n const { androidPackage } = await inquirer.prompt([\n {\n name: 'androidPackage',\n message: 'What would you like your Android package name to be?',\n },\n ]);\n\n appJson.expo.android = appJson.expo.android || {};\n appJson.expo.android.package = androidPackage;\n }\n\n // update app.json file with new contents\n await fse.writeFile(appJsonPath, JSON.stringify(appJson, null, 2));\n\n await Detach.detachAsync(process.cwd());\n // yesno lib doesn't properly shut down. without this the command won't exit\n process.stdin.pause();\n\n const pkgJson = JSON.parse((await fse.readFile(path.resolve('package.json'))).toString());\n\n pkgJson.main = 'node_modules/expo/AppEntry.js';\n\n delete pkgJson.devDependencies['react-native-scripts'];\n delete pkgJson.scripts.start;\n delete pkgJson.scripts.build;\n delete pkgJson.scripts.eject;\n delete pkgJson.scripts.android;\n delete pkgJson.scripts.ios;\n\n const versions = await Versions.versionsAsync();\n const sdkTag = versions.sdkVersions[appJson.expo.sdkVersion].expoReactNativeTag;\n\n await fse.writeFile('package.json', JSON.stringify(pkgJson, null, 2));\n\n console.log('Installing the Expo fork of react-native...');\n const reactNativeVersion = `https://github.com/expo/react-native/archive/${sdkTag}.tar.gz`;\n const {\n code,\n } = await install(process.cwd(), 'react-native', reactNativeVersion, {\n silent: true,\n });\n\n if (code === 0) {\n console.log(`${chalk.green('Successfully set up ExpoKit!')}`);\n } else {\n console.warn(\n `\n ${chalk.yellow('Unable to install the Expo fork of react-native.')}\n ${chalk.yellow(`Please install react-native@${reactNativeVersion} before continuing.`)}\n `\n );\n }\n\n console.log(\n `\n You'll need to use Expo's XDE to run this project:\n ${chalk.cyan('https://docs.expo.io/versions/latest/introduction/installation.html')}\n\n For further instructions, please read ExpoKit's build documentation:\n ${chalk.cyan('https://docs.expo.io/versions/latest/guides/expokit.html')}\n `\n );\n}\n\nasync function loginOrRegister(): Promise {\n console.log(chalk.yellow('\\nAn Expo account is required to proceed.\\n'));\n const currentUser = await UserManager.getCurrentUserAsync();\n\n if (currentUser) {\n const loggedInQuestions = [\n {\n type: 'list',\n name: 'stayLoggedIn',\n message: `It appears you're already logged in to Expo as \\\n${chalk.green(currentUser.nickname)}, would you like to continue with this account?`,\n choices: [\n {\n name: `Yes, continue as ${currentUser.nickname}.`,\n value: true,\n },\n {\n name: \"No, I'd like to start a new session.\",\n value: false,\n },\n ],\n },\n ];\n\n const { stayLoggedIn } = await inquirer.prompt(loggedInQuestions);\n\n if (stayLoggedIn) {\n return currentUser;\n } else {\n await UserManager.logoutAsync();\n console.log(chalk.green('\\nSuccessfully logged out!\\n'));\n }\n }\n\n const questions = [\n {\n type: 'list',\n name: 'action',\n message: 'How would you like to authenticate?',\n choices: [\n {\n name: 'Make a new Expo account',\n value: 'register',\n },\n {\n name: 'Log in with an existing Expo account',\n value: 'existingUser',\n },\n {\n name: 'Cancel',\n value: 'cancel',\n },\n ],\n },\n ];\n\n const { action } = await inquirer.prompt(questions);\n\n if (action === 'github') {\n return await githubAuthAsync();\n } else if (action === 'register') {\n return await registerAsync();\n } else if (action === 'existingUser') {\n return await usernamePasswordAuthAsync();\n } else {\n return null;\n }\n}\n\nasync function githubAuthAsync(): Promise {\n let user = await UserManager.loginAsync('github');\n if (user) {\n console.log(chalk.green(`\\nSuccessfully logged in as ${user.nickname} with GitHub!`));\n return user;\n } else {\n throw new Error('Unexpected Error: No user returned from the API');\n }\n}\n\nfunction validator(val: string): boolean {\n if (val.trim() === '') {\n return false;\n }\n return true;\n}\n\nasync function usernamePasswordAuthAsync(): Promise {\n const questions = [\n {\n type: 'input',\n name: 'username',\n message: 'Username/Email Address:',\n validate: validator,\n },\n {\n type: 'password',\n name: 'password',\n message: 'Password:',\n validate: validator,\n },\n ];\n\n const answers = await inquirer.prompt(questions);\n\n const data = {\n username: answers.username,\n password: answers.password,\n };\n\n let user = await UserManager.loginAsync('user-pass', data);\n\n if (user) {\n console.log(chalk.green(`\\nSuccessfully logged in as ${user.nickname}!`));\n return user;\n } else {\n throw new Error('Unexpected Error: No user returned from the Expo API');\n }\n}\n\nasync function registerAsync(): Promise {\n console.log(\n `\nThanks for signing up for Expo!\nJust a few questions:\n`\n );\n\n const questions = [\n {\n type: 'input',\n name: 'givenName',\n message: 'First (Given) Name:',\n validate: validator,\n },\n {\n type: 'input',\n name: 'familyName',\n message: 'Last (Family) Name:',\n validate: validator,\n },\n {\n type: 'input',\n name: 'username',\n message: 'Username:',\n validate: validator,\n },\n {\n type: 'input',\n name: 'email',\n message: 'Email Address:',\n validate: validator,\n },\n {\n type: 'password',\n name: 'password',\n message: 'Password:',\n validate: validator,\n },\n {\n type: 'password',\n name: 'passwordRepeat',\n message: 'Password Repeat:',\n validate(val, answers) {\n if (val.trim() === '') {\n return false;\n }\n if (val.trim() !== answers.password.trim()) {\n return `Passwords don't match!`;\n }\n return true;\n },\n },\n ];\n\n const answers = await inquirer.prompt(questions);\n\n const registeredUser = await UserManager.registerAsync({\n ...answers,\n });\n\n console.log(chalk.green('\\nRegistration successful!'));\n\n return registeredUser;\n}\n"]}