import { AppManifest } from '@zaiusinc/app-sdk'; import { prerelease } from 'semver'; import { readAppYaml } from './AppContext'; import { getEnv } from './Config'; import { Rivendell } from './Rivendell'; export async function applicableShards(availability = '', fromManifest?: AppManifest): Promise { if (getEnv() === 'staging') { return ['us']; } const manifest = fromManifest || readAppYaml(); const pre = prerelease(manifest.meta.version); if (pre && pre[0] === 'dev') { return ['us']; } if (availability) { return [availability]; } return resolveShards(manifest); } export async function targetShards(): Promise { return await resolveShards(readAppYaml()); } async function resolveShards(manifest: AppManifest) { let shards = manifest.meta.availability || ['us']; if (shards.includes('all')) { shards = (await Rivendell.shards()).map((s) => s.id); } return ['us'].concat(shards.filter((s) => s !== 'us').sort()); }