You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
5.3 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.canTurtleBuildSdkVersion = canTurtleBuildSdkVersion;
exports.gteSdkVersion = gteSdkVersion;
exports.lteSdkVersion = lteSdkVersion;
exports.newestReleasedSdkVersionAsync = newestReleasedSdkVersionAsync;
exports.oldestSupportedMajorVersionAsync = oldestSupportedMajorVersionAsync;
exports.parseSdkVersionFromTag = parseSdkVersionFromTag;
exports.releasedSdkVersionsAsync = releasedSdkVersionsAsync;
exports.sdkVersionsAsync = sdkVersionsAsync;
exports.versionsAsync = versionsAsync;
function _getenv() {
const data = _interopRequireDefault(require("getenv"));
_getenv = function () {
return data;
};
return data;
}
function _pickBy() {
const data = _interopRequireDefault(require("lodash/pickBy"));
_pickBy = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _semver() {
const data = _interopRequireDefault(require("semver"));
_semver = function () {
return data;
};
return data;
}
function _internal() {
const data = require("./internal");
_internal = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
async function versionsAsync(options) {
const api = new (_internal().ApiV2)();
const versionCache = new (_internal().FsCache.Cacher)(() => api.getAsync('versions/latest'), 'versions.json', 0, _path().default.join(__dirname, '../caches/versions.json'));
// Clear cache when opting in to beta because things can change quickly in beta
if (_getenv().default.boolish('EXPO_BETA', false) || options !== null && options !== void 0 && options.skipCache) {
versionCache.clearAsync();
}
return await versionCache.getAsync();
}
async function sdkVersionsAsync() {
const {
sdkVersions
} = await versionsAsync();
return sdkVersions;
}
// NOTE(brentvatne): it is possible for an unreleased version to be published to
// the versions endpoint, but in some cases we only want to list out released
// versions
async function releasedSdkVersionsAsync() {
const sdkVersions = await sdkVersionsAsync();
return (0, _pickBy().default)(sdkVersions, (data, _sdkVersionString) => !!data.releaseNoteUrl || _getenv().default.boolish('EXPO_BETA', false) && data.beta);
}
function gteSdkVersion(expJson, sdkVersion) {
if (!expJson.sdkVersion) {
return false;
}
if (expJson.sdkVersion === 'UNVERSIONED') {
return true;
}
try {
return _semver().default.gte(expJson.sdkVersion, sdkVersion);
} catch {
throw new (_internal().XDLError)('INVALID_VERSION', `${expJson.sdkVersion} is not a valid version. Must be in the form of x.y.z`);
}
}
function lteSdkVersion(expJson, sdkVersion) {
if (!expJson.sdkVersion) {
return false;
}
if (expJson.sdkVersion === 'UNVERSIONED') {
return false;
}
try {
return _semver().default.lte(expJson.sdkVersion, sdkVersion);
} catch {
throw new (_internal().XDLError)('INVALID_VERSION', `${expJson.sdkVersion} is not a valid version. Must be in the form of x.y.z`);
}
}
function parseSdkVersionFromTag(tag) {
if (tag.startsWith('sdk-')) {
return tag.substring(4);
}
return tag;
}
// NOTE(brentvatne): it is possible for an unreleased version to be published to
// the versions endpoint, but in some cases we need to get the latest *released*
// version, not just the latest version.
async function newestReleasedSdkVersionAsync() {
const betaOptInEnabled = _getenv().default.boolish('EXPO_BETA', false);
const sdkVersions = await sdkVersionsAsync();
let result = null;
let highestMajorVersion = '0.0.0';
for (const [version, data] of Object.entries(sdkVersions)) {
const hasReleaseNotes = !!data.releaseNoteUrl;
const isBeta = !!data.beta;
if (_semver().default.major(version) > _semver().default.major(highestMajorVersion) && (hasReleaseNotes || isBeta && betaOptInEnabled)) {
highestMajorVersion = version;
result = data;
}
}
return {
version: highestMajorVersion,
data: result
};
}
async function oldestSupportedMajorVersionAsync() {
const sdkVersions = await sdkVersionsAsync();
const supportedVersions = (0, _pickBy().default)(sdkVersions, v => !v.isDeprecated);
const versionNumbers = Object.keys(supportedVersions).map(version => _semver().default.major(version));
return Math.min(...versionNumbers);
}
async function canTurtleBuildSdkVersion(sdkVersion, platform) {
var _supportedVersions$pl;
if (sdkVersion === 'UNVERSIONED') {
return true;
}
if (_semver().default.valid(sdkVersion) == null) {
throw new (_internal().XDLError)('INVALID_VERSION', `"${sdkVersion}" is not a valid version. Must be in the form of x.y.z`);
}
const supportedVersions = await getSdkVersionsSupportedByTurtle();
const supportedVersionsForPlatform = (_supportedVersions$pl = supportedVersions[platform]) !== null && _supportedVersions$pl !== void 0 ? _supportedVersions$pl : [];
return supportedVersionsForPlatform.indexOf(sdkVersion) !== -1;
}
async function getSdkVersionsSupportedByTurtle() {
const api = new (_internal().ApiV2)();
return await api.getAsync('standalone-build/supportedSDKVersions');
}
//# sourceMappingURL=Versions.js.map