import { PLATFORM_ROUTE_RUNTIME_CONTRACT } from "../contracts/route-runtime-contract.js"; import { PLATFORM_ROUTE_REGISTRY } from "../contracts/routes.js"; import { REFERENCE_FEATURE_CONTRACT } from "./reference-feature/contracts/reference-feature-contract.js"; export const INSTALLED_FEATURE_CONTRACTS = Object.freeze([ REFERENCE_FEATURE_CONTRACT, ]); export const ROUTE_REGISTRY = Object.freeze({ ...PLATFORM_ROUTE_REGISTRY, ...REFERENCE_FEATURE_CONTRACT.routes, }); export const ROUTE_RUNTIME_CONTRACT = Object.freeze({ ...PLATFORM_ROUTE_RUNTIME_CONTRACT, ...REFERENCE_FEATURE_CONTRACT.routeRuntimeContracts, }); export const API_OPERATIONS = Object.freeze({ ...REFERENCE_FEATURE_CONTRACT.apiOperations, }); export const QUERY_REGISTRY = Object.freeze({ ...REFERENCE_FEATURE_CONTRACT.queryRegistry, }); export const NAVIGATION_ROUTES = Object.freeze( Object.values(ROUTE_REGISTRY) .filter((definition) => definition.navigationOrder !== null) .sort( (left, right) => /** @type {number} */ (left.navigationOrder) - /** @type {number} */ (right.navigationOrder), ), ); /** @param {string} routeId */ export function getRoute(routeId) { const registry = /** @type {Readonly>} */ ( ROUTE_REGISTRY ); const selected = registry[routeId]; if (!selected) throw new Error(`Unregistered route: ${routeId}`); return selected; } /** @param {string} routeId */ export function routePath(routeId) { return getRoute(routeId).path; }