49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
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<Record<string, import("../contracts/routes.js").RouteDefinition>>} */ (
|
|
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;
|
|
}
|