"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isDirectory = isDirectory; exports.parseSdkMajorVersion = parseSdkMajorVersion; exports.saveUrlToPathAsync = saveUrlToPathAsync; exports.saveImageToPathAsync = saveImageToPathAsync; exports.getManifestAsync = getManifestAsync; exports.rimrafDontThrow = rimrafDontThrow; exports.removeIfExists = removeIfExists; exports.spawnAsyncThrowError = spawnAsyncThrowError; exports.spawnAsync = spawnAsync; exports.transformFileContentsAsync = transformFileContentsAsync; exports.manifestUsesSplashApi = manifestUsesSplashApi; exports.getResolvedLocalesAsync = getResolvedLocalesAsync; exports.regexFileAsync = regexFileAsync; exports.deleteLinesInFileAsync = deleteLinesInFileAsync; exports.createSpawner = createSpawner; function _path() { const data = _interopRequireDefault(require("path")); _path = function () { return data; }; return data; } function _fsExtra() { const data = _interopRequireDefault(require("fs-extra")); _fsExtra = function () { return data; }; return data; } function _requestPromiseNative() { const data = _interopRequireDefault(require("request-promise-native")); _requestPromiseNative = function () { return data; }; return data; } function _request() { const data = _interopRequireDefault(require("request")); _request = function () { return data; }; return data; } function _spawnAsync() { const data = _interopRequireDefault(require("@expo/spawn-async")); _spawnAsync = function () { return data; }; return data; } function _lodash() { const data = _interopRequireDefault(require("lodash")); _lodash = function () { return data; }; return data; } function _Logger() { const data = _interopRequireWildcard(require("./Logger")); _Logger = function () { return data; }; return data; } function _XDLError() { const data = _interopRequireDefault(require("../XDLError")); _XDLError = function () { return data; }; return data; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // `request-promise-native` discourages using pipe. Noticed some issues with // error handling so when using pipe use the original request lib instead. const request = _requestPromiseNative().default.defaults({ resolveWithFullResponse: true }); function _getFilesizeInBytes(path) { let stats = _fsExtra().default.statSync(path); let fileSizeInBytes = stats['size']; return fileSizeInBytes; } function parseSdkMajorVersion(expSdkVersion) { // We assume that the unversioned SDK is the latest if (expSdkVersion === 'UNVERSIONED') { return Infinity; } let sdkMajorVersion = 0; try { let versionComponents = expSdkVersion.split('.').map(number => parseInt(number, 10)); sdkMajorVersion = versionComponents[0]; } catch (_) {} return sdkMajorVersion; } function saveUrlToPathAsync(url, path) { return new Promise(function (resolve, reject) { let stream = _fsExtra().default.createWriteStream(path); stream.on('close', () => { if (_getFilesizeInBytes(path) < 10) { reject(new Error(`${url} is too small`)); } resolve(); }); stream.on('error', reject); (0, _request().default)({ url, timeout: 20000 }).on('error', reject).pipe(stream); }); } function saveImageToPathAsync(projectRoot, pathOrURL, outPath) { const localPath = _path().default.resolve(projectRoot, pathOrURL); return new Promise(function (resolve, reject) { let stream = _fsExtra().default.createWriteStream(outPath); stream.on('close', () => { if (_getFilesizeInBytes(outPath) < 10) { throw new Error(`{filename} is too small`); } resolve(); }); stream.on('error', reject); if (_fsExtra().default.existsSync(localPath)) { _fsExtra().default.createReadStream(localPath).pipe(stream); } else { (0, _request().default)(pathOrURL).pipe(stream); } }); } async function getManifestAsync(url, headers, options = {}) { const buildPhaseLogger = options.logger || _Logger().default.withFields({ buildPhase: 'reading manifest' }); const requestOptions = { url: url.replace('exp://', 'http://'), headers }; let response; try { response = await _retryPromise(() => request(requestOptions)); } catch (err) { buildPhaseLogger.error(err); throw new Error('Failed to fetch manifest from www'); } const responseBody = response.body; buildPhaseLogger.info('Using manifest:', responseBody); let manifest; try { manifest = JSON.parse(responseBody); } catch (e) { throw new Error(`Unable to parse manifest: ${e}`); } return manifest; } async function _retryPromise(fn, retries = 5) { try { return await fn(); } catch (err) { if (retries-- > 0) { return await _retryPromise(fn, retries); } else { throw err; } } } async function spawnAsyncThrowError(command, args, options = { stdio: 'inherit', cwd: process.cwd() }) { const { pipeToLogger } = options; if (pipeToLogger) { options.stdio = 'pipe'; options.cwd = options.cwd || process.cwd(); } const promise = (0, _spawnAsync().default)(command, args, options); if (pipeToLogger && promise.child) { let streams = {}; if (pipeToLogger === true || pipeToLogger.stdout) { streams.stdout = promise.child.stdout; } if (pipeToLogger === true || pipeToLogger.stderr) { streams.stderr = promise.child.stderr; } (0, _Logger().pipeOutputToLogger)(streams, options.loggerFields, options); } return promise; } async function spawnAsync(command, args, options) { try { return await spawnAsyncThrowError(command, args, options); } catch (e) { _Logger().default.error(e.message); } } function createSpawner(buildPhase, logger) { return (command, ...args) => { const lastArg = _lodash().default.last(args); const optionsFromArg = _lodash().default.isObject(lastArg) ? args.pop() : {}; const options = { ...optionsFromArg, pipeToLogger: true }; if (buildPhase) { options.loggerFields = options.loggerFields ? options.loggerFields : {}; options.loggerFields = { ...options.loggerFields, buildPhase }; } if (logger) { logger.info('Executing command:', command, ...args); } return spawnAsyncThrowError(command, args, options); }; } async function transformFileContentsAsync(filename, transform) { let fileString = await _fsExtra().default.readFile(filename, 'utf8'); let newFileString = transform(fileString); if (newFileString !== null) { await _fsExtra().default.writeFile(filename, newFileString); } } function manifestUsesSplashApi(manifest, platform) { if (platform === 'ios') { return manifest.splash || manifest.ios && manifest.ios.splash; } if (platform === 'android') { return manifest.splash || manifest.android && manifest.android.splash; } return false; } function rimrafDontThrow(directory) { _fsExtra().default.removeSync(directory); } async function removeIfExists(file) { await _fsExtra().default.remove(file); } function isDirectory(dir) { try { if (_fsExtra().default.statSync(dir).isDirectory()) { return true; } return false; } catch (e) { return false; } } async function getResolvedLocalesAsync(exp) { const locales = {}; if (exp.locales !== undefined) { for (const [lang, path] of Object.entries(exp.locales)) { const s = await _fsExtra().default.readFile(path, 'utf8'); try { locales[lang] = JSON.parse(s); } catch (e) { throw new (_XDLError().default)('INVALID_JSON', JSON.stringify(e)); } } } return locales; } async function regexFileAsync(regex, replace, filename) { let file = await _fsExtra().default.readFile(filename); let fileString = file.toString(); await _fsExtra().default.writeFile(filename, fileString.replace(regex, replace)); } // Matches sed /d behavior async function deleteLinesInFileAsync(startRegex, endRegex, filename) { let file = await _fsExtra().default.readFile(filename); let fileString = file.toString(); let lines = fileString.split(/\r?\n/); let filteredLines = []; let inDeleteRange = false; for (let i = 0; i < lines.length; i++) { if (lines[i].match(startRegex)) { inDeleteRange = true; } if (!inDeleteRange) { filteredLines.push(lines[i]); } if (inDeleteRange && lines[i].match(endRegex)) { inDeleteRange = false; } } await _fsExtra().default.writeFile(filename, filteredLines.join('\n')); } //# sourceMappingURL=../__sourcemaps__/detach/ExponentTools.js.map