From 358baa26f6301d5250a068dcf44bc12082ffa886 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Mon, 22 Dec 2025 15:53:15 +0200 Subject: [PATCH 01/12] chore(devextreme): create the localization gulp task alternative based on nx --- pnpm-lock.yaml | 837 +++++++++++++++++++------------------------------ 1 file changed, 320 insertions(+), 517 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68ab14428bd0..c064d1620e6d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2807,10 +2807,6 @@ packages: resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.6': resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} engines: {node: '>=6.9.0'} @@ -2846,10 +2842,6 @@ packages: resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.28.6': resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} engines: {node: '>=6.9.0'} @@ -2862,10 +2854,6 @@ packages: resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} @@ -2876,12 +2864,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.28.5': - resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.28.6': resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} engines: {node: '>=6.9.0'} @@ -2939,12 +2921,6 @@ packages: resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.28.6': resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} @@ -3009,10 +2985,6 @@ packages: resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} - engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} @@ -3060,12 +3032,6 @@ packages: peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': - resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} engines: {node: '>=6.9.0'} @@ -3122,12 +3088,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.27.1': - resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.28.6': resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} engines: {node: '>=6.9.0'} @@ -3270,12 +3230,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.5': - resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.6': resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} engines: {node: '>=6.9.0'} @@ -3288,12 +3242,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.27.1': - resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.28.6': resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} engines: {node: '>=6.9.0'} @@ -3306,36 +3254,18 @@ packages: peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-class-static-block@7.28.3': - resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - '@babel/plugin-transform-class-static-block@7.28.6': resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.28.4': - resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-classes@7.28.6': resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.27.1': - resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.28.6': resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} engines: {node: '>=6.9.0'} @@ -3348,12 +3278,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.27.1': - resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.28.6': resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} engines: {node: '>=6.9.0'} @@ -3402,12 +3326,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.28.5': - resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.28.6': resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} engines: {node: '>=6.9.0'} @@ -3438,12 +3356,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.27.1': - resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.28.6': resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} engines: {node: '>=6.9.0'} @@ -3456,12 +3368,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.28.5': - resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.28.6': resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} engines: {node: '>=6.9.0'} @@ -3510,24 +3416,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': - resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.27.1': - resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.28.6': resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} engines: {node: '>=6.9.0'} @@ -3540,12 +3434,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.4': - resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.6': resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} engines: {node: '>=6.9.0'} @@ -3558,24 +3446,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.27.1': - resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.28.6': resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.28.5': - resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.28.6': resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} engines: {node: '>=6.9.0'} @@ -3594,24 +3470,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.27.1': - resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.28.6': resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.27.1': - resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.28.6': resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} engines: {node: '>=6.9.0'} @@ -3660,12 +3524,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.4': - resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.6': resolution: {integrity: sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==} engines: {node: '>=6.9.0'} @@ -3720,12 +3578,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.27.1': - resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.28.6': resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} engines: {node: '>=6.9.0'} @@ -3762,12 +3614,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.27.1': - resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.28.6': resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} engines: {node: '>=6.9.0'} @@ -3780,12 +3626,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.27.1': - resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/plugin-transform-unicode-sets-regex@7.28.6': resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} engines: {node: '>=6.9.0'} @@ -6884,9 +6724,6 @@ packages: '@types/express-serve-static-core@5.0.1': resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==} - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - '@types/express@4.17.25': resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} @@ -9163,10 +9000,6 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.7.5: - resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} - engines: {node: '>= 0.8.0'} - compression@1.8.1: resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} @@ -11429,13 +11262,11 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.0: @@ -11444,11 +11275,11 @@ packages: glob@5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + deprecated: Glob versions prior to v9 are no longer supported glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -14563,10 +14394,6 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - on-headers@1.1.0: resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} @@ -15347,7 +15174,6 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qified@0.5.3: @@ -15989,6 +15815,10 @@ packages: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + safe-regex-test@1.1.0: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} @@ -16837,6 +16667,9 @@ packages: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.9: resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} engines: {node: '>= 0.4'} @@ -17140,12 +16973,12 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me tar@7.5.2: resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} engines: {node: '>=18'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} @@ -19621,7 +19454,7 @@ snapshots: chokidar: 4.0.1 convert-source-map: 1.9.0 reflect-metadata: 0.2.2 - semver: 7.7.3 + semver: 7.7.4 tslib: 2.6.3 typescript: 5.5.4 yargs: 17.7.2 @@ -19636,7 +19469,7 @@ snapshots: chokidar: 4.0.1 convert-source-map: 1.9.0 reflect-metadata: 0.2.2 - semver: 7.7.3 + semver: 7.7.4 tslib: 2.6.3 typescript: 5.8.3 yargs: 17.7.2 @@ -19843,22 +19676,20 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.5': {} - '@babel/compat-data@7.28.6': {} '@babel/core@7.26.10': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.10) - '@babel/helpers': 7.28.4 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.28.6 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.10) + '@babel/helpers': 7.28.6 '@babel/parser': 7.28.6 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/template': 7.28.6 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -19870,15 +19701,15 @@ snapshots: '@babel/core@7.26.9': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.9) - '@babel/helpers': 7.28.4 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.28.6 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.9) + '@babel/helpers': 7.28.6 '@babel/parser': 7.28.6 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/template': 7.28.6 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -19936,14 +19767,6 @@ snapshots: semver: 6.3.1 '@babel/generator@7.26.10': - dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.5 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/generator@7.28.3': dependencies: '@babel/parser': 7.28.6 '@babel/types': 7.28.6 @@ -19951,7 +19774,7 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@7.28.5': + '@babel/generator@7.28.3': dependencies: '@babel/parser': 7.28.6 '@babel/types': 7.28.6 @@ -19969,20 +19792,12 @@ snapshots: '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.28.6 '@babel/helper-annotate-as-pure@7.27.3': dependencies: '@babel/types': 7.28.6 - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 - lru-cache: 5.1.1 - semver: 6.3.1 - '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.28.6 @@ -20004,7 +19819,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.26.10)': + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.27.3 @@ -20057,6 +19872,13 @@ snapshots: regexpu-core: 6.2.0 semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.2.0 + semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -20151,8 +19973,8 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -20170,7 +19992,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.26.10)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.28.6 @@ -20179,7 +20001,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.26.9)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.26.9)': dependencies: '@babel/core': 7.26.9 '@babel/helper-module-imports': 7.28.6 @@ -20188,15 +20010,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -20232,7 +20045,7 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -20241,7 +20054,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -20250,7 +20063,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -20263,6 +20076,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/helper-replace-supers@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -20299,7 +20130,7 @@ snapshots: '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.28.6 '@babel/helper-string-parser@7.27.1': {} @@ -20315,11 +20146,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.4': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 - '@babel/helpers@7.28.6': dependencies: '@babel/template': 7.28.6 @@ -20338,7 +20164,7 @@ snapshots: '@babel/parser@7.26.2': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.28.5 '@babel/parser@7.28.6': dependencies: @@ -20425,7 +20251,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.26.10)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -20452,7 +20278,7 @@ snapshots: '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.28.6) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.28.6) transitivePeerDependencies: @@ -20473,22 +20299,22 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.28.6)': dependencies: @@ -20505,7 +20331,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -20525,7 +20351,12 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -20548,7 +20379,7 @@ snapshots: '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': dependencies: @@ -20558,42 +20389,42 @@ snapshots: '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.6)': dependencies: @@ -20603,19 +20434,19 @@ snapshots: '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.6) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.26.10)': @@ -20636,35 +20467,35 @@ snapshots: '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10) - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.6 transitivePeerDependencies: - supports-color '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.26.10)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) '@babel/traverse': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-async-generator-functions@7.28.6(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10) '@babel/traverse': 7.28.6 transitivePeerDependencies: - supports-color @@ -20690,8 +20521,8 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10) transitivePeerDependencies: - supports-color @@ -20699,27 +20530,27 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10) transitivePeerDependencies: - supports-color @@ -20756,7 +20587,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.26.10)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -20779,10 +20610,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -20811,10 +20642,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.26.10)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -20835,14 +20666,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.4(@babel/core@7.26.10)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.10) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.26.10) '@babel/traverse': 7.28.6 transitivePeerDependencies: - supports-color @@ -20871,7 +20702,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -20913,10 +20744,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.10) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.28.4)': @@ -20946,18 +20777,18 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 @@ -21000,7 +20831,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.26.10)': + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -21087,7 +20918,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -21117,7 +20948,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.26.10)': + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -21252,19 +21083,19 @@ snapshots: '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.6) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.26.10)': @@ -21282,7 +21113,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -21297,7 +21128,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -21319,7 +21150,7 @@ snapshots: '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.26.10)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-compilation-targets': 7.28.6 @@ -21356,7 +21187,7 @@ snapshots: dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.26.10) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.10) transitivePeerDependencies: - supports-color @@ -21364,7 +21195,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color @@ -21372,11 +21203,11 @@ snapshots: dependencies: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -21391,14 +21222,6 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -21446,10 +21269,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -21470,11 +21293,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -21551,7 +21374,7 @@ snapshots: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.26.10)': + '@babel/plugin-transform-regenerator@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -21566,18 +21389,18 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.26.10)': - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 @@ -21614,8 +21437,8 @@ snapshots: '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.26.10) babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.26.10) @@ -21662,7 +21485,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.28.6 @@ -21757,10 +21580,10 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.10) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.28.4)': @@ -21778,25 +21601,25 @@ snapshots: '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.6) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.26.10)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.10) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.28.4)': @@ -21813,41 +21636,41 @@ snapshots: '@babel/preset-env@7.26.9(@babel/core@7.26.10)': dependencies: - '@babel/compat-data': 7.28.5 + '@babel/compat-data': 7.28.6 '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.26.10) '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.26.10) '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.26.10) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.26.10) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.26.10) '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.26.10) '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.26.10) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-async-generator-functions': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.26.10) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.26.10) - '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.26.10) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.26.10) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.26.10) '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.26.10) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.26.10) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.26.10) @@ -21855,28 +21678,28 @@ snapshots: '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.26.10) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.26.10) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.26.10) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.26.10) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-regenerator': 7.28.6(@babel/core@7.26.10) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.26.10) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10) babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.26.10) babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) @@ -22099,7 +21922,7 @@ snapshots: '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 '@babel/parser': 7.28.6 '@babel/types': 7.28.6 @@ -22111,12 +21934,12 @@ snapshots: '@babel/traverse@7.28.5': dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.6 '@babel/helper-globals': 7.28.0 '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -23896,11 +23719,11 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.3 + semver: 7.7.4 '@npmcli/fs@5.0.0': dependencies: - semver: 7.7.3 + semver: 7.7.4 '@npmcli/git@6.0.3': dependencies: @@ -23910,7 +23733,7 @@ snapshots: npm-pick-manifest: 10.0.0 proc-log: 5.0.0 promise-retry: 2.0.1 - semver: 7.7.3 + semver: 7.7.4 which: 5.0.0 '@npmcli/git@7.0.1': @@ -23921,7 +23744,7 @@ snapshots: npm-pick-manifest: 11.0.3 proc-log: 6.1.0 promise-retry: 2.0.1 - semver: 7.7.3 + semver: 7.7.4 which: 6.0.0 '@npmcli/installed-package-contents@3.0.0': @@ -23940,7 +23763,7 @@ snapshots: hosted-git-info: 8.1.0 json-parse-even-better-errors: 4.0.0 proc-log: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-license: 3.0.4 '@npmcli/package-json@7.0.4': @@ -23950,7 +23773,7 @@ snapshots: hosted-git-info: 9.0.2 json-parse-even-better-errors: 5.0.0 proc-log: 6.1.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-license: 3.0.4 '@npmcli/promise-spawn@8.0.2': @@ -24075,7 +23898,7 @@ snapshots: ignore: 5.3.2 minimatch: 9.0.3 nx: 19.8.14(@swc/core@1.15.3) - semver: 7.7.3 + semver: 7.7.4 tmp: 0.2.5 tslib: 2.6.3 yargs-parser: 21.1.1 @@ -24302,7 +24125,7 @@ snapshots: json5: 2.2.3 msgpackr: 1.11.2 nullthrows: 1.1.1 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - '@swc/helpers' - napi-wasm @@ -24361,7 +24184,7 @@ snapshots: '@parcel/rust': 2.16.3 '@parcel/utils': 2.16.3 nullthrows: 1.1.1 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - '@parcel/core' - napi-wasm @@ -24432,7 +24255,7 @@ snapshots: '@parcel/utils': 2.16.3 '@parcel/workers': 2.16.3(@parcel/core@2.16.3) '@swc/core': 1.15.3 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - '@swc/helpers' - napi-wasm @@ -24635,7 +24458,7 @@ snapshots: browserslist: 4.28.1 json5: 2.2.3 nullthrows: 1.1.1 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - '@parcel/core' - napi-wasm @@ -24685,7 +24508,7 @@ snapshots: browserslist: 4.28.1 nullthrows: 1.1.1 regenerator-runtime: 0.14.1 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - napi-wasm @@ -24713,7 +24536,7 @@ snapshots: clone: 2.1.2 nullthrows: 1.1.1 postcss-value-parser: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - '@parcel/core' - napi-wasm @@ -24965,7 +24788,7 @@ snapshots: extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.4.0 - semver: 7.7.3 + semver: 7.7.4 tar-fs: 3.1.1 unbzip2-stream: 1.4.3 yargs: 17.7.2 @@ -25499,7 +25322,7 @@ snapshots: react-docgen: 7.1.1 react-dom: 18.0.0(react@18.0.0) resolve: 1.22.11 - semver: 7.7.3 + semver: 7.7.4 storybook: 10.1.10(@testing-library/dom@10.4.0)(prettier@3.6.2)(react-dom@18.0.0(react@18.0.0))(react@18.0.0) tsconfig-paths: 4.2.0 webpack: 5.105.0(@swc/core@1.15.3)(esbuild@0.26.0) @@ -25650,8 +25473,8 @@ snapshots: '@testing-library/dom@9.3.4': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/runtime': 7.28.4 + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.28.6 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -25730,7 +25553,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.28.5 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 @@ -25807,7 +25630,7 @@ snapshots: '@types/eslint-scope@3.7.7': dependencies: - '@types/eslint': 9.6.1 + '@types/eslint': 8.56.12 '@types/estree': 1.0.8 '@types/eslint-visitor-keys@1.0.0': {} @@ -25821,6 +25644,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 + optional: true '@types/estree@0.0.39': {} @@ -25848,13 +25672,6 @@ snapshots: '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express@4.17.21': - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.17 - '@types/serve-static': 1.15.7 - '@types/express@4.17.25': dependencies: '@types/body-parser': 1.19.5 @@ -26139,7 +25956,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.7.3 + semver: 7.7.4 ts-api-utils: 1.4.0(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -26401,7 +26218,7 @@ snapshots: glob: 7.2.3 is-glob: 4.0.3 lodash: 4.17.23 - semver: 7.7.3 + semver: 7.7.4 tsutils: 3.21.0(typescript@3.9.10) optionalDependencies: typescript: 3.9.10 @@ -26415,7 +26232,7 @@ snapshots: debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.3 + semver: 7.7.4 tsutils: 3.21.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 @@ -26429,7 +26246,7 @@ snapshots: debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.3 + semver: 7.7.4 tsutils: 3.21.0(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -26444,7 +26261,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.7.3 + semver: 7.7.4 ts-api-utils: 1.4.0(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -26459,7 +26276,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 ts-api-utils: 1.4.0(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -26474,7 +26291,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.52.0 debug: 4.4.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@4.9.5) typescript: 4.9.5 @@ -26489,7 +26306,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.52.0 debug: 4.4.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.5.4) typescript: 5.5.4 @@ -26504,7 +26321,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.52.0 debug: 4.4.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 @@ -26521,7 +26338,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) eslint: 9.39.2(jiti@2.6.1) eslint-scope: 5.1.1 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color - typescript @@ -26535,7 +26352,7 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color - typescript @@ -27449,12 +27266,12 @@ snapshots: array.prototype.filter@1.0.4: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.23.5 es-array-method-boxes-properly: 1.0.0 - es-object-atoms: 1.1.1 - is-string: 1.1.1 + es-object-atoms: 1.0.0 + is-string: 1.0.7 array.prototype.find@2.2.3: dependencies: @@ -27519,7 +27336,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.0 es-errors: 1.3.0 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 @@ -27800,14 +27617,14 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 babel-plugin-macros@2.8.0: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.6 cosmiconfig: 6.0.0 resolve: 1.22.11 @@ -27959,7 +27776,7 @@ snapshots: '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.6) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.6) '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.6) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.6) '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.6) '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.6) '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.6) @@ -28510,7 +28327,7 @@ snapshots: canvg@3.0.11: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.6 '@types/raf': 3.4.3 core-js: 3.39.0 raf: 3.4.1 @@ -28980,18 +28797,6 @@ snapshots: dependencies: mime-db: 1.54.0 - compression@1.7.5: - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.0.2 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - compression@1.8.1: dependencies: bytes: 3.1.2 @@ -29153,7 +28958,7 @@ snapshots: cosmiconfig@9.0.0(typescript@4.9.5): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.1 + import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: @@ -29162,7 +28967,7 @@ snapshots: cosmiconfig@9.0.0(typescript@5.5.4): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.1 + import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: @@ -29171,7 +28976,7 @@ snapshots: cosmiconfig@9.0.0(typescript@5.8.3): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.1 + import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: @@ -29180,7 +28985,7 @@ snapshots: cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.1 + import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: @@ -29402,7 +29207,7 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.4.38) postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: webpack: 5.102.1(@swc/core@1.15.3)(esbuild@0.25.0) @@ -29415,7 +29220,7 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.4.38) postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: webpack: 5.105.0(@swc/core@1.15.3)(esbuild@0.26.0) @@ -29428,7 +29233,7 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.4.38) postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: webpack: 5.98.0(@swc/core@1.15.3)(esbuild@0.25.4) @@ -29628,11 +29433,11 @@ snapshots: array-buffer-byte-length: 1.0.1 call-bind: 1.0.8 es-get-iterator: 1.1.3 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 is-arguments: 1.1.1 is-array-buffer: 3.0.4 is-date-object: 1.0.5 - is-regex: 1.2.1 + is-regex: 1.1.4 is-shared-array-buffer: 1.0.3 isarray: 2.0.5 object-is: 1.1.6 @@ -29858,7 +29663,7 @@ snapshots: jszip: 3.10.1 readable-stream: 3.6.2 saxes: 5.0.1 - tmp: 0.2.3 + tmp: 0.2.5 unzipper: 0.12.3 uuid: 8.3.2 @@ -30065,7 +29870,7 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.1 - semver: 7.7.3 + semver: 7.7.4 ee-first@1.1.1: {} @@ -30293,9 +30098,9 @@ snapshots: object.assign: 4.1.5 regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 - safe-regex-test: 1.1.0 + safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.9 + string.prototype.trimend: 1.0.8 string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.1 @@ -30365,7 +30170,7 @@ snapshots: es-define-property@1.0.0: dependencies: - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 es-define-property@1.0.1: {} @@ -30374,12 +30179,12 @@ snapshots: es-get-iterator@1.1.3: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 has-symbols: 1.1.0 is-arguments: 1.1.1 is-map: 2.0.3 is-set: 2.0.3 - is-string: 1.1.1 + is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 @@ -30416,7 +30221,7 @@ snapshots: es-set-tostringtag@2.0.3: dependencies: - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -30709,7 +30514,7 @@ snapshots: eslint-compat-utils@0.5.1(eslint@9.39.2(jiti@2.6.1)): dependencies: eslint: 9.39.2(jiti@2.6.1) - semver: 7.7.3 + semver: 7.7.4 eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@4.9.5))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: @@ -31259,7 +31064,7 @@ snapshots: natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 - semver: 7.7.3 + semver: 7.7.4 vue-eslint-parser: 10.0.0(eslint@9.39.2(jiti@2.6.1)) xml-name-validator: 4.0.0 optionalDependencies: @@ -31272,7 +31077,7 @@ snapshots: natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 - semver: 7.7.3 + semver: 7.7.4 vue-eslint-parser: 10.0.0(eslint@9.39.2(jiti@2.6.1)) xml-name-validator: 4.0.0 optionalDependencies: @@ -31368,7 +31173,7 @@ snapshots: eslint-utils: 2.1.0 eslint-visitor-keys: 2.1.0 espree: 7.3.1 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -31388,7 +31193,7 @@ snapshots: optionator: 0.9.4 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.7.3 + semver: 7.7.4 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 table: 6.9.0 @@ -31419,7 +31224,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -32073,7 +31878,7 @@ snapshots: fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.105.0(@swc/core@1.15.3)(esbuild@0.26.0)): dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 chalk: 4.1.2 chokidar: 4.0.1 cosmiconfig: 8.3.6(typescript@5.9.3) @@ -32083,7 +31888,7 @@ snapshots: minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.7.3 + semver: 7.7.4 tapable: 2.3.0 typescript: 5.9.3 webpack: 5.105.0(@swc/core@1.15.3)(esbuild@0.26.0) @@ -32283,7 +32088,7 @@ snapshots: dependencies: call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 get-symbol-description@1.1.0: dependencies: @@ -32536,7 +32341,7 @@ snapshots: gopd@1.0.1: dependencies: - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 gopd@1.2.0: {} @@ -32635,7 +32440,7 @@ snapshots: eslint: 9.39.2(jiti@2.6.1) fancy-log: 2.0.0 plugin-error: 2.0.1 - semver: 7.7.3 + semver: 7.7.4 ternary-stream: 3.0.0 vinyl-fs: 4.0.0 optionalDependencies: @@ -33278,18 +33083,6 @@ snapshots: transitivePeerDependencies: - supports-color - http-proxy-middleware@2.0.9(@types/express@4.17.21): - dependencies: - '@types/http-proxy': 1.17.15 - http-proxy: 1.18.1(debug@4.4.3) - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.8 - optionalDependencies: - '@types/express': 4.17.21 - transitivePeerDependencies: - - debug - http-proxy-middleware@2.0.9(@types/express@4.17.25): dependencies: '@types/http-proxy': 1.17.15 @@ -33585,7 +33378,7 @@ snapshots: is-array-buffer@3.0.4: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 is-array-buffer@3.0.5: dependencies: @@ -33921,7 +33714,7 @@ snapshots: is-weakset@2.0.3: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 is-what@3.14.1: {} @@ -33975,7 +33768,7 @@ snapshots: '@babel/parser': 7.28.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -34732,7 +34525,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -35662,7 +35455,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 make-error@1.3.6: {} @@ -36473,7 +36266,7 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 tar: 7.5.2 tinyglobby: 0.2.15 which: 5.0.0 @@ -36488,7 +36281,7 @@ snapshots: make-fetch-happen: 15.0.3 nopt: 9.0.0 proc-log: 6.1.0 - semver: 7.7.3 + semver: 7.7.4 tar: 7.5.2 tinyglobby: 0.2.15 which: 6.0.0 @@ -36503,7 +36296,7 @@ snapshots: dependencies: growly: 1.3.0 is-wsl: 2.2.0 - semver: 7.7.3 + semver: 7.7.4 shellwords: 0.1.1 uuid: 8.3.2 which: 2.0.2 @@ -36561,7 +36354,7 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -36586,11 +36379,11 @@ snapshots: npm-install-checks@7.1.1: dependencies: - semver: 7.7.3 + semver: 7.7.4 npm-install-checks@8.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 npm-normalize-package-bin@4.0.0: {} @@ -36600,21 +36393,21 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 3.0.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-name: 5.0.1 npm-package-arg@12.0.2: dependencies: hosted-git-info: 8.1.0 proc-log: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-name: 6.0.0 npm-package-arg@13.0.1: dependencies: hosted-git-info: 9.0.2 proc-log: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-name: 6.0.0 npm-packlist@10.0.3: @@ -36631,14 +36424,14 @@ snapshots: npm-install-checks: 7.1.1 npm-normalize-package-bin: 4.0.0 npm-package-arg: 12.0.2 - semver: 7.7.3 + semver: 7.7.4 npm-pick-manifest@11.0.3: dependencies: npm-install-checks: 8.0.0 npm-normalize-package-bin: 5.0.0 npm-package-arg: 13.0.1 - semver: 7.7.3 + semver: 7.7.4 npm-registry-fetch@18.0.2: dependencies: @@ -36709,7 +36502,7 @@ snapshots: open: 8.4.2 strip-json-comments: 3.1.1 tar: 6.2.1 - yargs-parser: 21.1.1 + yargs-parser: 22.0.0 transitivePeerDependencies: - debug @@ -36886,8 +36679,6 @@ snapshots: dependencies: ee-first: 1.1.1 - on-headers@1.0.2: {} - on-headers@1.1.0: {} once@1.4.0: @@ -37479,7 +37270,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.5.4) jiti: 1.21.6 postcss: 8.5.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: webpack: 5.98.0(@swc/core@1.15.3)(esbuild@0.25.4) transitivePeerDependencies: @@ -37490,7 +37281,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.8.3) jiti: 1.21.6 postcss: 8.5.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: webpack: 5.98.0(@swc/core@1.15.3)(esbuild@0.25.4) transitivePeerDependencies: @@ -37501,7 +37292,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 2.6.1 postcss: 8.5.6 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: webpack: 5.102.1(@swc/core@1.15.3)(esbuild@0.25.0) transitivePeerDependencies: @@ -37517,13 +37308,13 @@ snapshots: dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 postcss-modules-scope@3.2.1(postcss@8.4.38): dependencies: postcss: 8.4.38 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.0.0 postcss-modules-values@4.0.0(postcss@8.4.38): dependencies: @@ -37896,8 +37687,8 @@ snapshots: react-docgen@8.0.2: dependencies: '@babel/core': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 @@ -38617,8 +38408,8 @@ snapshots: safe-array-concat@1.1.2: dependencies: - call-bind: 1.0.8 - get-intrinsic: 1.3.0 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 @@ -38639,6 +38430,12 @@ snapshots: es-errors: 1.3.0 isarray: 2.0.5 + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-regex: 1.1.4 + safe-regex-test@1.1.0: dependencies: call-bound: 1.0.4 @@ -39052,7 +38849,7 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 @@ -39639,6 +39436,12 @@ snapshots: es-abstract: 1.23.5 es-object-atoms: 1.0.0 + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 @@ -40336,7 +40139,7 @@ snapshots: terser@5.39.0: dependencies: - '@jridgewell/source-map': 0.3.6 + '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -40461,7 +40264,7 @@ snapshots: pinkie: 2.0.4 read-file-relative: 1.2.0 strip-bom: 2.0.0 - testcafe-hammerhead: 31.7.7 + testcafe-hammerhead: 31.7.5 transitivePeerDependencies: - bufferutil - supports-color @@ -41929,9 +41732,9 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 lodash: 4.17.23 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -41954,7 +41757,7 @@ snapshots: eslint-scope: 5.1.1 eslint-visitor-keys: 1.3.0 espree: 6.2.1 - esquery: 1.6.0 + esquery: 1.7.0 lodash: 4.17.23 transitivePeerDependencies: - supports-color @@ -41968,7 +41771,7 @@ snapshots: espree: 9.6.1 esquery: 1.6.0 lodash: 4.17.23 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -42164,7 +41967,7 @@ snapshots: dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 + '@types/express': 4.17.25 '@types/express-serve-static-core': 4.19.6 '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 @@ -42174,11 +41977,11 @@ snapshots: bonjour-service: 1.3.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.5 + compression: 1.8.1 connect-history-api-fallback: 2.0.0 express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.21) + http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.2.0 launch-editor: 2.9.1 open: 10.2.0 @@ -42202,7 +42005,7 @@ snapshots: dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 + '@types/express': 4.17.25 '@types/express-serve-static-core': 4.19.6 '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 @@ -42212,11 +42015,11 @@ snapshots: bonjour-service: 1.3.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.5 + compression: 1.8.1 connect-history-api-fallback: 2.0.0 express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.21) + http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.2.0 launch-editor: 2.9.1 open: 10.2.0 @@ -42540,7 +42343,7 @@ snapshots: acorn: 8.15.0 browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.3 + enhanced-resolve: 5.19.0 es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 @@ -42553,7 +42356,7 @@ snapshots: schema-utils: 4.3.3 tapable: 2.3.0 terser-webpack-plugin: 5.3.16(@swc/core@1.15.3)(esbuild@0.25.4)(webpack@5.98.0(@swc/core@1.15.3)(esbuild@0.25.4)) - watchpack: 2.4.4 + watchpack: 2.5.1 webpack-sources: 3.3.3 transitivePeerDependencies: - '@swc/core' @@ -42593,7 +42396,7 @@ snapshots: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 - is-string: 1.1.1 + is-string: 1.0.7 is-symbol: 1.0.4 which-boxed-primitive@1.1.1: @@ -42612,7 +42415,7 @@ snapshots: is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 is-generator-function: 1.0.10 - is-regex: 1.2.1 + is-regex: 1.1.4 is-weakref: 1.0.2 isarray: 2.0.5 which-boxed-primitive: 1.0.2 From b784bb441bfbc7f07b5b9197e08426672b0583c9 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Wed, 14 Jan 2026 17:08:18 +0200 Subject: [PATCH 02/12] feat(nx-infra-plugin): copy-files, support glob patterns --- pnpm-lock.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c064d1620e6d..c1cb00c358e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2269,8 +2269,13 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/lodash': +<<<<<<< HEAD specifier: 4.17.23 version: 4.17.23 +======= + specifier: 4.17.13 + version: 4.17.13 +>>>>>>> b4c6739a4e (feat(nx-infra-plugin): copy-files, support glob patterns) '@types/node': specifier: 18.19.130 version: 18.19.130 @@ -6793,8 +6798,13 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} +<<<<<<< HEAD '@types/lodash@4.17.23': resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==} +======= + '@types/lodash@4.17.13': + resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} +>>>>>>> b4c6739a4e (feat(nx-infra-plugin): copy-files, support glob patterns) '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -22038,7 +22048,11 @@ snapshots: '@devexpress/callsite-record@4.1.7': dependencies: +<<<<<<< HEAD '@types/lodash': 4.17.23 +======= + '@types/lodash': 4.17.13 +>>>>>>> b4c6739a4e (feat(nx-infra-plugin): copy-files, support glob patterns) callsite: 1.0.0 chalk: 2.4.2 error-stack-parser: 2.1.4 @@ -25753,7 +25767,11 @@ snapshots: dependencies: '@types/node': 20.12.8 +<<<<<<< HEAD '@types/lodash@4.17.23': {} +======= + '@types/lodash@4.17.13': {} +>>>>>>> b4c6739a4e (feat(nx-infra-plugin): copy-files, support glob patterns) '@types/mdast@3.0.15': dependencies: From 41e56298815ad032a185facbb098c0f7a1bac8d7 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Thu, 15 Jan 2026 17:46:33 +0200 Subject: [PATCH 03/12] chore: create all:build-testing workflow --- packages/devextreme/project.json | 81 +++++++------------------------- 1 file changed, 18 insertions(+), 63 deletions(-) diff --git a/packages/devextreme/project.json b/packages/devextreme/project.json index 6867a8cb1894..c90007ca323e 100644 --- a/packages/devextreme/project.json +++ b/packages/devextreme/project.json @@ -3,9 +3,7 @@ "$schema": "../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "packages/devextreme", "projectType": "library", - "implicitDependencies": [ - "devextreme-scss" - ], + "implicitDependencies": ["devextreme-scss"], "targets": { "clean:artifacts": { "executor": "devextreme-nx-infra-plugin:clean", @@ -60,9 +58,7 @@ "{projectRoot}/artifacts/js/localization/**/*.js", "{projectRoot}/build/gulp/license-header.txt" ], - "outputs": [ - "{projectRoot}/artifacts/js/localization" - ], + "outputs": ["{projectRoot}/artifacts/js/localization"], "cache": true }, "build:localization": { @@ -150,12 +146,8 @@ "command": "gulp vectormap", "cwd": "{projectRoot}" }, - "inputs": [ - "{projectRoot}/build/gulp/vectormap.js" - ], - "outputs": [ - "{projectRoot}/artifacts/js/vectormap-data" - ], + "inputs": ["{projectRoot}/build/gulp/vectormap.js"], + "outputs": ["{projectRoot}/artifacts/js/vectormap-data"], "cache": true }, "build:aspnet": { @@ -164,12 +156,8 @@ "command": "gulp aspnet", "cwd": "{projectRoot}" }, - "inputs": [ - "{projectRoot}/build/gulp/aspnet.js" - ], - "outputs": [ - "{projectRoot}/artifacts/js/aspnet" - ], + "inputs": ["{projectRoot}/build/gulp/aspnet.js"], + "outputs": ["{projectRoot}/artifacts/js/aspnet"], "cache": true }, "build:declarations": { @@ -182,9 +170,7 @@ "{projectRoot}/ts/**/*.d.ts", "{projectRoot}/build/gulp/ts.js" ], - "outputs": [ - "{projectRoot}/artifacts/ts" - ], + "outputs": ["{projectRoot}/artifacts/ts"], "cache": true }, "verify:licenses": { @@ -201,9 +187,7 @@ "command": "gulp vendor", "cwd": "{projectRoot}" }, - "inputs": [ - "{projectRoot}/build/gulp/vendor.js" - ], + "inputs": ["{projectRoot}/build/gulp/vendor.js"], "outputs": [ "{projectRoot}/artifacts/js/vectormap-utils", "{projectRoot}/artifacts/js/cldr" @@ -254,11 +238,7 @@ ], "parallel": false }, - "inputs": [ - { "env": "BUILD_TEST_INTERNAL_PACKAGE" }, - "default", - "test" - ], + "inputs": [{ "env": "BUILD_TEST_INTERNAL_PACKAGE" }, "default", "test"], "outputs": [ "{projectRoot}/artifacts", "{projectRoot}/build/bundle-templates/dx.custom.js", @@ -279,15 +259,8 @@ "options": { "script": "build-dist" }, - "inputs": [ - { "env": "BUILD_TEST_INTERNAL_PACKAGE" }, - "default", - "test" - ], - "outputs": [ - "{projectRoot}/artifacts", - "{projectRoot}/scss/bundles" - ], + "inputs": [{ "env": "BUILD_TEST_INTERNAL_PACKAGE" }, "default", "test"], + "outputs": ["{projectRoot}/artifacts", "{projectRoot}/scss/bundles"], "cache": true }, "build:dev": { @@ -295,9 +268,7 @@ "options": { "script": "build:dev" }, - "dependsOn": [ - "^build" - ], + "dependsOn": ["^build"], "inputs": [ { "env": "BUILD_TEST_INTERNAL_PACKAGE" }, { "env": "DEVEXTREME_TEST_CI" }, @@ -319,18 +290,14 @@ "options": { "script": "dev" }, - "dependsOn": [ - "^build" - ] + "dependsOn": ["^build"] }, "build:systemjs": { "executor": "nx:run-script", "options": { "script": "build:systemjs" }, - "dependsOn": [ - "build:dev" - ], + "dependsOn": ["build:dev"], "cache": true }, "lint-css": { @@ -338,9 +305,7 @@ "options": { "script": "lint-css" }, - "inputs": [ - "{projectRoot}/scss/**/*" - ], + "inputs": ["{projectRoot}/scss/**/*"], "cache": true }, "lint-dts": { @@ -361,10 +326,7 @@ "options": { "script": "lint-js" }, - "inputs": [ - "{projectRoot}/**/*.js", - "{projectRoot}/.eslint*" - ], + "inputs": ["{projectRoot}/**/*.js", "{projectRoot}/.eslint*"], "cache": true }, "lint-ts": { @@ -398,19 +360,12 @@ "options": { "script": "test-styles" }, - "inputs": [ - "default", - "!{projectRoot}/js/**/*", - "!{projectRoot}/ts/**/*" - ], + "inputs": ["default", "!{projectRoot}/js/**/*", "!{projectRoot}/ts/**/*"], "cache": true } }, "namedInputs": { - "default": [ - "{projectRoot}/js/**/*", - "{projectRoot}/ts/**/*" - ], + "default": ["{projectRoot}/js/**/*", "{projectRoot}/ts/**/*"], "test": [ "{projectRoot}/build/**/*", "{projectRoot}/testing/**/*", From b85a6f9f84c504f21c84547204ac4298fe6aa6f8 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Fri, 16 Jan 2026 16:36:21 +0200 Subject: [PATCH 04/12] fix: correctly lauch devextreme build in demos_visual_tests --- .github/workflows/visual-tests-demos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/visual-tests-demos.yml b/.github/workflows/visual-tests-demos.yml index 52ab6a5ed7c7..dcf751f2dc27 100644 --- a/.github/workflows/visual-tests-demos.yml +++ b/.github/workflows/visual-tests-demos.yml @@ -472,7 +472,7 @@ jobs: - name: Prepare JS working-directory: apps/demos - run: pnpm run prepare-js + run: pnpm run prepare-js -c testing - name: Check generated JS demos working-directory: apps/demos From a8652b235aacd17f70edf96c6e643f69cc76e951 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Tue, 20 Jan 2026 17:05:37 +0200 Subject: [PATCH 05/12] chore: remove unnecessary configuraiton option --- .github/workflows/visual-tests-demos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/visual-tests-demos.yml b/.github/workflows/visual-tests-demos.yml index dcf751f2dc27..52ab6a5ed7c7 100644 --- a/.github/workflows/visual-tests-demos.yml +++ b/.github/workflows/visual-tests-demos.yml @@ -472,7 +472,7 @@ jobs: - name: Prepare JS working-directory: apps/demos - run: pnpm run prepare-js -c testing + run: pnpm run prepare-js - name: Check generated JS demos working-directory: apps/demos From 50e8f34c33cfcc4caf3c4295e4d3c68f1a6d3898 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Wed, 21 Jan 2026 17:43:09 +0200 Subject: [PATCH 06/12] feat(nx-infra-plugin): create `concatenate-files` executor --- packages/nx-infra-plugin/executors.json | 5 + .../concatenate-files/executor.e2e.spec.ts | 92 +++++++++ .../executors/concatenate-files/executor.ts | 177 ++++++++++++++++++ .../executors/concatenate-files/schema.json | 57 ++++++ .../src/executors/concatenate-files/schema.ts | 17 ++ 5 files changed, 348 insertions(+) create mode 100644 packages/nx-infra-plugin/src/executors/concatenate-files/executor.e2e.spec.ts create mode 100644 packages/nx-infra-plugin/src/executors/concatenate-files/executor.ts create mode 100644 packages/nx-infra-plugin/src/executors/concatenate-files/schema.json create mode 100644 packages/nx-infra-plugin/src/executors/concatenate-files/schema.ts diff --git a/packages/nx-infra-plugin/executors.json b/packages/nx-infra-plugin/executors.json index 30a85f6e44a9..4327c540273a 100644 --- a/packages/nx-infra-plugin/executors.json +++ b/packages/nx-infra-plugin/executors.json @@ -59,6 +59,11 @@ "implementation": "./src/executors/localization/executor", "schema": "./src/executors/localization/schema.json", "description": "Generate localization message files and TypeScript CLDR data modules" + }, + "concatenate-files": { + "implementation": "./src/executors/concatenate-files/executor", + "schema": "./src/executors/concatenate-files/schema.json", + "description": "Concatenate files with optional content extraction and transforms" } } } diff --git a/packages/nx-infra-plugin/src/executors/concatenate-files/executor.e2e.spec.ts b/packages/nx-infra-plugin/src/executors/concatenate-files/executor.e2e.spec.ts new file mode 100644 index 000000000000..7e34cbdd15fb --- /dev/null +++ b/packages/nx-infra-plugin/src/executors/concatenate-files/executor.e2e.spec.ts @@ -0,0 +1,92 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import executor from './executor'; +import { ConcatenateFilesExecutorSchema } from './schema'; +import { createTempDir, cleanupTempDir, createMockContext } from '../../utils/test-utils'; +import { writeFileText, readFileText } from '../../utils'; + +describe('ConcatenateFilesExecutor E2E', () => { + let tempDir: string; + let context = createMockContext(); + let projectDir: string; + + beforeEach(async () => { + tempDir = createTempDir('nx-concatenate-e2e-'); + context = createMockContext({ root: tempDir }); + projectDir = path.join(tempDir, 'packages', 'test-lib'); + fs.mkdirSync(projectDir, { recursive: true }); + }); + + afterEach(() => { + cleanupTempDir(tempDir); + }); + + it('should handle devextreme-bundler-config use case', async () => { + const partsDir = path.join(projectDir, 'build', 'gulp', 'bundler-config'); + fs.mkdirSync(partsDir, { recursive: true }); + + await writeFileText( + path.join(partsDir, '01-header.js'), + `// Some preamble to ignore\r\n/// BUNDLER_PARTS\r\n const VERSION = '24.2';\r\n/// BUNDLER_PARTS_END\r\n// trailing code`, + ); + + await writeFileText( + path.join(partsDir, '02-core.js'), + `/// BUNDLER_PARTS\r\n require('./ui/core');\r\n require('./ui/widgets');\r\n/// BUNDLER_PARTS_END`, + ); + + await writeFileText( + path.join(partsDir, '03-footer.js'), + `/// BUNDLER_PARTS\r\n module.exports = DevExpress;\r\n/// BUNDLER_PARTS_END`, + ); + + const options: ConcatenateFilesExecutorSchema = { + sourceFiles: [ + './build/gulp/bundler-config/01-header.js', + './build/gulp/bundler-config/02-core.js', + './build/gulp/bundler-config/03-footer.js', + ], + outputFile: './artifacts/js/bundler-config.js', + header: '/* DevExtreme Bundler Config */\n/* Generated file - do not edit */\n\n', + footer: '\n\n/* End of bundler config */\n', + separator: '\n', + extractPattern: '[^]*BUNDLER_PARTS.*?$([^]*)^.*?BUNDLER_PARTS_END[^]*', + extractPatternFlags: 'gm', + transforms: [ + { find: '^[ ]{4}', replace: '', flags: 'gm' }, + { find: '\\n{3,}', replace: '\n\n', flags: 'g' }, + ], + }; + + const result = await executor(options, context); + + expect(result.success).toBe(true); + + const output = await readFileText( + path.join(projectDir, 'artifacts', 'js', 'bundler-config.js'), + ); + + expect(output.startsWith('/* DevExtreme Bundler Config */')).toBe(true); + + expect(output.endsWith('/* End of bundler config */\n')).toBe(true); + + expect(output).not.toContain('BUNDLER_PARTS'); + expect(output).not.toContain('Some preamble to ignore'); + expect(output).not.toContain('trailing code'); + + expect(output).toContain("const VERSION = '24.2';"); + expect(output).toContain("require('./ui/core');"); + expect(output).toContain("require('./ui/widgets');"); + expect(output).toContain('module.exports = DevExpress;'); + + expect(output).not.toMatch(/^ /m); + + expect(output).not.toContain('\r\n'); + + const versionPos = output.indexOf("VERSION = '24.2'"); + const requirePos = output.indexOf("require('./ui/core')"); + const exportPos = output.indexOf('module.exports'); + expect(versionPos).toBeLessThan(requirePos); + expect(requirePos).toBeLessThan(exportPos); + }); +}); diff --git a/packages/nx-infra-plugin/src/executors/concatenate-files/executor.ts b/packages/nx-infra-plugin/src/executors/concatenate-files/executor.ts new file mode 100644 index 000000000000..39a1d8ca3a3c --- /dev/null +++ b/packages/nx-infra-plugin/src/executors/concatenate-files/executor.ts @@ -0,0 +1,177 @@ +import { PromiseExecutor, logger } from '@nx/devkit'; +import * as path from 'path'; +import { glob } from 'glob'; +import { ConcatenateFilesExecutorSchema, TransformRule } from './schema'; +import { resolveProjectPath, normalizeGlobPathForWindows } from '../../utils/path-resolver'; +import { isWindowsOS } from '../../utils/common'; +import { logError } from '../../utils/error-handler'; +import { readFileText, writeFileText, exists } from '../../utils/file-operations'; + +const ERROR_MESSAGES = { + SOURCE_FILES_EMPTY: 'sourceFiles must contain at least one file', + SOURCE_NOT_FOUND: (source: string) => `Source file not found: ${source}`, + NO_FILES_MATCH_PATTERN: (pattern: string) => `No files found matching pattern: ${pattern}`, + NO_FILES_RESOLVED: 'No source files found after resolving patterns', + FAILED_TO_CONCATENATE: 'Failed to concatenate files', +} as const; + +function containsGlobPattern(pattern: string): boolean { + return /[*?[\]{}]/.test(pattern); +} + +function extractContent(content: string, pattern: string, flags: string): string { + try { + const regex = new RegExp(pattern, flags); + const match = regex.exec(content); + return match?.[1] ?? content; + } catch { + logger.verbose(`Invalid extractPattern: ${pattern}. Using original content.`); + return content; + } +} + +function applyTransforms(content: string, transforms: TransformRule[]): string { + return transforms.reduce((result, { find, replace, flags = 'g' }) => { + try { + return result.replace(new RegExp(find, flags), replace); + } catch { + logger.verbose(`Invalid transform pattern: ${find}. Skipping.`); + return result; + } + }, content); +} + +function normalizeLineEndings(content: string): string { + return content.replace(/\r\n/g, '\n').replace(/\r/g, '\n'); +} + +function applyHeaderFooter(content: string, header?: string, footer?: string): string { + let result = content; + if (header) result = header + result; + if (footer) result = result + footer; + return result; +} + +async function resolveGlobPattern(pattern: string, projectRoot: string): Promise { + const sourcePath = path.resolve(projectRoot, pattern); + const globPattern = isWindowsOS() ? normalizeGlobPathForWindows(sourcePath) : sourcePath; + const files = await glob(globPattern, { nodir: true }); + + if (files.length === 0) { + logger.verbose(ERROR_MESSAGES.NO_FILES_MATCH_PATTERN(pattern)); + } + + return files.sort(); +} + +async function resolveExactFile(source: string, projectRoot: string): Promise { + const sourcePath = path.resolve(projectRoot, source); + if (!(await exists(sourcePath))) { + throw new Error(ERROR_MESSAGES.SOURCE_NOT_FOUND(source)); + } + return sourcePath; +} + +async function resolveSourceFiles(sourceFiles: string[], projectRoot: string): Promise { + const resolvedFiles: string[] = []; + + for (const source of sourceFiles) { + if (containsGlobPattern(source)) { + const files = await resolveGlobPattern(source, projectRoot); + resolvedFiles.push(...files); + } else { + const file = await resolveExactFile(source, projectRoot); + resolvedFiles.push(file); + } + } + + return resolvedFiles; +} + +async function processFileContent( + filePath: string, + extractPattern?: string, + extractPatternFlags?: string, +): Promise { + const content = await readFileText(filePath); + + if (extractPattern) { + return extractContent(content, extractPattern, extractPatternFlags || 'gm'); + } + + return content; +} + +async function readAndProcessFiles( + files: string[], + projectRoot: string, + options: Pick, +): Promise { + return Promise.all( + files.map(async (filePath) => { + const content = await processFileContent( + filePath, + options.extractPattern, + options.extractPatternFlags, + ); + logger.verbose(`Processed: ${path.relative(projectRoot, filePath)}`); + return content; + }), + ); +} + +function buildOutput( + contents: string[], + options: Pick< + ConcatenateFilesExecutorSchema, + 'separator' | 'normalizeLineEndings' | 'header' | 'footer' | 'transforms' + >, +): string { + let output = contents.join(options.separator ?? '\n'); + + if (options.normalizeLineEndings !== false) { + output = normalizeLineEndings(output); + } + + output = applyHeaderFooter(output, options.header, options.footer); + + if (options.transforms?.length) { + output = applyTransforms(output, options.transforms); + } + + return output; +} + +const runExecutor: PromiseExecutor = async (options, context) => { + const projectRoot = resolveProjectPath(context); + + if (!options.sourceFiles?.length) { + logger.error(ERROR_MESSAGES.SOURCE_FILES_EMPTY); + return { success: false }; + } + + try { + const resolvedFiles = await resolveSourceFiles(options.sourceFiles, projectRoot); + + if (resolvedFiles.length === 0) { + logger.error(ERROR_MESSAGES.NO_FILES_RESOLVED); + return { success: false }; + } + + logger.verbose(`Concatenating ${resolvedFiles.length} files...`); + + const contents = await readAndProcessFiles(resolvedFiles, projectRoot, options); + const output = buildOutput(contents, options); + + const outputPath = path.resolve(projectRoot, options.outputFile); + await writeFileText(outputPath, output); + logger.verbose(`Created: ${path.relative(projectRoot, outputPath)}`); + + return { success: true }; + } catch (error) { + logError(ERROR_MESSAGES.FAILED_TO_CONCATENATE, error); + return { success: false }; + } +}; + +export default runExecutor; diff --git a/packages/nx-infra-plugin/src/executors/concatenate-files/schema.json b/packages/nx-infra-plugin/src/executors/concatenate-files/schema.json new file mode 100644 index 000000000000..0bea5d738af6 --- /dev/null +++ b/packages/nx-infra-plugin/src/executors/concatenate-files/schema.json @@ -0,0 +1,57 @@ +{ + "$schema": "https://json-schema.org/schema", + "type": "object", + "description": "Concatenate files with optional content extraction and transforms.", + "properties": { + "sourceFiles": { + "type": "array", + "description": "Ordered list of files or glob patterns to concatenate.", + "items": { "type": "string" } + }, + "outputFile": { + "type": "string", + "description": "Output file path relative to project root." + }, + "extractPattern": { + "type": "string", + "description": "Regex pattern to extract content from each file. Uses capture group $1." + }, + "extractPatternFlags": { + "type": "string", + "description": "Regex flags for extractPattern (default: 'gm')", + "default": "gm" + }, + "header": { + "type": "string", + "description": "Header to prepend to output." + }, + "footer": { + "type": "string", + "description": "Footer to append to output." + }, + "transforms": { + "type": "array", + "description": "Regex find/replace transforms applied after concatenation.", + "items": { + "type": "object", + "properties": { + "find": { "type": "string" }, + "replace": { "type": "string" }, + "flags": { "type": "string", "default": "g" } + }, + "required": ["find", "replace"] + } + }, + "normalizeLineEndings": { + "type": "boolean", + "description": "Normalize to LF line endings (default: true)", + "default": true + }, + "separator": { + "type": "string", + "description": "Separator between concatenated files (default: '\\n')", + "default": "\n" + } + }, + "required": ["sourceFiles", "outputFile"] +} diff --git a/packages/nx-infra-plugin/src/executors/concatenate-files/schema.ts b/packages/nx-infra-plugin/src/executors/concatenate-files/schema.ts new file mode 100644 index 000000000000..4e22150e5d5b --- /dev/null +++ b/packages/nx-infra-plugin/src/executors/concatenate-files/schema.ts @@ -0,0 +1,17 @@ +export interface TransformRule { + find: string; + replace: string; + flags?: string; +} + +export interface ConcatenateFilesExecutorSchema { + sourceFiles: string[]; + outputFile: string; + extractPattern?: string; + extractPatternFlags?: string; + header?: string; + footer?: string; + transforms?: TransformRule[]; + normalizeLineEndings?: boolean; + separator?: string; +} From d491ba6e885e2ef6abafb6e558086fe152296ecb Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Wed, 21 Jan 2026 17:45:47 +0200 Subject: [PATCH 07/12] chore(devextreme): create nx targets to replace the `bundler-config` gulp task --- packages/devextreme/project.json | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/packages/devextreme/project.json b/packages/devextreme/project.json index c90007ca323e..5e88e5fef15b 100644 --- a/packages/devextreme/project.json +++ b/packages/devextreme/project.json @@ -84,6 +84,53 @@ ], "cache": true }, + "build:devextreme-bundler-config:generate": { + "executor": "devextreme-nx-infra-plugin:concatenate-files", + "options": { + "sourceFiles": [ + "./build/bundle-templates/modules/parts/core.js", + "./build/bundle-templates/modules/parts/data.js", + "./build/bundle-templates/modules/parts/widgets-base.js", + "./build/bundle-templates/modules/parts/widgets-web.js", + "./build/bundle-templates/modules/parts/viz.js", + "./build/bundle-templates/modules/parts/aspnet.js" + ], + "outputFile": "./build/bundle-templates/dx.custom.js", + "extractPattern": "[^]*BUNDLER_PARTS.*?$([^]*)^.*?BUNDLER_PARTS_END[^]*", + "extractPatternFlags": "gm", + "header": "\"use strict\";\n\n/* Comment lines below for the widgets you don't require and run \"devextreme-bundler\" in this directory, then include dx.custom.js in your project */\n\n", + "transforms": [ + { + "find": "require *\\( *[\"']..\\/\\.\\.\\/", + "replace": "require('" + }, + { "find": "^[ ]{4}", "replace": "", "flags": "gm" }, + { "find": "\\n{3,}", "replace": "\n\n", "flags": "g" } + ] + }, + "inputs": ["{projectRoot}/build/bundle-templates/modules/parts/**/*.js"], + "outputs": ["{projectRoot}/build/bundle-templates/dx.custom.js"], + "cache": true + }, + "build:devextreme-bundler-config:prod": { + "dependsOn": ["build:devextreme-bundler-config:generate"], + "executor": "devextreme-nx-infra-plugin:concatenate-files", + "options": { + "sourceFiles": ["./build/bundle-templates/dx.custom.js"], + "outputFile": "./artifacts/npm/devextreme/bundles/dx.custom.config.js", + "transforms": [ + { + "find": "require *\\( *[\"']\\.\\.\\/", + "replace": "require('devextreme/" + } + ] + }, + "inputs": ["{projectRoot}/build/bundle-templates/dx.custom.js"], + "outputs": [ + "{projectRoot}/artifacts/npm/devextreme/bundles/dx.custom.config.js" + ], + "cache": true + }, "build:transpile": { "executor": "nx:run-commands", "options": { From d29305073175ac2e52a3a81ff2b9f202b93957f8 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Fri, 23 Jan 2026 17:36:58 +0200 Subject: [PATCH 08/12] feat(nx-infra-plugin): add babel-transform executor for CJS/ESM transpilation --- packages/nx-infra-plugin/executors.json | 5 + packages/nx-infra-plugin/jest-resolver.js | 23 +++ packages/nx-infra-plugin/jest.config.ts | 2 + packages/nx-infra-plugin/package.json | 33 ++++ .../babel-transform/executor.e2e.spec.ts | 157 ++++++++++++++++++ .../src/executors/babel-transform/executor.ts | 136 +++++++++++++++ .../src/executors/babel-transform/schema.json | 44 +++++ .../src/executors/babel-transform/schema.ts | 9 + pnpm-lock.yaml | 107 ++++++------ 9 files changed, 457 insertions(+), 59 deletions(-) create mode 100644 packages/nx-infra-plugin/jest-resolver.js create mode 100644 packages/nx-infra-plugin/src/executors/babel-transform/executor.e2e.spec.ts create mode 100644 packages/nx-infra-plugin/src/executors/babel-transform/executor.ts create mode 100644 packages/nx-infra-plugin/src/executors/babel-transform/schema.json create mode 100644 packages/nx-infra-plugin/src/executors/babel-transform/schema.ts diff --git a/packages/nx-infra-plugin/executors.json b/packages/nx-infra-plugin/executors.json index 4327c540273a..6dcdf6cd6818 100644 --- a/packages/nx-infra-plugin/executors.json +++ b/packages/nx-infra-plugin/executors.json @@ -64,6 +64,11 @@ "implementation": "./src/executors/concatenate-files/executor", "schema": "./src/executors/concatenate-files/schema.json", "description": "Concatenate files with optional content extraction and transforms" + }, + "babel-transform": { + "implementation": "./src/executors/babel-transform/executor", + "schema": "./src/executors/babel-transform/schema.json", + "description": "Transform JavaScript/TypeScript files using Babel with configurable presets" } } } diff --git a/packages/nx-infra-plugin/jest-resolver.js b/packages/nx-infra-plugin/jest-resolver.js new file mode 100644 index 000000000000..f048221ec13d --- /dev/null +++ b/packages/nx-infra-plugin/jest-resolver.js @@ -0,0 +1,23 @@ +const isModuleNotFoundInPnpmSymlinks = (error) => error.code === 'MODULE_NOT_FOUND'; + +const resolveWithJest = (request, options) => options.defaultResolver(request, options); + +const resolveWithNodeFollowingPnpmSymlinks = (request, basedir) => + require.resolve(request, { paths: [basedir] }); + +function pnpmCompatibleResolver(request, options) { + try { + return resolveWithJest(request, options); + } catch (jestFailedToFollowPnpmSymlinks) { + if (isModuleNotFoundInPnpmSymlinks(jestFailedToFollowPnpmSymlinks)) { + try { + return resolveWithNodeFollowingPnpmSymlinks(request, options.basedir); + } catch { + throw jestFailedToFollowPnpmSymlinks; + } + } + throw jestFailedToFollowPnpmSymlinks; + } +} + +module.exports = pnpmCompatibleResolver; diff --git a/packages/nx-infra-plugin/jest.config.ts b/packages/nx-infra-plugin/jest.config.ts index e4469f98d5f8..3018f786939b 100644 --- a/packages/nx-infra-plugin/jest.config.ts +++ b/packages/nx-infra-plugin/jest.config.ts @@ -6,5 +6,7 @@ export default { transform: { '^.+\\.ts$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], }, + transformIgnorePatterns: ['node_modules', '\\.js$', '\\.cjs$', '\\.json$'], moduleFileExtensions: ['ts', 'js', 'html'], + resolver: '/jest-resolver.js', }; diff --git a/packages/nx-infra-plugin/package.json b/packages/nx-infra-plugin/package.json index 5753ad3baea7..bbfb12cceb5d 100644 --- a/packages/nx-infra-plugin/package.json +++ b/packages/nx-infra-plugin/package.json @@ -19,10 +19,42 @@ "rimraf": "3.0.2" }, "peerDependencies": { + "@babel/core": ">=7.0.0", + "@babel/plugin-transform-modules-commonjs": ">=7.0.0", + "@babel/plugin-transform-object-rest-spread": ">=7.0.0", + "@babel/plugin-transform-runtime": ">=7.0.0", + "@babel/preset-env": ">=7.0.0", + "babel-plugin-add-module-exports": ">=1.0.0", + "babel-plugin-inferno": ">=6.0.0", + "core-js-compat": ">=3.0.0", "karma": ">=6.0.0", "ng-packagr": ">=19.0.0" }, "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@babel/plugin-transform-modules-commonjs": { + "optional": true + }, + "@babel/plugin-transform-object-rest-spread": { + "optional": true + }, + "@babel/plugin-transform-runtime": { + "optional": true + }, + "@babel/preset-env": { + "optional": true + }, + "babel-plugin-add-module-exports": { + "optional": true + }, + "babel-plugin-inferno": { + "optional": true + }, + "core-js-compat": { + "optional": true + }, "karma": { "optional": true }, @@ -31,6 +63,7 @@ } }, "devDependencies": { + "@types/babel__core": "7.20.5", "@types/fs-extra": "11.0.4", "@types/jest": "29.5.14", "@types/normalize-path": "3.0.2", diff --git a/packages/nx-infra-plugin/src/executors/babel-transform/executor.e2e.spec.ts b/packages/nx-infra-plugin/src/executors/babel-transform/executor.e2e.spec.ts new file mode 100644 index 000000000000..9b8f5810b493 --- /dev/null +++ b/packages/nx-infra-plugin/src/executors/babel-transform/executor.e2e.spec.ts @@ -0,0 +1,157 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import executor from './executor'; +import { BabelTransformExecutorSchema } from './schema'; +import { + createTempDir, + cleanupTempDir, + createMockContext, + findWorkspaceRoot, +} from '../../utils/test-utils'; +import { writeFileText, readFileText } from '../../utils'; + +const WORKSPACE_ROOT = findWorkspaceRoot(); + +const BABEL_CONFIG = ` +'use strict'; + +const common = { + plugins: [ + ['babel-plugin-inferno', { 'imports': true }], + ['@babel/plugin-transform-object-rest-spread', { loose: true }], + ], + ignore: ['**/*.json'], +}; + +const targets = { ios: 15, android: 95, samsung: 13 }; + +module.exports = { + cjs: Object.assign({}, common, { + presets: [['@babel/preset-env', { targets }]], + plugins: common.plugins.concat([ + ['add-module-exports', { addDefaultProperty: true }], + ['@babel/plugin-transform-modules-commonjs', { strict: true }] + ]) + }), + esm: Object.assign({}, common, { + presets: [['@babel/preset-env', { targets, modules: false }]], + plugins: common.plugins.concat([ + ['@babel/plugin-transform-runtime', { useESModules: true, version: '7.5.0' }] + ]) + }) +}; +`; + +describe('BabelTransformExecutor E2E', () => { + let tempDir: string; + let context = createMockContext(); + let projectDir: string; + + beforeEach(async () => { + tempDir = createTempDir('nx-babel-e2e-'); + context = createMockContext({ root: tempDir }); + projectDir = path.join(tempDir, 'packages', 'test-lib'); + fs.mkdirSync(projectDir, { recursive: true }); + + const workspaceNodeModules = path.join(WORKSPACE_ROOT, 'node_modules'); + const tempNodeModules = path.join(projectDir, 'node_modules'); + fs.symlinkSync(workspaceNodeModules, tempNodeModules, 'junction'); + + const buildDir = path.join(projectDir, 'build', 'gulp'); + fs.mkdirSync(buildDir, { recursive: true }); + await writeFileText(path.join(buildDir, 'transpile-config.js'), BABEL_CONFIG); + + const jsDir = path.join(projectDir, 'js'); + fs.mkdirSync(jsDir, { recursive: true }); + + await writeFileText( + path.join(jsDir, 'module.js'), + `import { helper } from './utils'; + +export default function greet(name) { + return \`Hello, \${name}!\`; +} + +export const add = (a, b) => a + b; +`, + ); + + await writeFileText( + path.join(jsDir, 'utils.js'), + `export const something = 'test'; + +//#DEBUG +console.log('This is debug code'); +const debugOnly = true; +//#ENDDEBUG + +export function helper() { + return 42; +} +`, + ); + }); + + afterEach(() => { + cleanupTempDir(tempDir); + }); + + describe.each([ + { + configKey: 'cjs', + outDir: './artifacts/transpiled', + shouldContain: ['exports'], + shouldNotContain: ['export default function'], + }, + { + configKey: 'esm', + outDir: './artifacts/esm', + shouldContain: ['export'], + shouldNotContain: ['module.exports'], + }, + ])('$configKey config', ({ configKey, outDir, shouldContain, shouldNotContain }) => { + it('should transform files correctly', async () => { + const options: BabelTransformExecutorSchema = { + babelConfigPath: './build/gulp/transpile-config.js', + configKey, + sourcePattern: './js/**/*.js', + outDir, + }; + + const result = await executor(options, context); + expect(result.success).toBe(true); + + const outputDir = path.join(projectDir, outDir.replace('./', '')); + + expect(fs.existsSync(path.join(outputDir, 'module.js'))).toBe(true); + expect(fs.existsSync(path.join(outputDir, 'utils.js'))).toBe(true); + + const moduleContent = await readFileText(path.join(outputDir, 'module.js')); + + shouldContain.forEach((text) => expect(moduleContent).toContain(text)); + shouldNotContain.forEach((text) => expect(moduleContent).not.toContain(text)); + }, 30000); + }); + + it('should remove DEBUG blocks', async () => { + const options: BabelTransformExecutorSchema = { + babelConfigPath: './build/gulp/transpile-config.js', + configKey: 'cjs', + sourcePattern: './js/**/*.js', + outDir: './artifacts/transpiled-prod', + removeDebug: true, + }; + + const result = await executor(options, context); + expect(result.success).toBe(true); + + const utilsContent = await readFileText( + path.join(projectDir, 'artifacts', 'transpiled-prod', 'utils.js'), + ); + + expect(utilsContent).not.toContain('This is debug code'); + expect(utilsContent).not.toContain('debugOnly'); + expect(utilsContent).toContain('helper'); + expect(utilsContent).toContain('something'); + }, 30000); +}); diff --git a/packages/nx-infra-plugin/src/executors/babel-transform/executor.ts b/packages/nx-infra-plugin/src/executors/babel-transform/executor.ts new file mode 100644 index 000000000000..bba985f5a9f0 --- /dev/null +++ b/packages/nx-infra-plugin/src/executors/babel-transform/executor.ts @@ -0,0 +1,136 @@ +import { PromiseExecutor, logger } from '@nx/devkit'; +import * as path from 'path'; +import * as fs from 'fs-extra'; +import * as babel from '@babel/core'; +import { glob } from 'glob'; +import { BabelTransformExecutorSchema } from './schema'; +import { resolveProjectPath, normalizeGlobPathForWindows } from '../../utils/path-resolver'; +import { isWindowsOS } from '../../utils/common'; + +function removeDebugBlocks(content: string): string { + return content.replace(/\/{2,}\s*#DEBUG[\s\S]*?\/{2,}\s*#ENDDEBUG/g, ''); +} + +function loadBabelConfig( + projectRoot: string, + configPath: string, + configKey: string, +): babel.TransformOptions { + const fullConfigPath = path.join(projectRoot, configPath); + + if (!fs.existsSync(fullConfigPath)) { + throw new Error(`Babel config not found: ${fullConfigPath}`); + } + + const config = require(fullConfigPath); + + if (!config[configKey]) { + const availableKeys = Object.keys(config).join(', '); + throw new Error(`Config key '${configKey}' not found. Available: ${availableKeys}`); + } + + return config[configKey]; +} + +function applyExtensionRenames(filePath: string, renameExtensions: Record): string { + const ext = path.extname(filePath); + + if (ext && ext in renameExtensions) { + return filePath.slice(0, -ext.length) + renameExtensions[ext]; + } + + return filePath; +} + +async function transformFile( + filePath: string, + projectRoot: string, + outDir: string, + sourcePattern: string, + babelConfig: babel.TransformOptions, + removeDebug: boolean, + renameExtensions: Record, +): Promise { + let content = await fs.readFile(filePath, 'utf-8'); + + if (removeDebug) { + content = removeDebugBlocks(content); + } + + const result = await babel.transformAsync(content, { + ...babelConfig, + filename: filePath, + }); + + if (!result?.code) { + throw new Error(`Babel returned no code for ${filePath}`); + } + + const cleanPattern = sourcePattern.replace(/^\.\//, ''); + const globIndex = cleanPattern.search(/\*+/); + const patternBase = + globIndex > 0 + ? cleanPattern.substring(0, globIndex).replace(/\/$/, '') + : cleanPattern.split('/')[0]; + const sourceBase = path.join(projectRoot, patternBase); + const relativePath = path.relative(sourceBase, filePath); + + const renamedRelativePath = applyExtensionRenames(relativePath, renameExtensions); + const outputPath = path.join(projectRoot, outDir, renamedRelativePath); + + await fs.ensureDir(path.dirname(outputPath)); + await fs.writeFile(outputPath, result.code); +} + +const runExecutor: PromiseExecutor = async (options, context) => { + const projectRoot = resolveProjectPath(context); + + try { + const babelConfig = loadBabelConfig(projectRoot, options.babelConfigPath, options.configKey); + const removeDebug = options.removeDebug ?? false; + const renameExtensions = options.renameExtensions ?? {}; + + const sourcePath = path.join(projectRoot, options.sourcePattern); + const globPattern = isWindowsOS() ? normalizeGlobPathForWindows(sourcePath) : sourcePath; + + const sourceFiles = await glob(globPattern, { + absolute: true, + ignore: options.excludePatterns || [], + }); + + if (sourceFiles.length === 0) { + logger.warn('No files matched the source pattern'); + return { success: false }; + } + + logger.verbose( + `Transforming ${sourceFiles.length} files with config '${options.configKey}'...`, + ); + if (removeDebug) { + logger.verbose('Debug blocks will be removed (production mode)'); + } + + await Promise.all( + sourceFiles.map((file) => + transformFile( + file, + projectRoot, + options.outDir, + options.sourcePattern, + babelConfig, + removeDebug, + renameExtensions, + ), + ), + ); + + logger.verbose(`Successfully transformed ${sourceFiles.length} files to ${options.outDir}`); + return { success: true }; + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + logger.error(`Babel transform failed: ${errorMsg}`); + return { success: false }; + } +}; + +export default runExecutor; diff --git a/packages/nx-infra-plugin/src/executors/babel-transform/schema.json b/packages/nx-infra-plugin/src/executors/babel-transform/schema.json new file mode 100644 index 000000000000..0cd7adbb88ec --- /dev/null +++ b/packages/nx-infra-plugin/src/executors/babel-transform/schema.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/schema", + "type": "object", + "title": "Babel Transform Executor", + "properties": { + "babelConfigPath": { + "type": "string", + "description": "Path to Babel config file relative to project root (e.g., './build/gulp/transpile-config.js')" + }, + "configKey": { + "type": "string", + "description": "Key in the config object to use (e.g., 'cjs', 'tsCjs', 'esm')" + }, + "sourcePattern": { + "type": "string", + "description": "Primary glob pattern for source files to transform (e.g., './js/**/*.js')" + }, + "excludePatterns": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob patterns to exclude from processing" + }, + "outDir": { + "type": "string", + "description": "Output directory relative to project root where transformed files will be written" + }, + "removeDebug": { + "type": "boolean", + "default": false, + "description": "Remove #DEBUG...#ENDDEBUG blocks before transpilation (for production builds)" + }, + "renameExtensions": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Map of file extension renames to apply to output files" + } + }, + "required": ["babelConfigPath", "configKey", "sourcePattern", "outDir"], + "additionalProperties": false +} diff --git a/packages/nx-infra-plugin/src/executors/babel-transform/schema.ts b/packages/nx-infra-plugin/src/executors/babel-transform/schema.ts new file mode 100644 index 000000000000..ff5b4b72d787 --- /dev/null +++ b/packages/nx-infra-plugin/src/executors/babel-transform/schema.ts @@ -0,0 +1,9 @@ +export interface BabelTransformExecutorSchema { + babelConfigPath: string; + configKey: string; + sourcePattern: string; + excludePatterns?: string[]; + outDir: string; + removeDebug?: boolean; + renameExtensions?: Record; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c1cb00c358e8..ed425b6ba4cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2240,6 +2240,30 @@ importers: packages/nx-infra-plugin: dependencies: + '@babel/core': + specifier: '>=7.0.0' + version: 7.28.6 + '@babel/plugin-transform-modules-commonjs': + specifier: '>=7.0.0' + version: 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-object-rest-spread': + specifier: '>=7.0.0' + version: 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-runtime': + specifier: '>=7.0.0' + version: 7.28.5(@babel/core@7.28.6) + '@babel/preset-env': + specifier: '>=7.0.0' + version: 7.28.6(@babel/core@7.28.6) + babel-plugin-add-module-exports: + specifier: '>=1.0.0' + version: 1.0.4 + babel-plugin-inferno: + specifier: '>=6.0.0' + version: 6.8.5(@babel/core@7.28.6) + core-js-compat: + specifier: '>=3.0.0' + version: 3.45.1 fs-extra: specifier: 11.2.0 version: 11.2.0 @@ -2262,6 +2286,9 @@ importers: specifier: 3.0.2 version: 3.0.2 devDependencies: + '@types/babel__core': + specifier: 7.20.5 + version: 7.20.5 '@types/fs-extra': specifier: 11.0.4 version: 11.0.4 @@ -2269,13 +2296,8 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/lodash': -<<<<<<< HEAD specifier: 4.17.23 version: 4.17.23 -======= - specifier: 4.17.13 - version: 4.17.13 ->>>>>>> b4c6739a4e (feat(nx-infra-plugin): copy-files, support glob patterns) '@types/node': specifier: 18.19.130 version: 18.19.130 @@ -3433,12 +3455,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.25.9': - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.6': resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} engines: {node: '>=6.9.0'} @@ -6645,9 +6661,6 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} @@ -6798,13 +6811,8 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} -<<<<<<< HEAD '@types/lodash@4.17.23': resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==} -======= - '@types/lodash@4.17.13': - resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} ->>>>>>> b4c6739a4e (feat(nx-infra-plugin): copy-files, support glob patterns) '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -20309,22 +20317,22 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.28.6)': dependencies: @@ -20389,7 +20397,7 @@ snapshots: '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': dependencies: @@ -20399,42 +20407,42 @@ snapshots: '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.6)': dependencies: @@ -21153,13 +21161,6 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -21949,7 +21950,7 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/parser': 7.28.6 '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/types': 7.28.6 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -22048,11 +22049,7 @@ snapshots: '@devexpress/callsite-record@4.1.7': dependencies: -<<<<<<< HEAD '@types/lodash': 4.17.23 -======= - '@types/lodash': 4.17.13 ->>>>>>> b4c6739a4e (feat(nx-infra-plugin): copy-files, support glob patterns) callsite: 1.0.0 chalk: 2.4.2 error-stack-parser: 2.1.4 @@ -25567,10 +25564,10 @@ snapshots: '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.6 - '@babel/types': 7.28.5 + '@babel/types': 7.28.6 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.6.8': dependencies: @@ -25581,10 +25578,6 @@ snapshots: '@babel/parser': 7.28.6 '@babel/types': 7.28.6 - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.28.6 - '@types/babel__traverse@7.28.0': dependencies: '@babel/types': 7.28.6 @@ -25767,11 +25760,7 @@ snapshots: dependencies: '@types/node': 20.12.8 -<<<<<<< HEAD '@types/lodash@4.17.23': {} -======= - '@types/lodash@4.17.13': {} ->>>>>>> b4c6739a4e (feat(nx-infra-plugin): copy-files, support glob patterns) '@types/mdast@3.0.15': dependencies: @@ -27636,9 +27625,9 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/types': 7.28.6 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.28.0 babel-plugin-macros@2.8.0: dependencies: @@ -37705,8 +37694,8 @@ snapshots: react-docgen@8.0.2: dependencies: '@babel/core': 7.28.6 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 @@ -40314,7 +40303,7 @@ snapshots: '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.28.6) '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.6) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.28.6) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.6) '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.28.6) '@babel/plugin-transform-runtime': 7.23.3(@babel/core@7.28.6) '@babel/preset-env': 7.28.6(@babel/core@7.28.6) From 0f4f9cd6d847620455005a9ee350f754252d0984 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Mon, 26 Jan 2026 13:09:28 +0200 Subject: [PATCH 09/12] chore(devextreme): add nx targets for transpile task --- packages/devextreme/project.json | 248 +++++++++++++++++- .../src/executors/copy-files/schema.json | 6 +- 2 files changed, 243 insertions(+), 11 deletions(-) diff --git a/packages/devextreme/project.json b/packages/devextreme/project.json index 5e88e5fef15b..eda1ac904422 100644 --- a/packages/devextreme/project.json +++ b/packages/devextreme/project.json @@ -131,23 +131,257 @@ ], "cache": true }, - "build:transpile": { + "clean:dist-ts": { + "executor": "devextreme-nx-infra-plugin:clean", + "options": { + "targetDirectory": "./artifacts/dist_ts" + } + }, + "build:ts:internal": { "executor": "nx:run-commands", "options": { - "command": "cross-env BUILD_ESM_PACKAGE=true gulp transpile", + "command": "gulp ts-compile-internal", "cwd": "{projectRoot}" }, "inputs": [ - "{projectRoot}/js/**/*.js", - "{projectRoot}/build/gulp/transpile.js", - "{projectRoot}/babel.config.cjs" + "{projectRoot}/js/__internal/**/*.{ts,tsx}", + "!{projectRoot}/js/__internal/**/__tests__/**/*", + "{projectRoot}/js/__internal/tsconfig.json" + ], + "outputs": ["{projectRoot}/artifacts/dist_ts"], + "cache": true + }, + "build:cjs": { + "executor": "devextreme-nx-infra-plugin:babel-transform", + "options": { + "babelConfigPath": "./build/gulp/transpile-config.js", + "configKey": "cjs", + "sourcePattern": "./js/**/*.{js,jsx}", + "excludePatterns": ["./js/**/*.d.ts", "./js/__internal/**/*"], + "outDir": "./artifacts/transpiled" + }, + "configurations": { + "production": { + "outDir": "./artifacts/transpiled-renovation-npm", + "removeDebug": true + } + }, + "inputs": [ + "{projectRoot}/js/**/*.{js,jsx}", + "!{projectRoot}/js/**/*.d.ts", + "!{projectRoot}/js/__internal/**/*" + ], + "outputs": ["{projectRoot}/artifacts/transpiled"], + "cache": true + }, + "copy:json:transpiled": { + "executor": "devextreme-nx-infra-plugin:copy-files", + "options": { + "files": [ + { "from": "./js/localization/messages", "to": "./artifacts/transpiled/localization/messages" }, + { "from": "./js/viz/vector_map.utils/_settings.json", "to": "./artifacts/transpiled/viz/vector_map.utils/_settings.json" } + ] + }, + "inputs": ["{projectRoot}/js/**/*.json", "!{projectRoot}/js/__internal/**/*"], + "outputs": ["{projectRoot}/artifacts/transpiled/**/*.json"], + "cache": true + }, + "copy:json:transpiled-production": { + "executor": "devextreme-nx-infra-plugin:copy-files", + "options": { + "files": [ + { "from": "./js/localization/messages", "to": "./artifacts/transpiled-renovation-npm/localization/messages" }, + { "from": "./js/viz/vector_map.utils/_settings.json", "to": "./artifacts/transpiled-renovation-npm/viz/vector_map.utils/_settings.json" } + ] + }, + "inputs": ["{projectRoot}/js/**/*.json", "!{projectRoot}/js/__internal/**/*"], + "outputs": ["{projectRoot}/artifacts/transpiled-renovation-npm/**/*.json"], + "cache": true + }, + "copy:json:esm-npm": { + "executor": "devextreme-nx-infra-plugin:copy-files", + "options": { + "files": [ + { "from": "./js/localization/messages", "to": "./artifacts/transpiled-esm-npm/esm/localization/messages" }, + { "from": "./js/viz/vector_map.utils/_settings.json", "to": "./artifacts/transpiled-esm-npm/esm/viz/vector_map.utils/_settings.json" }, + { "from": "./js/localization/messages", "to": "./artifacts/transpiled-esm-npm/cjs/localization/messages" }, + { "from": "./js/viz/vector_map.utils/_settings.json", "to": "./artifacts/transpiled-esm-npm/cjs/viz/vector_map.utils/_settings.json" } + ] + }, + "inputs": ["{projectRoot}/js/**/*.json", "!{projectRoot}/js/__internal/**/*"], + "outputs": ["{projectRoot}/artifacts/transpiled-esm-npm/**/*.json"], + "cache": true + }, + "build:npm:esm": { + "executor": "devextreme-nx-infra-plugin:babel-transform", + "options": { + "babelConfigPath": "./build/gulp/transpile-config.js", + "configKey": "esm", + "sourcePattern": "./js/**/*.{js,jsx}", + "excludePatterns": ["./js/**/*.d.ts", "./js/__internal/**/*"], + "outDir": "./artifacts/transpiled-esm-npm/esm", + "removeDebug": true + }, + "inputs": [ + "{projectRoot}/js/**/*.{js,jsx}", + "!{projectRoot}/js/**/*.d.ts", + "!{projectRoot}/js/__internal/**/*" + ], + "outputs": ["{projectRoot}/artifacts/transpiled-esm-npm/esm"], + "cache": true + }, + "build:npm:cjs": { + "executor": "devextreme-nx-infra-plugin:babel-transform", + "options": { + "babelConfigPath": "./build/gulp/transpile-config.js", + "configKey": "cjs", + "sourcePattern": "./js/**/*.{js,jsx}", + "excludePatterns": ["./js/**/*.d.ts", "./js/__internal/**/*"], + "outDir": "./artifacts/transpiled-esm-npm/cjs", + "removeDebug": true + }, + "inputs": [ + "{projectRoot}/js/**/*.{js,jsx}", + "!{projectRoot}/js/**/*.d.ts", + "!{projectRoot}/js/__internal/**/*" + ], + "outputs": ["{projectRoot}/artifacts/transpiled-esm-npm/cjs"], + "cache": true + }, + "build:cjs:internal": { + "executor": "devextreme-nx-infra-plugin:babel-transform", + "options": { + "babelConfigPath": "./build/gulp/transpile-config.js", + "configKey": "tsCjs", + "sourcePattern": "./artifacts/dist_ts/__internal/**/*.{js,jsx}", + "outDir": "./artifacts/transpiled/__internal", + "renameExtensions": { ".jsx": ".js" } + }, + "configurations": { + "production": { + "outDir": "./artifacts/transpiled-renovation-npm/__internal", + "removeDebug": true + } + }, + "inputs": ["{projectRoot}/artifacts/dist_ts/__internal/**/*.{js,jsx}"], + "outputs": ["{projectRoot}/artifacts/transpiled/__internal"], + "cache": true + }, + "build:npm:esm:internal": { + "executor": "devextreme-nx-infra-plugin:babel-transform", + "options": { + "babelConfigPath": "./build/gulp/transpile-config.js", + "configKey": "esm", + "sourcePattern": "./artifacts/dist_ts/__internal/**/*.{js,jsx}", + "outDir": "./artifacts/transpiled-esm-npm/esm/__internal", + "removeDebug": true, + "renameExtensions": { ".jsx": ".js" } + }, + "inputs": ["{projectRoot}/artifacts/dist_ts/__internal/**/*.{js,jsx}"], + "outputs": ["{projectRoot}/artifacts/transpiled-esm-npm/esm/__internal"], + "cache": true + }, + "build:npm:cjs:internal": { + "executor": "devextreme-nx-infra-plugin:babel-transform", + "options": { + "babelConfigPath": "./build/gulp/transpile-config.js", + "configKey": "tsCjs", + "sourcePattern": "./artifacts/dist_ts/__internal/**/*.{js,jsx}", + "outDir": "./artifacts/transpiled-esm-npm/cjs/__internal", + "removeDebug": true, + "renameExtensions": { ".jsx": ".js" } + }, + "inputs": ["{projectRoot}/artifacts/dist_ts/__internal/**/*.{js,jsx}"], + "outputs": ["{projectRoot}/artifacts/transpiled-esm-npm/cjs/__internal"], + "cache": true + }, + "build:cjs:bundles": { + "executor": "devextreme-nx-infra-plugin:babel-transform", + "options": { + "babelConfigPath": "./build/gulp/transpile-config.js", + "configKey": "cjs", + "sourcePattern": "./build/bundle-templates/**/*.js", + "outDir": "./artifacts/transpiled/bundles", + "removeDebug": true + }, + "configurations": { + "production": { + "outDir": "./artifacts/transpiled-renovation-npm/bundles" + }, + "esm-npm": { + "outDir": "./artifacts/transpiled-esm-npm/bundles" + } + }, + "inputs": ["{projectRoot}/build/bundle-templates/**/*.js"], + "outputs": ["{projectRoot}/artifacts/transpiled/bundles"], + "cache": true + }, + "build:npm:dual-mode": { + "executor": "nx:run-commands", + "options": { + "command": "cross-env BUILD_ESM_PACKAGE=true gulp esm-dual-mode-manifests", + "cwd": "{projectRoot}" + }, + "inputs": [ + "{projectRoot}/artifacts/transpiled-esm-npm/esm/**/*", + "{projectRoot}/artifacts/transpiled-esm-npm/cjs/**/*", + "{projectRoot}/js/**/*.d.ts" + ], + "outputs": [ + "{projectRoot}/artifacts/transpiled-esm-npm/**/package.json" + ], + "cache": true + }, + "build:transpile": { + "executor": "nx:run-commands", + "options": { + "commands": [ + "pnpm nx build:devextreme-bundler-config:generate devextreme", + "pnpm nx build:ts:internal devextreme", + "pnpm nx run-many --targets=build:cjs,build:cjs:internal,build:cjs:bundles --projects=devextreme --parallel", + "pnpm nx copy:json:transpiled devextreme", + "pnpm nx run-many --targets=build:cjs,build:cjs:internal,build:cjs:bundles --projects=devextreme --parallel -c production", + "pnpm nx copy:json:transpiled-production devextreme", + "pnpm nx run-many --targets=build:npm:esm,build:npm:esm:internal,build:npm:cjs,build:npm:cjs:internal --projects=devextreme --parallel", + "pnpm nx copy:json:esm-npm devextreme", + "pnpm nx build:cjs:bundles devextreme -c esm-npm", + "pnpm nx build:npm:dual-mode devextreme", + "pnpm nx clean:dist-ts devextreme" + ], + "cwd": "{projectRoot}", + "parallel": false + }, + "inputs": [ + "{projectRoot}/js/**/*.{js,ts,tsx}", + "!{projectRoot}/js/**/*.d.ts", + "{projectRoot}/build/bundle-templates/**/*.js" ], "outputs": [ "{projectRoot}/artifacts/transpiled", "{projectRoot}/artifacts/transpiled-esm-npm", - "{projectRoot}/artifacts/transpiled-renovation-npm" + "{projectRoot}/artifacts/transpiled-renovation-npm", + "{projectRoot}/build/bundle-templates/dx.custom.js" ], - "cache": true + "cache": true, + "configurations": { + "ci": { + "commands": [ + "pnpm nx build:devextreme-bundler-config:generate devextreme", + "pnpm nx build:ts:internal devextreme", + "pnpm nx run-many --targets=build:cjs,build:cjs:internal,build:cjs:bundles --projects=devextreme --parallel", + "pnpm nx copy:json:transpiled devextreme", + "pnpm nx run-many --targets=build:cjs,build:cjs:internal,build:cjs:bundles --projects=devextreme --parallel -c production", + "pnpm nx copy:json:transpiled-production devextreme", + "pnpm nx run-many --targets=build:npm:cjs,build:npm:cjs:internal --projects=devextreme --parallel", + "pnpm nx clean:dist-ts devextreme" + ], + "outputs": [ + "{projectRoot}/artifacts/transpiled", + "{projectRoot}/artifacts/transpiled-renovation-npm", + "{projectRoot}/build/bundle-templates/dx.custom.js" + ] + } + } }, "bundle:debug": { "executor": "nx:run-commands", diff --git a/packages/nx-infra-plugin/src/executors/copy-files/schema.json b/packages/nx-infra-plugin/src/executors/copy-files/schema.json index 10e9cc609c07..08f65d656642 100644 --- a/packages/nx-infra-plugin/src/executors/copy-files/schema.json +++ b/packages/nx-infra-plugin/src/executors/copy-files/schema.json @@ -1,17 +1,15 @@ { - "$schema": "https://json-schema.org/schema", + "$schema": "http://json-schema.org/schema", "type": "object", - "description": "Copy files or directories to a destination. Supports glob patterns and recursive directory copying.", "properties": { "files": { "type": "array", - "description": "Array of file copy operations to perform.", "items": { "type": "object", "properties": { "from": { "type": "string", - "description": "Source path relative to project root. Supports glob patterns (e.g., './src/*.ts', './assets/**/*')." + "description": "Source path relative to project root. Can be a file, directory, or glob pattern." }, "to": { "type": "string", From 8faf7cf07b958d25c15eeff02430f652cafa88bb Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Mon, 26 Jan 2026 13:12:13 +0200 Subject: [PATCH 10/12] chore(devextreme): remove transpile code migrated to nx executors --- packages/devextreme/build/gulp/transpile.js | 106 ++------------------ packages/devextreme/gulpfile.js | 6 ++ 2 files changed, 16 insertions(+), 96 deletions(-) diff --git a/packages/devextreme/build/gulp/transpile.js b/packages/devextreme/build/gulp/transpile.js index 4d9ee7d19c93..d4d9f8297aff 100644 --- a/packages/devextreme/build/gulp/transpile.js +++ b/packages/devextreme/build/gulp/transpile.js @@ -3,7 +3,6 @@ const babel = require('gulp-babel'); const flatMap = require('gulp-flatmap'); const fs = require('fs'); -const del = require('del'); const gulp = require('gulp'); const normalize = require('normalize-path'); @@ -13,11 +12,9 @@ const plumber = require('gulp-plumber'); const rename = require('gulp-rename'); const replace = require('gulp-replace'); const watch = require('gulp-watch'); -const cache = require('gulp-cache'); const removeDebug = require('./compression-pipes.js').removeDebug; const ctx = require('./context.js'); -const { ifEsmPackage } = require('./utils'); const testsConfig = require('../../testing/tests.babelrc.json'); const transpileConfig = require('./transpile-config'); @@ -58,7 +55,6 @@ const generatedTs = [ ]; const TS_OUTPUT_BASE_DIR = 'artifacts/dist_ts'; -const TS_OUTPUT_SRC = [`${TS_OUTPUT_BASE_DIR}/__internal/**/*.{js,jsx}`]; const TS_COMPILER_CONFIG = { baseAbsPath: path.resolve(__dirname, '../..'), relativePath: { @@ -112,83 +108,17 @@ const transpileTs = (compiler, src) => { return task; }; -const transpileTsClean = () => - async() => await del(TS_OUTPUT_BASE_DIR, { force: true }); - - -const createTranspileTask = (input, output, pipes) => - () => { - let result = gulp.src(input); - - pipes.forEach(pipe => { - result = result.pipe(pipe); - }); - - return result.pipe(gulp.dest(output)); - }; - - -const transpile = (src, dist, { jsPipes, tsPipes }) => { - const transpilePipes = []; - - if(tsPipes) { - const transpileTS = createTranspileTask(TS_OUTPUT_SRC, `${dist}/__internal`, tsPipes); - transpileTS.displayName = `transpile TS: ${dist}`; - transpilePipes.push(transpileTS); - } - - if(jsPipes) { - const transpileJS = createTranspileTask(src, dist, jsPipes); - transpileJS.displayName = `transpile JS: ${dist}`; - transpilePipes.push(transpileJS); - } - - - return gulp.series(...transpilePipes); -}; - -const cachedJsBabelCjs = () => - cache(babel(transpileConfig.cjs), { name: 'babel-cjs' }); - -const bundlesSrc = 'build/bundle-templates/**/*.js'; - -const transpileBundles = (dist) => transpile(bundlesSrc, path.join(dist, './bundles'), { - jsPipes: [ removeDebug(), cachedJsBabelCjs() ], +gulp.task('ts-compile-internal', (done) => { + createTsCompiler(TS_COMPILER_CONFIG).then((compiler) => { + transpileTs(compiler, srcTsPattern)() + .on('end', done) + .on('error', done); + }); }); -const transpileDefault = () => gulp.series( - transpile(src, ctx.TRANSPILED_PATH, { - jsPipes: [ cachedJsBabelCjs() ], - tsPipes: [ babel(transpileConfig.tsCjs) ], - }), - transpileBundles(ctx.TRANSPILED_PATH), -); - -const transpileProd = (dist, isEsm) => transpile( - src, - dist, - { - jsPipes: [ - removeDebug(), - isEsm ? babel(transpileConfig.esm) : cachedJsBabelCjs() - ], - tsPipes: [ - removeDebug(), - isEsm ? babel(transpileConfig.esm) : babel(transpileConfig.tsCjs), - ] - }, -); - -const transpileRenovationProd = (watch) => gulp.series( - transpileProd(ctx.TRANSPILED_PROD_RENOVATION_PATH, false, watch), - transpileBundles(ctx.TRANSPILED_PROD_RENOVATION_PATH), -); - -const transpileEsm = (dist) => gulp.series.apply(gulp, [ - transpileProd(path.join(dist, './cjs'), false), - transpileProd(path.join(dist, './esm'), true), - transpileBundles(dist), - () => gulp +gulp.task('esm-dual-mode-manifests', () => { + const dist = ctx.TRANSPILED_PROD_ESM_PATH; + return gulp .src(esmTranspileSrc) .pipe(flatMap((stream, file) => { const filePath = file.path; @@ -213,25 +143,9 @@ const transpileEsm = (dist) => gulp.series.apply(gulp, [ fPath.extname = '.json'; })); })) - .pipe(gulp.dest(dist)) -]); - -gulp.task('transpile-esm', transpileEsm(ctx.TRANSPILED_PROD_ESM_PATH)); - -gulp.task('transpile', (done) => { - createTsCompiler(TS_COMPILER_CONFIG).then((compiler) => { - gulp.series( - 'bundler-config', - transpileTs(compiler, srcTsPattern), - transpileDefault(), - transpileRenovationProd(), - ifEsmPackage('transpile-esm'), - transpileTsClean(), - )(done); - }); + .pipe(gulp.dest(dist)); }); - const watchJsTask = () => { const watchTask = watch(src) .on('ready', () => console.log('transpile JS is watching for changes...')) diff --git a/packages/devextreme/gulpfile.js b/packages/devextreme/gulpfile.js index 5b7f67fd296b..899e35357cf8 100644 --- a/packages/devextreme/gulpfile.js +++ b/packages/devextreme/gulpfile.js @@ -41,6 +41,12 @@ require('./build/gulp/check_licenses'); require('./build/gulp/systemjs'); require('./build/gulp/state_manager'); +gulp.task('transpile', shell.task( + env.TEST_CI + ? 'pnpm nx run devextreme:build:transpile -c ci' + : 'pnpm nx run devextreme:build:transpile' +)); + if(env.TEST_CI) { console.warn('Using test CI mode!'); } From 69c8a2bf2e6eefa35dc76688395c58ab427a2dc2 Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Tue, 27 Jan 2026 12:48:43 +0200 Subject: [PATCH 11/12] fix(devextreme): add missing bundler-config:prod to build:transpile pipeline --- packages/devextreme/project.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/devextreme/project.json b/packages/devextreme/project.json index eda1ac904422..ca1e6e6e436d 100644 --- a/packages/devextreme/project.json +++ b/packages/devextreme/project.json @@ -337,6 +337,7 @@ "options": { "commands": [ "pnpm nx build:devextreme-bundler-config:generate devextreme", + "pnpm nx build:devextreme-bundler-config:prod devextreme", "pnpm nx build:ts:internal devextreme", "pnpm nx run-many --targets=build:cjs,build:cjs:internal,build:cjs:bundles --projects=devextreme --parallel", "pnpm nx copy:json:transpiled devextreme", @@ -360,13 +361,15 @@ "{projectRoot}/artifacts/transpiled", "{projectRoot}/artifacts/transpiled-esm-npm", "{projectRoot}/artifacts/transpiled-renovation-npm", - "{projectRoot}/build/bundle-templates/dx.custom.js" + "{projectRoot}/build/bundle-templates/dx.custom.js", + "{projectRoot}/artifacts/npm/devextreme/bundles/dx.custom.config.js" ], "cache": true, "configurations": { "ci": { "commands": [ "pnpm nx build:devextreme-bundler-config:generate devextreme", + "pnpm nx build:devextreme-bundler-config:prod devextreme", "pnpm nx build:ts:internal devextreme", "pnpm nx run-many --targets=build:cjs,build:cjs:internal,build:cjs:bundles --projects=devextreme --parallel", "pnpm nx copy:json:transpiled devextreme", @@ -378,7 +381,8 @@ "outputs": [ "{projectRoot}/artifacts/transpiled", "{projectRoot}/artifacts/transpiled-renovation-npm", - "{projectRoot}/build/bundle-templates/dx.custom.js" + "{projectRoot}/build/bundle-templates/dx.custom.js", + "{projectRoot}/artifacts/npm/devextreme/bundles/dx.custom.config.js" ] } } From 9ef470135845c420dfc96774d8a6644c35b234ec Mon Sep 17 00:00:00 2001 From: Adel Khamatov Date: Tue, 27 Jan 2026 13:11:00 +0200 Subject: [PATCH 12/12] fix(nx-infra-plugin): fix babel-transform E2E tests failing under pnpx nx --- .../executors/babel-transform/executor.e2e.spec.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/nx-infra-plugin/src/executors/babel-transform/executor.e2e.spec.ts b/packages/nx-infra-plugin/src/executors/babel-transform/executor.e2e.spec.ts index 9b8f5810b493..439f71b4f1c8 100644 --- a/packages/nx-infra-plugin/src/executors/babel-transform/executor.e2e.spec.ts +++ b/packages/nx-infra-plugin/src/executors/babel-transform/executor.e2e.spec.ts @@ -46,16 +46,25 @@ describe('BabelTransformExecutor E2E', () => { let tempDir: string; let context = createMockContext(); let projectDir: string; + let savedCwd: string; beforeEach(async () => { + savedCwd = process.cwd(); tempDir = createTempDir('nx-babel-e2e-'); context = createMockContext({ root: tempDir }); projectDir = path.join(tempDir, 'packages', 'test-lib'); fs.mkdirSync(projectDir, { recursive: true }); - const workspaceNodeModules = path.join(WORKSPACE_ROOT, 'node_modules'); + const infraPluginNodeModules = path.join( + WORKSPACE_ROOT, + 'packages', + 'nx-infra-plugin', + 'node_modules', + ); const tempNodeModules = path.join(projectDir, 'node_modules'); - fs.symlinkSync(workspaceNodeModules, tempNodeModules, 'junction'); + fs.symlinkSync(infraPluginNodeModules, tempNodeModules, 'junction'); + + process.chdir(projectDir); const buildDir = path.join(projectDir, 'build', 'gulp'); fs.mkdirSync(buildDir, { recursive: true }); @@ -93,6 +102,7 @@ export function helper() { }); afterEach(() => { + process.chdir(savedCwd); cleanupTempDir(tempDir); });