"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
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 _xdl() {
const data = require("@expo/xdl");
_xdl = function () {
return data;
};
return data;
}
function _chalk() {
const data = _interopRequireDefault(require("chalk"));
_chalk = function () {
return data;
};
return data;
}
function _utils() {
const data = require("./utils");
_utils = function () {
return data;
};
return data;
}
function _log() {
const data = _interopRequireDefault(require("../../log"));
_log = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class BaseUploader {
constructor(platform, projectDir, options) {
this.platform = platform;
this.projectDir = projectDir;
this.options = options; // it has to happen in constructor because we don't want to load this module on a different platform than darwin
this.fastlane = require('@expo/traveling-fastlane-darwin')();
}
async upload() {
await this._getProjectConfig();
const buildPath = await this._getBinaryFilePath();
const platformData = await this._getPlatformSpecificOptions();
await this._uploadToTheStore(platformData, buildPath);
await this._removeBuildFileIfDownloaded(buildPath);
(0, _log().default)(`Please also see our docs (${_chalk().default.underline('https://docs.expo.io/versions/latest/distribution/uploading-apps/')}) to learn more about the upload process.`);
}
async _getProjectConfig() {
const {
exp
} = await _xdl().ProjectUtils.readConfigJsonAsync(this.projectDir);
if (!exp) {
throw new Error(`Couldn't read project config file in ${this.projectDir}.`);
}
this._ensureExperienceIsValid(exp);
this._exp = exp;
}
async _getBinaryFilePath() {
const {
path,
id
} = this.options;
if (path) {
return path;
} else if (id) {
return this._downloadBuildById(id);
} else {
return this._downloadLastestBuild();
}
}
async _downloadBuildById(id) {
const {
platform
} = this;
const {
slug
} = this._exp;
const build = await _xdl().StandaloneBuild.getStandaloneBuilds({
id,
slug,
platform
});
if (!build) {
throw new Error(`We couldn't find build with id ${id}`);
}
return this._downloadBuild(build.artifacts.url);
}
async _downloadLastestBuild() {
const {
platform
} = this;
const {
slug
} = this._exp;
const build = await _xdl().StandaloneBuild.getStandaloneBuilds({
slug,
platform,
limit: 1
});
if (!build) {
throw new Error(`There are no builds on the Expo servers, please run 'expo build:${platform}' first`);
}
return this._downloadBuild(build.artifacts.url);
}
async _downloadBuild(urlOrPath) {
const filename = _path().default.basename(urlOrPath);
const destinationPath = `/tmp/${filename}`;
if (await _fsExtra().default.exists(destinationPath)) {
await _fsExtra().default.remove(destinationPath);
}
if (urlOrPath.startsWith('/')) {
await _fsExtra().default.copy(urlOrPath, destinationPath);
return destinationPath;
} else {
(0, _log().default)(`Downloading build from ${urlOrPath}`);
return await (0, _utils().downloadFile)(urlOrPath, destinationPath);
}
}
async _removeBuildFileIfDownloaded(buildPath) {
if (!this.options.path) {
await _fsExtra().default.remove(buildPath);
}
}
_ensureExperienceIsValid() {
throw new Error('Not implemented');
}
_getPlatformSpecificOptions() {
throw new Error('Not implemented');
}
_uploadToTheStore(platformData, buildPath) {
throw new Error('Not implemented');
}
}
exports.default = BaseUploader;
//# sourceMappingURL=../../__sourcemaps__/commands/upload/BaseUploader.js.map