@elite-dangerous-almanac/core 0.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/LICENSE +48 -0
  2. package/PROVENANCE/SNAPSHOTS.md +36 -0
  3. package/PROVENANCE/astro/SOURCES.md +94 -0
  4. package/PROVENANCE/commodities/SOURCES.md +41 -0
  5. package/PROVENANCE/materials/SOURCES.md +69 -0
  6. package/PROVENANCE/ships/SOURCES.md +1580 -0
  7. package/README.md +148 -0
  8. package/THIRD_PARTY_NOTICES.md +202 -0
  9. package/dist/astro/codex-region-lookup.d.ts +169 -0
  10. package/dist/astro/codex-region-lookup.js +1 -0
  11. package/dist/astro/codex-region-lookup.js.map +1 -0
  12. package/dist/astro/codex-region.d.ts +149 -0
  13. package/dist/astro/codex-region.js +1 -0
  14. package/dist/astro/codex-region.js.map +1 -0
  15. package/dist/astro/galaxy-grid.d.ts +83 -0
  16. package/dist/astro/galaxy-grid.js +1 -0
  17. package/dist/astro/galaxy-grid.js.map +1 -0
  18. package/dist/astro/hand-authored-regions.d.ts +121 -0
  19. package/dist/astro/hand-authored-regions.js +1 -0
  20. package/dist/astro/hand-authored-regions.js.map +1 -0
  21. package/dist/astro/index.d.ts +140 -0
  22. package/dist/astro/index.js +1 -0
  23. package/dist/astro/index.js.map +1 -0
  24. package/dist/astro/mass-code.d.ts +55 -0
  25. package/dist/astro/mass-code.js +1 -0
  26. package/dist/astro/mass-code.js.map +1 -0
  27. package/dist/astro/naming-region-origins.d.ts +4 -0
  28. package/dist/astro/naming-region-origins.js +1 -0
  29. package/dist/astro/naming-region-origins.js.map +1 -0
  30. package/dist/astro/nebulae-all.d.ts +40 -0
  31. package/dist/astro/nebulae-all.js +1 -0
  32. package/dist/astro/nebulae-all.js.map +1 -0
  33. package/dist/astro/nebulae-planetary.d.ts +37 -0
  34. package/dist/astro/nebulae-planetary.js +1 -0
  35. package/dist/astro/nebulae-planetary.js.map +1 -0
  36. package/dist/astro/nebulae-procgen.d.ts +36 -0
  37. package/dist/astro/nebulae-procgen.js +1 -0
  38. package/dist/astro/nebulae-procgen.js.map +1 -0
  39. package/dist/astro/nebulae-real.d.ts +37 -0
  40. package/dist/astro/nebulae-real.js +1 -0
  41. package/dist/astro/nebulae-real.js.map +1 -0
  42. package/dist/astro/nebulae.d.ts +169 -0
  43. package/dist/astro/nebulae.js +1 -0
  44. package/dist/astro/nebulae.js.map +1 -0
  45. package/dist/astro/permit-locked-regions.d.ts +54 -0
  46. package/dist/astro/permit-locked-regions.js +1 -0
  47. package/dist/astro/permit-locked-regions.js.map +1 -0
  48. package/dist/astro/permit-locked-systems.d.ts +74 -0
  49. package/dist/astro/permit-locked-systems.js +1 -0
  50. package/dist/astro/permit-locked-systems.js.map +1 -0
  51. package/dist/astro/permit-locks.d.ts +130 -0
  52. package/dist/astro/permit-locks.js +1 -0
  53. package/dist/astro/permit-locks.js.map +1 -0
  54. package/dist/astro/procedural-system.d.ts +228 -0
  55. package/dist/astro/procedural-system.js +1 -0
  56. package/dist/astro/procedural-system.js.map +1 -0
  57. package/dist/astro/sector-name.d.ts +87 -0
  58. package/dist/astro/sector-name.js +1 -0
  59. package/dist/astro/sector-name.js.map +1 -0
  60. package/dist/astro/system-address-input.d.ts +76 -0
  61. package/dist/astro/system-address-input.js +1 -0
  62. package/dist/astro/system-address-input.js.map +1 -0
  63. package/dist/astro/system-address.d.ts +4 -0
  64. package/dist/astro/system-address.js +1 -0
  65. package/dist/astro/system-address.js.map +1 -0
  66. package/dist/astro/system-name.d.ts +187 -0
  67. package/dist/astro/system-name.js +1 -0
  68. package/dist/astro/system-name.js.map +1 -0
  69. package/dist/chunk-2FHHMYDC.js +1 -0
  70. package/dist/chunk-2FHHMYDC.js.map +1 -0
  71. package/dist/chunk-462OKHXR.js +1 -0
  72. package/dist/chunk-462OKHXR.js.map +1 -0
  73. package/dist/chunk-5H74FKY7.js +1 -0
  74. package/dist/chunk-5H74FKY7.js.map +1 -0
  75. package/dist/chunk-6LUEKHO5.js +1 -0
  76. package/dist/chunk-6LUEKHO5.js.map +1 -0
  77. package/dist/chunk-76XKY2Y2.js +1 -0
  78. package/dist/chunk-76XKY2Y2.js.map +1 -0
  79. package/dist/chunk-7EE5VIHR.js +1 -0
  80. package/dist/chunk-7EE5VIHR.js.map +1 -0
  81. package/dist/chunk-A3NM7SAJ.js +1 -0
  82. package/dist/chunk-A3NM7SAJ.js.map +1 -0
  83. package/dist/chunk-A6XPYSVR.js +1 -0
  84. package/dist/chunk-A6XPYSVR.js.map +1 -0
  85. package/dist/chunk-AA3K5XUE.js +1 -0
  86. package/dist/chunk-AA3K5XUE.js.map +1 -0
  87. package/dist/chunk-AVZI6VKA.js +1 -0
  88. package/dist/chunk-AVZI6VKA.js.map +1 -0
  89. package/dist/chunk-B5TT26XE.js +1 -0
  90. package/dist/chunk-B5TT26XE.js.map +1 -0
  91. package/dist/chunk-BNILZXJD.js +1 -0
  92. package/dist/chunk-BNILZXJD.js.map +1 -0
  93. package/dist/chunk-BRDQUJXV.js +1 -0
  94. package/dist/chunk-BRDQUJXV.js.map +1 -0
  95. package/dist/chunk-BTPV5CIF.js +1 -0
  96. package/dist/chunk-BTPV5CIF.js.map +1 -0
  97. package/dist/chunk-CI3ACMRA.js +1 -0
  98. package/dist/chunk-CI3ACMRA.js.map +1 -0
  99. package/dist/chunk-COE5ADYJ.js +1 -0
  100. package/dist/chunk-COE5ADYJ.js.map +1 -0
  101. package/dist/chunk-CWAX3BSH.js +1 -0
  102. package/dist/chunk-CWAX3BSH.js.map +1 -0
  103. package/dist/chunk-DACZE3HX.js +1 -0
  104. package/dist/chunk-DACZE3HX.js.map +1 -0
  105. package/dist/chunk-DURKO7JU.js +1 -0
  106. package/dist/chunk-DURKO7JU.js.map +1 -0
  107. package/dist/chunk-E45EDCYH.js +1 -0
  108. package/dist/chunk-E45EDCYH.js.map +1 -0
  109. package/dist/chunk-ELIZXUMI.js +1 -0
  110. package/dist/chunk-ELIZXUMI.js.map +1 -0
  111. package/dist/chunk-EYGVDJ2I.js +1 -0
  112. package/dist/chunk-EYGVDJ2I.js.map +1 -0
  113. package/dist/chunk-FGXWVFN6.js +1 -0
  114. package/dist/chunk-FGXWVFN6.js.map +1 -0
  115. package/dist/chunk-GJCB2Z72.js +1 -0
  116. package/dist/chunk-GJCB2Z72.js.map +1 -0
  117. package/dist/chunk-HI7FCS3G.js +1 -0
  118. package/dist/chunk-HI7FCS3G.js.map +1 -0
  119. package/dist/chunk-HKXXFIRI.js +1 -0
  120. package/dist/chunk-HKXXFIRI.js.map +1 -0
  121. package/dist/chunk-HTB52N6S.js +1 -0
  122. package/dist/chunk-HTB52N6S.js.map +1 -0
  123. package/dist/chunk-I7PIDRMU.js +1 -0
  124. package/dist/chunk-I7PIDRMU.js.map +1 -0
  125. package/dist/chunk-IH4NXKVW.js +1 -0
  126. package/dist/chunk-IH4NXKVW.js.map +1 -0
  127. package/dist/chunk-INNFH37U.js +1 -0
  128. package/dist/chunk-INNFH37U.js.map +1 -0
  129. package/dist/chunk-J2PNZQY4.js +1 -0
  130. package/dist/chunk-J2PNZQY4.js.map +1 -0
  131. package/dist/chunk-JQG4C67D.js +1 -0
  132. package/dist/chunk-JQG4C67D.js.map +1 -0
  133. package/dist/chunk-JTQVWIGL.js +1 -0
  134. package/dist/chunk-JTQVWIGL.js.map +1 -0
  135. package/dist/chunk-JWJ7RSZC.js +1 -0
  136. package/dist/chunk-JWJ7RSZC.js.map +1 -0
  137. package/dist/chunk-K3AMV27L.js +1 -0
  138. package/dist/chunk-K3AMV27L.js.map +1 -0
  139. package/dist/chunk-K7F6WC4T.js +1 -0
  140. package/dist/chunk-K7F6WC4T.js.map +1 -0
  141. package/dist/chunk-K7L7SMIR.js +1 -0
  142. package/dist/chunk-K7L7SMIR.js.map +1 -0
  143. package/dist/chunk-KG4EWDZZ.js +1 -0
  144. package/dist/chunk-KG4EWDZZ.js.map +1 -0
  145. package/dist/chunk-KMFUCORC.js +1 -0
  146. package/dist/chunk-KMFUCORC.js.map +1 -0
  147. package/dist/chunk-L2ZZXEZM.js +1 -0
  148. package/dist/chunk-L2ZZXEZM.js.map +1 -0
  149. package/dist/chunk-L747RVPO.js +1 -0
  150. package/dist/chunk-L747RVPO.js.map +1 -0
  151. package/dist/chunk-MFV4VZFP.js +1 -0
  152. package/dist/chunk-MFV4VZFP.js.map +1 -0
  153. package/dist/chunk-NWPK6Q3S.js +1 -0
  154. package/dist/chunk-NWPK6Q3S.js.map +1 -0
  155. package/dist/chunk-PMJG7PHU.js +1 -0
  156. package/dist/chunk-PMJG7PHU.js.map +1 -0
  157. package/dist/chunk-PP2VSA6M.js +1 -0
  158. package/dist/chunk-PP2VSA6M.js.map +1 -0
  159. package/dist/chunk-Q22LXT53.js +1 -0
  160. package/dist/chunk-Q22LXT53.js.map +1 -0
  161. package/dist/chunk-Q5MR36RW.js +1 -0
  162. package/dist/chunk-Q5MR36RW.js.map +1 -0
  163. package/dist/chunk-Q5XOGATC.js +1 -0
  164. package/dist/chunk-Q5XOGATC.js.map +1 -0
  165. package/dist/chunk-QTDBO7R2.js +1 -0
  166. package/dist/chunk-QTDBO7R2.js.map +1 -0
  167. package/dist/chunk-R4OD62HV.js +1 -0
  168. package/dist/chunk-R4OD62HV.js.map +1 -0
  169. package/dist/chunk-RD73TFGS.js +1 -0
  170. package/dist/chunk-RD73TFGS.js.map +1 -0
  171. package/dist/chunk-RIT6MOO5.js +1 -0
  172. package/dist/chunk-RIT6MOO5.js.map +1 -0
  173. package/dist/chunk-RVSXKQHE.js +1 -0
  174. package/dist/chunk-RVSXKQHE.js.map +1 -0
  175. package/dist/chunk-S4DBNX2B.js +1 -0
  176. package/dist/chunk-S4DBNX2B.js.map +1 -0
  177. package/dist/chunk-S4UWCHL6.js +1 -0
  178. package/dist/chunk-S4UWCHL6.js.map +1 -0
  179. package/dist/chunk-SQS7672E.js +1 -0
  180. package/dist/chunk-SQS7672E.js.map +1 -0
  181. package/dist/chunk-TLNHETGC.js +1 -0
  182. package/dist/chunk-TLNHETGC.js.map +1 -0
  183. package/dist/chunk-U6TMCYA6.js +1 -0
  184. package/dist/chunk-U6TMCYA6.js.map +1 -0
  185. package/dist/chunk-V4C6FIE2.js +1 -0
  186. package/dist/chunk-V4C6FIE2.js.map +1 -0
  187. package/dist/chunk-VXVUEF5U.js +1 -0
  188. package/dist/chunk-VXVUEF5U.js.map +1 -0
  189. package/dist/chunk-VZXL5KBR.js +1 -0
  190. package/dist/chunk-VZXL5KBR.js.map +1 -0
  191. package/dist/chunk-VZZ2XIRE.js +1 -0
  192. package/dist/chunk-VZZ2XIRE.js.map +1 -0
  193. package/dist/chunk-WV5YM7H5.js +1 -0
  194. package/dist/chunk-WV5YM7H5.js.map +1 -0
  195. package/dist/chunk-Y2MUIE5W.js +1 -0
  196. package/dist/chunk-Y2MUIE5W.js.map +1 -0
  197. package/dist/chunk-Z43DN4PY.js +1 -0
  198. package/dist/chunk-Z43DN4PY.js.map +1 -0
  199. package/dist/chunk-Z4GTTB7I.js +1 -0
  200. package/dist/chunk-Z4GTTB7I.js.map +1 -0
  201. package/dist/chunk-Z4OUB4SJ.js +1 -0
  202. package/dist/chunk-Z4OUB4SJ.js.map +1 -0
  203. package/dist/chunk-ZFT56QFR.js +1 -0
  204. package/dist/chunk-ZFT56QFR.js.map +1 -0
  205. package/dist/chunk-ZNCXENNB.js +1 -0
  206. package/dist/chunk-ZNCXENNB.js.map +1 -0
  207. package/dist/commodities/commodities-all.d.ts +25 -0
  208. package/dist/commodities/commodities-all.js +1 -0
  209. package/dist/commodities/commodities-all.js.map +1 -0
  210. package/dist/commodities/commodities-rare.d.ts +34 -0
  211. package/dist/commodities/commodities-rare.js +1 -0
  212. package/dist/commodities/commodities-rare.js.map +1 -0
  213. package/dist/commodities/commodities-standard.d.ts +34 -0
  214. package/dist/commodities/commodities-standard.js +1 -0
  215. package/dist/commodities/commodities-standard.js.map +1 -0
  216. package/dist/commodities/commodities.d.ts +142 -0
  217. package/dist/commodities/commodities.js +1 -0
  218. package/dist/commodities/commodities.js.map +1 -0
  219. package/dist/commodities/index.d.ts +30 -0
  220. package/dist/commodities/index.js +1 -0
  221. package/dist/commodities/index.js.map +1 -0
  222. package/dist/galactic-position-shLkm4Qg.d.ts +30 -0
  223. package/dist/materials/index.d.ts +47 -0
  224. package/dist/materials/index.js +1 -0
  225. package/dist/materials/index.js.map +1 -0
  226. package/dist/materials/materials-all.d.ts +26 -0
  227. package/dist/materials/materials-all.js +1 -0
  228. package/dist/materials/materials-all.js.map +1 -0
  229. package/dist/materials/materials-encoded.d.ts +31 -0
  230. package/dist/materials/materials-encoded.js +1 -0
  231. package/dist/materials/materials-encoded.js.map +1 -0
  232. package/dist/materials/materials-manufactured.d.ts +32 -0
  233. package/dist/materials/materials-manufactured.js +1 -0
  234. package/dist/materials/materials-manufactured.js.map +1 -0
  235. package/dist/materials/materials-raw.d.ts +31 -0
  236. package/dist/materials/materials-raw.js +1 -0
  237. package/dist/materials/materials-raw.js.map +1 -0
  238. package/dist/materials/materials.d.ts +277 -0
  239. package/dist/materials/materials.js +1 -0
  240. package/dist/materials/materials.js.map +1 -0
  241. package/dist/materials/micro-resources-all.d.ts +28 -0
  242. package/dist/materials/micro-resources-all.js +1 -0
  243. package/dist/materials/micro-resources-all.js.map +1 -0
  244. package/dist/materials/micro-resources-component.d.ts +29 -0
  245. package/dist/materials/micro-resources-component.js +1 -0
  246. package/dist/materials/micro-resources-component.js.map +1 -0
  247. package/dist/materials/micro-resources-consumable.d.ts +29 -0
  248. package/dist/materials/micro-resources-consumable.js +1 -0
  249. package/dist/materials/micro-resources-consumable.js.map +1 -0
  250. package/dist/materials/micro-resources-data.d.ts +29 -0
  251. package/dist/materials/micro-resources-data.js +1 -0
  252. package/dist/materials/micro-resources-data.js.map +1 -0
  253. package/dist/materials/micro-resources-item.d.ts +29 -0
  254. package/dist/materials/micro-resources-item.js +1 -0
  255. package/dist/materials/micro-resources-item.js.map +1 -0
  256. package/dist/materials/micro-resources.d.ts +136 -0
  257. package/dist/materials/micro-resources.js +1 -0
  258. package/dist/materials/micro-resources.js.map +1 -0
  259. package/dist/ship-loadout-Ba63RDf-.d.ts +1059 -0
  260. package/dist/ships/ammunition.d.ts +107 -0
  261. package/dist/ships/ammunition.js +1 -0
  262. package/dist/ships/ammunition.js.map +1 -0
  263. package/dist/ships/armour.d.ts +134 -0
  264. package/dist/ships/armour.js +1 -0
  265. package/dist/ships/armour.js.map +1 -0
  266. package/dist/ships/blueprint-costs.d.ts +128 -0
  267. package/dist/ships/blueprint-costs.js +1 -0
  268. package/dist/ships/blueprint-costs.js.map +1 -0
  269. package/dist/ships/blueprint-journal.d.ts +116 -0
  270. package/dist/ships/blueprint-journal.js +1 -0
  271. package/dist/ships/blueprint-journal.js.map +1 -0
  272. package/dist/ships/blueprints.d.ts +103 -0
  273. package/dist/ships/blueprints.js +1 -0
  274. package/dist/ships/blueprints.js.map +1 -0
  275. package/dist/ships/decorative-modifications.d.ts +176 -0
  276. package/dist/ships/decorative-modifications.js +1 -0
  277. package/dist/ships/decorative-modifications.js.map +1 -0
  278. package/dist/ships/engineering-options.d.ts +246 -0
  279. package/dist/ships/engineering-options.js +1 -0
  280. package/dist/ships/engineering-options.js.map +1 -0
  281. package/dist/ships/engineering.d.ts +229 -0
  282. package/dist/ships/engineering.js +1 -0
  283. package/dist/ships/engineering.js.map +1 -0
  284. package/dist/ships/experimental-effect-costs.d.ts +56 -0
  285. package/dist/ships/experimental-effect-costs.js +1 -0
  286. package/dist/ships/experimental-effect-costs.js.map +1 -0
  287. package/dist/ships/experimental-effects.d.ts +62 -0
  288. package/dist/ships/experimental-effects.js +1 -0
  289. package/dist/ships/experimental-effects.js.map +1 -0
  290. package/dist/ships/index.d.ts +205 -0
  291. package/dist/ships/index.js +1 -0
  292. package/dist/ships/index.js.map +1 -0
  293. package/dist/ships/jump-range.d.ts +115 -0
  294. package/dist/ships/jump-range.js +1 -0
  295. package/dist/ships/jump-range.js.map +1 -0
  296. package/dist/ships/loadout-calculations.d.ts +109 -0
  297. package/dist/ships/loadout-calculations.js +1 -0
  298. package/dist/ships/loadout-calculations.js.map +1 -0
  299. package/dist/ships/loadout-validation.d.ts +80 -0
  300. package/dist/ships/loadout-validation.js +1 -0
  301. package/dist/ships/loadout-validation.js.map +1 -0
  302. package/dist/ships/module-capabilities.d.ts +205 -0
  303. package/dist/ships/module-capabilities.js +1 -0
  304. package/dist/ships/module-capabilities.js.map +1 -0
  305. package/dist/ships/modules-all.d.ts +43 -0
  306. package/dist/ships/modules-all.js +1 -0
  307. package/dist/ships/modules-all.js.map +1 -0
  308. package/dist/ships/modules-core.d.ts +40 -0
  309. package/dist/ships/modules-core.js +1 -0
  310. package/dist/ships/modules-core.js.map +1 -0
  311. package/dist/ships/modules-hardpoint.d.ts +42 -0
  312. package/dist/ships/modules-hardpoint.js +1 -0
  313. package/dist/ships/modules-hardpoint.js.map +1 -0
  314. package/dist/ships/modules-internal.d.ts +40 -0
  315. package/dist/ships/modules-internal.js +1 -0
  316. package/dist/ships/modules-internal.js.map +1 -0
  317. package/dist/ships/modules-utility.d.ts +40 -0
  318. package/dist/ships/modules-utility.js +1 -0
  319. package/dist/ships/modules-utility.js.map +1 -0
  320. package/dist/ships/modules.d.ts +755 -0
  321. package/dist/ships/modules.js +1 -0
  322. package/dist/ships/modules.js.map +1 -0
  323. package/dist/ships/power.d.ts +168 -0
  324. package/dist/ships/power.js +1 -0
  325. package/dist/ships/power.js.map +1 -0
  326. package/dist/ships/pre-engineered-stats.d.ts +147 -0
  327. package/dist/ships/pre-engineered-stats.js +1 -0
  328. package/dist/ships/pre-engineered-stats.js.map +1 -0
  329. package/dist/ships/pre-engineered.d.ts +215 -0
  330. package/dist/ships/pre-engineered.js +1 -0
  331. package/dist/ships/pre-engineered.js.map +1 -0
  332. package/dist/ships/resistances.d.ts +208 -0
  333. package/dist/ships/resistances.js +1 -0
  334. package/dist/ships/resistances.js.map +1 -0
  335. package/dist/ships/shields.d.ts +221 -0
  336. package/dist/ships/shields.js +1 -0
  337. package/dist/ships/shields.js.map +1 -0
  338. package/dist/ships/ship-loadout.d.ts +16 -0
  339. package/dist/ships/ship-loadout.js +1 -0
  340. package/dist/ships/ship-loadout.js.map +1 -0
  341. package/dist/ships/ships.d.ts +191 -0
  342. package/dist/ships/ships.js +1 -0
  343. package/dist/ships/ships.js.map +1 -0
  344. package/dist/ships/slef.d.ts +318 -0
  345. package/dist/ships/slef.js +1 -0
  346. package/dist/ships/slef.js.map +1 -0
  347. package/dist/ships/slots.d.ts +418 -0
  348. package/dist/ships/slots.js +1 -0
  349. package/dist/ships/slots.js.map +1 -0
  350. package/dist/ships/source-purchase.d.ts +132 -0
  351. package/dist/ships/source-purchase.js +1 -0
  352. package/dist/ships/source-purchase.js.map +1 -0
  353. package/dist/ships/weapons.d.ts +380 -0
  354. package/dist/ships/weapons.js +1 -0
  355. package/dist/ships/weapons.js.map +1 -0
  356. package/dist/system-address-DYsN1qOT.d.ts +313 -0
  357. package/package.json +375 -0
@@ -0,0 +1 @@
1
+ export{getBulkheadsForShip,getModuleBySymbol,getModulesByName}from"../chunk-BRDQUJXV.js"; //# sourceMappingURL=modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * **Power** — what the plant makes, what the build draws, and which priority groups
3
+ * stay lit when it draws more than it makes.
4
+ *
5
+ * The model is the game's own. Every powered module draws its megawatts continuously,
6
+ * except the ones bolted to a hardpoint: weapons and most utility fittings only draw
7
+ * while the hardpoints are **deployed**, which is why a build has two totals. Each
8
+ * module sits in one of five **priority groups**; when the draw exceeds what the plant
9
+ * makes, the game keeps groups powered from group 1 down and shuts off the first group
10
+ * whose running total would go over, along with everything below it.
11
+ *
12
+ * This module is data-free: hand {@link powerBudget} the plant's capacity and a
13
+ * {@link PowerConsumer} per fitted module. {@link ShipLoadout.powerBudget} (in
14
+ * `./ship-loadout`) builds that list from a build for you, post-engineering.
15
+ *
16
+ * @remarks
17
+ * Reference implementation: EDCD/Coriolis, `src/app/shipyard/Ship.js`
18
+ * (`updatePowerUsed`, `powerUsageType`, `getSlotStatus`), commit
19
+ * `68c042ca6e3db62372cbbb2077cf972345511712`. The algorithm is ported as fact, not code;
20
+ * credit and licence terms are in [ATTRIBUTIONS.md](https://github.com/DarkSession/Elite-Dangerous-Almanac/blob/main/ATTRIBUTIONS.md).
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { powerBudget } from '@elite-dangerous-almanac/core/ships/power';
25
+ *
26
+ * powerBudget(20.4, [
27
+ * { draw: 0.45, priority: 1 }, // life support
28
+ * { draw: 5.72, priority: 1 }, // thrusters
29
+ * { draw: 2.48, priority: 3, deployedOnly: true }, // a beam laser
30
+ * ]).deployed; // -> 8.65
31
+ * ```
32
+ *
33
+ * @packageDocumentation
34
+ */
35
+ /** One fitted module's claim on the power plant. */
36
+ interface PowerConsumer {
37
+ /**
38
+ * Power draw, in megawatts, post-engineering. Required and finite non-negative
39
+ * unless {@link drawUnknown} is `true`; ignored when the draw is unknown.
40
+ */
41
+ readonly draw?: number;
42
+ /**
43
+ * Priority group, `1`–`5`, as the outfitting panel numbers them. Defaults to `1`.
44
+ *
45
+ * @remarks
46
+ * The journal's `Priority` field is **zero-based** — its `0` is this `1`. Values
47
+ * outside `1`–`5` are clamped into range.
48
+ */
49
+ readonly priority?: number;
50
+ /** Whether the module is switched on. Defaults to `true`; a module switched off draws nothing. */
51
+ readonly enabled?: boolean;
52
+ /**
53
+ * `true` for a module that only draws while the hardpoints are deployed — every
54
+ * weapon, and the utility fittings that are not
55
+ * {@link OutfittingModule.alwaysPowered | always powered}. Defaults to `false` for
56
+ * a known draw. An unresolved utility consumer may omit this along with `draw`,
57
+ * because whether that fitting is always powered cannot be determined either;
58
+ * {@link powerBudget} ignores both fields when {@link drawUnknown} is `true`.
59
+ */
60
+ readonly deployedOnly?: boolean;
61
+ /**
62
+ * `true` when the module's power draw cannot be determined. Its
63
+ * {@link PowerConsumer.draw | draw} is ignored and the consumer is named in
64
+ * {@link PowerBudget.unknownDraws} instead of being counted as `0`.
65
+ */
66
+ readonly drawUnknown?: boolean;
67
+ /**
68
+ * Optional label for the module — the journal slot key when
69
+ * {@link ShipLoadout.powerBudget} builds the consumer. Ignored by the maths, but it
70
+ * is how a consumer reported in {@link PowerBudget.unknownDraws} names itself.
71
+ */
72
+ readonly label?: string;
73
+ }
74
+ /** One priority group's share of the power budget. */
75
+ interface PowerBand {
76
+ /** The group number, `1`–`5`. */
77
+ readonly priority: number;
78
+ /** This group's own draw with hardpoints retracted, in megawatts. */
79
+ readonly retracted: number;
80
+ /**
81
+ * This group's own draw with hardpoints deployed, in megawatts — everything in
82
+ * {@link PowerBand.retracted} plus the weapons, which only draw once the hardpoints
83
+ * are out. Always ≥ `retracted`.
84
+ */
85
+ readonly deployed: number;
86
+ /** Draw of this group and every higher-priority one, retracted, in megawatts. */
87
+ readonly retractedTotal: number;
88
+ /** Draw of this group and every higher-priority one, deployed, in megawatts. */
89
+ readonly deployedTotal: number;
90
+ /** Whether this group stays powered with hardpoints retracted. */
91
+ readonly poweredRetracted: boolean;
92
+ /** Whether this group stays powered with hardpoints deployed. */
93
+ readonly poweredDeployed: boolean;
94
+ }
95
+ /** What a build's power plant makes and what the build asks of it. */
96
+ interface PowerBudget {
97
+ /** Power the plant generates, in megawatts, post-engineering. */
98
+ readonly available: number;
99
+ /** Total draw with hardpoints retracted, in megawatts. */
100
+ readonly retracted: number;
101
+ /** Total draw with hardpoints deployed, in megawatts — the figure that must fit. */
102
+ readonly deployed: number;
103
+ /** `available − deployed`, in megawatts. Negative means the build is over budget. */
104
+ readonly headroom: number;
105
+ /**
106
+ * `deployed / available`, as a fraction (`0.93` = 93% of the plant used).
107
+ * `Infinity` when a build draws power with no plant fitted, `0` when it draws none.
108
+ */
109
+ readonly utilisation: number;
110
+ /** Whether the whole build stays powered with hardpoints deployed. */
111
+ readonly withinBudget: boolean;
112
+ /**
113
+ * The five priority groups, `1` first. A group is powered when its running total —
114
+ * its own draw plus every higher-priority group's — fits in `available`.
115
+ */
116
+ readonly bands: readonly PowerBand[];
117
+ /**
118
+ * The **enabled** consumers whose draw is unknown ({@link PowerConsumer.drawUnknown}),
119
+ * handed straight back so a caller can name them — by
120
+ * {@link PowerConsumer.label | label}, which is the journal slot key when
121
+ * {@link ShipLoadout.powerBudget} built the list, or by identity for a
122
+ * hand-assembled one. A switched-off module is skipped before the flag is read, so
123
+ * it never appears here. Normally empty.
124
+ *
125
+ * **While it is not empty, every other figure here is a lower bound.** The unknown
126
+ * draws contribute nothing to `retracted`, `deployed` or the bands, so `headroom`
127
+ * and `utilisation` read too favourably and `withinBudget` and `poweredDeployed`
128
+ * answer only for the draws that are known. The budget is still reported rather
129
+ * than refused — the per-band detail is worth having, and one unknown module is not
130
+ * a reason to withhold the other twenty — but a caller showing it should say so.
131
+ */
132
+ readonly unknownDraws: readonly PowerConsumer[];
133
+ }
134
+ /**
135
+ * Work out a build's power budget: what the plant makes, what the modules draw
136
+ * retracted and deployed, and which priority groups survive.
137
+ *
138
+ * @param available - Power the plant generates, in megawatts (`0` when no plant is
139
+ * fitted — every group then reads as unpowered). Must be finite and non-negative.
140
+ * @param consumers - One entry per fitted module. Modules with `enabled: false` are
141
+ * skipped; the rest fall into their {@link PowerConsumer.priority | priority} group.
142
+ * @returns The {@link PowerBudget}.
143
+ * @throws {RangeError} If `available`, or an enabled known consumer's `draw`, is not a
144
+ * finite non-negative number. Disabled consumers and consumers marked `drawUnknown`
145
+ * are skipped before their placeholder draw is validated.
146
+ * @remarks
147
+ * A group that draws *exactly* the power available stays online, matching the game —
148
+ * only going over shuts anything down.
149
+ *
150
+ * A consumer flagged {@link PowerConsumer.drawUnknown} is left out of every total and
151
+ * listed in {@link PowerBudget.unknownDraws}, which makes the rest of the answer a
152
+ * lower bound rather than silently adding the module up as drawing nothing.
153
+ * @example
154
+ * ```ts
155
+ * import { powerBudget } from '@elite-dangerous-almanac/core/ships/power';
156
+ *
157
+ * const budget = powerBudget(4.8, [
158
+ * { draw: 3.0, priority: 1 },
159
+ * { draw: 2.0, priority: 4 }, // over budget: this group goes dark
160
+ * ]);
161
+ * budget.withinBudget; // -> false
162
+ * budget.bands[3]?.poweredDeployed; // -> false
163
+ * budget.bands[0]?.poweredDeployed; // -> true (priority 1 keeps its power)
164
+ * ```
165
+ */
166
+ declare function powerBudget(available: number, consumers: readonly PowerConsumer[]): PowerBudget;
167
+
168
+ export { type PowerBand, type PowerBudget, type PowerConsumer, powerBudget };
@@ -0,0 +1 @@
1
+ export{powerBudget}from"../chunk-76XKY2Y2.js";//# sourceMappingURL=power.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -0,0 +1,147 @@
1
+ import { OutfittingModule } from './modules.js';
2
+ import { PreEngineeredVariant } from './pre-engineered.js';
3
+ import { EngineeringModifier, LoadoutModule } from './slef.js';
4
+ import './engineering-options.js';
5
+ import './slots.js';
6
+
7
+ /**
8
+ * Resolving a **pre-engineered variant into a fittable module** — the base module's
9
+ * catalogue record with the variant's hand-set stat changes applied.
10
+ *
11
+ * A {@link PreEngineeredVariant} on its own is a pairing, not a module: it names the
12
+ * base `symbol` and the engineering baked into it. To build a ship with one you need the
13
+ * resolved article — mass, power draw, integrity and the rest as the variant actually
14
+ * arrives, not as the stock module leaves the shipyard. That is what
15
+ * {@link getPreEngineeredStats} returns.
16
+ *
17
+ * This module imports every module record to resolve stats. Its resolver is 334.4 KiB
18
+ * minified in a consumer bundle; the complete runtime API is 362.9 KiB (38.0 KiB
19
+ * gzipped). Consumers that only list variants can import `./pre-engineered.js` without
20
+ * these module catalogues.
21
+ * A journal or SLEF module can instead be classified with
22
+ * {@link identifyPreEngineeredVariant}: it matches the article's reported stat signature
23
+ * and composes an experimental effect added after purchase before comparing values.
24
+ *
25
+ * **What is resolved, and what is not.** The module catalogues carry the mechanical
26
+ * stats (mass, integrity, power, capacities, optimal mass), defence stats and weapon
27
+ * stats. {@link unresolvedModifiers} reports any unresolvable label instead of dropping
28
+ * it.
29
+ *
30
+ * @packageDocumentation
31
+ */
32
+
33
+ /**
34
+ * The journal-style modifiers a pre-engineered variant applies to its base module.
35
+ *
36
+ * Includes the variant's baked experimental effect. Only labels the module catalogues
37
+ * carry a base value for can be computed; unsupported hand-set labels are listed by
38
+ * {@link unresolvedModifiers}. The result is the same shape a journal `Loadout` reports
39
+ * under `Engineering.Modifiers`, so it can be used to construct one.
40
+ *
41
+ * @param variant - A pre-engineered variant.
42
+ * @returns One modifier per computable label, or an empty array when the variant carries
43
+ * no stat block (every `mercenary` row) or its symbol is unknown.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { getPreEngineeredByBlueprint } from '@elite-dangerous-almanac/core/ships/pre-engineered';
48
+ * import { getPreEngineeredModifiers } from '@elite-dangerous-almanac/core/ships/pre-engineered-stats';
49
+ *
50
+ * const [railgun] = getPreEngineeredByBlueprint('Weapon_HighCapacity');
51
+ * if (railgun) getPreEngineeredModifiers(railgun);
52
+ * // -> [{ Label: 'Mass', Value: 2.85, OriginalValue: 1.5 }, ...]
53
+ * ```
54
+ */
55
+ declare function getPreEngineeredModifiers(variant: PreEngineeredVariant): EngineeringModifier[];
56
+ /**
57
+ * Identify the fixed pre-engineered/reward variant described by a fitted loadout module.
58
+ *
59
+ * Matching uses the reported post-engineering stat values rather than trusting the
60
+ * blueprint tuple alone: reward variants carry hand-set values that an ordinary roll of
61
+ * the named blueprint does not reproduce. A captured experimental effect is composed
62
+ * with each candidate before comparison, because some fixed articles accept an effect
63
+ * after purchase (the V1 frame-shift drives are the common example).
64
+ *
65
+ * Frontier journals and captures may omit a derived modifier, so one predicted value may
66
+ * be absent. Every stated predicted value must agree within journal float noise, and all
67
+ * but at most one must be present. Ambiguous or incomplete evidence returns `null` rather
68
+ * than guessing.
69
+ * Variants without a published stat block cannot be identified this way.
70
+ *
71
+ * @param module - A module from a journal `Loadout` event or SLEF export.
72
+ * @returns The uniquely matching catalogue variant, or `null` when the stats do not
73
+ * identify one.
74
+ * @throws {TypeError} If a field it reads is present and not a string — `module.Item`,
75
+ * or a modifier's `Label` or the block's `ExperimentalEffect`. A module with no
76
+ * engineering block answers `null` before any of them is read.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * import { identifyPreEngineeredVariant } from '@elite-dangerous-almanac/core/ships/pre-engineered-stats';
81
+ * import type { LoadoutEvent } from '@elite-dangerous-almanac/core/ships/slef';
82
+ *
83
+ * declare const loadoutEvent: LoadoutEvent;
84
+ *
85
+ * const fitted = loadoutEvent.Modules.find((m) => m.Slot === 'FrameShiftDrive')!;
86
+ * identifyPreEngineeredVariant(fitted)?.acquisition; // -> 'techBroker', or null
87
+ * ```
88
+ */
89
+ declare function identifyPreEngineeredVariant(module: LoadoutModule): PreEngineeredVariant | null;
90
+ /**
91
+ * The labels a variant modifies that cannot be computed for its particular base module.
92
+ *
93
+ * This includes labels the catalogues do not model at all and known fields whose base
94
+ * value is absent from this particular module. Reporting these labels lets a consumer
95
+ * distinguish "this variant changes nothing else" from "this catalogue cannot say".
96
+ * Every catalogue variant returns an empty array.
97
+ *
98
+ * @param variant - A pre-engineered variant.
99
+ * @returns The unresolvable labels, in the variant's own order.
100
+ *
101
+ * @example
102
+ * ```ts
103
+ * import type { PreEngineeredVariant } from '@elite-dangerous-almanac/core/ships/pre-engineered';
104
+ * import { unresolvedModifiers } from '@elite-dangerous-almanac/core/ships/pre-engineered-stats';
105
+ *
106
+ * declare const railgun: PreEngineeredVariant;
107
+ *
108
+ * unresolvedModifiers(railgun); // -> [] (every label it changes resolves)
109
+ * ```
110
+ */
111
+ declare function unresolvedModifiers(variant: PreEngineeredVariant): string[];
112
+ /**
113
+ * A pre-engineered variant resolved into a module record you can fit.
114
+ *
115
+ * Returns the base module's catalogue record with every stat the variant modifies — and
116
+ * that the catalogue carries — replaced by its engineered value. `symbol`, `name`,
117
+ * `class`, `rating` and `cost` are the base module's throughout: a pre-engineered
118
+ * variant is the same article with different numbers, not a different module. A final
119
+ * variant also carries `engineeringLocked: true`, so fitting the resolved article keeps
120
+ * that restriction.
121
+ * Exact damage components scale with an engineered `damage` value so their proportions
122
+ * and the anti-xeno overlay remain coherent with the resolved scalar.
123
+ *
124
+ * A variant with no stat block (every `mercenary` row) resolves to the base record
125
+ * unchanged, which is the honest answer — the pre-engineering those arrive with is not
126
+ * published anywhere, so the catalogue does not guess at it.
127
+ *
128
+ * @param variant - A pre-engineered variant.
129
+ * @returns The resolved module record, or `null` when the variant's symbol is not in the
130
+ * module catalogues.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * import { getModuleBySymbol } from '@elite-dangerous-almanac/core/ships/modules';
135
+ * import { getPreEngineeredVariants } from '@elite-dangerous-almanac/core/ships/pre-engineered';
136
+ * import { getPreEngineeredStats } from '@elite-dangerous-almanac/core/ships/pre-engineered-stats';
137
+ *
138
+ * const shard = getPreEngineeredVariants('Hpt_Guardian_ShardCannon_Fixed_Medium')[0]!;
139
+ * const stock = getModuleBySymbol(shard.symbol)!;
140
+ * const fitted = getPreEngineeredStats(shard)!;
141
+ * stock.mass; // -> 4
142
+ * fitted.mass; // -> 6 (the variant carries Mass +50%)
143
+ * ```
144
+ */
145
+ declare function getPreEngineeredStats(variant: PreEngineeredVariant): OutfittingModule | null;
146
+
147
+ export { getPreEngineeredModifiers, getPreEngineeredStats, identifyPreEngineeredVariant, unresolvedModifiers };
@@ -0,0 +1 @@
1
+ export{getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-TLNHETGC.js"; //# sourceMappingURL=pre-engineered-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * The **pre-engineered module catalogue** — the outfitting rows you buy already
3
+ * engineered, each paired with the base module it fits as and the blueprint baked in.
4
+ *
5
+ * A pre-engineered module has **no symbol of its own**. The game sells an ordinary
6
+ * module with engineering already applied, so a journal `Loadout` reports the base
7
+ * `symbol` plus an `Engineering` block — which is why you will not find, say, a
8
+ * `Hpt_Railgun_Fixed_Medium_Merc` in the module catalogues. This catalogue supplies the
9
+ * link that would otherwise be missing: which stock modules are purchasable
10
+ * pre-engineered, and with what.
11
+ *
12
+ * Its own module (and data file) so consumers who never touch pre-engineered variants
13
+ * do not bundle it.
14
+ *
15
+ * Each entry is a {@link PreEngineeredVariant}: `symbol` joins to the module catalogues,
16
+ * `blueprint` to `BLUEPRINTS`, and `grade` is the grade already applied at purchase.
17
+ * Because grade 1 is what the bought module already contains, these blueprints' own
18
+ * recipes start at grade 2 — price the remaining upgrade with
19
+ * `getBlueprintCost(blueprint, target, grade)` from `ships/blueprint-costs`.
20
+ *
21
+ * Note that one base module can appear more than once: the medium Seeker Missile Rack is
22
+ * sold or awarded in six different pre-engineered flavours, so
23
+ * `Hpt_BasicMissileRack_Fixed_Medium` has six entries. Look variants up with
24
+ * {@link getPreEngineeredVariants} (plural) rather than assuming one.
25
+ *
26
+ * Most variants carry a {@link PreEngineeredVariant.modifiers} block — the hand-set stat
27
+ * changes the variant arrives with, which is what lets one be fitted and its stats
28
+ * computed. Resolve them against the base module with `getPreEngineeredStats` from
29
+ * `./pre-engineered-stats.js`; it lives in its own module so that consumers who only
30
+ * want the catalogue do not bundle the module and engineering tables.
31
+ * The only pre-engineered Guardian variants are seven Guardian-weapon records. They are
32
+ * final articles and carry {@link PreEngineeredVariant.engineeringLocked}; their stock
33
+ * counterparts can take Anti-Guardian Zone Resistance, but the resolved pre-engineered
34
+ * articles cannot.
35
+ *
36
+ * @packageDocumentation
37
+ */
38
+ /**
39
+ * Where a pre-engineered variant is obtained.
40
+ *
41
+ * - `mercenary` — bought from the Merc-Coin shop; always arrives at grade 1.
42
+ * - `communityGoal` — awarded for taking part in a community goal; mostly grade 5, and
43
+ * often carrying an experimental effect the shop rows do not.
44
+ * - `techBroker` — unlocked at a tech broker. Records the route stated by the source.
45
+ */
46
+ type PreEngineeredAcquisition = 'mercenary' | 'communityGoal' | 'techBroker';
47
+ /**
48
+ * One hand-set stat change a pre-engineered variant arrives with.
49
+ *
50
+ * Same vocabulary as a blueprint feature or experimental contribution: a journal
51
+ * Modifier `label`, the `method` by which it applies, and its `value`. Unlike a
52
+ * blueprint feature there is no `min`/`max` — a pre-engineered variant is a fixed
53
+ * article, not a roll.
54
+ */
55
+ interface PreEngineeredModifier {
56
+ /** Journal Modifier Label, e.g. `"PowerDraw"`, `"ArmourPenetration"`. */
57
+ readonly label: string;
58
+ /** How the value applies to the base stat. */
59
+ readonly method: 'multiplicative' | 'additive' | 'overwrite';
60
+ /**
61
+ * The modifier value: a fraction for `multiplicative` (`0.5` is `+50%`), an absolute
62
+ * delta for `additive`, and the replacement value for `overwrite`.
63
+ */
64
+ readonly value: number;
65
+ }
66
+ /**
67
+ * One purchasable pre-engineered module variant — a pairing of a stock module with the
68
+ * blueprint it ships with, not a module in its own right.
69
+ */
70
+ interface PreEngineeredVariant {
71
+ /** The base module's symbol, e.g. `"Hpt_Railgun_Fixed_Medium"`. Joins to the module catalogues. */
72
+ readonly symbol: string;
73
+ /** The base module's display name, e.g. `"Rail Gun"`. */
74
+ readonly name: string;
75
+ /**
76
+ * The blueprint recipe's Frontier `fdname`, e.g. `"RailGun_LongShot"`. Joins to
77
+ * `BLUEPRINTS`.
78
+ *
79
+ * @remarks
80
+ * On a reward variant this **identifies** the article rather than reproducing it.
81
+ * Alongside its blueprint and effect, a reward carries hand-set modifier overrides no
82
+ * blueprint grants — that is what makes it a reward rather than a shortcut — so
83
+ * rolling this recipe to this {@link PreEngineeredVariant.grade | grade} does not
84
+ * arrive at the same module, and `getBlueprintCost` (in `ships/blueprint-costs`)
85
+ * against it prices ordinary engineering rather than the reward. Read
86
+ * {@link PreEngineeredVariant.modifiers | modifiers} for what the article actually
87
+ * carries.
88
+ */
89
+ readonly blueprint: string;
90
+ /** The blueprint grade already applied (1–5). */
91
+ readonly grade: number;
92
+ /**
93
+ * The experimental effect's Frontier `fdname`, e.g.
94
+ * `"special_feedback_cascade_cooled"`. Joins to `EXPERIMENTAL_EFFECTS`. Absent when
95
+ * the variant carries none.
96
+ */
97
+ readonly experimental?: string;
98
+ /** Where the variant comes from. */
99
+ readonly acquisition: PreEngineeredAcquisition;
100
+ /**
101
+ * Whether the article is final and accepts no further engineering.
102
+ *
103
+ * @remarks
104
+ * Present as `true` on the pre-engineered Guardian weapons. Their stock counterparts
105
+ * can take Anti-Guardian Zone Resistance, but the pre-engineered articles cannot:
106
+ * neither that recipe nor any ordinary weapon recipe may be applied to them.
107
+ * Absence means this catalogue does not lock further engineering.
108
+ */
109
+ readonly engineeringLocked?: true;
110
+ /**
111
+ * The shop price in Merc Coin. Present only on `mercenary` rows — the other routes
112
+ * are not bought with a currency. Merc Coin has no credit equivalent, which is why
113
+ * this is separate from the credit `cost` a module carries.
114
+ */
115
+ readonly mercCoinCost?: number;
116
+ /**
117
+ * The hand-set stat block the variant arrives with, sorted by `label`.
118
+ *
119
+ * Absent on every `mercenary` row: no registry publishes the grade-1 pre-engineering
120
+ * those arrive with. Present on all 51 community-goal and tech-broker rows.
121
+ */
122
+ readonly modifiers?: readonly PreEngineeredModifier[];
123
+ }
124
+ /**
125
+ * Every purchasable pre-engineered module variant.
126
+ *
127
+ * @remarks
128
+ * This catalogue omits pre-engineered Guardian module rewards whose variant details have
129
+ * no traceable source. The gap is tracked at
130
+ * https://github.com/DarkSession/Elite-Dangerous-Almanac/issues/224.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * import { PRE_ENGINEERED_MODULES } from '@elite-dangerous-almanac/core/ships/pre-engineered';
135
+ *
136
+ * PRE_ENGINEERED_MODULES.length; // -> 73
137
+ * PRE_ENGINEERED_MODULES[0];
138
+ * // -> { symbol: 'Hpt_Mining_AbrBlstr_Fixed_Small', name: 'Abrasion Blaster',
139
+ * // blueprint: 'AbrasionBlaster_FarReaching', grade: 1,
140
+ * // acquisition: 'mercenary', mercCoinCost: 400 }
141
+ * ```
142
+ */
143
+ declare const PRE_ENGINEERED_MODULES: readonly PreEngineeredVariant[];
144
+ /**
145
+ * Every pre-engineered variant sold for a given base module symbol.
146
+ *
147
+ * Matching is case-insensitive and tolerates surrounding whitespace, so a raw journal
148
+ * value can be passed straight in. Returns an empty array when the module is not sold
149
+ * pre-engineered — never `null`, so the result is always safe to iterate.
150
+ *
151
+ * @param symbol - A module symbol, e.g. `"Hpt_BasicMissileRack_Fixed_Medium"`.
152
+ * @returns Every pre-engineered variant of that module, in catalogue order.
153
+ *
154
+ * @throws {TypeError} If `symbol` is present and not a string. A nullish
155
+ * `symbol` is a miss, answered the way an unrecognised one is.
156
+ * @example
157
+ * ```ts
158
+ * import { getPreEngineeredVariants } from '@elite-dangerous-almanac/core/ships/pre-engineered';
159
+ *
160
+ * getPreEngineeredVariants('Hpt_BasicMissileRack_Fixed_Medium').map((v) => v.blueprint);
161
+ * // -> ['SeekerMissileRack_Drag',
162
+ * // 'SeekerMissileRack_LightWeightThermal',
163
+ * // 'SeekerMissileRackMedium_Lockdown',
164
+ * // 'Weapon_HighCapacity', 'Weapon_HighCapacity', 'Weapon_HighCapacity']
165
+ *
166
+ * getPreEngineeredVariants('Int_Hyperdrive_Size2_Class1'); // -> []
167
+ * ```
168
+ */
169
+ declare function getPreEngineeredVariants(symbol: string): readonly PreEngineeredVariant[];
170
+ /**
171
+ * Every pre-engineered variant sold with a given blueprint.
172
+ *
173
+ * One blueprint can be sold on more than one base module — the Drag seeker
174
+ * pre-engineering, for instance, is offered on both the medium and the large missile
175
+ * rack — so this returns an array. Matching is case-insensitive and trims whitespace,
176
+ * and a miss is an empty array rather than `null`.
177
+ *
178
+ * @param fdname - A blueprint recipe `fdname`, e.g. `"RailGun_LongShot"`.
179
+ * @returns Every variant sold with that blueprint, in catalogue order.
180
+ *
181
+ * @throws {TypeError} If `fdname` is present and not a string. A nullish
182
+ * `fdname` is a miss, answered the way an unrecognised one is.
183
+ * @example
184
+ * ```ts
185
+ * import { getPreEngineeredByBlueprint } from '@elite-dangerous-almanac/core/ships/pre-engineered';
186
+ *
187
+ * getPreEngineeredByBlueprint('RailGun_LongShot').map((v) => v.symbol);
188
+ * // -> ['Hpt_Railgun_Fixed_Medium']
189
+ *
190
+ * getPreEngineeredByBlueprint('SeekerMissileRack_Drag').map((v) => v.symbol);
191
+ * // -> ['Hpt_BasicMissileRack_Fixed_Medium', 'Hpt_BasicMissileRack_Fixed_Large']
192
+ *
193
+ * getPreEngineeredByBlueprint('NoSuchBlueprint'); // -> []
194
+ * ```
195
+ */
196
+ declare function getPreEngineeredByBlueprint(fdname: string): readonly PreEngineeredVariant[];
197
+ /**
198
+ * Whether a module is sold in at least one pre-engineered form.
199
+ *
200
+ * @param symbol - A module symbol.
201
+ * @returns `true` when {@link getPreEngineeredVariants} would return anything.
202
+ *
203
+ * @throws {TypeError} If `symbol` is present and not a string. A nullish
204
+ * `symbol` is a miss, answered the way an unrecognised one is.
205
+ * @example
206
+ * ```ts
207
+ * import { isPreEngineered } from '@elite-dangerous-almanac/core/ships/pre-engineered';
208
+ *
209
+ * isPreEngineered('Hpt_Railgun_Fixed_Medium'); // -> true
210
+ * isPreEngineered('Int_Hyperdrive_Size2_Class1'); // -> false
211
+ * ```
212
+ */
213
+ declare function isPreEngineered(symbol: string): boolean;
214
+
215
+ export { PRE_ENGINEERED_MODULES, type PreEngineeredAcquisition, type PreEngineeredModifier, type PreEngineeredVariant, getPreEngineeredByBlueprint, getPreEngineeredVariants, isPreEngineered };
@@ -0,0 +1 @@
1
+ export{PRE_ENGINEERED_MODULES,getPreEngineeredByBlueprint,getPreEngineeredVariants,isPreEngineered}from"../chunk-GJCB2Z72.js"; //# sourceMappingURL=pre-engineered.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}