1 | {"version":3,"file":"ExpSchema.js","names":["_config","data","require","_schemer","_interopRequireDefault","_fs","_getenv","_jsonSchemaDerefSync","_path","_internal","obj","__esModule","default","_xdlSchemaJson","_schemaCaches","validatorFromProjectRoot","projectRoot","exp","getConfig","sdkVersion","Error","schema","getSchemaAsync","validator","Schemer","validateAsync","validateAll","json","_getSchemaJSONAsync","schemaDerefSync","getAssetSchemasAsync","assetSchemas","visit","node","fieldPath","meta","asset","push","properties","Object","keys","forEach","property","length","boolish","process","env","EXPONENT_UNIVERSE_DIR","JSON","parse","fs","readFileSync","path","join","toString","getConfigurationSchemaAsync","e","code","hasOwnProperty","FsCache","Cacher","ApiV2","getAsync","__dirname"],"sources":["../../src/project/ExpSchema.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport { JSONObject } from '@expo/json-file';\nimport Schemer from '@expo/schemer';\nimport fs from 'fs';\nimport { boolish } from 'getenv';\nimport schemaDerefSync from 'json-schema-deref-sync';\nimport path from 'path';\n\nimport { ApiV2, FsCache } from '../internal';\n\nexport type Schema = any;\nexport type AssetSchema = {\n // schema: Schema;\n fieldPath: string;\n};\n\nconst _xdlSchemaJson: { [sdkVersion: string]: Schema } = {};\nconst _schemaCaches: { [version: string]: FsCache.Cacher<JSONObject> } = {};\n\nexport async function validatorFromProjectRoot(projectRoot: string): Promise<Schemer> {\n const { exp } = getConfig(projectRoot);\n if (!exp.sdkVersion) throw new Error(`Couldn't read local manifest`);\n const schema = await getSchemaAsync(exp.sdkVersion);\n const validator = new Schemer(schema);\n return validator;\n}\n\nexport async function validateAsync(projectRoot: string) {\n const { exp } = getConfig(projectRoot);\n if (!exp.sdkVersion) throw new Error(`Couldn't read local manifest`);\n const schema = await getSchemaAsync(exp.sdkVersion);\n const validator = new Schemer(schema);\n await validator.validateAll(exp);\n}\n\nexport async function getSchemaAsync(sdkVersion: string): Promise<Schema> {\n const json = await _getSchemaJSONAsync(sdkVersion);\n const schema = schemaDerefSync(json.schema);\n return schema;\n}\n\n/**\n * Array of schema nodes that refer to assets along with their field path (eg. 'notification.icon')\n *\n * @param sdkVersion\n */\nexport async function getAssetSchemasAsync(sdkVersion: string | undefined): Promise<string[]> {\n // If no SDK version is available then fall back to unversioned\n const schema = await getSchemaAsync(sdkVersion ?? 'UNVERSIONED');\n const assetSchemas: string[] = [];\n const visit = (node: Schema, fieldPath: string) => {\n if (node.meta && node.meta.asset) {\n assetSchemas.push(fieldPath);\n }\n const properties = node.properties;\n if (properties) {\n Object.keys(properties).forEach(property =>\n visit(properties[property], `${fieldPath}${fieldPath.length > 0 ? '.' : ''}${property}`)\n );\n }\n };\n visit(schema, '');\n\n return assetSchemas;\n}\n\nasync function _getSchemaJSONAsync(sdkVersion: string): Promise<{ schema: Schema }> {\n if (boolish('LOCAL_XDL_SCHEMA', false)) {\n if (process.env.EXPONENT_UNIVERSE_DIR) {\n return JSON.parse(\n fs\n .readFileSync(\n path.join(\n process.env.EXPONENT_UNIVERSE_DIR,\n 'server',\n 'www',\n 'xdl-schemas',\n 'UNVERSIONED-schema.json'\n )\n )\n .toString()\n );\n } else {\n throw new Error(`LOCAL_XDL_SCHEMA is set but EXPONENT_UNIVERSE_DIR is not.`);\n }\n }\n\n if (!_xdlSchemaJson[sdkVersion]) {\n try {\n _xdlSchemaJson[sdkVersion] = await getConfigurationSchemaAsync(sdkVersion);\n } catch (e: any) {\n if (e.code && e.code === 'INVALID_JSON') {\n throw new Error(`Couldn't read schema from server`);\n } else {\n throw e;\n }\n }\n }\n\n return _xdlSchemaJson[sdkVersion];\n}\n\nasync function getConfigurationSchemaAsync(sdkVersion: string): Promise<JSONObject> {\n if (!_schemaCaches.hasOwnProperty(sdkVersion)) {\n _schemaCaches[sdkVersion] = new FsCache.Cacher(\n async () => {\n return await new ApiV2().getAsync(`project/configuration/schema/${sdkVersion}`);\n },\n `schema-${sdkVersion}.json`,\n 0,\n path.join(__dirname, `../caches/schema-${sdkVersion}.json`)\n );\n }\n\n return await _schemaCaches[sdkVersion].getAsync();\n}\n"],"mappings":"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"} |