mirror of
https://github.com/vale981/tridactyl
synced 2025-03-04 09:01:39 -05:00
63 lines
2.1 KiB
JavaScript
63 lines
2.1 KiB
JavaScript
const bcd = require('@mdn/browser-compat-data');
|
|
const api = bcd.webextensions.api;
|
|
const supported_browsers = ["firefox", "chrome"];
|
|
const minimalSupportedFirefoxVersion = 114;
|
|
|
|
function propertyNameOrValue(n) {
|
|
return (n.property.type == "Literal" ? n.property.value : n.property.name)
|
|
}
|
|
|
|
function detectBrowserUsage(context, node) {
|
|
let localApi = api;
|
|
let fullName = [];
|
|
while (node.type == "MemberExpression" && propertyNameOrValue(node) in localApi) {
|
|
const n = node;
|
|
node = node.parent;
|
|
let name = propertyNameOrValue(n);
|
|
fullName.push(name);
|
|
localApi = localApi[name];
|
|
if (!localApi.__compat) {
|
|
continue;
|
|
}
|
|
let support = localApi.__compat.support;
|
|
for (let browser of supported_browsers) {
|
|
if (support[browser].version_added === false) {
|
|
context.report({
|
|
node: n,
|
|
messageId: "unsupportedApis",
|
|
data: {
|
|
name: browser,
|
|
api: fullName.join("."),
|
|
}
|
|
});
|
|
} else {
|
|
const version = Number(support[browser].version_added);
|
|
if (!isNaN(version) && version > minimalSupportedFirefoxVersion) {
|
|
context.report({
|
|
node: n,
|
|
messageId: "apiTooRecent",
|
|
data: {
|
|
api: fullName.join("."),
|
|
version: minimalSupportedFirefoxVersion
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
meta: {
|
|
messages: {
|
|
unsupportedApis: "{{ api }} unsupported on '{{ name }}'",
|
|
apiTooRecent: "{{ api }} is not supported on firefox {{ version }}",
|
|
}
|
|
},
|
|
create(context) {
|
|
return {
|
|
'MemberExpression[object.name="browser"]': (n) => detectBrowserUsage(context, n),
|
|
'MemberExpression[object.name="browserBg"]': (n) => detectBrowserUsage(context, n),
|
|
};
|
|
}
|
|
};
|