{"version":3,"file":"tsNoUnnecessaryTemplateExpression.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdocUtils","_jsdoccomment","e","__esModule","default","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","utils","mode","enableFixer","options","checkType","tag","potentialType","type","parsedType","parseType","traverse","nde","parentNode","property","index","stringInterpolationIndex","interpolations","findIndex","interpolation","reportJSDoc","literals","splice","value","rewireByParsedType","length","tags","filterTags","Boolean","tagMightHaveTypePosition","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","module"],"sources":["../../src/rules/tsNoUnnecessaryTemplateExpression.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  settings,\n  utils,\n}) => {\n  if (settings.mode !== 'typescript') {\n    return;\n  }\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    /** @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, property, index) => {\n      switch (nde.type) {\n        case 'JsdocTypeTemplateLiteral': {\n          const stringInterpolationIndex = nde.interpolations.findIndex((interpolation) => {\n            return interpolation.type === 'JsdocTypeStringValue';\n          });\n          if (stringInterpolationIndex > -1) {\n            utils.reportJSDoc(\n              'Found an unnecessary string literal within a template.',\n              tag,\n              enableFixer ? () => {\n                nde.literals.splice(\n                  stringInterpolationIndex,\n                  2,\n                  nde.literals[stringInterpolationIndex] +\n                    /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */\n                    (nde.interpolations[stringInterpolationIndex]).value +\n                    nde.literals[stringInterpolationIndex + 1],\n                );\n\n                nde.interpolations.splice(\n                  stringInterpolationIndex, 1,\n                );\n\n                rewireByParsedType(jsdoc, tag, parsedType, indent);\n              } : null,\n            );\n          } else if (nde.literals.length === 2 && nde.literals[0] === '' &&\n            nde.literals[1] === ''\n          ) {\n            utils.reportJSDoc(\n              'Found a lone template expression within a template.',\n              tag,\n              enableFixer ? () => {\n                const interpolation = nde.interpolations[0];\n\n                if (parentNode && property) {\n                  if (typeof index === 'number') {\n                    // @ts-expect-error Safe\n                    parentNode[property][index] = interpolation;\n                  } else {\n                    // @ts-expect-error Safe\n                    parentNode[property] = interpolation;\n                  }\n                } else {\n                  parsedType = interpolation;\n                }\n\n                rewireByParsedType(jsdoc, tag, parsedType, indent);\n              } : null,\n            );\n          }\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: 'Catches unnecessary template expressions such as string expressions within a template literal.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-no-unnecessary-template-expression.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. Defaults to `true`.',\n            type: 'boolean',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAGA,IAAAE,aAAA,GAAAF,OAAA;AAG8B,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAEf,IAAAG,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,MAAM;EACNC,KAAK;EACLC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,IAAID,QAAQ,CAACE,IAAI,KAAK,YAAY,EAAE;IAClC;EACF;EAEA,MAAM;IACJC,WAAW,GAAG;EAChB,CAAC,GAAGN,OAAO,CAACO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;EAE5B;AACF;AACA;EACE,MAAMC,SAAS,GAAIC,GAAG,IAAK;IACzB,MAAMC,aAAa,GAAGD,GAAG,CAACE,IAAI;IAC9B;IACA,IAAIC,UAAU;IACd,IAAI;MACFA,UAAU,GAAG,IAAAC,mBAAS,EACpB,qBAAuBH,aAAa,EAAG,YACzC,CAAC;IACH,CAAC,CAAC,MAAM;MACN;IACF;IAEA,IAAAI,sBAAQ,EAACF,UAAU,EAAE,CAACG,GAAG,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,KAAK,KAAK;MACzD,QAAQH,GAAG,CAACJ,IAAI;QACd,KAAK,0BAA0B;UAAE;YAC/B,MAAMQ,wBAAwB,GAAGJ,GAAG,CAACK,cAAc,CAACC,SAAS,CAAEC,aAAa,IAAK;cAC/E,OAAOA,aAAa,CAACX,IAAI,KAAK,sBAAsB;YACtD,CAAC,CAAC;YACF,IAAIQ,wBAAwB,GAAG,CAAC,CAAC,EAAE;cACjCf,KAAK,CAACmB,WAAW,CACf,wDAAwD,EACxDd,GAAG,EACHH,WAAW,GAAG,MAAM;gBAClBS,GAAG,CAACS,QAAQ,CAACC,MAAM,CACjBN,wBAAwB,EACxB,CAAC,EACDJ,GAAG,CAACS,QAAQ,CAACL,wBAAwB,CAAC,GACpC;gBACCJ,GAAG,CAACK,cAAc,CAACD,wBAAwB,CAAC,CAAEO,KAAK,GACpDX,GAAG,CAACS,QAAQ,CAACL,wBAAwB,GAAG,CAAC,CAC7C,CAAC;gBAEDJ,GAAG,CAACK,cAAc,CAACK,MAAM,CACvBN,wBAAwB,EAAE,CAC5B,CAAC;gBAED,IAAAQ,8BAAkB,EAACzB,KAAK,EAAEO,GAAG,EAAEG,UAAU,EAAEX,MAAM,CAAC;cACpD,CAAC,GAAG,IACN,CAAC;YACH,CAAC,MAAM,IAAIc,GAAG,CAACS,QAAQ,CAACI,MAAM,KAAK,CAAC,IAAIb,GAAG,CAACS,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,IAC5DT,GAAG,CAACS,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EACtB;cACApB,KAAK,CAACmB,WAAW,CACf,qDAAqD,EACrDd,GAAG,EACHH,WAAW,GAAG,MAAM;gBAClB,MAAMgB,aAAa,GAAGP,GAAG,CAACK,cAAc,CAAC,CAAC,CAAC;gBAE3C,IAAIJ,UAAU,IAAIC,QAAQ,EAAE;kBAC1B,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;oBAC7B;oBACAF,UAAU,CAACC,QAAQ,CAAC,CAACC,KAAK,CAAC,GAAGI,aAAa;kBAC7C,CAAC,MAAM;oBACL;oBACAN,UAAU,CAACC,QAAQ,CAAC,GAAGK,aAAa;kBACtC;gBACF,CAAC,MAAM;kBACLV,UAAU,GAAGU,aAAa;gBAC5B;gBAEA,IAAAK,8BAAkB,EAACzB,KAAK,EAAEO,GAAG,EAAEG,UAAU,EAAEX,MAAM,CAAC;cACpD,CAAC,GAAG,IACN,CAAC;YACH;UACF;MACF;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAM4B,IAAI,GAAGzB,KAAK,CAAC0B,UAAU,CAAC,CAAC;IAC7BrB;EACF,CAAC,KAAK;IACJ,OAAOsB,OAAO,CAACtB,GAAG,KAAK,QAAQ,IAAIL,KAAK,CAAC4B,wBAAwB,CAACvB,GAAG,CAAC,CAAC;EACzE,CAAC,CAAC;EAEF,KAAK,MAAMA,GAAG,IAAIoB,IAAI,EAAE;IACtB,IAAIpB,GAAG,CAACE,IAAI,EAAE;MACZH,SAAS,CAACC,GAAG,CAAC;IAChB;EACF;AACF,CAAC,EAAE;EACDwB,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,gGAAgG;MAC7GC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVnC,WAAW,EAAE;UACX8B,WAAW,EAAE,kDAAkD;UAC/DzB,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA+B,MAAA,CAAA5C,OAAA,GAAAA,OAAA,CAAAF,OAAA","ignoreList":[]}