@autocodingsystems/gateway-client
Version:
Library and commandline utility to control the acs gateway - device drivers for the most common industrial production line devices
64 lines (53 loc) • 1.88 kB
JavaScript
var digits = /\d+/
function splitname(name) {
var basename = name;
var copy = 0;
var priority = 0;
var priorityopen = basename.lastIndexOf('[');
var priorityclose = basename.lastIndexOf(']');
var prioritycontent = basename.slice(priorityopen+1, priorityclose)
if (priorityclose === (basename.length-1) && priorityopen > 0 && priorityopen < priorityclose && digits.test(prioritycontent)) {
basename = basename.slice(0, priorityopen).trimRight();
priority = parseInt(prioritycontent);
}
var copyopen = name.lastIndexOf('(copy ');
var copyclose = name.lastIndexOf(')');
var copycontent = basename.slice(copyopen + 6, copyclose);
if (copyclose === (basename.length-1) && copyopen > 0 && copyopen < copyclose && digits.test(copycontent)) {
basename = basename.slice(0, copyopen).trimRight();
copy = parseInt(copycontent);
}
return {basename, copy, priority};
}
function joinname(name, copy, priority) {
var joinedname = name.trimRight();
if (copy) {
joinedname = `${joinedname} (copy ${copy})`;
}
if (priority) {
joinedname = `${joinedname} [${priority}]`;
}
return joinedname;
}
module.exports = {
duplicate: (name, existingdevices) => {
return name;
},
rename: (name, existingdevices) => {
var {basename, copy, priority} = splitname(name);
var newname = joinname(basename, copy, priority);
while (existingdevices.some(e => e.Name === newname)) {
copy += 1;
newname = joinname(basename, copy, priority);
}
existingdevices.push({Name: newname});
return newname;
},
skip: (name, existingdevices) => {
if (existingdevices.some(e => e.Name === name)) {
return null;
} else {
return name;
}
},
};