56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
|
const require_index = require('../utils/index.js');
|
|
const require_casing = require('../utils/casing.js');
|
|
|
|
//#region lib/rules/no-reserved-props.ts
|
|
var import_utils = /* @__PURE__ */ require_runtime.__toESM(require_index.default);
|
|
const RESERVED = {
|
|
3: ["key", "ref"],
|
|
2: [
|
|
"key",
|
|
"ref",
|
|
"is",
|
|
"slot",
|
|
"slot-scope",
|
|
"slotScope",
|
|
"class",
|
|
"style"
|
|
]
|
|
};
|
|
var no_reserved_props_default = {
|
|
meta: {
|
|
type: "problem",
|
|
docs: {
|
|
description: "disallow reserved names in props",
|
|
categories: ["vue3-essential", "vue2-essential"],
|
|
url: "https://eslint.vuejs.org/rules/no-reserved-props.html",
|
|
defaultOptions: { vue2: [{ vueVersion: 2 }] }
|
|
},
|
|
fixable: null,
|
|
schema: [{
|
|
type: "object",
|
|
properties: { vueVersion: { enum: [2, 3] } },
|
|
additionalProperties: false
|
|
}],
|
|
messages: { reserved: "'{{propName}}' is a reserved attribute and cannot be used as props." }
|
|
},
|
|
create(context) {
|
|
const vueVersion = (context.options[0] || {}).vueVersion || 3;
|
|
const reserved = new Set(RESERVED[vueVersion]);
|
|
function processProps(props) {
|
|
for (const prop of props) if (prop.propName != null && reserved.has(prop.propName)) context.report({
|
|
node: prop.node,
|
|
messageId: `reserved`,
|
|
data: { propName: require_casing.kebabCase(prop.propName) }
|
|
});
|
|
}
|
|
return import_utils.default.compositingVisitors(import_utils.default.defineScriptSetupVisitor(context, { onDefinePropsEnter(_node, props) {
|
|
processProps(props);
|
|
} }), import_utils.default.executeOnVue(context, (obj) => {
|
|
processProps(import_utils.default.getComponentPropsFromOptions(obj));
|
|
}));
|
|
}
|
|
};
|
|
|
|
//#endregion
|
|
exports.default = no_reserved_props_default; |