@xivdyetools/core 2.6.0 → 4.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 (156) hide show
  1. package/README.md +85 -67
  2. package/dist/blending/blending.d.ts +22 -0
  3. package/dist/blending/blending.d.ts.map +1 -0
  4. package/dist/blending/blending.js +129 -0
  5. package/dist/blending/blending.js.map +1 -0
  6. package/dist/blending/conversions.d.ts +53 -0
  7. package/dist/blending/conversions.d.ts.map +1 -0
  8. package/dist/blending/conversions.js +256 -0
  9. package/dist/blending/conversions.js.map +1 -0
  10. package/dist/blending/index.d.ts +8 -0
  11. package/dist/blending/index.d.ts.map +1 -0
  12. package/dist/blending/index.js +3 -0
  13. package/dist/blending/index.js.map +1 -0
  14. package/dist/blending/types.d.ts +36 -0
  15. package/dist/blending/types.d.ts.map +1 -0
  16. package/dist/blending/types.js +21 -0
  17. package/dist/blending/types.js.map +1 -0
  18. package/dist/config/band-calibration.d.ts +68 -0
  19. package/dist/config/band-calibration.d.ts.map +1 -0
  20. package/dist/config/band-calibration.js +196 -0
  21. package/dist/config/band-calibration.js.map +1 -0
  22. package/dist/config/band-vocabulary.d.ts +82 -0
  23. package/dist/config/band-vocabulary.d.ts.map +1 -0
  24. package/dist/config/band-vocabulary.js +117 -0
  25. package/dist/config/band-vocabulary.js.map +1 -0
  26. package/dist/config/consolidated-ids.js +2 -2
  27. package/dist/config/consolidated-ids.js.map +1 -1
  28. package/dist/config/dye-vocabulary.d.ts +45 -0
  29. package/dist/config/dye-vocabulary.d.ts.map +1 -0
  30. package/dist/config/dye-vocabulary.js +58 -0
  31. package/dist/config/dye-vocabulary.js.map +1 -0
  32. package/dist/config/facewear.d.ts +24 -0
  33. package/dist/config/facewear.d.ts.map +1 -0
  34. package/dist/config/facewear.js +35 -0
  35. package/dist/config/facewear.js.map +1 -0
  36. package/dist/config/learn-links.d.ts +70 -0
  37. package/dist/config/learn-links.d.ts.map +1 -0
  38. package/dist/config/learn-links.js +171 -0
  39. package/dist/config/learn-links.js.map +1 -0
  40. package/dist/config/product-links.d.ts +44 -0
  41. package/dist/config/product-links.d.ts.map +1 -0
  42. package/dist/config/product-links.js +44 -0
  43. package/dist/config/product-links.js.map +1 -0
  44. package/dist/constants/index.d.ts +14 -1
  45. package/dist/constants/index.d.ts.map +1 -1
  46. package/dist/constants/index.js +38 -22
  47. package/dist/constants/index.js.map +1 -1
  48. package/dist/data/character_colors/race_specific/hair_colors.json +1 -1
  49. package/dist/data/character_colors/race_specific/skin_colors.json +1 -1
  50. package/dist/data/dyes.json +1127 -0
  51. package/dist/data/facewear_colors.json +57 -0
  52. package/dist/data/locales/de.json +4 -50
  53. package/dist/data/locales/en.json +4 -50
  54. package/dist/data/locales/fr.json +4 -50
  55. package/dist/data/locales/ja.json +4 -50
  56. package/dist/data/locales/ko.json +4 -50
  57. package/dist/data/locales/zh.json +4 -50
  58. package/dist/data/presets.json +59 -301
  59. package/dist/index.d.ts +156 -17
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +114 -10
  62. package/dist/index.js.map +1 -1
  63. package/dist/services/APIService.d.ts +39 -62
  64. package/dist/services/APIService.d.ts.map +1 -1
  65. package/dist/services/APIService.js +156 -150
  66. package/dist/services/APIService.js.map +1 -1
  67. package/dist/services/CharacterColorService.d.ts +4 -36
  68. package/dist/services/CharacterColorService.d.ts.map +1 -1
  69. package/dist/services/CharacterColorService.js +57 -79
  70. package/dist/services/CharacterColorService.js.map +1 -1
  71. package/dist/services/ColorService.d.ts +57 -68
  72. package/dist/services/ColorService.d.ts.map +1 -1
  73. package/dist/services/ColorService.js +86 -94
  74. package/dist/services/ColorService.js.map +1 -1
  75. package/dist/services/DyeService.d.ts +11 -104
  76. package/dist/services/DyeService.d.ts.map +1 -1
  77. package/dist/services/DyeService.js +19 -157
  78. package/dist/services/DyeService.js.map +1 -1
  79. package/dist/services/LocalizationService.d.ts +48 -59
  80. package/dist/services/LocalizationService.d.ts.map +1 -1
  81. package/dist/services/LocalizationService.js +86 -95
  82. package/dist/services/LocalizationService.js.map +1 -1
  83. package/dist/services/PaletteService.d.ts +8 -9
  84. package/dist/services/PaletteService.d.ts.map +1 -1
  85. package/dist/services/PaletteService.js +10 -22
  86. package/dist/services/PaletteService.js.map +1 -1
  87. package/dist/services/PresetService.d.ts +2 -34
  88. package/dist/services/PresetService.d.ts.map +1 -1
  89. package/dist/services/PresetService.js +12 -59
  90. package/dist/services/PresetService.js.map +1 -1
  91. package/dist/services/chara/chara-models.d.ts +68 -0
  92. package/dist/services/chara/chara-models.d.ts.map +1 -0
  93. package/dist/services/chara/chara-models.js +87 -0
  94. package/dist/services/chara/chara-models.js.map +1 -0
  95. package/dist/services/chara/chara-parser.d.ts +95 -0
  96. package/dist/services/chara/chara-parser.d.ts.map +1 -0
  97. package/dist/services/chara/chara-parser.js +299 -0
  98. package/dist/services/chara/chara-parser.js.map +1 -0
  99. package/dist/services/chara/chara-resolver.d.ts +103 -0
  100. package/dist/services/chara/chara-resolver.d.ts.map +1 -0
  101. package/dist/services/chara/chara-resolver.js +233 -0
  102. package/dist/services/chara/chara-resolver.js.map +1 -0
  103. package/dist/services/color/ColorConverter.d.ts +112 -35
  104. package/dist/services/color/ColorConverter.d.ts.map +1 -1
  105. package/dist/services/color/ColorConverter.js +205 -89
  106. package/dist/services/color/ColorConverter.js.map +1 -1
  107. package/dist/services/color/ColorManipulator.d.ts +11 -0
  108. package/dist/services/color/ColorManipulator.d.ts.map +1 -1
  109. package/dist/services/color/ColorManipulator.js +24 -9
  110. package/dist/services/color/ColorManipulator.js.map +1 -1
  111. package/dist/services/color/ColorblindnessSimulator.d.ts +17 -0
  112. package/dist/services/color/ColorblindnessSimulator.d.ts.map +1 -1
  113. package/dist/services/color/ColorblindnessSimulator.js +57 -3
  114. package/dist/services/color/ColorblindnessSimulator.js.map +1 -1
  115. package/dist/services/color/SpectralMixer.d.ts +0 -34
  116. package/dist/services/color/SpectralMixer.d.ts.map +1 -1
  117. package/dist/services/color/SpectralMixer.js +0 -73
  118. package/dist/services/color/SpectralMixer.js.map +1 -1
  119. package/dist/services/dye/DyeDatabase.d.ts +5 -21
  120. package/dist/services/dye/DyeDatabase.d.ts.map +1 -1
  121. package/dist/services/dye/DyeDatabase.js +98 -130
  122. package/dist/services/dye/DyeDatabase.js.map +1 -1
  123. package/dist/services/dye/DyeSearch.d.ts +17 -31
  124. package/dist/services/dye/DyeSearch.d.ts.map +1 -1
  125. package/dist/services/dye/DyeSearch.js +45 -141
  126. package/dist/services/dye/DyeSearch.js.map +1 -1
  127. package/dist/services/dye/HarmonyGenerator.d.ts +11 -18
  128. package/dist/services/dye/HarmonyGenerator.d.ts.map +1 -1
  129. package/dist/services/dye/HarmonyGenerator.js +33 -38
  130. package/dist/services/dye/HarmonyGenerator.js.map +1 -1
  131. package/dist/services/localization/LocaleLoader.d.ts.map +1 -1
  132. package/dist/services/localization/LocaleLoader.js +0 -1
  133. package/dist/services/localization/LocaleLoader.js.map +1 -1
  134. package/dist/services/localization/TranslationProvider.d.ts +1 -42
  135. package/dist/services/localization/TranslationProvider.d.ts.map +1 -1
  136. package/dist/services/localization/TranslationProvider.js +4 -82
  137. package/dist/services/localization/TranslationProvider.js.map +1 -1
  138. package/dist/types/index.d.ts +39 -52
  139. package/dist/types/index.d.ts.map +1 -1
  140. package/dist/types/index.js +50 -10
  141. package/dist/types/index.js.map +1 -1
  142. package/dist/utils/index.d.ts +36 -123
  143. package/dist/utils/index.d.ts.map +1 -1
  144. package/dist/utils/index.js +54 -413
  145. package/dist/utils/index.js.map +1 -1
  146. package/dist/utils/kd-tree.d.ts +0 -4
  147. package/dist/utils/kd-tree.d.ts.map +1 -1
  148. package/dist/utils/kd-tree.js +0 -6
  149. package/dist/utils/kd-tree.js.map +1 -1
  150. package/package.json +24 -15
  151. package/dist/data/character_colors/index.json +0 -40
  152. package/dist/data/colors_xiv.json +0 -3538
  153. package/dist/version.d.ts +0 -11
  154. package/dist/version.d.ts.map +0 -1
  155. package/dist/version.js +0 -11
  156. package/dist/version.js.map +0 -1
@@ -80,12 +80,6 @@ export class DyeService {
80
80
  getDyeById(id) {
81
81
  return this.database.getDyeById(id);
82
82
  }
83
- /**
84
- * Get multiple dyes by IDs
85
- */
86
- getDyesByIds(ids) {
87
- return this.database.getDyesByIds(ids);
88
- }
89
83
  /**
90
84
  * Get dye by stainID (game's internal stain table ID)
91
85
  *
@@ -101,31 +95,12 @@ export class DyeService {
101
95
  getByStainId(stainId) {
102
96
  return this.database.getByStainId(stainId);
103
97
  }
104
- /**
105
- * Get multiple dyes by stainIDs
106
- *
107
- * Batch equivalent of `getByStainId()`. Unknown stainIDs are silently skipped.
108
- *
109
- * @param stainIds - Array of stain table IDs
110
- * @returns Array of matching dyes
111
- *
112
- * @since 2.2.0
113
- */
114
- getDyesByStainIds(stainIds) {
115
- return this.database.getDyesByStainIds(stainIds);
116
- }
117
98
  /**
118
99
  * Check if database is loaded
119
100
  */
120
101
  isLoadedStatus() {
121
102
  return this.database.isLoadedStatus();
122
103
  }
123
- /**
124
- * Get timestamp of last load
125
- */
126
- getLastLoadedTime() {
127
- return this.database.getLastLoadedTime();
128
- }
129
104
  /**
130
105
  * Get total dye count
131
106
  */
@@ -166,11 +141,11 @@ export class DyeService {
166
141
  * Supports configurable matching algorithms via options object.
167
142
  *
168
143
  * @param hex - Target color in hex format
169
- * @param excludeIdsOrOptions - Either an array of IDs to exclude (legacy) or options object
144
+ * @param options - Options object (excludeIds, matchingMethod)
170
145
  * @returns Closest matching dye, or null if none found
171
146
  */
172
- findClosestDye(hex, excludeIdsOrOptions = []) {
173
- return this.search.findClosestDye(hex, excludeIdsOrOptions);
147
+ findClosestDye(hex, options = {}) {
148
+ return this.search.findClosestDye(hex, options);
174
149
  }
175
150
  /**
176
151
  * Find dyes within a color distance threshold.
@@ -179,30 +154,11 @@ export class DyeService {
179
154
  * Supports configurable matching algorithms via options object.
180
155
  *
181
156
  * @param hex - Target color in hex format
182
- * @param maxDistanceOrOptions - Either maxDistance number (legacy) or options object
183
- * @param limit - Maximum results (legacy parameter, use options.limit instead)
157
+ * @param options - Options object (maxDistance, limit, matchingMethod)
184
158
  * @returns Array of dyes within the distance threshold
185
159
  */
186
- findDyesWithinDistance(hex, maxDistanceOrOptions, limit) {
187
- return this.search.findDyesWithinDistance(hex, maxDistanceOrOptions, limit);
188
- }
189
- /**
190
- * Get dyes sorted by brightness
191
- */
192
- getDyesSortedByBrightness(ascending = true) {
193
- return this.search.getDyesSortedByBrightness(ascending);
194
- }
195
- /**
196
- * Get dyes sorted by saturation
197
- */
198
- getDyesSortedBySaturation(ascending = true) {
199
- return this.search.getDyesSortedBySaturation(ascending);
200
- }
201
- /**
202
- * Get dyes sorted by hue
203
- */
204
- getDyesSortedByHue(ascending = true) {
205
- return this.search.getDyesSortedByHue(ascending);
160
+ findDyesWithinDistance(hex, options) {
161
+ return this.search.findDyesWithinDistance(hex, options);
206
162
  }
207
163
  // ============================================================================
208
164
  // Harmony & Palette Generation (delegated to HarmonyGenerator)
@@ -250,21 +206,21 @@ export class DyeService {
250
206
  return this.harmony.findTetradicDyes(hex, options);
251
207
  }
252
208
  /**
253
- * Find monochromatic dyes (same hue, varying saturation/brightness)
209
+ * Find inverted tetradic color scheme (two complementary pairs, mirrored from tetradic)
254
210
  * @param hex Base hex color
255
- * @param limit Maximum number of dyes to return (default: 6)
256
211
  * @param options Matching algorithm options (optional)
257
212
  */
258
- findMonochromaticDyes(hex, limit = 6, options) {
259
- return this.harmony.findMonochromaticDyes(hex, limit, options);
213
+ findInvertedTetradicDyes(hex, options) {
214
+ return this.harmony.findInvertedTetradicDyes(hex, options);
260
215
  }
261
216
  /**
262
- * Find compound harmony (analogous + complementary)
217
+ * Find monochromatic dyes (same hue, varying saturation/brightness)
263
218
  * @param hex Base hex color
219
+ * @param limit Maximum number of dyes to return (default: 6)
264
220
  * @param options Matching algorithm options (optional)
265
221
  */
266
- findCompoundDyes(hex, options) {
267
- return this.harmony.findCompoundDyes(hex, options);
222
+ findMonochromaticDyes(hex, limit = 6, options) {
223
+ return this.harmony.findMonochromaticDyes(hex, limit, options);
268
224
  }
269
225
  /**
270
226
  * Find split-complementary harmony (±30° from the complementary hue)
@@ -274,14 +230,6 @@ export class DyeService {
274
230
  findSplitComplementaryDyes(hex, options) {
275
231
  return this.harmony.findSplitComplementaryDyes(hex, options);
276
232
  }
277
- /**
278
- * Find shades (similar tones, ±15°)
279
- * @param hex Base hex color
280
- * @param options Matching algorithm options (optional)
281
- */
282
- findShadesDyes(hex, options) {
283
- return this.harmony.findShadesDyes(hex, options);
284
- }
285
233
  // ============================================================================
286
234
  // Localization Support (NEW)
287
235
  // ============================================================================
@@ -299,8 +247,11 @@ export class DyeService {
299
247
  * // Finds "Snow White" (スノウホワイト)
300
248
  * ```
301
249
  */
302
- searchByLocalizedName(query) {
303
- if (!LocalizationService.isLocaleLoaded()) {
250
+ searchByLocalizedName(query, locale) {
251
+ // BUG-006 (2026-07-18 audit): pass an explicit locale in concurrent
252
+ // multi-locale servers — reading the singleton's current locale races
253
+ // across requests
254
+ if (!LocalizationService.isLocaleLoaded(locale)) {
304
255
  return this.searchByName(query); // Fallback to English-only
305
256
  }
306
257
  const lowerQuery = query.toLowerCase().trim();
@@ -311,101 +262,12 @@ export class DyeService {
311
262
  return true;
312
263
  }
313
264
  // Search localized name (not pre-computed as it's dynamically loaded)
314
- const localizedName = LocalizationService.getDyeName(dye.itemID);
265
+ const localizedName = LocalizationService.getDyeName(dye.itemID, locale);
315
266
  if (localizedName?.toLowerCase().includes(lowerQuery)) {
316
267
  return true;
317
268
  }
318
269
  return false;
319
270
  });
320
271
  }
321
- /**
322
- * Get dye by ID with localized name
323
- * Returns Dye with localizedName property if locale loaded
324
- *
325
- * @param id - Dye ID
326
- * @returns Localized dye or null if not found
327
- *
328
- * @example
329
- * ```typescript
330
- * const dye = dyeService.getLocalizedDyeById(5729);
331
- * const displayName = dye.localizedName || dye.name;
332
- * // "スノウホワイト" (ja) or "Snow White" (en)
333
- * ```
334
- */
335
- getLocalizedDyeById(id) {
336
- const dye = this.getDyeById(id);
337
- if (!dye)
338
- return null;
339
- if (!LocalizationService.isLocaleLoaded()) {
340
- return dye;
341
- }
342
- return {
343
- ...dye,
344
- localizedName: LocalizationService.getDyeName(dye.itemID) || undefined,
345
- };
346
- }
347
- /**
348
- * Get dye by stainID with localized name
349
- * Returns Dye with localizedName property if locale loaded
350
- *
351
- * @param stainId - Stain table ID
352
- * @returns Localized dye or null if not found
353
- *
354
- * @since 2.2.0
355
- */
356
- getLocalizedDyeByStainId(stainId) {
357
- const dye = this.getByStainId(stainId);
358
- if (!dye)
359
- return null;
360
- if (!LocalizationService.isLocaleLoaded()) {
361
- return dye;
362
- }
363
- return {
364
- ...dye,
365
- localizedName: LocalizationService.getDyeName(dye.itemID) || undefined,
366
- };
367
- }
368
- /**
369
- * Get all dyes with localized names
370
- * Returns array of dyes with localizedName property if locale loaded
371
- *
372
- * @returns Array of localized dyes
373
- *
374
- * @example
375
- * ```typescript
376
- * await LocalizationService.setLocale('ja');
377
- * const dyes = dyeService.getAllLocalizedDyes();
378
- * dyes.forEach(dye => {
379
- * console.log(dye.localizedName || dye.name);
380
- * });
381
- * ```
382
- */
383
- getAllLocalizedDyes() {
384
- const dyes = this.getAllDyes();
385
- if (!LocalizationService.isLocaleLoaded()) {
386
- return dyes;
387
- }
388
- return dyes.map((dye) => ({
389
- ...dye,
390
- localizedName: LocalizationService.getDyeName(dye.itemID) || undefined,
391
- }));
392
- }
393
- /**
394
- * Get all non-metallic dyes (locale-aware)
395
- * Excludes dyes based on metallic dye IDs from current locale
396
- *
397
- * @returns Array of non-metallic dyes
398
- *
399
- * @example
400
- * ```typescript
401
- * // Works in any locale - correctly excludes metallic dyes
402
- * const nonMetallic = dyeService.getNonMetallicDyes();
403
- * // Excludes: Metallic Silver, Metallic Brass, etc.
404
- * ```
405
- */
406
- getNonMetallicDyes() {
407
- const metallicIds = new Set(LocalizationService.getMetallicDyeIds());
408
- return this.getAllDyes().filter((dye) => !metallicIds.has(dye.itemID));
409
- }
410
272
  }
411
273
  //# sourceMappingURL=DyeService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DyeService.js","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAKnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAuB,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAY/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,UAAU;IACb,QAAQ,CAAc;IACtB,MAAM,CAAY;IAClB,OAAO,CAAmB;IAElC;;;;OAIG;IACH,YAAY,OAAiB,EAAE,UAA6B,EAAE;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhE,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,6CAA6C;IAC7C,+EAA+E;IAE/E;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,GAAa;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,QAAkB;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED,+EAA+E;IAC/E,2CAA2C;IAC3C,+EAA+E;IAE/E;;OAEG;IACH,YAAY,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,UAAU,CACR,SAKI,EAAE;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;OASG;IACH,cAAc,CAAC,GAAW,EAAE,sBAAqD,EAAE;QACjF,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;;;;;OAUG;IACH,sBAAsB,CACpB,GAAW,EACX,oBAAwD,EACxD,KAAc;QAEd,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,YAAqB,IAAI;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,YAAqB,IAAI;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,YAAqB,IAAI;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,+EAA+E;IAC/E,+DAA+D;IAC/D,+EAA+E;IAE/E;;;;OAIG;IACH,qBAAqB,CAAC,GAAW,EAAE,OAAwB;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,GAAW,EAAE,QAAgB,EAAE,EAAE,OAAwB;QACzE,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,GAAW,EAAE,OAAwB;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,GAAW,EAAE,OAAwB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,GAAW,EAAE,OAAwB;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACH,qBAAqB,CAAC,GAAW,EAAE,QAAgB,CAAC,EAAE,OAAwB;QAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,GAAW,EAAE,OAAwB;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,0BAA0B,CAAC,GAAW,EAAE,OAAwB;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,GAAW,EAAE,OAAwB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,+EAA+E;IAC/E,6BAA6B;IAC7B,+EAA+E;IAE/E;;;;;;;;;;;;;OAaG;IACH,qBAAqB,CAAC,KAAa;QACjC,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,2BAA2B;QAC9D,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAE7C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,4DAA4D;YAC5D,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,sEAAsE;YACtE,MAAM,aAAa,GAAG,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjE,IAAI,aAAa,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAU;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1C,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO;YACL,GAAG,GAAG;YACN,aAAa,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;SACvE,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,wBAAwB,CAAC,OAAe;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1C,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO;YACL,GAAG,GAAG;YACN,aAAa,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;SACvE,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,mBAAmB;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAE/B,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,GAAG,GAAG;YACN,aAAa,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;SACvE,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,kBAAkB;QAChB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC;CACF"}
1
+ {"version":3,"file":"DyeService.js","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module services
8
8
  */
9
- import type { LocaleCode, TranslationKey, HarmonyTypeKey, VisionType, ToolKey, SheetKey, JobKey, GrandCompanyKey, RaceKey, ClanKey, LocalePreference } from '@xivdyetools/types';
9
+ import type { LocaleCode, TranslationKey, HarmonyTypeKey, VisionType, ToolKey, SheetKey, RaceKey, ClanKey, LocalePreference } from '@xivdyetools/types';
10
10
  import { LocaleLoader } from './localization/LocaleLoader.js';
11
11
  import { LocaleRegistry } from './localization/LocaleRegistry.js';
12
12
  import { TranslationProvider } from './localization/TranslationProvider.js';
@@ -121,6 +121,16 @@ export declare class LocalizationService {
121
121
  /**
122
122
  * Set active locale (loads locale file if not cached)
123
123
  *
124
+ * ⚠️ CONCURRENCY (BUG-006, 2026-07-18 audit): `currentLocale` is shared
125
+ * mutable state on this instance (and on the process-wide singleton for the
126
+ * static API). In concurrent multi-locale servers (Cloudflare Workers,
127
+ * Node servers), a per-request `setLocale` races with other requests —
128
+ * request A can read another request's locale after any `await`. Such
129
+ * servers must NOT call `setLocale` per request; instead call
130
+ * `ensureLocaleLoaded(locale)` once and pass the request's locale
131
+ * explicitly to every getter (`getDyeName(id, locale)`), or use the
132
+ * stateless `LocaleLoader`/`LocaleRegistry`/`TranslationProvider` trio.
133
+ *
124
134
  * @param locale - Locale code ('en', 'ja', 'de', 'fr')
125
135
  * @throws {AppError} If locale file fails to load
126
136
  *
@@ -135,6 +145,17 @@ export declare class LocalizationService {
135
145
  * Static method: Set locale using default instance
136
146
  */
137
147
  static setLocale(locale: LocaleCode): Promise<void>;
148
+ /**
149
+ * Ensure a locale's data is loaded/registered WITHOUT mutating the current
150
+ * locale. BUG-006 (2026-07-18 audit): the race-safe alternative to a
151
+ * per-request `setLocale` — combine with explicit-locale getters
152
+ * (`getDyeName(id, locale)`).
153
+ */
154
+ ensureLocaleLoaded(locale: LocaleCode): Promise<void>;
155
+ /**
156
+ * Static method: Ensure a locale is loaded in the default instance
157
+ */
158
+ static ensureLocaleLoaded(locale: LocaleCode): Promise<void>;
138
159
  /**
139
160
  * Set locale from preference object with priority chain
140
161
  * Uses pure function resolveLocaleFromPreference for resolution logic
@@ -187,175 +208,143 @@ export declare class LocalizationService {
187
208
  * }
188
209
  * ```
189
210
  */
190
- isLocaleLoaded(): boolean;
211
+ isLocaleLoaded(locale?: LocaleCode): boolean;
191
212
  /**
192
213
  * Static method: Check if locale is loaded in default instance
193
214
  */
194
- static isLocaleLoaded(): boolean;
215
+ static isLocaleLoaded(locale?: LocaleCode): boolean;
195
216
  /**
196
217
  * Get localized UI label (with fallback to English)
197
218
  *
198
219
  * @param key - Translation key
199
220
  * @returns Localized label
200
221
  */
201
- getLabel(key: TranslationKey): string;
222
+ getLabel(key: TranslationKey, locale?: LocaleCode): string;
202
223
  /**
203
224
  * Static method: Get localized label using default instance
204
225
  */
205
- static getLabel(key: TranslationKey): string;
226
+ static getLabel(key: TranslationKey, locale?: LocaleCode): string;
206
227
  /**
207
228
  * Get localized dye name by itemID
208
229
  *
209
230
  * @param itemID - Dye item ID (5729-48227)
210
231
  * @returns Localized name or null if not found
211
232
  */
212
- getDyeName(itemID: number): string | null;
233
+ getDyeName(itemID: number, locale?: LocaleCode): string | null;
213
234
  /**
214
235
  * Static method: Get localized dye name using default instance
215
236
  */
216
- static getDyeName(itemID: number): string | null;
237
+ static getDyeName(itemID: number, locale?: LocaleCode): string | null;
217
238
  /**
218
239
  * Get localized category name
219
240
  *
220
241
  * @param category - Category key (e.g., "Reds", "Blues")
221
242
  * @returns Localized category name
222
243
  */
223
- getCategory(category: string): string;
244
+ getCategory(category: string, locale?: LocaleCode): string;
224
245
  /**
225
246
  * Static method: Get localized category using default instance
226
247
  */
227
- static getCategory(category: string): string;
248
+ static getCategory(category: string, locale?: LocaleCode): string;
228
249
  /**
229
250
  * Get localized acquisition method
230
251
  *
231
252
  * @param acquisition - Acquisition key (e.g., "Dye Vendor", "Crafting")
232
253
  * @returns Localized acquisition method
233
254
  */
234
- getAcquisition(acquisition: string): string;
255
+ getAcquisition(acquisition: string, locale?: LocaleCode): string;
235
256
  /**
236
257
  * Static method: Get localized acquisition using default instance
237
258
  */
238
- static getAcquisition(acquisition: string): string;
259
+ static getAcquisition(acquisition: string, locale?: LocaleCode): string;
239
260
  /**
240
261
  * Get localized currency display label
241
262
  *
242
263
  * @param currency - Currency key (e.g., "Gil", "Cosmocredits")
243
264
  * @returns Localized currency label
244
265
  */
245
- getCurrency(currency: string): string;
266
+ getCurrency(currency: string, locale?: LocaleCode): string;
246
267
  /**
247
268
  * Static method: Get localized currency using default instance
248
269
  */
249
- static getCurrency(currency: string): string;
250
- /**
251
- * Get all metallic dye IDs (for exclusion filtering)
252
- *
253
- * @returns Array of metallic dye item IDs
254
- */
255
- getMetallicDyeIds(): number[];
256
- /**
257
- * Static method: Get metallic dye IDs using default instance
258
- */
259
- static getMetallicDyeIds(): number[];
270
+ static getCurrency(currency: string, locale?: LocaleCode): string;
260
271
  /**
261
272
  * Get localized harmony type name
262
273
  *
263
274
  * @param key - Harmony type key
264
275
  * @returns Localized harmony type
265
276
  */
266
- getHarmonyType(key: HarmonyTypeKey): string;
277
+ getHarmonyType(key: HarmonyTypeKey, locale?: LocaleCode): string;
267
278
  /**
268
279
  * Static method: Get localized harmony type using default instance
269
280
  */
270
- static getHarmonyType(key: HarmonyTypeKey): string;
281
+ static getHarmonyType(key: HarmonyTypeKey, locale?: LocaleCode): string;
271
282
  /**
272
283
  * Get localized vision type name
273
284
  *
274
285
  * @param key - Vision type key
275
286
  * @returns Localized vision type
276
287
  */
277
- getVisionType(key: VisionType): string;
288
+ getVisionType(key: VisionType, locale?: LocaleCode): string;
278
289
  /**
279
290
  * Static method: Get localized vision type using default instance
280
291
  */
281
- static getVisionType(key: VisionType): string;
292
+ static getVisionType(key: VisionType, locale?: LocaleCode): string;
282
293
  /**
283
294
  * Get localized short vision-name (compact form, no parenthetical)
284
295
  *
285
296
  * @param key - Vision type key
286
297
  * @returns Localized short vision name
287
298
  */
288
- getVisionShort(key: VisionType): string;
299
+ getVisionShort(key: VisionType, locale?: LocaleCode): string;
289
300
  /**
290
301
  * Static method: Get localized short vision-name using default instance
291
302
  */
292
- static getVisionShort(key: VisionType): string;
303
+ static getVisionShort(key: VisionType, locale?: LocaleCode): string;
293
304
  /**
294
305
  * Get localized tool display name
295
306
  *
296
307
  * @param key - Tool key
297
308
  * @returns Localized tool display name
298
309
  */
299
- getToolName(key: ToolKey): string;
310
+ getToolName(key: ToolKey, locale?: LocaleCode): string;
300
311
  /**
301
312
  * Static method: Get localized tool display name using default instance
302
313
  */
303
- static getToolName(key: ToolKey): string;
314
+ static getToolName(key: ToolKey, locale?: LocaleCode): string;
304
315
  /**
305
316
  * Get localized color-sheet category name
306
317
  *
307
318
  * @param key - Sheet key
308
319
  * @returns Localized sheet name
309
320
  */
310
- getSheetName(key: SheetKey): string;
321
+ getSheetName(key: SheetKey, locale?: LocaleCode): string;
311
322
  /**
312
323
  * Static method: Get localized sheet name using default instance
313
324
  */
314
- static getSheetName(key: SheetKey): string;
315
- /**
316
- * Get localized job name
317
- *
318
- * @param key - Job key
319
- * @returns Localized job name
320
- */
321
- getJobName(key: JobKey): string;
322
- /**
323
- * Static method: Get localized job name using default instance
324
- */
325
- static getJobName(key: JobKey): string;
326
- /**
327
- * Get localized Grand Company name
328
- *
329
- * @param key - Grand Company key
330
- * @returns Localized Grand Company name
331
- */
332
- getGrandCompanyName(key: GrandCompanyKey): string;
333
- /**
334
- * Static method: Get localized Grand Company name using default instance
335
- */
336
- static getGrandCompanyName(key: GrandCompanyKey): string;
325
+ static getSheetName(key: SheetKey, locale?: LocaleCode): string;
337
326
  /**
338
327
  * Get localized race name
339
328
  *
340
329
  * @param key - Race key
341
330
  * @returns Localized race name
342
331
  */
343
- getRace(key: RaceKey): string;
332
+ getRace(key: RaceKey, locale?: LocaleCode): string;
344
333
  /**
345
334
  * Static method: Get localized race name using default instance
346
335
  */
347
- static getRace(key: RaceKey): string;
336
+ static getRace(key: RaceKey, locale?: LocaleCode): string;
348
337
  /**
349
338
  * Get localized clan (subrace) name
350
339
  *
351
340
  * @param key - Clan key
352
341
  * @returns Localized clan name
353
342
  */
354
- getClan(key: ClanKey): string;
343
+ getClan(key: ClanKey, locale?: LocaleCode): string;
355
344
  /**
356
345
  * Static method: Get localized clan name using default instance
357
346
  */
358
- static getClan(key: ClanKey): string;
347
+ static getClan(key: ClanKey, locale?: LocaleCode): string;
359
348
  /**
360
349
  * Get all available locale codes
361
350
  *
@@ -1 +1 @@
1
- {"version":3,"file":"LocalizationService.d.ts","sourceRoot":"","sources":["../../src/services/LocalizationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalizationService.d.ts","sourceRoot":"","sources":["../../src/services/LocalizationService.ts"],"names":[],"mappings":"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"}