@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.
- package/README.md +85 -67
- package/dist/blending/blending.d.ts +22 -0
- package/dist/blending/blending.d.ts.map +1 -0
- package/dist/blending/blending.js +129 -0
- package/dist/blending/blending.js.map +1 -0
- package/dist/blending/conversions.d.ts +53 -0
- package/dist/blending/conversions.d.ts.map +1 -0
- package/dist/blending/conversions.js +256 -0
- package/dist/blending/conversions.js.map +1 -0
- package/dist/blending/index.d.ts +8 -0
- package/dist/blending/index.d.ts.map +1 -0
- package/dist/blending/index.js +3 -0
- package/dist/blending/index.js.map +1 -0
- package/dist/blending/types.d.ts +36 -0
- package/dist/blending/types.d.ts.map +1 -0
- package/dist/blending/types.js +21 -0
- package/dist/blending/types.js.map +1 -0
- package/dist/config/band-calibration.d.ts +68 -0
- package/dist/config/band-calibration.d.ts.map +1 -0
- package/dist/config/band-calibration.js +196 -0
- package/dist/config/band-calibration.js.map +1 -0
- package/dist/config/band-vocabulary.d.ts +82 -0
- package/dist/config/band-vocabulary.d.ts.map +1 -0
- package/dist/config/band-vocabulary.js +117 -0
- package/dist/config/band-vocabulary.js.map +1 -0
- package/dist/config/consolidated-ids.js +2 -2
- package/dist/config/consolidated-ids.js.map +1 -1
- package/dist/config/dye-vocabulary.d.ts +45 -0
- package/dist/config/dye-vocabulary.d.ts.map +1 -0
- package/dist/config/dye-vocabulary.js +58 -0
- package/dist/config/dye-vocabulary.js.map +1 -0
- package/dist/config/facewear.d.ts +24 -0
- package/dist/config/facewear.d.ts.map +1 -0
- package/dist/config/facewear.js +35 -0
- package/dist/config/facewear.js.map +1 -0
- package/dist/config/learn-links.d.ts +70 -0
- package/dist/config/learn-links.d.ts.map +1 -0
- package/dist/config/learn-links.js +171 -0
- package/dist/config/learn-links.js.map +1 -0
- package/dist/config/product-links.d.ts +44 -0
- package/dist/config/product-links.d.ts.map +1 -0
- package/dist/config/product-links.js +44 -0
- package/dist/config/product-links.js.map +1 -0
- package/dist/constants/index.d.ts +14 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +38 -22
- package/dist/constants/index.js.map +1 -1
- package/dist/data/character_colors/race_specific/hair_colors.json +1 -1
- package/dist/data/character_colors/race_specific/skin_colors.json +1 -1
- package/dist/data/dyes.json +1127 -0
- package/dist/data/facewear_colors.json +57 -0
- package/dist/data/locales/de.json +4 -50
- package/dist/data/locales/en.json +4 -50
- package/dist/data/locales/fr.json +4 -50
- package/dist/data/locales/ja.json +4 -50
- package/dist/data/locales/ko.json +4 -50
- package/dist/data/locales/zh.json +4 -50
- package/dist/data/presets.json +59 -301
- package/dist/index.d.ts +156 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +114 -10
- package/dist/index.js.map +1 -1
- package/dist/services/APIService.d.ts +39 -62
- package/dist/services/APIService.d.ts.map +1 -1
- package/dist/services/APIService.js +156 -150
- package/dist/services/APIService.js.map +1 -1
- package/dist/services/CharacterColorService.d.ts +4 -36
- package/dist/services/CharacterColorService.d.ts.map +1 -1
- package/dist/services/CharacterColorService.js +57 -79
- package/dist/services/CharacterColorService.js.map +1 -1
- package/dist/services/ColorService.d.ts +57 -68
- package/dist/services/ColorService.d.ts.map +1 -1
- package/dist/services/ColorService.js +86 -94
- package/dist/services/ColorService.js.map +1 -1
- package/dist/services/DyeService.d.ts +11 -104
- package/dist/services/DyeService.d.ts.map +1 -1
- package/dist/services/DyeService.js +19 -157
- package/dist/services/DyeService.js.map +1 -1
- package/dist/services/LocalizationService.d.ts +48 -59
- package/dist/services/LocalizationService.d.ts.map +1 -1
- package/dist/services/LocalizationService.js +86 -95
- package/dist/services/LocalizationService.js.map +1 -1
- package/dist/services/PaletteService.d.ts +8 -9
- package/dist/services/PaletteService.d.ts.map +1 -1
- package/dist/services/PaletteService.js +10 -22
- package/dist/services/PaletteService.js.map +1 -1
- package/dist/services/PresetService.d.ts +2 -34
- package/dist/services/PresetService.d.ts.map +1 -1
- package/dist/services/PresetService.js +12 -59
- package/dist/services/PresetService.js.map +1 -1
- package/dist/services/chara/chara-models.d.ts +68 -0
- package/dist/services/chara/chara-models.d.ts.map +1 -0
- package/dist/services/chara/chara-models.js +87 -0
- package/dist/services/chara/chara-models.js.map +1 -0
- package/dist/services/chara/chara-parser.d.ts +95 -0
- package/dist/services/chara/chara-parser.d.ts.map +1 -0
- package/dist/services/chara/chara-parser.js +299 -0
- package/dist/services/chara/chara-parser.js.map +1 -0
- package/dist/services/chara/chara-resolver.d.ts +103 -0
- package/dist/services/chara/chara-resolver.d.ts.map +1 -0
- package/dist/services/chara/chara-resolver.js +233 -0
- package/dist/services/chara/chara-resolver.js.map +1 -0
- package/dist/services/color/ColorConverter.d.ts +112 -35
- package/dist/services/color/ColorConverter.d.ts.map +1 -1
- package/dist/services/color/ColorConverter.js +205 -89
- package/dist/services/color/ColorConverter.js.map +1 -1
- package/dist/services/color/ColorManipulator.d.ts +11 -0
- package/dist/services/color/ColorManipulator.d.ts.map +1 -1
- package/dist/services/color/ColorManipulator.js +24 -9
- package/dist/services/color/ColorManipulator.js.map +1 -1
- package/dist/services/color/ColorblindnessSimulator.d.ts +17 -0
- package/dist/services/color/ColorblindnessSimulator.d.ts.map +1 -1
- package/dist/services/color/ColorblindnessSimulator.js +57 -3
- package/dist/services/color/ColorblindnessSimulator.js.map +1 -1
- package/dist/services/color/SpectralMixer.d.ts +0 -34
- package/dist/services/color/SpectralMixer.d.ts.map +1 -1
- package/dist/services/color/SpectralMixer.js +0 -73
- package/dist/services/color/SpectralMixer.js.map +1 -1
- package/dist/services/dye/DyeDatabase.d.ts +5 -21
- package/dist/services/dye/DyeDatabase.d.ts.map +1 -1
- package/dist/services/dye/DyeDatabase.js +98 -130
- package/dist/services/dye/DyeDatabase.js.map +1 -1
- package/dist/services/dye/DyeSearch.d.ts +17 -31
- package/dist/services/dye/DyeSearch.d.ts.map +1 -1
- package/dist/services/dye/DyeSearch.js +45 -141
- package/dist/services/dye/DyeSearch.js.map +1 -1
- package/dist/services/dye/HarmonyGenerator.d.ts +11 -18
- package/dist/services/dye/HarmonyGenerator.d.ts.map +1 -1
- package/dist/services/dye/HarmonyGenerator.js +33 -38
- package/dist/services/dye/HarmonyGenerator.js.map +1 -1
- package/dist/services/localization/LocaleLoader.d.ts.map +1 -1
- package/dist/services/localization/LocaleLoader.js +0 -1
- package/dist/services/localization/LocaleLoader.js.map +1 -1
- package/dist/services/localization/TranslationProvider.d.ts +1 -42
- package/dist/services/localization/TranslationProvider.d.ts.map +1 -1
- package/dist/services/localization/TranslationProvider.js +4 -82
- package/dist/services/localization/TranslationProvider.js.map +1 -1
- package/dist/types/index.d.ts +39 -52
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +50 -10
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +36 -123
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +54 -413
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/kd-tree.d.ts +0 -4
- package/dist/utils/kd-tree.d.ts.map +1 -1
- package/dist/utils/kd-tree.js +0 -6
- package/dist/utils/kd-tree.js.map +1 -1
- package/package.json +24 -15
- package/dist/data/character_colors/index.json +0 -40
- package/dist/data/colors_xiv.json +0 -3538
- package/dist/version.d.ts +0 -11
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -11
- 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
|
|
144
|
+
* @param options - Options object (excludeIds, matchingMethod)
|
|
170
145
|
* @returns Closest matching dye, or null if none found
|
|
171
146
|
*/
|
|
172
|
-
findClosestDye(hex,
|
|
173
|
-
return this.search.findClosestDye(hex,
|
|
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
|
|
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,
|
|
187
|
-
return this.search.findDyesWithinDistance(hex,
|
|
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
|
|
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
|
-
|
|
259
|
-
return this.harmony.
|
|
213
|
+
findInvertedTetradicDyes(hex, options) {
|
|
214
|
+
return this.harmony.findInvertedTetradicDyes(hex, options);
|
|
260
215
|
}
|
|
261
216
|
/**
|
|
262
|
-
* Find
|
|
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
|
-
|
|
267
|
-
return this.harmony.
|
|
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
|
-
|
|
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
|
|
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,
|
|
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":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,OAAO,EACP,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"LocalizationService.d.ts","sourceRoot":"","sources":["../../src/services/LocalizationService.ts"],"names":[],"mappings":"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"}
|