in build_data.js [29:137]
function buildData() {
if (_currBuild) return _currBuild;
const START = '🏗 ' + colors.yellow('Building data...');
const END = '👍 ' + colors.green('data built');
console.log('');
console.log(START);
console.time(END);
// Create symlinks if necessary.. { 'target': 'source' }
const symlinks = {
'land.html': 'dist/land.html',
img: 'dist/img'
};
for (let target of Object.keys(symlinks)) {
if (!shell.test('-L', target)) {
console.log(`Creating symlink: ${target} -> ${symlinks[target]}`);
shell.ln('-sf', symlinks[target], target);
}
}
// Translation strings
let tstrings = {
categories: {},
groups: {},
fields: {},
presets: {}
};
// Font Awesome icons used
let faIcons = {
'fas-smile-beam': {},
'fas-grin-beam': {},
'fas-laugh-beam': {},
'fas-sun': {},
'fas-moon': {},
'fas-edit': {},
'fas-map-marked-alt': {},
'fas-toolbox': {},
'fas-clock': {},
'fas-birthday-cake': {},
'fas-i-cursor': {},
'fas-lock': {},
'fas-long-arrow-alt-right': {},
'fas-th-list': {}
};
// The Noun Project icons used
let tnpIcons = {};
// all fields searchable under "add field"
let searchableFieldIDs = {};
// Start clean
shell.rm('-f', [
'data/presets/categories.json',
'data/presets/fields.json',
'data/presets/presets.json',
'data/presets.yaml',
'data/taginfo.json',
'data/territory-languages.json',
'dist/locales/en.json',
'svg/fontawesome/*.svg',
]);
var groups = generateGroups(tstrings);
let categories = generateCategories(tstrings, faIcons, tnpIcons);
let fields = generateFields(tstrings, faIcons, tnpIcons, searchableFieldIDs);
let presets = generatePresets(tstrings, faIcons, tnpIcons, searchableFieldIDs);
let defaults = read('data/presets/defaults.json');
let translations = generateTranslations(fields, presets, tstrings, searchableFieldIDs);
let taginfo = generateTaginfo(presets, fields);
let territoryLanguages = generateTerritoryLanguages();
// Additional consistency checks
validateCategoryPresets(categories, presets);
validatePresetFields(presets, fields);
validateDefaults(defaults, categories, presets);
// Save individual data files
let tasks = [
writeFileProm('data/presets/categories.json', prettyStringify({ categories: categories }) ),
writeFileProm('data/presets/fields.json', prettyStringify({ fields: fields }, { maxLength: 9999 }) ),
writeFileProm('data/presets/presets.json', prettyStringify({ presets: presets }, { maxLength: 9999 }) ),
writeFileProm('data/presets.yaml', translationsToYAML(translations) ),
writeFileProm('data/presets/groups.json', prettyStringify({ groups: groups }, { maxLength: 1000 })),
writeFileProm('data/taginfo.json', prettyStringify(taginfo, { maxLength: 9999 }) ),
writeFileProm('data/territory-languages.json', prettyStringify({ dataTerritoryLanguages: territoryLanguages }, { maxLength: 9999 }) ),
writeEnJson(tstrings),
writeFaIcons(faIcons),
writeTnpIcons(tnpIcons)
];
return _currBuild =
Promise.all(tasks)
.then(() => {
console.timeEnd(END);
console.log('');
_currBuild = null;
})
.catch((err) => {
console.error(err);
console.log('');
_currBuild = null;
process.exit(1);
});
}