forked from mastodon/mastodon
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rewrite
emoji_mart_data_light
as TS (mastodon#25138)
- Loading branch information
1 parent
a86886b
commit 3b5e302
Showing
4 changed files
with
113 additions
and
43 deletions.
There are no files selected for viewing
51 changes: 51 additions & 0 deletions
51
app/javascript/mastodon/features/emoji/emoji_compressed.d.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import type { BaseEmoji, EmojiData, NimbleEmojiIndex } from 'emoji-mart'; | ||
import type { Category, Data, Emoji } from 'emoji-mart/dist-es/utils/data'; | ||
|
||
/* | ||
* The 'search' property, although not defined in the [`Emoji`]{@link node_modules/@types/emoji-mart/dist-es/utils/data.d.ts#Emoji} type, | ||
* is used in the application. | ||
* This could be due to an oversight by the library maintainer. | ||
* The `search` property is defined and used [here]{@link node_modules/emoji-mart/dist/utils/data.js#uncompress}. | ||
*/ | ||
export type Search = string; | ||
/* | ||
* The 'skins' property does not exist in the application data. | ||
* This could be a potential area of refactoring or error handling. | ||
* The non-existence of 'skins' property is evident at [this location]{@link app/javascript/mastodon/features/emoji/emoji_compressed.js:121}. | ||
*/ | ||
export type Skins = null; | ||
|
||
export type FilenameData = string[] | string[][]; | ||
export type ShortCodesToEmojiDataKey = | ||
| EmojiData['id'] | ||
| BaseEmoji['native'] | ||
| keyof NimbleEmojiIndex['emojis']; | ||
|
||
export type SearchData = [ | ||
BaseEmoji['native'], | ||
Emoji['short_names'], | ||
Search, | ||
Emoji['unified'] | ||
]; | ||
|
||
export interface ShortCodesToEmojiData { | ||
[key: ShortCodesToEmojiDataKey]: [FilenameData, SearchData]; | ||
} | ||
export type EmojisWithoutShortCodes = FilenameData[]; | ||
|
||
export type EmojiCompressed = [ | ||
ShortCodesToEmojiData, | ||
Skins, | ||
Category[], | ||
Data['aliases'], | ||
EmojisWithoutShortCodes | ||
]; | ||
|
||
/* | ||
* `emoji_compressed.js` uses `babel-plugin-preval`, which makes it difficult to convert to TypeScript. | ||
* As a temporary solution, we are allowing a default export here to apply the TypeScript type `EmojiCompressed` to the JS file export. | ||
* - {@link app/javascript/mastodon/features/emoji/emoji_compressed.js} | ||
*/ | ||
declare const emojiCompressed: EmojiCompressed; | ||
|
||
export default emojiCompressed; // eslint-disable-line import/no-default-export |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 0 additions & 43 deletions
43
app/javascript/mastodon/features/emoji/emoji_mart_data_light.js
This file was deleted.
Oops, something went wrong.
52 changes: 52 additions & 0 deletions
52
app/javascript/mastodon/features/emoji/emoji_mart_data_light.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// The output of this module is designed to mimic emoji-mart's | ||
// "data" object, such that we can use it for a light version of emoji-mart's | ||
// emojiIndex.search functionality. | ||
import type { BaseEmoji } from 'emoji-mart'; | ||
import type { Emoji } from 'emoji-mart/dist-es/utils/data'; | ||
|
||
import type { Search, ShortCodesToEmojiData } from './emoji_compressed'; | ||
import emojiCompressed from './emoji_compressed'; | ||
import { unicodeToUnifiedName } from './unicode_to_unified_name'; | ||
|
||
type Emojis = { | ||
[key in keyof ShortCodesToEmojiData]: { | ||
native: BaseEmoji['native']; | ||
search: Search; | ||
short_names: Emoji['short_names']; | ||
unified: Emoji['unified']; | ||
}; | ||
}; | ||
|
||
const [ | ||
shortCodesToEmojiData, | ||
skins, | ||
categories, | ||
short_names, | ||
_emojisWithoutShortCodes, | ||
] = emojiCompressed; | ||
|
||
const emojis: Emojis = {}; | ||
|
||
// decompress | ||
Object.keys(shortCodesToEmojiData).forEach((shortCode) => { | ||
const [_filenameData, searchData] = shortCodesToEmojiData[shortCode]; | ||
const native = searchData[0]; | ||
let short_names = searchData[1]; | ||
const search = searchData[2]; | ||
let unified = searchData[3]; | ||
|
||
if (!unified) { | ||
// unified name can be derived from unicodeToUnifiedName | ||
unified = unicodeToUnifiedName(native); | ||
} | ||
|
||
if (short_names) short_names = [shortCode].concat(short_names); | ||
emojis[shortCode] = { | ||
native, | ||
search, | ||
short_names, | ||
unified, | ||
}; | ||
}); | ||
|
||
export { emojis, skins, categories, short_names }; |