"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const validatePropertyNames = (targetTagName, jsdoc, jsdocNode, utils) => { const propertyTags = Object.entries(jsdoc.tags).filter(([, tag]) => { return tag.tag === targetTagName; }); return propertyTags.some(([, tag], index) => { let tagsIndex; const dupeTagInfo = propertyTags.find(([tgsIndex, tg], idx) => { tagsIndex = tgsIndex; return tg.name === tag.name && idx !== index; }); if (dupeTagInfo) { utils.reportJSDoc(`Duplicate @${targetTagName} "${tag.name}"`, dupeTagInfo[1], () => { jsdoc.tags.splice(tagsIndex, 1); }); return true; } return false; }); }; const validatePropertyNamesDeep = (targetTagName, jsdocPropertyNames, jsdoc, report) => { let lastRealProperty; return jsdocPropertyNames.some(({ name: jsdocPropertyName, idx }) => { const isPropertyPath = jsdocPropertyName.includes('.'); if (isPropertyPath) { if (!lastRealProperty) { report(`@${targetTagName} path declaration ("${jsdocPropertyName}") appears before any real property.`, null, jsdoc.tags[idx]); return true; } let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.')); if (pathRootNodeName.endsWith('[]')) { pathRootNodeName = pathRootNodeName.slice(0, -2); } if (pathRootNodeName !== lastRealProperty) { report(`@${targetTagName} path declaration ("${jsdocPropertyName}") root node name ("${pathRootNodeName}") ` + `does not match previous real property name ("${lastRealProperty}").`, null, jsdoc.tags[idx]); return true; } } else { lastRealProperty = jsdocPropertyName; } return false; }); }; var _default = (0, _iterateJsdoc.default)(({ jsdoc, jsdocNode, report, utils }) => { const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property'); if (!jsdocPropertyNamesDeep.length) { return; } const targetTagName = utils.getPreferredTagName({ tagName: 'property' }); const isError = validatePropertyNames(targetTagName, jsdoc, jsdocNode, utils); if (isError) { return; } validatePropertyNamesDeep(targetTagName, jsdocPropertyNamesDeep, jsdoc, report); }, { iterateAllJsdocs: true, meta: { fixable: 'code', type: 'suggestion' } }); exports.default = _default; module.exports = exports.default; //# sourceMappingURL=checkPropertyNames.js.map