@heycart-ag/admin-eslint-rules
Version:
HeyCart Administration ESLint rules
84 lines (78 loc) • 2.37 kB
JavaScript
export default {
meta: {
type: "problem",
docs: {
description:
"Disallow overwriting sw-extension-* components using HeyCart.Component.override",
category: "Possible Errors",
recommended: true,
},
fixable: null,
schema: [],
},
create(context) {
let componentVariableName = null;
return {
VariableDeclarator(node) {
// const { Component } = HeyCart;
if (
node.id.type === "ObjectPattern" &&
node.init &&
node.init.type === "Identifier" &&
node.init.name === "HeyCart"
) {
const componentProperty = node.id.properties.find(
(p) => p.key.name === "Component",
);
if (componentProperty) {
componentVariableName = componentProperty.value.name;
}
}
// const Component = HeyCart.Component;
if (
node.id.type === "Identifier" &&
node.init &&
node.init.type === "MemberExpression" &&
node.init.object.type === "Identifier" &&
node.init.object.name === "HeyCart" &&
node.init.property.type === "Identifier" &&
node.init.property.name === "Component"
) {
componentVariableName = node.id.name;
}
},
CallExpression(node) {
const isHeyCartComponentOverride =
node.callee.type === "MemberExpression" &&
node.callee.object.type === "MemberExpression" &&
node.callee.object.object.type === "Identifier" &&
node.callee.object.object.name === "HeyCart" &&
node.callee.object.property.type === "Identifier" &&
node.callee.object.property.name === "Component" &&
node.callee.property.type === "Identifier" &&
node.callee.property.name === "override";
const isAliasOverride =
componentVariableName &&
node.callee.type === "MemberExpression" &&
node.callee.object.type === "Identifier" &&
node.callee.object.name === componentVariableName &&
node.callee.property.type === "Identifier" &&
node.callee.property.name === "override";
if (isHeyCartComponentOverride || isAliasOverride) {
const firstArg = node.arguments[0];
if (
firstArg &&
firstArg.type === "Literal" &&
typeof firstArg.value === "string" &&
firstArg.value.startsWith("sw-extension-")
) {
context.report({
node,
message: "Changing the HeyCart Extension Manager is not allowed",
});
}
}
},
};
},
};