{"_id":"@axiapps/gw2-data","_rev":"4-091873a43cf4352094593e19cafa9729","name":"@axiapps/gw2-data","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@axiapps/gw2-data","version":"0.1.0","keywords":["gw2","guild-wars-2","wiki","api","build-editor"],"license":"MIT","_id":"@axiapps/gw2-data@0.1.0","maintainers":[{"name":"mks.haro","email":"harasho017@gmail.com"}],"homepage":"https://github.com/darkharasho/axiforge#readme","bugs":{"url":"https://github.com/darkharasho/axiforge/issues"},"dist":{"shasum":"f6fa7b2f6c9e0f0019c6e74977dc1350a595fd96","tarball":"https://registry.npmjs.org/@axiapps/gw2-data/-/gw2-data-0.1.0.tgz","fileCount":56,"integrity":"sha512-gpY2ZGMUBYoalbeiXV6QZFKoNV+KEoDu/ZsJpDNU8/vEP04L7mKGO5XhreLkkFeMZzfgAB6EEvI6s/Fo7oHCRQ==","signatures":[{"sig":"MEUCIQDlp/WG/0oXaGjHgiAjaCe1GtibT34eWJFwRl/vpdY1qwIgXL2NKPitrLFNV8WubYxjxRfSIoncb3pTtDRR+E2GDaE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379729},"jest":{"testMatch":["**/packages/gw2-data/tests/**/*.test.js"],"clearMocks":true,"testTimeout":15000,"testEnvironment":"node"},"main":"src/index.js","exports":{".":"./src/index.js","./api":"./src/api/client.js","./wiki":"./src/wiki/client.js","./facts":"./src/facts/merge.js","./engine":"./src/engine/index.js"},"gitHead":"74f352ede125b7813bcee5e898182af52a31caf9","scripts":{"test":"jest"},"_npmUser":{"name":"mks.haro","email":"harasho017@gmail.com"},"repository":{"url":"git+https://github.com/darkharasho/axiforge.git","type":"git","directory":"packages/gw2-data"},"_npmVersion":"11.11.0","description":"GW2 data library — wiki-sourced facts, GW2 API structural data, and stat computation","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0"},"_npmOperationalInternal":{"tmp":"tmp/gw2-data_0.1.0_1775875627430_0.1845543654615096","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@axiapps/gw2-data","version":"0.1.1","keywords":["gw2","guild-wars-2","wiki","api","build-editor"],"license":"MIT","_id":"@axiapps/gw2-data@0.1.1","maintainers":[{"name":"mks.haro","email":"harasho017@gmail.com"}],"homepage":"https://github.com/darkharasho/axiforge#readme","bugs":{"url":"https://github.com/darkharasho/axiforge/issues"},"dist":{"shasum":"1c82eac67ffedcd60a43662150a77edae61735e2","tarball":"https://registry.npmjs.org/@axiapps/gw2-data/-/gw2-data-0.1.1.tgz","fileCount":57,"integrity":"sha512-kMSODWv5cfm+g7ZFoyHM8elp5a984u9/CnFcvFsaSpigs8gYqEghiwoiAuSIHi6akaDkpvttypbh0XMxzz0ekA==","signatures":[{"sig":"MEUCIQC4r+o/Kf6b5fOEPJowzaDmO5KslsD4z2wxRdvo40SLEgIgZDD9IZc+HydSP8eCc0e4GhnBAcHI7WoXrBUphiBr6eo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":384096},"jest":{"testMatch":["**/packages/gw2-data/tests/**/*.test.js"],"clearMocks":true,"testTimeout":15000,"testEnvironment":"node"},"main":"src/index.js","exports":{".":"./src/index.js","./api":"./src/api/client.js","./wiki":"./src/wiki/client.js","./facts":"./src/facts/merge.js","./engine":"./src/engine/index.js"},"gitHead":"6f047851d02ce4126271ca71a70a8aba2b7218bb","scripts":{"test":"jest"},"_npmUser":{"name":"mks.haro","email":"harasho017@gmail.com"},"repository":{"url":"git+https://github.com/darkharasho/axiforge.git","type":"git","directory":"packages/gw2-data"},"_npmVersion":"11.11.0","description":"GW2 data library — wiki-sourced facts, GW2 API structural data, and stat computation","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0"},"_npmOperationalInternal":{"tmp":"tmp/gw2-data_0.1.1_1775875941388_0.5062225084944765","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@axiapps/gw2-data","version":"0.1.2","keywords":["gw2","guild-wars-2","wiki","api","build-editor"],"license":"MIT","_id":"@axiapps/gw2-data@0.1.2","maintainers":[{"name":"mks.haro","email":"harasho017@gmail.com"}],"homepage":"https://github.com/darkharasho/axiforge#readme","bugs":{"url":"https://github.com/darkharasho/axiforge/issues"},"dist":{"shasum":"8db9c8ded595829fd75f70b5b8ae8cfb220cf76e","tarball":"https://registry.npmjs.org/@axiapps/gw2-data/-/gw2-data-0.1.2.tgz","fileCount":23,"integrity":"sha512-v9sgjV7y/XmjKMj2lxwgnTMkG/BsH/EmP3066RKJYaYxFT//3diw+L70fhyjBSUkrcGBqRbhZ3WDJn7eWDw4RA==","signatures":[{"sig":"MEUCIQDC30+N/k1PtZPQNpD2GafJMQMpix9dQGJ2cSp8e4tnEgIgJASkdpDOK99MSaYfIGKrF+AsE9kc3Mvzegr1FABuX/k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132130},"jest":{"testMatch":["**/packages/gw2-data/tests/**/*.test.js"],"clearMocks":true,"testTimeout":15000,"testEnvironment":"node"},"main":"src/index.js","exports":{".":"./src/index.js","./api":"./src/api/client.js","./wiki":"./src/wiki/client.js","./facts":"./src/facts/merge.js","./engine":"./src/engine/index.js"},"gitHead":"db2e8968af126c846f81a676cf90be1bb476ea5e","scripts":{"test":"jest"},"_npmUser":{"name":"mks.haro","email":"harasho017@gmail.com"},"repository":{"url":"git+https://github.com/darkharasho/axiforge.git","type":"git","directory":"packages/gw2-data"},"_npmVersion":"11.11.0","description":"GW2 data library — wiki-sourced facts, GW2 API structural data, and stat computation","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0"},"_npmOperationalInternal":{"tmp":"tmp/gw2-data_0.1.2_1781344035014_0.8992609330062857","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@axiapps/gw2-data","version":"0.1.3","description":"GW2 data library — wiki-sourced facts, GW2 API structural data, and stat computation","main":"src/index.js","exports":{".":"./src/index.js","./wiki":"./src/wiki/client.js","./wiki/resolver":"./src/wiki/resolver.js","./api":"./src/api/client.js","./facts":"./src/facts/merge.js","./engine":"./src/engine/index.js"},"scripts":{"test":"jest"},"jest":{"testEnvironment":"node","testMatch":["**/packages/gw2-data/tests/**/*.test.js"],"clearMocks":true,"testTimeout":15000},"publishConfig":{"access":"public"},"license":"MIT","keywords":["gw2","guild-wars-2","wiki","api","build-editor"],"repository":{"type":"git","url":"git+https://github.com/darkharasho/axiforge.git","directory":"packages/gw2-data"},"devDependencies":{"jest":"^30.3.0"},"gitHead":"e055897a64270768d5197e22b86087c48fbff8f9","_id":"@axiapps/gw2-data@0.1.3","bugs":{"url":"https://github.com/darkharasho/axiforge/issues"},"homepage":"https://github.com/darkharasho/axiforge#readme","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-rAzPFyBZ2rl68eZhyGxn+0mJW4bt5czOvJp/VgEI7U7RJck87mRSAWAXKJ7JPvfPw6VQ1tIV63NIHuumtyj1jg==","shasum":"de9d50f85bc35d9019036a8193f3ca32314d82d1","tarball":"https://registry.npmjs.org/@axiapps/gw2-data/-/gw2-data-0.1.3.tgz","fileCount":23,"unpackedSize":132359,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGlSFiDnhAzT3QIz8UOWfYZYTMIkT4sJmwfva8ggGAw/AiEA4R3IypSC0R24eHUBKg9mjGKoiN6p/S8nmz70y9CgKPk="}]},"_npmUser":{"name":"mks.haro","email":"harasho017@gmail.com"},"directories":{},"maintainers":[{"name":"mks.haro","email":"harasho017@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gw2-data_0.1.3_1781471777645_0.2510401581237094"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-11T02:47:07.345Z","modified":"2026-06-14T21:16:17.938Z","0.1.0":"2026-04-11T02:47:07.607Z","0.1.1":"2026-04-11T02:52:21.543Z","0.1.2":"2026-06-13T09:47:15.181Z","0.1.3":"2026-06-14T21:16:17.784Z"},"bugs":{"url":"https://github.com/darkharasho/axiforge/issues"},"license":"MIT","homepage":"https://github.com/darkharasho/axiforge#readme","keywords":["gw2","guild-wars-2","wiki","api","build-editor"],"repository":{"type":"git","url":"git+https://github.com/darkharasho/axiforge.git","directory":"packages/gw2-data"},"description":"GW2 data library — wiki-sourced facts, GW2 API structural data, and stat computation","maintainers":[{"name":"mks.haro","email":"harasho017@gmail.com"}],"readme":"# @axiapps/gw2-data\n\nData library for Guild Wars 2 — wiki scraping, GW2 API access, and stat computation engine. Used by [AxiForge](https://axiforge.com).\n\n## Installation\n\n```bash\nnpm install @axiapps/gw2-data\n```\n\n## Modules\n\nThe package exposes four subpath imports:\n\n| Import | Description |\n|--------|-------------|\n| `@axiapps/gw2-data/wiki` | Wiki scraping and wikitext parsing |\n| `@axiapps/gw2-data/api` | GW2 API client with batching and retries |\n| `@axiapps/gw2-data/facts` | Fact merging for PvE/WvW balance splits |\n| `@axiapps/gw2-data/engine` | Stat computation, tooltips, boon analysis |\n\n## Wiki Client\n\nFetch and parse skill/trait data from the GW2 Wiki with built-in caching and rate limiting.\n\n```js\nconst { WikiClient } = require(\"@axiapps/gw2-data/wiki\");\n\nconst wiki = new WikiClient();\n\n// Fetch wikitext for a single page\nconst wikitext = await wiki.getWikitext(\"Fireball\");\n\n// Batch-fetch multiple pages (up to 50 per request)\nconst pages = await wiki.getWikitextBatch([\"Fireball\", \"Meteor Shower\", \"Lava Font\"]);\n\n// Parse skill/trait facts from wikitext\nconst { facts, hasPveOnly, splitGrouping } = wiki.parseFacts(wikitext);\n\n// Search for pages by prefix\nconst matches = await wiki.prefixSearch(\"Fire\", 10);\n\n// Invalidate cache for recently changed pages\nconst changed = await wiki.refresh();\n```\n\n### Constructor Options\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `cache` | `MemoryCache` | Cache adapter (MemoryCache or DiskCache) |\n| `fetch` | `globalThis.fetch` | Fetch implementation |\n| `wikiApiRoot` | `https://wiki.guildwars2.com/api.php` | Wiki API endpoint |\n| `cacheTTL` | 4 hours | Cache TTL in milliseconds |\n\n## GW2 API Client\n\nFetch data from the official GW2 API with automatic chunking, retries, and 429 handling.\n\n```js\nconst { Gw2ApiClient } = require(\"@axiapps/gw2-data/api\");\n\nconst api = new Gw2ApiClient();\n\n// Fetch skills by ID (automatically chunked into 180-ID batches)\nconst skills = await api.fetchByIds(\"/v2/skills\", [5489, 5536, 5501]);\n\n// Fetch with caching\nconst data = await api.fetchCached(\"my-key\", \"https://api.guildwars2.com/v2/skills/5489\", 3600000);\n```\n\n### Constructor Options\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `cache` | `MemoryCache` | Cache adapter |\n| `fetch` | `globalThis.fetch` | Fetch implementation |\n| `apiRoot` | `https://api.guildwars2.com` | API root URL |\n| `lang` | `\"en\"` | Language code |\n\n## Fact Merging\n\nMerge base (PvE) facts with WvW/PvP split facts, marking which values changed.\n\n```js\nconst { mergeFacts } = require(\"@axiapps/gw2-data/facts\");\n\nconst merged = mergeFacts(baseFacts, splitFacts);\n// Changed facts have _splitFact: true\n// New facts (WvW-only) have _newFact: true\n```\n\n## Engine\n\nCompute final build stats, skill tooltips, boon uptime, and combo interactions.\n\n```js\nconst {\n  computeAttributes,\n  collectModifiers,\n  computeTooltip,\n  analyzeBoons,\n  analyzeCombos,\n  STAT_COMBOS_BY_LABEL,\n} = require(\"@axiapps/gw2-data/engine\");\n\n// Compute final attributes for a build\nconst attrs = computeAttributes({\n  profession: \"Elementalist\",\n  specializations: [...],\n  equipment: { statPackage: \"Berserker\" },\n}, catalogs);\n\n// Collect all stat modifiers from traits, sigils, etc.\nconst modifiers = collectModifiers(ctx, catalogs, overrides);\n\n// Compute a skill tooltip with modifiers applied\nconst tooltip = computeTooltip(attrs, skill, \"Staff\", modifiers);\n\n// Analyze boon output across a skill set\nconst boons = analyzeBoons(skills, traits, overrides);\n\n// Detect combo field/finisher interactions\nconst combos = analyzeCombos(skills, traits);\n```\n\n### StatEngine Class\n\nFor repeated computations, use the class to avoid re-loading overrides:\n\n```js\nconst { StatEngine } = require(\"@axiapps/gw2-data/engine\");\n\nconst engine = new StatEngine(catalogs);\nconst attrs = engine.computeAttributes(ctx);\nconst tooltip = engine.computeTooltip(ctx, skill, \"Sword\");\nconst boons = engine.analyzeBoons(skills, traits);\n```\n\n## Caching\n\nBoth clients accept a cache adapter. Two are included:\n\n```js\nconst { MemoryCache, DiskCache } = require(\"@axiapps/gw2-data/wiki\");\n\n// In-memory (default)\nconst wiki = new WikiClient({ cache: new MemoryCache() });\n\n// Disk-backed (persists across restarts)\nconst wiki = new WikiClient({ cache: new DiskCache(\"/tmp/gw2-wiki-cache\") });\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}