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/slot-name-casing.ts var import_utils = /* @__PURE__ */ require_runtime.__toESM(require_index.default); /** * Checks whether the given string is a single word. */ function isSingleWord(str) { return /^[a-z]+$/u.test(str); } const allowedCaseOptions = [ "camelCase", "kebab-case", "singleword" ]; var slot_name_casing_default = { meta: { type: "suggestion", docs: { description: "enforce specific casing for slot names", categories: void 0, url: "https://eslint.vuejs.org/rules/slot-name-casing.html" }, fixable: null, schema: [{ enum: allowedCaseOptions }], messages: { invalidCase: "Slot name \"{{name}}\" is not {{caseType}}." } }, create(context) { const option = context.options[0]; const caseType = allowedCaseOptions.includes(option) ? option : "camelCase"; const checker = caseType === "singleword" ? isSingleWord : require_casing.getChecker(caseType); function processSlotNode(node) { const name = node.value?.value; if (name && !checker(name)) context.report({ node, loc: node.loc, messageId: "invalidCase", data: { name, caseType } }); } return import_utils.default.defineTemplateBodyVisitor(context, { "VElement[name='slot']"(node) { const slotName = import_utils.default.getAttribute(node, "name"); if (slotName) processSlotNode(slotName); } }); } }; //#endregion exports.default = slot_name_casing_default;