@xivdyetools/types 1.6.1 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +37 -37
- package/README.md +290 -291
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/response.d.ts +1 -16
- package/dist/api/response.d.ts.map +1 -1
- package/dist/api/response.js +1 -1
- package/dist/auth/discord-snowflake.d.ts +71 -0
- package/dist/auth/discord-snowflake.d.ts.map +1 -0
- package/dist/auth/discord-snowflake.js +70 -0
- package/dist/auth/discord-snowflake.js.map +1 -0
- package/dist/auth/index.d.ts +3 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +1 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/response.d.ts +93 -34
- package/dist/auth/response.d.ts.map +1 -1
- package/dist/character/index.d.ts +4 -0
- package/dist/character/index.d.ts.map +1 -1
- package/dist/character/index.js.map +1 -1
- package/dist/color/colorblind.d.ts +1 -0
- package/dist/color/colorblind.d.ts.map +1 -1
- package/dist/color/index.d.ts +1 -1
- package/dist/color/index.d.ts.map +1 -1
- package/dist/color/rgb.d.ts +70 -0
- package/dist/color/rgb.d.ts.map +1 -1
- package/dist/dye/database.d.ts +1 -0
- package/dist/dye/database.d.ts.map +1 -1
- package/dist/dye/dye.d.ts +1 -0
- package/dist/dye/dye.d.ts.map +1 -1
- package/dist/error/app-error.js +2 -0
- package/dist/error/app-error.js.map +1 -1
- package/dist/index.d.ts +7 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/preset/community.d.ts +0 -9
- package/dist/preset/community.d.ts.map +1 -1
- package/dist/preset/core.d.ts +0 -10
- package/dist/preset/core.d.ts.map +1 -1
- package/dist/preset/index.d.ts +3 -3
- package/dist/preset/index.d.ts.map +1 -1
- package/dist/preset/response.d.ts +126 -40
- package/dist/preset/response.d.ts.map +1 -1
- package/package.json +81 -82
- package/dist/utility/index.d.ts +0 -71
- package/dist/utility/index.d.ts.map +0 -1
- package/dist/utility/index.js +0 -20
- package/dist/utility/index.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export { createHexColor, createDyeId, createHue, createSaturation } from './color/index.js';
|
|
16
16
|
export { RACE_SUBRACES, SUBRACE_TO_RACE, COLOR_GRID_DIMENSIONS, } from './character/index.js';
|
|
17
|
+
export { isValidSnowflake } from './auth/index.js';
|
|
17
18
|
// ============================================================================
|
|
18
19
|
// Error Types
|
|
19
20
|
// ============================================================================
|
|
20
21
|
export { ErrorCode } from './error/index.js';
|
|
21
22
|
export { AppError } from './error/index.js';
|
|
22
|
-
export { isOk, isErr } from './utility/index.js';
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAmB5F,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AA+C9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA6BnD,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -78,13 +78,4 @@ export interface PresetSubmission {
|
|
|
78
78
|
/** Tags (0-10 tags, max 30 chars each) */
|
|
79
79
|
tags: string[];
|
|
80
80
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Extended submission with author info (for authenticated submissions)
|
|
83
|
-
*/
|
|
84
|
-
export interface AuthenticatedPresetSubmission extends PresetSubmission {
|
|
85
|
-
/** Submitter's Discord user ID */
|
|
86
|
-
author_discord_id: string;
|
|
87
|
-
/** Submitter's display name */
|
|
88
|
-
author_name: string;
|
|
89
|
-
}
|
|
90
81
|
//# sourceMappingURL=community.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"community.d.ts","sourceRoot":"","sources":["../../src/preset/community.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,6BAA6B;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IAEX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,WAAW,EAAE,cAAc,CAAC;IAE5B,uCAAuC;IACvC,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,sBAAsB;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,gDAAgD;IAChD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,wBAAwB;IACxB,MAAM,EAAE,YAAY,CAAC;IAErB,wCAAwC;IACxC,UAAU,EAAE,OAAO,CAAC;IAEpB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IAEnB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wDAAwD;IACxD,eAAe,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe;IACf,WAAW,EAAE,cAAc,CAAC;IAE5B,uCAAuC;IACvC,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,0CAA0C;IAC1C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB
|
|
1
|
+
{"version":3,"file":"community.d.ts","sourceRoot":"","sources":["../../src/preset/community.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,6BAA6B;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IAEX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,WAAW,EAAE,cAAc,CAAC;IAE5B,uCAAuC;IACvC,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,sBAAsB;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,gDAAgD;IAChD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,wBAAwB;IACxB,MAAM,EAAE,YAAY,CAAC;IAErB,wCAAwC;IACxC,UAAU,EAAE,OAAO,CAAC;IAEpB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IAEnB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wDAAwD;IACxD,eAAe,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe;IACf,WAAW,EAAE,cAAc,CAAC;IAE5B,uCAAuC;IACvC,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,0CAA0C;IAC1C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB"}
|
package/dist/preset/core.d.ts
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module preset/core
|
|
7
7
|
*/
|
|
8
|
-
import type { Dye } from '../dye/dye.js';
|
|
9
8
|
/**
|
|
10
9
|
* Preset palette category identifiers
|
|
11
10
|
*/
|
|
@@ -66,15 +65,6 @@ export interface PresetPalette {
|
|
|
66
65
|
/** Version for future updates */
|
|
67
66
|
version?: string;
|
|
68
67
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Preset with resolved Dye objects
|
|
71
|
-
*
|
|
72
|
-
* Used when displaying a preset with full dye information.
|
|
73
|
-
*/
|
|
74
|
-
export interface ResolvedPreset extends PresetPalette {
|
|
75
|
-
/** Full Dye objects for each dye ID (null if dye not found) */
|
|
76
|
-
resolvedDyes: (Dye | null)[];
|
|
77
|
-
}
|
|
78
68
|
/**
|
|
79
69
|
* Full preset data structure
|
|
80
70
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/preset/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/preset/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,iBAAiB,GACjB,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,WAAW,CAAC;AAEhB;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,EAAE,EAAE,MAAM,CAAC;IAEX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,QAAQ,EAAE,cAAc,CAAC;IAEzB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,sBAAsB;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IAEpB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAEjD,0BAA0B;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B"}
|
package/dist/preset/index.d.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module preset
|
|
7
7
|
*/
|
|
8
|
-
export type { PresetCategory, PresetStatus, PresetSortOption, CategoryMeta, PresetPalette,
|
|
9
|
-
export type { PresetPreviousValues, CommunityPreset, PresetSubmission,
|
|
8
|
+
export type { PresetCategory, PresetStatus, PresetSortOption, CategoryMeta, PresetPalette, PresetData, } from './core.js';
|
|
9
|
+
export type { PresetPreviousValues, CommunityPreset, PresetSubmission, } from './community.js';
|
|
10
10
|
export type { PresetFilters, PresetEditRequest } from './request.js';
|
|
11
|
-
export type { PresetListResponse, PresetSubmitResponse, PresetEditResponse, VoteResponse, ModerationResponse, CategoryListResponse, } from './response.js';
|
|
11
|
+
export type { PresetListResponse, PresetSubmitCreatedResponse, PresetSubmitDuplicateResponse, PresetSubmitErrorResponse, PresetSubmitResponse, PresetEditDuplicateInfo, PresetEditSuccessResponse, PresetEditDuplicateResponse, PresetEditErrorResponse, PresetEditResponse, VoteSuccessResponse, VoteErrorResponse, VoteResponse, ModerationSuccessResponse, ModerationErrorResponse, ModerationResponse, CategoryListResponse, } from './response.js';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/preset/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/preset/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGrE,YAAY,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
|
|
@@ -23,65 +23,151 @@ export interface PresetListResponse {
|
|
|
23
23
|
has_more: boolean;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Successful preset creation response
|
|
27
|
+
* @internal Not for direct consumer import — use `PresetSubmitResponse` union instead
|
|
27
28
|
*/
|
|
28
|
-
export interface
|
|
29
|
-
/**
|
|
30
|
-
success:
|
|
31
|
-
/** The created preset
|
|
32
|
-
preset
|
|
33
|
-
/** The existing preset (if duplicate found) */
|
|
34
|
-
duplicate?: CommunityPreset;
|
|
35
|
-
/** Whether a vote was added to duplicate */
|
|
36
|
-
vote_added?: boolean;
|
|
29
|
+
export interface PresetSubmitCreatedResponse {
|
|
30
|
+
/** Operation succeeded */
|
|
31
|
+
success: true;
|
|
32
|
+
/** The newly created preset */
|
|
33
|
+
preset: CommunityPreset;
|
|
37
34
|
/** Moderation result */
|
|
38
|
-
moderation_status
|
|
39
|
-
/** Error message (if success is false) */
|
|
40
|
-
error?: string;
|
|
35
|
+
moderation_status: 'approved' | 'pending';
|
|
41
36
|
}
|
|
42
37
|
/**
|
|
43
|
-
*
|
|
38
|
+
* Duplicate preset found response
|
|
39
|
+
* @internal Not for direct consumer import — use `PresetSubmitResponse` union instead
|
|
40
|
+
*/
|
|
41
|
+
export interface PresetSubmitDuplicateResponse {
|
|
42
|
+
/** Operation succeeded (duplicate handling is not an error) */
|
|
43
|
+
success: true;
|
|
44
|
+
/** The existing preset that matched */
|
|
45
|
+
duplicate: CommunityPreset;
|
|
46
|
+
/** Whether a vote was added to the duplicate */
|
|
47
|
+
vote_added: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Failed preset submission response
|
|
51
|
+
* @internal Not for direct consumer import — use `PresetSubmitResponse` union instead
|
|
52
|
+
*/
|
|
53
|
+
export interface PresetSubmitErrorResponse {
|
|
54
|
+
/** Operation failed */
|
|
55
|
+
success: false;
|
|
56
|
+
/** Error message describing the failure */
|
|
57
|
+
error: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Response when submitting a preset
|
|
61
|
+
*
|
|
62
|
+
* Uses discriminated union with multiple success states:
|
|
63
|
+
* - Created: new preset was created
|
|
64
|
+
* - Duplicate: existing preset found, vote may have been added
|
|
65
|
+
* - Error: submission failed
|
|
44
66
|
*/
|
|
45
|
-
export
|
|
46
|
-
|
|
47
|
-
|
|
67
|
+
export type PresetSubmitResponse = PresetSubmitCreatedResponse | PresetSubmitDuplicateResponse | PresetSubmitErrorResponse;
|
|
68
|
+
/**
|
|
69
|
+
* Duplicate preset info for edit conflict
|
|
70
|
+
* @internal Not for direct consumer import — use `PresetEditResponse` union instead
|
|
71
|
+
*/
|
|
72
|
+
export interface PresetEditDuplicateInfo {
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
author_name: string | null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Successful preset edit response
|
|
79
|
+
* @internal Not for direct consumer import — use `PresetEditResponse` union instead
|
|
80
|
+
*/
|
|
81
|
+
export interface PresetEditSuccessResponse {
|
|
82
|
+
/** Operation succeeded */
|
|
83
|
+
success: true;
|
|
48
84
|
/** The updated preset */
|
|
49
|
-
preset
|
|
85
|
+
preset: CommunityPreset;
|
|
50
86
|
/** Moderation result (if content needed review) */
|
|
51
87
|
moderation_status?: 'approved' | 'pending';
|
|
52
|
-
/** Duplicate info (if edit would create duplicate) */
|
|
53
|
-
duplicate?: {
|
|
54
|
-
id: string;
|
|
55
|
-
name: string;
|
|
56
|
-
author_name: string | null;
|
|
57
|
-
};
|
|
58
|
-
/** Error message (if success is false) */
|
|
59
|
-
error?: string;
|
|
60
88
|
}
|
|
61
89
|
/**
|
|
62
|
-
*
|
|
90
|
+
* Preset edit blocked due to duplicate
|
|
91
|
+
* @internal Not for direct consumer import — use `PresetEditResponse` union instead
|
|
92
|
+
*/
|
|
93
|
+
export interface PresetEditDuplicateResponse {
|
|
94
|
+
/** Operation failed due to duplicate */
|
|
95
|
+
success: false;
|
|
96
|
+
/** Info about the existing duplicate */
|
|
97
|
+
duplicate: PresetEditDuplicateInfo;
|
|
98
|
+
/** Error message */
|
|
99
|
+
error: string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Failed preset edit response
|
|
103
|
+
* @internal Not for direct consumer import — use `PresetEditResponse` union instead
|
|
104
|
+
*/
|
|
105
|
+
export interface PresetEditErrorResponse {
|
|
106
|
+
/** Operation failed */
|
|
107
|
+
success: false;
|
|
108
|
+
/** Error message describing the failure */
|
|
109
|
+
error: string;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Response from preset edit endpoint
|
|
113
|
+
*
|
|
114
|
+
* Uses discriminated union for type-safe handling.
|
|
115
|
+
*/
|
|
116
|
+
export type PresetEditResponse = PresetEditSuccessResponse | PresetEditDuplicateResponse | PresetEditErrorResponse;
|
|
117
|
+
/**
|
|
118
|
+
* Successful vote response
|
|
119
|
+
* @internal Not for direct consumer import — use `VoteResponse` union instead
|
|
63
120
|
*/
|
|
64
|
-
export interface
|
|
65
|
-
/**
|
|
66
|
-
success:
|
|
121
|
+
export interface VoteSuccessResponse {
|
|
122
|
+
/** Operation succeeded */
|
|
123
|
+
success: true;
|
|
67
124
|
/** Updated vote count */
|
|
68
125
|
new_vote_count: number;
|
|
69
|
-
/** True if user already voted */
|
|
126
|
+
/** True if user already voted (vote was not added) */
|
|
70
127
|
already_voted?: boolean;
|
|
71
|
-
/** Error message (if success is false) */
|
|
72
|
-
error?: string;
|
|
73
128
|
}
|
|
74
129
|
/**
|
|
75
|
-
*
|
|
130
|
+
* Failed vote response
|
|
131
|
+
* @internal Not for direct consumer import — use `VoteResponse` union instead
|
|
76
132
|
*/
|
|
77
|
-
export interface
|
|
78
|
-
/**
|
|
79
|
-
success:
|
|
133
|
+
export interface VoteErrorResponse {
|
|
134
|
+
/** Operation failed */
|
|
135
|
+
success: false;
|
|
136
|
+
/** Error message describing the failure */
|
|
137
|
+
error: string;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Response when voting on a preset
|
|
141
|
+
*
|
|
142
|
+
* Uses discriminated union for type-safe handling.
|
|
143
|
+
*/
|
|
144
|
+
export type VoteResponse = VoteSuccessResponse | VoteErrorResponse;
|
|
145
|
+
/**
|
|
146
|
+
* Successful moderation response
|
|
147
|
+
* @internal Not for direct consumer import — use `ModerationResponse` union instead
|
|
148
|
+
*/
|
|
149
|
+
export interface ModerationSuccessResponse {
|
|
150
|
+
/** Operation succeeded */
|
|
151
|
+
success: true;
|
|
80
152
|
/** The updated preset */
|
|
81
|
-
preset
|
|
82
|
-
|
|
83
|
-
|
|
153
|
+
preset: CommunityPreset;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Failed moderation response
|
|
157
|
+
* @internal Not for direct consumer import — use `ModerationResponse` union instead
|
|
158
|
+
*/
|
|
159
|
+
export interface ModerationErrorResponse {
|
|
160
|
+
/** Operation failed */
|
|
161
|
+
success: false;
|
|
162
|
+
/** Error message describing the failure */
|
|
163
|
+
error: string;
|
|
84
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Response from moderation actions
|
|
167
|
+
*
|
|
168
|
+
* Uses discriminated union for type-safe handling.
|
|
169
|
+
*/
|
|
170
|
+
export type ModerationResponse = ModerationSuccessResponse | ModerationErrorResponse;
|
|
85
171
|
/**
|
|
86
172
|
* Response when listing categories
|
|
87
173
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/preset/response.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,OAAO,EAAE,eAAe,EAAE,CAAC;IAE3B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IAEd,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/preset/response.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,82 +1,81 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@xivdyetools/types",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Shared TypeScript type definitions for the xivdyetools ecosystem",
|
|
5
|
-
"author": "XIV Dye Tools",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"main": "dist/index.js",
|
|
9
|
-
"types": "dist/index.d.ts",
|
|
10
|
-
"exports": {
|
|
11
|
-
".": {
|
|
12
|
-
"types": "./dist/index.d.ts",
|
|
13
|
-
"import": "./dist/index.js"
|
|
14
|
-
},
|
|
15
|
-
"./color": {
|
|
16
|
-
"types": "./dist/color/index.d.ts",
|
|
17
|
-
"import": "./dist/color/index.js"
|
|
18
|
-
},
|
|
19
|
-
"./dye": {
|
|
20
|
-
"types": "./dist/dye/index.d.ts",
|
|
21
|
-
"import": "./dist/dye/index.js"
|
|
22
|
-
},
|
|
23
|
-
"./character": {
|
|
24
|
-
"types": "./dist/character/index.d.ts",
|
|
25
|
-
"import": "./dist/character/index.js"
|
|
26
|
-
},
|
|
27
|
-
"./preset": {
|
|
28
|
-
"types": "./dist/preset/index.d.ts",
|
|
29
|
-
"import": "./dist/preset/index.js"
|
|
30
|
-
},
|
|
31
|
-
"./auth": {
|
|
32
|
-
"types": "./dist/auth/index.d.ts",
|
|
33
|
-
"import": "./dist/auth/index.js"
|
|
34
|
-
},
|
|
35
|
-
"./api": {
|
|
36
|
-
"types": "./dist/api/index.d.ts",
|
|
37
|
-
"import": "./dist/api/index.js"
|
|
38
|
-
},
|
|
39
|
-
"./error": {
|
|
40
|
-
"types": "./dist/error/index.d.ts",
|
|
41
|
-
"import": "./dist/error/index.js"
|
|
42
|
-
},
|
|
43
|
-
"./localization": {
|
|
44
|
-
"types": "./dist/localization/index.d.ts",
|
|
45
|
-
"import": "./dist/localization/index.js"
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
"files": [
|
|
49
|
-
"dist",
|
|
50
|
-
"README.md"
|
|
51
|
-
],
|
|
52
|
-
"sideEffects": false,
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@xivdyetools/types",
|
|
3
|
+
"version": "1.9.0",
|
|
4
|
+
"description": "Shared TypeScript type definitions for the xivdyetools ecosystem",
|
|
5
|
+
"author": "XIV Dye Tools",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./color": {
|
|
16
|
+
"types": "./dist/color/index.d.ts",
|
|
17
|
+
"import": "./dist/color/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./dye": {
|
|
20
|
+
"types": "./dist/dye/index.d.ts",
|
|
21
|
+
"import": "./dist/dye/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./character": {
|
|
24
|
+
"types": "./dist/character/index.d.ts",
|
|
25
|
+
"import": "./dist/character/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./preset": {
|
|
28
|
+
"types": "./dist/preset/index.d.ts",
|
|
29
|
+
"import": "./dist/preset/index.js"
|
|
30
|
+
},
|
|
31
|
+
"./auth": {
|
|
32
|
+
"types": "./dist/auth/index.d.ts",
|
|
33
|
+
"import": "./dist/auth/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./api": {
|
|
36
|
+
"types": "./dist/api/index.d.ts",
|
|
37
|
+
"import": "./dist/api/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./error": {
|
|
40
|
+
"types": "./dist/error/index.d.ts",
|
|
41
|
+
"import": "./dist/error/index.js"
|
|
42
|
+
},
|
|
43
|
+
"./localization": {
|
|
44
|
+
"types": "./dist/localization/index.d.ts",
|
|
45
|
+
"import": "./dist/localization/index.js"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"files": [
|
|
49
|
+
"dist",
|
|
50
|
+
"README.md"
|
|
51
|
+
],
|
|
52
|
+
"sideEffects": false,
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
55
|
+
"vitest": "^4.0.18"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=18.0.0"
|
|
59
|
+
},
|
|
60
|
+
"keywords": [
|
|
61
|
+
"xivdyetools",
|
|
62
|
+
"ffxiv",
|
|
63
|
+
"dyes",
|
|
64
|
+
"typescript",
|
|
65
|
+
"types"
|
|
66
|
+
],
|
|
67
|
+
"repository": {
|
|
68
|
+
"type": "git",
|
|
69
|
+
"url": "https://github.com/FlashGalatine/xivdyetools.git",
|
|
70
|
+
"directory": "packages/types"
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "tsc -p tsconfig.build.json",
|
|
74
|
+
"type-check": "tsc --noEmit",
|
|
75
|
+
"clean": "rimraf dist",
|
|
76
|
+
"lint": "eslint src",
|
|
77
|
+
"test": "vitest run",
|
|
78
|
+
"test:watch": "vitest",
|
|
79
|
+
"test:coverage": "vitest run --coverage"
|
|
80
|
+
}
|
|
81
|
+
}
|
package/dist/utility/index.d.ts
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @xivdyetools/types - Utility Types
|
|
3
|
-
*
|
|
4
|
-
* Generic utility types for common patterns.
|
|
5
|
-
*
|
|
6
|
-
* @module utility
|
|
7
|
-
*/
|
|
8
|
-
import type { AppError } from '../error/app-error.js';
|
|
9
|
-
/**
|
|
10
|
-
* Generic result type for operations that might fail
|
|
11
|
-
*
|
|
12
|
-
* Use this for functions that can return either a value or an error,
|
|
13
|
-
* avoiding exceptions for expected failure cases.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* function parseColor(hex: string): Result<RGB> {
|
|
18
|
-
* if (!isValidHex(hex)) {
|
|
19
|
-
* return { ok: false, error: new AppError('INVALID_HEX', 'Invalid hex color') };
|
|
20
|
-
* }
|
|
21
|
-
* return { ok: true, value: hexToRgb(hex) };
|
|
22
|
-
* }
|
|
23
|
-
*
|
|
24
|
-
* const result = parseColor('#ff0000');
|
|
25
|
-
* if (result.ok) {
|
|
26
|
-
* console.log(result.value); // RGB object
|
|
27
|
-
* } else {
|
|
28
|
-
* console.error(result.error.message);
|
|
29
|
-
* }
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export type Result<T, E = AppError> = {
|
|
33
|
-
ok: true;
|
|
34
|
-
value: T;
|
|
35
|
-
} | {
|
|
36
|
-
ok: false;
|
|
37
|
-
error: E;
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Async result type
|
|
41
|
-
*
|
|
42
|
-
* Promise wrapper around Result for async operations.
|
|
43
|
-
*/
|
|
44
|
-
export type AsyncResult<T, E = AppError> = Promise<Result<T, E>>;
|
|
45
|
-
/**
|
|
46
|
-
* Nullable type
|
|
47
|
-
*
|
|
48
|
-
* Value that can be T or null.
|
|
49
|
-
*/
|
|
50
|
-
export type Nullable<T> = T | null;
|
|
51
|
-
/**
|
|
52
|
-
* Optional type
|
|
53
|
-
*
|
|
54
|
-
* Value that can be T or undefined.
|
|
55
|
-
*/
|
|
56
|
-
export type Optional<T> = T | undefined;
|
|
57
|
-
/**
|
|
58
|
-
* Type guard for checking if a Result is successful
|
|
59
|
-
*/
|
|
60
|
-
export declare function isOk<T, E>(result: Result<T, E>): result is {
|
|
61
|
-
ok: true;
|
|
62
|
-
value: T;
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* Type guard for checking if a Result is an error
|
|
66
|
-
*/
|
|
67
|
-
export declare function isErr<T, E>(result: Result<T, E>): result is {
|
|
68
|
-
ok: false;
|
|
69
|
-
error: E;
|
|
70
|
-
};
|
|
71
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utility/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,IAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAE5B;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEnC;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAExC;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAEjF;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAEnF"}
|
package/dist/utility/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @xivdyetools/types - Utility Types
|
|
3
|
-
*
|
|
4
|
-
* Generic utility types for common patterns.
|
|
5
|
-
*
|
|
6
|
-
* @module utility
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Type guard for checking if a Result is successful
|
|
10
|
-
*/
|
|
11
|
-
export function isOk(result) {
|
|
12
|
-
return result.ok;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Type guard for checking if a Result is an error
|
|
16
|
-
*/
|
|
17
|
-
export function isErr(result) {
|
|
18
|
-
return !result.ok;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utility/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoDH;;GAEG;AACH,MAAM,UAAU,IAAI,CAAO,MAAoB;IAC7C,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAO,MAAoB;IAC9C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACpB,CAAC"}
|