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.

136 lines
4.2 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getAssetSchemasAsync = getAssetSchemasAsync;
exports.getSchemaAsync = getSchemaAsync;
exports.validateAsync = validateAsync;
exports.validatorFromProjectRoot = validatorFromProjectRoot;
function _config() {
const data = require("@expo/config");
_config = function () {
return data;
};
return data;
}
function _schemer() {
const data = _interopRequireDefault(require("@expo/schemer"));
_schemer = function () {
return data;
};
return data;
}
function _fs() {
const data = _interopRequireDefault(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _getenv() {
const data = require("getenv");
_getenv = function () {
return data;
};
return data;
}
function _jsonSchemaDerefSync() {
const data = _interopRequireDefault(require("json-schema-deref-sync"));
_jsonSchemaDerefSync = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = 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 }; }
const _xdlSchemaJson = {};
const _schemaCaches = {};
async function validatorFromProjectRoot(projectRoot) {
const {
exp
} = (0, _config().getConfig)(projectRoot);
if (!exp.sdkVersion) throw new Error(`Couldn't read local manifest`);
const schema = await getSchemaAsync(exp.sdkVersion);
const validator = new (_schemer().default)(schema);
return validator;
}
async function validateAsync(projectRoot) {
const {
exp
} = (0, _config().getConfig)(projectRoot);
if (!exp.sdkVersion) throw new Error(`Couldn't read local manifest`);
const schema = await getSchemaAsync(exp.sdkVersion);
const validator = new (_schemer().default)(schema);
await validator.validateAll(exp);
}
async function getSchemaAsync(sdkVersion) {
const json = await _getSchemaJSONAsync(sdkVersion);
const schema = (0, _jsonSchemaDerefSync().default)(json.schema);
return schema;
}
/**
* Array of schema nodes that refer to assets along with their field path (eg. 'notification.icon')
*
* @param sdkVersion
*/
async function getAssetSchemasAsync(sdkVersion) {
// If no SDK version is available then fall back to unversioned
const schema = await getSchemaAsync(sdkVersion !== null && sdkVersion !== void 0 ? sdkVersion : 'UNVERSIONED');
const assetSchemas = [];
const visit = (node, fieldPath) => {
if (node.meta && node.meta.asset) {
assetSchemas.push(fieldPath);
}
const properties = node.properties;
if (properties) {
Object.keys(properties).forEach(property => visit(properties[property], `${fieldPath}${fieldPath.length > 0 ? '.' : ''}${property}`));
}
};
visit(schema, '');
return assetSchemas;
}
async function _getSchemaJSONAsync(sdkVersion) {
if ((0, _getenv().boolish)('LOCAL_XDL_SCHEMA', false)) {
if (process.env.EXPONENT_UNIVERSE_DIR) {
return JSON.parse(_fs().default.readFileSync(_path().default.join(process.env.EXPONENT_UNIVERSE_DIR, 'server', 'www', 'xdl-schemas', 'UNVERSIONED-schema.json')).toString());
} else {
throw new Error(`LOCAL_XDL_SCHEMA is set but EXPONENT_UNIVERSE_DIR is not.`);
}
}
if (!_xdlSchemaJson[sdkVersion]) {
try {
_xdlSchemaJson[sdkVersion] = await getConfigurationSchemaAsync(sdkVersion);
} catch (e) {
if (e.code && e.code === 'INVALID_JSON') {
throw new Error(`Couldn't read schema from server`);
} else {
throw e;
}
}
}
return _xdlSchemaJson[sdkVersion];
}
async function getConfigurationSchemaAsync(sdkVersion) {
if (!_schemaCaches.hasOwnProperty(sdkVersion)) {
_schemaCaches[sdkVersion] = new (_internal().FsCache.Cacher)(async () => {
return await new (_internal().ApiV2)().getAsync(`project/configuration/schema/${sdkVersion}`);
}, `schema-${sdkVersion}.json`, 0, _path().default.join(__dirname, `../caches/schema-${sdkVersion}.json`));
}
return await _schemaCaches[sdkVersion].getAsync();
}
//# sourceMappingURL=ExpSchema.js.map