"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assertProjectHasExpoExtensionFilesAsync = assertProjectHasExpoExtensionFilesAsync; function _chalk() { const data = _interopRequireDefault(require("chalk")); _chalk = function () { return data; }; return data; } function _commander() { const data = _interopRequireDefault(require("commander")); _commander = function () { return data; }; return data; } function _findYarnWorkspaceRoot() { const data = _interopRequireDefault(require("find-yarn-workspace-root")); _findYarnWorkspaceRoot = function () { return data; }; return data; } function _CommandError() { const data = require("../../CommandError"); _CommandError = function () { return data; }; return data; } function _log() { const data = _interopRequireDefault(require("../../log")); _log = function () { return data; }; return data; } function _ora() { const data = require("../../utils/ora"); _ora = function () { return data; }; return data; } function _prompts() { const data = require("../../utils/prompts"); _prompts = function () { return data; }; return data; } function _glob() { const data = require("./glob"); _glob = function () { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } async function queryExpoExtensionFilesAsync(projectRoot, ignore) { const results = await (0, _glob().wrapGlobWithTimeout)(() => (0, _glob().everyMatchAsync)('**/*.expo.@(js|jsx|ts|tsx)', { absolute: true, ignore, cwd: projectRoot }), 5000); if (results === false) { _log().default.warn('Failed to query all project files. Skipping `.expo.*` extension check...'); return []; } return results; } async function assertProjectHasExpoExtensionFilesAsync(projectRoot, checkNodeModules = false) { if (checkNodeModules) { await assertModulesHasExpoExtensionFilesAsync(projectRoot); } else { _log().default.time('assertProjectHasExpoExtensionFilesAsync'); const matches = await queryExpoExtensionFilesAsync(projectRoot, [`**/@(Carthage|Pods|node_modules|ts-declarations|.expo)/**`, '@(ios|android|web)/**']).catch(() => []); _log().default.timeEnd('assertProjectHasExpoExtensionFilesAsync'); if (matches.length) { await promptMatchesAsync(matches); } } } /** Wraps `findWorkspaceRoot` and guards against having an empty `package.json` file in an upper directory. */ function getWorkspaceRoot(projectRoot) { try { return (0, _findYarnWorkspaceRoot().default)(projectRoot); } catch (error) { if (error.message.includes('Unexpected end of JSON input')) { return null; } throw error; } } async function assertModulesHasExpoExtensionFilesAsync(projectRoot) { const spinner = (0, _ora().ora)('Checking project for deprecated features, this may take a moment.').start(); const root = getWorkspaceRoot(projectRoot) || projectRoot; _log().default.time('assertModulesHasExpoExtensionFilesAsync'); let matches = await queryExpoExtensionFilesAsync(root, [`**/@(Carthage|Pods|ts-declarations|.expo)/**`, '@(ios|android|web)/**']).catch(() => []); _log().default.timeEnd('assertModulesHasExpoExtensionFilesAsync'); matches = matches.filter(value => { if (value.includes('node_modules')) { // Remove duplicate files from packages compiled with bob return !value.match(/node_modules\/.*\/lib\/commonjs/g); } return true; }); if (!matches.length) { spinner.succeed('Validated project'); return; } else { spinner.fail('Found project files with deprecated features'); } logMatchedFiles(matches); } function logMatchedFiles(matches) { const hasNodeModules = matches.find(match => match.includes('node_modules/')); _log().default.error(_chalk().default.red(`Project is using deprecated ${_chalk().default.bold`.expo.*`} file extensions.\nPlease refactor the following files${hasNodeModules ? ' and upgrade modules' : ''} accordingly:\n\n`) + _chalk().default.reset(matches.map(match => `- ${match}`).join('\n') + _chalk().default.dim(`\n\nDangerously disable this check with ${_chalk().default.bold(`EXPO_LEGACY_IMPORTS=1`)}\nLearn more: http://expo.fyi/expo-extension-migration\n`))); } async function promptMatchesAsync(matches) { logMatchedFiles(matches); // Skip in nonInteractive to give users a bypass if (_commander().default.nonInteractive || (await (0, _prompts().confirmAsync)({ message: 'Would you like to continue anyways?', initial: true }))) { return; } throw new (_CommandError().SilentError)(); } //# sourceMappingURL=deprecatedExtensionWarnings.js.map