"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validatorFromProjectRoot = validatorFromProjectRoot; exports.getSchemaAsync = getSchemaAsync; exports.getAssetSchemasAsync = getAssetSchemasAsync; function _fs() { const data = _interopRequireDefault(require("fs")); _fs = function () { return data; }; return data; } function _path() { const data = _interopRequireDefault(require("path")); _path = function () { return data; }; return data; } function _schemer() { const data = _interopRequireDefault(require("@expo/schemer")); _schemer = function () { return data; }; return data; } function _Api() { const data = _interopRequireDefault(require("../Api")); _Api = function () { return data; }; return data; } function ConfigUtils() { const data = _interopRequireWildcard(require("@expo/config")); ConfigUtils = 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 }; } let _xdlSchemaJson = {}; async function validatorFromProjectRoot(projectRoot) { const { exp } = await ConfigUtils().readConfigJsonAsync(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 getSchemaAsync(sdkVersion) { let json = await _getSchemaJSONAsync(sdkVersion); return json.schema; } // Array of schema nodes that refer to assets along with their field // path (eg. 'notification.icon') async function getAssetSchemasAsync(sdkVersion) { const schema = await getSchemaAsync(sdkVersion); const assetSchemas = []; const visit = (node, fieldPath) => { if (node.meta && node.meta.asset) { assetSchemas.push({ schema: node, 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 (process.env.LOCAL_XDL_SCHEMA) { 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 _Api().default.xdlSchemaAsync(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]; } //# sourceMappingURL=../__sourcemaps__/project/ExpSchema.js.map