{"version":3,"file":"prefer_ecma_privacy.cjs","sources":["../../src/rules/prefer_ecma_privacy.ts"],"sourcesContent":["/**\n * @module @nhtio/eslint-config/rules/prefer_ecma_privacy\n */\n\nimport { createRule } from './common'\n\nimport type { TSESTree } from '@typescript-eslint/utils'\n\ntype NodeWithAccessibility = TSESTree.MethodDefinition | TSESTree.PropertyDefinition\n\nconst preferEcmaPrivacyRule = createRule({\n  name: 'preferEcmaPrivacy',\n  meta: {\n    type: 'suggestion',\n    docs: {\n      description:\n        'Disallow TypeScript `private` modifier; use ECMAScript `#` private fields instead',\n    },\n    hasSuggestions: true,\n    schema: [],\n    messages: {\n      preferEcmaPrivacy:\n        'Use ECMAScript private fields (`#name`) instead of the TypeScript `private` modifier. ' +\n        'The `private` modifier is a compile-time-only annotation and provides no runtime enforcement.',\n      suggestRename:\n        'Rename to `#{{name}}` (you will also need to update all references to this member)',\n    },\n  },\n  create(context) {\n    function checkNode(node: NodeWithAccessibility) {\n      if (node.accessibility !== 'private') return\n\n      const memberNode = node.key\n      const name = memberNode.type === 'Identifier' ? memberNode.name : null\n\n      context.report({\n        node,\n        messageId: 'preferEcmaPrivacy',\n        suggest: name\n          ? [\n              {\n                messageId: 'suggestRename',\n                data: { name },\n                fix(fixer) {\n                  const fixes = []\n                  const sourceCode = context.sourceCode\n                  const privateToken = sourceCode.getFirstToken(node, (t) => t.value === 'private')\n                  if (privateToken) {\n                    fixes.push(\n                      fixer.removeRange([privateToken.range[0], privateToken.range[1] + 1])\n                    )\n                  }\n                  fixes.push(fixer.insertTextBefore(memberNode, '#'))\n                  return fixes\n                },\n              },\n            ]\n          : [],\n      })\n    }\n\n    return {\n      MethodDefinition: checkNode,\n      PropertyDefinition: checkNode,\n    }\n  },\n  defaultOptions: [],\n})\n\nexport default preferEcmaPrivacyRule\n"],"names":["preferEcmaPrivacyRule","createRule","context","checkNode","node","memberNode","name","fixer","fixes","privateToken","t"],"mappings":"qJAUMA,EAAwBC,EAAAA,WAAW,CACvC,KAAM,oBACN,KAAM,CACJ,KAAM,aACN,KAAM,CACJ,YACE,mFAAA,EAEJ,eAAgB,GAChB,OAAQ,CAAA,EACR,SAAU,CACR,kBACE,sLAEF,cACE,oFAAA,CACJ,EAEF,OAAOC,EAAS,CACd,SAASC,EAAUC,EAA6B,CAC9C,GAAIA,EAAK,gBAAkB,UAAW,OAEtC,MAAMC,EAAaD,EAAK,IAClBE,EAAOD,EAAW,OAAS,aAAeA,EAAW,KAAO,KAElEH,EAAQ,OAAO,CACb,KAAAE,EACA,UAAW,oBACX,QAASE,EACL,CACE,CACE,UAAW,gBACX,KAAM,CAAE,KAAAA,CAAA,EACR,IAAIC,EAAO,CACT,MAAMC,EAAQ,CAAA,EAERC,EADaP,EAAQ,WACK,cAAcE,EAAOM,GAAMA,EAAE,QAAU,SAAS,EAChF,OAAID,GACFD,EAAM,KACJD,EAAM,YAAY,CAACE,EAAa,MAAM,CAAC,EAAGA,EAAa,MAAM,CAAC,EAAI,CAAC,CAAC,CAAA,EAGxED,EAAM,KAAKD,EAAM,iBAAiBF,EAAY,GAAG,CAAC,EAC3CG,CACT,CAAA,CACF,EAEF,CAAA,CAAC,CACN,CACH,CAEA,MAAO,CACL,iBAAkBL,EAClB,mBAAoBA,CAAA,CAExB,EACA,eAAgB,CAAA,CAClB,CAAC"}