{"version":3,"file":"tsPreferFunctionType.cjs","names":["iterateJsdoc","parseType","traverse","rewireByParsedType"],"sources":["../../src/rules/tsPreferFunctionType.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n  rewireByParsedType,\n} from '../jsdocUtils.js';\nimport {\n  parse as parseType,\n  traverse,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n  context,\n  indent,\n  jsdoc,\n  utils,\n}) => {\n  const {\n    enableFixer = true,\n  } = context.options[0] || {};\n\n  /**\n   * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n   */\n  const checkType = (tag) => {\n    const potentialType = tag.type;\n\n    /** @type {import('jsdoc-type-pratt-parser').RootResult} */\n    let parsedType;\n    try {\n      parsedType = parseType(\n        /** @type {string} */ (potentialType), 'typescript',\n      );\n    } catch {\n      return;\n    }\n\n    traverse(parsedType, (nde, parentNode) => {\n      // @ts-expect-error Adding our own property for use below\n      nde.parentNode = parentNode;\n    });\n\n    traverse(parsedType, (nde, parentNode, property, index) => {\n      switch (nde.type) {\n        case 'JsdocTypeCallSignature': {\n          const object = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (\n            parentNode\n          );\n          if (typeof index === 'number' && object.elements.length === 1) {\n            utils.reportJSDoc(\n              'Call signature found; function type preferred.',\n              tag,\n              enableFixer ? () => {\n                const func = /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */ ({\n                  arrow: true,\n                  constructor: false,\n                  meta: /** @type {Required<import('jsdoc-type-pratt-parser').MethodSignatureResult['meta']>} */ (\n                    nde.meta\n                  ),\n                  parameters: nde.parameters,\n                  parenthesis: true,\n                  returnType: nde.returnType,\n                  type: 'JsdocTypeFunction',\n                  typeParameters: nde.typeParameters,\n                });\n\n                if (property && 'parentNode' in object && object.parentNode) {\n                  if (typeof object.parentNode === 'object' &&\n                      'elements' in object.parentNode &&\n                      Array.isArray(object.parentNode.elements)\n                  ) {\n                    const idx = object.parentNode.elements.indexOf(object);\n                    object.parentNode.elements[idx] = func;\n                  /* c8 ignore next 6 -- Guard */\n                  } else {\n                    throw new Error(\n                      // @ts-expect-error Ok\n                      `Rule currently unable to handle type ${object.parentNode.type}`,\n                    );\n                  }\n                } else {\n                  parsedType = func;\n                }\n\n                rewireByParsedType(jsdoc, tag, parsedType, indent);\n              } : null,\n            );\n          }\n\n          break;\n        }\n      }\n    });\n  };\n\n  const tags = utils.filterTags(({\n    tag,\n  }) => {\n    return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag));\n  });\n\n  for (const tag of tags) {\n    if (tag.type) {\n      checkType(tag);\n    }\n  }\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Prefers function types over call signatures when there are no other properties.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-prefer-function-type.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          enableFixer: {\n            description: 'Whether to enable the fixer or not',\n            type: 'boolean',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":";;;;;;AAAA;AACA;AAGA;AAG8B;AAAA,iCAEf,IAAAA,qBAAY,EAAC,CAAC;EAC3B,OAAO;EACP,MAAM;EACN,KAAK;EACL;AACF,CAAC,KAAK;EACJ,MAAM;IACJ,WAAW,GAAG;EAChB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;EAE5B;AACF;AACA;EACE,MAAM,SAAS,GAAI,GAAG,IAAK;IACzB,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI;;IAE9B;IACA,IAAI,UAAU;IACd,IAAI;MACF,UAAU,GAAG,IAAAC,mBAAS,EACpB,qBAAuB,aAAa,EAAG,YACzC,CAAC;IACH,CAAC,CAAC,MAAM;MACN;IACF;IAEA,IAAAC,cAAA,QAAQ,EAAC,UAAU,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK;MACxC;MACA,GAAG,CAAC,UAAU,GAAG,UAAU;IAC7B,CAAC,CAAC;IAEF,IAAAA,cAAA,QAAQ,EAAC,UAAU,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,KAAK;MACzD,QAAQ,GAAG,CAAC,IAAI;QACd,KAAK,wBAAwB;UAAE;YAC7B,MAAM,MAAM,GAAG;YACb,UACD;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;cAC7D,KAAK,CAAC,WAAW,CACf,gDAAgD,EAChD,GAAG,EACH,WAAW,GAAG,MAAM;gBAClB,MAAM,IAAI,GAAG,+DAAiE;kBAC5E,KAAK,EAAE,IAAI;kBACX,WAAW,EAAE,KAAK;kBAClB,IAAI,GAAE;kBACJ,GAAG,CAAC,IAAI,CACT;kBACD,UAAU,EAAE,GAAG,CAAC,UAAU;kBAC1B,WAAW,EAAE,IAAI;kBACjB,UAAU,EAAE,GAAG,CAAC,UAAU;kBAC1B,IAAI,EAAE,mBAAmB;kBACzB,cAAc,EAAE,GAAG,CAAC;gBACtB,CAAE;gBAEF,IAAI,QAAQ,IAAI,YAAY,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE;kBAC3D,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IACrC,UAAU,IAAI,MAAM,CAAC,UAAU,IAC/B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC3C;oBACA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;oBACtD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI;oBACxC;kBACA,CAAC,MAAM;oBACL,MAAM,IAAI,KAAK;oBACb;oBACA,wCAAwC,MAAM,CAAC,UAAU,CAAC,IAAI,EAChE,CAAC;kBACH;gBACF,CAAC,MAAM;kBACL,UAAU,GAAG,IAAI;gBACnB;gBAEA,IAAAC,YAAA,kBAAkB,EAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC;cACpD,CAAC,GAAG,IACN,CAAC;YACH;YAEA;UACF;MACF;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B;EACF,CAAC,KAAK;IACJ,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;EACzE,CAAC,CAAC;EAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;IACtB,IAAI,GAAG,CAAC,IAAI,EAAE;MACZ,SAAS,CAAC,GAAG,CAAC;IAChB;EACF;AACF,CAAC,EAAE;EACD,gBAAgB,EAAE,IAAI;EACtB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,iFAAiF;MAC9F,GAAG,EAAE;IACP,CAAC;IACD,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,WAAW,EAAE;UACX,WAAW,EAAE,oCAAoC;UACjD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA","ignoreList":[]}