From 942ca4b0d60ac3191ee0c7aba5fda6694edccf72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Sep 2026 22:35:17 +0000 Subject: [PATCH 1/2] build(deps-dev): bump esbuild Bumps the npm_and_yarn group with 1 update in the / directory: [esbuild](https://github.com/evanw/esbuild). Updates `esbuild` from 0.20.2 to 0.28.2 - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG-2024.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.20.2...v0.28.2) --- updated-dependencies: - dependency-name: esbuild dependency-version: 0.28.2 dependency-type: direct:development dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- package-lock.json | 764 ++++++++++------------------------------------ package.json | 2 +- 2 files changed, 156 insertions(+), 610 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2396261..be59ada 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "greenops-cli", - "version": "0.13.0", + "version": "0.14.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "greenops-cli", - "version": "0.13.0", + "version": "0.14.0", "license": "MIT", "bin": { "greenops-cli": "dist/index.cjs" }, "devDependencies": { "@types/node": "^20.0.0", - "esbuild": "^0.20.0", + "esbuild": "^0.28.2", "tsx": "^4.0.0", "typescript": "^5.0.0" }, @@ -22,9 +22,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" ], @@ -35,13 +35,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" ], @@ -52,13 +52,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" ], @@ -69,13 +69,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], @@ -86,13 +86,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], @@ -103,13 +103,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" ], @@ -120,13 +120,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], @@ -137,13 +137,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], @@ -154,13 +154,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], @@ -171,13 +171,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], @@ -188,13 +188,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" ], @@ -205,13 +205,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" ], @@ -222,13 +222,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" ], @@ -239,13 +239,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" ], @@ -256,13 +256,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" ], @@ -273,13 +273,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" ], @@ -290,13 +290,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" ], @@ -306,31 +306,14 @@ "os": [ "linux" ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", - "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" ], @@ -340,31 +323,14 @@ "os": [ "netbsd" ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", - "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" ], @@ -374,31 +340,14 @@ "os": [ "openbsd" ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", - "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" ], @@ -409,13 +358,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" ], @@ -426,13 +375,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" ], @@ -443,13 +392,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], @@ -460,7 +409,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@types/node": { @@ -474,9 +423,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -484,391 +433,47 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", - "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" + "node": ">=18" }, "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", - "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", - "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", - "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", - "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", - "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", - "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", - "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", - "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", - "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", - "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", - "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", - "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", - "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", - "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", - "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", - "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", - "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", - "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, "os": [ "netbsd" ], @@ -876,12 +481,12 @@ "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", - "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", @@ -893,27 +498,10 @@ "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", - "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", - "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "node_modules/esbuild/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ "arm64" ], @@ -921,86 +509,44 @@ "license": "MIT", "optional": true, "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", - "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" + "openharmony" ], "engines": { "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", - "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", - "cpu": [ - "x64" - ], + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { - "node": ">=18" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", - "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "node_modules/tsx": { + "version": "4.23.13", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.13.tgz", + "integrity": "sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw==", "dev": true, - "hasInstallScript": true, "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, "bin": { - "esbuild": "bin/esbuild" + "tsx": "dist/cli.mjs" }, "engines": { - "node": ">=18" + "node": ">=18.0.0" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.4", - "@esbuild/android-arm": "0.27.4", - "@esbuild/android-arm64": "0.27.4", - "@esbuild/android-x64": "0.27.4", - "@esbuild/darwin-arm64": "0.27.4", - "@esbuild/darwin-x64": "0.27.4", - "@esbuild/freebsd-arm64": "0.27.4", - "@esbuild/freebsd-x64": "0.27.4", - "@esbuild/linux-arm": "0.27.4", - "@esbuild/linux-arm64": "0.27.4", - "@esbuild/linux-ia32": "0.27.4", - "@esbuild/linux-loong64": "0.27.4", - "@esbuild/linux-mips64el": "0.27.4", - "@esbuild/linux-ppc64": "0.27.4", - "@esbuild/linux-riscv64": "0.27.4", - "@esbuild/linux-s390x": "0.27.4", - "@esbuild/linux-x64": "0.27.4", - "@esbuild/netbsd-arm64": "0.27.4", - "@esbuild/netbsd-x64": "0.27.4", - "@esbuild/openbsd-arm64": "0.27.4", - "@esbuild/openbsd-x64": "0.27.4", - "@esbuild/openharmony-arm64": "0.27.4", - "@esbuild/sunos-x64": "0.27.4", - "@esbuild/win32-arm64": "0.27.4", - "@esbuild/win32-ia32": "0.27.4", - "@esbuild/win32-x64": "0.27.4" + "fsevents": "~2.3.3" } }, "node_modules/typescript": { diff --git a/package.json b/package.json index b1cc815..0aaae4b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ }, "devDependencies": { "@types/node": "^20.0.0", - "esbuild": "^0.20.0", + "esbuild": "^0.28.2", "typescript": "^5.0.0", "tsx": "^4.0.0" } From afe43b84a01f4f1037802b02d82ed6679585dad1 Mon Sep 17 00:00:00 2001 From: o-webdev <116458341+omrdev1@users.noreply.github.com> Date: Wed, 9 Sep 2026 23:39:40 +0100 Subject: [PATCH 2/2] build: rebuild dist/index.cjs with bumped esbuild (^0.28.2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dependabot bumped the pinned esbuild version but, as with the prior 0.20.x mismatch (37c6301), doesn't rebuild committed artifacts. Rebuilt via npm ci + npm run build against the new pinned version. Verified identical runtime behavior (same version output, same coverage counts, same live multi-provider diff output) before committing — only minifier formatting of control-flow statements differs, confirmed cosmetic via 155/155 passing tests and a live compiled-binary check. Claude-Session: https://claude.ai/code/session_01SMLcfinZD1kcQVcxJoSC8b --- dist/index.cjs | 244 +++++++++++++++++-------------------------------- 1 file changed, 82 insertions(+), 162 deletions(-) diff --git a/dist/index.cjs b/dist/index.cjs index b0536d3..904c2ad 100755 --- a/dist/index.cjs +++ b/dist/index.cjs @@ -1689,7 +1689,7 @@ var package_default = { }, devDependencies: { "@types/node": "^20.0.0", - esbuild: "^0.20.0", + esbuild: "^0.28.2", typescript: "^5.0.0", tsx: "^4.0.0" } @@ -1731,87 +1731,66 @@ var COMPUTE_RELEVANT_TYPES = [ "google_container_cluster" ]; function detectProvider(resourceType) { - if (resourceType.startsWith("aws_")) - return "aws"; - if (resourceType.startsWith("azurerm_")) - return "azure"; - if (resourceType.startsWith("google_")) - return "gcp"; + if (resourceType.startsWith("aws_")) return "aws"; + if (resourceType.startsWith("azurerm_")) return "azure"; + if (resourceType.startsWith("google_")) return "gcp"; return null; } function extractProviderRegions(plan) { const result2 = { aws: null, azure: null, gcp: null }; const providerConfig = plan.configuration?.provider_config; - if (!providerConfig) - return result2; + if (!providerConfig) return result2; for (const [key, provider] of Object.entries(providerConfig)) { if (key === "aws" || key.startsWith("aws.")) { const alias = provider.expressions?.alias?.constant_value; - if (alias && key !== "aws") - continue; + if (alias && key !== "aws") continue; const region = provider.expressions?.region?.constant_value; - if (region && !result2.aws) - result2.aws = region; + if (region && !result2.aws) result2.aws = region; } if (key === "azurerm" || key.startsWith("azurerm.")) { const location = provider.expressions?.location?.constant_value; - if (location && !result2.azure) - result2.azure = location; + if (location && !result2.azure) result2.azure = location; } if (key === "google" || key.startsWith("google.")) { const region = provider.expressions?.region?.constant_value; - if (region && !result2.gcp) - result2.gcp = region; + if (region && !result2.gcp) result2.gcp = region; } } return result2; } function isKnownAfterApply(change, fieldPath) { - if (!change) - return true; - if (change.after_unknown?.[fieldPath] === true) - return true; - if (change.after?.[fieldPath] === null || change.after?.[fieldPath] === void 0) - return true; + if (!change) return true; + if (change.after_unknown?.[fieldPath] === true) return true; + if (change.after?.[fieldPath] === null || change.after?.[fieldPath] === void 0) return true; return false; } function resolveAwsRegion(change, providerRegion) { if (change?.after?.arn && typeof change.after.arn === "string") { const parts = change.after.arn.split(":"); - if (parts.length >= 4 && parts[3]) - return parts[3]; + if (parts.length >= 4 && parts[3]) return parts[3]; } if (change?.after?.availability_zone && typeof change.after.availability_zone === "string") { const azMatch = change.after.availability_zone.match(/^([a-z]{2}-[a-z]+-\d+)/); - if (azMatch) - return azMatch[1]; - } - if (change?.after?.region && typeof change.after.region === "string") - return change.after.region; - if (change?.before?.region && typeof change.before.region === "string") - return change.before.region; - if (providerRegion) - return providerRegion; + if (azMatch) return azMatch[1]; + } + if (change?.after?.region && typeof change.after.region === "string") return change.after.region; + if (change?.before?.region && typeof change.before.region === "string") return change.before.region; + if (providerRegion) return providerRegion; return null; } function resolveAzureRegion(change, providerRegion) { const raw = change?.after?.location ?? change?.before?.location ?? providerRegion; - if (!raw || typeof raw !== "string") - return null; + if (!raw || typeof raw !== "string") return null; return raw.toLowerCase().replace(/\s+/g, ""); } function resolveGcpRegion(change, providerRegion) { - if (change?.after?.region && typeof change.after.region === "string") - return change.after.region; + if (change?.after?.region && typeof change.after.region === "string") return change.after.region; if (change?.after?.zone && typeof change.after.zone === "string") { const zoneMatch = change.after.zone.match(/^([a-z]+-[a-z]+\d+)/); - if (zoneMatch) - return zoneMatch[1]; + if (zoneMatch) return zoneMatch[1]; } - if (change?.before?.region && typeof change.before.region === "string") - return change.before.region; - if (providerRegion) - return providerRegion; + if (change?.before?.region && typeof change.before.region === "string") return change.before.region; + if (providerRegion) return providerRegion; return null; } function extractAwsInstanceType(res, plannedValuesMap) { @@ -1819,32 +1798,26 @@ function extractAwsInstanceType(res, plannedValuesMap) { const typeField = isDb ? "instance_class" : "instance_type"; if (isKnownAfterApply(res.change, typeField)) { const plannedType = plannedValuesMap.get(res.address)?.[typeField]; - if (typeof plannedType !== "string") - return { instanceType: null, skipReason: "known_after_apply" }; - if (!res.change.after) - res.change.after = {}; + if (typeof plannedType !== "string") return { instanceType: null, skipReason: "known_after_apply" }; + if (!res.change.after) res.change.after = {}; res.change.after[typeField] = plannedType; } let instanceType = res.change?.after?.[typeField]; - if (typeof instanceType !== "string") - return { instanceType: null, skipReason: "known_after_apply" }; + if (typeof instanceType !== "string") return { instanceType: null, skipReason: "known_after_apply" }; if (isDb && instanceType.startsWith("db.")) { instanceType = instanceType.replace(/^db\./, ""); - if (!instanceType.includes(".")) - return { instanceType: null, skipReason: "unsupported_instance" }; + if (!instanceType.includes(".")) return { instanceType: null, skipReason: "unsupported_instance" }; } return { instanceType }; } function extractAzureInstanceType(res) { const size = res.change?.after?.size ?? res.change?.before?.size; - if (!size || typeof size !== "string") - return { instanceType: null, skipReason: "known_after_apply" }; + if (!size || typeof size !== "string") return { instanceType: null, skipReason: "known_after_apply" }; return { instanceType: size }; } function extractGcpInstanceType(res) { const machineType = res.change?.after?.machine_type ?? res.change?.before?.machine_type; - if (!machineType || typeof machineType !== "string") - return { instanceType: null, skipReason: "known_after_apply" }; + if (!machineType || typeof machineType !== "string") return { instanceType: null, skipReason: "known_after_apply" }; return { instanceType: machineType }; } function extractNodeGroupInput(res, provider) { @@ -1858,8 +1831,7 @@ function extractNodeGroupInput(res, provider) { const desiredSize = scaling?.desired_size; const minSize = scaling?.min_size; const nodeCount2 = typeof minSize === "number" ? minSize : typeof desiredSize === "number" ? desiredSize : 1; - if (!instanceType2) - return { instanceType: null, nodeCount: nodeCount2, skipReason: "known_after_apply" }; + if (!instanceType2) return { instanceType: null, nodeCount: nodeCount2, skipReason: "known_after_apply" }; return { instanceType: instanceType2, nodeCount: nodeCount2 }; } if (provider === "azure") { @@ -1870,8 +1842,7 @@ function extractNodeGroupInput(res, provider) { const nodeCountField = pool?.node_count ?? after.node_count ?? before.node_count; const minCountField = pool?.min_count ?? after.min_count ?? before.min_count; const nodeCount2 = typeof minCountField === "number" ? minCountField : typeof nodeCountField === "number" ? nodeCountField : 1; - if (!instanceType2) - return { instanceType: null, nodeCount: nodeCount2, skipReason: "known_after_apply" }; + if (!instanceType2) return { instanceType: null, nodeCount: nodeCount2, skipReason: "known_after_apply" }; return { instanceType: instanceType2, nodeCount: nodeCount2 }; } const nodeConfig = after.node_config ?? before.node_config; @@ -1883,8 +1854,7 @@ function extractNodeGroupInput(res, provider) { const autoscalingConfig = Array.isArray(autoscaling) ? autoscaling[0] : void 0; const minNodeCount = autoscalingConfig?.min_node_count; const nodeCount = typeof minNodeCount === "number" ? minNodeCount : typeof initialNodeCount === "number" ? initialNodeCount : 1; - if (!instanceType) - return { instanceType: null, nodeCount, skipReason: "known_after_apply" }; + if (!instanceType) return { instanceType: null, nodeCount, skipReason: "known_after_apply" }; return { instanceType, nodeCount }; } function stripSageMakerPrefix(mlInstanceType) { @@ -1897,15 +1867,13 @@ function extractManagedAiInput(res, provider) { const variants = after.production_variants ?? before.production_variants; const variant = Array.isArray(variants) ? variants[0] : void 0; const rawType = variant?.instance_type; - if (typeof rawType !== "string") - return { instanceType: null, skipReason: "known_after_apply" }; + if (typeof rawType !== "string") return { instanceType: null, skipReason: "known_after_apply" }; return { instanceType: `managed_ai:sagemaker:${stripSageMakerPrefix(rawType)}` }; } const gceSetup = after.gce_setup ?? before.gce_setup; const setup = Array.isArray(gceSetup) ? gceSetup[0] : void 0; const machineType = setup?.machine_type; - if (typeof machineType !== "string") - return { instanceType: null, skipReason: "known_after_apply" }; + if (typeof machineType !== "string") return { instanceType: null, skipReason: "known_after_apply" }; const accelerators = setup?.accelerator_configs; const accelerator = Array.isArray(accelerators) ? accelerators[0] : void 0; const acceleratorType = accelerator?.type; @@ -1928,8 +1896,7 @@ function extractServerlessInput(res, provider, providerRegions, plannedValuesMap let region = null; if (provider === "aws") { const raw = after.memory_size ?? plannedValues.memory_size; - if (typeof raw === "number") - memoryMb = raw; + if (typeof raw === "number") memoryMb = raw; region = resolveAwsRegion(res.change, providerRegions.aws); } else if (provider === "azure") { memoryMb = 256; @@ -1950,8 +1917,7 @@ function extractServerlessInput(res, provider, providerRegions, plannedValuesMap } region = resolveGcpRegion(res.change, providerRegions.gcp); } - if (!region) - return { resourceInput: null, skipReason: "known_after_apply" }; + if (!region) return { resourceInput: null, skipReason: "known_after_apply" }; const instanceType = `serverless:${memoryMb}mb:${invocationsPerMonth}inv:${avgDurationMs}ms`; return { resourceInput: { @@ -1987,8 +1953,7 @@ function extractResourceInputs(planFilePath) { const providerRegions = extractProviderRegions(typedPlan); const plannedValuesMap = /* @__PURE__ */ new Map(); for (const r of typedPlan.planned_values?.root_module?.resources ?? []) { - if (r.address && r.values) - plannedValuesMap.set(r.address, r.values); + if (r.address && r.values) plannedValuesMap.set(r.address, r.values); } const allSupportedTypes = Object.values(SUPPORTED_TYPES).flat(); const allServerlessTypes = Object.values(SUPPORTED_SERVERLESS_TYPES).flat(); @@ -2002,8 +1967,7 @@ function extractResourceInputs(planFilePath) { } const provider = detectProvider(res.type); if (allServerlessTypes.includes(res.type)) { - if (!provider) - continue; + if (!provider) continue; const { resourceInput, skipReason: skipReason2 } = extractServerlessInput( res, provider, @@ -2018,8 +1982,7 @@ function extractResourceInputs(planFilePath) { continue; } if (allNodeGroupTypes.includes(res.type)) { - if (!provider) - continue; + if (!provider) continue; const { instanceType: instanceType2, nodeCount, skipReason: skipReason2 } = extractNodeGroupInput(res, provider); if (!instanceType2) { result2.skipped.push({ resourceId: res.address, reason: skipReason2 ?? "known_after_apply" }); @@ -2034,8 +1997,7 @@ function extractResourceInputs(planFilePath) { continue; } if (allManagedAiTypes.includes(res.type)) { - if (!provider) - continue; + if (!provider) continue; const { instanceType: instanceType2, skipReason: skipReason2 } = extractManagedAiInput(res, provider); if (!instanceType2) { result2.skipped.push({ resourceId: res.address, reason: skipReason2 ?? "known_after_apply" }); @@ -2055,8 +2017,7 @@ function extractResourceInputs(planFilePath) { } continue; } - if (!provider) - continue; + if (!provider) continue; let instanceType = null; let skipReason; let region = null; @@ -2064,20 +2025,17 @@ function extractResourceInputs(planFilePath) { const extracted2 = extractAwsInstanceType(res, plannedValuesMap); instanceType = extracted2.instanceType; skipReason = extracted2.skipReason; - if (instanceType) - region = resolveAwsRegion(res.change, providerRegions.aws); + if (instanceType) region = resolveAwsRegion(res.change, providerRegions.aws); } else if (provider === "azure") { const extracted2 = extractAzureInstanceType(res); instanceType = extracted2.instanceType; skipReason = extracted2.skipReason; - if (instanceType) - region = resolveAzureRegion(res.change, providerRegions.azure); + if (instanceType) region = resolveAzureRegion(res.change, providerRegions.azure); } else if (provider === "gcp") { const extracted2 = extractGcpInstanceType(res); instanceType = extracted2.instanceType; skipReason = extracted2.skipReason; - if (instanceType) - region = resolveGcpRegion(res.change, providerRegions.gcp); + if (instanceType) region = resolveGcpRegion(res.change, providerRegions.gcp); } if (!instanceType || skipReason) { result2.skipped.push({ resourceId: res.address, reason: skipReason ?? "known_after_apply" }); @@ -2119,24 +2077,19 @@ function wattsToWater(watts, hours, wue) { function getCleanerRegion(currentRegion, instanceType, provider, ledger) { const providerLedger = ledger[provider]; const regions = Object.entries(providerLedger.regions).filter(([regionId]) => { - if (regionId === currentRegion) - return false; + if (regionId === currentRegion) return false; return !!providerLedger.pricing_usd_per_hour[regionId]?.[instanceType]; }).sort(([, a], [, b]) => a.grid_intensity_gco2e_per_kwh - b.grid_intensity_gco2e_per_kwh); - if (regions.length === 0) - return null; + if (regions.length === 0) return null; const [cleanestRegionId, cleanestRegion] = regions[0]; const currentIntensity = providerLedger.regions[currentRegion]?.grid_intensity_gco2e_per_kwh ?? Infinity; - if (cleanestRegion.grid_intensity_gco2e_per_kwh >= currentIntensity * 0.9) - return null; + if (cleanestRegion.grid_intensity_gco2e_per_kwh >= currentIntensity * 0.9) return null; return cleanestRegionId; } function parseServerlessInstanceType(instanceType) { - if (!instanceType.startsWith("serverless:")) - return null; + if (!instanceType.startsWith("serverless:")) return null; const match = instanceType.match(/^serverless:(\d+)mb:(\d+)inv:(\d+)ms$/); - if (!match) - return null; + if (!match) return null; return { memoryMb: parseInt(match[1], 10), invocationsPerMonth: parseInt(match[2], 10), @@ -2181,11 +2134,9 @@ function calculateServerlessBaseline(input, params, regionData) { }; } function parseManagedAiInstanceType(instanceType) { - if (!instanceType.startsWith("managed_ai:")) - return null; + if (!instanceType.startsWith("managed_ai:")) return null; const match = instanceType.match(/^managed_ai:([a-z_]+):(.+)$/); - if (!match) - return null; + if (!match) return null; return { service: match[1], baseInstanceType: match[2] }; } function calculateManagedAiBaseline(input, params, providerLedger, regionData, utilization, hours, provider, ledgerVersion) { @@ -2275,11 +2226,9 @@ function calculateManagedAiBaseline(input, params, providerLedger, regionData, u }; } function parseGpuAttachedInstanceType(instanceType) { - if (!instanceType.startsWith("gpu_attached:")) - return null; + if (!instanceType.startsWith("gpu_attached:")) return null; const match = instanceType.match(/^gpu_attached:(.+):(\d+(?:\.\d+)?):(\d+)$/); - if (!match) - return null; + if (!match) return null; return { baseMachineType: match[1], acceleratorWatts: parseFloat(match[2]), @@ -2460,8 +2409,7 @@ function calculateBaseline(input, ledger = factors_default) { }; } function generateRecommendation(input, baseline, ledger = factors_default) { - if (baseline.confidence === "LOW_ASSUMED_DEFAULT") - return null; + if (baseline.confidence === "LOW_ASSUMED_DEFAULT") return null; const provider = input.provider ?? "aws"; const providerLedger = ledger[provider]; const candidates = []; @@ -2486,8 +2434,7 @@ function generateRecommendation(input, baseline, ledger = factors_default) { } } } - if (candidates.length === 0) - return null; + if (candidates.length === 0) return null; const scored = candidates.map((rec) => { const co2Pct = baseline.totalCo2eGramsPerMonth > 0 ? Math.abs(rec.co2eDeltaGramsPerMonth) / baseline.totalCo2eGramsPerMonth : 0; const costPct = baseline.totalCostUsdPerMonth > 0 ? Math.abs(rec.costDeltaUsdPerMonth) / baseline.totalCostUsdPerMonth : 0; @@ -2548,8 +2495,7 @@ function parseMinimalYaml(content) { let currentObj = {}; for (const rawLine of lines) { const line = rawLine.replace(/#.*$/, "").trimEnd(); - if (!line.trim()) - continue; + if (!line.trim()) continue; const indent = line.match(/^(\s*)/)?.[1]?.length ?? 0; const trimmed = line.trim(); if (indent === 0) { @@ -2557,8 +2503,7 @@ function parseMinimalYaml(content) { result2[currentSection] = { ...currentObj }; } const colonIdx = trimmed.indexOf(":"); - if (colonIdx === -1) - continue; + if (colonIdx === -1) continue; const key = trimmed.slice(0, colonIdx).trim(); const val = trimmed.slice(colonIdx + 1).trim(); if (val === "" || val === null) { @@ -2569,11 +2514,9 @@ function parseMinimalYaml(content) { result2[key] = parseScalar(val); } } else { - if (!currentSection) - continue; + if (!currentSection) continue; const colonIdx = trimmed.indexOf(":"); - if (colonIdx === -1) - continue; + if (colonIdx === -1) continue; const key = trimmed.slice(0, colonIdx).trim(); const val = trimmed.slice(colonIdx + 1).trim(); if (val !== "") { @@ -2587,15 +2530,11 @@ function parseMinimalYaml(content) { return result2; } function parseScalar(val) { - if (val === "true") - return true; - if (val === "false") - return false; - if (val === "null" || val === "~") - return null; + if (val === "true") return true; + if (val === "false") return false; + if (val === "null" || val === "~") return null; const num = Number(val); - if (!isNaN(num) && val !== "") - return num; + if (!isNaN(num) && val !== "") return num; if (val.startsWith('"') && val.endsWith('"') || val.startsWith("'") && val.endsWith("'")) { return val.slice(1, -1); } @@ -2603,8 +2542,7 @@ function parseScalar(val) { } function loadPolicy(repoRoot = process.cwd()) { const policyPath = (0, import_node_path2.resolve)(repoRoot, ".greenops.yml"); - if (!(0, import_node_fs2.existsSync)(policyPath)) - return null; + if (!(0, import_node_fs2.existsSync)(policyPath)) return null; let raw; try { raw = (0, import_node_fs2.readFileSync)(policyPath, "utf8"); @@ -2733,8 +2671,7 @@ async function githubRequest(method, path, token, body) { } throw new Error(`GitHub API ${method} ${path} \u2192 ${response.status}: ${text.slice(0, 200)}`); } - if (response.status === 204) - return {}; + if (response.status === 204) return {}; return response.json(); } async function getPRFiles(token, repoFullName, pullNumber) { @@ -2775,8 +2712,7 @@ function buildLineMap(patch) { lineNum = parseInt(hunkMatch[1], 10) - 1; continue; } - if (line.startsWith("-")) - continue; + if (line.startsWith("-")) continue; lineNum++; const content = line.startsWith("+") ? line.slice(1) : line; map.set(content.trim(), lineNum); @@ -2792,8 +2728,7 @@ function buildAddressFileMap(planFilePath) { const raw = readFileSync3(resolvedPath, "utf8"); const plan = JSON.parse(raw); const rootModule = plan?.configuration?.root_module; - if (!rootModule) - return map; + if (!rootModule) return map; extractAddressFileEntries(rootModule?.resources ?? [], map); for (const [, mod] of Object.entries(rootModule?.module_calls ?? {})) { extractModuleResources(mod?.module ?? {}, map, ""); @@ -2807,8 +2742,7 @@ function extractAddressFileEntries(resources, map) { const r = res; if (r.address && r.pos) { const filename = r.pos.filename; - if (filename) - map.set(r.address, filename); + if (filename) map.set(r.address, filename); } } } @@ -2818,8 +2752,7 @@ function extractModuleResources(mod, map, prefix) { if (r.address && r.pos) { const filename = r.pos.filename; const fullAddress = prefix ? `${prefix}.${r.address}` : r.address; - if (filename) - map.set(fullAddress, filename); + if (filename) map.set(fullAddress, filename); } } for (const [, child] of Object.entries(mod.module_calls ?? {})) { @@ -2879,17 +2812,14 @@ async function getExistingSuggestionComments(token, repoFullName, pullNumber) { return allComments.filter((c) => c.body.includes(GREENOPS_MARKER)); } function resolveAttributeKey(provider, isDb) { - if (provider === "azure") - return "size"; - if (provider === "gcp") - return "machine_type"; + if (provider === "azure") return "size"; + if (provider === "gcp") return "machine_type"; return isDb ? "instance_class" : "instance_type"; } async function postSuggestions(result2, ctx) { const output = { posted: 0, updated: 0, skipped: 0, warnings: [] }; const resourcesWithRecs = result2.resources.filter((r) => r.recommendation !== null); - if (resourcesWithRecs.length === 0) - return output; + if (resourcesWithRecs.length === 0) return output; const addressFileMap = buildAddressFileMap(ctx.planFilePath); let prFiles; let existingComments; @@ -2905,8 +2835,7 @@ async function postSuggestions(result2, ctx) { const tfFiles = prFiles.filter((f) => f.filename.endsWith(".tf") && f.patch); const tfFileMap = new Map(tfFiles.map((f) => [f.filename, f])); for (const { input, recommendation } of resourcesWithRecs) { - if (!recommendation) - continue; + if (!recommendation) continue; const provider = input.provider; const isDb = provider === "aws" && (input.resourceId.includes("aws_db_instance") || input.instanceType.startsWith("db.")); const attributeKey = resolveAttributeKey(provider, isDb); @@ -2924,8 +2853,7 @@ async function postSuggestions(result2, ctx) { const filesToSearch = knownFile && tfFileMap.has(knownFile) ? [tfFileMap.get(knownFile), ...tfFiles.filter((f) => f.filename !== knownFile)] : tfFiles; let matched = false; for (const file of filesToSearch) { - if (!file.patch) - continue; + if (!file.patch) continue; const lineMap = buildLineMap(file.patch); const resourceType = input.resourceId.split(".")[0] ?? ""; const resourceName = input.resourceId.split(".").slice(1).join(".") ?? ""; @@ -2939,8 +2867,7 @@ async function postSuggestions(result2, ctx) { searchPattern, lineMap ); - if (!lineNumber) - continue; + if (!lineNumber) continue; const originalLine = ` ${attributeKey} = "${currentValue}"`; const body = buildSuggestionBody( input.resourceId, @@ -3007,8 +2934,7 @@ function findAttributeLineAfterHeader(patch, resourceHeaderPattern, attributePat lineNum = parseInt(hunkMatch[1], 10) - 1; continue; } - if (!line.startsWith("-")) - lineNum++; + if (!line.startsWith("-")) lineNum++; const content = (line.startsWith("+") ? line.slice(1) : line).trim(); if (!inTargetBlock) { if (content.includes(resourceHeaderPattern)) { @@ -3045,8 +2971,7 @@ function formatGrams(grams) { return `${(grams / 1e3).toFixed(2)}kg`; } function formatInstanceTypeLabel(instanceType) { - if (instanceType.startsWith("serverless:")) - return "serverless"; + if (instanceType.startsWith("serverless:")) return "serverless"; const managedAiMatch = instanceType.match(/^managed_ai:([a-z_]+):(.+)$/); if (managedAiMatch) { const [, service, baseType] = managedAiMatch; @@ -3064,8 +2989,7 @@ function formatInstanceTypeLabel(instanceType) { // formatters/markdown.ts function formatWater(litres) { - if (litres >= 1e3) - return `${(litres / 1e3).toFixed(2)}m\xB3`; + if (litres >= 1e3) return `${(litres / 1e3).toFixed(2)}m\xB3`; return `${litres.toFixed(1)}L`; } var RAW_GPU_INSTANCE_TYPES = /* @__PURE__ */ new Set([ @@ -3083,10 +3007,8 @@ function isAiResource(instanceType) { return RAW_GPU_INSTANCE_TYPES.has(instanceType) || instanceType.startsWith("managed_ai:") || instanceType.startsWith("gpu_attached:"); } function aiResourceKind(instanceType) { - if (instanceType.startsWith("managed_ai:")) - return "SageMaker"; - if (instanceType.startsWith("gpu_attached:")) - return "Vertex AI Workbench"; + if (instanceType.startsWith("managed_ai:")) return "SageMaker"; + if (instanceType.startsWith("gpu_attached:")) return "Vertex AI Workbench"; return "GPU"; } function formatMarkdown(result2, options = {}) { @@ -3278,13 +3200,11 @@ function formatMarkdown(result2, options = {}) { // formatters/table.ts function truncate(str, len) { const visible = str.replace(/\x1b\[[0-9;]*m/g, ""); - if (visible.length > len) - return visible.substring(0, len - 3) + "..."; + if (visible.length > len) return visible.substring(0, len - 3) + "..."; return visible + " ".repeat(len - visible.length); } function formatWater2(litres) { - if (litres >= 1e3) - return `${(litres / 1e3).toFixed(1)}m\xB3`; + if (litres >= 1e3) return `${(litres / 1e3).toFixed(1)}m\xB3`; return `${litres.toFixed(1)}L`; } function formatTable(result2) {