Modernize deprecation handling

This commit is contained in:
Elias Schriefer 2021-09-17 16:14:05 +02:00
parent c6f8b2da10
commit 8f623405f7

View File

@ -338,6 +338,27 @@ class LightDMMock {
user.session = this.sessions[Math.floor((Math.random() * this.sessions.length))].name;
}
});
const deprecations = {
properties: [
{ deprecated: "default_language", alternative: "lightdm.language" },
{ deprecated: "default_layout", alternative: "lightdm.layout" },
{ deprecated: "select_guest", alternative: "lightdm.select_guest_hint" },
{ deprecated: "select_user", alternative: "lightdm.select_user_hint" },
{ deprecated: "timed_login_user", alternative: "lightdm.autologin_user" },
{ deprecated: "timed_login_delay", alternative: "lightdm.autologin_timeout" },
],
};
return new Proxy(this, {
get: (o, k, r) => {
if (deprecations.properties.map(o => o.deprecated).includes(k)) {
deprecationNotifier("property", k, deprecations.properties.alternative)
} else {
return Reflect.get(o, k, r);
}
}
});
}
}
}
@ -652,16 +673,21 @@ function IncompatibleArgumentTypesException(number, expected, received) {
******************************************************************************/
/**
* global helper deprecationNotifier
* @desc
* throws ~balls~ errors at users who use deprecated methods and properties.
*
* @param {String} type [method||property]
* @param {String} depricated [deprecated method or property name]
* @param {String} alternative [alternative method or property to use]
* @param {String} type
* "method" or "property"
*
* @param {String} deprecated
* deprecated method or property name
*
* @param {String} alternative
* alternative method or property to use
*
* @throws {DeprecationException}
*/
window.deprecationNotifier = function(type, deprecated, alternative) {
export const deprecationNotifier = (type, deprecated, alternative) => {
throw new DeprecationException(type, deprecated, alternative);
};
@ -876,36 +902,6 @@ if(!Object.prototype.unwatch) {
});
}
/******************************************************************************
* Deprecated properties *
******************************************************************************/
LightDMMock.watch('default_language', function() {
window.deprecationNotifier("property", "default_language", "lightdm.language");
});
LightDMMock.watch('default_layout', function() {
window.deprecationNotifier("property", "default_layout", "lightdm.layout");
});
LightDMMock.watch('select_guest', function() {
window.deprecationNotifier("property", "select_guest", "lightdm.select_guest_hint");
});
LightDMMock.watch('select_user', function() {
window.deprecationNotifier("property", "select_user", "lightdm.select_user_hint");
});
LightDMMock.watch('timed_login_user', function() {
window.deprecationNotifier("property", "timed_login_user", "lightdm.autologin_user");
});
LightDMMock.watch('timed_login_delay', function() {
window.deprecationNotifier("property", "timed_login_delay", "lightdm.autologin_timeout");
});
/******************************************************************************
* Module loading *
******************************************************************************/