UNPKG

simc-ast-builder

Version:

Parser and AST generator for SimulationCraft files

216 lines 9.78 kB
"use strict"; 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