{"version":3,"file":"requireFileOverview.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","defaultTags","file","initialCommentsOnly","mustExist","preventDuplicates","setDefaults","state","globalTags","hasDuplicates","hasTag","hasNonCommentBeforeTag","_default","exports","iterateJsdoc","jsdocNode","utils","context","tags","options","tagName","Object","keys","targetTagName","getPreferredTagName","Boolean","hasDuplicate","hasNonComment","range","exit","entries","obj","getPreferredTagNameObject","reportSettings","replacement","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","patternProperties","type","nonComment","node","module"],"sources":["../../src/rules/requireFileOverview.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst defaultTags = {\n  file: {\n    initialCommentsOnly: true,\n    mustExist: true,\n    preventDuplicates: true,\n  },\n};\n\n/**\n * @param {import('../iterateJsdoc.js').StateObject} state\n * @returns {void}\n */\nconst setDefaults = (state) => {\n  // First iteration\n  if (!state.globalTags) {\n    state.globalTags = {};\n    state.hasDuplicates = {};\n    state.hasTag = {};\n    state.hasNonCommentBeforeTag = {};\n  }\n};\n\nexport default iterateJsdoc(({\n  jsdocNode,\n  state,\n  utils,\n  context,\n}) => {\n  const {\n    tags = defaultTags,\n  } = context.options[0] || {};\n\n  setDefaults(state);\n\n  for (const tagName of Object.keys(tags)) {\n    const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n      tagName,\n    }));\n\n    const hasTag = Boolean(targetTagName && utils.hasTag(targetTagName));\n\n    state.hasTag[tagName] = hasTag || state.hasTag[tagName];\n\n    const hasDuplicate = state.hasDuplicates[tagName];\n\n    if (hasDuplicate === false) {\n      // Was marked before, so if a tag now, is a dupe\n      state.hasDuplicates[tagName] = hasTag;\n    } else if (!hasDuplicate && hasTag) {\n      // No dupes set before, but has first tag, so change state\n      //   from `undefined` to `false` so can detect next time\n      state.hasDuplicates[tagName] = false;\n      state.hasNonCommentBeforeTag[tagName] = state.hasNonComment &&\n        state.hasNonComment < jsdocNode.range[0];\n    }\n  }\n}, {\n  exit ({\n    context,\n    state,\n    utils,\n  }) {\n    setDefaults(state);\n    const {\n      tags = defaultTags,\n    } = context.options[0] || {};\n\n    for (const [\n      tagName,\n      {\n        mustExist = false,\n        preventDuplicates = false,\n        initialCommentsOnly = false,\n      },\n    ] of Object.entries(tags)) {\n      const obj = utils.getPreferredTagNameObject({\n        tagName,\n      });\n      if (obj && typeof obj === 'object' && 'blocked' in obj) {\n        utils.reportSettings(\n          `\\`settings.jsdoc.tagNamePreference\\` cannot block @${obj.tagName} ` +\n          'for the `require-file-overview` rule',\n        );\n      } else {\n        const targetTagName = (\n          obj && typeof obj === 'object' && obj.replacement\n        ) || obj;\n        if (mustExist && !state.hasTag[tagName]) {\n          utils.reportSettings(`Missing @${targetTagName}`);\n        }\n\n        if (preventDuplicates && state.hasDuplicates[tagName]) {\n          utils.reportSettings(\n            `Duplicate @${targetTagName}`,\n          );\n        }\n\n        if (initialCommentsOnly &&\n            state.hasNonCommentBeforeTag[tagName]\n        ) {\n          utils.reportSettings(\n            `@${targetTagName} should be at the beginning of the file`,\n          );\n        }\n      }\n    }\n  },\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-file-overview.md#repos-sticky-header',\n    },\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          tags: {\n            patternProperties: {\n              '.*': {\n                additionalProperties: false,\n                properties: {\n                  initialCommentsOnly: {\n                    type: 'boolean',\n                  },\n                  mustExist: {\n                    type: 'boolean',\n                  },\n                  preventDuplicates: {\n                    type: 'boolean',\n                  },\n                },\n                type: 'object',\n              },\n            },\n            type: 'object',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n  nonComment ({\n    state,\n    node,\n  }) {\n    if (!state.hasNonComment) {\n      state.hasNonComment = node.range[0];\n    }\n  },\n});\n"],"mappings":"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","ignoreList":[]}