All files / src/data unitOpConfigs.ts

92.59% Statements 25/27
64.7% Branches 11/17
100% Functions 0/0
95.45% Lines 21/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100            103x         103x                                   4120x               2060x 2060x   103x 103x           103x     6798x 6798x     1133x               1133x                 206x     1133x       206x     103x     103x         278x   278x 278x   21x          
import type { JsonUnitOpConfig } from "./UnitOpConfig.gen";
import generatedUnitOpConfigs from "./unitOpConfigs.gen.json";
 
export type UnitOpJsonConfig = JsonUnitOpConfig;
export type UnitOpConfig = UnitOpJsonConfig;
 
const rawUnitOpConfigs = generatedUnitOpConfigs as Record<
  string,
  UnitOpJsonConfig
>;
 
const unitOpConfigs = rawUnitOpConfigs as Record<string, UnitOpConfig>;
 
export type UnitOpVariantOption = {
  objectType: string;
  label: string;
  order: number | null;
  default: boolean;
  config: UnitOpConfig;
};
 
export type UnitOpVariantFamily = {
  familyKey: string;
  selectorLabel: string;
  defaultObjectType: string | null;
  options: UnitOpVariantOption[];
};
 
function getVariantSortOrder(option: UnitOpVariantOption) {
  return option.order ?? Number.MAX_SAFE_INTEGER;
}
 
function compareVariantOptions(
  left: UnitOpVariantOption,
  right: UnitOpVariantOption,
) {
  const orderDifference =
    getVariantSortOrder(left) - getVariantSortOrder(right);
  if (orderDifference !== 0) return orderDifference;
 
  const labelComparison = left.label.localeCompare(right.label);
  if (labelComparison !== 0) return labelComparison;
 
  return left.objectType.localeCompare(right.objectType);
}
 
function buildUnitOpVariantFamilies() {
  const families = new Map<string, UnitOpVariantFamily>();
 
  for (const [objectType, config] of Object.entries(unitOpConfigs)) {
    const variant = config.frontend?.variant;
    if (!variant) continue;
 
    const family =
      families.get(variant.familyKey) ??
      ({
        familyKey: variant.familyKey,
        selectorLabel: variant.selectorLabel ?? "Model Type",
        defaultObjectType: null,
        options: [],
      } satisfies UnitOpVariantFamily);
 
    family.options.push({
      objectType,
      label: variant.label,
      order: variant.order ?? null,
      default: variant.default ?? false,
      config,
    });
 
    if (variant.default) {
      family.defaultObjectType = objectType;
    }
 
    families.set(variant.familyKey, family);
  }
 
  for (const family of families.values()) {
    family.options.sort(compareVariantOptions);
  }
 
  return families;
}
 
export const unitOpVariantFamilies = buildUnitOpVariantFamilies();
 
export function getUnitOpVariantFamily(
  objectType: string | null | undefined,
): UnitOpVariantFamily | null {
  Iif (!objectType) return null;
 
  const variant = unitOpConfigs[objectType]?.frontend?.variant;
  if (!variant) return null;
 
  return unitOpVariantFamilies.get(variant.familyKey) ?? null;
}
 
export { rawUnitOpConfigs };
export default unitOpConfigs;