emoji-mart-lazyload/scripts/build-data.js

58 lines
1.5 KiB
JavaScript
Raw Normal View History

2016-05-31 14:36:52 +00:00
var fs = require('fs')
var emojiData = require('emoji-data')
var inflection = require('inflection')
var mkdirp = require('mkdirp')
var categories = ['People', 'Nature', 'Foods', 'Activity', 'Places', 'Objects', 'Symbols', 'Flags']
var data = { categories: [], emojis: {}, skins: {} }
2016-05-31 14:36:52 +00:00
var categoriesIndex = {}
categories.forEach((category, i) => {
data.categories[i] = { name: category, emojis: [] }
categoriesIndex[category] = i
})
emojiData.sort((a, b) => {
var aTest = a.sort_order || a.short_name
var bTest = b.sort_order || b.short_name
return aTest - bTest
})
emojiData.forEach((datum) => {
var category = datum.category,
shortName = datum.short_name,
categoryIndex
if (!datum.category) {
2016-05-31 14:36:52 +00:00
throw new Error('“' + datum.short_name + '” doesnt have a category')
}
datum.name || (datum.name = datum.short_name.replace(/\-/g, ' '))
datum.name = inflection.titleize(datum.name || '')
if (datum.category == 'Flags') {
datum.name = datum.name.replace(/\s(\w+)$/, (letters) => letters.toUpperCase())
}
2016-05-31 14:36:52 +00:00
if (!datum.name) {
throw new Error('“' + datum.short_name + '” doesnt have a name')
}
2016-06-09 01:30:41 +00:00
if (datum.category == 'Skin Tones') {
data.skins[datum.short_name] = datum
} else {
categoryIndex = categoriesIndex[category]
data.categories[categoryIndex].emojis.push(datum.short_name)
data.emojis[datum.short_name] = datum
}
2016-05-31 14:36:52 +00:00
})
mkdirp('data', (err) => {
if (err) throw err
fs.writeFile('data/index.js', `export default ${JSON.stringify(data)}`, (err) => {
if (err) throw err
})
})