simc-ast-builder
Version:
Parser and AST generator for SimulationCraft files
216 lines • 9.78 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.contextHandlerRegistry = void 0;
const BasicHandlers = __importStar(require("./Basic"));
const HekiliApiHandlers = __importStar(require("./HekiliApi"));
const SimCApiHandlers = __importStar(require("./SimCApi"));
class ContextHandlerRegistry {
constructor() {
this.accessHandlers = {};
this.contextHandlers = {};
this.lineMetaData = {
actionLine: "",
actionName: "",
actionParams: [],
subListName: "",
};
this.registerDefaultHandlers();
}
dispatchAccess(accessType, ctx, visitor, parts) {
const handler = this.getAccessHandler(accessType);
if (!handler) {
throw new Error(`No access handler registered for: ${accessType}`);
}
return handler({
ctx,
meta: this.lineMetaData,
parts,
visitor,
});
}
dispatchContext(contextType, ctx, visitor) {
const handler = this.getContextHandler(contextType);
if (!handler) {
throw new Error(`No context handler registered for: ${contextType}`);
}
return handler(ctx, visitor);
}
getAccessHandler(accessType) {
return this.accessHandlers[accessType];
}
getContextHandler(contextType) {
return this.contextHandlers[contextType];
}
/**
* Check if a string is a valid access handler key
* @param key The string to check
* @returns True if the key is a valid access handler key
*/
hasAccessHandler(key) {
return key in this.accessHandlers;
}
/**
* Check if a string is a valid context handler key
* @param key The string to check
* @returns True if the key is a valid context handler key
*/
hasContextHandler(key) {
return key in this.contextHandlers;
}
registerAccessHandler(accessType, handler) {
this.accessHandlers[accessType] = handler;
}
registerContextHandler(contextType, handler) {
this.contextHandlers[contextType] = handler;
}
setMetaData(metaData) {
this.lineMetaData = metaData;
}
registerDefaultHandlers() {
const RAH = this.registerAccessHandler.bind(this);
const RCH = this.registerContextHandler.bind(this);
// Basic
// Context
RCH("AccessExpr", BasicHandlers.handleAccessExpr); // TODO Fix this type for real
RCH("ActionLine", BasicHandlers.handleActionLine);
RCH("ActionParam", BasicHandlers.handleActionParam);
RCH("AdditiveExpr", BasicHandlers.handleAdditiveExpr);
RCH("AndExpr", BasicHandlers.handleAndExpr);
RCH("AnyTokenExpr", BasicHandlers.handleAnyTokenExpr);
RCH("CommentLine", BasicHandlers.handleCommentLine);
RCH("ComparisonExpr", BasicHandlers.handleComparisonExpr);
RCH("MathFuncExpr", BasicHandlers.handleMathFuncExpr);
RCH("Identifier", BasicHandlers.handleIdentifier);
RCH("MinMaxExpr", BasicHandlers.handleMinMaxExpr);
RCH("MixedIdExpr", BasicHandlers.handleMixedIdExpr);
RCH("MultiplicativeExpr", BasicHandlers.handleMultiplicativeExpr);
RCH("NumberExpr", BasicHandlers.handleNumberExpr);
RCH("OrExpr", BasicHandlers.handleOrExpr);
RCH("Parse", BasicHandlers.handleParseContext);
RCH("XorExpr", BasicHandlers.handleXorExpr);
RCH("StringExpr", BasicHandlers.handleStringExpr);
RCH("UnaryExpr", BasicHandlers.handleUnaryExpr);
// SimC
// Context
RCH("ActionName", SimCApiHandlers.handleActionName);
RCH("SublistName", SimCApiHandlers.handleSublistName);
// Access
RAH("action", SimCApiHandlers.handleAction);
RAH("active_dot", SimCApiHandlers.handleActiveDot);
RAH("buff", SimCApiHandlers.handleBuff);
RAH("cooldown", SimCApiHandlers.handleCooldown);
RAH("debuff", SimCApiHandlers.handleDebuff);
RAH("dot", SimCApiHandlers.handleDot);
RAH("eclipse", SimCApiHandlers.handleEclipse);
RAH("equipped", SimCApiHandlers.handleEquipped);
RAH("health", SimCApiHandlers.handleHealth);
RAH("hero_tree", SimCApiHandlers.handleHeroTree);
RAH("raid_event", SimCApiHandlers.handleRaidEvent);
RAH("spell_targets", SimCApiHandlers.handleSpellTargets);
RAH("target", SimCApiHandlers.handleTarget);
RAH("talent", SimCApiHandlers.handleTalent);
RAH("toggle", SimCApiHandlers.handleToggle);
RAH("trinket", SimCApiHandlers.handleTrinket);
RAH("variable", SimCApiHandlers.handleVariable);
RAH("gcd", SimCApiHandlers.handleGcd);
RAH("main_hand", SimCApiHandlers.handleMainHand);
RAH("movement", SimCApiHandlers.handleMovement);
RAH("pet", SimCApiHandlers.handlePet);
RAH("prev", SimCApiHandlers.handlePrev);
RAH("prev_gcd", SimCApiHandlers.handlePrevGcd);
RAH("prev_off_gcd", SimCApiHandlers.handlePrevOffGcd);
RAH("set_bonus", SimCApiHandlers.handleSetBonus);
RAH("stat", SimCApiHandlers.handleStat);
RAH("fight_remains", SimCApiHandlers.handleFightRemains);
RAH("time", SimCApiHandlers.handleTime);
RAH("cycle_enemies", SimCApiHandlers.handleCycleEnemies);
// Evoker-specific handlers
RAH("evoker", SimCApiHandlers.handleEvoker);
RAH("empowering", SimCApiHandlers.handleEmpowering);
RAH("release", SimCApiHandlers.handleRelease);
// Hunter-specific handlers
RAH("hunter", SimCApiHandlers.handleHunter);
RAH("howl_summon", SimCApiHandlers.handleHowlSummon);
RAH("boar_charge", SimCApiHandlers.handleBoarCharge);
// Mage-specific handlers
RAH("mage", SimCApiHandlers.handleMage);
RAH("scorch_execute", SimCApiHandlers.handleScorchExecute);
RAH("improved_scorch", SimCApiHandlers.handleImprovedScorch);
RAH("firestarter", SimCApiHandlers.handleFirestarter);
RAH("remaining_winters_chill", SimCApiHandlers.handleRemainingWintersChill);
// Special item handlers
RAH("hyperthread_wristwraps", SimCApiHandlers.handleHyperthreadWristwraps);
// Class handlers
RAH("druid", SimCApiHandlers.handleDruid);
RAH("death_knight", SimCApiHandlers.handleDeathKnight);
RAH("feral_spirit", SimCApiHandlers.handleFeralSpirit);
RAH("monk", SimCApiHandlers.handleMonk);
RAH("paladin", SimCApiHandlers.handlePaladin);
RAH("priest", SimCApiHandlers.handlePriest);
RAH("rogue", SimCApiHandlers.handleRogue);
RAH("rtb_buffs", SimCApiHandlers.handleRtbBuffs);
RAH("shaman", SimCApiHandlers.handleShaman);
RAH("lightning_rod", SimCApiHandlers.handleLightningRod);
RAH("stagger", SimCApiHandlers.handleStagger);
RAH("stealthed", SimCApiHandlers.handleStealthed);
RAH("totem", SimCApiHandlers.handleTotem);
RAH("consecration", SimCApiHandlers.handleConsecration);
RAH("death_and_decay", SimCApiHandlers.handleDeathAndDecay);
// Hekili API handlers
RAH("boss", HekiliApiHandlers.handleBoss);
RAH("group_members", HekiliApiHandlers.handleGroupMembers);
RAH("settings", HekiliApiHandlers.handleSettings);
// Resource handlers
RAH("runic_power", SimCApiHandlers.handleResource);
RAH("rage", SimCApiHandlers.handleResource);
RAH("energy", SimCApiHandlers.handleResource);
RAH("mana", SimCApiHandlers.handleResource);
RAH("focus", SimCApiHandlers.handleResource);
RAH("fury", SimCApiHandlers.handleResource);
RAH("rune", SimCApiHandlers.handleResource);
RAH("astral_power", SimCApiHandlers.handleResource);
RAH("maelstrom", SimCApiHandlers.handleResource);
RAH("insanity", SimCApiHandlers.handleResource);
RAH("holy_power", SimCApiHandlers.handleResource);
RAH("soul_shard", SimCApiHandlers.handleResource);
RAH("soul_shards", SimCApiHandlers.handleResource);
RAH("combo_points", SimCApiHandlers.handleResource);
RAH("chi", SimCApiHandlers.handleResource);
RAH("essence", SimCApiHandlers.handleResource);
}
}
exports.contextHandlerRegistry = new ContextHandlerRegistry();
//# sourceMappingURL=ContextHandlerRegistry.js.map