You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.0 KiB
JavaScript

"use strict";
const assert = require("assert");
const capitalize = require("capitalize");
const pickBestOption = require("./pick-best-option");
const mapManufacturer = require("./map-manufacturer");
const normalizeString = require("./normalize-string");
const syncpipe = require("syncpipe");
function fixCasing(name) {
let normalized = normalizeString(name);
// NOTE: We ignore <= 4 character manufacturer names, as those are likely to be abbreviations, and therefore should remain all-uppercase
if (normalized.length > 4 && normalized === normalized.toUpperCase()) {
// String is in all-caps
return capitalize.words(normalized);
} else {
return normalized;
}
}
module.exports = function createDatasheet(api, data) {
let { createItem, mergeItem } = api;
let url = normalizeString(data.url);
if (url != null) {
let productID = normalizeString(data.productID);
let model = normalizeString(data.name);
let description = normalizeString(data.description);
let source = data.source;
let priority = data.priority;
let manufacturer = normalizeString(data.manufacturer);
assert(manufacturer != null);
assert(model != null);
let mappedManufacturer = syncpipe(manufacturer, [
(_) => (data.fixCasing === true)
? fixCasing(_)
: _,
(_) => mapManufacturer(_)
]);
let mappedID = `datasheet:${mappedManufacturer}:${model}`;
let unmappedID = `datasheet:${manufacturer}:${model}`;
createItem({
id: mappedID,
update: (data) => pickBestOption(data, {
priority: priority,
source: source,
manufacturer: mappedManufacturer,
productID: productID,
name: model,
description: description,
url: url
})
});
if (mappedID !== unmappedID) {
// NOTE: This is to get rid of items which were created before a mapping for that manufacturer existed; it essentially removes and redirects the old name into the new, normalized name.
mergeItem({
from: unmappedID,
into: mappedID,
merge: (into, from) => pickBestOption(from, into)
});
}
}
};