Files
iD/modules/osm/deprecated.js

82 lines
2.6 KiB
JavaScript

/** @typedef {{ old: Tags; replace?: Tags }[]} DataDeprecated */
/** @param {Tags} tags @param {DataDeprecated} dataDeprecated */
export function getDeprecatedTags(tags, dataDeprecated) {
// if there are no tags, none can be deprecated
if (Object.keys(tags).length === 0) return [];
/** @type {DataDeprecated} */
var deprecated = [];
dataDeprecated.forEach((d) => {
var oldKeys = Object.keys(d.old);
if (d.replace) {
var hasExistingValues = Object.keys(d.replace).some((replaceKey) => {
if (!tags[replaceKey] || d.old[replaceKey]) return false;
var replaceValue = d.replace[replaceKey];
if (replaceValue === '*') return false;
if (replaceValue === tags[replaceKey]) return false;
return true;
});
// don't flag deprecated tags if the upgrade path would overwrite existing data - #7843
if (hasExistingValues) return;
}
var matchesDeprecatedTags = oldKeys.every((oldKey) => {
if (!tags[oldKey]) return false;
if (d.old[oldKey] === '*') return true;
if (d.old[oldKey] === tags[oldKey]) return true;
var vals = tags[oldKey].split(';').filter(Boolean);
if (vals.length === 0) {
return false;
} else if (vals.length > 1) {
return vals.indexOf(d.old[oldKey]) !== -1;
} else {
if (tags[oldKey] === d.old[oldKey]) {
if (d.replace && d.old[oldKey] === d.replace[oldKey]) {
var replaceKeys = Object.keys(d.replace);
return !replaceKeys.every((replaceKey) => {
return tags[replaceKey] === d.replace[replaceKey];
});
} else {
return true;
}
}
}
return false;
});
if (matchesDeprecatedTags) {
deprecated.push(d);
}
});
return deprecated;
}
/** @type {{ [key: string]: string[] }} */
var _deprecatedTagValuesByKey;
/** @param {DataDeprecated} dataDeprecated */
export function deprecatedTagValuesByKey(dataDeprecated) {
if (!_deprecatedTagValuesByKey) {
_deprecatedTagValuesByKey = {};
dataDeprecated.forEach((d) => {
var oldKeys = Object.keys(d.old);
if (oldKeys.length === 1) {
var oldKey = oldKeys[0];
var oldValue = d.old[oldKey];
if (oldValue !== '*') {
if (!_deprecatedTagValuesByKey[oldKey]) {
_deprecatedTagValuesByKey[oldKey] = [oldValue];
} else {
_deprecatedTagValuesByKey[oldKey].push(oldValue);
}
}
}
});
}
return _deprecatedTagValuesByKey;
};