warframe-worldstate-data 2.24.10 → 3.0.0

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 (284) hide show
  1. package/.lintstagedrc.yml +5 -5
  2. package/.mocharc.yml +7 -1
  3. package/biome.json +51 -0
  4. package/data/languages.json +9 -0
  5. package/data/synthTargets.json +1 -1
  6. package/dist/data/arcanes.json +461 -0
  7. package/dist/data/archonShards.json +224 -0
  8. package/dist/data/conclaveData.json +425 -0
  9. package/dist/data/cs/arcanes.json +461 -0
  10. package/dist/data/cs/archonShards.json +224 -0
  11. package/dist/data/cs/conclaveData.json +425 -0
  12. package/dist/data/cs/eventsData.json +27 -0
  13. package/dist/data/cs/factionsData.json +26 -0
  14. package/dist/data/cs/fissureModifiers.json +26 -0
  15. package/dist/data/cs/languages.json +19240 -0
  16. package/dist/data/cs/missionTypes.json +77 -0
  17. package/dist/data/cs/operationTypes.json +6 -0
  18. package/dist/data/cs/persistentEnemyData.json +21 -0
  19. package/dist/data/cs/solNodes.json +2237 -0
  20. package/dist/data/cs/sortieData.json +4253 -0
  21. package/dist/data/cs/steelPath.json +114 -0
  22. package/dist/data/cs/syndicatesData.json +86 -0
  23. package/dist/data/cs/synthTargets.json +1262 -0
  24. package/dist/data/cs/tutorials.json +17 -0
  25. package/dist/data/cs/upgradeTypes.json +14 -0
  26. package/dist/data/de/arcanes.json +461 -0
  27. package/dist/data/de/archonShards.json +224 -0
  28. package/dist/data/de/conclaveData.json +425 -0
  29. package/dist/data/de/eventsData.json +27 -0
  30. package/dist/data/de/factionsData.json +26 -0
  31. package/dist/data/de/fissureModifiers.json +26 -0
  32. package/dist/data/de/languages.json +19240 -0
  33. package/dist/data/de/missionTypes.json +77 -0
  34. package/dist/data/de/operationTypes.json +6 -0
  35. package/dist/data/de/persistentEnemyData.json +21 -0
  36. package/dist/data/de/solNodes.json +2237 -0
  37. package/dist/data/de/sortieData.json +4253 -0
  38. package/dist/data/de/steelPath.json +114 -0
  39. package/dist/data/de/syndicatesData.json +86 -0
  40. package/dist/data/de/synthTargets.json +1262 -0
  41. package/dist/data/de/tutorials.json +17 -0
  42. package/dist/data/de/upgradeTypes.json +14 -0
  43. package/dist/data/es/arcanes.json +461 -0
  44. package/dist/data/es/archonShards.json +224 -0
  45. package/dist/data/es/conclaveData.json +425 -0
  46. package/dist/data/es/eventsData.json +27 -0
  47. package/dist/data/es/factionsData.json +26 -0
  48. package/dist/data/es/fissureModifiers.json +26 -0
  49. package/dist/data/es/languages.json +19240 -0
  50. package/dist/data/es/missionTypes.json +77 -0
  51. package/dist/data/es/operationTypes.json +6 -0
  52. package/dist/data/es/persistentEnemyData.json +21 -0
  53. package/dist/data/es/solNodes.json +2237 -0
  54. package/dist/data/es/sortieData.json +4253 -0
  55. package/dist/data/es/steelPath.json +114 -0
  56. package/dist/data/es/syndicatesData.json +86 -0
  57. package/dist/data/es/synthTargets.json +1262 -0
  58. package/dist/data/es/tutorials.json +17 -0
  59. package/dist/data/es/upgradeTypes.json +14 -0
  60. package/dist/data/eventsData.json +27 -0
  61. package/dist/data/factionsData.json +26 -0
  62. package/dist/data/fissureModifiers.json +26 -0
  63. package/dist/data/fr/arcanes.json +461 -0
  64. package/dist/data/fr/archonShards.json +224 -0
  65. package/dist/data/fr/conclaveData.json +425 -0
  66. package/dist/data/fr/eventsData.json +27 -0
  67. package/dist/data/fr/factionsData.json +26 -0
  68. package/dist/data/fr/fissureModifiers.json +26 -0
  69. package/dist/data/fr/languages.json +19240 -0
  70. package/dist/data/fr/missionTypes.json +77 -0
  71. package/dist/data/fr/operationTypes.json +6 -0
  72. package/dist/data/fr/persistentEnemyData.json +21 -0
  73. package/dist/data/fr/solNodes.json +2237 -0
  74. package/dist/data/fr/sortieData.json +4253 -0
  75. package/dist/data/fr/steelPath.json +114 -0
  76. package/dist/data/fr/syndicatesData.json +86 -0
  77. package/dist/data/fr/synthTargets.json +1262 -0
  78. package/dist/data/fr/tutorials.json +17 -0
  79. package/dist/data/fr/upgradeTypes.json +14 -0
  80. package/dist/data/index.html +13 -0
  81. package/dist/data/it/arcanes.json +461 -0
  82. package/dist/data/it/archonShards.json +224 -0
  83. package/dist/data/it/conclaveData.json +425 -0
  84. package/dist/data/it/eventsData.json +27 -0
  85. package/dist/data/it/factionsData.json +26 -0
  86. package/dist/data/it/fissureModifiers.json +26 -0
  87. package/dist/data/it/languages.json +19240 -0
  88. package/dist/data/it/missionTypes.json +77 -0
  89. package/dist/data/it/operationTypes.json +6 -0
  90. package/dist/data/it/persistentEnemyData.json +21 -0
  91. package/dist/data/it/solNodes.json +2237 -0
  92. package/dist/data/it/sortieData.json +4253 -0
  93. package/dist/data/it/steelPath.json +114 -0
  94. package/dist/data/it/syndicatesData.json +86 -0
  95. package/dist/data/it/synthTargets.json +1262 -0
  96. package/dist/data/it/tutorials.json +17 -0
  97. package/dist/data/it/upgradeTypes.json +14 -0
  98. package/dist/data/ko/arcanes.json +461 -0
  99. package/dist/data/ko/archonShards.json +224 -0
  100. package/dist/data/ko/conclaveData.json +425 -0
  101. package/dist/data/ko/eventsData.json +27 -0
  102. package/dist/data/ko/factionsData.json +26 -0
  103. package/dist/data/ko/fissureModifiers.json +26 -0
  104. package/dist/data/ko/languages.json +19240 -0
  105. package/dist/data/ko/missionTypes.json +77 -0
  106. package/dist/data/ko/operationTypes.json +6 -0
  107. package/dist/data/ko/persistentEnemyData.json +21 -0
  108. package/dist/data/ko/solNodes.json +2237 -0
  109. package/dist/data/ko/sortieData.json +4253 -0
  110. package/dist/data/ko/steelPath.json +114 -0
  111. package/dist/data/ko/syndicatesData.json +86 -0
  112. package/dist/data/ko/synthTargets.json +1262 -0
  113. package/dist/data/ko/tutorials.json +17 -0
  114. package/dist/data/ko/upgradeTypes.json +14 -0
  115. package/dist/data/languages.json +19249 -0
  116. package/dist/data/missionTypes.json +77 -0
  117. package/dist/data/operationTypes.json +6 -0
  118. package/dist/data/persistentEnemyData.json +21 -0
  119. package/dist/data/pl/arcanes.json +461 -0
  120. package/dist/data/pl/archonShards.json +224 -0
  121. package/dist/data/pl/conclaveData.json +425 -0
  122. package/dist/data/pl/eventsData.json +27 -0
  123. package/dist/data/pl/factionsData.json +26 -0
  124. package/dist/data/pl/fissureModifiers.json +26 -0
  125. package/dist/data/pl/languages.json +19240 -0
  126. package/dist/data/pl/missionTypes.json +77 -0
  127. package/dist/data/pl/operationTypes.json +6 -0
  128. package/dist/data/pl/persistentEnemyData.json +21 -0
  129. package/dist/data/pl/solNodes.json +2237 -0
  130. package/dist/data/pl/sortieData.json +4253 -0
  131. package/dist/data/pl/steelPath.json +114 -0
  132. package/dist/data/pl/syndicatesData.json +86 -0
  133. package/dist/data/pl/synthTargets.json +1262 -0
  134. package/dist/data/pl/tutorials.json +17 -0
  135. package/dist/data/pl/upgradeTypes.json +14 -0
  136. package/dist/data/pt/arcanes.json +461 -0
  137. package/dist/data/pt/archonShards.json +224 -0
  138. package/dist/data/pt/conclaveData.json +425 -0
  139. package/dist/data/pt/eventsData.json +27 -0
  140. package/dist/data/pt/factionsData.json +26 -0
  141. package/dist/data/pt/fissureModifiers.json +26 -0
  142. package/dist/data/pt/languages.json +19240 -0
  143. package/dist/data/pt/missionTypes.json +77 -0
  144. package/dist/data/pt/operationTypes.json +6 -0
  145. package/dist/data/pt/persistentEnemyData.json +21 -0
  146. package/dist/data/pt/solNodes.json +2237 -0
  147. package/dist/data/pt/sortieData.json +4253 -0
  148. package/dist/data/pt/steelPath.json +114 -0
  149. package/dist/data/pt/syndicatesData.json +86 -0
  150. package/dist/data/pt/synthTargets.json +1262 -0
  151. package/dist/data/pt/tutorials.json +17 -0
  152. package/dist/data/pt/upgradeTypes.json +14 -0
  153. package/dist/data/ru/arcanes.json +461 -0
  154. package/dist/data/ru/archonShards.json +224 -0
  155. package/dist/data/ru/conclaveData.json +425 -0
  156. package/dist/data/ru/eventsData.json +27 -0
  157. package/dist/data/ru/factionsData.json +26 -0
  158. package/dist/data/ru/fissureModifiers.json +26 -0
  159. package/dist/data/ru/languages.json +19240 -0
  160. package/dist/data/ru/missionTypes.json +77 -0
  161. package/dist/data/ru/operationTypes.json +6 -0
  162. package/dist/data/ru/persistentEnemyData.json +21 -0
  163. package/dist/data/ru/solNodes.json +2237 -0
  164. package/dist/data/ru/sortieData.json +4253 -0
  165. package/dist/data/ru/steelPath.json +114 -0
  166. package/dist/data/ru/syndicatesData.json +86 -0
  167. package/dist/data/ru/synthTargets.json +1262 -0
  168. package/dist/data/ru/tutorials.json +17 -0
  169. package/dist/data/ru/upgradeTypes.json +14 -0
  170. package/dist/data/solNodes.json +2237 -0
  171. package/dist/data/sortieData.json +4253 -0
  172. package/dist/data/sr/arcanes.json +461 -0
  173. package/dist/data/sr/archonShards.json +224 -0
  174. package/dist/data/sr/conclaveData.json +425 -0
  175. package/dist/data/sr/eventsData.json +27 -0
  176. package/dist/data/sr/factionsData.json +26 -0
  177. package/dist/data/sr/fissureModifiers.json +26 -0
  178. package/dist/data/sr/languages.json +19240 -0
  179. package/dist/data/sr/missionTypes.json +77 -0
  180. package/dist/data/sr/operationTypes.json +6 -0
  181. package/dist/data/sr/persistentEnemyData.json +21 -0
  182. package/dist/data/sr/solNodes.json +2237 -0
  183. package/dist/data/sr/sortieData.json +4253 -0
  184. package/dist/data/sr/steelPath.json +114 -0
  185. package/dist/data/sr/syndicatesData.json +86 -0
  186. package/dist/data/sr/synthTargets.json +1262 -0
  187. package/dist/data/sr/tutorials.json +17 -0
  188. package/dist/data/sr/upgradeTypes.json +14 -0
  189. package/dist/data/steelPath.json +33 -0
  190. package/dist/data/syndicatesData.json +86 -0
  191. package/dist/data/synthTargets.json +1262 -0
  192. package/dist/data/tr/arcanes.json +461 -0
  193. package/dist/data/tr/archonShards.json +224 -0
  194. package/dist/data/tr/conclaveData.json +425 -0
  195. package/dist/data/tr/eventsData.json +27 -0
  196. package/dist/data/tr/factionsData.json +26 -0
  197. package/dist/data/tr/fissureModifiers.json +26 -0
  198. package/dist/data/tr/languages.json +19240 -0
  199. package/dist/data/tr/missionTypes.json +77 -0
  200. package/dist/data/tr/operationTypes.json +6 -0
  201. package/dist/data/tr/persistentEnemyData.json +21 -0
  202. package/dist/data/tr/solNodes.json +2237 -0
  203. package/dist/data/tr/sortieData.json +4253 -0
  204. package/dist/data/tr/steelPath.json +114 -0
  205. package/dist/data/tr/syndicatesData.json +86 -0
  206. package/dist/data/tr/synthTargets.json +1262 -0
  207. package/dist/data/tr/tutorials.json +17 -0
  208. package/dist/data/tr/upgradeTypes.json +14 -0
  209. package/dist/data/tutorials.json +17 -0
  210. package/dist/data/uk/arcanes.json +461 -0
  211. package/dist/data/uk/archonShards.json +224 -0
  212. package/dist/data/uk/conclaveData.json +425 -0
  213. package/dist/data/uk/eventsData.json +27 -0
  214. package/dist/data/uk/factionsData.json +26 -0
  215. package/dist/data/uk/fissureModifiers.json +26 -0
  216. package/dist/data/uk/languages.json +19240 -0
  217. package/dist/data/uk/missionTypes.json +77 -0
  218. package/dist/data/uk/operationTypes.json +6 -0
  219. package/dist/data/uk/persistentEnemyData.json +21 -0
  220. package/dist/data/uk/solNodes.json +2237 -0
  221. package/dist/data/uk/sortieData.json +4253 -0
  222. package/dist/data/uk/steelPath.json +114 -0
  223. package/dist/data/uk/syndicatesData.json +86 -0
  224. package/dist/data/uk/synthTargets.json +1262 -0
  225. package/dist/data/uk/tutorials.json +17 -0
  226. package/dist/data/uk/upgradeTypes.json +14 -0
  227. package/dist/data/upgradeTypes.json +14 -0
  228. package/dist/data/zh/arcanes.json +461 -0
  229. package/dist/data/zh/archonShards.json +224 -0
  230. package/dist/data/zh/conclaveData.json +425 -0
  231. package/dist/data/zh/eventsData.json +27 -0
  232. package/dist/data/zh/factionsData.json +26 -0
  233. package/dist/data/zh/fissureModifiers.json +26 -0
  234. package/dist/data/zh/languages.json +19240 -0
  235. package/dist/data/zh/missionTypes.json +77 -0
  236. package/dist/data/zh/operationTypes.json +6 -0
  237. package/dist/data/zh/persistentEnemyData.json +21 -0
  238. package/dist/data/zh/solNodes.json +2237 -0
  239. package/dist/data/zh/sortieData.json +4253 -0
  240. package/dist/data/zh/steelPath.json +114 -0
  241. package/dist/data/zh/syndicatesData.json +86 -0
  242. package/dist/data/zh/synthTargets.json +1262 -0
  243. package/dist/data/zh/tutorials.json +17 -0
  244. package/dist/data/zh/upgradeTypes.json +14 -0
  245. package/dist/exports-D0bYygo0.d.ts +122 -0
  246. package/dist/exports-DOwA1rwv.js +78 -0
  247. package/dist/exports.d.ts +3 -0
  248. package/dist/exports.js +4 -0
  249. package/dist/integrity-Cp6DXUCT.js +15 -0
  250. package/dist/integrity-hhdd4nAB.d.ts +9 -0
  251. package/dist/safeImport-BXmqy9V4.js +21 -0
  252. package/dist/safeImport.d.ts +10 -0
  253. package/dist/safeImport.js +3 -0
  254. package/dist/timeDate-B78E0z0S.js +74 -0
  255. package/dist/timeDate-BZaZFq86.d.ts +48 -0
  256. package/dist/tools/integrity.d.ts +2 -0
  257. package/dist/tools/integrity.js +3 -0
  258. package/dist/tools/timeDate.d.ts +2 -0
  259. package/dist/tools/timeDate.js +3 -0
  260. package/dist/tools/translation.d.ts +4 -0
  261. package/dist/tools/translation.js +5 -0
  262. package/dist/tools/utilities.d.ts +6 -0
  263. package/dist/tools/utilities.js +7 -0
  264. package/dist/translation-BbEpzl6v.js +342 -0
  265. package/dist/translation-CMA-O2tP.d.ts +292 -0
  266. package/dist/types-Clh1x9kB.d.ts +94 -0
  267. package/dist/types.d.ts +2 -0
  268. package/dist/types.js +0 -0
  269. package/exports.ts +153 -0
  270. package/package.json +31 -18
  271. package/{safeImport.js → safeImport.ts} +8 -4
  272. package/tools/integrity.ts +16 -0
  273. package/tools/sortLanguages.ts +44 -0
  274. package/tools/{timeDate.js → timeDate.ts} +12 -8
  275. package/tools/{translation.js → translation.ts} +79 -52
  276. package/tools/utilities.ts +3 -0
  277. package/tsconfig.json +13 -0
  278. package/tsdown.config.ts +15 -0
  279. package/types.ts +69 -0
  280. package/.eslintignore +0 -3
  281. package/.eslintrc.yml +0 -19
  282. package/exports.js +0 -144
  283. package/tools/integrity.js +0 -15
  284. package/tools/utilities.js +0 -3
@@ -1,11 +1,12 @@
1
- import data from '../exports.js';
1
+ import data, { WorldstateLangBundle, type Locale } from '../exports';
2
+ import { ArchonShard, SolNode, Conclave, SteelPath } from '../types';
2
3
 
3
4
  /**
4
5
  * Rough Titlecase!
5
6
  * @param {string} str string to be titlecased
6
7
  * @returns {string} titlecased string
7
8
  */
8
- export const toTitleCase = (str) => {
9
+ export const toTitleCase = (str: string): string => {
9
10
  return str.replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase());
10
11
  };
11
12
 
@@ -14,17 +15,18 @@ export const toTitleCase = (str) => {
14
15
  * @param {string} str localization resource key
15
16
  * @returns {string} human-readable string
16
17
  */
17
- export const splitResourceName = (str) =>
18
+ export const splitResourceName = (str: string): string =>
18
19
  str
19
20
  .split(/([A-Z]?[^A-Z]*)/g)
20
21
  .filter(Boolean)
21
22
  .join(' ');
22
23
 
23
- export const lastResourceName = (str) => (typeof str === 'string' ? str.split?.('/').reverse()[0] : str);
24
+ export const lastResourceName = (str: string | undefined) => (str ? str.split?.('/').reverse()[0] : str);
24
25
 
25
- const i18n = (locale = 'en') => data[locale] || data;
26
+ const i18n = (locale: Locale = 'en') => data[locale] || data;
26
27
 
27
- const keyInData = (key, dataOverride) => (key in i18n(dataOverride) ? i18n(dataOverride)[key] : key);
28
+ const keyInData = <T>(key: keyof WorldstateLangBundle, dataOverride?: Locale): T =>
29
+ key in i18n(dataOverride) ? (i18n(dataOverride)[key] as T) : (key as T);
28
30
 
29
31
  /**
30
32
  *
@@ -32,7 +34,9 @@ const keyInData = (key, dataOverride) => (key in i18n(dataOverride) ? i18n(dataO
32
34
  * @param {string} dataOverride locale for use with translation
33
35
  * @returns {Object | undefined}
34
36
  */
35
- export const archonShard = (color, dataOverride = 'en') => keyInData('archonShards', dataOverride)[color];
37
+ export const archonShard = (color: string, dataOverride: Locale = 'en') => {
38
+ return keyInData<Record<string, ArchonShard>>('archonShards', dataOverride)[color] as ArchonShard;
39
+ };
36
40
 
37
41
  /**
38
42
  *
@@ -40,7 +44,8 @@ export const archonShard = (color, dataOverride = 'en') => keyInData('archonShar
40
44
  * @param {string} dataOverride locale for use with translation
41
45
  * @returns {string}
42
46
  */
43
- export const archonShardColor = (color, dataOverride = 'en') => archonShard(color, dataOverride)?.value ?? color;
47
+ export const archonShardColor = (color: string, dataOverride: Locale = 'en'): string =>
48
+ archonShard(color, dataOverride)?.value ?? color;
44
49
 
45
50
  /**
46
51
  *
@@ -49,7 +54,7 @@ export const archonShardColor = (color, dataOverride = 'en') => archonShard(colo
49
54
  * @param {string} dataOverride locale for use with translation
50
55
  * @returns {string}
51
56
  */
52
- export const archonShardUpgradeType = (color, upgradeType, dataOverride = 'en') =>
57
+ export const archonShardUpgradeType = (color: string, upgradeType: string, dataOverride: Locale = 'en'): string =>
53
58
  archonShard(color, dataOverride)?.upgradeTypes[upgradeType]?.value ?? lastResourceName(upgradeType);
54
59
 
55
60
  /**
@@ -58,10 +63,11 @@ export const archonShardUpgradeType = (color, upgradeType, dataOverride = 'en')
58
63
  * @param {string} dataOverride locale for use with translation
59
64
  * @returns {string} faction name
60
65
  */
61
- export const faction = (key, dataOverride = 'en') => keyInData('factions', dataOverride)[key]?.value ?? key;
66
+ export const faction = (key: string, dataOverride: Locale = 'en'): string =>
67
+ keyInData<Record<string, { value: string }>>('factions', dataOverride)[key]?.value ?? key;
62
68
 
63
- const solNode = (key, thing, dataOverride = 'en') =>
64
- keyInData('solNodes', dataOverride)?.[key]?.[thing] ?? lastResourceName(key) ?? key;
69
+ const solNode = (key: string, thing: keyof SolNode, dataOverride: Locale = 'en') =>
70
+ keyInData<Record<string, SolNode>>('solNodes', dataOverride)?.[key]?.[thing] ?? lastResourceName(key) ?? key;
65
71
 
66
72
  /**
67
73
  *
@@ -69,7 +75,7 @@ const solNode = (key, thing, dataOverride = 'en') =>
69
75
  * @param {string} dataOverride locale for use with translation
70
76
  * @returns {string} node name
71
77
  */
72
- export const node = (key, dataOverride = 'en') => solNode(key, 'value', dataOverride);
78
+ export const node = (key: string, dataOverride: Locale = 'en'): string => solNode(key, 'value', dataOverride);
73
79
 
74
80
  /**
75
81
  *
@@ -77,14 +83,14 @@ export const node = (key, dataOverride = 'en') => solNode(key, 'value', dataOver
77
83
  * @param {string} dataOverride locale for use with translation
78
84
  * @returns {string} mission type of the node
79
85
  */
80
- export const nodeMissionType = (key, dataOverride = 'en') => solNode(key, 'type', dataOverride);
86
+ export const nodeMissionType = (key: string, dataOverride: Locale = 'en'): string => solNode(key, 'type', dataOverride);
81
87
  /**
82
88
  *
83
89
  * @param {string} key - The data key
84
90
  * @param {string} dataOverride locale for use with translation
85
91
  * @returns {string} faction that controls the node
86
92
  */
87
- export const nodeEnemy = (key, dataOverride = 'en') => {
93
+ export const nodeEnemy = (key: string, dataOverride: Locale = 'en'): string => {
88
94
  return key in i18n(dataOverride).solNodes ? i18n(dataOverride).solNodes[key].enemy : (lastResourceName(key) ?? key);
89
95
  };
90
96
 
@@ -94,12 +100,12 @@ export const nodeEnemy = (key, dataOverride = 'en') => {
94
100
  * @param {string} dataOverride locale for use with translation
95
101
  * @returns {string} localization for language string
96
102
  */
97
- export const languageString = (key, dataOverride = 'en') => {
98
- const lowerKey = String(key).toLowerCase();
103
+ export const languageString = (key: string, dataOverride: Locale = 'en'): string => {
104
+ const lowerKey: string = String(key).toLowerCase();
99
105
  return (
100
- keyInData('languages', dataOverride)[lowerKey]?.value ??
101
- keyInData('languages', dataOverride)[key]?.value ??
102
- (key ? toTitleCase(splitResourceName(lastResourceName(String(key)))) : key)
106
+ i18n(dataOverride).languages[lowerKey]?.value ??
107
+ i18n(dataOverride).languages[key]?.value ??
108
+ (key ? toTitleCase(splitResourceName(lastResourceName(String(key)) ?? '')) : key)
103
109
  );
104
110
  };
105
111
 
@@ -109,12 +115,12 @@ export const languageString = (key, dataOverride = 'en') => {
109
115
  * @param {string} dataOverride locale for use with translation
110
116
  * @returns {string} localization for language description
111
117
  */
112
- export const languageDesc = (key, dataOverride = 'en') => {
118
+ export const languageDesc = (key: string, dataOverride: Locale = 'en'): string => {
113
119
  const lowerKey = String(key).toLowerCase();
114
120
  return (
115
121
  i18n(dataOverride).languages[lowerKey]?.desc ??
116
122
  i18n(dataOverride).languages[key]?.desc ??
117
- (key ? `[PH] ${toTitleCase(splitResourceName(lastResourceName(String(key))))} Desc` : key)
123
+ (key ? `[PH] ${toTitleCase(splitResourceName(lastResourceName(String(key)) ?? ''))} Desc` : key)
118
124
  );
119
125
  };
120
126
 
@@ -124,12 +130,13 @@ export const languageDesc = (key, dataOverride = 'en') => {
124
130
  * @param {string} dataOverride locale for use with translation
125
131
  * @returns {string} translation for mission type
126
132
  */
127
- export const missionType = (key, dataOverride = 'en') => {
133
+ export const missionType = (key: string, dataOverride: Locale = 'en'): string => {
128
134
  const keyBased = key && typeof key === 'string' && toTitleCase((key ?? '').replace(/^MT_/, ''));
129
- return key in i18n(dataOverride).missionTypes ? i18n(dataOverride).missionTypes[key].value : keyBased;
135
+ return key in i18n(dataOverride).missionTypes ? i18n(dataOverride).missionTypes[key].value : (keyBased as string);
130
136
  };
131
137
 
132
- const conclave = (key, thing, dataOverride = 'en') => keyInData('conclave', dataOverride)?.[thing]?.[key]?.value ?? key;
138
+ const conclave = (key: string, thing: keyof Conclave, dataOverride: Locale = 'en') =>
139
+ keyInData<Conclave>('conclave', dataOverride)?.[thing]?.[key];
133
140
 
134
141
  /**
135
142
  *
@@ -137,17 +144,20 @@ const conclave = (key, thing, dataOverride = 'en') => keyInData('conclave', data
137
144
  * @param {string} dataOverride locale for use with translation
138
145
  * @returns {string} conclave mode
139
146
  */
140
- export const conclaveMode = (key, dataOverride = 'en') => conclave(key, 'modes', dataOverride);
147
+ export const conclaveMode = (key: string, dataOverride: Locale = 'en'): string =>
148
+ (conclave(key, 'modes', dataOverride) as { value: string })?.value ?? key;
141
149
 
142
150
  /**
143
151
  *
144
152
  * @param {string} key - The data key
145
153
  * @param {string} dataOverride locale for use with translation
146
- * @returns {string} conclave category
154
+ * @returns {{ value: string; description: string }} conclave category
147
155
  */
148
- export const conclaveCategory = (key, dataOverride = 'en') => conclave(key, 'categories', dataOverride);
156
+ export const conclaveCategory = (key: string, dataOverride: Locale = 'en'): string =>
157
+ (conclave(key, 'categories', dataOverride) as { value: string; description: string })?.value ?? key;
149
158
 
150
- const fissure = (key, dataOverride = 'en') => keyInData('fissureModifiers', dataOverride)?.[key] ?? key;
159
+ const fissure = (key: string, dataOverride: Locale = 'en') =>
160
+ keyInData<Record<string, { value: string; num: number }>>('fissureModifiers', dataOverride)?.[key] ?? key;
151
161
 
152
162
  /**
153
163
  *
@@ -155,7 +165,8 @@ const fissure = (key, dataOverride = 'en') => keyInData('fissureModifiers', data
155
165
  * @param {string} dataOverride locale for use with translation
156
166
  * @returns {string} fissure modifier data
157
167
  */
158
- export const fissureModifier = (key, dataOverride = 'en') => fissure(key, dataOverride)?.value ?? key;
168
+ export const fissureModifier = (key: string, dataOverride: Locale = 'en'): string =>
169
+ fissure(key, dataOverride)?.value ?? key;
159
170
 
160
171
  /**
161
172
  *
@@ -163,7 +174,8 @@ export const fissureModifier = (key, dataOverride = 'en') => fissure(key, dataOv
163
174
  * @param {string} dataOverride locale for use with translation
164
175
  * @returns {number | string} fissure tier
165
176
  */
166
- export const fissureTier = (key, dataOverride = 'en') => fissure(key, dataOverride).num ?? key;
177
+ export const fissureTier = (key: string, dataOverride: Locale = 'en'): number | string =>
178
+ fissure(key, dataOverride).num ?? key;
167
179
 
168
180
  /**
169
181
  *
@@ -171,7 +183,8 @@ export const fissureTier = (key, dataOverride = 'en') => fissure(key, dataOverri
171
183
  * @param {string} dataOverride locale for use with translation
172
184
  * @returns {string} syndicate name
173
185
  */
174
- export const syndicate = (key, dataOverride = 'en') => i18n(dataOverride).syndicates[key]?.name ?? key;
186
+ export const syndicate = (key: string, dataOverride: Locale = 'en'): string =>
187
+ i18n(dataOverride).syndicates[key]?.name ?? key;
175
188
 
176
189
  /**
177
190
  *
@@ -179,9 +192,10 @@ export const syndicate = (key, dataOverride = 'en') => i18n(dataOverride).syndic
179
192
  * @param {string} dataOverride locale for use with translation
180
193
  * @returns {string} upgrade type
181
194
  */
182
- export const upgrade = (key, dataOverride = 'en') => i18n(dataOverride).upgradeTypes[key]?.value ?? key;
195
+ export const upgrade = (key: string, dataOverride: Locale = 'en'): string =>
196
+ i18n(dataOverride).upgradeTypes[key]?.value ?? key;
183
197
 
184
- const oppo = (key, dataOverride = 'en') => i18n(dataOverride).operationTypes[key];
198
+ const oppo = (key: string, dataOverride: Locale = 'en') => i18n(dataOverride).operationTypes[key];
185
199
 
186
200
  /**
187
201
  *
@@ -189,7 +203,7 @@ const oppo = (key, dataOverride = 'en') => i18n(dataOverride).operationTypes[key
189
203
  * @param {string} dataOverride locale for use with translation
190
204
  * @returns {string} mathematical operation value
191
205
  */
192
- export const operation = (key, dataOverride = 'en') => oppo(key, dataOverride)?.value ?? key;
206
+ export const operation = (key: string, dataOverride: Locale = 'en'): string => oppo(key, dataOverride)?.value ?? key;
193
207
 
194
208
  /**
195
209
  *
@@ -197,23 +211,25 @@ export const operation = (key, dataOverride = 'en') => oppo(key, dataOverride)?.
197
211
  * @param {string} dataOverride locale for use with translation
198
212
  * @returns {string} symbol of mathematical operation
199
213
  */
200
- export const operationSymbol = (key, dataOverride = 'en') => oppo(key, dataOverride)?.symbol ?? key;
214
+ export const operationSymbol = (key: string, dataOverride: Locale = 'en'): string =>
215
+ oppo(key, dataOverride)?.symbol ?? key;
201
216
 
202
- const sortie = (key, dataOverride = 'en') => i18n(dataOverride).sortie.bosses[key];
217
+ const sortie = (key: string, dataOverride: Locale = 'en') => i18n(dataOverride).sortie.bosses[key];
203
218
 
204
219
  /**
205
220
  * @param {string} key - The data key
206
221
  * @param {string} dataOverride locale for use with translation
207
222
  * @returns {string} sortie boss name
208
223
  */
209
- export const sortieBoss = (key, dataOverride = 'en') => sortie(key, dataOverride)?.name ?? key;
224
+ export const sortieBoss = (key: string, dataOverride: Locale = 'en'): string => sortie(key, dataOverride)?.name ?? key;
210
225
 
211
226
  /**
212
227
  * @param {string} key - The data key
213
228
  * @param {string} dataOverride locale for use with translation
214
229
  * @returns {string} faction for a sortie based on the boss
215
230
  */
216
- export const sortieFaction = (key, dataOverride = 'en') => sortie(key, dataOverride)?.faction ?? key;
231
+ export const sortieFaction = (key: string, dataOverride: Locale = 'en'): string =>
232
+ sortie(key, dataOverride)?.faction ?? key;
217
233
 
218
234
  /**
219
235
  *
@@ -221,14 +237,16 @@ export const sortieFaction = (key, dataOverride = 'en') => sortie(key, dataOverr
221
237
  * @param {string} dataOverride locale for use with translation
222
238
  * @returns {string} sortie modifier data
223
239
  */
224
- export const sortieModifier = (key, dataOverride = 'en') => i18n(dataOverride).sortie.modifierTypes?.[key] ?? key;
240
+ export const sortieModifier = (key: string, dataOverride: Locale = 'en'): string =>
241
+ i18n(dataOverride).sortie.modifierTypes?.[key] ?? key;
225
242
 
226
243
  /**
227
244
  * @param {string} key - The data key
228
245
  * @param {string} dataOverride locale for use with translation
229
246
  * @returns {string} sortie modifier description
230
247
  */
231
- export const sortieModDesc = (key, dataOverride = 'en') => i18n(dataOverride).sortie.modifierDescriptions?.[key] ?? key;
248
+ export const sortieModDesc = (key: string, dataOverride: Locale = 'en'): string =>
249
+ i18n(dataOverride).sortie.modifierDescriptions?.[key] ?? key;
232
250
 
233
251
  /**
234
252
  * Retrieve the localized region for a given key
@@ -236,7 +254,8 @@ export const sortieModDesc = (key, dataOverride = 'en') => i18n(dataOverride).so
236
254
  * @param {string} dataOverride - The locale to use for translations
237
255
  * @returns {string} localized region name
238
256
  */
239
- export const region = (key, dataOverride = 'en') => (key && i18n(dataOverride).persistentEnemy?.regions[key]) ?? key;
257
+ export const region = (key: number, dataOverride: Locale = 'en'): string | number =>
258
+ (key && i18n(dataOverride).persistentEnemy?.regions[key]) ?? key;
240
259
 
241
260
  /**
242
261
  * Retrieve conclave challenge name for the given key and locale
@@ -248,10 +267,17 @@ export const region = (key, dataOverride = 'en') => (key && i18n(dataOverride).p
248
267
  * standing: number,
249
268
  * }} - The conclave challenge name for the given key
250
269
  */
251
- export const conclaveChallenge = (key, dataOverride = 'en') => {
252
- const splitKey = lastResourceName(String(key));
253
-
254
- if (i18n(dataOverride).conclave?.challenges?.[splitKey]) {
270
+ export const conclaveChallenge = (
271
+ key: string,
272
+ dataOverride: Locale = 'en'
273
+ ): {
274
+ title: string;
275
+ description: string;
276
+ standing: number;
277
+ } => {
278
+ const splitKey = lastResourceName(String(key))!;
279
+
280
+ if (splitKey !== undefined && i18n(dataOverride).conclave?.challenges?.[splitKey]) {
255
281
  return i18n(dataOverride).conclave.challenges[splitKey];
256
282
  }
257
283
  return {
@@ -266,9 +292,10 @@ export const conclaveChallenge = (key, dataOverride = 'en') => {
266
292
  * @param {string} dataOverride - The locale to use for translations
267
293
  * @returns {string} - The steel path data for the given key
268
294
  */
269
- export const steelPath = (dataOverride = 'en') => (i18n(dataOverride) || /* istanbul ignore next */ data).steelPath;
295
+ export const steelPath = (dataOverride: Locale = 'en'): SteelPath =>
296
+ (i18n(dataOverride) || /* istanbul ignore next */ data).steelPath;
270
297
 
271
- const valMapping = (key, map) => {
298
+ const valMapping = (key: string, map: Record<string, string>) => {
272
299
  let val = 'None';
273
300
  Object.keys(map).forEach((k) => {
274
301
  if (key.includes(k)) {
@@ -290,7 +317,7 @@ const focusMap = {
290
317
  * @param {string} focus The focus school to translate
291
318
  * @returns {string} The translated focus school
292
319
  */
293
- export const translateFocus = (focus = '') => valMapping(focus, focusMap);
320
+ export const translateFocus = (focus: string = ''): string => valMapping(focus, focusMap);
294
321
 
295
322
  const polarityMap = {
296
323
  AP_ATTACK: 'Madurai',
@@ -307,7 +334,7 @@ const polarityMap = {
307
334
  * @param {string?} pol The polarity to translate
308
335
  * @returns {string} The translated polarity
309
336
  */
310
- export const translatePolarity = (pol = '') => valMapping(pol, polarityMap);
337
+ export const translatePolarity = (pol: string = ''): string => valMapping(pol, polarityMap);
311
338
 
312
339
  const eventTypeMap = {
313
340
  CET_CHALLENGE: 'To Do',
@@ -321,14 +348,14 @@ const eventTypeMap = {
321
348
  * @param {string} key Unique event type
322
349
  * @returns {string}
323
350
  */
324
- export const translateCalendarEvent = (key) => valMapping(key, eventTypeMap);
351
+ export const translateCalendarEvent = (key: string): string => valMapping(key, eventTypeMap);
325
352
 
326
353
  /**
327
354
  * Translate the given season name to a non-unique string
328
355
  * @param {string} season Unique season name
329
356
  * @returns {string}
330
357
  */
331
- export const translateSeason = (season) => toTitleCase(season.replace('CST_', ''));
358
+ export const translateSeason = (season: string): string => toTitleCase(season.replace('CST_', ''));
332
359
 
333
360
  /**
334
361
  * An object containing functions to convert in-game names to their localizations
@@ -0,0 +1,3 @@
1
+ export * from './integrity';
2
+ export * from './timeDate';
3
+ export * from './translation';
package/tsconfig.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "exclude": [
3
+ "node_modules"
4
+ ],
5
+ "compilerOptions": {
6
+ "module": "esnext",
7
+ "target": "es2024", // set to the *lowest* target you support
8
+ "strict": true,
9
+ "moduleResolution": "bundler",
10
+ "esModuleInterop": true,
11
+ "isolatedModules": true,
12
+ }
13
+ }
@@ -0,0 +1,15 @@
1
+ import { defineConfig } from 'tsdown';
2
+
3
+ export default defineConfig({
4
+ entry: [
5
+ 'exports.ts',
6
+ 'safeImport.ts',
7
+ 'types.ts',
8
+ './tools/integrity.ts',
9
+ './tools/timeDate.ts',
10
+ './tools/translation.ts',
11
+ './tools/utilities.ts',
12
+ ],
13
+ copy: ['./data'],
14
+ dts: true
15
+ });
package/types.ts ADDED
@@ -0,0 +1,69 @@
1
+ export interface Arcane {
2
+ regex: string;
3
+ name: string;
4
+ effect: string;
5
+ rarity: string;
6
+ location: string;
7
+ thumbnail: string;
8
+ }
9
+
10
+ export interface ArchonShard {
11
+ value: string;
12
+ upgradeTypes: Record<string, { value: string }>;
13
+ }
14
+
15
+ export interface Conclave {
16
+ modes: Record<string, { value: string }>;
17
+ categories: Record<string, { value: string; description: string }>;
18
+ challenges: Record<string, { title: string; description: string; standing: number }>;
19
+ affectors: Record<string, { title: string; description: string; standing: number }>;
20
+ }
21
+
22
+ export interface Events {
23
+ tags: Record<string, { value: string }>;
24
+ scoreVariables: Record<string, { value: { value: string } }>;
25
+ scoreMaxTags: Record<string, { value: { value: string } }>;
26
+ }
27
+
28
+ export interface SteelPath {
29
+ rotation: SteelPathOffering[];
30
+ evergreen: SteelPathOffering[];
31
+ }
32
+ interface SteelPathOffering {
33
+ name: string;
34
+ cost: string;
35
+ }
36
+
37
+ export interface SynthesisTarget {
38
+ name: string;
39
+ locations: SynthesisTargetLocation[];
40
+ }
41
+
42
+ interface SynthesisTargetLocation {
43
+ last_verified: string;
44
+ level: string;
45
+ spawn_rate: string;
46
+ mission: string;
47
+ planet: string;
48
+ type: string;
49
+ faction: string;
50
+ }
51
+
52
+ export interface SolNode {
53
+ value: string;
54
+ enemy: string;
55
+ type: string;
56
+ }
57
+
58
+ interface SortieEndState {
59
+ bossName: string;
60
+ regions: { name: string; missions: string[] }[];
61
+ }
62
+
63
+ export interface SortieData {
64
+ modifierTypes: Record<string, string>;
65
+ modifierDescriptions: Record<string, string>;
66
+ bosses: Record<string, { name: string; faction: string }>;
67
+ endStates: SortieEndState[];
68
+ modifiers: string[];
69
+ }
package/.eslintignore DELETED
@@ -1,3 +0,0 @@
1
- .github/**
2
- docs/**
3
- data/**
package/.eslintrc.yml DELETED
@@ -1,19 +0,0 @@
1
- parser: '@babel/eslint-parser'
2
- parserOptions:
3
- ecmaFeatures:
4
- modules: true
5
- ecmaVersion: 6
6
- sourceType: module
7
- extends: '@wfcd/eslint-config/esm'
8
- overrides:
9
- - files:
10
- - tools/*.js
11
- rules:
12
- no-console: 'off'
13
- import/no-extraneous-dependencies:
14
- - error
15
- - devDependencies:
16
- - '**/*.test.{js,cjs,mjs}'
17
- - '**/*.spec.{js,cjs,mjs}'
18
- - 'build/**/*.{js,cjs,mjs}'
19
- - 'tools/**/*.{js,cjs,mjs}'
package/exports.js DELETED
@@ -1,144 +0,0 @@
1
- import safeImport from './safeImport.js';
2
-
3
- const locales = ['de', 'es', 'fr', 'it', 'ko', 'pl', 'pt', 'ru', 'zh', 'cs', 'sr', 'uk'];
4
-
5
- /**
6
- * Synthesis target information
7
- * @typedef {Object} SynthesisTarget
8
- * @property {string} name Name of the target
9
- * @property {Object[]} locations Array of verified locations
10
- * @property {string} locations.last_verified Date string for the last verified date
11
- * @property {string} locations.level Level range for enemies on the node.
12
- * @property {string} locations.spawn_rate Plain text Spawn rate for enemy.
13
- * @property {string} locations.mission Mission node for the location
14
- * @property {string} locations.planet Planet the node is on
15
- * @property {string} locations.type Mission type at this location
16
- * @property {string} locations.faction Enemy faction that spawns in this location
17
- */
18
-
19
- /**
20
- * Arcane Data
21
- * @typedef {Object} Arcane
22
- * @deprecated
23
- * @property {string} regex regex string to allow mapping
24
- * @property {string} name name of Arcane
25
- * @property {string} effect what the arcane does
26
- * @property {string} rarity How rare the arcane is
27
- * @property {string} location Where it drops
28
- * @property {string} thumbnail Wiki thumbnail url
29
- * @property {string} info Wiki Page URL
30
- */
31
-
32
- /**
33
- * Conclave Data
34
- * @typedef {Object} Conclave
35
- */
36
-
37
- /**
38
- * Steel Path Offering
39
- * @typedef {Object} SteelPathOffering
40
- * @property {string} name The item being offered
41
- * @property {string} cost The cost of the item
42
- */
43
- /**
44
- * Steel Path
45
- * @typedef {Object} SteelPath
46
- * @property {Array<SteelPathOffering>} rotation A list of offerings for the Steel Path
47
- * @property {Array<SteelPathOffering>} evergreen Constantly available list of items
48
- */
49
-
50
- /**
51
- * Bundles all the data for a particular language
52
- * @typedef {Object} WorldstateLangBundle
53
- * @property {Arcane[]} arcanes Deprecated: Array of arcane data
54
- * @property {Conclave} conclave Data for translating PvP categories and types
55
- * @property {Object} events Deprecated: Data for converting event tags to useable event data.
56
- * Deprecated in favor of keeping values in languages.json
57
- * @property {Object} factions Faction universal name to plain-usage name
58
- * @property {Object} fissureModifiers Map of fissures to "Warframeified" tier names and numbers
59
- * @property {Object} languages Map of "internal" Warframe strings to useable language strings
60
- * @property {Object} missionTypes Map of Mission Type identifiers to their corresponding values
61
- * @property {Object} operationTypes Global modifiers for applying operations to things like
62
- * credits, affinity, etc.
63
- * @property {Object} persistentEnemy Region mapping for indicies to planets
64
- * @property {Object} solNodes Nodes in the Sol system, with enemy type and node information
65
- * @property {Object} sortie Sortie-specific mapping for modifier type, description, and boss
66
- * @property {Array<Object>} tutorials Official tutorials.
67
- * Not many have been released in a long time.
68
- * @property {Object} upgradeTypes Global upgrade types that are modified by #operationTypes
69
- * @property {Array<SynthesisTarget>} synthTargets Synthesis target data for
70
- * optimal locations to find targets.
71
- * @property {Object<string, Record<'name', string>>} syndicates Syndicate data
72
- * @property {SteelPath} steelPath Steel Path mission type translations
73
- */
74
-
75
- const makeBundle = async () => {
76
- /**
77
- * English United States translations bundle,
78
- * default translations
79
- * @type {WorldstateLangBundle}
80
- */
81
- const enUS = {
82
- arcanes: await safeImport('./data/arcanes.json'),
83
- archonShards: await safeImport('./data/archonShards.json'),
84
- conclave: await safeImport('./data/conclaveData.json'),
85
- events: await safeImport('./data/eventsData.json'),
86
- factions: await safeImport('./data/factionsData.json'),
87
- fissureModifiers: await safeImport('./data/fissureModifiers.json'),
88
- languages: await safeImport('./data/languages.json'),
89
- missionTypes: await safeImport('./data/missionTypes.json'),
90
- operationTypes: await safeImport('./data/operationTypes.json'),
91
- persistentEnemy: await safeImport('./data/persistentEnemyData.json'),
92
- solNodes: await safeImport('./data/solNodes.json'),
93
- sortie: await safeImport('./data/sortieData.json'),
94
- syndicates: await safeImport('./data/syndicatesData.json'),
95
- tutorials: await safeImport('./data/tutorials.json'),
96
- upgradeTypes: await safeImport('./data/upgradeTypes.json'),
97
- synthTargets: await safeImport('./data/synthTargets.json'),
98
- steelPath: await safeImport('./data/steelPath.json'),
99
- };
100
- /* eslint-enable global-require */
101
-
102
- const bundle = {
103
- /**
104
- * English United States translations
105
- * @type {WorldstateLangBundle}
106
- */
107
- en_US: enUS,
108
- en: enUS,
109
- ...enUS,
110
- locales,
111
- };
112
-
113
- // eslint-disable-next-line no-restricted-syntax
114
- for await (const locale of locales) {
115
- /**
116
- * Translations bundle for $locale
117
- * @type {WorldstateLangBundle}
118
- */
119
- bundle[locale] = {
120
- arcanes: await safeImport(`./data/${locale}/arcanes.json`, enUS.arcanes),
121
- archonShards: await safeImport('./data/archonShards.json', enUS.archonShards),
122
- conclave: await safeImport(`./data/${locale}/conclaveData.json`, enUS.conclave),
123
- events: await safeImport(`./data/${locale}/eventsData.json`, enUS.events),
124
- factions: await safeImport(`./data/${locale}/factionsData.json`, enUS.factions),
125
- fissureModifiers: await safeImport(`./data/${locale}/fissureModifiers.json`, enUS.fissureModifiers),
126
- languages: await safeImport(`./data/${locale}/languages.json`, enUS.languages),
127
- missionTypes: await safeImport(`./data/${locale}/missionTypes.json`, enUS.missionTypes),
128
- operationTypes: await safeImport(`./data/${locale}/operationTypes.json`, enUS.operationTypes),
129
- persistentEnemy: await safeImport(`./data/${locale}/persistentEnemyData.json`, enUS.persistentEnemy),
130
- solNodes: await safeImport(`./data/${locale}/solNodes.json`, enUS.solNodes),
131
- sortie: await safeImport(`./data/${locale}/sortieData.json`, enUS.sortie),
132
- syndicates: await safeImport(`./data/${locale}/syndicatesData.json`, enUS.syndicates),
133
- tutorials: await safeImport(`./data/${locale}/tutorials.json`, enUS.tutorials),
134
- upgradeTypes: await safeImport(`./data/${locale}/upgradeTypes.json`, enUS.upgradeTypes),
135
- synthTargets: await safeImport(`./data/${locale}/synthTargets.json`, enUS.synthTargets),
136
- steelPath: await safeImport(`./data/${locale}/steelPath.json`, enUS.steelPath),
137
- };
138
- }
139
-
140
- locales.push('en');
141
- return bundle;
142
- };
143
-
144
- export default await makeBundle();
@@ -1,15 +0,0 @@
1
- /**
2
- * @description Insist that the provided data has the required properties.
3
- * @param {Object} thing to encourage to have data
4
- * @param {string[]} args arguments to ensure
5
- */
6
- /* eslint-disable-line import/prefer-default-export */ export const insist = (thing, ...args) => {
7
- if (!thing || !Object.keys(thing).length) {
8
- throw new TypeError(`The provided data does not have the required properties.`);
9
- }
10
- args.forEach((arg) => {
11
- if (!thing[arg]) {
12
- throw new TypeError(`The provided data does not have the required properties.`);
13
- }
14
- });
15
- };
@@ -1,3 +0,0 @@
1
- export * from './integrity.js';
2
- export * from './timeDate.js';
3
- export * from './translation.js';