@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
|
@@ -7,6 +7,7 @@ import { ErrorCode, AppError } from '@xivdyetools/types';
|
|
|
7
7
|
import { NoOpLogger } from '@xivdyetools/logger/library';
|
|
8
8
|
import { KDTree } from '../../utils/kd-tree.js';
|
|
9
9
|
import { ColorConverter } from '../color/ColorConverter.js';
|
|
10
|
+
import { ACQUISITION_META, METALLIC_STAIN_IDS, } from '../../config/dye-vocabulary.js';
|
|
10
11
|
/**
|
|
11
12
|
* Dye database manager
|
|
12
13
|
* Per R-4: Single Responsibility - database management only
|
|
@@ -23,7 +24,6 @@ export class DyeDatabase {
|
|
|
23
24
|
// Per P-7: k-d tree for fast nearest neighbor search in RGB space
|
|
24
25
|
kdTree = null;
|
|
25
26
|
isLoaded = false;
|
|
26
|
-
lastLoaded = 0;
|
|
27
27
|
logger;
|
|
28
28
|
// Per P-2: Hue bucket size (10 degrees per bucket for 36 buckets total)
|
|
29
29
|
static HUE_BUCKET_SIZE = 10;
|
|
@@ -66,97 +66,57 @@ export class DyeDatabase {
|
|
|
66
66
|
* @param dye - Object to validate as a Dye
|
|
67
67
|
* @returns true if valid, false otherwise
|
|
68
68
|
*/
|
|
69
|
+
/**
|
|
70
|
+
* REFACTOR-013 (2026-07-18 audit): shared log-identifier derivation —
|
|
71
|
+
* previously copy-pasted (with drift) six times inside isValidDye.
|
|
72
|
+
*/
|
|
73
|
+
dyeIdForLog(dye) {
|
|
74
|
+
if (typeof dye.id === 'number')
|
|
75
|
+
return String(dye.id);
|
|
76
|
+
if (typeof dye.itemID === 'number')
|
|
77
|
+
return String(dye.itemID);
|
|
78
|
+
return typeof dye.name === 'string' ? dye.name : 'unknown';
|
|
79
|
+
}
|
|
69
80
|
isValidDye(dye) {
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
// Schema v2: stainID is the canonical identifier (Stain-sheet row, byte
|
|
82
|
+
// range). Legacy fixture shapes may instead carry id/itemID — accepted
|
|
83
|
+
// for backward compatibility with runtime-shaped test data.
|
|
84
|
+
const hasStainId = typeof dye.stainID === 'number' && dye.stainID >= 1 && dye.stainID <= 254;
|
|
85
|
+
const hasLegacyId = typeof dye.id === 'number' || typeof dye.itemID === 'number';
|
|
86
|
+
if (!hasStainId && !hasLegacyId) {
|
|
87
|
+
this.logger.warn('Dye missing required stainID (or legacy id/itemID) field');
|
|
75
88
|
return false;
|
|
76
89
|
}
|
|
77
90
|
// Required: name must be a non-empty string
|
|
78
91
|
if (typeof dye.name !== 'string' || dye.name.length === 0) {
|
|
79
|
-
const idForLog =
|
|
80
|
-
? String(dye.id)
|
|
81
|
-
: typeof dye.itemID === 'number'
|
|
82
|
-
? String(dye.itemID)
|
|
83
|
-
: 'unknown';
|
|
92
|
+
const idForLog = this.dyeIdForLog(dye);
|
|
84
93
|
this.logger.warn(`Dye ${idForLog} has invalid name`);
|
|
85
94
|
return false;
|
|
86
95
|
}
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
? String(dye.itemID)
|
|
94
|
-
: String(dye.name ?? 'unknown');
|
|
95
|
-
const hexForLog = typeof dye.hex === 'string' ? dye.hex : JSON.stringify(dye.hex);
|
|
96
|
-
this.logger.warn(`Dye ${idForLog} has invalid hex format: ${hexForLog}`);
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
// Validate RGB if present
|
|
101
|
-
if (dye.rgb !== undefined && dye.rgb !== null) {
|
|
102
|
-
const rgb = dye.rgb;
|
|
103
|
-
if (typeof rgb.r !== 'number' ||
|
|
104
|
-
rgb.r < 0 ||
|
|
105
|
-
rgb.r > 255 ||
|
|
106
|
-
typeof rgb.g !== 'number' ||
|
|
107
|
-
rgb.g < 0 ||
|
|
108
|
-
rgb.g > 255 ||
|
|
109
|
-
typeof rgb.b !== 'number' ||
|
|
110
|
-
rgb.b < 0 ||
|
|
111
|
-
rgb.b > 255) {
|
|
112
|
-
const idForLog = typeof dye.id === 'number'
|
|
113
|
-
? String(dye.id)
|
|
114
|
-
: typeof dye.itemID === 'number'
|
|
115
|
-
? String(dye.itemID)
|
|
116
|
-
: String(dye.name ?? 'unknown');
|
|
117
|
-
this.logger.warn(`Dye ${idForLog} has invalid RGB values`);
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// CORE-BUG-004 FIX: HSV is required per Dye interface (used for hue bucket indexing)
|
|
122
|
-
// Must validate HSV is present and has valid values
|
|
123
|
-
if (dye.hsv === undefined || dye.hsv === null) {
|
|
124
|
-
const idForLog = typeof dye.id === 'number'
|
|
125
|
-
? String(dye.id)
|
|
126
|
-
: typeof dye.itemID === 'number'
|
|
127
|
-
? String(dye.itemID)
|
|
128
|
-
: String(dye.name ?? 'unknown');
|
|
129
|
-
this.logger.warn(`Dye ${idForLog} missing required HSV values`);
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
const hsv = dye.hsv;
|
|
133
|
-
if (typeof hsv.h !== 'number' ||
|
|
134
|
-
hsv.h < 0 ||
|
|
135
|
-
hsv.h > 360 ||
|
|
136
|
-
typeof hsv.s !== 'number' ||
|
|
137
|
-
hsv.s < 0 ||
|
|
138
|
-
hsv.s > 100 ||
|
|
139
|
-
typeof hsv.v !== 'number' ||
|
|
140
|
-
hsv.v < 0 ||
|
|
141
|
-
hsv.v > 100) {
|
|
142
|
-
const idForLog = typeof dye.id === 'number'
|
|
143
|
-
? String(dye.id)
|
|
144
|
-
: typeof dye.itemID === 'number'
|
|
145
|
-
? String(dye.itemID)
|
|
146
|
-
: String(dye.name ?? 'unknown');
|
|
147
|
-
this.logger.warn(`Dye ${idForLog} has invalid HSV values`);
|
|
96
|
+
// Schema v2: hex is REQUIRED — it is the single color source of truth
|
|
97
|
+
// from which rgb/hsv/lab are derived during normalization.
|
|
98
|
+
if (typeof dye.hex !== 'string' || !/^#[A-Fa-f0-9]{6}$/.test(dye.hex)) {
|
|
99
|
+
const idForLog = this.dyeIdForLog(dye);
|
|
100
|
+
const hexForLog = typeof dye.hex === 'string' ? dye.hex : JSON.stringify(dye.hex);
|
|
101
|
+
this.logger.warn(`Dye ${idForLog} has missing or invalid hex: ${hexForLog}`);
|
|
148
102
|
return false;
|
|
149
103
|
}
|
|
150
104
|
// Validate category if present
|
|
151
105
|
if (dye.category !== undefined && dye.category !== null && typeof dye.category !== 'string') {
|
|
152
|
-
const idForLog =
|
|
153
|
-
? String(dye.id)
|
|
154
|
-
: typeof dye.itemID === 'number'
|
|
155
|
-
? String(dye.itemID)
|
|
156
|
-
: String(dye.name ?? 'unknown');
|
|
106
|
+
const idForLog = this.dyeIdForLog(dye);
|
|
157
107
|
this.logger.warn(`Dye ${idForLog} has invalid category type`);
|
|
158
108
|
return false;
|
|
159
109
|
}
|
|
110
|
+
// Validate consolidationType domain if present
|
|
111
|
+
if (dye.consolidationType !== undefined &&
|
|
112
|
+
dye.consolidationType !== null &&
|
|
113
|
+
dye.consolidationType !== 'A' &&
|
|
114
|
+
dye.consolidationType !== 'B' &&
|
|
115
|
+
dye.consolidationType !== 'C') {
|
|
116
|
+
const idForLog = this.dyeIdForLog(dye);
|
|
117
|
+
this.logger.warn(`Dye ${idForLog} has invalid consolidationType`);
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
160
120
|
return true;
|
|
161
121
|
}
|
|
162
122
|
/**
|
|
@@ -179,44 +139,80 @@ export class DyeDatabase {
|
|
|
179
139
|
if (!Array.isArray(loadedDyes) || loadedDyes.length === 0) {
|
|
180
140
|
throw new Error('Invalid dye database format: empty or not an array');
|
|
181
141
|
}
|
|
182
|
-
// Normalize dyes
|
|
142
|
+
// Normalize dyes (schema v2): derive rgb/hsv/cost/currency/flags from
|
|
143
|
+
// the 7-field file shape, with prototype pollution protection. Legacy
|
|
144
|
+
// runtime-shaped input (full 16-field Dye objects, used by test
|
|
145
|
+
// fixtures) passes through with its explicit values respected.
|
|
183
146
|
// Per Issue #14: Filter out invalid dyes during loading
|
|
184
147
|
this.dyes = loadedDyes
|
|
185
148
|
.map((dye) => {
|
|
186
149
|
// Per Security: Create a safe clone to prevent prototype pollution
|
|
187
150
|
const normalizedDye = this.safeClone(dye);
|
|
188
|
-
//
|
|
151
|
+
// Schema v2: legacyItemID carries the market-era item ID. The
|
|
152
|
+
// runtime `itemID`/`id` contract (number, equal) is preserved for
|
|
153
|
+
// downstream compatibility; a future dye with legacyItemID null
|
|
154
|
+
// falls back to its stainID.
|
|
155
|
+
if (normalizedDye.itemID === undefined && normalizedDye.legacyItemID !== undefined) {
|
|
156
|
+
normalizedDye.itemID = normalizedDye.legacyItemID;
|
|
157
|
+
}
|
|
158
|
+
if ((normalizedDye.itemID === null || normalizedDye.itemID === undefined) &&
|
|
159
|
+
typeof normalizedDye.stainID === 'number') {
|
|
160
|
+
normalizedDye.itemID = normalizedDye.stainID;
|
|
161
|
+
}
|
|
189
162
|
if (normalizedDye.itemID && !normalizedDye.id) {
|
|
190
163
|
normalizedDye.id = normalizedDye.itemID;
|
|
191
164
|
}
|
|
192
|
-
//
|
|
193
|
-
//
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
normalizedDye.
|
|
200
|
-
normalizedDye.
|
|
165
|
+
// Schema v2: rgb/hsv are DERIVED from hex — the stored copies were
|
|
166
|
+
// a drift hazard (the Brass hsv bug; research/monorepo-2.0/01 §2).
|
|
167
|
+
// 2-dp hue precision matters: 4 dyes sit within 0.2° of a 10° hue
|
|
168
|
+
// bucket edge.
|
|
169
|
+
if (typeof normalizedDye.hex === 'string' &&
|
|
170
|
+
/^#[A-Fa-f0-9]{6}$/.test(normalizedDye.hex)) {
|
|
171
|
+
const rgb = ColorConverter.hexToRgb(normalizedDye.hex);
|
|
172
|
+
normalizedDye.rgb = rgb;
|
|
173
|
+
normalizedDye.hsv = ColorConverter.rgbToHsv(rgb.r, rgb.g, rgb.b);
|
|
201
174
|
}
|
|
202
|
-
//
|
|
203
|
-
//
|
|
175
|
+
// Schema v2: cost/currency derive from the acquisition table when
|
|
176
|
+
// the entry doesn't carry them (legacy `price` still honored).
|
|
177
|
+
const meta = typeof normalizedDye.acquisition === 'string'
|
|
178
|
+
? ACQUISITION_META[normalizedDye.acquisition]
|
|
179
|
+
: undefined;
|
|
204
180
|
if (normalizedDye.price !== undefined && normalizedDye.cost === undefined) {
|
|
205
181
|
normalizedDye.cost = normalizedDye.price ?? 0;
|
|
206
182
|
}
|
|
207
|
-
// Ensure cost is always a number (handle null values in JSON)
|
|
208
183
|
if (normalizedDye.cost === null || normalizedDye.cost === undefined) {
|
|
209
|
-
normalizedDye.cost = 0;
|
|
184
|
+
normalizedDye.cost = meta?.price ?? 0;
|
|
185
|
+
}
|
|
186
|
+
if (normalizedDye.currency === undefined) {
|
|
187
|
+
normalizedDye.currency = meta?.currency ?? null;
|
|
210
188
|
}
|
|
211
|
-
// Default consolidationType and isIshgardian for backward compatibility
|
|
212
189
|
if (normalizedDye.consolidationType === undefined) {
|
|
213
190
|
normalizedDye.consolidationType = null;
|
|
214
191
|
}
|
|
192
|
+
// Schema v2 derived flags (explicit fixture values win):
|
|
193
|
+
// - metallic = the Stain sheet's gloss set (16 — decided 2026-07-30;
|
|
194
|
+
// NOT the name prefix, which misses Gunmetal Black + Pearl White)
|
|
195
|
+
// - cosmic ≡ consolidationType 'C', ishgardian ≡ 'B' (fixes the old
|
|
196
|
+
// isCosmic pollution where all 9 Firmament dyes were included)
|
|
197
|
+
if (normalizedDye.isMetallic === undefined) {
|
|
198
|
+
normalizedDye.isMetallic =
|
|
199
|
+
typeof normalizedDye.stainID === 'number' &&
|
|
200
|
+
METALLIC_STAIN_IDS.has(normalizedDye.stainID);
|
|
201
|
+
}
|
|
202
|
+
if (normalizedDye.isPastel === undefined) {
|
|
203
|
+
normalizedDye.isPastel = String(normalizedDye.name).startsWith('Pastel');
|
|
204
|
+
}
|
|
205
|
+
if (normalizedDye.isDark === undefined) {
|
|
206
|
+
normalizedDye.isDark = String(normalizedDye.name).startsWith('Dark');
|
|
207
|
+
}
|
|
208
|
+
if (normalizedDye.isCosmic === undefined) {
|
|
209
|
+
normalizedDye.isCosmic = normalizedDye.consolidationType === 'C';
|
|
210
|
+
}
|
|
215
211
|
if (normalizedDye.isIshgardian === undefined) {
|
|
216
|
-
normalizedDye.isIshgardian =
|
|
212
|
+
normalizedDye.isIshgardian = normalizedDye.consolidationType === 'B';
|
|
217
213
|
}
|
|
218
|
-
if (normalizedDye.
|
|
219
|
-
normalizedDye.
|
|
214
|
+
if (normalizedDye.stainID === undefined) {
|
|
215
|
+
normalizedDye.stainID = null;
|
|
220
216
|
}
|
|
221
217
|
// Per MEM-001: Pre-compute lowercase name and category for search optimization
|
|
222
218
|
normalizedDye.nameLower = String(normalizedDye.name).toLowerCase();
|
|
@@ -256,6 +252,12 @@ export class DyeDatabase {
|
|
|
256
252
|
// Per P-7: Build k-d tree for RGB color space
|
|
257
253
|
const kdTreePoints = [];
|
|
258
254
|
for (const dye of this.dyes) {
|
|
255
|
+
// REFACTOR-012 (2026-07-18 audit): the Facewear synthetic-ID hash is a
|
|
256
|
+
// plain char-code sum (collision-prone for future names); a silent
|
|
257
|
+
// map overwrite would make one dye unreachable by ID. Fail loudly.
|
|
258
|
+
if (this.dyesByIdMap.has(dye.id)) {
|
|
259
|
+
this.logger.error(`Duplicate dye ID detected during initialization: ${dye.id} (${dye.name}) collides with ${this.dyesByIdMap.get(dye.id)?.name}`);
|
|
260
|
+
}
|
|
259
261
|
// Map by id (which equals itemID after normalization)
|
|
260
262
|
this.dyesByIdMap.set(dye.id, dye);
|
|
261
263
|
// Per Issue #5: Only map itemID separately if it differs from id
|
|
@@ -289,7 +291,6 @@ export class DyeDatabase {
|
|
|
289
291
|
// Per P-7: Build k-d tree
|
|
290
292
|
this.kdTree = new KDTree(kdTreePoints);
|
|
291
293
|
this.isLoaded = true;
|
|
292
|
-
this.lastLoaded = Date.now();
|
|
293
294
|
this.logger.info(`Dye database loaded: ${this.dyes.length} dyes`);
|
|
294
295
|
}
|
|
295
296
|
catch (error) {
|
|
@@ -344,45 +345,12 @@ export class DyeDatabase {
|
|
|
344
345
|
this.ensureLoaded();
|
|
345
346
|
return this.dyesByStainIdMap.get(stainId) || null;
|
|
346
347
|
}
|
|
347
|
-
/**
|
|
348
|
-
* Get multiple dyes by IDs
|
|
349
|
-
*/
|
|
350
|
-
getDyesByIds(ids) {
|
|
351
|
-
this.ensureLoaded();
|
|
352
|
-
// DyeInternal extends Dye, so this is type-safe as Dye[]
|
|
353
|
-
return ids
|
|
354
|
-
.map((id) => this.dyesByIdMap.get(id))
|
|
355
|
-
.filter((dye) => dye !== undefined);
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Get multiple dyes by stainIDs
|
|
359
|
-
*
|
|
360
|
-
* Batch equivalent of `getByStainId()`. Returns only the dyes that match;
|
|
361
|
-
* unknown stainIDs are silently skipped (consistent with `getDyesByIds()`).
|
|
362
|
-
*
|
|
363
|
-
* @param stainIds - Array of stain table IDs
|
|
364
|
-
* @returns Array of matching dyes (order matches input, gaps removed)
|
|
365
|
-
*
|
|
366
|
-
* @since 2.2.0
|
|
367
|
-
*/
|
|
368
|
-
getDyesByStainIds(stainIds) {
|
|
369
|
-
this.ensureLoaded();
|
|
370
|
-
return stainIds
|
|
371
|
-
.map((id) => this.dyesByStainIdMap.get(id))
|
|
372
|
-
.filter((dye) => dye !== undefined);
|
|
373
|
-
}
|
|
374
348
|
/**
|
|
375
349
|
* Check if database is loaded
|
|
376
350
|
*/
|
|
377
351
|
isLoadedStatus() {
|
|
378
352
|
return this.isLoaded;
|
|
379
353
|
}
|
|
380
|
-
/**
|
|
381
|
-
* Get timestamp of last load
|
|
382
|
-
*/
|
|
383
|
-
getLastLoadedTime() {
|
|
384
|
-
return this.lastLoaded;
|
|
385
|
-
}
|
|
386
354
|
/**
|
|
387
355
|
* Get total dye count
|
|
388
356
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DyeDatabase.js","sourceRoot":"","sources":["../../../src/services/dye/DyeDatabase.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DyeDatabase.js","sourceRoot":"","sources":["../../../src/services/dye/DyeDatabase.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Handles finding dyes by name, category, color distance, etc.
|
|
5
5
|
*/
|
|
6
6
|
import type { Dye } from '@xivdyetools/types';
|
|
7
|
-
import type { MatchingMethod
|
|
7
|
+
import type { MatchingMethod } from '../../types/index.js';
|
|
8
8
|
import type { DyeDatabase } from './DyeDatabase.js';
|
|
9
9
|
/**
|
|
10
10
|
* Options for finding closest dye matches.
|
|
@@ -12,10 +12,8 @@ import type { DyeDatabase } from './DyeDatabase.js';
|
|
|
12
12
|
export interface FindClosestOptions {
|
|
13
13
|
/** Dye IDs to exclude from results */
|
|
14
14
|
excludeIds?: number[];
|
|
15
|
-
/** Color matching algorithm (default: '
|
|
15
|
+
/** Color matching algorithm (default: 'ciede2000' — see DEFAULT_MATCHING_METHOD) */
|
|
16
16
|
matchingMethod?: MatchingMethod;
|
|
17
|
-
/** Custom weights for oklch-weighted method */
|
|
18
|
-
weights?: OklchWeights;
|
|
19
17
|
}
|
|
20
18
|
/**
|
|
21
19
|
* Options for finding dyes within a distance threshold.
|
|
@@ -25,10 +23,8 @@ export interface FindWithinDistanceOptions {
|
|
|
25
23
|
maxDistance: number;
|
|
26
24
|
/** Maximum number of results to return */
|
|
27
25
|
limit?: number;
|
|
28
|
-
/** Color matching algorithm (default: '
|
|
26
|
+
/** Color matching algorithm (default: 'ciede2000' — see DEFAULT_MATCHING_METHOD) */
|
|
29
27
|
matchingMethod?: MatchingMethod;
|
|
30
|
-
/** Custom weights for oklch-weighted method */
|
|
31
|
-
weights?: OklchWeights;
|
|
32
28
|
}
|
|
33
29
|
/**
|
|
34
30
|
* Dye search and matching utilities
|
|
@@ -45,7 +41,6 @@ export declare class DyeSearch {
|
|
|
45
41
|
* @param hex1 - First color in hex format
|
|
46
42
|
* @param hex2 - Second color in hex format
|
|
47
43
|
* @param method - Matching algorithm to use
|
|
48
|
-
* @param weights - Custom weights for oklch-weighted method
|
|
49
44
|
* @returns Distance value (lower = more similar)
|
|
50
45
|
*/
|
|
51
46
|
private calculateDistance;
|
|
@@ -74,19 +69,23 @@ export declare class DyeSearch {
|
|
|
74
69
|
* Per P-7: Uses k-d tree for O(log n) initial candidates, then re-ranks
|
|
75
70
|
* using the specified perceptual distance algorithm.
|
|
76
71
|
*
|
|
77
|
-
* Per COLOR-MATCH-001: Supports
|
|
78
|
-
* - '
|
|
72
|
+
* Per COLOR-MATCH-001 (5.0 suite): Supports the six `MatchingMethod`s:
|
|
73
|
+
* - 'ciede2000': CIEDE2000 (industry standard, accurate) — the default
|
|
74
|
+
* - 'oklab': OKLAB Euclidean (modern, good balance)
|
|
79
75
|
* - 'cie76': CIE76 LAB Euclidean (fast, fair accuracy)
|
|
80
|
-
* - '
|
|
81
|
-
* - '
|
|
82
|
-
* - '
|
|
83
|
-
*
|
|
76
|
+
* - 'redmean': Redmean-weighted RGB (cheap perceptual approximation)
|
|
77
|
+
* - 'rgb': RGB Euclidean (fastest, least accurate)
|
|
78
|
+
* - 'distinguish': RGB distance as an unrounded percent of the max (same
|
|
79
|
+
* ranking as 'rgb'; display-only rounding happens at the consumer)
|
|
80
|
+
*
|
|
81
|
+
* The v4 methods 'hyab' / 'oklch-weighted' are retired; unknown values fall
|
|
82
|
+
* back to CIEDE2000 (see `normalizeMatchingMethod`).
|
|
84
83
|
*
|
|
85
84
|
* @param hex - Target color in hex format
|
|
86
|
-
* @param
|
|
85
|
+
* @param options - Options object (excludeIds, matchingMethod)
|
|
87
86
|
* @returns Closest matching dye, or null if none found
|
|
88
87
|
*/
|
|
89
|
-
findClosestDye(hex: string,
|
|
88
|
+
findClosestDye(hex: string, options?: FindClosestOptions): Dye | null;
|
|
90
89
|
/**
|
|
91
90
|
* Find dyes within a color distance threshold using configurable matching.
|
|
92
91
|
*
|
|
@@ -96,22 +95,9 @@ export declare class DyeSearch {
|
|
|
96
95
|
* Per COLOR-MATCH-001: Supports multiple matching algorithms.
|
|
97
96
|
*
|
|
98
97
|
* @param hex - Target color in hex format
|
|
99
|
-
* @param
|
|
100
|
-
* @param limit - Maximum results (legacy parameter, use options.limit instead)
|
|
98
|
+
* @param options - Options object (maxDistance, limit, matchingMethod)
|
|
101
99
|
* @returns Array of dyes within the distance threshold
|
|
102
100
|
*/
|
|
103
|
-
findDyesWithinDistance(hex: string,
|
|
104
|
-
/**
|
|
105
|
-
* Get dyes sorted by brightness
|
|
106
|
-
*/
|
|
107
|
-
getDyesSortedByBrightness(ascending?: boolean): Dye[];
|
|
108
|
-
/**
|
|
109
|
-
* Get dyes sorted by saturation
|
|
110
|
-
*/
|
|
111
|
-
getDyesSortedBySaturation(ascending?: boolean): Dye[];
|
|
112
|
-
/**
|
|
113
|
-
* Get dyes sorted by hue
|
|
114
|
-
*/
|
|
115
|
-
getDyesSortedByHue(ascending?: boolean): Dye[];
|
|
101
|
+
findDyesWithinDistance(hex: string, options: FindWithinDistanceOptions): Dye[];
|
|
116
102
|
}
|
|
117
103
|
//# sourceMappingURL=DyeSearch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DyeSearch.d.ts","sourceRoot":"","sources":["../../../src/services/dye/DyeSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"DyeSearch.d.ts","sourceRoot":"","sources":["../../../src/services/dye/DyeSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,oFAAoF;IACpF,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAEJ,QAAQ,EAAE,WAAW;IAIzC;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAclC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE;IASzC;;OAEG;IACH,UAAU,CACR,MAAM,GAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd,GACL,GAAG,EAAE;IA0BR;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,GAAG,GAAG,IAAI;IA0EzE;;;;;;;;;;;OAWG;IACH,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,GAAG,EAAE;CAwE/E"}
|