{"version":3,"file":"rule.group-order-violation.mjs","sources":["../../../../../src/rules/css/grouped-declarations/rule.group-order-violation.ts"],"sourcesContent":["import type { TSESTree } from \"@typescript-eslint/utils\";\nimport type { RuleContext } from \"@typescript-eslint/utils/ts-eslint\";\n\nimport type { Options } from \"./_rule\";\nimport { MessageIds } from \"./_rule\";\nimport { defaultOrder } from \"./config.order\";\nimport type { DeclarationScope } from \"./util.extract-declaration-scopes\";\nimport { findGroupOrderForProperty } from \"./util.find-group-order-for-property\";\nimport { getDeclarationPosition } from \"./util.get-declaration-position\";\n\n/**\n * Verifies all groups in the provided declarationScope and raises errors for\n * all groups that are not in the expected order.\n */\nexport function reportGroupOrderViolations(\n  context: RuleContext<MessageIds, Options>,\n  node: TSESTree.Node,\n  scope: DeclarationScope,\n) {\n  let prevGroupOrderIdent:\n    | \"comment-group\"\n    | \"unordered-group\"\n    | \"ordered-group\"\n    | undefined = undefined;\n  let prevGroupOrderIndex = -1;\n\n  for (const declarationGroup of scope.groups) {\n    // In case the current declaration includes a comment, then it is always\n    // consider 'valid' as they break out of default violation checking.\n    if (!declarationGroup) {\n      continue;\n    }\n\n    let relevantGroupOrderIndex = defaultOrder.findIndex(\n      findGroupOrderForProperty(declarationGroup.declarations[0]?.prop),\n    );\n\n    if (\n      relevantGroupOrderIndex === -1 ||\n      declarationGroup.comments.length > 0\n    ) {\n      relevantGroupOrderIndex = 9999;\n    }\n\n    if (relevantGroupOrderIndex < prevGroupOrderIndex) {\n      const firstDeclaration = declarationGroup.declarations[0];\n      const lastDeclaration = declarationGroup.declarations.at(-1);\n\n      const loc = getDeclarationPosition(\n        node,\n        firstDeclaration,\n        lastDeclaration,\n      );\n\n      if (loc) {\n        context.report({\n          loc,\n          messageId: MessageIds.INVALID_GROUP_ORDER,\n          data: {\n            currentGroup: defaultOrder[relevantGroupOrderIndex],\n            currentGroupIndex: relevantGroupOrderIndex,\n            prevGroup: defaultOrder[prevGroupOrderIndex] ?? prevGroupOrderIdent,\n            prevGroupIndex: prevGroupOrderIndex,\n          },\n        });\n      }\n    }\n\n    prevGroupOrderIndex = Math.max(\n      relevantGroupOrderIndex,\n      prevGroupOrderIndex,\n    );\n    prevGroupOrderIdent =\n      declarationGroup.comments.length > 0\n        ? \"comment-group\"\n        : relevantGroupOrderIndex === 9999\n        ? \"unordered-group\"\n        : \"ordered-group\";\n  }\n}\n"],"names":[],"mappings":";;;;;AAcO,SAAS,0BAAA,CACd,OAAA,EACA,IAAA,EACA,KAAA,EACA;AACA,EAAA,IAAI,mBAAA,GAIY,MAAA;AAChB,EAAA,IAAI,mBAAA,GAAsB,EAAA;AAE1B,EAAA,KAAA,MAAW,gBAAA,IAAoB,MAAM,MAAA,EAAQ;AAG3C,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,0BAA0B,YAAA,CAAa,SAAA;AAAA,MACzC,yBAAA,CAA0B,gBAAA,CAAiB,YAAA,CAAa,CAAC,GAAG,IAAI;AAAA,KAClE;AAEA,IAAA,IACE,uBAAA,KAA4B,EAAA,IAC5B,gBAAA,CAAiB,QAAA,CAAS,SAAS,CAAA,EACnC;AACA,MAAA,uBAAA,GAA0B,IAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,0BAA0B,mBAAA,EAAqB;AACjD,MAAA,MAAM,gBAAA,GAAmB,gBAAA,CAAiB,YAAA,CAAa,CAAC,CAAA;AACxD,MAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,YAAA,CAAa,EAAA,CAAG,EAAE,CAAA;AAE3D,MAAA,MAAM,GAAA,GAAM,sBAAA;AAAA,QACV,IAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,OAAA,CAAQ,MAAA,CAAO;AAAA,UACb,GAAA;AAAA,UACA,WAAW,UAAA,CAAW,mBAAA;AAAA,UACtB,IAAA,EAAM;AAAA,YACJ,YAAA,EAAc,aAAa,uBAAuB,CAAA;AAAA,YAClD,iBAAA,EAAmB,uBAAA;AAAA,YACnB,SAAA,EAAW,YAAA,CAAa,mBAAmB,CAAA,IAAK,mBAAA;AAAA,YAChD,cAAA,EAAgB;AAAA;AAClB,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,mBAAA,GAAsB,IAAA,CAAK,GAAA;AAAA,MACzB,uBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,mBAAA,GACE,iBAAiB,QAAA,CAAS,MAAA,GAAS,IAC/B,eAAA,GACA,uBAAA,KAA4B,OAC5B,iBAAA,GACA,eAAA;AAAA,EACR;AACF;;;;"}