All files / utils/__testUtils__ SettledEnumValues.ts

75% Statements 6/8
50% Branches 1/2
66.66% Functions 4/6
66.66% Lines 4/6

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                      7x 23x 13x                       23x            
import EnumMemberValues from "../EnumMemberValues";
import type IEnumSymbol from "../../types/symbols/IEnumSymbol";
 
/**
 * #1669: 1.3 records each enum member's value as written; its number is
 * settled by the one computation 1.4 uses. For an enum that names no const,
 * its own members are all the environment needs to answer.
 */
class SettledEnumValues {
  /** Each member's settled value, or the kind of answer it got instead */
  static of(symbol: IEnumSymbol): (number | string)[] {
    const members = [...symbol.members.values()];
    const names = members.map((member) => member.name);
    return EnumMemberValues.compute(members, (index, done) => ({
      cTypeName: (t) => t,
      valueOf: (name) =>
        EnumMemberValues.ownMember(
          names,
          index,
          done,
          name.path.at(-1)!,
          name.path.join("."),
          name.at,
        ),
    })).map((settled) =>
      settled.kind === "value" ? Number(settled.value) : settled.kind,
    );
  }
}
 
export default SettledEnumValues;