@wfcd/profile-parser 1.5.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/Ability-D1F1s_19.js +25 -0
  2. package/dist/Ability-DzKgEG5R.d.ts +19 -0
  3. package/dist/Ability.d.ts +2 -0
  4. package/dist/Ability.js +3 -0
  5. package/dist/ArchonCrystal.d.ts +23 -0
  6. package/dist/ArchonCrystal.js +29 -0
  7. package/dist/ChallengeProgress-B8Kv32oi.d.ts +20 -0
  8. package/dist/ChallengeProgress-DKKtijWw.js +26 -0
  9. package/dist/ChallengeProgress.d.ts +2 -0
  10. package/dist/ChallengeProgress.js +3 -0
  11. package/dist/Enemy-BqxhFdkB.js +44 -0
  12. package/dist/Enemy-toy1Spyi.d.ts +44 -0
  13. package/dist/Enemy.d.ts +2 -0
  14. package/dist/Enemy.js +3 -0
  15. package/dist/Intrinsics-CqFOpLxp.js +67 -0
  16. package/dist/Intrinsics-azrsOZJd.d.ts +67 -0
  17. package/dist/Intrinsics.d.ts +2 -0
  18. package/dist/Intrinsics.js +3 -0
  19. package/dist/ItemConfig-7as-gjPG.d.ts +51 -0
  20. package/dist/ItemConfig-uU36aJFJ.js +50 -0
  21. package/dist/ItemConfig.d.ts +4 -0
  22. package/dist/ItemConfig.js +5 -0
  23. package/dist/LoadOutInventory-BsPRtXfG.d.ts +53 -0
  24. package/dist/LoadOutInventory-CPVZJ_W5.js +52 -0
  25. package/dist/LoadOutInventory.d.ts +8 -0
  26. package/dist/LoadOutInventory.js +9 -0
  27. package/dist/LoadOutItem-B_6G9dXC.js +127 -0
  28. package/dist/LoadOutItem-BlRFZMNd.d.ts +120 -0
  29. package/dist/LoadOutItem.d.ts +6 -0
  30. package/dist/LoadOutItem.js +7 -0
  31. package/dist/LoadOutPreset-BshJF0LH.d.ts +83 -0
  32. package/dist/LoadOutPreset-CMbZo-II.js +83 -0
  33. package/dist/LoadOutPreset.d.ts +2 -0
  34. package/dist/LoadOutPreset.js +4 -0
  35. package/dist/Mission-BZgLMluh.d.ts +53 -0
  36. package/dist/Mission-D2n1i5R2.js +55 -0
  37. package/dist/Mission.d.ts +2 -0
  38. package/dist/Mission.js +3 -0
  39. package/dist/OperatorLoadOuts-B8bEy2dp.js +76 -0
  40. package/dist/OperatorLoadOuts-Dk2uMwby.d.ts +75 -0
  41. package/dist/OperatorLoadOuts.d.ts +4 -0
  42. package/dist/OperatorLoadOuts.js +5 -0
  43. package/dist/Polarity--RYq3iwF.js +28 -0
  44. package/dist/Polarity-DDWqEVm2.d.ts +26 -0
  45. package/dist/Polarity.d.ts +2 -0
  46. package/dist/Polarity.js +3 -0
  47. package/dist/Profile-WWZ2BDf0.js +193 -0
  48. package/dist/Profile-rva_Xss5.d.ts +212 -0
  49. package/dist/Profile.d.ts +15 -0
  50. package/dist/Profile.js +16 -0
  51. package/dist/ProfileParser.d.ts +71 -0
  52. package/dist/ProfileParser.js +71 -0
  53. package/dist/Pvp-Cb1KNKvw.d.ts +36 -0
  54. package/dist/Pvp-hyzYfVBB.js +36 -0
  55. package/dist/Pvp.d.ts +2 -0
  56. package/dist/Pvp.js +3 -0
  57. package/dist/Race-5Q0StEkE.js +35 -0
  58. package/dist/Race-DCxzjMpC.d.ts +32 -0
  59. package/dist/Race.d.ts +2 -0
  60. package/dist/Race.js +3 -0
  61. package/dist/Scan-BWfZiLoW.d.ts +27 -0
  62. package/dist/Scan-Dlrv6viG.js +27 -0
  63. package/dist/Scan.d.ts +2 -0
  64. package/dist/Scan.js +3 -0
  65. package/dist/Skin-BbUkegH1.d.ts +28 -0
  66. package/dist/Skin-D6v6jC9U.js +36 -0
  67. package/dist/Skin.d.ts +2 -0
  68. package/dist/Skin.js +4 -0
  69. package/dist/Stats-Bm1bpQe5.js +305 -0
  70. package/dist/Stats-DtkR2w1A.d.ts +325 -0
  71. package/dist/Stats.d.ts +9 -0
  72. package/dist/Stats.js +10 -0
  73. package/dist/Syndicate-CjUKKAsk.js +33 -0
  74. package/dist/Syndicate-FSUt1PP5.d.ts +33 -0
  75. package/dist/Syndicate.d.ts +2 -0
  76. package/dist/Syndicate.js +3 -0
  77. package/dist/Utils-C3kZCO6a.js +60 -0
  78. package/dist/Utils-C7BZqK4e.d.ts +37 -0
  79. package/dist/Utils.d.ts +2 -0
  80. package/dist/Utils.js +3 -0
  81. package/dist/Weapon-4KlXEHQF.js +64 -0
  82. package/dist/Weapon-DAJp-nbn.d.ts +32 -0
  83. package/dist/Weapon.d.ts +2 -0
  84. package/dist/Weapon.js +3 -0
  85. package/dist/XpInfo-CXC3I0NQ.js +35 -0
  86. package/dist/XpInfo-ChJ_lJaH.d.ts +34 -0
  87. package/dist/XpInfo.d.ts +2 -0
  88. package/dist/XpInfo.js +4 -0
  89. package/package.json +34 -32
  90. package/src/Ability.js +0 -22
  91. package/src/ArchonCrystal.js +0 -26
  92. package/src/ChallengeProgress.js +0 -23
  93. package/src/Enemy.js +0 -47
  94. package/src/Intrinsics.js +0 -77
  95. package/src/ItemConfig.js +0 -52
  96. package/src/LoadOutInventory.js +0 -53
  97. package/src/LoadOutItem.js +0 -155
  98. package/src/LoadOutPreset.js +0 -90
  99. package/src/Mission.js +0 -58
  100. package/src/OperatorLoadOuts.js +0 -77
  101. package/src/Polarity.js +0 -25
  102. package/src/Profile.js +0 -213
  103. package/src/ProfileParser.js +0 -50
  104. package/src/Pvp.js +0 -35
  105. package/src/Race.js +0 -33
  106. package/src/Scan.js +0 -22
  107. package/src/Skin.js +0 -33
  108. package/src/Stats.js +0 -340
  109. package/src/Syndicate.js +0 -34
  110. package/src/Utils.js +0 -66
  111. package/src/Weapon.js +0 -59
  112. package/src/XpInfo.js +0 -35
  113. package/types/Ability.d.ts +0 -20
  114. package/types/ArchonCrystal.d.ts +0 -22
  115. package/types/ChallengeProgress.d.ts +0 -21
  116. package/types/Enemy.d.ts +0 -41
  117. package/types/Intrinsics.d.ts +0 -66
  118. package/types/ItemConfig.d.ts +0 -21
  119. package/types/LoadOutInventory.d.ts +0 -45
  120. package/types/LoadOutItem.d.ts +0 -92
  121. package/types/LoadOutPreset.d.ts +0 -45
  122. package/types/Mission.d.ts +0 -35
  123. package/types/OperatorLoadOuts.d.ts +0 -35
  124. package/types/Polarity.d.ts +0 -21
  125. package/types/Profile.d.ts +0 -154
  126. package/types/ProfileParser.d.ts +0 -41
  127. package/types/Pvp.d.ts +0 -31
  128. package/types/Race.d.ts +0 -28
  129. package/types/Scan.d.ts +0 -20
  130. package/types/Skin.d.ts +0 -19
  131. package/types/Stats.d.ts +0 -255
  132. package/types/Syndicate.d.ts +0 -26
  133. package/types/Utils.d.ts +0 -3
  134. package/types/Weapon.d.ts +0 -51
  135. package/types/XpInfo.d.ts +0 -28
package/src/Mission.js DELETED
@@ -1,58 +0,0 @@
1
- import { node, nodeEnemy, nodeMissionType } from 'warframe-worldstate-data/utilities';
2
-
3
- /**
4
- * A mission completed by the player
5
- * @module
6
- */
7
- export default class Mission {
8
- /**
9
- *
10
- * @param {Object} mission The mission data
11
- * @param {string} locale The locale to return in
12
- */
13
- constructor(mission, locale = 'en') {
14
- const uniqueName = mission.type || mission.Tag;
15
-
16
- /**
17
- * Node name
18
- * @type {String}
19
- */
20
- this.node = node(uniqueName, locale);
21
-
22
- /**
23
- * Node unique name
24
- * @type {String}
25
- */
26
- this.nodeKey = uniqueName;
27
-
28
- /**
29
- * Node mission type
30
- * @type {String}
31
- */
32
- this.missionType = nodeMissionType(uniqueName, locale);
33
-
34
- /**
35
- * Node faction
36
- * @type {String}
37
- */
38
- this.faction = nodeEnemy(uniqueName, locale);
39
-
40
- /**
41
- * Highest score earned in this mission
42
- * @type {number | undefined}
43
- */
44
- if (mission.highScore) this.highScore = mission.highScore;
45
-
46
- /**
47
- * How many times the mission was completed
48
- * @type {number | undefined}
49
- */
50
- if (mission.Completes) this.completes = mission.Completes;
51
-
52
- /**
53
- * Denotes a steel path node
54
- * @type {number | undefined}
55
- */
56
- if (mission.Tier) this.tier = mission.Tier;
57
- }
58
- }
@@ -1,77 +0,0 @@
1
- import { colors } from '@wfcd/items/utilities';
2
-
3
- import Skin from './Skin.js';
4
- import { mapToHex } from './Utils.js';
5
-
6
- /**
7
- * Player's operator loadout
8
- * @module
9
- */
10
- export default class OperatorLoadOuts {
11
- /**
12
- *
13
- * @param {Object} loadout The operator loadout
14
- */
15
- constructor(loadout) {
16
- /**
17
- * Skins that have been applied to the player's operator.
18
- * @type {Array<Skin>}
19
- */
20
- this.skins = loadout.Skins.filter(Boolean).map((s) => new Skin({ ItemType: s }));
21
-
22
- /**
23
- * Operator amp ID
24
- * @type {String | undefined}
25
- */
26
- this.operatorAmp = loadout.OperatorAmp?.$oid;
27
-
28
- /**
29
- * Applied upgrade IDs
30
- * @type {Array<String>}
31
- */
32
- this.upgrades = loadout.Upgrades;
33
- this.abilityOverride = loadout.AbilityOverride;
34
-
35
- /**
36
- * Operator primary colors
37
- * @type {module:"@wfcd/items".ColorMap | undefined}
38
- */
39
- if (loadout.pricol) this.primaryColor = colors.mapColors(mapToHex(loadout.pricol));
40
-
41
- /**
42
- * Operator sigil colors
43
- * @type {module:"@wfcd/items".ColorMap | undefined}
44
- */
45
- if (loadout.sigcol) this.sigilColor = colors.mapColors(mapToHex(loadout.sigcol));
46
-
47
- /**
48
- * Operator attachment colors
49
- * @type {module:"@wfcd/items".ColorMap | undefined}
50
- */
51
- if (loadout.attcol) this.attachmentsColor = colors.mapColors(mapToHex(loadout.attcol));
52
-
53
- /**
54
- * Operator syandana colors
55
- * @type {module:"@wfcd/items".ColorMap | undefined}
56
- */
57
- if (loadout.syancol) this.syandanaColor = colors.mapColors(mapToHex(loadout.syancol));
58
-
59
- /**
60
- * Operator eye colors
61
- * @type {module:"@wfcd/items".ColorMap | undefined}
62
- */
63
- if (loadout.eyecol) this.eyeColor = colors.mapColors(mapToHex(loadout.eyecol));
64
-
65
- /**
66
- * Operator facial colors
67
- * @type {module:"@wfcd/items".ColorMap | undefined}
68
- */
69
- if (loadout.facial) this.facial = colors.mapColors(mapToHex(loadout.facial));
70
-
71
- /**
72
- * Operator cloth colors
73
- * @type {module:"@wfcd/items".ColorMap | undefined}
74
- */
75
- if (loadout.cloth) this.cloth = colors.mapColors(mapToHex(loadout.cloth));
76
- }
77
- }
package/src/Polarity.js DELETED
@@ -1,25 +0,0 @@
1
- import { translatePolarity } from 'warframe-worldstate-data/utilities';
2
-
3
- /**
4
- * A polarity in a LoadOutItem
5
- * @module
6
- */
7
- export default class Polarity {
8
- /**
9
- *
10
- * @param {Object} polarity The polarity to parse
11
- */
12
- constructor(polarity) {
13
- /**
14
- * Polarity name
15
- * @type {String}
16
- */
17
- this.polarity = translatePolarity(polarity.Value);
18
-
19
- /**
20
- * Polarized slot
21
- * @type {number}
22
- */
23
- this.slot = polarity.Slot;
24
- }
25
- }
package/src/Profile.js DELETED
@@ -1,213 +0,0 @@
1
- import { parseDate } from 'warframe-worldstate-data/utilities';
2
-
3
- import ChallengeProgress from './ChallengeProgress.js';
4
- import Intrinsics from './Intrinsics.js';
5
- import LoadOutInventory from './LoadOutInventory.js';
6
- import Mission from './Mission.js';
7
- import OperatorLoadOuts from './OperatorLoadOuts.js';
8
- import Syndicate from './Syndicate.js';
9
- import LoadOutPreset from './LoadOutPreset.js';
10
-
11
- /**
12
- * A player's profile
13
- * @module
14
- */
15
- export default class Profile {
16
- /**
17
- *
18
- * @param {Object} profile The profile data to parse
19
- * @param {string} locale The locale to return in where possible
20
- * @param {boolean} [withItem=false] Whether or not to include items
21
- */
22
- constructor(profile, locale = 'en', withItem = false) {
23
- /**
24
- * Player's account ID
25
- * @type {String}
26
- */
27
- this.accountId = profile.AccountId.$oid;
28
-
29
- /**
30
- * In-game name
31
- * @type {String}
32
- */
33
- this.displayName = profile.DisplayName;
34
-
35
- /**
36
- * List of usernames across supported platforms
37
- * @type {Array<String>}
38
- */
39
- this.platformNames = profile.PlatformNames;
40
-
41
- /**
42
- * Mastery rank
43
- * @type {String}
44
- */
45
- this.masteryRank = profile.PlayerLevel;
46
-
47
- /**
48
- * Load out preset equipped
49
- * @type {LoadOutPreset | undefined}
50
- */
51
- if (profile.LoadOutPreset) this.preset = new LoadOutPreset(profile.LoadOutPreset);
52
-
53
- /**
54
- * Current loadout
55
- * @type {LoadOutInventory}
56
- */
57
- this.loadout = new LoadOutInventory(profile.LoadOutInventory, locale, withItem);
58
-
59
- /**
60
- * Railjack and drifter Intrinsics
61
- * @type {Intrinsics}
62
- */
63
- this.intrinsics = new Intrinsics(profile.PlayerSkills ?? {});
64
-
65
- /**
66
- * Nightwave challenges progress
67
- * @type {Array<ChallengeProgress>}
68
- */
69
- this.challengeProgress = profile.ChallengeProgress.map((c) => new ChallengeProgress(c));
70
-
71
- /**
72
- * Guild ID
73
- * @type {String}
74
- */
75
- if (profile.GuildId?.$oid) this.guildId = profile.GuildId.$oid;
76
-
77
- /**
78
- * Guild name
79
- * @type {String}
80
- */
81
- this.guildName = profile.GuildName;
82
-
83
- /**
84
- * Guild tier
85
- * @type {number}
86
- */
87
- this.guildTier = profile.GuildTier;
88
-
89
- /**
90
- * Guild XP
91
- * @type {number}
92
- */
93
- this.guildXp = profile.GuildXp;
94
-
95
- /**
96
- * Guild class
97
- * @type {String}
98
- */
99
- this.guildClass = profile.GuildClass;
100
-
101
- /**
102
- * Guild emblem.
103
- * @type {String}
104
- */
105
- this.guildEmblem = profile.GuildEmblem;
106
-
107
- /**
108
- * Alliance ID
109
- * @type {String | undefined}
110
- */
111
- if (profile.AllianceId?.$oid) this.allianceId = profile.AllianceId.$oid;
112
-
113
- /**
114
- * Assassins currently asfter the player
115
- * @type {Array<String>}
116
- */
117
- this.deathMarks = profile.DeathMarks;
118
-
119
- /**
120
- * Whether or not the player is qualified as a target for Zanuka
121
- * @type {boolean}
122
- */
123
- this.harvestable = profile.Harvestable;
124
-
125
- /**
126
- * Whether or not the player is qualified as a target for a syndicate death squad
127
- * @type {boolean}
128
- */
129
- this.deathSquadable = profile.DeathSquadable;
130
-
131
- /**
132
- * Date the account was created
133
- * @type {Date}
134
- */
135
- this.created = parseDate(profile.Created);
136
-
137
- /**
138
- * Whether the user has migrated to console or not
139
- * @type {boolean}
140
- */
141
- this.migratedToConsole = profile.MigratedToConsole;
142
-
143
- /**
144
- * List of completed missions and their completions
145
- * @type {Mission}
146
- */
147
- this.missions = profile.Missions.map((m) => new Mission(m, locale));
148
-
149
- /**
150
- * Player standing and title across all syndicates
151
- * @type {Array<Syndicate>}
152
- */
153
- this.syndicates = profile.Affiliations?.map((a) => new Syndicate(a)) ?? [];
154
-
155
- /**
156
- * Daily standing per Syndicate
157
- *
158
- * Faction syndicates all share daily standing
159
- * @type {Map<String,number>}
160
- */
161
- this.dailyStanding = {
162
- daily: profile.DailyAffiliation,
163
- conclave: profile.DailyAffiliationPvp,
164
- simaris: profile.DailyAffiliationLibrary,
165
- ostron: profile.DailyAffiliationCetus,
166
- quills: profile.DailyAffiliationQuills,
167
- solaris: profile.DailyAffiliationSolaris,
168
- ventKids: profile.DailyAffiliationVentkids,
169
- voxSolaris: profile.DailyAffiliationVox,
170
- entrati: profile.DailyAffiliationEntrati,
171
- necraloid: profile.DailyAffiliationNecraloid,
172
- holdfasts: profile.DailyAffiliationZariman,
173
- kahl: profile.DailyAffiliationKahl,
174
- cavia: profile.DailyAffiliationCavia,
175
- hex: profile.DailyAffiliationHex,
176
- };
177
-
178
- /**
179
- * Daily focus
180
- * @type {number}
181
- */
182
- this.dailyFocus = profile.DailyFocus;
183
-
184
- /**
185
- * Player wishlist for in-game market items
186
- */
187
- this.wishList = profile.Wishlist;
188
-
189
- /**
190
- * Whether the player has unlocked their operator or not
191
- * @type {boolean}
192
- */
193
- this.unlockedOperator = profile.UnlockedOperator;
194
-
195
- /**
196
- * Whether the player has unlocked their alignment or not
197
- * @type {boolean}
198
- */
199
- this.unlockedAlignment = profile.UnlockedAlignment;
200
-
201
- /**
202
- * Operator loadout
203
- * @type {OperatorLoadOuts | undefined}
204
- */
205
- this.operatorLoadouts = profile.OperatorLoadOuts?.map((ol) => new OperatorLoadOuts(ol));
206
-
207
- /**
208
- * Player's alignment
209
- * @type {Map<String,number | undefined>}
210
- */
211
- this.alignment = { wisdom: profile.Alignment?.Wisdom, alignment: profile.Alignment?.Alignment };
212
- }
213
- }
@@ -1,50 +0,0 @@
1
- import { parseDate } from 'warframe-worldstate-data/utilities';
2
-
3
- import Profile from './Profile.js';
4
- import Stats from './Stats.js';
5
-
6
- /**
7
- * Parser entry point
8
- * @module
9
- */
10
- export default class ProfileParser {
11
- /**
12
- *
13
- * @param {Object} data The data returned by getProfile endpoint
14
- * @param {string} locale The locale to return where possible
15
- * @param {boolean} [withItem=false] Whether or not to include items
16
- */
17
- constructor(data, locale = 'en', withItem = false) {
18
- /**
19
- * Player's profile
20
- * @type {Profile}
21
- */
22
- this.profile = new Profile(data.Results[0], locale, withItem);
23
-
24
- /**
25
- * @type {number}
26
- */
27
- this.techProjects = data.TechProjects;
28
-
29
- /**
30
- * @type {number}
31
- */
32
- this.xpComponents = data.XpCompoents;
33
-
34
- /**
35
- * @type {number}
36
- */
37
- this.xpCacheExpiryDate = parseDate(data.XpCacheExpiryDate);
38
-
39
- /**
40
- * @type {number}
41
- */
42
- this.ceremonyResetDate = parseDate(data.CeremonyResetDate);
43
-
44
- /**
45
- * Player stats
46
- * @type {Stats}
47
- */
48
- this.stats = new Stats(data.Stats);
49
- }
50
- }
package/src/Pvp.js DELETED
@@ -1,35 +0,0 @@
1
- /**
2
- * Player's conclave stats
3
- * @module
4
- */
5
- export default class Pvp {
6
- /**
7
- *
8
- * @param {Object} pvp PVP data to parse
9
- */
10
- constructor(pvp) {
11
- /**
12
- * PVP match unique name
13
- * @type {String}
14
- */
15
- this.uniqueName = pvp.type;
16
-
17
- /**
18
- * Deaths for this match
19
- * @type {number | undefined}
20
- */
21
- this.suitDeaths = pvp.suitDeaths;
22
-
23
- /**
24
- * Warframe kills
25
- * @type {number | undefined}
26
- */
27
- this.suitKills = pvp.suitKills;
28
-
29
- /**
30
- * Weapon killes
31
- * @type {number | undefined}
32
- */
33
- this.weaponKills = pvp.weaponKills;
34
- }
35
- }
package/src/Race.js DELETED
@@ -1,33 +0,0 @@
1
- /**
2
- * Represents a k-drive race
3
- * @module
4
- */
5
- export default class Race {
6
- /**
7
- *
8
- * @param {string} type Race name
9
- * @param {number} highScore high score
10
- */
11
- constructor(type, highScore) {
12
- /**
13
- * Race name
14
- * @type {String}
15
- */
16
- this.uniqueName = type;
17
-
18
- /**
19
- * Race High score
20
- * @type {number}
21
- */
22
- this.highScore = highScore;
23
- }
24
-
25
- /**
26
- * Created an array of Race objects from DE's Races array
27
- * @param {Object} races Array of races
28
- * @returns {Race[]} An array of races formatted in a more consumable way.
29
- */
30
- static fromRaceObject(races) {
31
- return Object.entries(races ?? []).map(([type, { highScore }]) => new Race(type, highScore));
32
- }
33
- }
package/src/Scan.js DELETED
@@ -1,22 +0,0 @@
1
- /**
2
- * Represents an enemy scanned to the codex
3
- * @module
4
- */
5
- export default class Scan {
6
- /**
7
- * @param {Object} scan The scanned Warframe object
8
- */
9
- constructor(scan) {
10
- /**
11
- * Enemy unique name
12
- * @type {String}
13
- */
14
- this.uniqueName = scan.type;
15
-
16
- /**
17
- * Number of scans done
18
- * @type {number}
19
- */
20
- this.scans = scan.scans;
21
- }
22
- }
package/src/Skin.js DELETED
@@ -1,33 +0,0 @@
1
- import { find } from './Utils.js';
2
-
3
- /**
4
- * A skin class
5
- * @module
6
- */
7
- export default class Skin {
8
- /**
9
- *
10
- * @param {Object} skin The skin data to parse
11
- * @param {string} [locale='en'] The locale to return skin item in
12
- */
13
- constructor(skin, locale = 'en') {
14
- /**
15
- * Unique name
16
- * @type {String}
17
- */
18
- this.uniqueName = skin.ItemType;
19
-
20
- const item = find(skin.ItemType, locale);
21
- /**
22
- * The Warframe item that matches the unique name
23
- */
24
- if (item) this.item = item;
25
- }
26
- }
27
-
28
- /**
29
- * @deprecated Move to Skin, this is just here to not break anything for early users
30
- * @param {Object} skin Skin object
31
- * @returns {Skin} Skin object with possible item
32
- */
33
- export const WeaponSkin = (skin) => new Skin(skin);