{"_id":"@aemforms/eslint-plugin","_rev":"25-0fba568b25764cd5f84b8591e767c792","name":"@aemforms/eslint-plugin","dist-tags":{"latest":"1.0.24"},"versions":{"1.0.0":{"name":"@aemforms/eslint-plugin","version":"1.0.0","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.0","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"2e8989e63476982e21b13d59547e9f0f5a031023","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.0.tgz","fileCount":4,"integrity":"sha512-vlATW8twTEz4/eTF9AGFWLJhVFe1KPDhOXO+YpYvSEdPD0hmc2vbqCJbPYlh32yBd0/K3959qCu0bwrfxgsFEA==","signatures":[{"sig":"MEYCIQDxkvQZVBBz1h8yiH+i8KSbQROV6blgN49av6Z7RkFFGQIhANpVvb2V5FiqJDy2wEOM0+ppYTkhUqhZuIkwj+lMvG7P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3935957},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"42dfa4c9a3a8a5b8f150190a7c882ce261664daa","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.0_1784797294844_0.1166316180639353","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aemforms/eslint-plugin","version":"1.0.1","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.1","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"8418cb5818e4d549eab8c2a4e5fd85284a4751e3","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.1.tgz","fileCount":5,"integrity":"sha512-Dv6iXTyW4s2zx1G7JLShehN1bkYVYRGtwzGuwrmNn4TKicbc3eNTSZJm3GJatG5puE4do3bmfFHyHYvmc+Oo+Q==","signatures":[{"sig":"MEYCIQDBuG5VCE1Fyy1z6yM/HBvdlLdguC1xgXSo+lTY0ShBhwIhAL+U8F1XPkfCFAL0fJIQGHAFjpKVPwAJb1aPNMD0XYAz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3946341},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"8e1f617ea7f12495b0f5daea93a7e92d40b29be1","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.1_1784797750403_0.29220413463123873","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aemforms/eslint-plugin","version":"1.0.2","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.2","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"130ee39aba135cc5baba79c7fa393c18392a8fa6","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.2.tgz","fileCount":5,"integrity":"sha512-nzzqDdZKuwFznhKuh/zwUyI/IoVtVl5uThSNyDYFDbarsxdBns5m6rVAuK4bzAbanHnXZlNlkOuPgyhDS+dokQ==","signatures":[{"sig":"MEYCIQD6DQY3aFISpA+TNiEvFdbpUdixseYwBKoCMNt7w1lDfwIhAOK9MgdQ923EKRSxtkupTtComPMt4vQV4gH+geT+9iZb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3960664},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"c5aea5ca1ad16443420dbc0bd96bc1a678e99e1a","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.2_1784804140473_0.5409948533429203","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aemforms/eslint-plugin","version":"1.0.3","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.3","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"92e4a9f066e450bf9230bdc7d4068ff85464f170","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.3.tgz","fileCount":5,"integrity":"sha512-vYsa2D5w5q1wVZaWpHsGhuDCyo1UwzZNQxJCm3sPNRfWOydXr5C2Xq+vSYd3qtWMJsMplFCySPoIzRMtcsNn6A==","signatures":[{"sig":"MEUCIG5koTmeP4PIeZLZvWjOqwIcxzuun47iy5mJ3Og+t8/+AiEA2i3tGNtyadI+6rR0ODNASru5zrnoaQbaWw/BxA4sQZc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3961579},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"4d6df6668b83281b44690249619bb2506ec8797d","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.3_1784806455816_0.6618346679231983","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aemforms/eslint-plugin","version":"1.0.4","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.4","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"3dec225eab767defcb04f81ed5349ddef6baad64","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.4.tgz","fileCount":5,"integrity":"sha512-bpWFhpjq30ySVZzeILCJIk0rZMkrDRdEm0vG2ti+jJu2Qn2aLyAfLalLK9uiXCJyGMamW74WFkMbLneQEEvLIA==","signatures":[{"sig":"MEQCIEBUfX13Zd9sLA8dR7tib669/1t9DVIMVVV60G38ZcyVAiBHFiQvgaZmIa1FKK6cs1ScGPq/OhwnHHqmlwnA66/Vvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3962071},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"39fa555ab1d453d14bf8b0e5440327f7e8828f2f","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.4_1784822688376_0.790718320805698","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@aemforms/eslint-plugin","version":"1.0.5","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.5","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"17bb881eb1702a9eeb0efedb71b84df111622e98","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.5.tgz","fileCount":5,"integrity":"sha512-m5Tm/AMEbOZZNxbgvAzWxLNDF48t+/1agTLV6l6yEK+ynzk/5PCNps7RtopOj/eSRn1i4KAYJF0RuGXuRi4aFw==","signatures":[{"sig":"MEUCIQDtkvCr8Mb2Wai+VgjkSCRujk8Ya9SNu5EdEdFn4kLYNAIgRsKeT/POInDVquooNZrrOZdisTaBnLFMXdnaMx7rBYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3962071},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"76078631c01ae6c8d7db15eeaa7806aba7a2a1ca","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.5_1784829784871_0.6347546968880569","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aemforms/eslint-plugin","version":"1.0.6","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.6","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"c1a906fa8c53a3ccf8237c21f6ae6763fbeb7a54","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.6.tgz","fileCount":5,"integrity":"sha512-fZMH7raycaBF9tdXeq3cMW5NWtCfc9kCk+dnTyqW+CugA2SZ4O+XmpZOPjtauXRf2WBuiU2whuh2Wue/9ov2mg==","signatures":[{"sig":"MEUCIQCTIJGuvXzHoP3kwnVB7qQehzVU3dmPNWOLbw552CtDlAIgKz8fX6zTcgsUpGxBc1K8bUV5+1TVZ3KPwsHaX0zq27k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3963851},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"2b5969437c802c70b7c2d8bf53c99a332ea24432","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.6_1784866116361_0.26849540787542536","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@aemforms/eslint-plugin","version":"1.0.7","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.7","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"3e8dd131446f92792fdc91c8e3cedf0bde7467b5","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.7.tgz","fileCount":5,"integrity":"sha512-Nxh2IXI69rXDFH3LgT22ca6te1sRgsTr+Wg9u7dCiBlScPX8nYVBfX9bA0XFKxXDwQedUYmPyfTKRfLcCVPxsA==","signatures":[{"sig":"MEUCIQDKNCnL1Pg50bAzhJlvA8RR27U2uMtscgxqt+fqUEWiqQIgTmtqqUYMAJ6RAWTF3Fzab+Q+yVVTpEm7Ni2XGgx6RGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3965673},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"90a02b715503ba90818b2f73209ae4b924a4624e","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.7_1784875051792_0.9346697457016524","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@aemforms/eslint-plugin","version":"1.0.8","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.8","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"d287a110c5d7a21efb405563c2f780059883ea52","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.8.tgz","fileCount":5,"integrity":"sha512-couzlG5lKzGTrH8i37Y7hPxZEqV25kuEWEEIahylI3mENbCHE4KfIBgMyHCIp0cNrKgBHakdtfih7hZzBAgMFg==","signatures":[{"sig":"MEYCIQDJy7mdaX0V+lPoLbbwg0tDWyUivNRDMv+oaKBnvM8n7AIhAK/p03pf3SCHWbEPHTsKKew2F76hu9ti5zHnz6+CyiEK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3967168},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"452dad9b436f8cf3cdc77030fd09f4d884075cca","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.8_1784893877205_0.8934275901603443","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@aemforms/eslint-plugin","version":"1.0.9","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.9","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"446804adaa91d06272d46d2b53c78e942e25a066","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.9.tgz","fileCount":5,"integrity":"sha512-keby2C3ny/pXsLJGR4R3zbGxCC4tlqtfVhHhq5Lju0t14MDefzLEPr7ok4F8XSHtpAWrQsIdIRmsC+NhhB2A8g==","signatures":[{"sig":"MEUCIQDCU5hTP1PX5fKf52P78GDIawwrdypLRkWZCML9hNu/0gIgMwUM5x8J6z4iDJHEej+dQBp2b0H9tW0AzRA0f9rRcJ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3964894},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"ae8b109495a1b1515a66129781cfe3032c131f04","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.9_1784958494829_0.21910313280001215","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@aemforms/eslint-plugin","version":"1.0.10","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.10","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"cd5c60cd0de88ada979f781a65a7c39a58f204b7","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.10.tgz","fileCount":5,"integrity":"sha512-l2SpjRnQ+vcDa/t3dziAczLBwo8TH2UWuYbTMHXUEyX4xKOeKmAV1MbrHWyRPaA2+5I3ZXSEbzru9iej5T6ihw==","signatures":[{"sig":"MEUCIH2OHEZ5UvhZkNf6Jpa1P62gPJXMir/bX1kLv0GLqO9LAiEAq9EA0fbkQiNKHsO/fTCjrLsVMrmD922b2qnfXrHrFHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3964895},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"52f7556c7a205238ec4dc07ee544975259730554","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.10_1784964881109_0.3863902514282065","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@aemforms/eslint-plugin","version":"1.0.11","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.11","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"28a0ec2229f0147860fcab8dce55fa5603bca956","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.11.tgz","fileCount":5,"integrity":"sha512-mOISvc/e3pc+JabE0yjjvhHGLBfN5KePySLEfrJtumncNjZ3b/U8FLzTw6seammry+GhV5PYJrfsxaoXdPtufg==","signatures":[{"sig":"MEQCID6IdEnZba7HUsoAjPPypZWxC9nlTU1mHl5Sa3A02jn0AiA3U31FrDUW27lHoqfErtYGvgVDBgmvlHjTJh3LYp+wyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3978579},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"1e934b0ec1fbd9479896793feba034988189e4de","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.11_1785170607706_0.7679323680253143","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@aemforms/eslint-plugin","version":"1.0.12","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.12","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"7ec60e0c9244c2d15a8a7d3910094a08bd0f21a6","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.12.tgz","fileCount":5,"integrity":"sha512-xnUGnBrKu+r9fScnpxThfTtKa1wNITu9iLNnoWi8Zmc/yJBtpLtKY1REbRgZVbN9MXQ7+o9HYsd63sFXnNHoTQ==","signatures":[{"sig":"MEYCIQDhf2nYFzBvR6cgUMG+Hn7GDPzij+HkQkNuXFGFE3zynAIhAPe/4TZBP2o0ilVLtFMDKew05mgkbq4GgqBgM72cZ+bH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3983740},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"64975c2139c5fea077a8fdea7e2c76ff493005b1","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.12_1785220647215_0.5169856417350163","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@aemforms/eslint-plugin","version":"1.0.13","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.13","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"b1dcdf3808b804f8514814d0f541efe200e4ccae","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.13.tgz","fileCount":5,"integrity":"sha512-aaQfd1DOevebTMI0MdNZ8zxGvxa/Ki6qi2I8bkJpv5IA5juc371x8sH8at9PHCJzXDAbPGt5fP/da6eDtR+FPg==","signatures":[{"sig":"MEQCICZ5AwDsjV/gwwG25Q0isW0e8+szlOSG06vC0xeoTOu8AiB2NYHCLm0U56uEDeuHGsDjbqHQ1OTry+QriB4dWYS6hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3987629},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"b66d2e2ed78473d599210c561d416fca67c1e889","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.13_1785304268827_0.8307168825174711","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@aemforms/eslint-plugin","version":"1.0.14","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.14","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"d811697a9e3f3c71af9cdcfe4977191b18b34969","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.14.tgz","fileCount":5,"integrity":"sha512-0+9Dn7vt8Nttjt3nrVV3yCYelkApBc/FDuERO5VD5/4WivpZYfb+KV9nwNfWvJ4pyLHSuoAuMehTZ7QjuFEAHA==","signatures":[{"sig":"MEUCIQCBddOdOGVBRv9W/pR1+0HJWyLwREafWqHNe+GTnm6SFgIgPmyUnCM7nPy7UXqoc1WJnGQi1JV6MHLrvwS3mmlnkfs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3987629},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"c7ec485213cec7110d2f07fb6fd271dbeaa26c4e","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.14_1785317196105_0.5583171591585581","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@aemforms/eslint-plugin","version":"1.0.15","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.15","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"67b465a2d37de7410af17947a9d7f80f5b13c658","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.15.tgz","fileCount":5,"integrity":"sha512-ST90KQUOfkOLK4Ce9ytlvv0LQfOUruihV7rblXlF9A/BPksB05e/wfkrBoz34L/9DY+znCnBUymQhS+haMfwwA==","signatures":[{"sig":"MEUCIH5/mLZHNMzW5kBTSM6YA0hiKluftrzMvIwB5bYk+r5qAiEAx8VtI9uRqSwuQypVU53QPpUbQ8Z/fptGBP4+/+Iz/BE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3989524},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"0a620a18b4faa18fbf7a23bac3b6afb97603d28b","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.15_1785480713515_0.6017551894872857","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"@aemforms/eslint-plugin","version":"1.0.16","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.16","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"77698191e8d760cdedc80b5802064a9fc97bd0be","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.16.tgz","fileCount":5,"integrity":"sha512-ynxa5LQ1jBO3l1ubsSBKI8AFmpvJSEOC7CqfGpzZOPnNH5r0iD/dIpFq1USsHHhcHnPF2/6Cuno+0n1HjnsGAg==","signatures":[{"sig":"MEUCIHbHy95aEQhSArnYs9XJqfJOej+8M7nf4IZiTS8BH19jAiEAi4db8DtA6TdemOJEV8MnqoN9qg1icZEiZj4DzHKUjRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4518613},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"3fa805780958910b059f4cb2cd2d128a7f8fcdee","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.16_1785844646509_0.9490837830755325","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"@aemforms/eslint-plugin","version":"1.0.17","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.17","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"e3984b19be0359f97c7515b6cf608ddb495fe6cf","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.17.tgz","fileCount":5,"integrity":"sha512-MTRsjVImRHowj0+DfHfGD/Zcz5Ffd3hs18UFAvOXvz2CVp82Svu1lPHK2hK69kTs+3+KI76ppfO3XhB/oLqfeg==","signatures":[{"sig":"MEUCIHnRxj+wEDiBpQYZiXYo+itGmHunhYdal/BRyGJDbyO+AiEAjIP4+FLjo8iD17nVDeMPqNsdfWQ3BoAZ+yllIym7rOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4527293},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"4762cc01ecf42269fec48c5e29e90d6a3cbd8e11","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.17_1785857364486_0.17021005881270912","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"@aemforms/eslint-plugin","version":"1.0.18","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.18","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"8caa25afe719ab2ca53e337fc4f7145a785c27dd","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.18.tgz","fileCount":5,"integrity":"sha512-jrB629qVT9toKiA7qECQHiKvJFpAtts//2TGX6/Crg0fv8gt0IW2dkMMWmjZpnaZnpWH/6JA8J0YP3Wb2Qtc8g==","signatures":[{"sig":"MEUCIQCO3/QS9wKfU4clXNrZ8q66IsaiomGULA9FLuypCxYvnQIgUZviAOtHsCJbwm/nwiCuYQhbqf0XIjRZsMvWTSQyI68=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4531683},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"8f351413b00cbb3e777b772de98b80b6d7198a83","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.18_1785861993477_0.14698903532163876","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"@aemforms/eslint-plugin","version":"1.0.19","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.19","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"ef564680866c37226eed4ab3502e543e8b86f21d","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.19.tgz","fileCount":5,"integrity":"sha512-+ZFFMN8qK636euIj70eBB3uF47fv9kVhT6njYO+RCSjdnPVCJ5+4Uzg+Hva1vdNwXe4JUUKQQVHdvmuU3M0WYA==","signatures":[{"sig":"MEUCIGT2gUD5zaP6Vb7cnrYHOMd9C2MVNmG1d8KBEvttUwWBAiEAt3cxpmAuVUidHDrG0ZVfP+V7+qjNLVRknzZy76mXry4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4535704},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"a15b7b3afdba76655e080d13e060c857bf84830f","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.19_1785864250812_0.7636568243096724","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"@aemforms/eslint-plugin","version":"1.0.20","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.20","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"46a8898905b00afc5770936aa73c9aec7a419725","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.20.tgz","fileCount":5,"integrity":"sha512-a7JQ/DVpvkw1pbpz+Zwtpn3JJel0sN0oT7CyuqDmabyqRteuVe2lfMPzx9jMfTWo7UVinInRCETFzQtmKKpQOQ==","signatures":[{"sig":"MEUCIEtM1qZ4kTSnaVKTELjUoYzAnLbodC3m7fg+KXOFEpPcAiEAhJmc3vLDl/czhNfGJ0wz02Mdvgc+5iSy0C6xzBttYcU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4538048},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"cbc4e024c66d18727604e993dd10b29693746448","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.20_1785924379487_0.1023769603215321","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"@aemforms/eslint-plugin","version":"1.0.21","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.21","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"1bc663ccb02a89c4aa5efeb57c2cc04a9c64a6ab","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.21.tgz","fileCount":5,"integrity":"sha512-q1mXGkCsOwuTaK8IY2HHRDToTOe9O5rQN0aG94aU0//6933sy/sh0IbvhYu/1O4N+bduUm9mz5La6GFJ5wsz2A==","signatures":[{"sig":"MEYCIQDWP+MWbpJHYB4QtsV3+1JbkVeGDHAcILxq6ALJ8bbpRwIhAMVFb2ywv1jYz4v0YZUDFFHhys0f05odUYCRMGYxUoVf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4564277},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"4eb5b6e0b4cfa092444ebd43186977dde333b4e3","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.21_1786017466569_0.8072639408976017","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"@aemforms/eslint-plugin","version":"1.0.22","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.22","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"ab91171cd375cf6a73efc0f695dd629d2a642180","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.22.tgz","fileCount":5,"integrity":"sha512-dCXJcpRVmKbPUXnpisWSZ2HCedN9asVr3q15JyxBUR1jOda6tQ3kIav7boMCl7wLZFaIl/cSZDwaxqyyLAT8wg==","signatures":[{"sig":"MEQCIHdmfKF5t8XVrM+mqEDFrYJ7F/Nc0bGTCk3SI8cUxpTaAiBJLAVr2XfVLbaX70cEhC/MKsJTjFtIZ95XCgSg+cFTxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4568406},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"bb7bb51d14475bd0423a6fe9352f3c81fc35094d","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.22_1786023432996_0.19827362719533537","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"@aemforms/eslint-plugin","version":"1.0.23","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.23","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"dist":{"shasum":"fe3ed7e1f6ea53f5d39581bf053deccd2d6aadf5","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.23.tgz","fileCount":5,"integrity":"sha512-6qGB1nmjTWTWs7gLrHXi17k4i1EeMD5EmYCDDrsXOJoeCGFwizvxqNeoRRdB70IXzTJQ1FGaAatNmgMcV+0/6w==","signatures":[{"sig":"MEUCICZdHKZW6yeo5rLoF3ritsabc7vpCBoQQA5qwZpL6zMUAiEA1nzG8ckpKZKXb7SLpo2VQuLRHPg6zKZYTbRU8uxueMI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4576132},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"166441b59b64b7781bc0cbe1920afa67e5737a67","_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"repository":{"url":"git+https://github.com/adobe-aem-forms/performance-bot.git","type":"git","directory":"eslint-plugin"},"_npmVersion":"10.8.2","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin_1.0.23_1786025513288_0.7163743783369956","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"@aemforms/eslint-plugin","version":"1.0.24","description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","type":"module","main":"dist/index.js","exports":{".":"./dist/index.js"},"keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"peerDependencies":{"eslint":">=8.57.0"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/adobe-aem-forms/performance-bot.git","directory":"eslint-plugin"},"license":"MIT","_id":"@aemforms/eslint-plugin@1.0.24","gitHead":"f6c3d2e3c9e65c73eae80daf5a8838e46ac7f0f9","bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-iUCtWTbzr4tfWd6xMM7mVzuzgYV0M/3hQai5i6XjMi4XkBr6E4ZUCkZPqBtjfQeAd+iwIkMmKk/vXZd6YOn82A==","shasum":"c51d33579117b525ba7d99c4efc9fbc87f3b8a08","tarball":"https://registry.npmjs.org/@aemforms/eslint-plugin/-/eslint-plugin-1.0.24.tgz","fileCount":5,"unpackedSize":4584120,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCOoFJJ45Ck4aHhhEmYRk+llNvx/X2NqqGuu6T4TNHbdwIgfPxxU/pbS9r7H8FkD6U/Ag78ps+M4WzQu53mlu5+Byc="}]},"_npmUser":{"name":"rismehta","email":"rismehta@adobe.com"},"directories":{},"maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin_1.0.24_1786442007276_0.19821738457211735"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-23T09:01:34.685Z","modified":"2026-08-11T09:53:27.698Z","1.0.0":"2026-07-23T09:01:35.008Z","1.0.1":"2026-07-23T09:09:10.556Z","1.0.2":"2026-07-23T10:55:40.689Z","1.0.3":"2026-07-23T11:34:15.968Z","1.0.4":"2026-07-23T16:04:48.554Z","1.0.5":"2026-07-23T18:03:05.046Z","1.0.6":"2026-07-24T04:08:36.506Z","1.0.7":"2026-07-24T06:37:32.004Z","1.0.8":"2026-07-24T11:51:17.356Z","1.0.9":"2026-07-25T05:48:14.997Z","1.0.10":"2026-07-25T07:34:41.308Z","1.0.11":"2026-07-27T16:43:27.873Z","1.0.12":"2026-07-28T06:37:27.380Z","1.0.13":"2026-07-29T05:51:09.056Z","1.0.14":"2026-07-29T09:26:36.324Z","1.0.15":"2026-07-31T06:51:53.690Z","1.0.16":"2026-08-04T11:57:26.715Z","1.0.17":"2026-08-04T15:29:24.661Z","1.0.18":"2026-08-04T16:46:33.690Z","1.0.19":"2026-08-04T17:24:11.041Z","1.0.20":"2026-08-05T10:06:19.666Z","1.0.21":"2026-08-06T11:57:46.956Z","1.0.22":"2026-08-06T13:37:13.192Z","1.0.23":"2026-08-06T14:11:53.488Z","1.0.24":"2026-08-11T09:53:27.449Z"},"bugs":{"url":"https://github.com/adobe-aem-forms/performance-bot/issues"},"license":"MIT","homepage":"https://github.com/adobe-aem-forms/performance-bot#readme","keywords":["eslint","eslintplugin","aem","adaptive-forms","design-canon"],"repository":{"type":"git","url":"git+https://github.com/adobe-aem-forms/performance-bot.git","directory":"eslint-plugin"},"description":"ESLint rules for AEM Adaptive Forms design-canon + correctness checks — the JS-anchored subset of performance-bot's analyzers, sharing its matcher modules.","maintainers":[{"name":"vdua","email":"vdua@adobe.com"},{"name":"salilt","email":"salilt@adobe.com"},{"name":"rismehta","email":"rismehta@adobe.com"},{"name":"nitigupt","email":"niting.iitr@gmail.com"},{"name":"cqguides","email":"arnjain@adobe.com"},{"name":"jalagari","email":"vijju311985@gmail.com"},{"name":"syamavarma","email":"syr@adobe.com"}],"readme":"# @aemforms/eslint-plugin\n\nESLint rules for **AEM Adaptive Forms** — they catch the mistakes in form JavaScript that cause\nruntime bugs, broken reuse, and data loss on resume, right in your editor and in CI.\n\nThey also make **AI-assisted development safer**: these rules encode the AEM Forms patterns that code\ngeneration most often gets wrong — async ordering, reusable-fragment scoping, and putting logic in\ncode that belongs in the form model — so AI-written custom functions and rules are correct by\nconstruction, not just plausible-looking.\n\n## Install\n\n```bash\nnpm i -D @aemforms/eslint-plugin eslint\n```\n\n```js\n// eslint.config.js  (flat config, ESLint 9 / 8.57+)\nimport aemForms from '@aemforms/eslint-plugin';\n\nexport default [\n  aemForms.configs.recommended,\n  // A few rules also cross-check your form's JSON on disk — point them at that folder:\n  {\n    files: ['**/*.js'],\n    rules: {\n      'aem-forms/storage-class':           ['error', { formJsonRoot: 'local-form-json' }],\n      'aem-forms/fragment-path-validator': ['error', { formJsonRoot: 'local-form-json' }],\n      'aem-forms/fragment-qualified-name': ['error', { formJsonRoot: 'local-form-json' }],\n      'aem-forms/orphan-fragment-handler': ['error', { formJsonRoot: 'local-form-json' }],\n    },\n  },\n];\n```\n\nSuppress one finding: `// eslint-disable-next-line aem-forms/<rule>`. To silence just one finding\ntype of a multi-type rule (and keep the rest), use the `ignoreTypes` option:\n`'aem-forms/custom-fn-correctness': ['error', { ignoreTypes: ['jsonmodel-direct-read'] }]` — the same\noption name and semantics work in both ESLint and the performance-bot CLI.\n\n## A little context (so the rules make sense)\n\nAn Adaptive Form is authored as data (fields, panels, rules) plus small pieces of JavaScript:\n\n- **Custom functions / rule scripts** — JS the form calls in response to a change, click, or event.\n  They run **headless** (also on the server, in tests), so they must not touch the browser (`window`,\n  the DOM) directly.\n- **Rules** — declarative expressions authored on a field (its value, whether it's visible/required,\n  its validation). Logic that *derives* one value from others generally belongs in a rule, not in JS,\n  because the form re-evaluates rules automatically (including when data is restored).\n- **Fragments** — reusable sub-forms embedded into larger forms. A fragment must only touch its **own**\n  fields, addressed through `globals.fragment`, never the parent form's fields (`globals.form`), or it\n  breaks when embedded somewhere else.\n- **Resume / prefill** — the form can be rehydrated with saved data (a user resumes, or data is\n  prefilled). This replays change handlers *without a real user interaction*, which is the source of a\n  whole class of bugs below.\n\n## Rules\n\n### Correctness — bugs that surface at runtime\n\n| Rule | What it catches |\n|---|---|\n| `async-value-race` | A value fetched from an API and saved inside `.then(...)`, but read elsewhere *before* the fetch finishes (so the reader gets the old value) — or a `.catch` that saves an empty value on failure, quietly losing data. |\n| `request-error-handling` | A request/api-client chain missing part or all of its error handling. An HTTP or network/connectivity failure RESOLVES `{ ok: false }` — a `.catch`-only chain never sees it and the failure slips through as success (check `res.ok` too). A rejecting/malformed request payload genuinely rejects — a chain with neither a `.catch` nor an `.ok` check misses that case entirely, even through wrapper functions and `await`. See [rule details](#request-error-handling). |\n| `interactive-change-guard` | A UI action (moving focus, auto-advancing to the next field) that runs on *every* change, including when saved data is restored on resume. On resume this jumps focus/steps around and corrupts the screen. Gate it to real user edits. |\n| `custom-fn-correctness` | An imperative `setProperty` that derives an editable property (a one-shot write that never recomputes — use `field.bind`), `markFieldAsInvalid` used imperatively (bind `validationExpression` instead), or reading `_jsonModel` directly (bypasses change tracking, so dependent rules won't re-run). See [rule details](#custom-fn-correctness). |\n| `headless-incompatible-usage` | Custom-fn-surface JS assuming a live browser runtime it shouldn't — DOM access, window access, a raw HTTP call, navigation, or view/keystroke DOM in an orchestration file. See [rule details](#headless-incompatible-usage). |\n| `custom-function` | Direct `$properties` mutation, many single-field updates that should be one bulk update, or a custom event dispatched from a custom function. (Browser/window/DOM/HTTP access is `headless-incompatible-usage`, above.) |\n| `navigation-in-custom-fn` | No findings of its own — both of its checks are `headless-incompatible-usage` now. Kept registered so existing config referencing this id doesn't error. |\n| `should-be-component` | A field's own value being string-normalized (`.toUpperCase()`, `.trim()`, …) in orchestration code and written back as the submitted value — a keystroke concern that belongs in the field's component. See [rule details](#should-be-component). (View/keystroke DOM is `headless-incompatible-usage`, above.) |\n\n### Reuse — code that breaks when a fragment or component is embedded elsewhere\n\n| Rule | What it catches |\n|---|---|\n| `fragment-globals-scope` | A fragment reaching into the *parent form* (`globals.form.<field>`) instead of its own scope (`globals.fragment`). Works in one form, breaks when reused in another. |\n| `fragment-qualified-name` | Inside a fragment, addressing its own fields by the parent-form path (`globals.form.<fragmentName>.…`) instead of `globals.fragment.…`. |\n| `foreign-fragment-root` | One fragment reading or writing *another* fragment's fields. Send an event instead and let the owning fragment update itself. |\n| `field-writes-sibling` | One field directly setting another field's value or options. Broadcast an event and let the target field fill itself, so neither field depends on the other's internals. |\n| `dispatch-target` | An event sent to a single field (only that field's children receive it) when it should go to the whole form — or sent as a plain object instead of a proper event. |\n| `fragment-path-validator` | A field path in the code (`globals.fragment/form.<path>`) that doesn't exist in the form's JSON — a typo or a rename that wasn't updated, which silently reads `undefined` at runtime. |\n| `orphan-fragment-handler` | An exported handler that no event or rule ever calls — dead code, usually a handler someone forgot to wire up. |\n\n### Model ownership — logic that belongs in the form, not in JavaScript\n\n| Rule | What it catches |\n|---|---|\n| `rule-vs-code` | Deciding a field's value or visibility in JS (author it as a rule instead, so it re-evaluates automatically), or marking a field invalid imperatively (model it as the field's validation instead). |\n| `storage-class` | A saved variable with no `data.`/`uistate.` prefix (so it's unclear whether it should survive a resume), form data copied into a separate variable, reading form state inside a startup handler, or persisting a value that's COMPUTED from other form state (re-derive it instead of storing it). |\n| `content-in-code` | User-facing text or error messages hardcoded in a function instead of authored on the form (where they can be translated and edited). |\n| `display-format-in-code` | Formatting a display value in code (e.g. adding a currency symbol). Author it as the field's display format, so it survives when data is restored. |\n| `component-owns-model-concern` | A custom component re-implementing something the form model already handles (formatting, validation, change events). |\n| `component-value-sync` | A component that copies the field value once but never updates when the value later changes — so prefilled or restored data is lost. |\n| `component-model` | A component defining a setting that duplicates a built-in one, or reading a setting the component never declares (so it's always empty). |\n| `block-decorator-input-mutation` | Changing an input's value in the browser (`event.target.value = …` in an input/keydown/keyup handler) without committing it to the form model, so the model and the screen disagree. Set the value on the MODEL instead (setProperty/setValue); if it represents a user change, dispatch a UIChange event so the runtime records it as user input (`eventSource:'ui'`). |\n| `runtime-cls` | Changing styles/classes while the form loads in a way that shifts the layout (a visible jump for the user). |\n\nAuto-fixable: `storage-class-namespace` suggests `data.` / `uistate.` names.\n\n## Rule details\n\nEvery report message is self-contained — you shouldn't need this section to act on a finding. A few\nrules (below) have exceptions or several distinct checks that are worth spelling out in more depth than\nfits in a report message; that fuller version lives here. (Editors that support `meta.docs.url`, e.g.\nVS Code's ESLint extension, also surface this page as a \"documentation\" link on hover — a bonus for\nthose editors, not the primary way findings are meant to be understood.)\n\n### `rule-vs-code`\n\nFlags a function that only sets a computed **editable property** (no async/DOM/request/event-payload\nread) — that's a derived value, visibility, constraint, or label, which belongs in a `fd:rules`\nexpression so it re-evaluates automatically, not in a change handler that has to be triggered and\nre-triggered by hand. \"Editable property\" is the full set of runtime-writable properties (`value`,\n`visible`, `enabled`, `required`, `label`, `enum`/`enumNames`, `minimum`/`maximum`, `minLength`/\n`maxLength`, `pattern`, `placeholder`, `description`, …), derived from the runtime property matrix —\nnot just value/visibility. Also flags `markFieldAsInvalid` used imperatively — validity belongs in the\nfield's `validationExpression` (returns a boolean / `{valid, errorMessage}` / a Promise) so\n`validate()`/`validateAsync()`/submit pick it up.\n\n**Exception**: keep it imperative if this is a **one-shot seed** of user-editable data — e.g.\nprefilling an address/name from a snapshot at init. That value is Class-1 `dataRef` data, restored via\n`importData` on resume and editable by the user; a value rule would reclassify it as derived and\nre-fire on every input change, overwriting the user's edit or the restored value on resume. If that's\nyour case, this is a false positive — suppress it with\n`// eslint-disable-next-line aem-forms/rule-vs-code`.\n\nThis rule is the **authoring-canon** angle (prefer a content-authored `fd:rules` rule); a code-first\nteam can turn it off. The same code shape is ALSO flagged by `custom-fn-correctness` from the\n**correctness** angle (use `field.bind`) — that finding stays on even when this rule is disabled.\n\n### `custom-fn-correctness`\n\nAST-detectable custom-function correctness bugs — each a silent failure, all `error`:\n\n- **`non-reactive-set-use-bind`** — an imperative `setProperty(target, { <editableProp>: <computed> })`\n  is a ONE-SHOT write: it applies once and never recomputes when its inputs change. Use\n  `field.bind('<prop>', (globals) => …)` so the property is bound to a reactive, dependency-tracked\n  expression that re-fires on change — the code-path equivalent of an authored `fd:rules` rule. This is\n  the same code shape `rule-vs-code` flags, but from the correctness angle: `rule-vs-code` says \"prefer\n  authoring a rule\" (disable-able); this says \"if you keep it in code, make it reactive\" (stays on).\n  Same escape hatches as `rule-vs-code` — a set that reads an event payload / does async / touches the\n  DOM is a legitimate imperative fill and is not flagged, and a literal-constant set (`{ visible: true }`)\n  is imperative setup, not a derived value.\n- **`markfieldasinvalid-in-fn-use-bind`** — `markFieldAsInvalid` imperatively fights the validity slot;\n  bind the field's `validationExpression` instead (`field.bind('validationExpression', fn)`), a reactive\n  expression that `validate()`/submit pick up automatically.\n- **`jsonmodel-direct-read`** — reading `_jsonModel.*` bypasses the dependency-tracking getter, so a\n  rule that reads it will NOT re-fire when the value changes. Read `field.$value` / the tracked getter\n  instead.\n\n(Note: `field.parent` and the async-custom-function check were removed — the af2-web-runtime rule node\nnow resolves `parent`, and async functions register and run.)\n\n### `content-in-code`\n\nUser-facing copy — display text AND validation/error messages — belongs in **authored content**, not\na string literal in a rule/fragment function. It flags any **prose** string (2+ real words; a single\ntoken or a formatting fragment like `'₹ ' + num` is not prose, so it won't trip this) reaching one of\nthree sinks:\n\n- **Returned directly** from a function — `return 'Please enter a valid amount';`.\n- **`setProperty(field, { value: <prose> })`** — display copy pushed straight into a field's value.\n- **`errorMessage: <prose>`** inside any object literal (not just a `return`'s direct argument — the\n  object is routinely the *implicit* return of an inner `.catch()` arrow, e.g.\n  `.catch(() => ({ valid: false, errorMessage: 'Bank not found.' }))`, so this is checked everywhere,\n  not only where an explicit `return` sits).\n\n**The fix depends on which of the two you have:**\n- **Display text** → author a `dynamic-text` field with `${key}` placeholders (e.g.\n  `Hello ${firstName}, your loan amount is ₹${loanAmount}.`) and set only the underlying data\n  properties from code — never the finished sentence.\n- **Validation/error message** → author the field's `constraintMessages` / `validateExpMessage`, and\n  return `{ valid: false }` with **no** `errorMessage` — the runtime falls back to the authored message\n  automatically.\n\nProse reaching a sink through a same-file `const`/`let` identifier — the common \"hoist the copy to a\nmodule const\" shape (`const MSG = 'Please enter…'; return { valid:false, errorMessage: MSG }`,\nincluding a `props.x || DEFAULT_MSG` fallback) — is flagged the same way as a direct literal; hoisting\nthe string to a constant doesn't move it out of code.\n\n**Not flagged, by design:** reading an *authored* message off a property (e.g.\n`errorMessage: props.notServiceableMessage`) — that's the correct pattern, not a violation; a short\nnon-prose code (`errorMessage: 'ERR_001'`) — a code isn't authorable \"content\"; and the usual developer-\nmessage exemptions (`throw new Error(…)`, `console.*` args).\n\n**Note if you're looking for `hardcoded-error-message`:** that finding type used to live under\n`hardcoded-config` (which flagged an `errorMessage:` literal specifically, regardless of whether it was\nprose). It moved here — `hardcoded-config` now owns only the unrelated hardcoded request-`url` shape —\nso the whole \"message hardcoded in code\" concern has one home and one consistent rule (prose-gated,\nsame as every other check in this file).\n\n### `storage-class`\n\nSix checks on `setVariable`/`getVariable`/`$properties`, all rooted in one rule: form-scoped state\nmust ride a `data.`/`uistate.` namespace so it's unambiguous whether it survives a resume — and a\nvalue that can be re-derived should not be persisted at all.\n\n- **Form data in a variable** — a `setVariable` name that matches a `dataRef`-bound field name. Let the\n  dataRef carry it (binding/`importData`); don't duplicate it into a variable.\n- **Unnamespaced write** — a form-scoped `setVariable` with no `data.`/`uistate.` prefix. Use\n  `data.<name>` for fieldless Class-1 data (or the `$data` accessor directly), `uistate.<name>` for\n  persisted flow/UI state, or `uistate._<name>` for ephemeral scratch that must never persist.\n- **Write-only variable** (warning) — a `setVariable` whose name is never read anywhere in the analyzed\n  JS. Likely dead, unless the reader is an authored rule or another module the static scan can't see.\n- **Unnamespaced read** — the read-side mirror of the unnamespaced-write check, for both\n  `getVariable(...)` and a direct `$properties.<key>` access.\n- **Read inside an init handler** — any form-scoped read (namespaced or not) inside a function named\n  `*Init`. On init/resume, a fragment shouldn't read form state directly at all — the orchestrator\n  should build the `custom:*Init` event payload from state, and the fragment should consume it via\n  `globals.event.payload`.\n- **Derived value persisted** — a form-scoped `setVariable` whose value is COMPUTED (arithmetic /\n  ternary / template-concat) from a direct form-state read (`getVariable(...)`, `.value`/`.$value`, or\n  `$properties.<key>`). This is a Class-2 projection: re-derive it at the point of use (a shared calc\n  or reactive rule), never store it — a persisted derivation drifts when its inputs change. Exempt: a\n  value cached from an async/fetched result (write inside a `.then`/`.catch`/`.finally`, or an\n  `await`/`request` in the value) — that is the irreducible cross-screen cache, not a projection.\n\nField-scoped access (`globals.field`, or a chain that descends into a specific named child rather than\nterminating at the form/fragment-root anchor) is exempt from all five checks — that's a node's own,\nnon-restorable property bag, not journey state.\n\n### `headless-incompatible-usage`\n\nCustom-fn-surface JS (fragment / custom-fn / `*-rules.js`) shouldn't assume a live browser runtime is\npresent — DOM access, `window` access, a raw `fetch`/`XMLHttpRequest`/`axios`/`$.ajax` call instead of\nthe form's `request()` tool, redirecting the browser directly (`window.location`, a hand-built `<form>`\nsubmit), or view/keystroke DOM (`addEventListener`, `querySelector`/`getElementById`, `createElement`\nexcept `'form'`, direct `innerHTML`/`style`/`classList` mutation) that belongs in a component's\n`decorate` instead. One rule, one severity key, regardless of which primitive trips it or why it's\nwrong — each finding still carries its own specific, type-appropriate message.\n\nThis rule runs the same underlying checks as `custom-function`, `navigation-in-custom-fn`, and\n`should-be-component` (each still owns its OTHER, non-browser-runtime findings — see below) — so the\nsame code can trip more than one of the checks this rule wraps, and report more than once (e.g. a\n`document.querySelector` inside a custom function is BOTH generic DOM access and, more specifically,\nview DOM that belongs in a component — you'll see both).\n\n### `should-be-component`\n\nBeyond the view/keystroke DOM findings folded into `headless-incompatible-usage`, this rule also warns\n(not errors) on **fragment-value-normalization**: a field's own value being string-normalized\n(`.toUpperCase()`, `.trim()`, `.replace()`, …) in orchestration code and written back as the submitted\nvalue. Input sanitization like this is a keystroke concern owned by the field's component, or\nexpressible declaratively as the field's native `pattern`/`format` constraint — not orchestration code.\nIt's a warning because a deliberate one-off submit-time normalization is legitimate and can't be ruled\nout statically. (This is distinct from `display-format-in-code`, which governs *presentation*, not the\nsubmitted data.)\n\n### `request-error-handling`\n\nA request/api-client call has two genuinely distinct failure shapes, and each needs its own handling:\n\n- An HTTP-level failure (non-2xx response) OR a network/connectivity failure (offline, DNS, CORS,\n  connection refused) both RESOLVE `{ ok: false, status, body }` — neither rejects. A chain that\n  handles failure only in `.catch(...)` never sees either; branch on `if (!res.ok)` inside `.then`\n  instead.\n- A rejecting/malformed request payload — a Promise-valued body that itself rejects, or a synchronous\n  exception while encoding it — genuinely rejects. An `.ok` check alone never sees this; a real\n  `.catch()` (not a trivial fail-open one) is still needed.\n\nTwo findings, both anchored on every literal `request(...)`/`globals.functions.request(...)` call and\nresolved by climbing the real caller graph (through wrapper functions, `await`, and `Promise.all`) —\nnot just the immediate chain — before concluding a gap is genuine:\n\n- **`request-catch-only-no-ok-check`** — a chain has `.catch(...)` but nothing reads `.ok`/`.status`\n  anywhere in its `.then` callbacks.\n- **`request-missing-error-handling`** — a chain (or an `await`ed call) has neither a `.catch(...)` nor\n  an `.ok`/`.status` read, and none turns up anywhere reachable through its actual callers either.\n\nNot flagged (a documented gap, not a bug): a chain with an `.ok` check but still no `.catch()` —\nreasoning about \"has some handling, still missing a piece\" needs to know what already exists, which\nrisks a much higher false-positive rate against chains whose rejection is legitimately handled further\nup an outer chain. Left to human review.\n\n## Before / after — the patterns that matter most\n\n**`async-value-race`** — read the value where it's ready, not before:\n\n```js\n// Wrong: the read runs before the fetch resolves — `stampDuty` is still the old value\nconst sd = getVariable('stampDuty');\nrequest({ url: '/stampDuty' }).then((res) => setVariable('stampDuty', res.body.amount));\nuseIt(sd);\n\n// Right: use the value inside the .then, once it's populated\nrequest({ url: '/stampDuty' }).then((res) => {\n  setVariable('stampDuty', res.body.amount);\n  useIt(res.body.amount);\n});\n```\n\n**`request-error-handling`** — an HTTP/network failure resolves `{ ok: false }` (a `.catch` never sees\nit); a rejecting/malformed request payload genuinely rejects (an `.ok` check never sees THAT) — both\nare needed:\n\n```js\n// Wrong: no .ok check — a resolved {ok:false} flows on as success with res.body === undefined; no\n// .catch either — a genuinely rejecting request produces an unhandled rejection\nrequest({ url: '/x' }).then((res) => setProperty(field, { value: res.body.amount }));\n\n// Right: branch on res.ok AND catch the reject case\nrequest({ url: '/x' }).then((res) => {\n  if (!res.ok) { showError(); return; }\n  setProperty(field, { value: res.body.amount });\n}).catch(showError);\n```\n\n**`interactive-change-guard`** — only act on a real user edit, not a data restore:\n\n```js\n// Wrong: on resume, restored data re-fires this and yanks focus around\nif (field.$value.length === MAX) dispatchEvent(nextField, 'focus');\n\n// Right: a real user change carries `eventSource`; a restore does not\nconst isUserEdit = !!(globals.event?.payload && 'eventSource' in globals.event.payload);\nif (field.$value.length === MAX && isUserEdit) dispatchEvent(nextField, 'focus');\n```\n\n**`fragment-globals-scope` / `fragment-qualified-name`** — a fragment addresses its own scope:\n\n```js\n// Wrong: reaches into the parent form — breaks when this fragment is embedded elsewhere\nconst v = globals.form.employmentPanel.employer.$value;\n\n// Right: portable — resolves wherever the fragment is embedded\nconst v = globals.fragment.employmentPanel.employer.$value;\n```\n\n**`field-writes-sibling`** — broadcast, don't reach across fields:\n\n```js\n// Wrong: the employer field directly fills the category field\nsetProperty(globals.form.employerCategory, { value: category });\n\n// Right: broadcast; the category field fills itself from the event\ndispatchEvent(globals.form, 'custom:employerSelected', { category }, true);\n```\n\n**`rule-vs-code`** — derived values belong in a rule, not a change handler:\n\n```js\n// Wrong: computing a derived value in JS — won't re-run when inputs change, and re-fires on restore\nsetProperty(globals.field, { value: principal + interest });\n\n// Right: author it as the field's value rule (a form expression), which re-evaluates automatically.\n```\n\n## Rules that read your form JSON\n\n`storage-class`, `fragment-qualified-name`, `fragment-path-validator`, and `orphan-fragment-handler`\ncross-check against your form/fragment JSON — point them at the folder holding it via the\n`formJsonRoot` option (see the config above). `component-model` finds its component's JSON\nautomatically. When that JSON isn't available, these rules skip only the JSON-dependent check and\nstill run their code-only checks.\n\n## Bot-only rules (not in this plugin)\n\nA few analyzers anchor their finding to a JSON node, not a JS line, so they can't be ESLint rules and\nrun in the **bot** (`lint` CLI) only:\n\n- `fragment-rule-form-ref` — a fragment rule/event expression referencing the absolute form root `$form`.\n- `rules-in-content` — rule/expression grammar (`events`/`fd:events`/`rules`/`fd:rules`,\n  `displayValueExpression`/`validationExpression`) authored inline in a form/fragment content JSON; the\n  content layer must carry no rules — move logic to the code/rule-store layer. The framework plumbing\n  `custom:setProperty: [\"$event.payload\"]` is skipped; structural `fd:*` config is never flagged.\n\n## Compatibility\n\n- ESLint `>= 8.57` (flat config); ESLint 9 supported.\n- Node 20+.\n- Self-contained — no other dependencies to install.\n","readmeFilename":"README.md"}