@elite-dangerous-almanac/core 0.1.6 → 0.1.7
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.
- package/PROVENANCE/i18n/SOURCES.md +92 -35
- package/PROVENANCE/ships/SOURCES.md +36 -14
- package/THIRD_PARTY_NOTICES.md +3 -0
- package/dist/{chunk-EWAS7KMF.js → chunk-4S6WB7QR.js} +1 -1
- package/dist/chunk-4TFAZX73.js +1 -0
- package/dist/{chunk-PYV7VI6I.js.map → chunk-4TFAZX73.js.map} +1 -1
- package/dist/chunk-4ZGUSHTP.js +1 -0
- package/dist/{chunk-5V4OXZLE.js.map → chunk-4ZGUSHTP.js.map} +1 -1
- package/dist/{chunk-3MPLVD2R.js → chunk-6G6TYW2D.js} +1 -1
- package/dist/chunk-AFS6HN3D.js +1 -0
- package/dist/chunk-AFS6HN3D.js.map +1 -0
- package/dist/chunk-CJWFY6OX.js +1 -0
- package/dist/{chunk-JKWV3CZN.js.map → chunk-CJWFY6OX.js.map} +1 -1
- package/dist/chunk-EKQCVCMK.js +1 -0
- package/dist/{chunk-WHAU3C4E.js.map → chunk-EKQCVCMK.js.map} +1 -1
- package/dist/chunk-ELT3FEA4.js +1 -0
- package/dist/{chunk-6FKBZPI6.js.map → chunk-ELT3FEA4.js.map} +1 -1
- package/dist/{chunk-ZKU7CMAH.js → chunk-EXVCRIDP.js} +1 -1
- package/dist/chunk-EXVCRIDP.js.map +1 -0
- package/dist/chunk-GRSNX36B.js +1 -0
- package/dist/{chunk-JXLCRQH5.js.map → chunk-GRSNX36B.js.map} +1 -1
- package/dist/chunk-GVNTKCVF.js +1 -0
- package/dist/chunk-GVNTKCVF.js.map +1 -0
- package/dist/{chunk-FEER4ERG.js → chunk-IOJXLDJN.js} +1 -1
- package/dist/{chunk-EVEFYI7K.js → chunk-J42ZXLBL.js} +1 -1
- package/dist/{chunk-EVEFYI7K.js.map → chunk-J42ZXLBL.js.map} +1 -1
- package/dist/chunk-KJFUNIIY.js +1 -0
- package/dist/{chunk-NCKOVFBJ.js.map → chunk-KJFUNIIY.js.map} +1 -1
- package/dist/{chunk-UPUC5X2C.js → chunk-LLHGSBPI.js} +1 -1
- package/dist/{chunk-UPUC5X2C.js.map → chunk-LLHGSBPI.js.map} +1 -1
- package/dist/{chunk-RC6F6RAU.js → chunk-LZYHBFJC.js} +1 -1
- package/dist/{chunk-RC6F6RAU.js.map → chunk-LZYHBFJC.js.map} +1 -1
- package/dist/chunk-M6G3UDTX.js +1 -0
- package/dist/chunk-M6G3UDTX.js.map +1 -0
- package/dist/{chunk-DLLBARN5.js → chunk-MKGJPVPS.js} +1 -1
- package/dist/chunk-RVIYOHYF.js +1 -0
- package/dist/chunk-RVIYOHYF.js.map +1 -0
- package/dist/chunk-SD6GNFDX.js +1 -0
- package/dist/chunk-SD6GNFDX.js.map +1 -0
- package/dist/chunk-TW7LUBHD.js +1 -0
- package/dist/{chunk-QGAZWX7G.js.map → chunk-TW7LUBHD.js.map} +1 -1
- package/dist/{chunk-3EO7PTAP.js → chunk-UHSNB5SV.js} +1 -1
- package/dist/chunk-V4C6FIE2.js +1 -0
- package/dist/{chunk-TLA6LHLN.js.map → chunk-V4C6FIE2.js.map} +1 -1
- package/dist/chunk-VDVFJXX5.js +1 -0
- package/dist/{chunk-PEHOKSSD.js.map → chunk-VDVFJXX5.js.map} +1 -1
- package/dist/chunk-Z6XMXMVI.js +1 -0
- package/dist/{chunk-NEFUW32I.js.map → chunk-Z6XMXMVI.js.map} +1 -1
- package/dist/{chunk-T4CV4CDF.js → chunk-ZRG35JSH.js} +1 -1
- package/dist/{chunk-BZDTEXXM.js → chunk-ZZT2PQZ5.js} +1 -1
- package/dist/i18n/blueprints.d.ts +2 -1
- package/dist/i18n/blueprints.js +1 -1
- package/dist/i18n/diagnostics.d.ts +1 -0
- package/dist/i18n/diagnostics.js +1 -1
- package/dist/i18n/engineering-groups.js +1 -1
- package/dist/i18n/experimental-effect-descriptions.js +1 -1
- package/dist/i18n/experimental-effects.js +1 -1
- package/dist/i18n/index.d.ts +9 -6
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/materials.js +1 -1
- package/dist/i18n/micro-resources.js +1 -1
- package/dist/i18n/module-families.d.ts +32 -0
- package/dist/i18n/module-families.js +1 -0
- package/dist/i18n/module-families.js.map +1 -0
- package/dist/i18n/modules.js +1 -1
- package/dist/i18n/pre-engineered.js +1 -1
- package/dist/i18n/ships.js +1 -1
- package/dist/i18n/slots.js +1 -1
- package/dist/materials/index.js +1 -1
- package/dist/materials/materials-all.js +1 -1
- package/dist/materials/materials.js +1 -1
- package/dist/materials/micro-resources-all.js +1 -1
- package/dist/materials/micro-resources.js +1 -1
- package/dist/ships/blueprint-costs.d.ts +1 -0
- package/dist/ships/blueprints.d.ts +1 -0
- package/dist/ships/engineering.d.ts +1 -0
- package/dist/ships/experimental-effect-costs.d.ts +1 -0
- package/dist/ships/experimental-effects.d.ts +1 -0
- package/dist/ships/index.d.ts +1 -0
- package/dist/ships/index.js +1 -1
- package/dist/ships/loadout-validation.d.ts +1 -0
- package/dist/ships/module-capabilities.d.ts +1 -0
- package/dist/ships/module-families.d.ts +49 -0
- package/dist/ships/module-families.js +1 -0
- package/dist/ships/module-families.js.map +1 -0
- package/dist/ships/module-limits.d.ts +1 -0
- package/dist/ships/modules-all.d.ts +1 -0
- package/dist/ships/modules-all.js +1 -1
- package/dist/ships/modules-core.d.ts +1 -0
- package/dist/ships/modules-core.js +1 -1
- package/dist/ships/modules-hardpoint.d.ts +2 -1
- package/dist/ships/modules-hardpoint.js +1 -1
- package/dist/ships/modules-internal.d.ts +2 -1
- package/dist/ships/modules-internal.js +1 -1
- package/dist/ships/modules-utility.d.ts +2 -1
- package/dist/ships/modules-utility.js +1 -1
- package/dist/ships/modules.d.ts +15 -14
- package/dist/ships/modules.js +1 -1
- package/dist/ships/pre-engineered-stats.d.ts +1 -0
- package/dist/ships/pre-engineered-stats.js +1 -1
- package/dist/ships/ship-loadout.d.ts +1 -0
- package/dist/ships/ship-loadout.js +1 -1
- package/dist/ships/weapons.d.ts +1 -0
- package/package.json +9 -1
- package/dist/chunk-5V4OXZLE.js +0 -1
- package/dist/chunk-6FKBZPI6.js +0 -1
- package/dist/chunk-DAQ3PJ4R.js +0 -1
- package/dist/chunk-DAQ3PJ4R.js.map +0 -1
- package/dist/chunk-JKWV3CZN.js +0 -1
- package/dist/chunk-JXLCRQH5.js +0 -1
- package/dist/chunk-NCKOVFBJ.js +0 -1
- package/dist/chunk-NEFUW32I.js +0 -1
- package/dist/chunk-NWBWTJM3.js +0 -1
- package/dist/chunk-NWBWTJM3.js.map +0 -1
- package/dist/chunk-PEHOKSSD.js +0 -1
- package/dist/chunk-PYV7VI6I.js +0 -1
- package/dist/chunk-QGAZWX7G.js +0 -1
- package/dist/chunk-SU352DIW.js +0 -1
- package/dist/chunk-SU352DIW.js.map +0 -1
- package/dist/chunk-TLA6LHLN.js +0 -1
- package/dist/chunk-WHAU3C4E.js +0 -1
- package/dist/chunk-ZKU7CMAH.js.map +0 -1
- /package/dist/{chunk-EWAS7KMF.js.map → chunk-4S6WB7QR.js.map} +0 -0
- /package/dist/{chunk-3MPLVD2R.js.map → chunk-6G6TYW2D.js.map} +0 -0
- /package/dist/{chunk-FEER4ERG.js.map → chunk-IOJXLDJN.js.map} +0 -0
- /package/dist/{chunk-DLLBARN5.js.map → chunk-MKGJPVPS.js.map} +0 -0
- /package/dist/{chunk-3EO7PTAP.js.map → chunk-UHSNB5SV.js.map} +0 -0
- /package/dist/{chunk-T4CV4CDF.js.map → chunk-ZRG35JSH.js.map} +0 -0
- /package/dist/{chunk-BZDTEXXM.js.map → chunk-ZZT2PQZ5.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ENCODED_MATERIALS}from"./chunk-Q5XOGATC.js";import{MANUFACTURED_MATERIALS}from"./chunk-HKXXFIRI.js";import{RAW_MATERIALS}from"./chunk-SQS7672E.js";var ALL_MATERIALS=Object.freeze([...RAW_MATERIALS,...MANUFACTURED_MATERIALS,...ENCODED_MATERIALS]);export{ALL_MATERIALS};//# sourceMappingURL=chunk-V4C6FIE2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/materials/materials-all.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../src/materials/materials-all.ts"],"names":["ENCODED_MATERIALS","MANUFACTURED_MATERIALS","RAW_MATERIALS","ALL_MATERIALS","Object","freeze"],"mappings":"O,mJA0BO,IAAMG,cAAqCC,OAAOC,OAAO,IACzDH,iBACAD,0BACAD,2BACNG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{CORE_MODULES}from"./chunk-UHSNB5SV.js";import{HARDPOINT_MODULES}from"./chunk-4TFAZX73.js";import{INTERNAL_MODULES}from"./chunk-4ZGUSHTP.js";import{UTILITY_MODULES}from"./chunk-ELT3FEA4.js";var ALL_MODULES=Object.freeze([...CORE_MODULES,...INTERNAL_MODULES,...HARDPOINT_MODULES,...UTILITY_MODULES]);export{ALL_MODULES};//# sourceMappingURL=chunk-VDVFJXX5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ships/modules-all.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../src/ships/modules-all.ts"],"names":["CORE_MODULES","HARDPOINT_MODULES","INTERNAL_MODULES","UTILITY_MODULES","ALL_MODULES","Object","freeze"],"mappings":"O,6LA0CO,IAAMI,YAA2CC,OAAOC,OAAO,IAC/DN,gBACAE,oBACAD,qBACAE,yBACNC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getLocalizedName,createLocalizedNameIndex}from"./chunk-RVIYOHYF.js";var blueprint_names_default={AbrasionBlaster_FarReaching:{en:"Abrasion Blaster — Far-reaching",de:"Abrasionsblaster mit großer Reichweite",es:"Destructor de abrasión de largo alcance",fr:"Surfaceur abrasif longue portée",pt:"Detonador de abrasão de longo alcance",ru:"Абразивный бластер с увеличенной дальностью"},AFM_Shielded:{en:"Shielded",de:"Div. Schildverstärkt",es:"Blindado misceláneo",fr:"Divers - protection",pt:"Qualquer Protegido",ru:"Защищенное прочее"},Armour_Advanced:{en:"Lightweight",de:"Leichte Panzerung",es:"Blindaje ligero",fr:"Blindage léger",pt:"Blindagem Leve",ru:"Броня из легких сплавов"},Armour_Explosive:{en:"Blast resistant",de:"Detonationsresistente Panzerung",es:"Blindaje resistente a explosiones",fr:"Blindage anti-explosions",pt:"Blindagem de resistência a Explosões",ru:"Взрывостойкая обшивка"},Armour_HeavyDuty:{en:"Heavy duty",de:"Schwere Panzerung",es:"Blindaje de alta resistencia",fr:"Blindage lourd",pt:"Blindagem Pesada",ru:"Толстая броня"},Armour_Kinetic:{en:"Kinetic resistant",de:"Kinetikresistente Panzerung",es:"Blindaje de resistencia cinética",fr:"Blindage anti-cinétique",pt:"Blindagem de Resistência Cinética",ru:"Противокинетическая броня"},Armour_Thermic:{en:"Thermal resistant",de:"Thermalresistente Panzerung",es:"Blindaje de resistencia térmica",fr:"Blindage antithermique",pt:"Blindagem de Resistência Térmica",ru:"Термостойкая броня"},BeamLaser_ThermalPlasmaConversion:{en:"Plasma conversion",de:"Plasmaumwandlung",es:"Conversión de plasma",fr:"Conversion de plasma",pt:"Conversão de plasma",ru:"Преобразование в плазму"},BurstLaser_ThermalPlasmaConversion:{en:"Plasma conversion",de:"Plasmaumwandlung",es:"Conversión de plasma",fr:"Conversion de plasma",pt:"Conversão de plasma",ru:"Преобразование в плазму"},CargoRack_IncreasedCapacity:{en:"Expanded Cargo Rack",de:"Erweitertes Frachtgestell",es:"Bodega de carga expandida",fr:"Compartiment de soute étendu",pt:"Estante de carga estendida",ru:"Большой грузовой стеллаж"},CargoRackS5C1_Extended:{en:"Cargo Rack — Extended",de:"Erweitertes Frachtgestell",es:"Bodega de carga extendida",fr:"Compartiment soute agrandi",pt:"Estante de carga estendido",ru:"Увеличенный грузовой стеллаж"},CargoRackS6C1_Extended:{en:"Cargo Rack — Extended",de:"Erweitertes Frachtgestell",es:"Bodega de carga extendida",fr:"Compartiment soute agrandi",pt:"Estante de carga estendido",ru:"Увеличенный грузовой стеллаж"},CollectionLimpet_LightWeight:{en:"Lightweight",de:"Div. Leichtgewicht",es:"Ligero misceláneo",fr:"Divers - allégement",pt:"Qualquer Leve",ru:"Облегченное прочее"},CollectionLimpet_Reinforced:{en:"Reinforced",de:"Div. Verstärkt",es:"Reforzado misceláneo",fr:"Divers - renforcement",pt:"Qualquer Reforçado",ru:"Усиленное прочее"},CollectionLimpet_Shielded:{en:"Shielded",de:"Div. Schildverstärkt",es:"Blindado misceláneo",fr:"Divers - protection",pt:"Qualquer Protegido",ru:"Защищенное прочее"},DetailedSurfaceScanner_LongRange:{en:"Detailed Surface Scanner — Long range detailed",de:"Ferndistanz-Detail-Oberflächenscanner",es:"Escáner de análisis de superficie detallado de largo alcance",fr:"Détecteur de surface détaillé longue portée",pt:"Scanner de superfície detalhada de Longo Alcance",ru:"Подробный сканер поверхностей с увеличенной дальностью"},Engine_Dirty:{en:"Dirty",de:"Aggressives Antriebstuning",es:"Modificación de motor sucio",fr:"Optimisation de réacteur détériorante",pt:"Ajuste de Motor Sujo",ru:"«Грязная» донастройка двигателя"},Engine_Reinforced:{en:"Reinforced",de:"Antriebsstärkung",es:"Fortalecimiento de motor",fr:"Renforcement du réacteur",pt:"Reforçamento do Motor",ru:"Усиление двигателя"},Engine_Tuned:{en:"Clean",de:"Ausgewogenes Antriebstuning",es:"Modificación de motor limpio",fr:"Optimisation de réacteur propre",pt:"Ajuste de Motor Limpo",ru:"«Чистая» донастройка двигателя"},EnzymeMissileRack_HighYield:{en:"Enzyme Missile Rack — High-yield",de:"Enzymraketenrampe mit hohen Erträgen",es:"Lanzamisiles de enzimas de alto rendimiento",fr:"Batterie de missiles enzymatiques à hauts rendements",pt:"Estante de mísseis enzimáticos de alta potência",ru:"Блок энзимных ракет высокой мощности"},FragmentCannonLarge_DoubleScreaming:{en:"Fragment Cannon — Double screaming",de:"Doppelschrei-Splitterkanone",es:"Cañón de fragmentación doble con proyectil de pantalla",fr:"Double canon à fragmentation Screaming",pt:"Canhão de fragmentos duplo de barragem",ru:"Залповое орудие «Двойной вой»"},FragmentCannonSmall_DoubleScreaming:{en:"Fragment Cannon — Double screaming",de:"Doppelschrei-Splitterkanone",es:"Cañón de fragmentación doble con proyectil de pantalla",fr:"Double canon à fragmentation Screaming",pt:"Canhão de fragmentos duplo de barragem",ru:"Залповое орудие «Двойной вой»"},FSD_FastBoot:{en:"Faster boot sequence",de:"Schnellere FSA-Ladesequenz",es:"Secuencia de inicio de MDD rápida",fr:"Démarrage accéléré du réacteur FSD",pt:"Sequência de Inicialização do MDD Mais Rápida",ru:"Последовательность быстрого запуска FSD"},FSD_LongRange:{en:"Increased range",de:"Erhöhte FSA-Reichweite",es:"Aumento de alcance de MDD",fr:"Portée FSD améliorée",pt:"Alcance do MDD Aumentado",ru:"Увеличенная дальность FSD"},FSD_Shielded:{en:"Shielded",de:"Abgeschirmter FSA",es:"MDD blindado",fr:"FSD protégé",pt:"MDD Protegido",ru:"Защищенный FSD"},FSDinterdictor_Expanded:{en:"Expanded capture arc",de:"Erw. Abfangkreisbogen für FSA-Unterbrecher",es:"Arco de captura de interdictor de MDD extendido",fr:"Intercepteur FSD à angle de capture augmenté",pt:"Arco de Captura do Interditor de MDD Expandido",ru:"Перехватчик FSD с расширенной дугой захвата"},FSDinterdictor_LongRange:{en:"Long range",de:"Ferndistanz-FSA-Unterbrecher",es:"Interdictor de MDD de largo alcance",fr:"Intercepteur FSD longue portée",pt:"Interditor de MDD de Longo Alcance",ru:"Перехватчик FSD большой дальности"},FuelScoop_Efficiency:{en:"Fuel Scoop — Scoop rate enhanced",de:"Erweiterte Sammelrate",es:"Velocidad de recarga mejorada",fr:"Taux de récupération amélioré",pt:"Taxa da coleta aprimorada",ru:"Улучшенная интенсивность забора"},FuelScoop_Shielded:{en:"Shielded",de:"Treibstoffsammler mit Schild",es:"Recolector de combustible blindado",fr:"Récupérateur de carburant protégé",pt:"Coletor de Combustível Protegido",ru:"Защищенный топливозаборник"},FuelTransferLimpet_LightWeight:{en:"Lightweight",de:"Div. Leichtgewicht",es:"Ligero misceláneo",fr:"Divers - allégement",pt:"Qualquer Leve",ru:"Облегченное прочее"},FuelTransferLimpet_Reinforced:{en:"Reinforced",de:"Div. Verstärkt",es:"Reforzado misceláneo",fr:"Divers - renforcement",pt:"Qualquer Reforçado",ru:"Усиленное прочее"},FuelTransferLimpet_Shielded:{en:"Shielded",de:"Div. Schildverstärkt",es:"Blindado misceláneo",fr:"Divers - protection",pt:"Qualquer Protegido",ru:"Защищенное прочее"},GuardianModule_Sturdy:{en:"Anti-Guardian Zone Resistance",de:"Anti-Guardian-Zone-Widerstand",es:"Zona de resistencia antiguardián",fr:"Résistance à la zone anti-Guardian",pt:"Resistência à área anti-Guardian",ru:"Защита от отключающего поля"},HatchBreakerLimpet_LightWeight:{en:"Lightweight",de:"Div. Leichtgewicht",es:"Ligero misceláneo",fr:"Divers - allégement",pt:"Qualquer Leve",ru:"Облегченное прочее"},HatchBreakerLimpet_Reinforced:{en:"Reinforced",de:"Div. Verstärkt",es:"Reforzado misceláneo",fr:"Divers - renforcement",pt:"Qualquer Reforçado",ru:"Усиленное прочее"},HatchBreakerLimpet_Shielded:{en:"Shielded",de:"Div. Schildverstärkt",es:"Blindado misceláneo",fr:"Divers - protection",pt:"Qualquer Protegido",ru:"Защищенное прочее"},HullReinforcement_Advanced:{en:"Lightweight",de:"Leichtgewicht-Rumpfhüllenverstärkung",es:"Refuerzo estructural aligerado",fr:"Renforcement de coque ultraléger",pt:"Reforço de Casco Leve",ru:"Легкое усиление корпуса"},HullReinforcement_Explosive:{en:"Blast resistant",de:"Detonationsresistente Rumpfhüllenverstärkung",es:"Refuerzo estruct. de resistencia explo.",fr:"Renforcement de coque anti-explosions",pt:"Reforço de Casco de resistência a Explosões",ru:"Взрывостойкое усиление корпуса"},HullReinforcement_HeavyDuty:{en:"Heavy duty",de:"Schwere Rumpfhüllenverstärkung",es:"Refuerzo estructural de alta resistencia",fr:"Renforcement de coque lourd",pt:"Reforço de Casco Pesado",ru:"Надежное усиление корпуса"},HullReinforcement_Kinetic:{en:"Kinetic resistant",de:"Kinetikresistente Rumpfhüllenverstärkung",es:"Refuerzo estructural de resistencia cinética",fr:"Renforcement de coque anti-cinétique",pt:"Reforço de Casco de Resistência Cinética",ru:"Противокинетическое усиление корпуса"},HullReinforcement_Thermic:{en:"Thermal resistant",de:"Thermalresistente Rumpfhüllenverstärkung",es:"Refuerzo estructural de resistencia térmica",fr:"Renforcement de coque antithermique",pt:"Reforço de Casco de Resistência Térmica",ru:"Термостойкое усиление корпуса"},LifeSupport_LightWeight:{en:"Lightweight",de:"Leichtes Lebenserhaltungssystem",es:"Soporte vital ligero",fr:"Systèmes de survie allégés",pt:"Suporte de vida leve",ru:"Облегченная система жизнеобеспечения"},LifeSupport_Reinforced:{en:"Reinforced",de:"Verstärktes Lebenserhaltungssystem",es:"Soporte vital reforzado",fr:"Systèmes de survie renforcés",pt:"Suporte de vida reforçado",ru:"Усиленная система жизнеобеспечения"},LifeSupport_Shielded:{en:"Shielded",de:"Lebenserhaltungssystem mit Schild",es:"Soporte vital blindado",fr:"Systèmes de survie protégés",pt:"Suporte de vida protegido",ru:"Защищенная система жизнеобеспечения"},MC_Overcharged:{en:"Overcharged",de:"Überladungswaffe",es:"Arma sobrecargada",fr:"Arme surchargée",pt:"Arma Sobrecarregada",ru:"Усиленное орудие"},MiningLaser_LongRange:{en:"Mining Laser — Long range",de:"Ferndistanz-Abbaulaser",es:"Láser de minería de largo alcance",fr:"Laser minier longue portée",pt:"Laser de mineração de longo alcance",ru:"Проходочный лазер с увеличенной дальностью"},Misc_ChaffCapacity:{en:"Ammo capacity",de:"Düppel-Munitionskapazität",es:"Capacidad de munición de señuelos",fr:"Capacité du chargeur du lanceur de paillettes",pt:"Capacidade de Munição de Chaff",ru:"Вместимость припасов дипольного отражателя"},Misc_HeatSinkCapacity:{en:"Ammo capacity",de:"Kühlkörper-Munitionskapazität",es:"Capacidad de munición de eyector de calor",fr:"Capacité du chargeur de l'éjecteur de dissipateur thermique",pt:"Capacidade de Munição de Dissipador Térmico",ru:"Вместимость припасов теплоотвода"},Misc_LightWeight:{en:"Lightweight",de:"Div. Leichtgewicht",es:"Ligero misceláneo",fr:"Divers - allégement",pt:"Qualquer Leve",ru:"Облегченное прочее"},Misc_PointDefenseCapacity:{en:"Ammo capacity",de:"Punktverteidigung-Munitionskapazität",es:"Capacidad de munición de defensa de punto",fr:"Capacité du chargeur de la défense ponctuelle",pt:"Capacidade de Munição de Defesa de Ponto",ru:"Вместимость припасов точечной обороны"},Misc_Reinforced:{en:"Reinforced",de:"Div. Verstärkt",es:"Reforzado misceláneo",fr:"Divers - renforcement",pt:"Qualquer Reforçado",ru:"Усиленное прочее"},Misc_Shielded:{en:"Shielded",de:"Div. Schildverstärkt",es:"Blindado misceláneo",fr:"Divers - protection",pt:"Qualquer Protegido",ru:"Защищенное прочее"},ModuleReinforcement_HeavyDuty:{en:"Module Reinforcement Package — Heavy duty",de:"Schwere Modulverstärkung (Paket)",es:"Paquete de refuerzo de módulo de alta resistencia",fr:"Pack de renforcement de modules lourds",pt:"Pacote de Reforço de módulo Pesado",ru:"Укрепленный набор для усиления модуля"},MultiCannon_Rapid:{en:"Multi-cannon — Rapid phase",de:"Schnellfeuer-Mehrfachgeschütz",es:"Multicañón de fase con disparo rápido",fr:"Multi-canon à phase rapide",pt:"Canhão de repetição de tiro rápido",ru:"Скорострельное фазовое многоствольное орудие"},PowerDistributor_Balanced:{en:"Power Distributor — Balanced",de:"Abgeglichener Energieverteiler",es:"Distribuidor de energía equilibrado",fr:"Répartiteur de puissance équilibré",pt:"Distribuidor de energia equilibrado",ru:"Сбалансированный распределитель энергии"},PowerDistributor_HighCapacity:{en:"High charge capacity",de:"Hochleistungsfähiger Energieverteiler",es:"Distribuidor de energía de alta capacidad de carga",fr:"Répartiteur de puissance à capacité accrue",pt:"Distribuidor de Energia de Alta Capacidade",ru:"Высокоемкий распределитель питания"},PowerDistributor_HighFrequency:{en:"Charge enhanced",de:"Ladungsoptimierter Energieverteiler",es:"Distribuidor de energía de carga mejorada",fr:"Répartiteur de puissance rapide",pt:"Distribuidor de Energia de Recarga Melhorada",ru:"Быстрозаряжающийся распределитель питания"},PowerDistributor_PriorityEngines:{en:"Engine focused",de:"Antriebsfokussierter Energieverteiler",es:"Distribuidor de energía orientado a motor",fr:"Répartiteur de puissance optimisé Moteur",pt:"Distribuidor de Energia com Foco nos Motores",ru:"Распределитель питания на двигатель"},PowerDistributor_PrioritySystems:{en:"System focused",de:"Systemfokussierter Energieverteiler",es:"Distribuidor de energía orientado a sistemas",fr:"Répartiteur de puissance optimisé Systèmes",pt:"Distribuidor de Energia com Foco nos Sistemas",ru:"Распределитель питания на систему"},PowerDistributor_PriorityWeapons:{en:"Weapon focused",de:"Waffenfokussierter Energieverteiler",es:"Distribuidor de energía orientado a armas",fr:"Répartiteur de puissance optimisé Armes",pt:"Distribuidor de Energia com Foco nas Armas",ru:"Распределитель питания на орудия"},PowerDistributor_Shielded:{en:"Shielded",de:"Abgeschirmter Energieverteiler",es:"Distribuidor de energía blindado",fr:"Répartiteur de puissance protégé",pt:"Distribuidor de Energia Protegido",ru:"Защищенный распределитель питания"},PowerDistributorS3C2_SupportFocused:{en:"Power Distributor — Support focused",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",pt:"Distribuidor de energia com foco no suporte",ru:"Вспомогательный распределитель питания"},PowerDistributorS3C5_SupportFocused:{en:"Power Distributor — Support focused",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",pt:"Distribuidor de energia com foco no suporte",ru:"Вспомогательный распределитель питания"},PowerDistributorS4C2_SupportFocused:{en:"Power Distributor — Support focused",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",pt:"Distribuidor de energia com foco no suporte",ru:"Вспомогательный распределитель питания"},PowerDistributorS4C5_SupportFocused:{en:"Power Distributor — Support focused",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",pt:"Distribuidor de energia com foco no suporte",ru:"Вспомогательный распределитель питания"},PowerDistributorS6C5_SupportFocused:{en:"Power Distributor — Support focused",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",pt:"Distribuidor de energia com foco no suporte",ru:"Вспомогательный распределитель питания"},PowerPlant_Armoured:{en:"Armoured",de:"Kraftwerkpanzerung",es:"Núcleo de energía blindado",fr:"Générateur blindé",pt:"Gerador de Energia Blindado",ru:"Бронированная силовая установка"},PowerPlant_Boosted:{en:"Overcharged",de:"Kraftwerksüberladung",es:"Núcleo de energía sobrecargado",fr:"Générateur surchargé",pt:"Gerador de Energia Sobrecarregado",ru:"Усиленная силовая установка"},PowerPlant_Stealth:{en:"Low emissions",de:"Emissionsoptimiertes Kraftwerk",es:"Núcleo de energía de bajas emisiones",fr:"Générateur à faibles émissions",pt:"Gerador de Energia de Baixa Emissão",ru:"Силовая установка с малым излучением"},ProspectingLimpet_LightWeight:{en:"Lightweight",de:"Div. Leichtgewicht",es:"Ligero misceláneo",fr:"Divers - allégement",pt:"Qualquer Leve",ru:"Облегченное прочее"},ProspectingLimpet_Reinforced:{en:"Reinforced",de:"Div. Verstärkt",es:"Reforzado misceláneo",fr:"Divers - renforcement",pt:"Qualquer Reforçado",ru:"Усиленное прочее"},ProspectingLimpet_Shielded:{en:"Shielded",de:"Div. Schildverstärkt",es:"Blindado misceláneo",fr:"Divers - protection",pt:"Qualquer Protegido",ru:"Защищенное прочее"},PulseLaser_ThermalPlasmaConversion:{en:"Plasma conversion",de:"Plasmaumwandlung",es:"Conversión de plasma",fr:"Conversion de plasma",pt:"Conversão de plasma",ru:"Преобразование в плазму"},RailGun_LongShot:{en:"Rail Gun — Enduring feedback",de:"Robuste Feedback-Schienenkanone",es:"Cañón de riel Retroalimentación Soportable",fr:"Canon électrique énergétique résistant",pt:"Canhão elétrico de feedback duradouro",ru:"Электромагнитная пушка с постоянным откликом"},Refineries_Shielded:{en:"Shielded",de:"Div. Schildverstärkt",es:"Blindado misceláneo",fr:"Divers - protection",pt:"Qualquer Protegido",ru:"Защищенное прочее"},Scanner_LongRange:{en:"Long range",de:"Ferndistanzscanner",es:"Escáner de largo alcance",fr:"Détecteur à longue portée",pt:"Scanner de longa distância",ru:"Сканер дальнего действия"},Scanner_WideAngle:{en:"Wide angle",de:"Weitwinkelscanner",es:"Escáner de estelas de ángulo amplio",fr:"Détecteur grand-angle",pt:"Scanner de Ângulo Amplo",ru:"Широкоугольный сканер"},SeekerMissileRack_Drag:{en:"Seeker Missile Rack — Drag",de:"Suchraketenrampe ziehen",es:"Lanzamisiles guiado con lastre",fr:"Batterie de missiles TC à inertie",pt:"Estante de míssil guiado de arrasto",ru:"Блок ракет с самонаведением и замедляющими боеприпасами"},SeekerMissileRack_LightWeightThermal:{en:"Seeker Missile Rack — Lightweight thermal",de:"Leichte thermische Suchraketenrampe",es:"Lanzamisiles guiado térmico ligero",fr:"Batterie de missiles TC thermiques légers",pt:"Estante de míssil guiado leve",ru:"Легкий блок тепловых ракет с самонаведением"},SeekerMissileRackLarge_Lockdown:{en:"Seeker Missile Rack — Lockdown",de:"Abriegelung-Suchraketenrampe",es:"Lanzamisiles guiado con bloqueo",fr:"Batterie de missiles TC à verrouillage",pt:"Estante de míssil guiado de precisão",ru:"Блок ракет с самонаведением и блокировкой"},SeekerMissileRackMedium_Lockdown:{en:"Seeker Missile Rack — Lockdown",de:"Abriegelung-Suchraketenrampe",es:"Lanzamisiles guiado con bloqueo",fr:"Batterie de missiles TC à verrouillage",pt:"Estante de míssil guiado de precisão",ru:"Блок ракет с самонаведением и блокировкой"},Sensor_Expanded:{en:"Expanded Probe Scanning Radius",de:"Erweiterter Sonden-Scanradius",es:"Radio de escaneo de sonda ampliado",fr:"Rayon d'analyse de sonde augmenté",pt:"Expansão do raio de escaneamento da sonda",ru:"Увеличение радиуса сканирования зондов"},Sensor_FastScan:{en:"Fast scan",de:"Schnellscanner",es:"Escáner rápido",fr:"Détecteur analyse rapide",pt:"Scanner Rápido",ru:"Быстрый сканер"},Sensor_LightWeight:{en:"Lightweight",de:"Leichter Scanner",es:"Escáner ligero",fr:"Détecteur allégé",pt:"Scanner Leve",ru:"Облегченный сканер"},Sensor_LongRange:{en:"Long range",de:"Ferndistanzscanner",es:"Escáner de largo alcance",fr:"Détecteur à longue portée",pt:"Scanner de longa distância",ru:"Сканер дальнего действия"},Sensor_WideAngle:{en:"Wide angle",de:"Weitwinkelscanner",es:"Escáner de estelas de ángulo amplio",fr:"Détecteur grand-angle",pt:"Scanner de Ângulo Amplo",ru:"Широкоугольный сканер"},ShieldBooster_Explosive:{en:"Blast resistant",de:"Detonationsresistenter Schild-Booster",es:"Potenciador de escudos de resistencia explosiva",fr:"Survolteur de bouclier anti-explosions",pt:"Potenciador de Escudo de resistência a Explosões",ru:"Взрывостойкий усилитель щита"},ShieldBooster_HeavyDuty:{en:"Heavy duty",de:"Schwerer Schild-Booster",es:"Potenciador de escudos de alta resistencia",fr:"Survolteur de bouclier lourd",pt:"Potenciador de escudo Pesado",ru:"Надежный усилитель щита"},ShieldBooster_Kinetic:{en:"Kinetic resistant",de:"Kinetikresistenter Schild-Booster",es:"Potenciador de escudos de resistencia cinética",fr:"Survolteur de bouclier anti-cinétique",pt:"Potenciador de Escudo de Resistência Cinética",ru:"Противокинетический усилитель щита"},ShieldBooster_Resistive:{en:"Resistance augmented",de:"Widerstandsverstärkter Schild-Booster",es:"Potenciador de escudos de resistencia aumentada",fr:"Survolteur de bouclier à résistance améliorée",pt:"Potenciador de Escudo com Resistência Aumentada",ru:"Усилитель щита с универсальной защитой"},ShieldBooster_Thermic:{en:"Thermal resistant",de:"Thermalresistenter Schild-Booster",es:"Potenciador de escudos de resistencia térmica",fr:"Survolteur de bouclier antithermique",pt:"Potenciador de Escudo de Resistência Térmica",ru:"Термостойкий усилитель щита"},ShieldCellBank_Rapid:{en:"Rapid charge",de:"Schnell aufladende Schildzellenbank",es:"Acumulador de células de escudo de recarga rápida",fr:"Réserve de cellules d'énergie à chargement rapide",pt:"Banco de Célula de Escudo de Carga Rápida",ru:"Щитонакопитель быстрой зарядки"},ShieldCellBank_Specialised:{en:"Specialised",de:"Spezielle Schildzellenbank",es:"Acumulador de células de escudo especializado",fr:"Réserve de cellules d'énergie spécialisées",pt:"Banco de Célula de Escudo Especializado",ru:"Адаптивный щитонакопитель"},ShieldGenerator_Kinetic:{en:"Kinetic resistant",de:"Kinetikresistente Schilde",es:"Escudos de resistencia cinética",fr:"Bouclier anti-cinétique",pt:"Escudos de Resistência Cinética",ru:"Противокинетические щиты"},ShieldGenerator_Optimised:{en:"Enhanced low power",de:"Verbesserte Niedrigenergieschilde",es:"Escudos mejorados de baja energía",fr:"Bouclier amélioré à consommation réduite",pt:"Escudos de Baixo Consumo, Aprimorados",ru:"Усиленные энергосберегающие щиты"},ShieldGenerator_Reinforced:{en:"Reinforced",de:"Verstärkte Schilde",es:"Escudos reforzados",fr:"Bouclier renforcé",pt:"Escudos Reforçados",ru:"Усиленные щиты"},ShieldGenerator_Thermic:{en:"Thermal resistant",de:"Thermalresistente Schilde",es:"Escudos de resistencia térmica",fr:"Bouclier antithermique",pt:"Escudos de Resistência Térmica",ru:"Термостойкие щиты"},Weapon_DoubleShot:{en:"Double shot",de:"Doppelschuss",es:"Doble disparo",fr:"Tir double",pt:"Tiro Duplo",ru:"Двойной выстрел"},Weapon_Efficient:{en:"Efficient",de:"Waffeneffizienz",es:"Arma eficiente",fr:"Arme efficace",pt:"Arma Eficiente",ru:"Эффективное орудие"},Weapon_Focused:{en:"Focused",de:"Waffenfokus",es:"Arma concentrada",fr:"Arme concentrée",pt:"Arma com Foco",ru:"Точное орудие"},Weapon_HighCapacity:{en:"High capacity",de:"Hochleistungsmagazin",es:"Cargador de alta capacidad",fr:"Chargeur grande capacité",pt:"Cartucho de Alta Capacidade",ru:"Вместительный магазин"},Weapon_LightWeight:{en:"Lightweight",de:"Leichtgewichtgeschütz",es:"Anclaje ligero",fr:"Support ultraléger",pt:"Encaixe Leve",ru:"Легкое крепление"},Weapon_LongRange:{en:"Long range",de:"Ferndistanzwaffe",es:"Arma de largo alcance",fr:"Arme à longue portée",pt:"Arma de longa distância",ru:"Дальнобойное орудие"},Weapon_Overcharged:{en:"Overcharged",de:"Überladungswaffe",es:"Arma sobrecargada",fr:"Arme surchargée",pt:"Arma Sobrecarregada",ru:"Усиленное орудие"},Weapon_RapidFire:{en:"Rapid fire",de:"Schnellfeuermodifikation",es:"Modificación de tiro rápido",fr:"Modification de cadence rapide",pt:"Modificação de Disparo Rápido",ru:"Улучшение скорострельности"},Weapon_ShortRange:{en:"Short range",de:"Kurzdistanzblaster",es:"Destructor de corto alcance",fr:"Tir à courte portée",pt:"Disparo de Curto Alcance",ru:"Бластер малого радиуса действия"},Weapon_Sturdy:{en:"Sturdy",de:"Robustes Gestell",es:"Anclaje robusto",fr:"Support robuste",pt:"Encaixe Robusto",ru:"Прочное крепление"}};var BLUEPRINT_NAMES=/* @__PURE__ */createLocalizedNameIndex(blueprint_names_default);function getBlueprintName(fdname,locale){return getLocalizedName(BLUEPRINT_NAMES,fdname,locale,"getBlueprintName","fdname")}export{getBlueprintName};//# sourceMappingURL=chunk-Z6XMXMVI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/blueprints.ts"],"names":["getLocalizedName","createLocalizedNameIndex","blueprint_names_default","BLUEPRINT_NAMES","getBlueprintName","fdname","locale"],"mappings":"O,
|
|
1
|
+
{"version":3,"sources":["../src/i18n/blueprints.ts"],"names":["getLocalizedName","createLocalizedNameIndex","blueprint_names_default","BLUEPRINT_NAMES","getBlueprintName","fdname","locale"],"mappings":"O,88tBASA,IAAMG,+BAAkCF,yBACpCC,yBA8BG,SAASE,iBAAiBC,OAAgBC,QAC7C,OAAON,iBAAiBG,gBAAiBE,OAAQC,OAAQ,mBAAoB,SACjF,QAAAF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{loadoutSlotName}from"./chunk-KAA4VOOB.js";import{SLOT_RESTRICTION_LABELS}from"./chunk-RAO35XDF.js";import{getLocalizedText}from"./chunk-
|
|
1
|
+
import{loadoutSlotName}from"./chunk-KAA4VOOB.js";import{SLOT_RESTRICTION_LABELS}from"./chunk-RAO35XDF.js";import{getLocalizedText}from"./chunk-RVIYOHYF.js";import{requireObject}from"./chunk-PKWVG2JY.js";function getLoadoutSlotName(slot,locale){requireObject(slot,"getLoadoutSlotName: slot");const name=loadoutSlotName(slot);return getLocalizedText(typeof name==="string"?{en:name}:null,locale,"getLoadoutSlotName")}function getSlotRestrictionLabel(restriction,locale){const label=Object.hasOwn(SLOT_RESTRICTION_LABELS,restriction)?SLOT_RESTRICTION_LABELS[restriction]:void 0;return getLocalizedText(label===void 0?null:{en:label},locale,"getSlotRestrictionLabel")}export{getLoadoutSlotName,getSlotRestrictionLabel};//# sourceMappingURL=chunk-ZRG35JSH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{combinedRateOfFire}from"./chunk-LJI7VXJD.js";import{builtInModuleBySymbol,getModuleBySymbol}from"./chunk-UPUC5X2C.js";import{getPreEngineeredVariants}from"./chunk-2VPVZELZ.js";import{ALL_MODULES}from"./chunk-PEHOKSSD.js";import{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"./chunk-JPBMRJFC.js";import{fieldForLabel,baseStats,computeModifiers,labelsForDamageType,scaleForLabel,preciseModifierValue,capabilityValueForLabel}from"./chunk-DYPOL3CI.js";import{resolveBlueprintForModule}from"./chunk-2TW4ZBI3.js";import{getBlueprintsForModule,getExperimentalsForModule,getEngineeringGroup}from"./chunk-QTZPA2FR.js";import{getBlueprintGrade,getBlueprint,BLUEPRINTS}from"./chunk-Q3QCLNVG.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";function scaleDamageComponents(components,baseDamage,effectiveDamage){const scale=baseDamage!==void 0&&baseDamage!==0&&effectiveDamage!==void 0?effectiveDamage/baseDamage:1;return{...components.kinetic===void 0?{}:{kinetic:components.kinetic*scale},...components.thermal===void 0?{}:{thermal:components.thermal*scale},...components.explosive===void 0?{}:{explosive:components.explosive*scale},...components.absolute===void 0?{}:{absolute:components.absolute*scale},...components.antiXeno===void 0?{}:{antiXeno:components.antiXeno*scale},...components.unclassified===void 0?{}:{unclassified:components.unclassified.map(value=>value*scale)}}}function fixedModifierFeatures(modifiers){return modifiers.map(modifier=>({label:modifier.label,method:modifier.method,min:modifier.value,max:modifier.value}))}var FITTED_ITEM="ShipLoadout: fitted module Item";function isNonOutfittingSlot(slotKey){return/^(paintjob|shipname\d+|shipid\d+|bobble\d+|decal\d+|shipkit.+|weaponcolour|enginecolour|vesselvoice|shipcockpit|stringlights)$/i.test(slotKey)}function isCargoHatchSlot(slotKey){return slotKey.toLowerCase()==="cargohatch"}function isBuiltInHullModule(module){return isCargoHatchSlot(module.Slot)&&module.Item.toLowerCase().startsWith("modularcargobaydoor")}function cloneLoadoutModule(module){return{Slot:module.Slot,Item:module.Item,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health},...module.Value===void 0?{}:{Value:module.Value},...module.Engineering===void 0?{}:{Engineering:{BlueprintName:module.Engineering.BlueprintName,Level:module.Engineering.Level,Quality:module.Engineering.Quality,...module.Engineering.ExperimentalEffect===void 0?{}:{ExperimentalEffect:module.Engineering.ExperimentalEffect},...module.Engineering.ExperimentalEffect_Localised===void 0?{}:{ExperimentalEffect_Localised:module.Engineering.ExperimentalEffect_Localised},...module.Engineering.Modifiers===void 0?{}:{Modifiers:module.Engineering.Modifiers.map(modifier=>({...modifier}))}}}}}function matchingKeyIn(keyed,slotKey){if(keyed.has(slotKey))return slotKey;const wanted=slotKey.toLowerCase();for(const key of keyed.keys()){if(key.toLowerCase()===wanted)return key}return null}function ownKeyIn(keyed,canonicalKey){return matchingKeyIn(keyed,canonicalKey)??(keyed.size>0&&[...keyed.keys()].every(key=>key===key.toLowerCase())?canonicalKey.toLowerCase():canonicalKey)}function orderBySlotLayout(values,layout,slotOf){const order=new Map(layout.map((slot,index)=>[slot.key.toLowerCase(),index]));return[...values].sort((left,right)=>(order.get(slotOf(left).toLowerCase())??Number.MAX_SAFE_INTEGER)-(order.get(slotOf(right).toLowerCase())??Number.MAX_SAFE_INTEGER))}function cloneModuleStats(module){try{return deepFreeze(structuredClone(module))}catch(error){if(!(error instanceof Error&&error.name==="DataCloneError"))throw error;return deepFreeze({...module,...module.restrictedToShips===void 0?{}:{restrictedToShips:[...module.restrictedToShips]},...module.limitIncrease===void 0?{}:{limitIncrease:{...module.limitIncrease}},...module.damageDistribution===void 0?{}:{damageDistribution:{...module.damageDistribution}},...module.damageComponents===void 0?{}:{damageComponents:{...module.damageComponents,...module.damageComponents.unclassified===void 0?{}:{unclassified:[...module.damageComponents.unclassified]}}},...module.projectileRange===void 0?{}:{projectileRange:{...module.projectileRange}}})}}var GUARDIAN_WEAPON_GROUPS=/* @__PURE__ */new Set(["guardianGauss","guardianPlasma","guardianShard"]);function missingBaseLabels(stats,base,features,experimental){const contributions=[...features,...experimental??[]];return[...new Set(contributions.map(contribution=>contribution.label).filter(label=>{if(base[label]!==void 0)return false;return fieldForLabel(label,stats)===null}))]}function recipeSignature(fdname){const blueprint=getBlueprint(fdname);if(!blueprint)return null;const grades=Object.entries(blueprint.grades).map(([grade,{features:features}])=>`${grade}:${features.map(feature=>`${feature.label}/${feature.method??""}`).sort().join(",")}`).sort().join(";");return`${blueprint.name.toLowerCase()}|${grades}`}var isGenericSpelling=fdname=>fdname.toLowerCase().startsWith("misc_");function isSoldWithBlueprint(item,wanted){return getPreEngineeredVariants(item).some(variant=>variant.acquisition==="mercenary"&&variant.blueprint.toLowerCase()===wanted)}function blueprintRoutesFor(item){const routes=/* @__PURE__ */new Map;for(const fdname of getBlueprintsForModule(item))routes.set(fdname,"ordinary");for(const variant of getPreEngineeredVariants(item)){if(variant.acquisition==="mercenary"&&!routes.has(variant.blueprint)){routes.set(variant.blueprint,"mercenary")}}return routes}function blueprintAvailableFor(item,fdname){const offered=getBlueprintsForModule(item);const asWritten=normalizeKey(fdname,"ShipLoadout.applyBlueprint: fdname");const resolved=resolveBlueprintForModule(item,fdname).trim();const wanted=resolved.toLowerCase();if(offered.some(id=>id.toLowerCase()===wanted))return true;if(isSoldWithBlueprint(item,wanted)||isSoldWithBlueprint(item,asWritten))return true;if(!isGenericSpelling(wanted))return false;const signature=recipeSignature(resolved);if(signature===null)return false;return offered.some(id=>recipeSignature(id)===signature&&!isGenericSpelling(id))}function experimentalAvailableFor(item,fdname){const wanted=normalizeKey(fdname,"ShipLoadout.applyBlueprint: options.experimental");return getExperimentalsForModule(item).some(id=>id.toLowerCase()===wanted)}function primitiveLabelFor(stats,label){if(label==="MaximumRange"&&stats.maximumRange!==void 0)return"Range";if(label==="DamageFalloffRange"&&stats.falloffRange!==void 0){return"FalloffRange"}if(label==="Range"&&stats.scannerRange!==void 0)return"ScannerRange";if(label==="DSS_PatchRadius")return"ProbeRadius";if(label==="FuelScoopRate")return"RefuelRate";if(label==="EnergyPerRegen"&&stats.shieldRegenRate!==void 0){return"DistributorDraw"}return label}function primitiveEngineeringInputsFor(stats,grade,experimental){const canonicalGrade={...grade,features:grade.features.map(feature=>{const label=primitiveLabelFor(stats,feature.label);return label===feature.label?feature:{...feature,label:label}})};if(!experimental)return{grade:canonicalGrade};return{grade:canonicalGrade,experimental:{...experimental,modifiers:experimental.modifiers.map(modifier=>{const label=primitiveLabelFor(stats,modifier.label);return label===modifier.label?modifier:{...modifier,label:label}})}}}function matchesCalculatedModifiers(captured,calculated){if(!captured||captured.length!==calculated.length)return false;const byLabel=new Map(captured.map(modifier=>[modifier.Label.trim().toLowerCase(),modifier]));if(byLabel.size!==captured.length)return false;return calculated.every(expected=>{const actual=byLabel.get(expected.Label.trim().toLowerCase());if(!actual)return false;if(expected.Value!==void 0){return actual.Value!==void 0&&Math.abs(actual.Value-expected.Value)<=1e-5*Math.max(1,Math.abs(expected.Value))}return actual.ValueStr===expected.ValueStr})}function ordinaryEngineeringProof(item,engineering,experimental){const recipe=resolveBlueprintForModule(item,engineering.BlueprintName);const fixedCandidate=getPreEngineeredVariants(item).some(candidate=>candidate.acquisition!=="mercenary"&&candidate.blueprint.trim().toLowerCase()===recipe.trim().toLowerCase());if(!fixedCandidate)return"notFixedCandidate";const grade=getBlueprintGrade(recipe,engineering.Level);const quality=engineering.Quality;const stock=builtInModuleBySymbol(item,FITTED_ITEM);if(!stock||!grade||experimental===null||!Number.isFinite(quality)||quality<0||quality>1){return"unproven"}const current=primitiveEngineeringInputsFor(stock,grade,experimental);if(missingBaseLabels(stock,baseStats(stock),current.grade.features,current.experimental?.modifiers).length>0){return"unproven"}const calculated=journalModifiersFor(stock,computeModifiers(baseStats(stock),current.grade,quality,current.experimental));const damageDistribution=current.experimental?.damageDistribution??current.grade.damageDistribution;if(damageDistribution){for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];if(value===void 0)continue;const label=labelsForDamageType(type)[0];if(label===void 0)continue;calculated.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(stock.damageDistribution?.[type]??0)*scaleForLabel(label)})}}return matchesCalculatedModifiers(engineering.Modifiers,calculated)?"proven":"unproven"}var round6=value=>{const rounded=Math.round(value*1e6)/1e6;return Object.is(rounded,-0)?0:rounded};function float32FiringCycle(interval,burstRounds,burstRateOfFire){if(interval<=0)return void 0;const withinBurst=burstRounds>1?Math.fround(Math.fround(burstRounds-1)/Math.fround(burstRateOfFire)):0;const cycle=Math.fround(withinBurst+Math.fround(interval));return cycle>0?cycle:void 0}function float32RateOfFire(interval,burstRounds,burstRateOfFire){const cycle=float32FiringCycle(interval,burstRounds,burstRateOfFire);return cycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/cycle)}function float32DamagePerSecond(damage,rounds,rate,burstRounds,cycle){if(cycle!==void 0&&(rounds!==1||burstRounds!==1)){const damagePerCycle=Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(burstRounds));return Math.fround(damagePerCycle/cycle)}return Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(rate))}var JOURNAL_MODIFIER_ORDER=["CargoCapacity","GuardianModuleResistance","Mass","Integrity","PowerDraw","BootTime","PowerCapacity","HeatEfficiency","FSDOptimalMass","MaxFuelPerJump","FSDHeatRate","EngineOptimalMass","EngineOptPerformance","EngineHeatRate","ShieldGenOptimalMass","ShieldGenStrength","DamagePerSecond","Damage","DistributorDraw","ThermalLoad","ArmourPenetration","MaximumRange","ShotSpeed","RateOfFire","DamageType","$Kinetic;","$Thermal;","$Explosive;","$Absolute;","AmmoClipSize","AmmoMaximum","ReloadTime","Jitter","DamageFalloffRange","DefenceModifierShieldMultiplier","DefenceModifierHealthMultiplier","DefenceModifierHealthAddition","DefenceModifierShieldAddition","RegenRate","BrokenRegenRate","EnergyPerRegen","KineticResistance","ThermicResistance","ExplosiveResistance","CausticResistance","DamageProtection","ModuleDefenceAbsorption","WeaponsCapacity","WeaponsRecharge","EnginesCapacity","EnginesRecharge","SystemsCapacity","SystemsRecharge","ShieldBankSpinUp","ShieldBankDuration","ShieldBankReinforcement","ShieldBankHeat","FSDInterdictorRange","FSDInterdictorFacingLimit","SensorTargetScanAngle","MaxAngle","ScannerTimeToScan","Range","DSS_PatchRadius","FuelScoopRate","FuelCapacity"];var JOURNAL_MODIFIER_RANK=new Map(JOURNAL_MODIFIER_ORDER.map((label,index)=>[label,index]));function sortJournalModifiers(modifiers){return modifiers.map((modifier,index)=>({modifier:modifier,index:index})).sort((a,b)=>(JOURNAL_MODIFIER_RANK.get(a.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)-(JOURNAL_MODIFIER_RANK.get(b.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)||a.index-b.index).map(({modifier:modifier})=>modifier)}function journalModifiersFor(stats,modifiers){const weapon=stats.damage!==void 0;const valueFor=(label,fallback)=>{const modifier=modifiers.find(candidate=>candidate.Label===label);return(modifier&&preciseModifierValue(modifier))??Math.fround(fallback)};const burstTouched=["BurstInterval","BurstSize","BurstRateOfFire"].some(label=>modifiers.some(modifier=>modifier.Label===label));const damageTouched=modifiers.some(modifier=>modifier.Label==="Damage");const rateTouched=burstTouched||modifiers.some(modifier=>modifier.Label==="RateOfFire");let damagePerSecond;let derivedRate;if(weapon&&(damageTouched||rateTouched)){const continuous=stats.burstInterval===void 0&&stats.rateOfFire===void 0;const baseDamage=Math.fround(stats.damage);const effectiveDamage=valueFor("Damage",stats.damage);if(continuous){damagePerSecond={Label:"DamagePerSecond",Value:round6(effectiveDamage),OriginalValue:round6(baseDamage)}}else{const burstRounds=valueFor("BurstSize",stats.burstRounds??1);const burstRate=valueFor("BurstRateOfFire",stats.burstRateOfFire??1);const baseBurstRounds=Math.fround(stats.burstRounds??1);const baseBurstRate=Math.fround(stats.burstRateOfFire??1);const baseInterval=stats.burstInterval===void 0?void 0:Math.fround(stats.burstInterval);const baseCycle=baseInterval===void 0?void 0:float32FiringCycle(baseInterval,baseBurstRounds,baseBurstRate);const baseRate=baseInterval!==void 0?float32RateOfFire(baseInterval,baseBurstRounds,baseBurstRate):stats.rateOfFire===void 0?void 0:Math.fround(stats.rateOfFire);const rateModifier=modifiers.find(modifier=>modifier.Label==="RateOfFire");const effectiveRate=rateModifier&&preciseModifierValue(rateModifier);const effectiveInterval=valueFor("BurstInterval",stats.burstInterval??0);const effectiveCycle=effectiveRate===void 0?float32FiringCycle(effectiveInterval,burstRounds,burstRate):void 0;const rate=effectiveRate??(effectiveCycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/effectiveCycle));if(baseRate!==void 0&&rate!==void 0){const stockRounds=Math.fround(stats.roundsPerShot??1);const effectiveRounds=Math.fround(modifiers.find(modifier=>modifier.Label==="Rounds"||modifier.Label==="RoundsPerShot")?.Value??stockRounds);damagePerSecond={Label:"DamagePerSecond",Value:round6(float32DamagePerSecond(effectiveDamage,effectiveRounds,rate,burstRounds,effectiveCycle)),OriginalValue:round6(float32DamagePerSecond(baseDamage,stockRounds,baseRate,baseBurstRounds,baseCycle))};if(burstTouched){derivedRate={Label:"RateOfFire",Value:round6(rate),OriginalValue:round6(baseRate)}}}}}const result=[];for(const modifier of modifiers){const label=modifier.Label;if(weapon&&["BurstInterval","BurstSize","BurstRateOfFire"].includes(label))continue;if(weapon&&label==="Damage"&&stats.rateOfFire===void 0)continue;let journalLabel=label;if(label==="Range"&&stats.maximumRange!==void 0)journalLabel="MaximumRange";else if(label==="FalloffRange"&&stats.falloffRange!==void 0){journalLabel="DamageFalloffRange"}else if(label==="ScannerRange"&&stats.scannerRange!==void 0){journalLabel="Range"}else if(label==="ProbeRadius")journalLabel="DSS_PatchRadius";else if(label==="RefuelRate")journalLabel="FuelScoopRate";else if(label==="DistributorDraw"&&stats.shieldRegenRate!==void 0){journalLabel="EnergyPerRegen"}result.push(journalLabel===label?modifier:{...modifier,Label:journalLabel})}if(damagePerSecond)result.push(damagePerSecond);if(derivedRate){const direct=result.findIndex(modifier=>modifier.Label==="RateOfFire");if(direct>=0)result[direct]=derivedRate;else result.push(derivedRate)}return sortJournalModifiers(result)}function isFinalGuardianWeaponEngineering(item,blueprint){const group=getEngineeringGroup(item);if(group===null||!GUARDIAN_WEAPON_GROUPS.has(group))return false;const resolved=resolveBlueprintForModule(item,blueprint);return getBlueprint(resolved)!==null&&!blueprintAvailableFor(item,blueprint)}function engineerableBase(item,statsOverride){const stats=statsOverride??builtInModuleBySymbol(item,FITTED_ITEM);if(!stats||stats.engineeringLocked)return null;return{stats:stats,base:baseStats(stats)}}function availableBlueprintsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;const available=[];for(const[fdname,route]of blueprintRoutesFor(item)){const blueprint=BLUEPRINTS[fdname];if(!blueprint)continue;const grades=Object.entries(blueprint.grades).filter(([,grade])=>missingBaseLabels(stats,base,grade.features).length===0).map(([grade])=>Number(grade)).filter(Number.isFinite).sort((a,b)=>a-b);if(grades.length>0)available.push({fdname:fdname,grades:grades,route:route})}return available}function availableExperimentalsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;return getExperimentalsForModule(item).filter(fdname=>{const effect=EXPERIMENTAL_EFFECTS[fdname];return effect!==void 0&&missingBaseLabels(stats,base,effect.modifiers).length===0})}var MAX_ENGINEERING_GRADE=5;function modifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);const effectName=experimental===void 0?variant.experimental:experimental;if(!module||!variant.modifiers?.length&&effectName==null)return null;const effect=effectName==null?void 0:getExperimentalEffect(effectName);if(effectName!==null&&effectName!==void 0&&!effect)return null;return computeModifiers(baseStats(module),fixedModifierFeatures(variant.modifiers??[]),1,effect??void 0)}function getPreEngineeredModifiers(variant){return modifiersWithExperimental(variant)??[]}function journalModifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return[];const modifiers=journalModifiersFor(module,modifiersWithExperimental(variant,experimental)??[]);const effectName=experimental===void 0?variant.experimental:experimental;const damageDistribution=effectName?getExperimentalEffect(effectName)?.damageDistribution:void 0;if(!damageDistribution)return modifiers;for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];const label=labelsForDamageType(type)[0];if(value===void 0||label===void 0)continue;modifiers.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(module.damageDistribution?.[type]??0)*scaleForLabel(label)})}return modifiers}function getPreEngineeredJournalModifiers(variant){return journalModifiersWithExperimental(variant)}function sameJournalNumber(actual,expected){return Math.abs(actual-expected)<=Math.max(1e-5,Math.abs(expected)*1e-6)}function modifierKey(modifier,module){return fieldForLabel(modifier.Label,module)??`label:${normalizeKey(modifier.Label,"identifyPreEngineeredVariant: module.Engineering.Modifiers[].Label")}`}function sameModifier(actual,expected){if(expected.Value!==void 0){return actual.Value!==void 0&&sameJournalNumber(actual.Value,expected.Value)}return expected.ValueStr!==void 0&&actual.ValueStr!==void 0}function matchesModifierSignature(actualByKey,expected,module){let matched=0;for(const predicted of expected){const actual=actualByKey.get(modifierKey(predicted,module));if(!actual)continue;if(!sameModifier(actual,predicted))return false;matched++}return matched>=Math.max(1,expected.length-1)}function identifyPreEngineeredVariant(module){const engineering=module.Engineering;if(!engineering)return null;requireStringIfPresent(module.Item,"identifyPreEngineeredVariant: module.Item");const stock=getModuleBySymbol(module.Item,ALL_MODULES);if(!stock)return null;const capturedBlueprint=normalizeKey(engineering.BlueprintName,"identifyPreEngineeredVariant: module.Engineering.BlueprintName");const variants=getPreEngineeredVariants(module.Item);const blueprintMatches=variants.filter(candidate=>candidate.blueprint.toLowerCase()===capturedBlueprint);const blueprintMatch=blueprintMatches.length===1?blueprintMatches[0]:null;const capturedGrade=engineering.Level;if(blueprintMatch?.acquisition==="mercenary"&&Number.isInteger(capturedGrade)&&capturedGrade>=blueprintMatch.grade&&capturedGrade<=MAX_ENGINEERING_GRADE){return blueprintMatch}if(engineering.Modifiers===void 0){const capturedExperimental=normalizeKey(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const identityMatches=blueprintMatches.filter(candidate=>candidate.engineeringLocked===true&&candidate.grade===capturedGrade&&(candidate.experimental===void 0?capturedExperimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimental.toLowerCase()===capturedExperimental));return identityMatches.length===1?identityMatches[0]:null}if(!engineering.Modifiers?.length)return null;const actualByKey=/* @__PURE__ */new Map;for(const modifier of engineering.Modifiers){actualByKey.set(modifierKey(modifier,stock),modifier)}requireStringIfPresent(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const matches=[];for(const candidate of variants){if(!candidate.modifiers?.length)continue;if(candidate.grade!==engineering.Level)continue;if(candidate.acquisition==="eventReward"&&(engineering.ExperimentalEffect!==void 0||engineering.ExperimentalEffect_Localised!==void 0||capturedBlueprint!==candidate.blueprint.toLowerCase())){continue}const primitive=modifiersWithExperimental(candidate,engineering.ExperimentalEffect??null);if(!primitive?.length)continue;const matched=matchesModifierSignature(actualByKey,primitive,stock)||matchesModifierSignature(actualByKey,journalModifiersWithExperimental(candidate,engineering.ExperimentalEffect??null),stock);if(matched)matches.push(candidate)}return matches.length===1?matches[0]:null}function unresolvedModifiers(variant){const resolved=new Set(getPreEngineeredModifiers(variant).map(modifier=>modifier.Label));return(variant.modifiers??[]).map(modifier=>modifier.label).filter(label=>!resolved.has(label))}function getPreEngineeredStats(variant){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return null;if(!variant.modifiers?.length&&!variant.engineeringLocked&&variant.experimental===void 0)return module;const modifiers=variant.modifiers??[];const resolved={...module,...variant.engineeringLocked?{engineeringLocked:true}:{}};for(const{Label:Label,Value:Value,ValueStr:ValueStr}of getPreEngineeredModifiers(variant)){const field=fieldForLabel(Label,module);if(field&&field!=="damageDistribution"&&Value!==void 0){Object.assign(resolved,{[field]:Value/scaleForLabel(Label)})}else if(field&&ValueStr!==void 0&&capabilityValueForLabel(Label)!==null){Object.assign(resolved,{[field]:true})}}const experimentalDamageDistribution=variant.experimental?getExperimentalEffect(variant.experimental)?.damageDistribution:void 0;if(experimentalDamageDistribution){resolved.damageDistribution={...experimentalDamageDistribution};delete resolved.damageComponents}if(resolved.rateOfFire!==void 0&&!modifiers.some(m=>m.label==="RateOfFire")&&modifiers.some(m=>m.label==="BurstSize"||m.label==="BurstRateOfFire"||m.label==="BurstInterval")){const rate=combinedRateOfFire(resolved);if(rate!==void 0)resolved.rateOfFire=rate}if(module.damageComponents&&!experimentalDamageDistribution){resolved.damageComponents=scaleDamageComponents(module.damageComponents,module.damage,resolved.damage)}return resolved}export{FITTED_ITEM,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,cloneLoadoutModule,cloneModuleStats,experimentalAvailableFor,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,isBuiltInHullModule,isCargoHatchSlot,isFinalGuardianWeaponEngineering,isNonOutfittingSlot,journalModifiersFor,matchingKeyIn,missingBaseLabels,orderBySlotLayout,ordinaryEngineeringProof,ownKeyIn,primitiveEngineeringInputsFor,scaleDamageComponents,unresolvedModifiers};//# sourceMappingURL=chunk-BZDTEXXM.js.map
|
|
1
|
+
import{combinedRateOfFire}from"./chunk-LJI7VXJD.js";import{builtInModuleBySymbol,getModuleBySymbol}from"./chunk-LLHGSBPI.js";import{getPreEngineeredVariants}from"./chunk-2VPVZELZ.js";import{ALL_MODULES}from"./chunk-VDVFJXX5.js";import{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"./chunk-JPBMRJFC.js";import{fieldForLabel,baseStats,computeModifiers,labelsForDamageType,scaleForLabel,preciseModifierValue,capabilityValueForLabel}from"./chunk-DYPOL3CI.js";import{resolveBlueprintForModule}from"./chunk-2TW4ZBI3.js";import{getBlueprintsForModule,getExperimentalsForModule,getEngineeringGroup}from"./chunk-QTZPA2FR.js";import{getBlueprintGrade,getBlueprint,BLUEPRINTS}from"./chunk-Q3QCLNVG.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";function scaleDamageComponents(components,baseDamage,effectiveDamage){const scale=baseDamage!==void 0&&baseDamage!==0&&effectiveDamage!==void 0?effectiveDamage/baseDamage:1;return{...components.kinetic===void 0?{}:{kinetic:components.kinetic*scale},...components.thermal===void 0?{}:{thermal:components.thermal*scale},...components.explosive===void 0?{}:{explosive:components.explosive*scale},...components.absolute===void 0?{}:{absolute:components.absolute*scale},...components.antiXeno===void 0?{}:{antiXeno:components.antiXeno*scale},...components.unclassified===void 0?{}:{unclassified:components.unclassified.map(value=>value*scale)}}}function fixedModifierFeatures(modifiers){return modifiers.map(modifier=>({label:modifier.label,method:modifier.method,min:modifier.value,max:modifier.value}))}var FITTED_ITEM="ShipLoadout: fitted module Item";function isNonOutfittingSlot(slotKey){return/^(paintjob|shipname\d+|shipid\d+|bobble\d+|decal\d+|shipkit.+|weaponcolour|enginecolour|vesselvoice|shipcockpit|stringlights)$/i.test(slotKey)}function isCargoHatchSlot(slotKey){return slotKey.toLowerCase()==="cargohatch"}function isBuiltInHullModule(module){return isCargoHatchSlot(module.Slot)&&module.Item.toLowerCase().startsWith("modularcargobaydoor")}function cloneLoadoutModule(module){return{Slot:module.Slot,Item:module.Item,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health},...module.Value===void 0?{}:{Value:module.Value},...module.Engineering===void 0?{}:{Engineering:{BlueprintName:module.Engineering.BlueprintName,Level:module.Engineering.Level,Quality:module.Engineering.Quality,...module.Engineering.ExperimentalEffect===void 0?{}:{ExperimentalEffect:module.Engineering.ExperimentalEffect},...module.Engineering.ExperimentalEffect_Localised===void 0?{}:{ExperimentalEffect_Localised:module.Engineering.ExperimentalEffect_Localised},...module.Engineering.Modifiers===void 0?{}:{Modifiers:module.Engineering.Modifiers.map(modifier=>({...modifier}))}}}}}function matchingKeyIn(keyed,slotKey){if(keyed.has(slotKey))return slotKey;const wanted=slotKey.toLowerCase();for(const key of keyed.keys()){if(key.toLowerCase()===wanted)return key}return null}function ownKeyIn(keyed,canonicalKey){return matchingKeyIn(keyed,canonicalKey)??(keyed.size>0&&[...keyed.keys()].every(key=>key===key.toLowerCase())?canonicalKey.toLowerCase():canonicalKey)}function orderBySlotLayout(values,layout,slotOf){const order=new Map(layout.map((slot,index)=>[slot.key.toLowerCase(),index]));return[...values].sort((left,right)=>(order.get(slotOf(left).toLowerCase())??Number.MAX_SAFE_INTEGER)-(order.get(slotOf(right).toLowerCase())??Number.MAX_SAFE_INTEGER))}function cloneModuleStats(module){try{return deepFreeze(structuredClone(module))}catch(error){if(!(error instanceof Error&&error.name==="DataCloneError"))throw error;return deepFreeze({...module,...module.restrictedToShips===void 0?{}:{restrictedToShips:[...module.restrictedToShips]},...module.limitIncrease===void 0?{}:{limitIncrease:{...module.limitIncrease}},...module.damageDistribution===void 0?{}:{damageDistribution:{...module.damageDistribution}},...module.damageComponents===void 0?{}:{damageComponents:{...module.damageComponents,...module.damageComponents.unclassified===void 0?{}:{unclassified:[...module.damageComponents.unclassified]}}},...module.projectileRange===void 0?{}:{projectileRange:{...module.projectileRange}}})}}var GUARDIAN_WEAPON_GROUPS=/* @__PURE__ */new Set(["guardianGauss","guardianPlasma","guardianShard"]);function missingBaseLabels(stats,base,features,experimental){const contributions=[...features,...experimental??[]];return[...new Set(contributions.map(contribution=>contribution.label).filter(label=>{if(base[label]!==void 0)return false;return fieldForLabel(label,stats)===null}))]}function recipeSignature(fdname){const blueprint=getBlueprint(fdname);if(!blueprint)return null;const grades=Object.entries(blueprint.grades).map(([grade,{features:features}])=>`${grade}:${features.map(feature=>`${feature.label}/${feature.method??""}`).sort().join(",")}`).sort().join(";");return`${blueprint.name.toLowerCase()}|${grades}`}var isGenericSpelling=fdname=>fdname.toLowerCase().startsWith("misc_");function isSoldWithBlueprint(item,wanted){return getPreEngineeredVariants(item).some(variant=>variant.acquisition==="mercenary"&&variant.blueprint.toLowerCase()===wanted)}function blueprintRoutesFor(item){const routes=/* @__PURE__ */new Map;for(const fdname of getBlueprintsForModule(item))routes.set(fdname,"ordinary");for(const variant of getPreEngineeredVariants(item)){if(variant.acquisition==="mercenary"&&!routes.has(variant.blueprint)){routes.set(variant.blueprint,"mercenary")}}return routes}function blueprintAvailableFor(item,fdname){const offered=getBlueprintsForModule(item);const asWritten=normalizeKey(fdname,"ShipLoadout.applyBlueprint: fdname");const resolved=resolveBlueprintForModule(item,fdname).trim();const wanted=resolved.toLowerCase();if(offered.some(id=>id.toLowerCase()===wanted))return true;if(isSoldWithBlueprint(item,wanted)||isSoldWithBlueprint(item,asWritten))return true;if(!isGenericSpelling(wanted))return false;const signature=recipeSignature(resolved);if(signature===null)return false;return offered.some(id=>recipeSignature(id)===signature&&!isGenericSpelling(id))}function experimentalAvailableFor(item,fdname){const wanted=normalizeKey(fdname,"ShipLoadout.applyBlueprint: options.experimental");return getExperimentalsForModule(item).some(id=>id.toLowerCase()===wanted)}function primitiveLabelFor(stats,label){if(label==="MaximumRange"&&stats.maximumRange!==void 0)return"Range";if(label==="DamageFalloffRange"&&stats.falloffRange!==void 0){return"FalloffRange"}if(label==="Range"&&stats.scannerRange!==void 0)return"ScannerRange";if(label==="DSS_PatchRadius")return"ProbeRadius";if(label==="FuelScoopRate")return"RefuelRate";if(label==="EnergyPerRegen"&&stats.shieldRegenRate!==void 0){return"DistributorDraw"}return label}function primitiveEngineeringInputsFor(stats,grade,experimental){const canonicalGrade={...grade,features:grade.features.map(feature=>{const label=primitiveLabelFor(stats,feature.label);return label===feature.label?feature:{...feature,label:label}})};if(!experimental)return{grade:canonicalGrade};return{grade:canonicalGrade,experimental:{...experimental,modifiers:experimental.modifiers.map(modifier=>{const label=primitiveLabelFor(stats,modifier.label);return label===modifier.label?modifier:{...modifier,label:label}})}}}function matchesCalculatedModifiers(captured,calculated){if(!captured||captured.length!==calculated.length)return false;const byLabel=new Map(captured.map(modifier=>[modifier.Label.trim().toLowerCase(),modifier]));if(byLabel.size!==captured.length)return false;return calculated.every(expected=>{const actual=byLabel.get(expected.Label.trim().toLowerCase());if(!actual)return false;if(expected.Value!==void 0){return actual.Value!==void 0&&Math.abs(actual.Value-expected.Value)<=1e-5*Math.max(1,Math.abs(expected.Value))}return actual.ValueStr===expected.ValueStr})}function ordinaryEngineeringProof(item,engineering,experimental){const recipe=resolveBlueprintForModule(item,engineering.BlueprintName);const fixedCandidate=getPreEngineeredVariants(item).some(candidate=>candidate.acquisition!=="mercenary"&&candidate.blueprint.trim().toLowerCase()===recipe.trim().toLowerCase());if(!fixedCandidate)return"notFixedCandidate";const grade=getBlueprintGrade(recipe,engineering.Level);const quality=engineering.Quality;const stock=builtInModuleBySymbol(item,FITTED_ITEM);if(!stock||!grade||experimental===null||!Number.isFinite(quality)||quality<0||quality>1){return"unproven"}const current=primitiveEngineeringInputsFor(stock,grade,experimental);if(missingBaseLabels(stock,baseStats(stock),current.grade.features,current.experimental?.modifiers).length>0){return"unproven"}const calculated=journalModifiersFor(stock,computeModifiers(baseStats(stock),current.grade,quality,current.experimental));const damageDistribution=current.experimental?.damageDistribution??current.grade.damageDistribution;if(damageDistribution){for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];if(value===void 0)continue;const label=labelsForDamageType(type)[0];if(label===void 0)continue;calculated.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(stock.damageDistribution?.[type]??0)*scaleForLabel(label)})}}return matchesCalculatedModifiers(engineering.Modifiers,calculated)?"proven":"unproven"}var round6=value=>{const rounded=Math.round(value*1e6)/1e6;return Object.is(rounded,-0)?0:rounded};function float32FiringCycle(interval,burstRounds,burstRateOfFire){if(interval<=0)return void 0;const withinBurst=burstRounds>1?Math.fround(Math.fround(burstRounds-1)/Math.fround(burstRateOfFire)):0;const cycle=Math.fround(withinBurst+Math.fround(interval));return cycle>0?cycle:void 0}function float32RateOfFire(interval,burstRounds,burstRateOfFire){const cycle=float32FiringCycle(interval,burstRounds,burstRateOfFire);return cycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/cycle)}function float32DamagePerSecond(damage,rounds,rate,burstRounds,cycle){if(cycle!==void 0&&(rounds!==1||burstRounds!==1)){const damagePerCycle=Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(burstRounds));return Math.fround(damagePerCycle/cycle)}return Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(rate))}var JOURNAL_MODIFIER_ORDER=["CargoCapacity","GuardianModuleResistance","Mass","Integrity","PowerDraw","BootTime","PowerCapacity","HeatEfficiency","FSDOptimalMass","MaxFuelPerJump","FSDHeatRate","EngineOptimalMass","EngineOptPerformance","EngineHeatRate","ShieldGenOptimalMass","ShieldGenStrength","DamagePerSecond","Damage","DistributorDraw","ThermalLoad","ArmourPenetration","MaximumRange","ShotSpeed","RateOfFire","DamageType","$Kinetic;","$Thermal;","$Explosive;","$Absolute;","AmmoClipSize","AmmoMaximum","ReloadTime","Jitter","DamageFalloffRange","DefenceModifierShieldMultiplier","DefenceModifierHealthMultiplier","DefenceModifierHealthAddition","DefenceModifierShieldAddition","RegenRate","BrokenRegenRate","EnergyPerRegen","KineticResistance","ThermicResistance","ExplosiveResistance","CausticResistance","DamageProtection","ModuleDefenceAbsorption","WeaponsCapacity","WeaponsRecharge","EnginesCapacity","EnginesRecharge","SystemsCapacity","SystemsRecharge","ShieldBankSpinUp","ShieldBankDuration","ShieldBankReinforcement","ShieldBankHeat","FSDInterdictorRange","FSDInterdictorFacingLimit","SensorTargetScanAngle","MaxAngle","ScannerTimeToScan","Range","DSS_PatchRadius","FuelScoopRate","FuelCapacity"];var JOURNAL_MODIFIER_RANK=new Map(JOURNAL_MODIFIER_ORDER.map((label,index)=>[label,index]));function sortJournalModifiers(modifiers){return modifiers.map((modifier,index)=>({modifier:modifier,index:index})).sort((a,b)=>(JOURNAL_MODIFIER_RANK.get(a.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)-(JOURNAL_MODIFIER_RANK.get(b.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)||a.index-b.index).map(({modifier:modifier})=>modifier)}function journalModifiersFor(stats,modifiers){const weapon=stats.damage!==void 0;const valueFor=(label,fallback)=>{const modifier=modifiers.find(candidate=>candidate.Label===label);return(modifier&&preciseModifierValue(modifier))??Math.fround(fallback)};const burstTouched=["BurstInterval","BurstSize","BurstRateOfFire"].some(label=>modifiers.some(modifier=>modifier.Label===label));const damageTouched=modifiers.some(modifier=>modifier.Label==="Damage");const rateTouched=burstTouched||modifiers.some(modifier=>modifier.Label==="RateOfFire");let damagePerSecond;let derivedRate;if(weapon&&(damageTouched||rateTouched)){const continuous=stats.burstInterval===void 0&&stats.rateOfFire===void 0;const baseDamage=Math.fround(stats.damage);const effectiveDamage=valueFor("Damage",stats.damage);if(continuous){damagePerSecond={Label:"DamagePerSecond",Value:round6(effectiveDamage),OriginalValue:round6(baseDamage)}}else{const burstRounds=valueFor("BurstSize",stats.burstRounds??1);const burstRate=valueFor("BurstRateOfFire",stats.burstRateOfFire??1);const baseBurstRounds=Math.fround(stats.burstRounds??1);const baseBurstRate=Math.fround(stats.burstRateOfFire??1);const baseInterval=stats.burstInterval===void 0?void 0:Math.fround(stats.burstInterval);const baseCycle=baseInterval===void 0?void 0:float32FiringCycle(baseInterval,baseBurstRounds,baseBurstRate);const baseRate=baseInterval!==void 0?float32RateOfFire(baseInterval,baseBurstRounds,baseBurstRate):stats.rateOfFire===void 0?void 0:Math.fround(stats.rateOfFire);const rateModifier=modifiers.find(modifier=>modifier.Label==="RateOfFire");const effectiveRate=rateModifier&&preciseModifierValue(rateModifier);const effectiveInterval=valueFor("BurstInterval",stats.burstInterval??0);const effectiveCycle=effectiveRate===void 0?float32FiringCycle(effectiveInterval,burstRounds,burstRate):void 0;const rate=effectiveRate??(effectiveCycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/effectiveCycle));if(baseRate!==void 0&&rate!==void 0){const stockRounds=Math.fround(stats.roundsPerShot??1);const effectiveRounds=Math.fround(modifiers.find(modifier=>modifier.Label==="Rounds"||modifier.Label==="RoundsPerShot")?.Value??stockRounds);damagePerSecond={Label:"DamagePerSecond",Value:round6(float32DamagePerSecond(effectiveDamage,effectiveRounds,rate,burstRounds,effectiveCycle)),OriginalValue:round6(float32DamagePerSecond(baseDamage,stockRounds,baseRate,baseBurstRounds,baseCycle))};if(burstTouched){derivedRate={Label:"RateOfFire",Value:round6(rate),OriginalValue:round6(baseRate)}}}}}const result=[];for(const modifier of modifiers){const label=modifier.Label;if(weapon&&["BurstInterval","BurstSize","BurstRateOfFire"].includes(label))continue;if(weapon&&label==="Damage"&&stats.rateOfFire===void 0)continue;let journalLabel=label;if(label==="Range"&&stats.maximumRange!==void 0)journalLabel="MaximumRange";else if(label==="FalloffRange"&&stats.falloffRange!==void 0){journalLabel="DamageFalloffRange"}else if(label==="ScannerRange"&&stats.scannerRange!==void 0){journalLabel="Range"}else if(label==="ProbeRadius")journalLabel="DSS_PatchRadius";else if(label==="RefuelRate")journalLabel="FuelScoopRate";else if(label==="DistributorDraw"&&stats.shieldRegenRate!==void 0){journalLabel="EnergyPerRegen"}result.push(journalLabel===label?modifier:{...modifier,Label:journalLabel})}if(damagePerSecond)result.push(damagePerSecond);if(derivedRate){const direct=result.findIndex(modifier=>modifier.Label==="RateOfFire");if(direct>=0)result[direct]=derivedRate;else result.push(derivedRate)}return sortJournalModifiers(result)}function isFinalGuardianWeaponEngineering(item,blueprint){const group=getEngineeringGroup(item);if(group===null||!GUARDIAN_WEAPON_GROUPS.has(group))return false;const resolved=resolveBlueprintForModule(item,blueprint);return getBlueprint(resolved)!==null&&!blueprintAvailableFor(item,blueprint)}function engineerableBase(item,statsOverride){const stats=statsOverride??builtInModuleBySymbol(item,FITTED_ITEM);if(!stats||stats.engineeringLocked)return null;return{stats:stats,base:baseStats(stats)}}function availableBlueprintsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;const available=[];for(const[fdname,route]of blueprintRoutesFor(item)){const blueprint=BLUEPRINTS[fdname];if(!blueprint)continue;const grades=Object.entries(blueprint.grades).filter(([,grade])=>missingBaseLabels(stats,base,grade.features).length===0).map(([grade])=>Number(grade)).filter(Number.isFinite).sort((a,b)=>a-b);if(grades.length>0)available.push({fdname:fdname,grades:grades,route:route})}return available}function availableExperimentalsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;return getExperimentalsForModule(item).filter(fdname=>{const effect=EXPERIMENTAL_EFFECTS[fdname];return effect!==void 0&&missingBaseLabels(stats,base,effect.modifiers).length===0})}var MAX_ENGINEERING_GRADE=5;function modifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);const effectName=experimental===void 0?variant.experimental:experimental;if(!module||!variant.modifiers?.length&&effectName==null)return null;const effect=effectName==null?void 0:getExperimentalEffect(effectName);if(effectName!==null&&effectName!==void 0&&!effect)return null;return computeModifiers(baseStats(module),fixedModifierFeatures(variant.modifiers??[]),1,effect??void 0)}function getPreEngineeredModifiers(variant){return modifiersWithExperimental(variant)??[]}function journalModifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return[];const modifiers=journalModifiersFor(module,modifiersWithExperimental(variant,experimental)??[]);const effectName=experimental===void 0?variant.experimental:experimental;const damageDistribution=effectName?getExperimentalEffect(effectName)?.damageDistribution:void 0;if(!damageDistribution)return modifiers;for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];const label=labelsForDamageType(type)[0];if(value===void 0||label===void 0)continue;modifiers.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(module.damageDistribution?.[type]??0)*scaleForLabel(label)})}return modifiers}function getPreEngineeredJournalModifiers(variant){return journalModifiersWithExperimental(variant)}function sameJournalNumber(actual,expected){return Math.abs(actual-expected)<=Math.max(1e-5,Math.abs(expected)*1e-6)}function modifierKey(modifier,module){return fieldForLabel(modifier.Label,module)??`label:${normalizeKey(modifier.Label,"identifyPreEngineeredVariant: module.Engineering.Modifiers[].Label")}`}function sameModifier(actual,expected){if(expected.Value!==void 0){return actual.Value!==void 0&&sameJournalNumber(actual.Value,expected.Value)}return expected.ValueStr!==void 0&&actual.ValueStr!==void 0}function matchesModifierSignature(actualByKey,expected,module){let matched=0;for(const predicted of expected){const actual=actualByKey.get(modifierKey(predicted,module));if(!actual)continue;if(!sameModifier(actual,predicted))return false;matched++}return matched>=Math.max(1,expected.length-1)}function identifyPreEngineeredVariant(module){const engineering=module.Engineering;if(!engineering)return null;requireStringIfPresent(module.Item,"identifyPreEngineeredVariant: module.Item");const stock=getModuleBySymbol(module.Item,ALL_MODULES);if(!stock)return null;const capturedBlueprint=normalizeKey(engineering.BlueprintName,"identifyPreEngineeredVariant: module.Engineering.BlueprintName");const variants=getPreEngineeredVariants(module.Item);const blueprintMatches=variants.filter(candidate=>candidate.blueprint.toLowerCase()===capturedBlueprint);const blueprintMatch=blueprintMatches.length===1?blueprintMatches[0]:null;const capturedGrade=engineering.Level;if(blueprintMatch?.acquisition==="mercenary"&&Number.isInteger(capturedGrade)&&capturedGrade>=blueprintMatch.grade&&capturedGrade<=MAX_ENGINEERING_GRADE){return blueprintMatch}if(engineering.Modifiers===void 0){const capturedExperimental=normalizeKey(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const identityMatches=blueprintMatches.filter(candidate=>candidate.engineeringLocked===true&&candidate.grade===capturedGrade&&(candidate.experimental===void 0?capturedExperimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimental.toLowerCase()===capturedExperimental));return identityMatches.length===1?identityMatches[0]:null}if(!engineering.Modifiers?.length)return null;const actualByKey=/* @__PURE__ */new Map;for(const modifier of engineering.Modifiers){actualByKey.set(modifierKey(modifier,stock),modifier)}requireStringIfPresent(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const matches=[];for(const candidate of variants){if(!candidate.modifiers?.length)continue;if(candidate.grade!==engineering.Level)continue;if(candidate.acquisition==="eventReward"&&(engineering.ExperimentalEffect!==void 0||engineering.ExperimentalEffect_Localised!==void 0||capturedBlueprint!==candidate.blueprint.toLowerCase())){continue}const primitive=modifiersWithExperimental(candidate,engineering.ExperimentalEffect??null);if(!primitive?.length)continue;const matched=matchesModifierSignature(actualByKey,primitive,stock)||matchesModifierSignature(actualByKey,journalModifiersWithExperimental(candidate,engineering.ExperimentalEffect??null),stock);if(matched)matches.push(candidate)}return matches.length===1?matches[0]:null}function unresolvedModifiers(variant){const resolved=new Set(getPreEngineeredModifiers(variant).map(modifier=>modifier.Label));return(variant.modifiers??[]).map(modifier=>modifier.label).filter(label=>!resolved.has(label))}function getPreEngineeredStats(variant){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return null;if(!variant.modifiers?.length&&!variant.engineeringLocked&&variant.experimental===void 0)return module;const modifiers=variant.modifiers??[];const resolved={...module,...variant.engineeringLocked?{engineeringLocked:true}:{}};for(const{Label:Label,Value:Value,ValueStr:ValueStr}of getPreEngineeredModifiers(variant)){const field=fieldForLabel(Label,module);if(field&&field!=="damageDistribution"&&Value!==void 0){Object.assign(resolved,{[field]:Value/scaleForLabel(Label)})}else if(field&&ValueStr!==void 0&&capabilityValueForLabel(Label)!==null){Object.assign(resolved,{[field]:true})}}const experimentalDamageDistribution=variant.experimental?getExperimentalEffect(variant.experimental)?.damageDistribution:void 0;if(experimentalDamageDistribution){resolved.damageDistribution={...experimentalDamageDistribution};delete resolved.damageComponents}if(resolved.rateOfFire!==void 0&&!modifiers.some(m=>m.label==="RateOfFire")&&modifiers.some(m=>m.label==="BurstSize"||m.label==="BurstRateOfFire"||m.label==="BurstInterval")){const rate=combinedRateOfFire(resolved);if(rate!==void 0)resolved.rateOfFire=rate}if(module.damageComponents&&!experimentalDamageDistribution){resolved.damageComponents=scaleDamageComponents(module.damageComponents,module.damage,resolved.damage)}return resolved}export{FITTED_ITEM,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,cloneLoadoutModule,cloneModuleStats,experimentalAvailableFor,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,isBuiltInHullModule,isCargoHatchSlot,isFinalGuardianWeaponEngineering,isNonOutfittingSlot,journalModifiersFor,matchingKeyIn,missingBaseLabels,orderBySlotLayout,ordinaryEngineeringProof,ownKeyIn,primitiveEngineeringInputsFor,scaleDamageComponents,unresolvedModifiers};//# sourceMappingURL=chunk-ZZT2PQZ5.js.map
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
* import { getBlueprintName } from '@elite-dangerous-almanac/core/i18n/blueprints';
|
|
23
23
|
*
|
|
24
24
|
* getBlueprintName('FSD_LongRange', 'de-DE'); // -> 'Erhöhte FSA-Reichweite'
|
|
25
|
-
* getBlueprintName('AbrasionBlaster_FarReaching', 'fr'); // ->
|
|
25
|
+
* getBlueprintName('AbrasionBlaster_FarReaching', 'fr'); // -> 'Surfaceur abrasif longue portée'
|
|
26
|
+
* getBlueprintName('MC_Overcharged', 'fr'); // -> 'Arme surchargée'
|
|
26
27
|
* ```
|
|
27
28
|
*/
|
|
28
29
|
declare function getBlueprintName(fdname: string, locale: string): string | null;
|
package/dist/i18n/blueprints.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getBlueprintName}from"../chunk-
|
|
1
|
+
export{getBlueprintName}from"../chunk-Z6XMXMVI.js"; //# sourceMappingURL=blueprints.js.map
|
|
@@ -5,6 +5,7 @@ import { SlefDiagnostic } from '../ships/slef.js';
|
|
|
5
5
|
import '../ships/slots.js';
|
|
6
6
|
import '../ships/modules.js';
|
|
7
7
|
import '../ships/engineering-options.js';
|
|
8
|
+
import '../ships/module-families.js';
|
|
8
9
|
import '../ships/jump-range.js';
|
|
9
10
|
import '../ships/engineering.js';
|
|
10
11
|
import '../ships/power.js';
|
package/dist/i18n/diagnostics.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-
|
|
1
|
+
export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-6G6TYW2D.js"; //# sourceMappingURL=diagnostics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getEngineeringGroupName}from"../chunk-
|
|
1
|
+
export{getEngineeringGroupName}from"../chunk-EKQCVCMK.js"; //# sourceMappingURL=engineering-groups.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getExperimentalEffectDescription}from"../chunk-
|
|
1
|
+
export{getExperimentalEffectDescription}from"../chunk-4S6WB7QR.js"; //# sourceMappingURL=experimental-effect-descriptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getExperimentalEffectName}from"../chunk-
|
|
1
|
+
export{getExperimentalEffectName}from"../chunk-CJWFY6OX.js"; //# sourceMappingURL=experimental-effects.js.map
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { getModuleName } from './modules.js';
|
|
2
|
+
export { getOutfittingFamilyName } from './module-families.js';
|
|
2
3
|
export { getBlueprintName } from './blueprints.js';
|
|
3
4
|
export { getExperimentalEffectName } from './experimental-effects.js';
|
|
4
5
|
export { getExperimentalEffectDescription } from './experimental-effect-descriptions.js';
|
|
@@ -14,6 +15,7 @@ import '../ships/loadout-calculations.js';
|
|
|
14
15
|
import '../ships/loadout-validation.js';
|
|
15
16
|
import '../ships/modules.js';
|
|
16
17
|
import '../ships/engineering-options.js';
|
|
18
|
+
import '../ships/module-families.js';
|
|
17
19
|
import '../ships/ship-loadout.js';
|
|
18
20
|
import '../ships/slef.js';
|
|
19
21
|
import '../ships/jump-range.js';
|
|
@@ -45,11 +47,12 @@ import '../ships/source-purchase.js';
|
|
|
45
47
|
* English name. Lookups return that source value verbatim; they never generate an
|
|
46
48
|
* English fallback for a missing locale.
|
|
47
49
|
*
|
|
48
|
-
* The catalogues carry English, French, German, Russian and Spanish and no
|
|
49
|
-
* language. Several accepted sources publish more —
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
50
|
+
* The catalogues carry English, French, German, Portuguese, Russian and Spanish and no
|
|
51
|
+
* other language. Several accepted sources publish more — Italian, Hungarian, Georgian
|
|
52
|
+
* and Simplified Chinese among them — and those values are deliberately not stored, so
|
|
53
|
+
* every one of those tags is an unsupported locale that returns `null`.
|
|
54
|
+
* The stored Portuguese is the Brazilian Portuguese every accepted source publishes
|
|
55
|
+
* under a bare `pt` tag; `pt-PT` therefore resolves to it like any other regional tag.
|
|
53
56
|
*
|
|
54
57
|
* @example
|
|
55
58
|
* ```ts
|
|
@@ -59,6 +62,6 @@ import '../ships/source-purchase.js';
|
|
|
59
62
|
* locale; // -> 'de'
|
|
60
63
|
* ```
|
|
61
64
|
*/
|
|
62
|
-
type GameLocale = 'en' | 'de' | 'es' | 'fr' | 'ru';
|
|
65
|
+
type GameLocale = 'en' | 'de' | 'es' | 'fr' | 'pt' | 'ru';
|
|
63
66
|
|
|
64
67
|
export type { GameLocale };
|
package/dist/i18n/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getMicroResourceName}from"../chunk-
|
|
1
|
+
export{getMicroResourceName}from"../chunk-GRSNX36B.js";export{getOutfittingFamilyName}from"../chunk-SD6GNFDX.js";export{getModuleName}from"../chunk-LZYHBFJC.js";export{getPreEngineeredVariantName}from"../chunk-J42ZXLBL.js";export{getShipManufacturer,getShipName}from"../chunk-KJFUNIIY.js";export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-ZRG35JSH.js"; export{getBlueprintName}from"../chunk-Z6XMXMVI.js";export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-6G6TYW2D.js";export{getEngineeringGroupName}from"../chunk-EKQCVCMK.js";export{getExperimentalEffectDescription}from"../chunk-4S6WB7QR.js";export{getExperimentalEffectName}from"../chunk-CJWFY6OX.js";export{getMaterialName}from"../chunk-TW7LUBHD.js"; //# sourceMappingURL=index.js.map
|
package/dist/i18n/materials.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getMaterialName}from"../chunk-
|
|
1
|
+
export{getMaterialName}from"../chunk-TW7LUBHD.js"; //# sourceMappingURL=materials.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getMicroResourceName}from"../chunk-
|
|
1
|
+
export{getMicroResourceName}from"../chunk-GRSNX36B.js"; //# sourceMappingURL=micro-resources.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Localized outfitting module-family names, isolated from the module catalogues. */
|
|
2
|
+
/**
|
|
3
|
+
* Look up an outfitting family's source-backed display name for a locale.
|
|
4
|
+
*
|
|
5
|
+
* @param familyId - The stable family id carried by `OutfittingModuleIdentity.familyId`,
|
|
6
|
+
* such as `"shieldGenerators"`. Matching ignores case and surrounding whitespace.
|
|
7
|
+
* @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
|
|
8
|
+
* `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
|
|
9
|
+
* hyphens. A regional or script subtag is dropped: every stored locale is a bare
|
|
10
|
+
* language tag.
|
|
11
|
+
* @returns The localized family name; the canonical `OUTFITTING_FAMILIES` name for any
|
|
12
|
+
* English tag; or `null` when the family is unknown, the locale is unsupported, or the
|
|
13
|
+
* pinned source carries no category label for that family and locale.
|
|
14
|
+
* @remarks
|
|
15
|
+
* Every module carries a family, so an outfitting list can group and label every choice
|
|
16
|
+
* `ShipLoadout.modulesForSlot()` returns from this lookup alone. The table bundles no
|
|
17
|
+
* module stats. Missing translations never silently fall back to English: 19 of the 77
|
|
18
|
+
* families have no source-backed label in any locale, tracked by
|
|
19
|
+
* [#320](https://github.com/DarkSession/Elite-Dangerous-Almanac/issues/320).
|
|
20
|
+
* @throws {TypeError} If `familyId` is present and not a string, or `locale` is not a
|
|
21
|
+
* string. A nullish `familyId` is a lookup miss and returns `null`.
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* import { getOutfittingFamilyName } from '@elite-dangerous-almanac/core/i18n/module-families';
|
|
25
|
+
*
|
|
26
|
+
* getOutfittingFamilyName('shieldGenerators', 'de-DE'); // -> 'Schildgeneratoren'
|
|
27
|
+
* getOutfittingFamilyName('xenoScanners', 'de'); // -> null
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
declare function getOutfittingFamilyName(familyId: string, locale: string): string | null;
|
|
31
|
+
|
|
32
|
+
export { getOutfittingFamilyName };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{getOutfittingFamilyName}from"../chunk-SD6GNFDX.js"; //# sourceMappingURL=module-families.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"O"}
|
package/dist/i18n/modules.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getModuleName}from"../chunk-
|
|
1
|
+
export{getModuleName}from"../chunk-LZYHBFJC.js"; //# sourceMappingURL=modules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getPreEngineeredVariantName}from"../chunk-
|
|
1
|
+
export{getPreEngineeredVariantName}from"../chunk-J42ZXLBL.js"; //# sourceMappingURL=pre-engineered.js.map
|
package/dist/i18n/ships.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getShipManufacturer,getShipName}from"../chunk-
|
|
1
|
+
export{getShipManufacturer,getShipName}from"../chunk-KJFUNIIY.js"; //# sourceMappingURL=ships.js.map
|
package/dist/i18n/slots.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-
|
|
1
|
+
export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-ZRG35JSH.js"; //# sourceMappingURL=slots.js.map
|
package/dist/materials/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-
|
|
1
|
+
export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-MKGJPVPS.js";export{MaterialGrade,MaterialLine,getMaterialByElementSymbol,getMaterialByName,getMaterialBySymbol,materialsByGrade,materialsInCategory,materialsInLine}from"../chunk-IOJXLDJN.js";export{ALL_MICRO_RESOURCES}from"../chunk-GVNTKCVF.js";export{ITEM_MICRO_RESOURCES}from"../chunk-WHWFKHV3.js";export{COMPONENT_MICRO_RESOURCES}from"../chunk-HTB52N6S.js";export{CONSUMABLE_MICRO_RESOURCES}from"../chunk-K7L7SMIR.js";export{DATA_MICRO_RESOURCES}from"../chunk-GVLDFJEY.js"; export{ALL_MATERIALS}from"../chunk-V4C6FIE2.js";export{ENCODED_MATERIALS}from"../chunk-Q5XOGATC.js";export{MANUFACTURED_MATERIALS}from"../chunk-HKXXFIRI.js";export{RAW_MATERIALS}from"../chunk-SQS7672E.js"; //# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{ALL_MATERIALS}from"../chunk-
|
|
1
|
+
export{ALL_MATERIALS}from"../chunk-V4C6FIE2.js"; //# sourceMappingURL=materials-all.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{MaterialGrade,MaterialLine,getMaterialByElementSymbol,getMaterialByName,getMaterialBySymbol,materialsByGrade,materialsInCategory,materialsInLine}from"../chunk-
|
|
1
|
+
export{MaterialGrade,MaterialLine,getMaterialByElementSymbol,getMaterialByName,getMaterialBySymbol,materialsByGrade,materialsInCategory,materialsInLine}from"../chunk-IOJXLDJN.js"; //# sourceMappingURL=materials.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{ALL_MICRO_RESOURCES}from"../chunk-
|
|
1
|
+
export{ALL_MICRO_RESOURCES}from"../chunk-GVNTKCVF.js"; //# sourceMappingURL=micro-resources-all.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-
|
|
1
|
+
export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-MKGJPVPS.js"; //# sourceMappingURL=micro-resources.js.map
|
package/dist/ships/index.d.ts
CHANGED
|
@@ -143,6 +143,7 @@ export { GunsightOffset, GunsightPoint, SHIP_GUNSIGHTS, ShipGunsight, ShipGunsig
|
|
|
143
143
|
export { DamageComponents, DamageDistribution, ModuleCategory, ModuleExclusionGroup, ModuleGuidance, ModuleLimitGroup, ModuleLimitIncrease, ModuleMount, ModuleRating, OutfittingModule, OutfittingModuleIdentity, OutfittingModuleStats, ProjectileRangeBoundaries, getBulkheadsForShip, getModuleBySymbol, getModulesByName } from './modules.js';
|
|
144
144
|
export { ModuleLimitEntry, ModuleLimitUsage, SHIP_MODULE_LIMITS, calculateModuleLimits } from './module-limits.js';
|
|
145
145
|
export { FrameShiftDriveJumpStats, MassCurveStats, PowerDistributorStats, PowerGenerationStats, ShieldRegenerationStats, WeaponDamageStats, hasFrameShiftDriveJumpStats, hasMassCurveStats, hasPowerDistributorStats, hasPowerGenerationStats, hasShieldRegenerationStats, hasWeaponDamageStats } from './module-capabilities.js';
|
|
146
|
+
export { OUTFITTING_FAMILIES, OutfittingFamilyId } from './module-families.js';
|
|
146
147
|
export { BlueprintModuleEngineering, EngineeringModifier, LoadoutEvent, LoadoutModule, ModuleEngineering, Slef, SlefConstraint, SlefDiagnostic, SlefDiagnosticCode, SlefEntry, SlefHeader, SlefInspection, SlefStringifyOptions, getLoadoutModifier, inspectSlef, parseSlef, stringifySlef, toSlef } from './slef.js';
|
|
147
148
|
export { FrameShiftDriveParams, TotalRangeDetails, frameShiftDriveMassFactor, fuelPerJump, singleJumpRange, totalRange } from './jump-range.js';
|
|
148
149
|
export { ApplyBlueprintOptions, AvailableBlueprint, BuildCost, BuildCredits, BuildWeaponMetrics, DefenceOptions, DistributorOptions, EngineeringNormalizationCode, EngineeringNormalizationResult, EngineeringNormalizationUnchanged, EngineeringNormalizationUnsupported, EngineeringNormalized, ExperimentalEffectMutationCode, ExperimentalEffectMutationResult, ExperimentalEffectUnchanged, ExperimentalEffectUnsupported, ExperimentalEffectUpdated, FittedModule, FittedWeaponMetrics, FixedMountRepairResult, ImmovableReason, JumpOptions, JumpRangeSummary, LoadoutEditError, LoadoutEditErrorCode, LoadoutExportOptions, LoadoutImportOutcome, LoadoutSlot, MobilityOptions, ShipLoadout, SlefExportOptions, StandardLoad, StandardLoadInputs, WeaponsOptions } from './ship-loadout.js';
|
package/dist/ships/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{LoadoutEditError,ShipLoadout}from"../chunk-
|
|
1
|
+
export{LoadoutEditError,ShipLoadout}from"../chunk-EXVCRIDP.js";export{weaponsCapacitorMetrics}from"../chunk-FMPRCYKY.js";export{cellBankSummary,shieldRecovery}from"../chunk-VZZUNSDF.js";export{shieldMassCurveMultiplier,shieldMetrics,shieldStrength}from"../chunk-2FHHMYDC.js";export{SHIPS,getShipByName,getShipBySymbol,getShipSlots}from"../chunk-WNGQ3IAM.js";export{getLoadoutModifier,inspectSlef,parseSlef,stringifySlef,toSlef}from"../chunk-UXFMVZAY.js";export{getSourceModuleValue,sourcePurchaseFromLoadout,sumSourceModuleValues}from"../chunk-IYU4WLFM.js";export{powerBudget}from"../chunk-RLUS76LZ.js";export{getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-ZZT2PQZ5.js";export{armourPiercingFactor,combinedRateOfFire,damageFalloff,damagePerSecond,energyPerSecond,heatPerSecond,splitDamage,sumWeaponMetrics,sustainedDamagePerSecond,sustainedFireFactor,weaponMetrics}from"../chunk-LJI7VXJD.js";export{getBulkheadsForShip,getModuleBySymbol,getModulesByName}from"../chunk-LLHGSBPI.js";export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered}from"../chunk-2VPVZELZ.js";export{frameShiftDriveMassFactor,fuelPerJump,singleJumpRange,totalRange}from"../chunk-GQ5GX5TB.js";export{calculateCargoCapacity,calculateFuelCapacity,calculateUnladenMass}from"../chunk-AFVYCQWL.js";export{validateLoadout}from"../chunk-B4ZSTOM4.js";export{mobilityMetrics,thrusterMassCurveMultiplier}from"../chunk-24INI4U7.js";export{hasFrameShiftDriveJumpStats,hasMassCurveStats,hasPowerDistributorStats,hasPowerGenerationStats,hasShieldRegenerationStats,hasWeaponDamageStats}from"../chunk-JTQVWIGL.js";export{OUTFITTING_FAMILIES}from"../chunk-M6G3UDTX.js";export{SHIP_MODULE_LIMITS,calculateModuleLimits}from"../chunk-KPETDYQX.js"; export{distributorMetrics}from"../chunk-P2QOL63K.js"; export{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"../chunk-JPBMRJFC.js";export{SHIP_GUNSIGHTS,getShipGunsight,projectGunsight}from"../chunk-DBGXZF7O.js";export{OVERHEAT_HEAT_LEVEL,effectiveWeaponThermalLoad,equilibriumHeatLevel,heatLevelAtTime,heatMetrics,secondsToHeatLevel}from"../chunk-W6EPHHTS.js";export{ammunitionCapacity}from"../chunk-AA3K5XUE.js";export{armourMetrics}from"../chunk-FGXWVFN6.js";export{effectiveHitPoints,mapDamageTypes,stackArmourResistance,stackShieldResistance,systemsResistance}from"../chunk-ZNCXENNB.js"; export{computeModifiers,rollsForGrade,sumMaterials}from"../chunk-DYPOL3CI.js";export{resolveBlueprintForModule}from"../chunk-2TW4ZBI3.js";export{ENGINEERING_OPTION_GROUPS,getBlueprintsForModule,getEngineeringGroup,getExperimentalsForBlueprint,getExperimentalsForModule}from"../chunk-QTZPA2FR.js";export{BLUEPRINTS,getBlueprint,getBlueprintGrade}from"../chunk-Q3QCLNVG.js"; export{SLOT_RESTRICTION_LABELS,enumerateSlots,parseSlotName}from"../chunk-RAO35XDF.js"; //# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The outfitting **module families** — the grouping an outfitting list shows above the
|
|
3
|
+
* modules that share it, and the id every {@link OutfittingModuleIdentity} carries.
|
|
4
|
+
*
|
|
5
|
+
* A family is coarser than an engineering group and finer than an outfitting category:
|
|
6
|
+
* ordinary, Bi-Weave and Prismatic generators are all `shieldGenerators`, while the
|
|
7
|
+
* eight core mounts each have their own family. Localized display text for these ids is
|
|
8
|
+
* `getOutfittingFamilyName` in `i18n/module-families`.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* A stable identifier for an outfitting module family.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* These are the keys of {@link OUTFITTING_FAMILIES}. Every module carries one, core
|
|
17
|
+
* modules included, so an outfitting list can group every choice
|
|
18
|
+
* `ShipLoadout.modulesForSlot()` returns without a private taxonomy. Closely related
|
|
19
|
+
* variants share a family: Mk II and corrosion-resistant racks are `cargoRacks`, and a
|
|
20
|
+
* pre-engineered or Powerplay variant stays in its base module's family.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* import type { OutfittingFamilyId } from '@elite-dangerous-almanac/core/ships/module-families';
|
|
25
|
+
*
|
|
26
|
+
* const family: OutfittingFamilyId = 'shieldGenerators';
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
type OutfittingFamilyId = 'armour' | 'powerPlants' | 'engines' | 'fsd' | 'lifeSupport' | 'powerDistributors' | 'sensors' | 'fuelTanks' | 'dockingComputers' | 'shieldGenerators' | 'shieldCellBanks' | 'cargoRacks' | 'hatchBreakerLimpets' | 'surfaceScanners' | 'fuelScoops' | 'refineries' | 'fsdInterdictors' | 'afms' | 'hullReinforcements' | 'collectorLimpets' | 'fuelTransferLimpets' | 'prospectingLimpets' | 'planetaryVehicleHangars' | 'planetaryApproachSuites' | 'cargoHatches' | 'passengerCabins' | 'vesselHangars' | 'moduleReinforcements' | 'repairLimpets' | 'researchLimpets' | 'decontaminationLimpets' | 'guardianShieldReinforcementPackages' | 'fsdBoosters' | 'guardianHybridPowerDistributors' | 'guardianHybridPowerPlants' | 'reconLimpets' | 'flightAssists' | 'miningMultiLimpetControllers' | 'multiLimpetControllers' | 'experimentalWeaponStabilisers' | 'pulseLasers' | 'burstLasers' | 'beamLasers' | 'cannons' | 'fragmentCannons' | 'multiCannons' | 'plasmaAccelerators' | 'railGuns' | 'missiles' | 'mines' | 'torpedoes' | 'miningLasers' | 'remoteReleaseFlakLaunchers' | 'axMissileRacks' | 'axMultiCannons' | 'guardianGaussCannons' | 'remoteReleaseFlechetteLaunchers' | 'guardianPlasmaChargers' | 'guardianShardCannons' | 'shockCannons' | 'subSurfaceDisplacementMissiles' | 'abrasionBlasters' | 'miningTools' | 'subSurfaceExtractionMissiles' | 'guardianNaniteTorpedoPylons' | 'chaffLaunchers' | 'ecms' | 'heatsinkLaunchers' | 'pointDefence' | 'manifestScanners' | 'wakeScanners' | 'killWarrantScanners' | 'shieldBoosters' | 'shutdownFieldNeutralisers' | 'xenoScanners' | 'pulseWaveAnalyser' | 'causticSinkLaunchers';
|
|
30
|
+
/**
|
|
31
|
+
* Every outfitting family's canonical English display name, keyed by id.
|
|
32
|
+
*
|
|
33
|
+
* @remarks
|
|
34
|
+
* The names are Frontier's own outfitting category labels where the game publishes one,
|
|
35
|
+
* and the Almanac's descriptive name for the 19 families it does not. They are
|
|
36
|
+
* canonical English, not localized UI text: use
|
|
37
|
+
* `getOutfittingFamilyName` for a locale.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* import { OUTFITTING_FAMILIES } from '@elite-dangerous-almanac/core/ships/module-families';
|
|
42
|
+
*
|
|
43
|
+
* OUTFITTING_FAMILIES.shieldGenerators; // -> 'Shield Generators'
|
|
44
|
+
* OUTFITTING_FAMILIES.armour; // -> 'Armour'
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare const OUTFITTING_FAMILIES: Readonly<Record<OutfittingFamilyId, string>>;
|
|
48
|
+
|
|
49
|
+
export { OUTFITTING_FAMILIES, type OutfittingFamilyId };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{OUTFITTING_FAMILIES}from"../chunk-M6G3UDTX.js"; //# sourceMappingURL=module-families.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"O"}
|