Rewrite emoji_mart_data_light as TS (#25138)
				
					
				
			This commit is contained in:
		
							parent
							
								
									a86886b1fd
								
							
						
					
					
						commit
						3b5e302f7f
					
				
							
								
								
									
										51
									
								
								app/javascript/mastodon/features/emoji/emoji_compressed.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								app/javascript/mastodon/features/emoji/emoji_compressed.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -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
 | 
				
			||||||
@ -118,6 +118,16 @@ Object.keys(emojiIndex.emojis).forEach(key => {
 | 
				
			|||||||
// inconsistent behavior in dev mode
 | 
					// inconsistent behavior in dev mode
 | 
				
			||||||
module.exports = JSON.parse(JSON.stringify([
 | 
					module.exports = JSON.parse(JSON.stringify([
 | 
				
			||||||
  shortCodesToEmojiData,
 | 
					  shortCodesToEmojiData,
 | 
				
			||||||
 | 
					  /*
 | 
				
			||||||
 | 
					   * The property `skins` is not found in the current context.
 | 
				
			||||||
 | 
					   * This could potentially lead to issues when interacting with modules or data structures
 | 
				
			||||||
 | 
					   * that expect the presence of `skins` property.
 | 
				
			||||||
 | 
					   * Currently, no definitions or references to `skins` property can be found in:
 | 
				
			||||||
 | 
					   * - {@link node_modules/emoji-mart/dist/utils/data.js}
 | 
				
			||||||
 | 
					   * - {@link node_modules/emoji-mart/data/all.json}
 | 
				
			||||||
 | 
					   * - {@link app/javascript/mastodon/features/emoji/emoji_compressed.d.ts#Skins}
 | 
				
			||||||
 | 
					   * Future refactorings or updates should consider adding definitions or handling for `skins` property.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
  emojiMartData.skins,
 | 
					  emojiMartData.skins,
 | 
				
			||||||
  emojiMartData.categories,
 | 
					  emojiMartData.categories,
 | 
				
			||||||
  emojiMartData.aliases,
 | 
					  emojiMartData.aliases,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,43 +0,0 @@
 | 
				
			|||||||
// 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 emojiCompressed from './emoji_compressed';
 | 
					 | 
				
			||||||
import { unicodeToUnifiedName } from './unicode_to_unified_name';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const [ shortCodesToEmojiData, skins, categories, short_names ] = emojiCompressed;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const emojis = {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// decompress
 | 
					 | 
				
			||||||
Object.keys(shortCodesToEmojiData).forEach((shortCode) => {
 | 
					 | 
				
			||||||
  let [
 | 
					 | 
				
			||||||
    filenameData, // eslint-disable-line @typescript-eslint/no-unused-vars
 | 
					 | 
				
			||||||
    searchData,
 | 
					 | 
				
			||||||
  ] = shortCodesToEmojiData[shortCode];
 | 
					 | 
				
			||||||
  let [
 | 
					 | 
				
			||||||
    native,
 | 
					 | 
				
			||||||
    short_names,
 | 
					 | 
				
			||||||
    search,
 | 
					 | 
				
			||||||
    unified,
 | 
					 | 
				
			||||||
  ] = searchData;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (!unified) {
 | 
					 | 
				
			||||||
    // unified name can be derived from unicodeToUnifiedName
 | 
					 | 
				
			||||||
    unified = unicodeToUnifiedName(native);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  short_names = [shortCode].concat(short_names);
 | 
					 | 
				
			||||||
  emojis[shortCode] = {
 | 
					 | 
				
			||||||
    native,
 | 
					 | 
				
			||||||
    search,
 | 
					 | 
				
			||||||
    short_names,
 | 
					 | 
				
			||||||
    unified,
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export {
 | 
					 | 
				
			||||||
  emojis,
 | 
					 | 
				
			||||||
  skins,
 | 
					 | 
				
			||||||
  categories,
 | 
					 | 
				
			||||||
  short_names,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@ -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 };
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user