UNPKG

simc-ast-builder

Version:

Parser and AST generator for SimulationCraft files

231 lines 7.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PARAM_MAP = exports.FIELD_MAP = void 0; exports.getDefaultField = getDefaultField; exports.getFieldDef = getFieldDef; /** * Helper function to create a field definition using a partial object */ function field(def) { return [ def.name, { displayName: def.displayName || def.name, name: def.name, negatedName: def.negatedName || def.name, type: def.type, }, ]; } /** * Helper function to create a boolean field */ function fieldB(def) { return field(Object.assign(Object.assign({}, def), { type: "boolean" })); } /** * Helper function to create a numeric field */ function fieldN(def) { return field(Object.assign(Object.assign({}, def), { type: "numeric" })); } // Field map for all available fields const FIELD_MAP = Object.fromEntries([ // boolean fieldB({ displayName: "is_2h", name: "2h" }), fieldB({ displayName: "is_2h", name: "two_hand" }), fieldB({ displayName: "up", name: "ticking", negatedName: "down" }), fieldB({ name: "active" }), fieldB({ name: "alive" }), fieldB({ name: "at_max_stacks" }), fieldB({ name: "channeling" }), fieldB({ name: "disabled", negatedName: "enabled" }), fieldB({ name: "down", negatedName: "up" }), fieldB({ name: "enabled", negatedName: "disabled" }), fieldB({ name: "executing" }), fieldB({ name: "exists" }), fieldB({ name: "has_1pc" }), fieldB({ name: "has_2pc" }), fieldB({ name: "has_3pc" }), fieldB({ name: "has_4pc" }), fieldB({ name: "has_cooldown" }), fieldB({ name: "in_flight" }), fieldB({ name: "in_flight_to_target" }), fieldB({ name: "in_range" }), fieldB({ name: "is_boss" }), fieldB({ name: "react" }), fieldB({ name: "ready" }), fieldB({ name: "ready_cooldown" }), fieldB({ name: "refreshable" }), fieldB({ name: "up", negatedName: "down" }), fieldB({ name: "usable" }), fieldB({ name: "v2" }), // numeric fieldN({ displayName: "execute_time", name: "execution_time" }), fieldN({ displayName: "max_charges", name: "charges_max" }), fieldN({ displayName: "percent", name: "pct" }), fieldN({ name: "ams_absorb_percent" }), fieldN({ name: "astral_power" }), fieldN({ name: "base_deficit" }), fieldN({ name: "base_time_to_max" }), fieldN({ name: "cast_time" }), fieldN({ name: "charges" }), fieldN({ name: "charges_fractional" }), fieldN({ name: "chi" }), fieldN({ name: "combo_points" }), fieldN({ name: "cooldown" }), fieldN({ name: "cost" }), fieldN({ name: "count" }), fieldN({ name: "crit_pct" }), fieldN({ name: "damage" }), fieldN({ name: "default_value" }), fieldN({ name: "deficit" }), fieldN({ name: "distance" }), fieldN({ name: "duration" }), fieldN({ name: "duration_expected" }), fieldN({ name: "duration_guess" }), fieldN({ name: "energize_amount" }), fieldN({ name: "energy" }), fieldN({ name: "essence" }), fieldN({ name: "execute_remains" }), fieldN({ name: "execute_time" }), fieldN({ name: "expiration_delay_remains" }), fieldN({ name: "focus" }), fieldN({ name: "full_recharge_time" }), fieldN({ name: "full_reduction" }), fieldN({ name: "fury" }), fieldN({ name: "fwounded_targets" }), fieldN({ name: "gcd" }), fieldN({ name: "health_pct" }), fieldN({ name: "holy_power" }), fieldN({ name: "in" }), fieldN({ name: "insanity" }), fieldN({ name: "in_flight_remains" }), fieldN({ name: "in_flight_to_target_count" }), fieldN({ name: "last_used" }), fieldN({ name: "maelstrom" }), fieldN({ name: "mana" }), fieldN({ name: "max" }), fieldN({ name: "max_charges" }), fieldN({ name: "max_stack" }), fieldN({ name: "percent" }), fieldN({ name: "pmultiplier" }), fieldN({ name: "rage" }), fieldN({ name: "rank" }), fieldN({ name: "recharge_time" }), fieldN({ name: "regen" }), fieldN({ name: "regen_combined" }), fieldN({ name: "remains" }), fieldN({ name: "remains_expected" }), fieldN({ name: "remains_guess" }), fieldN({ name: "rune" }), fieldN({ name: "runic_power" }), fieldN({ name: "soul_shard" }), fieldN({ name: "soul_shards" }), fieldN({ name: "spell_targets" }), fieldN({ name: "stack" }), fieldN({ name: "stacks" }), fieldN({ name: "stagger" }), fieldN({ name: "ticks_remain" }), fieldN({ name: "tick_reduction" }), fieldN({ name: "time_since" }), fieldN({ name: "time_to" }), fieldN({ name: "time_to_die" }), fieldN({ name: "time_to_max" }), fieldN({ name: "time_to_pct_20" }), fieldN({ name: "time_to_pct_35" }), fieldN({ name: "time_to_pct_80" }), fieldN({ name: "travel_time" }), fieldN({ name: "usable_in" }), fieldN({ name: "value" }), ]); exports.FIELD_MAP = FIELD_MAP; /** * Helper function to create a parameter definition using a partial object */ function param(def) { return [def.name, { type: def.type }]; } /** * Shorthand helpers for parameters - uses same pattern as fields */ function paramC(def) { return param(Object.assign(Object.assign({}, def), { type: "condition" })); } function paramN(def) { return param(Object.assign(Object.assign({}, def), { type: "numeric" })); } function paramS(def) { return param(Object.assign(Object.assign({}, def), { type: "string" })); } const PARAM_MAP = Object.fromEntries([ // condition paramC({ name: "chain" }), paramC({ name: "condition" }), paramC({ name: "early_chain_if" }), paramC({ name: "if" }), paramC({ name: "interrupt_if" }), paramC({ name: "strict_if" }), paramC({ name: "target_if" }), // numeric paramN({ name: "cycle_targets" }), paramN({ name: "empower_to" }), paramN({ name: "enabled" }), paramN({ name: "extra_amount" }), paramN({ name: "for_next" }), paramN({ name: "interrupt" }), paramN({ name: "interrupt_global" }), paramN({ name: "interrupt_immediate" }), paramN({ name: "line_cd" }), paramN({ name: "max_energy" }), paramN({ name: "moving" }), paramN({ name: "precombat_seconds" }), paramN({ name: "precombat_time" }), paramN({ name: "sec" }), paramN({ name: "strict" }), paramN({ name: "use_off_gcd" }), paramN({ name: "use_while_casting" }), paramN({ name: "value" }), paramN({ name: "value_else" }), paramN({ name: "wait" }), // string paramS({ name: "effect_name" }), paramS({ name: "name" }), paramS({ name: "op" }), paramS({ name: "slot" }), paramS({ name: "slots" }), paramS({ name: "toggle" }), ]); exports.PARAM_MAP = PARAM_MAP; // TODO Verify those fields function getDefaultField(accessType) { const defaults = { action: "cast_time", buff: "up", cooldown: "remains", debuff: "up", dot: "ticking", gcd: "max", health: "percent", hyperthread_wristwraps: "count", movement: "distance", pet: "active", resource: "pct", set_bonus: "count", stagger: "pct", stat: "haste", talent: "enabled", target: "time_to_die", totem: "up", trinket: "cooldown", }; return defaults[accessType] || null; } function getFieldDef(name) { const fieldDef = FIELD_MAP[name]; if (!fieldDef) { return { displayName: name, name, negatedName: name, type: "neutral" }; } return fieldDef; } //# sourceMappingURL=fieldMaps.js.map