1
0
rotorflight-presets/indexer/IndexContent.js
Chris Kim fd9f215f9d
Add initial presets (#1)
Signed-off-by: Chris Kim <oats87g@gmail.com>
2025-04-01 12:47:05 +10:00

52 lines
1.6 KiB
JavaScript

'use strict';
class IndexContent
{
constructor(presetFilesArray, settings)
{
this.majorVersion = 1;
this.minorVersion = 0;
this.settings = settings;
this.uniqueValues = {};
this.presets = presetFilesArray;
this.uniqueValues.firmware_version = this._getUniqueValues(presetFilesArray, "firmware_version");
this.uniqueValues.category = this._getUniqueValues(presetFilesArray, "category");
this.uniqueValues.author = this._getUniqueValues(presetFilesArray, "author");
this.uniqueValues.keywords = this._getUniqueValues(presetFilesArray, "keywords");
this.uniqueValues.board_name = this._getUniqueValues(presetFilesArray, "board_name");
}
_getUniqueValues(presetFilesArray, property)
{
let result = new Set();
let resultLowerCase = new Set();
function addValue(value) {
const valueLowCase = value.toLowerCase();
if (!resultLowerCase.has(valueLowCase)) {
result.add(value);
resultLowerCase.add(valueLowCase);
}
}
for (let preset of presetFilesArray) {
if (property in preset) {
if (Array.isArray(preset[property])) {
for (let value of preset[property]) {
addValue(value);
}
} else {
addValue(preset[property]);
}
}
}
result = [...result];
result.sort((a, b) => a.localeCompare(b, undefined, {sensitivity: 'base'}));
return result;
}
}
module.exports = IndexContent;