@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
|
@@ -155,6 +155,16 @@ export class LocalizationService {
|
|
|
155
155
|
/**
|
|
156
156
|
* Set active locale (loads locale file if not cached)
|
|
157
157
|
*
|
|
158
|
+
* ⚠️ CONCURRENCY (BUG-006, 2026-07-18 audit): `currentLocale` is shared
|
|
159
|
+
* mutable state on this instance (and on the process-wide singleton for the
|
|
160
|
+
* static API). In concurrent multi-locale servers (Cloudflare Workers,
|
|
161
|
+
* Node servers), a per-request `setLocale` races with other requests —
|
|
162
|
+
* request A can read another request's locale after any `await`. Such
|
|
163
|
+
* servers must NOT call `setLocale` per request; instead call
|
|
164
|
+
* `ensureLocaleLoaded(locale)` once and pass the request's locale
|
|
165
|
+
* explicitly to every getter (`getDyeName(id, locale)`), or use the
|
|
166
|
+
* stateless `LocaleLoader`/`LocaleRegistry`/`TranslationProvider` trio.
|
|
167
|
+
*
|
|
158
168
|
* @param locale - Locale code ('en', 'ja', 'de', 'fr')
|
|
159
169
|
* @throws {AppError} If locale file fails to load
|
|
160
170
|
*
|
|
@@ -184,6 +194,26 @@ export class LocalizationService {
|
|
|
184
194
|
static async setLocale(locale) {
|
|
185
195
|
return this.getDefault().setLocale(locale);
|
|
186
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Ensure a locale's data is loaded/registered WITHOUT mutating the current
|
|
199
|
+
* locale. BUG-006 (2026-07-18 audit): the race-safe alternative to a
|
|
200
|
+
* per-request `setLocale` — combine with explicit-locale getters
|
|
201
|
+
* (`getDyeName(id, locale)`).
|
|
202
|
+
*/
|
|
203
|
+
async ensureLocaleLoaded(locale) {
|
|
204
|
+
if (this.registry.hasLocale(locale)) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// Load locale data (synchronous as of v1.1.3, async signature kept for API compatibility)
|
|
208
|
+
await Promise.resolve();
|
|
209
|
+
this.registry.registerLocale(this.loader.loadLocale(locale));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Static method: Ensure a locale is loaded in the default instance
|
|
213
|
+
*/
|
|
214
|
+
static async ensureLocaleLoaded(locale) {
|
|
215
|
+
return this.getDefault().ensureLocaleLoaded(locale);
|
|
216
|
+
}
|
|
187
217
|
/**
|
|
188
218
|
* Set locale from preference object with priority chain
|
|
189
219
|
* Uses pure function resolveLocaleFromPreference for resolution logic
|
|
@@ -245,14 +275,19 @@ export class LocalizationService {
|
|
|
245
275
|
* }
|
|
246
276
|
* ```
|
|
247
277
|
*/
|
|
248
|
-
isLocaleLoaded() {
|
|
278
|
+
isLocaleLoaded(locale) {
|
|
279
|
+
// BUG-006: with an explicit locale, report on that locale's data instead
|
|
280
|
+
// of the shared initialization flag
|
|
281
|
+
if (locale !== undefined) {
|
|
282
|
+
return this.registry.hasLocale(locale);
|
|
283
|
+
}
|
|
249
284
|
return this.isInitialized;
|
|
250
285
|
}
|
|
251
286
|
/**
|
|
252
287
|
* Static method: Check if locale is loaded in default instance
|
|
253
288
|
*/
|
|
254
|
-
static isLocaleLoaded() {
|
|
255
|
-
return this.getDefault().isLocaleLoaded();
|
|
289
|
+
static isLocaleLoaded(locale) {
|
|
290
|
+
return this.getDefault().isLocaleLoaded(locale);
|
|
256
291
|
}
|
|
257
292
|
/**
|
|
258
293
|
* Get localized UI label (with fallback to English)
|
|
@@ -260,14 +295,14 @@ export class LocalizationService {
|
|
|
260
295
|
* @param key - Translation key
|
|
261
296
|
* @returns Localized label
|
|
262
297
|
*/
|
|
263
|
-
getLabel(key) {
|
|
264
|
-
return this.translator.getLabel(key, this.currentLocale);
|
|
298
|
+
getLabel(key, locale) {
|
|
299
|
+
return this.translator.getLabel(key, locale ?? this.currentLocale);
|
|
265
300
|
}
|
|
266
301
|
/**
|
|
267
302
|
* Static method: Get localized label using default instance
|
|
268
303
|
*/
|
|
269
|
-
static getLabel(key) {
|
|
270
|
-
return this.getDefault().getLabel(key);
|
|
304
|
+
static getLabel(key, locale) {
|
|
305
|
+
return this.getDefault().getLabel(key, locale);
|
|
271
306
|
}
|
|
272
307
|
/**
|
|
273
308
|
* Get localized dye name by itemID
|
|
@@ -275,14 +310,14 @@ export class LocalizationService {
|
|
|
275
310
|
* @param itemID - Dye item ID (5729-48227)
|
|
276
311
|
* @returns Localized name or null if not found
|
|
277
312
|
*/
|
|
278
|
-
getDyeName(itemID) {
|
|
279
|
-
return this.translator.getDyeName(itemID, this.currentLocale);
|
|
313
|
+
getDyeName(itemID, locale) {
|
|
314
|
+
return this.translator.getDyeName(itemID, locale ?? this.currentLocale);
|
|
280
315
|
}
|
|
281
316
|
/**
|
|
282
317
|
* Static method: Get localized dye name using default instance
|
|
283
318
|
*/
|
|
284
|
-
static getDyeName(itemID) {
|
|
285
|
-
return this.getDefault().getDyeName(itemID);
|
|
319
|
+
static getDyeName(itemID, locale) {
|
|
320
|
+
return this.getDefault().getDyeName(itemID, locale);
|
|
286
321
|
}
|
|
287
322
|
/**
|
|
288
323
|
* Get localized category name
|
|
@@ -290,14 +325,14 @@ export class LocalizationService {
|
|
|
290
325
|
* @param category - Category key (e.g., "Reds", "Blues")
|
|
291
326
|
* @returns Localized category name
|
|
292
327
|
*/
|
|
293
|
-
getCategory(category) {
|
|
294
|
-
return this.translator.getCategory(category, this.currentLocale);
|
|
328
|
+
getCategory(category, locale) {
|
|
329
|
+
return this.translator.getCategory(category, locale ?? this.currentLocale);
|
|
295
330
|
}
|
|
296
331
|
/**
|
|
297
332
|
* Static method: Get localized category using default instance
|
|
298
333
|
*/
|
|
299
|
-
static getCategory(category) {
|
|
300
|
-
return this.getDefault().getCategory(category);
|
|
334
|
+
static getCategory(category, locale) {
|
|
335
|
+
return this.getDefault().getCategory(category, locale);
|
|
301
336
|
}
|
|
302
337
|
/**
|
|
303
338
|
* Get localized acquisition method
|
|
@@ -305,14 +340,14 @@ export class LocalizationService {
|
|
|
305
340
|
* @param acquisition - Acquisition key (e.g., "Dye Vendor", "Crafting")
|
|
306
341
|
* @returns Localized acquisition method
|
|
307
342
|
*/
|
|
308
|
-
getAcquisition(acquisition) {
|
|
309
|
-
return this.translator.getAcquisition(acquisition, this.currentLocale);
|
|
343
|
+
getAcquisition(acquisition, locale) {
|
|
344
|
+
return this.translator.getAcquisition(acquisition, locale ?? this.currentLocale);
|
|
310
345
|
}
|
|
311
346
|
/**
|
|
312
347
|
* Static method: Get localized acquisition using default instance
|
|
313
348
|
*/
|
|
314
|
-
static getAcquisition(acquisition) {
|
|
315
|
-
return this.getDefault().getAcquisition(acquisition);
|
|
349
|
+
static getAcquisition(acquisition, locale) {
|
|
350
|
+
return this.getDefault().getAcquisition(acquisition, locale);
|
|
316
351
|
}
|
|
317
352
|
/**
|
|
318
353
|
* Get localized currency display label
|
|
@@ -320,28 +355,14 @@ export class LocalizationService {
|
|
|
320
355
|
* @param currency - Currency key (e.g., "Gil", "Cosmocredits")
|
|
321
356
|
* @returns Localized currency label
|
|
322
357
|
*/
|
|
323
|
-
getCurrency(currency) {
|
|
324
|
-
return this.translator.getCurrency(currency, this.currentLocale);
|
|
358
|
+
getCurrency(currency, locale) {
|
|
359
|
+
return this.translator.getCurrency(currency, locale ?? this.currentLocale);
|
|
325
360
|
}
|
|
326
361
|
/**
|
|
327
362
|
* Static method: Get localized currency using default instance
|
|
328
363
|
*/
|
|
329
|
-
static getCurrency(currency) {
|
|
330
|
-
return this.getDefault().getCurrency(currency);
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Get all metallic dye IDs (for exclusion filtering)
|
|
334
|
-
*
|
|
335
|
-
* @returns Array of metallic dye item IDs
|
|
336
|
-
*/
|
|
337
|
-
getMetallicDyeIds() {
|
|
338
|
-
return this.translator.getMetallicDyeIds(this.currentLocale);
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Static method: Get metallic dye IDs using default instance
|
|
342
|
-
*/
|
|
343
|
-
static getMetallicDyeIds() {
|
|
344
|
-
return this.getDefault().getMetallicDyeIds();
|
|
364
|
+
static getCurrency(currency, locale) {
|
|
365
|
+
return this.getDefault().getCurrency(currency, locale);
|
|
345
366
|
}
|
|
346
367
|
/**
|
|
347
368
|
* Get localized harmony type name
|
|
@@ -349,14 +370,14 @@ export class LocalizationService {
|
|
|
349
370
|
* @param key - Harmony type key
|
|
350
371
|
* @returns Localized harmony type
|
|
351
372
|
*/
|
|
352
|
-
getHarmonyType(key) {
|
|
353
|
-
return this.translator.getHarmonyType(key, this.currentLocale);
|
|
373
|
+
getHarmonyType(key, locale) {
|
|
374
|
+
return this.translator.getHarmonyType(key, locale ?? this.currentLocale);
|
|
354
375
|
}
|
|
355
376
|
/**
|
|
356
377
|
* Static method: Get localized harmony type using default instance
|
|
357
378
|
*/
|
|
358
|
-
static getHarmonyType(key) {
|
|
359
|
-
return this.getDefault().getHarmonyType(key);
|
|
379
|
+
static getHarmonyType(key, locale) {
|
|
380
|
+
return this.getDefault().getHarmonyType(key, locale);
|
|
360
381
|
}
|
|
361
382
|
/**
|
|
362
383
|
* Get localized vision type name
|
|
@@ -364,14 +385,14 @@ export class LocalizationService {
|
|
|
364
385
|
* @param key - Vision type key
|
|
365
386
|
* @returns Localized vision type
|
|
366
387
|
*/
|
|
367
|
-
getVisionType(key) {
|
|
368
|
-
return this.translator.getVisionType(key, this.currentLocale);
|
|
388
|
+
getVisionType(key, locale) {
|
|
389
|
+
return this.translator.getVisionType(key, locale ?? this.currentLocale);
|
|
369
390
|
}
|
|
370
391
|
/**
|
|
371
392
|
* Static method: Get localized vision type using default instance
|
|
372
393
|
*/
|
|
373
|
-
static getVisionType(key) {
|
|
374
|
-
return this.getDefault().getVisionType(key);
|
|
394
|
+
static getVisionType(key, locale) {
|
|
395
|
+
return this.getDefault().getVisionType(key, locale);
|
|
375
396
|
}
|
|
376
397
|
/**
|
|
377
398
|
* Get localized short vision-name (compact form, no parenthetical)
|
|
@@ -379,14 +400,14 @@ export class LocalizationService {
|
|
|
379
400
|
* @param key - Vision type key
|
|
380
401
|
* @returns Localized short vision name
|
|
381
402
|
*/
|
|
382
|
-
getVisionShort(key) {
|
|
383
|
-
return this.translator.getVisionShort(key, this.currentLocale);
|
|
403
|
+
getVisionShort(key, locale) {
|
|
404
|
+
return this.translator.getVisionShort(key, locale ?? this.currentLocale);
|
|
384
405
|
}
|
|
385
406
|
/**
|
|
386
407
|
* Static method: Get localized short vision-name using default instance
|
|
387
408
|
*/
|
|
388
|
-
static getVisionShort(key) {
|
|
389
|
-
return this.getDefault().getVisionShort(key);
|
|
409
|
+
static getVisionShort(key, locale) {
|
|
410
|
+
return this.getDefault().getVisionShort(key, locale);
|
|
390
411
|
}
|
|
391
412
|
/**
|
|
392
413
|
* Get localized tool display name
|
|
@@ -394,14 +415,14 @@ export class LocalizationService {
|
|
|
394
415
|
* @param key - Tool key
|
|
395
416
|
* @returns Localized tool display name
|
|
396
417
|
*/
|
|
397
|
-
getToolName(key) {
|
|
398
|
-
return this.translator.getToolName(key, this.currentLocale);
|
|
418
|
+
getToolName(key, locale) {
|
|
419
|
+
return this.translator.getToolName(key, locale ?? this.currentLocale);
|
|
399
420
|
}
|
|
400
421
|
/**
|
|
401
422
|
* Static method: Get localized tool display name using default instance
|
|
402
423
|
*/
|
|
403
|
-
static getToolName(key) {
|
|
404
|
-
return this.getDefault().getToolName(key);
|
|
424
|
+
static getToolName(key, locale) {
|
|
425
|
+
return this.getDefault().getToolName(key, locale);
|
|
405
426
|
}
|
|
406
427
|
/**
|
|
407
428
|
* Get localized color-sheet category name
|
|
@@ -409,44 +430,14 @@ export class LocalizationService {
|
|
|
409
430
|
* @param key - Sheet key
|
|
410
431
|
* @returns Localized sheet name
|
|
411
432
|
*/
|
|
412
|
-
getSheetName(key) {
|
|
413
|
-
return this.translator.getSheetName(key, this.currentLocale);
|
|
433
|
+
getSheetName(key, locale) {
|
|
434
|
+
return this.translator.getSheetName(key, locale ?? this.currentLocale);
|
|
414
435
|
}
|
|
415
436
|
/**
|
|
416
437
|
* Static method: Get localized sheet name using default instance
|
|
417
438
|
*/
|
|
418
|
-
static getSheetName(key) {
|
|
419
|
-
return this.getDefault().getSheetName(key);
|
|
420
|
-
}
|
|
421
|
-
/**
|
|
422
|
-
* Get localized job name
|
|
423
|
-
*
|
|
424
|
-
* @param key - Job key
|
|
425
|
-
* @returns Localized job name
|
|
426
|
-
*/
|
|
427
|
-
getJobName(key) {
|
|
428
|
-
return this.translator.getJobName(key, this.currentLocale);
|
|
429
|
-
}
|
|
430
|
-
/**
|
|
431
|
-
* Static method: Get localized job name using default instance
|
|
432
|
-
*/
|
|
433
|
-
static getJobName(key) {
|
|
434
|
-
return this.getDefault().getJobName(key);
|
|
435
|
-
}
|
|
436
|
-
/**
|
|
437
|
-
* Get localized Grand Company name
|
|
438
|
-
*
|
|
439
|
-
* @param key - Grand Company key
|
|
440
|
-
* @returns Localized Grand Company name
|
|
441
|
-
*/
|
|
442
|
-
getGrandCompanyName(key) {
|
|
443
|
-
return this.translator.getGrandCompanyName(key, this.currentLocale);
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* Static method: Get localized Grand Company name using default instance
|
|
447
|
-
*/
|
|
448
|
-
static getGrandCompanyName(key) {
|
|
449
|
-
return this.getDefault().getGrandCompanyName(key);
|
|
439
|
+
static getSheetName(key, locale) {
|
|
440
|
+
return this.getDefault().getSheetName(key, locale);
|
|
450
441
|
}
|
|
451
442
|
/**
|
|
452
443
|
* Get localized race name
|
|
@@ -454,14 +445,14 @@ export class LocalizationService {
|
|
|
454
445
|
* @param key - Race key
|
|
455
446
|
* @returns Localized race name
|
|
456
447
|
*/
|
|
457
|
-
getRace(key) {
|
|
458
|
-
return this.translator.getRace(key, this.currentLocale);
|
|
448
|
+
getRace(key, locale) {
|
|
449
|
+
return this.translator.getRace(key, locale ?? this.currentLocale);
|
|
459
450
|
}
|
|
460
451
|
/**
|
|
461
452
|
* Static method: Get localized race name using default instance
|
|
462
453
|
*/
|
|
463
|
-
static getRace(key) {
|
|
464
|
-
return this.getDefault().getRace(key);
|
|
454
|
+
static getRace(key, locale) {
|
|
455
|
+
return this.getDefault().getRace(key, locale);
|
|
465
456
|
}
|
|
466
457
|
/**
|
|
467
458
|
* Get localized clan (subrace) name
|
|
@@ -469,14 +460,14 @@ export class LocalizationService {
|
|
|
469
460
|
* @param key - Clan key
|
|
470
461
|
* @returns Localized clan name
|
|
471
462
|
*/
|
|
472
|
-
getClan(key) {
|
|
473
|
-
return this.translator.getClan(key, this.currentLocale);
|
|
463
|
+
getClan(key, locale) {
|
|
464
|
+
return this.translator.getClan(key, locale ?? this.currentLocale);
|
|
474
465
|
}
|
|
475
466
|
/**
|
|
476
467
|
* Static method: Get localized clan name using default instance
|
|
477
468
|
*/
|
|
478
|
-
static getClan(key) {
|
|
479
|
-
return this.getDefault().getClan(key);
|
|
469
|
+
static getClan(key, locale) {
|
|
470
|
+
return this.getDefault().getClan(key, locale);
|
|
480
471
|
}
|
|
481
472
|
/**
|
|
482
473
|
* Get all available locale codes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalizationService.js","sourceRoot":"","sources":["../../src/services/LocalizationService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"LocalizationService.js","sourceRoot":"","sources":["../../src/services/LocalizationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
import type { RGB, Dye } from '@xivdyetools/types';
|
|
23
|
+
import type { MatchingMethod } from '../types/index.js';
|
|
23
24
|
import type { Logger } from '@xivdyetools/logger/library';
|
|
24
25
|
import type { DyeService } from './DyeService.js';
|
|
25
26
|
/**
|
|
@@ -34,6 +35,12 @@ export interface PaletteExtractionOptions {
|
|
|
34
35
|
convergenceThreshold?: number;
|
|
35
36
|
/** Maximum pixels to sample (default: 10000) */
|
|
36
37
|
maxSamples?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Matching method used to pick each extracted colour's nearest dye
|
|
40
|
+
* (`extractAndMatchPalette` only). Omitted → `DyeService.findClosestDye`'s
|
|
41
|
+
* own default (`DEFAULT_MATCHING_METHOD`, ΔE2000).
|
|
42
|
+
*/
|
|
43
|
+
matchingMethod?: MatchingMethod;
|
|
37
44
|
}
|
|
38
45
|
/**
|
|
39
46
|
* An extracted color with its dominance (cluster size)
|
|
@@ -74,7 +81,7 @@ export interface PaletteServiceOptions {
|
|
|
74
81
|
*/
|
|
75
82
|
export declare class PaletteService {
|
|
76
83
|
private logger;
|
|
77
|
-
/** Default extraction options */
|
|
84
|
+
/** Default extraction options (k-means only — the matching method has no forced default here; the dye search's own default applies) */
|
|
78
85
|
private static readonly DEFAULT_OPTIONS;
|
|
79
86
|
/**
|
|
80
87
|
* Create a new PaletteService
|
|
@@ -118,14 +125,6 @@ export declare class PaletteService {
|
|
|
118
125
|
* ```
|
|
119
126
|
*/
|
|
120
127
|
extractAndMatchPalette(pixels: RGB[], dyeService: DyeService, options?: PaletteExtractionOptions): PaletteMatch[];
|
|
121
|
-
/**
|
|
122
|
-
* Convert flat pixel array (Uint8ClampedArray from canvas) to RGB array
|
|
123
|
-
* Skips alpha channel
|
|
124
|
-
*
|
|
125
|
-
* @param data - Flat array of RGBA values [r, g, b, a, r, g, b, a, ...]
|
|
126
|
-
* @returns Array of RGB objects
|
|
127
|
-
*/
|
|
128
|
-
static pixelDataToRGB(data: Uint8ClampedArray | number[]): RGB[];
|
|
129
128
|
/**
|
|
130
129
|
* Filter out near-transparent pixels from RGBA data
|
|
131
130
|
* Useful for images with transparent backgrounds
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaletteService.d.ts","sourceRoot":"","sources":["../../src/services/PaletteService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMlD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PaletteService.d.ts","sourceRoot":"","sources":["../../src/services/PaletteService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMlD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,KAAK,EAAE,GAAG,CAAC;IACX,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,SAAS,EAAE,GAAG,CAAC;IACf,qCAAqC;IACrC,UAAU,EAAE,GAAG,CAAC;IAChB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmND;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IAEvB,uIAAuI;IACvI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAOrC;IAEF;;;OAGG;gBACS,OAAO,GAAE,qBAA0B;IAI/C;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAkBpB;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,GAAE,wBAA6B,GAAG,cAAc,EAAE;IAkEvF;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CACpB,MAAM,EAAE,GAAG,EAAE,EACb,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,wBAA6B,GACrC,YAAY,EAAE;IA+BjB;;;;;;;OAOG;IACH,MAAM,CAAC,sBAAsB,CAC3B,IAAI,EAAE,iBAAiB,GAAG,MAAM,EAAE,EAClC,cAAc,GAAE,MAAY,GAC3B,GAAG,EAAE;CAgBT"}
|
|
@@ -195,7 +195,7 @@ function kMeansClustering(pixels, k, maxIterations, convergenceThreshold) {
|
|
|
195
195
|
*/
|
|
196
196
|
export class PaletteService {
|
|
197
197
|
logger;
|
|
198
|
-
/** Default extraction options */
|
|
198
|
+
/** Default extraction options (k-means only — the matching method has no forced default here; the dye search's own default applies) */
|
|
199
199
|
static DEFAULT_OPTIONS = {
|
|
200
200
|
colorCount: 4,
|
|
201
201
|
maxIterations: 25,
|
|
@@ -260,9 +260,16 @@ export class PaletteService {
|
|
|
260
260
|
this.logger.warn('PaletteService.extractPalette: Empty pixel array');
|
|
261
261
|
return [];
|
|
262
262
|
}
|
|
263
|
+
// BUG-044 (2026-07-18 audit): clamp maxSamples like the sibling options —
|
|
264
|
+
// maxSamples 1 hit a 0/0 = NaN in the sampling interpolation (TypeError
|
|
265
|
+
// deep in k-means); ≤ 0 silently produced an empty sample set
|
|
266
|
+
if (opts.maxSamples < 2) {
|
|
267
|
+
this.logger.warn(`PaletteService.extractPalette: maxSamples ${opts.maxSamples} clamped to minimum 2`);
|
|
268
|
+
}
|
|
269
|
+
const maxSamples = Math.max(2, opts.maxSamples);
|
|
263
270
|
this.logger.info(`Extracting ${colorCount} colors from ${pixels.length} pixels`);
|
|
264
271
|
// Sample pixels if too many
|
|
265
|
-
const sampledPixels = this.samplePixels(pixels,
|
|
272
|
+
const sampledPixels = this.samplePixels(pixels, maxSamples);
|
|
266
273
|
// Run K-means clustering
|
|
267
274
|
const { centroids, clusterSizes } = kMeansClustering(sampledPixels, colorCount, maxIterations, opts.convergenceThreshold);
|
|
268
275
|
// Calculate total pixels for dominance percentage
|
|
@@ -300,7 +307,7 @@ export class PaletteService {
|
|
|
300
307
|
for (const ex of extracted) {
|
|
301
308
|
// Convert RGB to hex for DyeService
|
|
302
309
|
const hex = ColorService.rgbToHex(ex.color.r, ex.color.g, ex.color.b);
|
|
303
|
-
const matchedDye = dyeService.findClosestDye(hex);
|
|
310
|
+
const matchedDye = dyeService.findClosestDye(hex, options.matchingMethod ? { matchingMethod: options.matchingMethod } : undefined);
|
|
304
311
|
if (matchedDye) {
|
|
305
312
|
// Calculate distance between extracted and matched colors
|
|
306
313
|
const distance = rgbDistance(ex.color, matchedDye.rgb);
|
|
@@ -314,25 +321,6 @@ export class PaletteService {
|
|
|
314
321
|
}
|
|
315
322
|
return matches;
|
|
316
323
|
}
|
|
317
|
-
/**
|
|
318
|
-
* Convert flat pixel array (Uint8ClampedArray from canvas) to RGB array
|
|
319
|
-
* Skips alpha channel
|
|
320
|
-
*
|
|
321
|
-
* @param data - Flat array of RGBA values [r, g, b, a, r, g, b, a, ...]
|
|
322
|
-
* @returns Array of RGB objects
|
|
323
|
-
*/
|
|
324
|
-
static pixelDataToRGB(data) {
|
|
325
|
-
const pixels = [];
|
|
326
|
-
for (let i = 0; i < data.length; i += 4) {
|
|
327
|
-
pixels.push({
|
|
328
|
-
r: data[i],
|
|
329
|
-
g: data[i + 1],
|
|
330
|
-
b: data[i + 2],
|
|
331
|
-
// Skip alpha at data[i + 3]
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
return pixels;
|
|
335
|
-
}
|
|
336
324
|
/**
|
|
337
325
|
* Filter out near-transparent pixels from RGBA data
|
|
338
326
|
* Useful for images with transparent backgrounds
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaletteService.js","sourceRoot":"","sources":["../../src/services/PaletteService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"PaletteService.js","sourceRoot":"","sources":["../../src/services/PaletteService.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ export interface ResolvedPreset extends PresetPalette {
|
|
|
35
35
|
*/
|
|
36
36
|
interface IDyeService {
|
|
37
37
|
getDyeById(id: number): Dye | null;
|
|
38
|
+
getByStainId(stainId: number): Dye | null;
|
|
38
39
|
}
|
|
39
40
|
/**
|
|
40
41
|
* Service for managing preset color palettes
|
|
@@ -112,11 +113,6 @@ export declare class PresetService {
|
|
|
112
113
|
* ```
|
|
113
114
|
*/
|
|
114
115
|
getPreset(id: string): PresetPalette | undefined;
|
|
115
|
-
/**
|
|
116
|
-
* Get preset count by category
|
|
117
|
-
* @returns Map of category to preset count
|
|
118
|
-
*/
|
|
119
|
-
getPresetCountByCategory(): Map<PresetCategory, number>;
|
|
120
116
|
/**
|
|
121
117
|
* Search presets by name or tags
|
|
122
118
|
* @param query - Search query (case-insensitive)
|
|
@@ -133,13 +129,7 @@ export declare class PresetService {
|
|
|
133
129
|
* // Returns: Paladin, Warrior, Dark Knight, Gunbreaker
|
|
134
130
|
* ```
|
|
135
131
|
*/
|
|
136
|
-
searchPresets(query: string): PresetPalette[];
|
|
137
|
-
/**
|
|
138
|
-
* Search presets by tag (exact match)
|
|
139
|
-
* @param tag - Tag to search for (case-insensitive)
|
|
140
|
-
* @returns Array of presets with that tag
|
|
141
|
-
*/
|
|
142
|
-
getPresetsByTag(tag: string): PresetPalette[];
|
|
132
|
+
searchPresets(query: string, dyeService?: IDyeService): PresetPalette[];
|
|
143
133
|
/**
|
|
144
134
|
* Get a random preset, optionally filtered by category
|
|
145
135
|
* @param category - Optional category to filter by
|
|
@@ -178,28 +168,6 @@ export declare class PresetService {
|
|
|
178
168
|
* ```
|
|
179
169
|
*/
|
|
180
170
|
getPresetWithDyes(id: string, dyeService: IDyeService): ResolvedPreset | undefined;
|
|
181
|
-
/**
|
|
182
|
-
* Resolve multiple presets with their Dye objects
|
|
183
|
-
* @param presets - Array of presets to resolve
|
|
184
|
-
* @param dyeService - DyeService instance for resolving dye IDs
|
|
185
|
-
* @returns Array of resolved presets
|
|
186
|
-
*/
|
|
187
|
-
resolvePresets(presets: PresetPalette[], dyeService: IDyeService): ResolvedPreset[];
|
|
188
|
-
/**
|
|
189
|
-
* Get data version
|
|
190
|
-
* @returns Version string from preset data
|
|
191
|
-
*/
|
|
192
|
-
getVersion(): string;
|
|
193
|
-
/**
|
|
194
|
-
* Get last update timestamp
|
|
195
|
-
* @returns ISO date string of last update
|
|
196
|
-
*/
|
|
197
|
-
getLastUpdated(): string;
|
|
198
|
-
/**
|
|
199
|
-
* Get total number of presets
|
|
200
|
-
* @returns Total preset count
|
|
201
|
-
*/
|
|
202
|
-
getPresetCount(): number;
|
|
203
171
|
}
|
|
204
172
|
export {};
|
|
205
173
|
//# sourceMappingURL=PresetService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresetService.d.ts","sourceRoot":"","sources":["../../src/services/PresetService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,GAAG,EACJ,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,+DAA+D;IAC/D,YAAY,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,UAAU,WAAW;IACnB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"PresetService.d.ts","sourceRoot":"","sources":["../../src/services/PresetService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,GAAG,EACJ,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,+DAA+D;IAC/D,YAAY,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,UAAU,WAAW;IACnB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,UAAU,CAA6B;IAE/C;;;OAGG;gBACS,UAAU,EAAE,UAAU;IAUlC;;;;;;;;;OASG;IACH,aAAa,IAAI,CAAC,YAAY,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE;IAOlD;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,YAAY,GAAG,SAAS;IAQnE;;;OAGG;IACH,aAAa,IAAI,aAAa,EAAE;IAIhC;;;;;;;;;;OAUG;IACH,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,EAAE;IAI/D;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQhD;;;;;;;;;;;;;;;OAeG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE;IA4BvE;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,SAAS;IAcrE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS;CAYnF"}
|