From da86273145ff152e88143ba75605b7e02646bbcc Mon Sep 17 00:00:00 2001 From: Namrata Gupta Date: Mon, 19 Jan 2026 12:41:07 +0530 Subject: [PATCH 1/6] Adding changes for Jan dependency update --- package-lock.json | 274 +++++++++--------- package.json | 10 +- packages/ENGINE-TEMPLATE/package.json | 2 +- packages/code-analyzer-core/package.json | 6 +- .../code-analyzer-engine-api/package.json | 4 +- .../code-analyzer-eslint-engine/package.json | 20 +- .../src/rule-mappings/typescript-eslint.ts | 4 + .../rules_OnlyLwcBaseConfig.goldfile.json | 36 +-- ...les_OnlyTypeScriptBaseConfig.goldfile.json | 12 + .../code-analyzer-eslint8-engine/package.json | 4 +- .../code-analyzer-flow-engine/package.json | 6 +- .../code-analyzer-pmd-engine/package.json | 6 +- .../code-analyzer-regex-engine/package.json | 8 +- .../code-analyzer-regex-engine/src/engine.ts | 14 +- .../package.json | 10 +- .../src/executor.ts | 8 +- .../src/utils.ts | 17 +- .../code-analyzer-sfge-engine/package.json | 6 +- 18 files changed, 235 insertions(+), 212 deletions(-) diff --git a/package-lock.json b/package-lock.json index 62bd9cfa..eaffaaa4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,12 @@ "packages/*" ], "devDependencies": { - "cross-env": "^10.0.0", + "cross-env": "^10.1.0", "husky": "^9.1.7", - "jest": "^30.1.3", - "rimraf": "^6.0.1", - "semver": "^7.7.2", - "ts-jest": "^29.4.2" + "jest": "^30.2.0", + "rimraf": "^6.1.2", + "semver": "^7.7.3", + "ts-jest": "^29.4.6" } }, "node_modules/@ampproject/remapping": { @@ -692,9 +692,9 @@ "license": "MIT" }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" @@ -1779,16 +1779,16 @@ "license": "MIT" }, "node_modules/@salesforce-ux/eslint-plugin-slds": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@salesforce-ux/eslint-plugin-slds/-/eslint-plugin-slds-1.0.7.tgz", - "integrity": "sha512-qYjhV+OIF7mfI5B1lZWvTrWc21HU+cW69lIUsX8eXArIvFhAqW4EustBndO66HEZXDgr4fKf+qS5sOIxhc992w==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@salesforce-ux/eslint-plugin-slds/-/eslint-plugin-slds-1.1.0.tgz", + "integrity": "sha512-yYFYwxvLWCt7btCx9cEuvsD0meGiMwj9SKbdkO9fjzB404DFINpxHWFNWp9wwCKSFXmPV/SQsBhmq0mOcMClDg==", "license": "ISC", "dependencies": { "@eslint/css": "^0.9.0", "@eslint/css-tree": "^3.6.5", "@html-eslint/eslint-plugin": "^0.34.0", "@html-eslint/parser": "^0.34.0", - "@salesforce-ux/sds-metadata": "^1.1.0", + "@salesforce-ux/sds-metadata": "^1.2.1", "chroma-js": "^3.1.2" }, "engines": { @@ -2132,19 +2132,19 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.0.tgz", - "integrity": "sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz", + "integrity": "sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==", "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.50.0", - "@typescript-eslint/type-utils": "8.50.0", - "@typescript-eslint/utils": "8.50.0", - "@typescript-eslint/visitor-keys": "8.50.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/type-utils": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2154,22 +2154,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.50.0", + "@typescript-eslint/parser": "^8.53.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.0.tgz", - "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.0.tgz", + "integrity": "sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==", "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.50.0", - "@typescript-eslint/types": "8.50.0", - "@typescript-eslint/typescript-estree": "8.50.0", - "@typescript-eslint/visitor-keys": "8.50.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2184,14 +2184,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.0.tgz", - "integrity": "sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.0.tgz", + "integrity": "sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==", "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.50.0", - "@typescript-eslint/types": "^8.50.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.53.0", + "@typescript-eslint/types": "^8.53.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2205,13 +2205,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz", - "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz", + "integrity": "sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.50.0", - "@typescript-eslint/visitor-keys": "8.50.0" + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2222,9 +2222,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.0.tgz", - "integrity": "sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz", + "integrity": "sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2238,16 +2238,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.0.tgz", - "integrity": "sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz", + "integrity": "sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.50.0", - "@typescript-eslint/typescript-estree": "8.50.0", - "@typescript-eslint/utils": "8.50.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2262,9 +2262,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", - "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.0.tgz", + "integrity": "sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2275,20 +2275,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz", - "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz", + "integrity": "sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==", "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.50.0", - "@typescript-eslint/tsconfig-utils": "8.50.0", - "@typescript-eslint/types": "8.50.0", - "@typescript-eslint/visitor-keys": "8.50.0", - "debug": "^4.3.4", - "minimatch": "^9.0.4", - "semver": "^7.6.0", + "@typescript-eslint/project-service": "8.53.0", + "@typescript-eslint/tsconfig-utils": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2302,15 +2302,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz", - "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.0.tgz", + "integrity": "sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==", "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.50.0", - "@typescript-eslint/types": "8.50.0", - "@typescript-eslint/typescript-estree": "8.50.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2325,12 +2325,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz", - "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz", + "integrity": "sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/types": "8.53.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -2908,9 +2908,9 @@ } }, "node_modules/astronomical": { - "version": "2.1.1-rc.1", - "resolved": "https://registry.npmjs.org/astronomical/-/astronomical-2.1.1-rc.1.tgz", - "integrity": "sha512-V7TftgQgscImaI4+PftXau5SaFbQ9IZ9otYxHjl/tqLEQpdpSBCThYL3Ca42rZ/8/044MF2Ki9DnyNIt/fUDCw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/astronomical/-/astronomical-3.0.0.tgz", + "integrity": "sha512-JnrcAhg1CqyD36TLJ9Dm0yV7uBoPGfwWczi0Fdjqc/sry6xXm3zAt+BuYeshL4E21t4EWoxT1x7R8DaaQpnLBg==", "license": "Apache-2.0", "dependencies": { "meriyah": "^6.0.3" @@ -4110,9 +4110,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.5.0.tgz", - "integrity": "sha512-DAi9H8xN/TUuNOt+xDP1RqpCJLsSxBb5u1zXSpCyp0VAWGL8MBAg5t7/Dk+76iX7d1LhWu4DDH77IQNUolLDyg==", + "version": "29.12.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.12.1.tgz", + "integrity": "sha512-Rxo7r4jSANMBkXLICJKS0gjacgyopfNAsoS0e3R9AHnjoKuQOaaPfmsDJPi8UWwygI099OV/K/JhpYRVkxD4AA==", "license": "MIT", "dependencies": { "@typescript-eslint/utils": "^8.0.0" @@ -4999,9 +4999,9 @@ } }, "node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.0.0.tgz", + "integrity": "sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==", "license": "MIT", "engines": { "node": ">=18" @@ -5750,6 +5750,18 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, + "node_modules/isbinaryfile": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-6.0.0.tgz", + "integrity": "sha512-2FN2B8MAqKv6d5TaKsLvMrwMcghxwHTpcKy0L5mhNbRqjNqo2++SpCqN6eG1lCC1GmTQgvrYJYXv2+Chvyevag==", + "license": "MIT", + "engines": { + "node": ">= 24.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -7582,13 +7594,13 @@ } }, "node_modules/retire": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/retire/-/retire-5.4.0.tgz", - "integrity": "sha512-vLz3Fc2zPqgUjcR01eRoPM/Hnh/+37zLAAfEs0B8mJK1dfUYZSQ3AfNzDDtYir8Qrn0ukvU5DhMbGIh/BVLyCg==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/retire/-/retire-5.4.2.tgz", + "integrity": "sha512-Qva7qmmMqEMrMma6saFpTgw083omqWXQet1Pd8xApSSQbrpFlySL1/nDaWTSh4MpbbTFzmV0ZKuQAlJiV5cNrQ==", "license": "Apache-2.0", "dependencies": { "ansi-colors": "^4.1.1", - "astronomical": "^2.1.1-rc.1", + "astronomical": "^3.0.0", "commander": "^10.0.1", "proxy-agent": "^6.4.0", "uuid": "^9.0.1", @@ -8489,9 +8501,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "license": "MIT", "engines": { "node": ">=18.12" @@ -8728,15 +8740,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.50.0.tgz", - "integrity": "sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.0.tgz", + "integrity": "sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==", "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.50.0", - "@typescript-eslint/parser": "8.50.0", - "@typescript-eslint/typescript-estree": "8.50.0", - "@typescript-eslint/utils": "8.50.0" + "@typescript-eslint/eslint-plugin": "8.53.0", + "@typescript-eslint/parser": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9310,7 +9322,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" @@ -9560,7 +9572,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" @@ -9800,27 +9812,27 @@ "version": "0.39.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { - "@babel/preset-react": "^7.27.1", + "@babel/preset-react": "^7.28.5", "@eslint/js": "^9.39.2", "@lwc/eslint-plugin-lwc": "^3.3.0", "@lwc/eslint-plugin-lwc-platform": "^6.3.0", - "@salesforce-ux/eslint-plugin-slds": "^1.0.7", + "@salesforce-ux/eslint-plugin-slds": "^1.1.0", "@salesforce/code-analyzer-engine-api": "0.33.0", "@salesforce/code-analyzer-eslint8-engine": "0.10.0", "@salesforce/eslint-config-lwc": "^4.1.2", "@salesforce/eslint-plugin-lightning": "^2.0.0", "@types/node": "^20.0.0", - "@typescript-eslint/eslint-plugin": "^8.50.0", - "@typescript-eslint/parser": "^8.50.0", + "@typescript-eslint/eslint-plugin": "^8.53.0", + "@typescript-eslint/parser": "^8.53.0", "eslint": "^9.39.2", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.5.0", - "eslint-plugin-react": "^7.37.2", + "eslint-plugin-jest": "^29.12.1", + "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", - "globals": "^16.5.0", + "globals": "^17.0.0", "semver": "^7.7.3", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "devDependencies": { "@types/jest": "^30.0.0", @@ -10761,7 +10773,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" @@ -11014,7 +11026,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" @@ -11256,7 +11268,7 @@ "dependencies": { "@salesforce/code-analyzer-engine-api": "0.33.0", "@types/node": "^20.0.0", - "isbinaryfile": "^4.0.10", + "isbinaryfile": "^6.0.0", "p-limit": "^3.1.0" }, "devDependencies": { @@ -11267,7 +11279,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" @@ -11489,18 +11501,6 @@ "node": ">= 4" } }, - "packages/code-analyzer-regex-engine/node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, "packages/code-analyzer-regex-engine/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -11521,9 +11521,9 @@ "dependencies": { "@salesforce/code-analyzer-engine-api": "0.33.0", "@types/node": "^20.0.0", - "isbinaryfile": "^4.0.10", + "isbinaryfile": "^6.0.0", "node-stream-zip": "^1.15.0", - "retire": "^5.4.0" + "retire": "^5.4.2" }, "devDependencies": { "@eslint/js": "^9.39.2", @@ -11533,7 +11533,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" @@ -11755,18 +11755,6 @@ "node": ">= 4" } }, - "packages/code-analyzer-retirejs-engine/node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, "packages/code-analyzer-retirejs-engine/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -11798,7 +11786,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" diff --git a/package.json b/package.json index 0f2dbb87..1fbf6535 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,12 @@ "prepare": "husky || true" }, "devDependencies": { - "cross-env": "^10.0.0", + "cross-env": "^10.1.0", "husky": "^9.1.7", - "jest": "^30.1.3", - "rimraf": "^6.0.1", - "semver": "^7.7.2", - "ts-jest": "^29.4.2" + "jest": "^30.2.0", + "rimraf": "^6.1.2", + "semver": "^7.7.3", + "ts-jest": "^29.4.6" }, "jest": { "testTimeout": 60000, diff --git a/packages/ENGINE-TEMPLATE/package.json b/packages/ENGINE-TEMPLATE/package.json index 6c293bc4..afaeebb9 100644 --- a/packages/ENGINE-TEMPLATE/package.json +++ b/packages/ENGINE-TEMPLATE/package.json @@ -14,7 +14,7 @@ "types": "dist/index.d.ts", "dependencies": { "@types/node": "^20.0.0", - "@salesforce/code-analyzer-engine-api": "0.33.0" + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT" }, "devDependencies": { "@eslint/js": "^9.39.2", diff --git a/packages/code-analyzer-core/package.json b/packages/code-analyzer-core/package.json index 7b0fa6b6..feacd6dd 100644 --- a/packages/code-analyzer-core/package.json +++ b/packages/code-analyzer-core/package.json @@ -1,7 +1,7 @@ { "name": "@salesforce/code-analyzer-core", "description": "Core Package for the Salesforce Code Analyzer", - "version": "0.41.0", + "version": "0.42.0-SNAPSHOT", "author": "The Salesforce Code Analyzer Team", "license": "BSD-3-Clause", "homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview", @@ -16,7 +16,7 @@ }, "types": "dist/index.d.ts", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", "csv-stringify": "^6.6.0", "js-yaml": "^4.1.1", @@ -35,7 +35,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" diff --git a/packages/code-analyzer-engine-api/package.json b/packages/code-analyzer-engine-api/package.json index ce40dc40..10388aeb 100644 --- a/packages/code-analyzer-engine-api/package.json +++ b/packages/code-analyzer-engine-api/package.json @@ -1,7 +1,7 @@ { "name": "@salesforce/code-analyzer-engine-api", "description": "Engine API Package for the Salesforce Code Analyzer", - "version": "0.33.0", + "version": "0.34.0-SNAPSHOT", "author": "The Salesforce Code Analyzer Team", "license": "BSD-3-Clause", "homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview", @@ -26,7 +26,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" diff --git a/packages/code-analyzer-eslint-engine/package.json b/packages/code-analyzer-eslint-engine/package.json index 147c903f..0e5acbd0 100644 --- a/packages/code-analyzer-eslint-engine/package.json +++ b/packages/code-analyzer-eslint-engine/package.json @@ -13,27 +13,27 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "dependencies": { - "@babel/preset-react": "^7.27.1", + "@babel/preset-react": "^7.28.5", "@eslint/js": "^9.39.2", "@lwc/eslint-plugin-lwc": "^3.3.0", "@lwc/eslint-plugin-lwc-platform": "^6.3.0", - "@salesforce-ux/eslint-plugin-slds": "^1.0.7", - "@salesforce/code-analyzer-engine-api": "0.33.0", - "@salesforce/code-analyzer-eslint8-engine": "0.10.0", + "@salesforce-ux/eslint-plugin-slds": "^1.1.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", + "@salesforce/code-analyzer-eslint8-engine": "0.11.0-SNAPSHOT", "@salesforce/eslint-config-lwc": "^4.1.2", "@salesforce/eslint-plugin-lightning": "^2.0.0", "@types/node": "^20.0.0", - "@typescript-eslint/eslint-plugin": "^8.50.0", - "@typescript-eslint/parser": "^8.50.0", + "@typescript-eslint/eslint-plugin": "^8.53.0", + "@typescript-eslint/parser": "^8.53.0", "eslint": "^9.39.2", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.5.0", - "eslint-plugin-react": "^7.37.2", + "eslint-plugin-jest": "^29.12.1", + "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", - "globals": "^16.5.0", + "globals": "^17.0.0", "semver": "^7.7.3", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "devDependencies": { "@types/jest": "^30.0.0", diff --git a/packages/code-analyzer-eslint-engine/src/rule-mappings/typescript-eslint.ts b/packages/code-analyzer-eslint-engine/src/rule-mappings/typescript-eslint.ts index 4ab55076..f0e48d20 100644 --- a/packages/code-analyzer-eslint-engine/src/rule-mappings/typescript-eslint.ts +++ b/packages/code-analyzer-eslint-engine/src/rule-mappings/typescript-eslint.ts @@ -486,6 +486,10 @@ export const RULE_MAPPINGS_TYPESCRIPT_ESLINT: Record=20.0.0" diff --git a/packages/code-analyzer-pmd-engine/package.json b/packages/code-analyzer-pmd-engine/package.json index 41271577..fdad5219 100644 --- a/packages/code-analyzer-pmd-engine/package.json +++ b/packages/code-analyzer-pmd-engine/package.json @@ -1,7 +1,7 @@ { "name": "@salesforce/code-analyzer-pmd-engine", "description": "Plugin package that adds 'pmd' and 'cpd' as engines into Salesforce Code Analyzer", - "version": "0.34.0", + "version": "0.35.0-SNAPSHOT", "author": "The Salesforce Code Analyzer Team", "license": "BSD-3-Clause", "homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview", @@ -13,7 +13,7 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", "@types/semver": "^7.7.1", "semver": "^7.7.3" @@ -26,7 +26,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" diff --git a/packages/code-analyzer-regex-engine/package.json b/packages/code-analyzer-regex-engine/package.json index f7a85b78..7f9a438f 100644 --- a/packages/code-analyzer-regex-engine/package.json +++ b/packages/code-analyzer-regex-engine/package.json @@ -1,7 +1,7 @@ { "name": "@salesforce/code-analyzer-regex-engine", "description": "Plugin package that adds 'regex' as an engine into Salesforce Code Analyzer", - "version": "0.31.0", + "version": "0.32.0-SNAPSHOT", "author": "The Salesforce Code Analyzer Team", "license": "BSD-3-Clause", "homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview", @@ -13,9 +13,9 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", - "isbinaryfile": "^4.0.10", + "isbinaryfile": "^6.0.0", "p-limit": "^3.1.0" }, "devDependencies": { @@ -26,7 +26,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" diff --git a/packages/code-analyzer-regex-engine/src/engine.ts b/packages/code-analyzer-regex-engine/src/engine.ts index 680d311d..2451357b 100644 --- a/packages/code-analyzer-regex-engine/src/engine.ts +++ b/packages/code-analyzer-regex-engine/src/engine.ts @@ -12,9 +12,18 @@ import path from "node:path"; import fs from "node:fs"; import * as fsp from 'node:fs/promises'; import {RegexRule, RegexRules} from "./config"; -import {isBinaryFile} from "isbinaryfile"; import {convertToRegex, PromiseExecutionLimiter} from "./utils"; +// Dynamic import for ESM-only isbinaryfile package +let isBinaryFile: typeof import('isbinaryfile').isBinaryFile; +const loadIsBinaryFile = async () => { + if (!isBinaryFile) { + const mod = await import('isbinaryfile'); + isBinaryFile = mod.isBinaryFile; + } + return isBinaryFile; +}; + const TEXT_BASED_FILE_EXTS = new Set( [ '.cjs', '.cls', '.cmp', '.css', '.csv', '.htm', '.html', '.js', '.json', '.jsx', '.md', '.mdt', '.mjs', '.page', @@ -218,7 +227,8 @@ function contextuallyDeriveEolString(contents: string): string { async function isTextFile(fileName: string): Promise { const ext: string = path.extname(fileName).toLowerCase(); - return TEXT_BASED_FILE_EXTS.has(ext) || !(await isBinaryFile(fileName)); + const isBinaryFileFn = await loadIsBinaryFile(); + return TEXT_BASED_FILE_EXTS.has(ext) || !(await isBinaryFileFn(fileName)); } type AsyncFilterFnc = (value: T) => Promise; diff --git a/packages/code-analyzer-retirejs-engine/package.json b/packages/code-analyzer-retirejs-engine/package.json index e16a7026..c7cb569e 100644 --- a/packages/code-analyzer-retirejs-engine/package.json +++ b/packages/code-analyzer-retirejs-engine/package.json @@ -1,7 +1,7 @@ { "name": "@salesforce/code-analyzer-retirejs-engine", "description": "Plugin package that adds 'retire-js' as an engine into Salesforce Code Analyzer", - "version": "0.30.0", + "version": "0.31.0-SNAPSHOT", "author": "The Salesforce Code Analyzer Team", "license": "BSD-3-Clause", "homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview", @@ -13,11 +13,11 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", - "isbinaryfile": "^4.0.10", + "isbinaryfile": "^6.0.0", "node-stream-zip": "^1.15.0", - "retire": "^5.4.0" + "retire": "^5.4.2" }, "devDependencies": { "@eslint/js": "^9.39.2", @@ -27,7 +27,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" diff --git a/packages/code-analyzer-retirejs-engine/src/executor.ts b/packages/code-analyzer-retirejs-engine/src/executor.ts index 79da404a..7d350d80 100644 --- a/packages/code-analyzer-retirejs-engine/src/executor.ts +++ b/packages/code-analyzer-retirejs-engine/src/executor.ts @@ -159,7 +159,7 @@ export class AdvancedRetireJsExecutor implements RetireJsExecutor { * Note that this execute function assumes that only files are passed in. */ async execute(targetFiles: string[], workingFolder: string): Promise { - const { textFiles, zipFiles } = separateTextAndZipFiles(targetFiles); + const { textFiles, zipFiles } = await separateTextAndZipFiles(targetFiles); if (textFiles.length + zipFiles.length === 0) { return []; // Quick return } @@ -224,7 +224,7 @@ export class AdvancedRetireJsExecutor implements RetireJsExecutor { const zip: DecoratedStreamZip = new DecoratedStreamZip({file: zipFile, storeEntries: true}); const entries = await zip.entries(); for (const entry of Object.values(entries)) { - if (entry.isDirectory || !utils.isTextFile(await zip.entryData(entry.name))) { + if (entry.isDirectory || !(await utils.isTextFile(await zip.entryData(entry.name)))) { continue; // Skip directories and non-text files. } const zippedFileInfo: path.ParsedPath = path.parse(entry.name); @@ -256,11 +256,11 @@ export class AdvancedRetireJsExecutor implements RetireJsExecutor { } } -function separateTextAndZipFiles(files: string[]): {textFiles: string[], zipFiles: string[]} { +async function separateTextAndZipFiles(files: string[]): Promise<{textFiles: string[], zipFiles: string[]}> { const textFiles: string[] = []; const zipFiles: string[] = []; for (const file of files) { - if (file.toLowerCase().endsWith(".js") || utils.isTextFile(file)) { + if (file.toLowerCase().endsWith(".js") || (await utils.isTextFile(file))) { textFiles.push(file); } else if (utils.isZipFile(file)) { zipFiles.push(file); diff --git a/packages/code-analyzer-retirejs-engine/src/utils.ts b/packages/code-analyzer-retirejs-engine/src/utils.ts index d25d553e..d80f186b 100644 --- a/packages/code-analyzer-retirejs-engine/src/utils.ts +++ b/packages/code-analyzer-retirejs-engine/src/utils.ts @@ -1,7 +1,16 @@ import fs from "node:fs"; import path from "node:path"; -import {isBinaryFileSync} from "isbinaryfile"; import {getMessage} from "./messages"; + +// Dynamic import for ESM-only isbinaryfile package +let isBinaryFile: typeof import('isbinaryfile').isBinaryFile; +const loadIsBinaryFile = async () => { + if (!isBinaryFile) { + const mod = await import('isbinaryfile'); + isBinaryFile = mod.isBinaryFile; + } + return isBinaryFile; +}; /** * Attempts to create a symlink, and if that fails, attempts to create a link, and if that fails, just copies the file * @param srcFile Source file @@ -45,9 +54,9 @@ export function isZipFile(file: string) { * Determines if a file is a non-binary text file * @param file a file path or the Buffer of its contents */ -/* TODO: Make this function async */ -export function isTextFile(file: string | Buffer): boolean { - return !isBinaryFileSync(file); +export async function isTextFile(file: string | Buffer): Promise { + const isBinaryFileFn = await loadIsBinaryFile(); + return !(await isBinaryFileFn(file)); } /** diff --git a/packages/code-analyzer-sfge-engine/package.json b/packages/code-analyzer-sfge-engine/package.json index 1e1ab7ed..734002f8 100644 --- a/packages/code-analyzer-sfge-engine/package.json +++ b/packages/code-analyzer-sfge-engine/package.json @@ -1,7 +1,7 @@ { "name": "@salesforce/code-analyzer-sfge-engine", "description": "Plugin package that adds 'Salesforce Graph Engine' as an engine into Salesforce Code Analyzer", - "version": "0.16.0", + "version": "0.17.0-SNAPSHOT", "author": "The Salesforce Code Analyzer Team", "license": "BSD-3-Clause", "homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview", @@ -13,7 +13,7 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", "semver": "^7.7.3" }, @@ -26,7 +26,7 @@ "rimraf": "^6.1.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3", - "typescript-eslint": "^8.50.0" + "typescript-eslint": "^8.53.0" }, "engines": { "node": ">=20.0.0" From 0566c7700e4e6d37be4f087363b38211cab5673e Mon Sep 17 00:00:00 2001 From: Namrata Gupta Date: Mon, 19 Jan 2026 14:19:02 +0530 Subject: [PATCH 2/6] Adding minor fix for jsx parsing --- .../src/base-config.ts | 6 ++++- .../test/engine.test.ts | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/code-analyzer-eslint-engine/src/base-config.ts b/packages/code-analyzer-eslint-engine/src/base-config.ts index 4cb58a84..529e962f 100644 --- a/packages/code-analyzer-eslint-engine/src/base-config.ts +++ b/packages/code-analyzer-eslint-engine/src/base-config.ts @@ -96,9 +96,13 @@ export class BaseConfigFactory { const lwcFilePatterns = lwcExtensions.map(ext => `**/*${ext}`); // Base JS rules (eslintJs.configs.all) - applies to ALL JS files including .jsx + // Includes Babel parser with @babel/preset-react to enable JSX parsing for .jsx files const baseJsConfig: Linter.Config = { ...eslintJs.configs.all, - files: allJsFilePatterns + files: allJsFilePatterns, + languageOptions: { + ...configs[0].languageOptions // Reuses Babel parser with @babel/preset-react + } }; // This one rule makes eslint throw an exception if the user doesn't have jest installed (which should be diff --git a/packages/code-analyzer-eslint-engine/test/engine.test.ts b/packages/code-analyzer-eslint-engine/test/engine.test.ts index 278acc4c..67824859 100644 --- a/packages/code-analyzer-eslint-engine/test/engine.test.ts +++ b/packages/code-analyzer-eslint-engine/test/engine.test.ts @@ -905,6 +905,31 @@ describe('Typical tests for the runRules method of ESLintEngine', () => { v.codeLocations[0].file.endsWith('.jsx')); expect(jsxViolations.length).toBe(0); }); + + it('When runRules is called on .jsx files with LWC+JS configs enabled but React disabled, JSX parsing still works', async () => { + // This is a regression test for the bug where .jsx files failed to parse with "Unexpected token <" + // when both LWC and JS base configs were enabled. The issue was that .jsx files were excluded from + // the LWC config patterns, so they didn't get the Babel preset-react parser. + const configWithoutReact: ESLintEngineConfig = { + ...DEFAULT_CONFIG, + config_root: __dirname, + disable_lwc_base_config: false, + disable_javascript_base_config: false, + disable_react_base_config: true // React rules disabled, but JSX parsing should still work + }; + const engine: Engine = await createEngineFromPlugin(configWithoutReact); + const runOptions: RunOptions = createRunOptions(new Workspace('id', [workspaceWithReactFiles])); + + // Run a base JS rule on .jsx files - if JSX parsing fails, this will throw an error + const results: EngineRunResults = await engine.runRules(['no-console'], runOptions); + + // Should have violations from .jsx files (App.jsx has console.log) + // If JSX parsing failed, we'd get errors instead of violations + const jsxViolations = results.violations.filter(v => + v.codeLocations[0].file.endsWith('.jsx')); + expect(jsxViolations.length).toBeGreaterThan(0); + expect(jsxViolations.every(v => v.ruleName === 'no-console')).toBe(true); + }); }); describe('Tests for React Hooks rules', () => { From bc65b22987fbac3fdc6f6b5f1c5a36e5b421a0d1 Mon Sep 17 00:00:00 2001 From: Namrata Gupta Date: Mon, 19 Jan 2026 15:02:03 +0530 Subject: [PATCH 3/6] Adding changes for esm dependency update --- packages/code-analyzer-regex-engine/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/code-analyzer-regex-engine/package.json b/packages/code-analyzer-regex-engine/package.json index 7f9a438f..bd71907f 100644 --- a/packages/code-analyzer-regex-engine/package.json +++ b/packages/code-analyzer-regex-engine/package.json @@ -38,7 +38,7 @@ ], "scripts": { "build": "tsc --build tsconfig.build.json --verbose", - "test": "tsc --build tsconfig.json && jest --coverage", + "test": "tsc --build tsconfig.json && NODE_OPTIONS='--experimental-vm-modules' jest --coverage", "lint": "eslint src/**/*.ts", "package": "npm pack", "all": "npm run build && npm run lint && npm run test && npm run package", From 17ca102f1af5ae5c475a01787e6b9b2b5cbbe758 Mon Sep 17 00:00:00 2001 From: Namrata Gupta Date: Mon, 19 Jan 2026 16:03:45 +0530 Subject: [PATCH 4/6] reverting the binary file dependency to current version --- package-lock.json | 76 +++++++++++-------- .../code-analyzer-regex-engine/package.json | 4 +- .../code-analyzer-regex-engine/src/engine.ts | 14 +--- .../package.json | 2 +- .../src/utils.ts | 17 +---- 5 files changed, 53 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index eaffaaa4..bd1b785b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5750,18 +5750,6 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, - "node_modules/isbinaryfile": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-6.0.0.tgz", - "integrity": "sha512-2FN2B8MAqKv6d5TaKsLvMrwMcghxwHTpcKy0L5mhNbRqjNqo2++SpCqN6eG1lCC1GmTQgvrYJYXv2+Chvyevag==", - "license": "MIT", - "engines": { - "node": ">= 24.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -9300,10 +9288,10 @@ }, "packages/code-analyzer-core": { "name": "@salesforce/code-analyzer-core", - "version": "0.41.0", + "version": "0.42.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", "csv-stringify": "^6.6.0", "js-yaml": "^4.1.1", @@ -9559,7 +9547,7 @@ }, "packages/code-analyzer-engine-api": { "name": "@salesforce/code-analyzer-engine-api", - "version": "0.33.0", + "version": "0.34.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { "@types/node": "^20.0.0" @@ -9817,8 +9805,8 @@ "@lwc/eslint-plugin-lwc": "^3.3.0", "@lwc/eslint-plugin-lwc-platform": "^6.3.0", "@salesforce-ux/eslint-plugin-slds": "^1.1.0", - "@salesforce/code-analyzer-engine-api": "0.33.0", - "@salesforce/code-analyzer-eslint8-engine": "0.10.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", + "@salesforce/code-analyzer-eslint8-engine": "0.11.0-SNAPSHOT", "@salesforce/eslint-config-lwc": "^4.1.2", "@salesforce/eslint-plugin-lightning": "^2.0.0", "@types/node": "^20.0.0", @@ -10357,7 +10345,7 @@ }, "packages/code-analyzer-eslint8-engine": { "name": "@salesforce/code-analyzer-eslint8-engine", - "version": "0.10.0", + "version": "0.11.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { "@babel/core": "7.27.4", @@ -10365,7 +10353,7 @@ "@eslint/js": "8.57.1", "@lwc/eslint-plugin-lwc": "2.2.0", "@lwc/eslint-plugin-lwc-platform": "5.2.0", - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@salesforce/eslint-config-lwc": "3.7.2", "@salesforce/eslint-plugin-lightning": "1.0.1", "@types/node": "^20.0.0", @@ -10757,10 +10745,10 @@ }, "packages/code-analyzer-flow-engine": { "name": "@salesforce/code-analyzer-flow-engine", - "version": "0.32.0", + "version": "0.33.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", "@types/semver": "^7.7.1", "semver": "^7.7.3" @@ -11010,10 +10998,10 @@ }, "packages/code-analyzer-pmd-engine": { "name": "@salesforce/code-analyzer-pmd-engine", - "version": "0.34.0", + "version": "0.35.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", "@types/semver": "^7.7.1", "semver": "^7.7.3" @@ -11263,12 +11251,12 @@ }, "packages/code-analyzer-regex-engine": { "name": "@salesforce/code-analyzer-regex-engine", - "version": "0.31.0", + "version": "0.32.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", - "isbinaryfile": "^6.0.0", + "isbinaryfile": "^5.0.0", "p-limit": "^3.1.0" }, "devDependencies": { @@ -11501,6 +11489,18 @@ "node": ">= 4" } }, + "packages/code-analyzer-regex-engine/node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, "packages/code-analyzer-regex-engine/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -11516,12 +11516,12 @@ }, "packages/code-analyzer-retirejs-engine": { "name": "@salesforce/code-analyzer-retirejs-engine", - "version": "0.30.0", + "version": "0.31.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", - "isbinaryfile": "^6.0.0", + "isbinaryfile": "^5.0.0", "node-stream-zip": "^1.15.0", "retire": "^5.4.2" }, @@ -11755,6 +11755,18 @@ "node": ">= 4" } }, + "packages/code-analyzer-retirejs-engine/node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, "packages/code-analyzer-retirejs-engine/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -11770,10 +11782,10 @@ }, "packages/code-analyzer-sfge-engine": { "name": "@salesforce/code-analyzer-sfge-engine", - "version": "0.16.0", + "version": "0.17.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", "semver": "^7.7.3" }, @@ -12026,7 +12038,7 @@ "version": "0.1.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { - "@salesforce/code-analyzer-engine-api": "0.33.0", + "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0" }, "devDependencies": { diff --git a/packages/code-analyzer-regex-engine/package.json b/packages/code-analyzer-regex-engine/package.json index bd71907f..eacfcb4d 100644 --- a/packages/code-analyzer-regex-engine/package.json +++ b/packages/code-analyzer-regex-engine/package.json @@ -15,7 +15,7 @@ "dependencies": { "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", - "isbinaryfile": "^6.0.0", + "isbinaryfile": "^5.0.0", "p-limit": "^3.1.0" }, "devDependencies": { @@ -38,7 +38,7 @@ ], "scripts": { "build": "tsc --build tsconfig.build.json --verbose", - "test": "tsc --build tsconfig.json && NODE_OPTIONS='--experimental-vm-modules' jest --coverage", + "test": "tsc --build tsconfig.json && jest --coverage", "lint": "eslint src/**/*.ts", "package": "npm pack", "all": "npm run build && npm run lint && npm run test && npm run package", diff --git a/packages/code-analyzer-regex-engine/src/engine.ts b/packages/code-analyzer-regex-engine/src/engine.ts index 2451357b..199eea6e 100644 --- a/packages/code-analyzer-regex-engine/src/engine.ts +++ b/packages/code-analyzer-regex-engine/src/engine.ts @@ -11,19 +11,10 @@ import { import path from "node:path"; import fs from "node:fs"; import * as fsp from 'node:fs/promises'; +import {isBinaryFile} from 'isbinaryfile'; import {RegexRule, RegexRules} from "./config"; import {convertToRegex, PromiseExecutionLimiter} from "./utils"; -// Dynamic import for ESM-only isbinaryfile package -let isBinaryFile: typeof import('isbinaryfile').isBinaryFile; -const loadIsBinaryFile = async () => { - if (!isBinaryFile) { - const mod = await import('isbinaryfile'); - isBinaryFile = mod.isBinaryFile; - } - return isBinaryFile; -}; - const TEXT_BASED_FILE_EXTS = new Set( [ '.cjs', '.cls', '.cmp', '.css', '.csv', '.htm', '.html', '.js', '.json', '.jsx', '.md', '.mdt', '.mjs', '.page', @@ -227,8 +218,7 @@ function contextuallyDeriveEolString(contents: string): string { async function isTextFile(fileName: string): Promise { const ext: string = path.extname(fileName).toLowerCase(); - const isBinaryFileFn = await loadIsBinaryFile(); - return TEXT_BASED_FILE_EXTS.has(ext) || !(await isBinaryFileFn(fileName)); + return TEXT_BASED_FILE_EXTS.has(ext) || !(await isBinaryFile(fileName)); } type AsyncFilterFnc = (value: T) => Promise; diff --git a/packages/code-analyzer-retirejs-engine/package.json b/packages/code-analyzer-retirejs-engine/package.json index c7cb569e..977f1aef 100644 --- a/packages/code-analyzer-retirejs-engine/package.json +++ b/packages/code-analyzer-retirejs-engine/package.json @@ -15,7 +15,7 @@ "dependencies": { "@salesforce/code-analyzer-engine-api": "0.34.0-SNAPSHOT", "@types/node": "^20.0.0", - "isbinaryfile": "^6.0.0", + "isbinaryfile": "^5.0.0", "node-stream-zip": "^1.15.0", "retire": "^5.4.2" }, diff --git a/packages/code-analyzer-retirejs-engine/src/utils.ts b/packages/code-analyzer-retirejs-engine/src/utils.ts index d80f186b..d25d553e 100644 --- a/packages/code-analyzer-retirejs-engine/src/utils.ts +++ b/packages/code-analyzer-retirejs-engine/src/utils.ts @@ -1,16 +1,7 @@ import fs from "node:fs"; import path from "node:path"; +import {isBinaryFileSync} from "isbinaryfile"; import {getMessage} from "./messages"; - -// Dynamic import for ESM-only isbinaryfile package -let isBinaryFile: typeof import('isbinaryfile').isBinaryFile; -const loadIsBinaryFile = async () => { - if (!isBinaryFile) { - const mod = await import('isbinaryfile'); - isBinaryFile = mod.isBinaryFile; - } - return isBinaryFile; -}; /** * Attempts to create a symlink, and if that fails, attempts to create a link, and if that fails, just copies the file * @param srcFile Source file @@ -54,9 +45,9 @@ export function isZipFile(file: string) { * Determines if a file is a non-binary text file * @param file a file path or the Buffer of its contents */ -export async function isTextFile(file: string | Buffer): Promise { - const isBinaryFileFn = await loadIsBinaryFile(); - return !(await isBinaryFileFn(file)); +/* TODO: Make this function async */ +export function isTextFile(file: string | Buffer): boolean { + return !isBinaryFileSync(file); } /** From 7c970f597154fdc6d06ff40182cd9cb9f30c294b Mon Sep 17 00:00:00 2001 From: Namrata Gupta Date: Mon, 19 Jan 2026 16:17:27 +0530 Subject: [PATCH 5/6] minor fix --- packages/code-analyzer-retirejs-engine/src/executor.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/code-analyzer-retirejs-engine/src/executor.ts b/packages/code-analyzer-retirejs-engine/src/executor.ts index 7d350d80..3794ddee 100644 --- a/packages/code-analyzer-retirejs-engine/src/executor.ts +++ b/packages/code-analyzer-retirejs-engine/src/executor.ts @@ -159,7 +159,7 @@ export class AdvancedRetireJsExecutor implements RetireJsExecutor { * Note that this execute function assumes that only files are passed in. */ async execute(targetFiles: string[], workingFolder: string): Promise { - const { textFiles, zipFiles } = await separateTextAndZipFiles(targetFiles); + const { textFiles, zipFiles } = separateTextAndZipFiles(targetFiles); if (textFiles.length + zipFiles.length === 0) { return []; // Quick return } @@ -256,11 +256,11 @@ export class AdvancedRetireJsExecutor implements RetireJsExecutor { } } -async function separateTextAndZipFiles(files: string[]): Promise<{textFiles: string[], zipFiles: string[]}> { +function separateTextAndZipFiles(files: string[]): {textFiles: string[], zipFiles: string[]} { const textFiles: string[] = []; const zipFiles: string[] = []; for (const file of files) { - if (file.toLowerCase().endsWith(".js") || (await utils.isTextFile(file))) { + if (file.toLowerCase().endsWith(".js") || utils.isTextFile(file)) { textFiles.push(file); } else if (utils.isZipFile(file)) { zipFiles.push(file); From 53ee102530a3a1b1bf78af20a37be39ba46ae04d Mon Sep 17 00:00:00 2001 From: Namrata Gupta Date: Mon, 19 Jan 2026 16:18:09 +0530 Subject: [PATCH 6/6] minor fix --- packages/code-analyzer-retirejs-engine/src/executor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/code-analyzer-retirejs-engine/src/executor.ts b/packages/code-analyzer-retirejs-engine/src/executor.ts index 3794ddee..79da404a 100644 --- a/packages/code-analyzer-retirejs-engine/src/executor.ts +++ b/packages/code-analyzer-retirejs-engine/src/executor.ts @@ -224,7 +224,7 @@ export class AdvancedRetireJsExecutor implements RetireJsExecutor { const zip: DecoratedStreamZip = new DecoratedStreamZip({file: zipFile, storeEntries: true}); const entries = await zip.entries(); for (const entry of Object.values(entries)) { - if (entry.isDirectory || !(await utils.isTextFile(await zip.entryData(entry.name)))) { + if (entry.isDirectory || !utils.isTextFile(await zip.entryData(entry.name))) { continue; // Skip directories and non-text files. } const zippedFileInfo: path.ParsedPath = path.parse(entry.name);