From b7d6ca63c1073637516a29d4f3e6b934cd08cf85 Mon Sep 17 00:00:00 2001 From: Idrees Hassan Date: Sat, 28 Mar 2026 11:29:35 -0700 Subject: [PATCH] Enforce enum types --- dist/extension.zip | Bin 157881 -> 158035 bytes dist/extension/birb.js | 34 +++++++++++++++++++++++++++------- dist/obsidian/main.js | 34 +++++++++++++++++++++++++++------- dist/userscript/birb.user.js | 34 +++++++++++++++++++++++++++------- dist/web/birb.embed.js | 34 +++++++++++++++++++++++++++------- dist/web/birb.js | 34 +++++++++++++++++++++++++++------- editor/editor.js | 5 +++-- src/animation/sprites.js | 14 ++++++-------- 8 files changed, 144 insertions(+), 45 deletions(-) diff --git a/dist/extension.zip b/dist/extension.zip index 81686b75a9a91272fb87e642554964daed4e59ae..ba885cbbace72ad7f2b375d5415385c8dde1adfd 100644 GIT binary patch delta 22970 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 - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -578,11 +574,13 @@ HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -618,6 +616,28 @@ "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/dist/obsidian/main.js b/dist/obsidian/main.js index 96224ee..6c7935a 100644 --- a/dist/obsidian/main.js +++ b/dist/obsidian/main.js @@ -547,11 +547,7 @@ module.exports = class PocketBird extends Plugin { } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -583,11 +579,13 @@ module.exports = class PocketBird extends Plugin { HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -623,6 +621,28 @@ module.exports = class PocketBird extends Plugin { "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/dist/userscript/birb.user.js b/dist/userscript/birb.user.js index 38d3266..789d5a3 100644 --- a/dist/userscript/birb.user.js +++ b/dist/userscript/birb.user.js @@ -556,11 +556,7 @@ } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -592,11 +588,13 @@ HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -632,6 +630,28 @@ "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/dist/web/birb.embed.js b/dist/web/birb.embed.js index 08358cd..6af6dec 100644 --- a/dist/web/birb.embed.js +++ b/dist/web/birb.embed.js @@ -542,11 +542,7 @@ } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -578,11 +574,13 @@ HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -618,6 +616,28 @@ "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/dist/web/birb.js b/dist/web/birb.js index 08358cd..6af6dec 100644 --- a/dist/web/birb.js +++ b/dist/web/birb.js @@ -542,11 +542,7 @@ } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -578,11 +574,13 @@ HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -618,6 +616,28 @@ "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/editor/editor.js b/editor/editor.js index 0ef9204..54b00f7 100644 --- a/editor/editor.js +++ b/editor/editor.js @@ -152,8 +152,9 @@ function getColor(part) { if (currentSpecies.colors[part]) { return currentSpecies.colors[part]; } - if (DEFAULT_COLOR_OVERRIDES[part]) { - return getColor(DEFAULT_COLOR_OVERRIDES[part]); + const override = DEFAULT_COLOR_OVERRIDES[/** @type {keyof typeof DEFAULT_COLOR_OVERRIDES} */ (part)]; + if (override) { + return getColor(override); } for (const [color, partName] of Object.entries(COLOR_MAP)) { if (partName === part) { diff --git a/src/animation/sprites.js b/src/animation/sprites.js index 2e03648..dcaaa55 100644 --- a/src/animation/sprites.js +++ b/src/animation/sprites.js @@ -1,10 +1,6 @@ import species from "../species.js" -/** - * Palette color names - * @type {Record} - */ -export const PALETTE = { +export const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -36,11 +32,13 @@ export const PALETTE = { HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", -}; +})); + +/** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ export const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -78,7 +76,7 @@ export const SPRITE_SHEET_COLOR_MAP = { /** - * @type {Record} + * @type {Partial>} */ export const DEFAULT_COLOR_OVERRIDES = { [PALETTE.HOOD]: PALETTE.FACE,