{ "version": 3, "sources": ["../../../../sim/cobblemon/registries.ts"], "sourcesContent": ["/**\n * This exists mainly as a way to avoid boilerplate for data handlers between Showdown and Cobblemon and so we can extend in the future if needed.\n * Be sure to check cobblemon.ts for the related data if you add/remove any registries.\n */\n\nimport {Ability} from \"../dex-abilities\";\nimport {BagItem} from \"./bag-item\";\nimport {DataMove, Move} from \"../dex-moves\";\nimport {Item} from \"../dex-items\";\nimport {Species} from \"../dex-species\";\nimport {Dex} from \"../dex\";\nimport {Cobblemon} from \"./cobblemon\";\n\nexport abstract class CobbleRegistry {\n\tcontents: Map = new Map();\n\tall(): readonly T[] { return Array.from(this.contents.values()); }\n\tget(id: ID): T | undefined { return this.contents.get(id); }\n\thas(id: ID): boolean { return this.contents.has(id); }\n\treset() { this.contents.clear(); this.invalidate(); }\n\n\t/**\n\t * The main function used to handle incoming data and prepare it for registration.\n\t * @param data The raw data to be coaxed into T inside the function.\n\t * @param _id Optional manual ID in case the data doesn't have one. Underscored because 'id' is often what we need to set.\n\t */\n\tabstract register(data: AnyObject, _id?: ID): T;\n\n\t/**\n\t * Nullifies/mark dirty any additional caches etc. while keeping any Cobblemon-registered data intact.\n\t * This allows entries to be registered in multiple commands without erasing existing entries. This is automatically run by the reset command as well.\n\t * Mainly for use with Dex-related \"allCache\" stores. If the registry doesn't have any Showdown-side data to reset (e.g. bag items) then simply return.\n\t */\n\tabstract invalidate(): void;\n}\n\nexport interface Registries {\n\tability: AbilityRegistry;\n\tbagItem: BagItemRegistry;\n\theldItem: HeldItemRegistry;\n\tmove: MoveRegistry;\n\tspecies: SpeciesRegistry;\n}\n\nexport class AbilityRegistry extends CobbleRegistry {\n\toverride all() { return Dex.mod(Cobblemon.modId).abilities.all(); }\n\tinvalidate() { Dex.mod(Cobblemon.modId).abilities.allCache = null; }\n\tregister(data: AnyObject, _id: ID) {\n\t\tif (!data.name) data.name = _id;\n\t\tconst ability = new Ability(data);\n\t\tthis.contents.set(ability.id, ability);\n\t\treturn ability;\n\t}\n}\n\nexport class BagItemRegistry extends CobbleRegistry {\n\tinvalidate() { return; }\n\tregister(data: AnyObject, _id: ID) {\n\t\tconst script = data as BagItem; // TODO: make BagItem a BasicEffect and part of Dex data\n\t\tthis.contents.set(_id, script);\n\t\treturn script;\n\t}\n}\n\nexport class HeldItemRegistry extends CobbleRegistry {\n\toverride all() { return Dex.mod(Cobblemon.modId).items.all(); }\n\tinvalidate() { Dex.mod(Cobblemon.modId).items.allCache = null; }\n\tregister(data: AnyObject, _id: ID) {\n\t\tif (!data.name) data.name = _id;\n\t\tconst item = new Item(data);\n\t\tthis.contents.set(item.id, item);\n\t\treturn item;\n\t}\n}\n\nexport class MoveRegistry extends CobbleRegistry {\n\toverride all() { return Dex.mod(Cobblemon.modId).moves.all(); }\n\tinvalidate() { Dex.mod(Cobblemon.modId).moves.allCache = null; }\n\tregister(data: AnyObject, _id: ID) {\n\t\tif (!data.name) data.name = _id;\n\t\tconst move = new DataMove(data);\n\t\tthis.contents.set(move.id, move);\n\t\treturn move;\n\t}\n}\n\nexport class SpeciesRegistry extends CobbleRegistry {\n\toverride all() { return Dex.mod(Cobblemon.modId).species.all(); }\n\tinvalidate() { Dex.mod(Cobblemon.modId).species.allCache = null; }\n\tregister(data: AnyObject): Species {\n\t\tconst species = new Species(data);\n\t\tthis.contents.set(species.id, species);\n\t\treturn species;\n\t}\n}\n\n"], "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,2BAAsB;AAEtB,uBAA6B;AAC7B,uBAAmB;AACnB,yBAAsB;AACtB,iBAAkB;AAClB,uBAAwB;AAEjB,MAAe,eAAkB;AAAA,EAAjC;AACN,oBAAuB,oBAAI,IAAW;AAAA;AAAA,EACtC,MAAoB;AAAE,WAAO,MAAM,KAAK,KAAK,SAAS,OAAO,CAAC;AAAA,EAAG;AAAA,EACjE,IAAI,IAAuB;AAAE,WAAO,KAAK,SAAS,IAAI,EAAE;AAAA,EAAG;AAAA,EAC3D,IAAI,IAAiB;AAAE,WAAO,KAAK,SAAS,IAAI,EAAE;AAAA,EAAG;AAAA,EACrD,QAAQ;AAAE,SAAK,SAAS,MAAM;AAAG,SAAK,WAAW;AAAA,EAAG;AAerD;AAUO,MAAM,wBAAwB,eAAwB;AAAA,EACnD,MAAM;AAAE,WAAO,eAAI,IAAI,2BAAU,KAAK,EAAE,UAAU,IAAI;AAAA,EAAG;AAAA,EAClE,aAAa;AAAE,mBAAI,IAAI,2BAAU,KAAK,EAAE,UAAU,WAAW;AAAA,EAAM;AAAA,EACnE,SAAS,MAAiB,KAAS;AAClC,QAAI,CAAC,KAAK;AAAM,WAAK,OAAO;AAC5B,UAAM,UAAU,IAAI,6BAAQ,IAAI;AAChC,SAAK,SAAS,IAAI,QAAQ,IAAI,OAAO;AACrC,WAAO;AAAA,EACR;AACD;AAEO,MAAM,wBAAwB,eAAwB;AAAA,EAC5D,aAAa;AAAE;AAAA,EAAQ;AAAA,EACvB,SAAS,MAAiB,KAAS;AAClC,UAAM,SAAS;AACf,SAAK,SAAS,IAAI,KAAK,MAAM;AAC7B,WAAO;AAAA,EACR;AACD;AAEO,MAAM,yBAAyB,eAAqB;AAAA,EACjD,MAAM;AAAE,WAAO,eAAI,IAAI,2BAAU,KAAK,EAAE,MAAM,IAAI;AAAA,EAAG;AAAA,EAC9D,aAAa;AAAE,mBAAI,IAAI,2BAAU,KAAK,EAAE,MAAM,WAAW;AAAA,EAAM;AAAA,EAC/D,SAAS,MAAiB,KAAS;AAClC,QAAI,CAAC,KAAK;AAAM,WAAK,OAAO;AAC5B,UAAM,OAAO,IAAI,sBAAK,IAAI;AAC1B,SAAK,SAAS,IAAI,KAAK,IAAI,IAAI;AAC/B,WAAO;AAAA,EACR;AACD;AAEO,MAAM,qBAAqB,eAAqB;AAAA,EAC7C,MAAM;AAAE,WAAO,eAAI,IAAI,2BAAU,KAAK,EAAE,MAAM,IAAI;AAAA,EAAG;AAAA,EAC9D,aAAa;AAAE,mBAAI,IAAI,2BAAU,KAAK,EAAE,MAAM,WAAW;AAAA,EAAM;AAAA,EAC/D,SAAS,MAAiB,KAAS;AAClC,QAAI,CAAC,KAAK;AAAM,WAAK,OAAO;AAC5B,UAAM,OAAO,IAAI,0BAAS,IAAI;AAC9B,SAAK,SAAS,IAAI,KAAK,IAAI,IAAI;AAC/B,WAAO;AAAA,EACR;AACD;AAEO,MAAM,wBAAwB,eAAwB;AAAA,EACnD,MAAM;AAAE,WAAO,eAAI,IAAI,2BAAU,KAAK,EAAE,QAAQ,IAAI;AAAA,EAAG;AAAA,EAChE,aAAa;AAAE,mBAAI,IAAI,2BAAU,KAAK,EAAE,QAAQ,WAAW;AAAA,EAAM;AAAA,EACjE,SAAS,MAA0B;AAClC,UAAM,UAAU,IAAI,2BAAQ,IAAI;AAChC,SAAK,SAAS,IAAI,QAAQ,IAAI,OAAO;AACrC,WAAO;AAAA,EACR;AACD;", "names": [] }