diff --git a/changelog.md b/changelog.md index 86865a6..b239228 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,17 @@ # Changelog +## 2025-11-27 - 2.0.0 - BREAKING CHANGE(core) +Migrate filesystem to smartfs (async) and add Elasticsearch service support; refactor format/commit/meta modules + +- Replace @push.rocks/smartfile usage with @push.rocks/smartfs across the codebase; all filesystem operations are now async (SmartFs.file(...).read()/write(), SmartFs.directory(...).list()/create()/delete(), etc.) +- Convert formerly synchronous helpers and APIs to async (notable: detectProjectType, getProjectName, readCurrentVersion and related version bumping logic). Callers updated accordingly. +- Add Elasticsearch support to services: new config fields (ELASTICSEARCH_*), Docker run/start/stop/logs/status handling, and ELASTICSEARCH_URL in service configuration. +- Refactor formatting subsystem: cache and rollback/backup systems removed/disabled for stability, format planner execution simplified (sequential), diff/stats reporting updated to use smartfs. +- Update package.json dependencies: bump @git.zone/tsbuild, tsrun, tstest; upgrade @push.rocks/smartfile to v13 and add @push.rocks/smartfs dependency; update @types/node. +- Update commit flow and changelog generation to use smartfs for reading/writing files and to await version/branch detection where necessary. +- Expose a SmartFs instance via plugins and adjust all mod.* plugin files to import/use smartfs where required. +- Breaking change: Public and internal APIs that previously used synchronous smartfile APIs are now asynchronous. Consumers and scripts must await these functions and use the new smartfs API. + ## 2025-11-17 - 1.21.5 - fix(tsconfig) Remove emitDecoratorMetadata from tsconfig template diff --git a/package.json b/package.json index bcaf107..e3d2150 100644 --- a/package.json +++ b/package.json @@ -57,15 +57,14 @@ }, "homepage": "https://gitlab.com/gitzone/private/gitzone#readme", "devDependencies": { - "@git.zone/tsbuild": "^2.7.1", - "@git.zone/tsrun": "^1.6.2", - "@git.zone/tstest": "^2.7.0", + "@git.zone/tsbuild": "^3.1.0", + "@git.zone/tsrun": "^2.0.0", + "@git.zone/tstest": "^3.1.3", "@push.rocks/smartdelay": "^3.0.5", - "@push.rocks/smartfile": "^11.2.7", "@push.rocks/smartinteract": "^2.0.16", "@push.rocks/smartnetwork": "^4.4.0", "@push.rocks/smartshell": "^3.3.0", - "@types/node": "^22.15.18" + "@types/node": "^24.10.1" }, "dependencies": { "@git.zone/tsdoc": "^1.9.2", @@ -79,6 +78,8 @@ "@push.rocks/smartchok": "^1.1.1", "@push.rocks/smartcli": "^4.0.19", "@push.rocks/smartdiff": "^1.0.3", + "@push.rocks/smartfile": "^13.0.1", + "@push.rocks/smartfs": "^1.1.0", "@push.rocks/smartgulp": "^3.0.4", "@push.rocks/smartjson": "^5.2.0", "@push.rocks/smartlegal": "^1.0.27", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6dd2861..3cb8177 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,12 @@ importers: '@push.rocks/smartdiff': specifier: ^1.0.3 version: 1.0.3 + '@push.rocks/smartfile': + specifier: ^13.0.1 + version: 13.0.1(@push.rocks/smartfs@1.1.0) + '@push.rocks/smartfs': + specifier: ^1.1.0 + version: 1.1.0 '@push.rocks/smartgulp': specifier: ^3.0.4 version: 3.0.4 @@ -97,20 +103,17 @@ importers: version: 4.0.2 devDependencies: '@git.zone/tsbuild': - specifier: ^2.7.1 - version: 2.7.1 + specifier: ^3.1.0 + version: 3.1.0 '@git.zone/tsrun': - specifier: ^1.6.2 - version: 1.6.2 + specifier: ^2.0.0 + version: 2.0.0 '@git.zone/tstest': - specifier: ^2.7.0 - version: 2.7.0(socks@2.8.7)(typescript@5.9.3) + specifier: ^3.1.3 + version: 3.1.3(socks@2.8.7)(typescript@5.9.3) '@push.rocks/smartdelay': specifier: ^3.0.5 version: 3.0.5 - '@push.rocks/smartfile': - specifier: ^11.2.7 - version: 11.2.7 '@push.rocks/smartinteract': specifier: ^2.0.16 version: 2.0.16 @@ -121,8 +124,8 @@ importers: specifier: ^3.3.0 version: 3.3.0 '@types/node': - specifier: ^22.15.18 - version: 22.18.1 + specifier: ^24.10.1 + version: 24.10.1 packages: @@ -144,8 +147,8 @@ packages: '@api.global/typedrequest@3.1.10': resolution: {integrity: sha512-EiCp44XVcMjBvEs4oM1nMUaeY4ySU0Pzt3+mDwVG5DNP6EV87Nwancbr2jKScvaFNel9eeDgGtgEnFBKjOnApA==} - '@api.global/typedserver@3.0.79': - resolution: {integrity: sha512-NIZMQOeqEpqPT3qeA0hqTyLgZw5zO3bvRHkiDfFOrWMtnfvOLWZwmqJAcgpSSHHiwzuw47NNPvBZdJGXKnH+Zg==} + '@api.global/typedserver@3.0.80': + resolution: {integrity: sha512-dcp0oXsjBL+XdFg1wUUP08uJQid5bQ0Yv3V3Y3lnI2QCbat0FU+Tsb0TZRnZ4+P150Vj/ITBqJUgDzFsF34grA==} '@api.global/typedsocket@3.0.1': resolution: {integrity: sha512-xojiAVNXtHoxkpBo8U2HHJG8FrVXXuLvDNndSHXwx4C9VslUwDn5zSCI+PdBl8iAg+ZuBmKjqkpZZ9sL6DC5yQ==} @@ -177,110 +180,222 @@ packages: resolution: {integrity: sha512-+l/p5G/bbobzcils5wKSV1vQEITvJIXDkLfkMWLpF6CC3YfdSDlVn1VOD+NcfuOuVGv4UkwcJzWuC6eaX6t8jg==} engines: {node: '>=18.0.0'} + '@aws-sdk/client-s3@3.937.0': + resolution: {integrity: sha512-ioeNe6HSc7PxjsUQY7foSHmgesxM5KwAeUtPhIHgKx99nrM+7xYCfW4FMvHypUzz7ZOvqlCdH7CEAZ8ParBvVg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/client-sso@3.883.0': resolution: {integrity: sha512-Ybjw76yPceEBO7+VLjy5+/Gr0A1UNymSDHda5w8tfsS2iHZt/vuD6wrYpHdLoUx4H5la8ZhwcSfK/+kmE+QLPw==} engines: {node: '>=18.0.0'} + '@aws-sdk/client-sso@3.936.0': + resolution: {integrity: sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==} + engines: {node: '>=18.0.0'} + '@aws-sdk/core@3.883.0': resolution: {integrity: sha512-FmkqnqBLkXi4YsBPbF6vzPa0m4XKUuvgKDbamfw4DZX2CzfBZH6UU4IwmjNV3ZM38m0xraHarK8KIbGSadN3wg==} engines: {node: '>=18.0.0'} + '@aws-sdk/core@3.936.0': + resolution: {integrity: sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-env@3.883.0': resolution: {integrity: sha512-Z6tPBXPCodfhIF1rvQKoeRGMkwL6TK0xdl1UoMIA1x4AfBpPICAF77JkFBExk/pdiFYq1d04Qzddd/IiujSlLg==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-env@3.936.0': + resolution: {integrity: sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-http@3.883.0': resolution: {integrity: sha512-P589ug1lMOOEYLTaQJjSP+Gee34za8Kk2LfteNQfO9SpByHFgGj++Sg8VyIe30eZL8Q+i4qTt24WDCz1c+dgYg==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-http@3.936.0': + resolution: {integrity: sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-ini@3.883.0': resolution: {integrity: sha512-n6z9HTzuDEdugXvPiE/95VJXbF4/gBffdV/SRHDJKtDHaRuvp/gggbfmfVSTFouGVnlKPb2pQWQsW3Nr/Y3Lrw==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-ini@3.936.0': + resolution: {integrity: sha512-TbUv56ERQQujoHcLMcfL0Q6bVZfYF83gu/TjHkVkdSlHPOIKaG/mhE2XZSQzXv1cud6LlgeBbfzVAxJ+HPpffg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-login@3.936.0': + resolution: {integrity: sha512-8DVrdRqPyUU66gfV7VZNToh56ZuO5D6agWrkLQE/xbLJOm2RbeRgh6buz7CqV8ipRd6m+zCl9mM4F3osQLZn8Q==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-node@3.883.0': resolution: {integrity: sha512-QIUhsatsrwfB9ZsKpmi0EySSfexVP61wgN7hr493DOileh2QsKW4XATEfsWNmx0dj9323Vg1Mix7bXtRfl9cGg==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-node@3.936.0': + resolution: {integrity: sha512-rk/2PCtxX9xDsQW8p5Yjoca3StqmQcSfkmD7nQ61AqAHL1YgpSQWqHE+HjfGGiHDYKG7PvE33Ku2GyA7lEIJAw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-process@3.883.0': resolution: {integrity: sha512-m1shbHY/Vppy4EdddG9r8x64TO/9FsCjokp5HbKcZvVoTOTgUJrdT8q2TAQJ89+zYIJDqsKbqfrmfwJ1zOdnGQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-process@3.936.0': + resolution: {integrity: sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-sso@3.883.0': resolution: {integrity: sha512-37ve9Tult08HLXrJFHJM/sGB/vO7wzI6v1RUUfeTiShqx8ZQ5fTzCTNY/duO96jCtCexmFNSycpQzh7lDIf0aA==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-sso@3.936.0': + resolution: {integrity: sha512-wHlEAJJvtnSyxTfNhN98JcU4taA1ED2JvuI2eePgawqBwS/Tzi0mhED1lvNIaWOkjfLd+nHALwszGrtJwEq4yQ==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-web-identity@3.883.0': resolution: {integrity: sha512-SL82K9Jb0vpuTadqTO4Fpdu7SKtebZ3Yo4LZvk/U0UauVMlJj5ZTos0mFx1QSMB9/4TpqifYrSZcdnxgYg8Eqw==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-web-identity@3.936.0': + resolution: {integrity: sha512-v3qHAuoODkoRXsAF4RG+ZVO6q2P9yYBT4GMpMEfU9wXVNn7AIfwZgTwzSUfnjNiGva5BKleWVpRpJ9DeuLFbUg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-bucket-endpoint@3.873.0': resolution: {integrity: sha512-b4bvr0QdADeTUs+lPc9Z48kXzbKHXQKgTvxx/jXDgSW9tv4KmYPO1gIj6Z9dcrBkRWQuUtSW3Tu2S5n6pe+zeg==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-bucket-endpoint@3.936.0': + resolution: {integrity: sha512-XLSVVfAorUxZh6dzF+HTOp4R1B5EQcdpGcPliWr0KUj2jukgjZEcqbBmjyMF/p9bmyQsONX80iURF1HLAlW0qg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-expect-continue@3.873.0': resolution: {integrity: sha512-GIqoc8WgRcf/opBOZXFLmplJQKwOMjiOMmDz9gQkaJ8FiVJoAp8EGVmK2TOWZMQUYsavvHYsHaor5R2xwPoGVg==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-expect-continue@3.936.0': + resolution: {integrity: sha512-Eb4ELAC23bEQLJmUMYnPWcjD3FZIsmz2svDiXEcxRkQU9r7NRID7pM7C5NPH94wOfiCk0b2Y8rVyFXW0lGQwbA==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-flexible-checksums@3.883.0': resolution: {integrity: sha512-EloU4ZjkH+CXCHJcYElXo5nZ1vK6Miam/S02YSHk5JTrJkm4RV478KXXO29TIIAwZXcLT/FEQOZ9ZH/JHFFCFQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-flexible-checksums@3.936.0': + resolution: {integrity: sha512-l3GG6CrSQtMCM6fWY7foV3JQv0WJWT+3G6PSP3Ceb/KEE/5Lz5PrYFXTBf+bVoYL1b0bGjGajcgAXpstBmtHtQ==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-host-header@3.873.0': resolution: {integrity: sha512-KZ/W1uruWtMOs7D5j3KquOxzCnV79KQW9MjJFZM/M0l6KI8J6V3718MXxFHsTjUE4fpdV6SeCNLV1lwGygsjJA==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-host-header@3.936.0': + resolution: {integrity: sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-location-constraint@3.873.0': resolution: {integrity: sha512-r+hIaORsW/8rq6wieDordXnA/eAu7xAPLue2InhoEX6ML7irP52BgiibHLpt9R0psiCzIHhju8qqKa4pJOrmiw==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-location-constraint@3.936.0': + resolution: {integrity: sha512-SCMPenDtQMd9o5da9JzkHz838w3327iqXk3cbNnXWqnNRx6unyW8FL0DZ84gIY12kAyVHz5WEqlWuekc15ehfw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-logger@3.876.0': resolution: {integrity: sha512-cpWJhOuMSyz9oV25Z/CMHCBTgafDCbv7fHR80nlRrPdPZ8ETNsahwRgltXP1QJJ8r3X/c1kwpOR7tc+RabVzNA==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-logger@3.936.0': + resolution: {integrity: sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-recursion-detection@3.873.0': resolution: {integrity: sha512-OtgY8EXOzRdEWR//WfPkA/fXl0+WwE8hq0y9iw2caNyKPtca85dzrrZWnPqyBK/cpImosrpR1iKMYr41XshsCg==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-recursion-detection@3.936.0': + resolution: {integrity: sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-sdk-s3@3.883.0': resolution: {integrity: sha512-i4sGOj9xhSN6/LkYj3AJ2SRWENnpN9JySwNqIoRqO1Uon8gfyNLJd1yV+s43vXQsU5wbKWVXK8l9SRo+vNTQwg==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-sdk-s3@3.936.0': + resolution: {integrity: sha512-UQs/pVq4cOygsnKON0pOdSKIWkfgY0dzq4h+fR+xHi/Ng3XzxPJhWeAE6tDsKrcyQc1X8UdSbS70XkfGYr5hng==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-ssec@3.873.0': resolution: {integrity: sha512-AF55J94BoiuzN7g3hahy0dXTVZahVi8XxRBLgzNp6yQf0KTng+hb/V9UQZVYY1GZaDczvvvnqC54RGe9OZZ9zQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-ssec@3.936.0': + resolution: {integrity: sha512-/GLC9lZdVp05ozRik5KsuODR/N7j+W+2TbfdFL3iS+7un+gnP6hC8RDOZd6WhpZp7drXQ9guKiTAxkZQwzS8DA==} + engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-user-agent@3.883.0': resolution: {integrity: sha512-q58uLYnGLg7hsnWpdj7Cd1Ulsq1/PUJOHvAfgcBuiDE/+Fwh0DZxZZyjrU+Cr+dbeowIdUaOO8BEDDJ0CUenJw==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-user-agent@3.936.0': + resolution: {integrity: sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/nested-clients@3.883.0': resolution: {integrity: sha512-IhzDM+v0ga53GOOrZ9jmGNr7JU5OR6h6ZK9NgB7GXaa+gsDbqfUuXRwyKDYXldrTXf1sUR3vy1okWDXA7S2ejQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/nested-clients@3.936.0': + resolution: {integrity: sha512-eyj2tz1XmDSLSZQ5xnB7cLTVKkSJnYAEoNDSUNhzWPxrBDYeJzIbatecOKceKCU8NBf8gWWZCK/CSY0mDxMO0A==} + engines: {node: '>=18.0.0'} + '@aws-sdk/region-config-resolver@3.873.0': resolution: {integrity: sha512-q9sPoef+BBG6PJnc4x60vK/bfVwvRWsPgcoQyIra057S/QGjq5VkjvNk6H8xedf6vnKlXNBwq9BaANBXnldUJg==} engines: {node: '>=18.0.0'} + '@aws-sdk/region-config-resolver@3.936.0': + resolution: {integrity: sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/signature-v4-multi-region@3.883.0': resolution: {integrity: sha512-86PO7+xhuQ48cD3xlZgEpRxVP1lBarWAJy23sB6zZLHgZSbnYXYjRFuyxX4PlFzqllM3PDKJvq3WnXeqSXeNsg==} engines: {node: '>=18.0.0'} + '@aws-sdk/signature-v4-multi-region@3.936.0': + resolution: {integrity: sha512-8qS0GFUqkmwO7JZ0P8tdluBmt1UTfYUah8qJXGzNh9n1Pcb0AIeT117cCSiCUtwk+gDbJvd4hhRIhJCNr5wgjg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/token-providers@3.883.0': resolution: {integrity: sha512-tcj/Z5paGn9esxhmmkEW7gt39uNoIRbXG1UwJrfKu4zcTr89h86PDiIE2nxUO3CMQf1KgncPpr5WouPGzkh/QQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/token-providers@3.936.0': + resolution: {integrity: sha512-vvw8+VXk0I+IsoxZw0mX9TMJawUJvEsg3EF7zcCSetwhNPAU8Xmlhv7E/sN/FgSmm7b7DsqKoW6rVtQiCs1PWQ==} + engines: {node: '>=18.0.0'} + '@aws-sdk/types@3.862.0': resolution: {integrity: sha512-Bei+RL0cDxxV+lW2UezLbCYYNeJm6Nzee0TpW0FfyTRBhH9C1XQh4+x+IClriXvgBnRquTMMYsmJfvx8iyLKrg==} engines: {node: '>=18.0.0'} + '@aws-sdk/types@3.936.0': + resolution: {integrity: sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/util-arn-parser@3.873.0': resolution: {integrity: sha512-qag+VTqnJWDn8zTAXX4wiVioa0hZDQMtbZcGRERVnLar4/3/VIKBhxX2XibNQXFu1ufgcRn4YntT/XEPecFWcg==} engines: {node: '>=18.0.0'} + '@aws-sdk/util-arn-parser@3.893.0': + resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==} + engines: {node: '>=18.0.0'} + '@aws-sdk/util-endpoints@3.879.0': resolution: {integrity: sha512-aVAJwGecYoEmbEFju3127TyJDF9qJsKDUUTRMDuS8tGn+QiWQFnfInmbt+el9GU1gEJupNTXV+E3e74y51fb7A==} engines: {node: '>=18.0.0'} + '@aws-sdk/util-endpoints@3.936.0': + resolution: {integrity: sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==} + engines: {node: '>=18.0.0'} + '@aws-sdk/util-locate-window@3.873.0': resolution: {integrity: sha512-xcVhZF6svjM5Rj89T1WzkjQmrTF6dpR2UvIHPMTnSZoNe6CixejPZ6f0JJ2kAhO8H+dUHwNBlsUgOTIKiK/Syg==} engines: {node: '>=18.0.0'} @@ -288,6 +403,9 @@ packages: '@aws-sdk/util-user-agent-browser@3.873.0': resolution: {integrity: sha512-AcRdbK6o19yehEcywI43blIBhOCSo6UgyWcuOJX5CFF8k39xm1ILCjQlRRjchLAxWrm0lU0Q7XV90RiMMFMZtA==} + '@aws-sdk/util-user-agent-browser@3.936.0': + resolution: {integrity: sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==} + '@aws-sdk/util-user-agent-node@3.883.0': resolution: {integrity: sha512-28cQZqC+wsKUHGpTBr+afoIdjS6IoEJkMqcZsmo2Ag8LzmTa6BUWQenFYB0/9BmDy4PZFPUn+uX+rJgWKB+jzA==} engines: {node: '>=18.0.0'} @@ -297,10 +415,27 @@ packages: aws-crt: optional: true + '@aws-sdk/util-user-agent-node@3.936.0': + resolution: {integrity: sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/xml-builder@3.873.0': resolution: {integrity: sha512-kLO7k7cGJ6KaHiExSJWojZurF7SnGMDHXRuQunFnEoD0n1yB6Lqy/S/zHiQ7oJnBhPr9q0TW9qFkrsZb1Uc54w==} engines: {node: '>=18.0.0'} + '@aws-sdk/xml-builder@3.930.0': + resolution: {integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==} + engines: {node: '>=18.0.0'} + + '@aws/lambda-invoke-store@0.2.1': + resolution: {integrity: sha512-sIyFcoPZkTtNu9xFeEoynMef3bPJIAbOfUh+ueYcfhVl6xm2VRtMcMclSxmZCMnHHd4hlYKJeq/aggmBEWynww==} + engines: {node: '>=18.0.0'} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -319,16 +454,9 @@ packages: '@cloudflare/workers-types@4.20251014.0': resolution: {integrity: sha512-tEW98J/kOa0TdylIUOrLKRdwkUw0rvvYVlo+Ce0mqRH3c8kSoxLzUH9gfCvwLe0M89z1RkzFovSKAW2Nwtyn3w==} - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - '@configvault.io/interfaces@1.0.17': resolution: {integrity: sha512-bEcCUR2VBDJsTin8HQh8Uw/mlYl2v8A3jMIaQ+MTB9Hrqd6CZL2dL7iJdWyFl/3EIX+LDxWFR+Oq7liIq7w+1Q==} - '@dabh/diagnostics@2.0.8': - resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} - '@design.estate/dees-comms@1.0.27': resolution: {integrity: sha512-GvzTUwkV442LD60T08iqSoqvhA02Mou5lFvvqBPc4yBUiU7cZISqBx+76xvMgMIEI9Dx9JfTl4/2nW8MoVAanw==} @@ -341,9 +469,6 @@ packages: '@emnapi/core@1.6.0': resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - '@emnapi/runtime@1.6.0': - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} - '@emnapi/runtime@1.7.0': resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} @@ -509,12 +634,12 @@ packages: '@gerrit0/mini-shiki@3.14.0': resolution: {integrity: sha512-c5X8fwPLOtUS8TVdqhynz9iV0GlOtFUT1ppXYzUUlEXe4kbZ/mvMT8wXoT8kCwUka+zsiloq7sD3pZ3+QVTuNQ==} - '@git.zone/tsbuild@2.7.1': - resolution: {integrity: sha512-O8TTc+LBp8hYy5+zA6AdoqdQQtVXTAd1L0gS/Ihz+QXgXvMdQKVINwpDFu6LS5NdVrGXzxnB63NQpfg5COIPnQ==} + '@git.zone/tsbuild@3.1.0': + resolution: {integrity: sha512-j8lMd84pmzWiU6NG3e+pyu0o41oo6mQVfcZv8kDsCrQwZMhoQV9Jp87MlU0i/XI5IZkqDjelG8Kx1QhOmbK+iQ==} hasBin: true - '@git.zone/tsbundle@2.5.1': - resolution: {integrity: sha512-gBskgM3ECy9FEmhCWnQahDyFCAjjw/7emjx/KYM/FOlPqGV+hmYzt368zwSlkzOGgYF8k9OZ+mp6vexDL/+f2w==} + '@git.zone/tsbundle@2.5.2': + resolution: {integrity: sha512-EYTCfunqoxhxkowREZ+cJnww6eDh9cL18HJbHbSZ+vxzNeyS9x8mT9aqRlWkI7zgpvgDlGIYlyRUlUISXkQO6Q==} hasBin: true '@git.zone/tsdoc@1.9.2': @@ -525,12 +650,12 @@ packages: resolution: {integrity: sha512-o2/jvNsdLC8SRdH1kQ7JjNOQNu9el0FpJ/QOW3mgiC5C9reuTp18iU4kijsVVLgvw4KZv6Z289SoKPh3HPsS0g==} hasBin: true - '@git.zone/tsrun@1.6.2': - resolution: {integrity: sha512-SOHbQqBg3/769/jPQcdpPCmugdEtIJINiG0O6aWx+su91GvGhheha5dAhccsCutJYErr+aJcBqBYuUYfhOfkFQ==} + '@git.zone/tsrun@2.0.0': + resolution: {integrity: sha512-yA6zCjL+kn7xfZe6sL/m4K+zYqgkznG/pF6++i/E17iwzpG6dHmW+VZmYldHe86sW4DcLMvqM6CxM+KlgaEpKw==} hasBin: true - '@git.zone/tstest@2.7.0': - resolution: {integrity: sha512-ET532UpIAE86Ifw4P1Y2U7AJalKxM/Q88+kKN854dXSX+s5GgnRy0ysrPcSCUkJfENEvou1b0er1xcotUKx6hw==} + '@git.zone/tstest@3.1.3': + resolution: {integrity: sha512-t+/cKV21JHK8X7NGAmihs5M/eMm+V+jn4R5rzfwGG97WJFAcP5qE1Os9VYtyZw3tx/NZXA2yA4abo/ELluTuRA==} hasBin: true '@happy-dom/global-registrator@15.11.7': @@ -843,10 +968,6 @@ packages: resolution: {integrity: sha512-gqFTGEosKbOkYF/WFj26jMHOI5OH2jeP1MmC/zbK6BF6VJBf8rIC5898dPfSzZEbSA0wbbV5slbntWVc5PKLFA==} engines: {node: '>=18'} - '@koa/router@9.4.0': - resolution: {integrity: sha512-dOOXgzqaDoHu5qqMEPLKEgLz5CeIA7q8+1W62mCvFVCOqeC71UoTGJ4u1xUSOpIl2J1x2pqrNULkFteUeZW3/A==} - engines: {node: '>= 8.0.0'} - '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -883,22 +1004,6 @@ packages: '@napi-rs/wasm-runtime@1.0.7': resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - '@oozcitak/dom@1.15.10': - resolution: {integrity: sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==} - engines: {node: '>=8.0'} - - '@oozcitak/infra@1.0.8': - resolution: {integrity: sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==} - engines: {node: '>=6.0'} - - '@oozcitak/url@1.0.4': - resolution: {integrity: sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==} - engines: {node: '>=8.0'} - - '@oozcitak/util@8.3.8': - resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} - engines: {node: '>=8.0'} - '@oxc-project/types@0.95.0': resolution: {integrity: sha512-vACy7vhpMPhjEJhULNxrdR0D943TkA/MigMpJCHmBHvMXxRStRi/dPtTlfQ3uDwWSzRpT8z+7ImjZVf8JWBocQ==} @@ -1016,6 +1121,9 @@ packages: '@push.rocks/smartbucket@3.3.10': resolution: {integrity: sha512-0H2MioALspC8Aj0Q1FPCs2w4k2u9oJg7Q5yM8+1TZo7aRfrdxgM5HQ7z3apUaqC3ZEDewW6vSlttjHFHhMEC3A==} + '@push.rocks/smartbucket@4.3.0': + resolution: {integrity: sha512-4nstzEduCKou4R5ekKH6kUjDZXWfrtjA1hIQ4MJmTbtncmm2+4+ixjaFThS2nS8Aa+fHcBgOtKkBv8wTsgvK/Q==} + '@push.rocks/smartbuffer@3.0.5': resolution: {integrity: sha512-pWYF08Mn8s/KF/9nHRk7pZPzuMjmYVQay2c5gGexdayxn1W4eCSYYhWH73vR2JBfGeGq/izbRNuUuEaIEeTIKA==} @@ -1076,9 +1184,20 @@ packages: '@push.rocks/smartfile@11.2.7': resolution: {integrity: sha512-8Yp7/sAgPpWJBHohV92ogHWKzRomI5MEbSG6b5W2n18tqwfAmjMed0rQvsvGrSBlnEWCKgoOrYIIZbLO61+J0Q==} + '@push.rocks/smartfile@13.0.1': + resolution: {integrity: sha512-phtryDFtBYHo7R2H9V3Y7VeiYQU9YzKL140gKD3bTicBgXoIYrJ6+b3mbZunSO2yQt1Vy1AxCxYXrFE/K+4grw==} + peerDependencies: + '@push.rocks/smartfs': ^1.0.0 + peerDependenciesMeta: + '@push.rocks/smartfs': + optional: true + '@push.rocks/smartfm@2.2.2': resolution: {integrity: sha512-kLrBv/vWXJmB558LI5C79fWXLKOnno998vnp3opfB+uyznT2E6LkcpKsxdjwe1V/r+Z5GlhXPOWmGgHPCzUR6w==} + '@push.rocks/smartfs@1.1.0': + resolution: {integrity: sha512-fg8JIjFUPPX5laRoBpTaGwhMfZ3Y8mFT4fUaW54Y4J/BfOBa/y0+rIFgvgvqcOZgkQlyZU+FIfL8Z6zezqxyTg==} + '@push.rocks/smartgit@3.3.1': resolution: {integrity: sha512-fnyF9Fr5y0ClSFiw/yMAWXlxvteWK2eXJ5i8/wsJcAyWqwTZ9KvMkVe33ofiZ/ZPuQ5JG9CXmoE0MST++5Xv6g==} @@ -1136,8 +1255,8 @@ packages: '@push.rocks/smartmime@2.0.4': resolution: {integrity: sha512-mG6lRBLr5nF+GLZmgCcdjhdDsmTtJWBFZDCa1eJ8Au9TvUzbPW0fY5aqJBb3UwfyZzH6St8Th9cJSXjagOQkYA==} - '@push.rocks/smartmongo@2.0.12': - resolution: {integrity: sha512-NglYiO14BikxnlvW6JF18FtopBtaWQEGAtPxHmmSCbyhU8Mi0aEFO7VgCasE9Kguba/wcR597qhcDEdcpBg1eQ==} + '@push.rocks/smartmongo@2.0.14': + resolution: {integrity: sha512-fvfPeCDDy5JaDBpVnsMKednsOoRzuYC0OszO8OoLOX/RaR755zIbRppCCK8Cez0hqd6eNkJGQeWdX/vXlJOPBA==} '@push.rocks/smartmustache@3.0.2': resolution: {integrity: sha512-G3LyRXoJhyM+iQhkvP/MR/2WYMvC9U7zc2J44JxUM5tPdkQ+o3++FbfRtnZj6rz5X/A7q03//vsxPitVQwoi2Q==} @@ -1190,14 +1309,17 @@ packages: '@push.rocks/smartrequest@4.3.4': resolution: {integrity: sha512-b8UH4CS2QTccOjvmIJetOqK26eVz0CuCTkJdJDVU8j34KqPGpaWzn/4D3j3DCsTYRkAqr5nSjkzAFgCJj8eIiA==} + '@push.rocks/smartrequest@5.0.1': + resolution: {integrity: sha512-gZQQF6HVt3LwTBxaPh6hHObd4VF76PUYQcs5pHD7f0VXaEewmrNAQSnccoinOY7fi45+0dOf04PJOXu9MibPzQ==} + '@push.rocks/smartrouter@1.3.3': resolution: {integrity: sha512-1+xZEnWlhzqLWAaJ1zFNhQ0zgbfCWQl1DBT72LygLxTs+P0K8AwJKgqo/IX6CT55kGCFnPAZIYSbVJlGsgrB0w==} '@push.rocks/smartrx@3.0.10': resolution: {integrity: sha512-USjIYcsSfzn14cwOsxgq/bBmWDTTzy3ouWAnW5NdMyRRzEbmeNrvmy6TRqNeDlJ2PsYNTt1rr/zGUqvIy72ITg==} - '@push.rocks/smarts3@2.2.6': - resolution: {integrity: sha512-f2i2keHs+KZr5cyB8nBOnmRGiE2YG42W4pSx+8gmZEsf8yZUT1iUnuD/YZVTKosH2v5dPCKdmtSpMSux8Q/tCw==} + '@push.rocks/smarts3@3.0.2': + resolution: {integrity: sha512-uVBRk1OZR1iRQgWwB2dS1qMMTt4jYeP9t7x/7BE7ODRuj2SnCW4u7jydNBfk+aBbWPtHQYjCZCyEOFkWuP/d3g==} '@push.rocks/smartscaf@4.0.19': resolution: {integrity: sha512-J9z2rWtFhT55kDZfWGpghnwy4aybmJoatzq5icfbZMXohS2KALuj1N17iXZ9L+43F1AwpUeZ/KnokNsh7yHZ5w==} @@ -1205,8 +1327,8 @@ packages: '@push.rocks/smartshell@3.3.0': resolution: {integrity: sha512-m0w618H6YBs+vXGz1CgS4nPi5CUAnqRtckcS9/koGwfcIx1IpjqmiP47BoCTbdgcv0IPUxQVBG1IXTHPuZ8Z5g==} - '@push.rocks/smartsitemap@2.0.3': - resolution: {integrity: sha512-jIcms8V1b2mt3dS4PKNlLR1DRC8pCDWMRVbnyM/2+snZOJZonQRlQzAyX8No0EfLbfdrfnxv2IjPX13X29Re6g==} + '@push.rocks/smartsitemap@2.0.4': + resolution: {integrity: sha512-76dYWG/o/EjV4vYCK7ZKM35T9xgrI+oHEiiIE6E2MDaFIU6QnSfciTfbscH5nc0vxx8Ah+I0HPEJO94BM2S39w==} '@push.rocks/smartsocket@2.1.0': resolution: {integrity: sha512-etOGyfiDFQz/1WJnD3jFL2N7ykujTjiudAz6qZTz82xE5oabKuKX+Cn8SdM9dOwzyWmBUKbUdll8QhovAXjn+g==} @@ -1244,8 +1366,8 @@ packages: '@push.rocks/smartversion@3.0.5': resolution: {integrity: sha512-8MZSo1yqyaKxKq0Q5N188l4un++9GFWVbhCAX5mXJwewZHn97ujffTeL+eOQYpWFTEpUhaq1QhL4NhqObBCt1Q==} - '@push.rocks/smartxml@1.1.1': - resolution: {integrity: sha512-1toSmLE1EGK8oENh09XjV588+IdzUB3x1PCaxKjSyIsAt54bUQj3kH/yzLODF+19p07OE0KM5U1oqWpjOcFCzA==} + '@push.rocks/smartxml@2.0.0': + resolution: {integrity: sha512-1d06zYJX4Zt8s5w5qFOUg2LAEz9ykrh9d6CQPK4WAgOBIefb1xzVEWHc7yoxicc2OkzNgC3IBCEg3s6BncZKWw==} '@push.rocks/smartyaml@2.0.5': resolution: {integrity: sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==} @@ -1262,6 +1384,9 @@ packages: '@push.rocks/webrequest@3.0.37': resolution: {integrity: sha512-fLN7kP6GeHFxE4UH4r9C9pjcQb0QkJxHeAMwXvbOqB9hh0MFNKhtGU7GoaTn8SVRGRMPc9UqZVNwo6u5l8Wn0A==} + '@push.rocks/webrequest@4.0.1': + resolution: {integrity: sha512-I60XZZLVf8W5I7YdmUVVu4G92teE3rg3/aKaV00BRg8vJ3VXx3wc59Qj4em7zxQ5o0HvL8m1Aezw3RFMDPyVgA==} + '@push.rocks/websetup@3.0.19': resolution: {integrity: sha512-iKJDwXdMmQdu5siOIgziPRxM51lN1AU9HOr+yMteu1YMDkZT7HKCyisDAr4gC9WZ9a7FzsG8zgthm4dMeA8NTw==} @@ -1535,66 +1660,130 @@ packages: resolution: {integrity: sha512-wEhSYznxOmx7EdwK1tYEWJF5+/wmSFsff9BfTOn8oO/+KPl3gsmThrb6MJlWbOC391+Ya31s5JuHiC2RlT80Zg==} engines: {node: '>=18.0.0'} + '@smithy/abort-controller@4.2.5': + resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} + engines: {node: '>=18.0.0'} + '@smithy/chunked-blob-reader-native@4.1.0': resolution: {integrity: sha512-Bnv0B3nSlfB2mPO0WgM49I/prl7+kamF042rrf3ezJ3Z4C7csPYvyYgZfXTGXwXfj1mAwDWjE/ybIf49PzFzvA==} engines: {node: '>=18.0.0'} + '@smithy/chunked-blob-reader-native@4.2.1': + resolution: {integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==} + engines: {node: '>=18.0.0'} + '@smithy/chunked-blob-reader@5.1.0': resolution: {integrity: sha512-a36AtR7Q7XOhRPt6F/7HENmTWcB8kN7mDJcOFM/+FuKO6x88w8MQJfYCufMWh4fGyVkPjUh3Rrz/dnqFQdo6OQ==} engines: {node: '>=18.0.0'} + '@smithy/chunked-blob-reader@5.2.0': + resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==} + engines: {node: '>=18.0.0'} + '@smithy/config-resolver@4.2.0': resolution: {integrity: sha512-FA10YhPFLy23uxeWu7pOM2ctlw+gzbPMTZQwrZ8FRIfyJ/p8YIVz7AVTB5jjLD+QIerydyKcVMZur8qzzDILAQ==} engines: {node: '>=18.0.0'} + '@smithy/config-resolver@4.4.3': + resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==} + engines: {node: '>=18.0.0'} + '@smithy/core@3.10.0': resolution: {integrity: sha512-bXyD3Ij6b1qDymEYlEcF+QIjwb9gObwZNaRjETJsUEvSIzxFdynSQ3E4ysY7lUFSBzeWBNaFvX+5A0smbC2q6A==} engines: {node: '>=18.0.0'} + '@smithy/core@3.18.5': + resolution: {integrity: sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.1.0': resolution: {integrity: sha512-iVwNhxTsCQTPdp++4C/d9xvaDmuEWhXi55qJobMp9QMaEHRGH3kErU4F8gohtdsawRqnUy/ANylCjKuhcR2mPw==} engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.2.5': + resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==} + engines: {node: '>=18.0.0'} + '@smithy/eventstream-codec@4.1.0': resolution: {integrity: sha512-MSOb6pwG3Tss1UwlZMHC+rYergWCo4fwep3Y1fJxwdLLxReSaKFfXxPQhEHi/8LSNQFEcBYBxybgjXjw4jJWqQ==} engines: {node: '>=18.0.0'} + '@smithy/eventstream-codec@4.2.5': + resolution: {integrity: sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==} + engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-browser@4.1.0': resolution: {integrity: sha512-VvHXoBoLos2OCdMtUvKWK7ckcvun6ZP4KBYhf38+kszk6BEuK9k8c3xbIMIpC6K4vTK72qHlHAdBoR9qU+F7xw==} engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-browser@4.2.5': + resolution: {integrity: sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==} + engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-config-resolver@4.2.0': resolution: {integrity: sha512-T7YlcU0cP2bjAC4eXo9E6puqrrmqv5VHBL8bPMOMgEE1p4m+bwkDWRQpeiXqn/idoKM1qwXq8PvRLYmpbYB6uw==} engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-config-resolver@4.3.5': + resolution: {integrity: sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==} + engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-node@4.1.0': resolution: {integrity: sha512-WlIKVRkcPjwuN3x+e8+5KOI9nL6s93bxgWH+39VwwQMl+4FagKPtTM3VCumSoZJ9qn/CNl4W5mVdFFRkDF84lQ==} engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-node@4.2.5': + resolution: {integrity: sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==} + engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-universal@4.1.0': resolution: {integrity: sha512-GjMezHHd0xrjJcWLAcnXlVePe7PY8KsdxzKeXcMn7V3vfIScGUpKQJrlSmEXwzFH9Mjl0G0EdOS5GzewZEwtxg==} engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-universal@4.2.5': + resolution: {integrity: sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==} + engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.2.0': resolution: {integrity: sha512-VZenjDdVaUGiy3hwQtxm75nhXZrhFG+3xyL93qCQAlYDyhT/jeDWM8/3r5uCFMlTmmyrIjiDyiOynVFchb0BSg==} engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.3.6': + resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==} + engines: {node: '>=18.0.0'} + '@smithy/hash-blob-browser@4.1.0': resolution: {integrity: sha512-brRgh2qEYPHYImfqoQB/xfcT/CjSz9Z/dH2vURSS0lIw3bImFK5t15l4iypwRw4GtZlZTK/VsLqsR54OJWRerg==} engines: {node: '>=18.0.0'} + '@smithy/hash-blob-browser@4.2.6': + resolution: {integrity: sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==} + engines: {node: '>=18.0.0'} + '@smithy/hash-node@4.1.0': resolution: {integrity: sha512-mXkJQ/6lAXTuoSsEH+d/fHa4ms4qV5LqYoPLYhmhCRTNcMMdg+4Ya8cMgU1W8+OR40eX0kzsExT7fAILqtTl2w==} engines: {node: '>=18.0.0'} + '@smithy/hash-node@4.2.5': + resolution: {integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==} + engines: {node: '>=18.0.0'} + '@smithy/hash-stream-node@4.1.0': resolution: {integrity: sha512-9TToqq62msanK/L6pV1ZAOm2+1VgCz9gE6/TVJhZXV352DnAItaO9jx6FFGujUDXrRJV0lpwe4c0vymz/vXMUQ==} engines: {node: '>=18.0.0'} + '@smithy/hash-stream-node@4.2.5': + resolution: {integrity: sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==} + engines: {node: '>=18.0.0'} + '@smithy/invalid-dependency@4.1.0': resolution: {integrity: sha512-4/FcV6aCMzgpM4YyA/GRzTtG28G0RQJcWK722MmpIgzOyfSceWcI9T9c8matpHU9qYYLaWtk8pSGNCLn5kzDRw==} engines: {node: '>=18.0.0'} + '@smithy/invalid-dependency@4.2.5': + resolution: {integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==} + engines: {node: '>=18.0.0'} + '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} @@ -1603,90 +1792,178 @@ packages: resolution: {integrity: sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==} engines: {node: '>=18.0.0'} + '@smithy/is-array-buffer@4.2.0': + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} + engines: {node: '>=18.0.0'} + '@smithy/md5-js@4.1.0': resolution: {integrity: sha512-RW1+/E3rv80254ekFqiUTM8ExtN0dG9dkUwU2x17rxS4Mn2ib3SrTCdayCiNbfj6xWHupzgOJB6iNoXiOzNe6g==} engines: {node: '>=18.0.0'} + '@smithy/md5-js@4.2.5': + resolution: {integrity: sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-content-length@4.1.0': resolution: {integrity: sha512-x3dgLFubk/ClKVniJu+ELeZGk4mq7Iv0HgCRUlxNUIcerHTLVmq7Q5eGJL0tOnUltY6KFw5YOKaYxwdcMwox/w==} engines: {node: '>=18.0.0'} + '@smithy/middleware-content-length@4.2.5': + resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@4.2.0': resolution: {integrity: sha512-J1eCF7pPDwgv7fGwRd2+Y+H9hlIolF3OZ2PjptonzzyOXXGh/1KGJAHpEcY1EX+WLlclKu2yC5k+9jWXdUG4YQ==} engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@4.3.12': + resolution: {integrity: sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.2.0': resolution: {integrity: sha512-raL5oWYf5ALl3jCJrajE8enKJEnV/2wZkKS6mb3ZRY2tg3nj66ssdWy5Ps8E6Yu8Wqh3Tt+Sb9LozjvwZupq+A==} engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.4.12': + resolution: {integrity: sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.1.0': resolution: {integrity: sha512-CtLFYlHt7c2VcztyVRc+25JLV4aGpmaSv9F1sPB0AGFL6S+RPythkqpGDa2XBQLJQooKkjLA1g7Xe4450knShg==} engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.2.6': + resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.1.0': resolution: {integrity: sha512-91Fuw4IKp0eK8PNhMXrHRcYA1jvbZ9BJGT91wwPy3bTQT8mHTcQNius/EhSQTlT9QUI3Ki1wjHeNXbWK0tO8YQ==} engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.2.5': + resolution: {integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==} + engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.2.0': resolution: {integrity: sha512-8/fpilqKurQ+f8nFvoFkJ0lrymoMJ+5/CQV5IcTv/MyKhk2Q/EFYCAgTSWHD4nMi9ux9NyBBynkyE9SLg2uSLA==} engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.3.5': + resolution: {integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==} + engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.2.0': resolution: {integrity: sha512-G4NV70B4hF9vBrUkkvNfWO6+QR4jYjeO4tc+4XrKCb4nPYj49V9Hu8Ftio7Mb0/0IlFyEOORudHrm+isY29nCA==} engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.4.5': + resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.1.0': resolution: {integrity: sha512-eksMjMHUlG5PwOUWO3k+rfLNOPVPJ70mUzyYNKb5lvyIuAwS4zpWGsxGiuT74DFWonW0xRNy+jgzGauUzX7SyA==} engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.5': + resolution: {integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==} + engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.2.0': resolution: {integrity: sha512-bwjlh5JwdOQnA01be+5UvHK4HQz4iaRKlVG46hHSJuqi0Ribt3K06Z1oQ29i35Np4G9MCDgkOGcHVyLMreMcbg==} engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.3.5': + resolution: {integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.1.0': resolution: {integrity: sha512-JqTWmVIq4AF8R8OK/2cCCiQo5ZJ0SRPsDkDgLO5/3z8xxuUp1oMIBBjfuueEe+11hGTZ6rRebzYikpKc6yQV9Q==} engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.2.5': + resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.1.0': resolution: {integrity: sha512-VgdHhr8YTRsjOl4hnKFm7xEMOCRTnKw3FJ1nU+dlWNhdt/7eEtxtkdrJdx7PlRTabdANTmvyjE4umUl9cK4awg==} engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.2.5': + resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==} + engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.1.0': resolution: {integrity: sha512-UBpNFzBNmS20jJomuYn++Y+soF8rOK9AvIGjS9yGP6uRXF5rP18h4FDUsoNpWTlSsmiJ87e2DpZo9ywzSMH7PQ==} engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.2.5': + resolution: {integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==} + engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@4.1.0': resolution: {integrity: sha512-W0VMlz9yGdQ/0ZAgWICFjFHTVU0YSfGoCVpKaExRM/FDkTeP/yz8OKvjtGjs6oFokCRm0srgj/g4Cg0xuHu8Rw==} engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@4.4.0': + resolution: {integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==} + engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.2.0': resolution: {integrity: sha512-ObX1ZqG2DdZQlXx9mLD7yAR8AGb7yXurGm+iWx9x4l1fBZ8CZN2BRT09aSbcXVPZXWGdn5VtMuupjxhOTI2EjA==} engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.3.5': + resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==} + engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.6.0': resolution: {integrity: sha512-TvlIshqx5PIi0I0AiR+PluCpJ8olVG++xbYkAIGCUkByaMUlfOXLgjQTmYbr46k4wuDe8eHiTIlUflnjK2drPQ==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.9.8': + resolution: {integrity: sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.4.0': resolution: {integrity: sha512-4jY91NgZz+ZnSFcVzWwngOW6VuK3gR/ihTwSU1R/0NENe9Jd8SfWgbhDCAGUWL3bI7DiDSW7XF6Ui6bBBjrqXw==} engines: {node: '>=18.0.0'} + '@smithy/types@4.9.0': + resolution: {integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.1.0': resolution: {integrity: sha512-/LYEIOuO5B2u++tKr1NxNxhZTrr3A63jW8N73YTwVeUyAlbB/YM+hkftsvtKAcMt3ADYo0FsF1GY3anehffSVQ==} engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.5': + resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-base64@4.1.0': resolution: {integrity: sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==} engines: {node: '>=18.0.0'} + '@smithy/util-base64@4.3.0': + resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-body-length-browser@4.1.0': resolution: {integrity: sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==} engines: {node: '>=18.0.0'} + '@smithy/util-body-length-browser@4.2.0': + resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} + engines: {node: '>=18.0.0'} + '@smithy/util-body-length-node@4.1.0': resolution: {integrity: sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==} engines: {node: '>=18.0.0'} + '@smithy/util-body-length-node@4.2.1': + resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} + engines: {node: '>=18.0.0'} + '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} @@ -1695,42 +1972,82 @@ packages: resolution: {integrity: sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==} engines: {node: '>=18.0.0'} + '@smithy/util-buffer-from@4.2.0': + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} + engines: {node: '>=18.0.0'} + '@smithy/util-config-provider@4.1.0': resolution: {integrity: sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==} engines: {node: '>=18.0.0'} + '@smithy/util-config-provider@4.2.0': + resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} + engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-browser@4.1.0': resolution: {integrity: sha512-D27cLtJtC4EEeERJXS+JPoogz2tE5zeE3zhWSSu6ER5/wJ5gihUxIzoarDX6K1U27IFTHit5YfHqU4Y9RSGE0w==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-browser@4.3.11': + resolution: {integrity: sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==} + engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.1.0': resolution: {integrity: sha512-gnZo3u5dP1o87plKupg39alsbeIY1oFFnCyV2nI/++pL19vTtBLgOyftLEjPjuXmoKn2B2rskX8b7wtC/+3Okg==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.2.14': + resolution: {integrity: sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==} + engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@3.1.0': resolution: {integrity: sha512-5LFg48KkunBVGrNs3dnQgLlMXJLVo7k9sdZV5su3rjO3c3DmQ2LwUZI0Zr49p89JWK6sB7KmzyI2fVcDsZkwuw==} engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@3.2.5': + resolution: {integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==} + engines: {node: '>=18.0.0'} + '@smithy/util-hex-encoding@4.1.0': resolution: {integrity: sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==} engines: {node: '>=18.0.0'} + '@smithy/util-hex-encoding@4.2.0': + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} + engines: {node: '>=18.0.0'} + '@smithy/util-middleware@4.1.0': resolution: {integrity: sha512-612onNcKyxhP7/YOTKFTb2F6sPYtMRddlT5mZvYf1zduzaGzkYhpYIPxIeeEwBZFjnvEqe53Ijl2cYEfJ9d6/Q==} engines: {node: '>=18.0.0'} + '@smithy/util-middleware@4.2.5': + resolution: {integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==} + engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.1.0': resolution: {integrity: sha512-5AGoBHb207xAKSVwaUnaER+L55WFY8o2RhlafELZR3mB0J91fpL+Qn+zgRkPzns3kccGaF2vy0HmNVBMWmN6dA==} engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.2.5': + resolution: {integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==} + engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.3.0': resolution: {integrity: sha512-ZOYS94jksDwvsCJtppHprUhsIscRnCKGr6FXCo3SxgQ31ECbza3wqDBqSy6IsAak+h/oAXb1+UYEBmDdseAjUQ==} engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.6': + resolution: {integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@4.1.0': resolution: {integrity: sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==} engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@4.2.0': + resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} + engines: {node: '>=18.0.0'} + '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} @@ -1739,12 +2056,21 @@ packages: resolution: {integrity: sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==} engines: {node: '>=18.0.0'} + '@smithy/util-utf8@4.2.0': + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + engines: {node: '>=18.0.0'} + '@smithy/util-waiter@4.1.0': resolution: {integrity: sha512-IUuj2zpGdeKaY5OdGnU83BUJsv7OA9uw3rNVSOuvzLMXMpBTU+W6V0SsQh6iI32lKUJArlnEU4BIzp83hghR/g==} engines: {node: '>=18.0.0'} - '@so-ric/colorspace@1.1.6': - resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} + '@smithy/util-waiter@4.2.5': + resolution: {integrity: sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==} + engines: {node: '>=18.0.0'} + + '@smithy/uuid@1.1.0': + resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} + engines: {node: '>=18.0.0'} '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} @@ -1872,6 +2198,9 @@ packages: '@types/node@22.18.1': resolution: {integrity: sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/ping@0.4.4': resolution: {integrity: sha512-ifvo6w2f5eJYlXm+HiVx67iJe8WZp87sfa683nlqED5Vnt9Z93onkokNoWqOG21EaE8fMxyKPobE+mkPEyxsdw==} @@ -1887,9 +2216,6 @@ packages: '@types/relateurl@0.2.33': resolution: {integrity: sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw==} - '@types/s3rver@3.7.4': - resolution: {integrity: sha512-CMCmdNszxS2FsIznWvBMVCl6fpvr5ueaFCaY0iSoH7Ud5maGcLghukpDvsXBnIcp92cv2HeVnVqI1p8yPcab9Q==} - '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -1911,9 +2237,6 @@ packages: '@types/through2@2.0.41': resolution: {integrity: sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==} - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1990,10 +2313,6 @@ packages: resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -2025,9 +2344,6 @@ packages: async-mutex@0.5.0: resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} @@ -2141,18 +2457,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - busboy@0.3.1: - resolution: {integrity: sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==} - engines: {node: '>=4.5.0'} - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cache-content-type@1.0.1: - resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} - engines: {node: '>= 6.0.0'} - cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -2187,10 +2495,6 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -2231,39 +2535,13 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - co@4.6.0: - resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-convert@3.1.2: - resolution: {integrity: sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==} - engines: {node: '>=14.6'} - - color-name@1.1.3: - resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-name@2.0.2: - resolution: {integrity: sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==} - engines: {node: '>=12.20'} - - color-string@2.1.2: - resolution: {integrity: sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==} - engines: {node: '>=18'} - - color@5.0.2: - resolution: {integrity: sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==} - engines: {node: '>=18'} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -2274,10 +2552,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - commondir@1.0.1: resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} @@ -2287,10 +2561,6 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - content-disposition@1.0.0: resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} engines: {node: '>= 0.6'} @@ -2307,10 +2577,6 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookies@0.9.1: - resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} - engines: {node: '>= 0.8'} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2392,9 +2658,6 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-equal@1.0.1: - resolution: {integrity: sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=} - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -2423,13 +2686,6 @@ packages: resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} engines: {node: '>=0.4.0'} - delegates@1.0.0: - resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=} - - depd@1.1.2: - resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} - engines: {node: '>= 0.6'} - depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -2438,10 +2694,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -2452,10 +2704,6 @@ packages: devtools-protocol@0.0.1521046: resolution: {integrity: sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w==} - dicer@0.3.0: - resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} - engines: {node: '>=4.5.0'} - diff3@0.0.3: resolution: {integrity: sha1-1OXDpM305f4SEatC5pP8tDIVgPw=} @@ -2486,13 +2734,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - - encodeurl@1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} - engines: {node: '>= 0.8'} - encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -2550,10 +2791,6 @@ packages: escape-html@1.0.3: resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} - escape-string-regexp@1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} - engines: {node: '>=0.8.0'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2645,10 +2882,6 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-xml-parser@3.21.1: - resolution: {integrity: sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==} - hasBin: true - fast-xml-parser@4.5.3: resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} hasBin: true @@ -2657,15 +2890,16 @@ packages: resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} hasBin: true + fast-xml-parser@5.3.2: + resolution: {integrity: sha512-n8v8b6p4Z1sMgqRmqLJm3awW4NX7NkaKPfb3uJIBTSH7Pdvufi3PQ3/lJLQrvxcMYl7JI2jnDO90siPEpD8JBA==} + hasBin: true + fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} fd-slicer@1.1.0: resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=} - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -2697,9 +2931,6 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - follow-redirects@1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} @@ -2729,6 +2960,10 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + format@0.2.2: resolution: {integrity: sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=} engines: {node: '>=0.4.x'} @@ -2737,10 +2972,6 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fresh@0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} - engines: {node: '>= 0.6'} - fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -2752,10 +2983,6 @@ packages: resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} engines: {node: '>=14.14'} - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - fs.realpath@1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} @@ -2767,10 +2994,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -2847,10 +3070,6 @@ packages: resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==} engines: {node: '>=18.0.0'} - has-flag@3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} - engines: {node: '>=4'} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -2893,17 +3112,9 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - http-assert@1.5.0: - resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} - engines: {node: '>= 0.8'} - http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} - http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -2923,9 +3134,6 @@ packages: humanize-ms@1.2.1: resolution: {integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=} - humanize-number@0.0.2: - resolution: {integrity: sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -2993,10 +3201,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - is-git-ref-name-valid@1.0.0: resolution: {integrity: sha512-2hLTg+7IqMSP9nNp/EVCxzvAOJGsAn0f/cKtF8JaBeivjH5UgE/XZo3iJ0AvibdE7KSF1f/7JbjBTB8Wqgbn/w==} engines: {node: '>=10'} @@ -3020,14 +3224,6 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-stream@4.0.1: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} @@ -3107,16 +3303,9 @@ packages: resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} engines: {node: '>=16'} - jsonfile@4.0.0: - resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} - jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - keygrip@1.1.0: - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} - engines: {node: '>= 0.6'} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3124,24 +3313,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - koa-compose@4.1.0: - resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - - koa-convert@2.0.0: - resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} - engines: {node: '>= 10'} - - koa-logger@3.2.1: - resolution: {integrity: sha512-MjlznhLLKy9+kG8nAXKJLM0/ClsQp/Or2vI3a5rbSQmgl8IJBQO0KI5FA70BvW+hqjtxjp49SpH2E7okS6NmHg==} - engines: {node: '>= 7.6.0'} - - koa@2.16.3: - resolution: {integrity: sha512-zPPuIt+ku1iCpFBRwseMcPYQ1cJL8l60rSmKeOuGfOXyE6YnTBmf2aEFNL2HQGrD0cPcLO/t+v9RTgC+fwEh/g==} - engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} - - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - lenis@1.3.13: resolution: {integrity: sha512-9FTVlAm2PA82JHnFKWgzJkuxlG7orJneVHqUDhZvVPAQDduEVxlVtXRTNgdhERVR5MUX1iDrRaklBvHbVhxQpg==} peerDependencies: @@ -3211,13 +3382,6 @@ packages: lodash.restparam@3.6.1: resolution: {integrity: sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -3312,10 +3476,6 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - media-typer@0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} - engines: {node: '>= 0.6'} - media-typer@1.1.0: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} @@ -3327,10 +3487,6 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} - methods@1.1.2: - resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} - engines: {node: '>= 0.6'} - micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -3462,10 +3618,6 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} - engines: {node: 20 || >=22} - minimatch@10.1.1: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} @@ -3603,12 +3755,6 @@ packages: once@1.4.0: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - - only@0.0.2: - resolution: {integrity: sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=} - open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -3707,9 +3853,6 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} - passthrough-counter@1.0.0: - resolution: {integrity: sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo=} - path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3733,9 +3876,6 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} @@ -3980,25 +4120,12 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - s3rver@3.7.1: - resolution: {integrity: sha512-H9KIX6n8NqcfoE4ziFNbQASBQfjcNJgb+3wbT9L5iotEqfOncFO1c38cfJSFSo7xXTu1zM9HA6t2u9xKNlYRaA==} - engines: {node: '>=8.3.0'} - hasBin: true - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -4132,13 +4259,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} - stack-trace@0.0.10: - resolution: {integrity: sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=} - - statuses@1.5.0: - resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} - engines: {node: '>= 0.6'} - statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -4147,10 +4267,6 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - streamsearch@0.1.2: - resolution: {integrity: sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=} - engines: {node: '>=0.8.0'} - streamx@2.22.1: resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} @@ -4212,10 +4328,6 @@ packages: resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} engines: {node: '>=16'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - sweet-scroll@4.0.0: resolution: {integrity: sha512-mR6fRsAQANtm3zpzhUE73KAOt2aT4ZsWzNSggiEsSqdO6Zh4gM7ioJG81EngrZEl0XAc3ZvzEfhxggOoEBc8jA==} @@ -4237,9 +4349,6 @@ packages: text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - threads@1.7.0: resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==} @@ -4289,10 +4398,6 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} @@ -4305,10 +4410,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} - tsx@4.20.6: resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} engines: {node: '>=18.0.0'} @@ -4336,10 +4437,6 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - type-is@2.0.1: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} @@ -4383,6 +4480,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -4401,10 +4501,6 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -4472,14 +4568,6 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.18.3: - resolution: {integrity: sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==} - engines: {node: '>= 12.0.0'} - wordwrap@1.0.0: resolution: {integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=} @@ -4529,10 +4617,6 @@ packages: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} - xmlbuilder2@3.1.1: - resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==} - engines: {node: '>=12.0'} - xmlbuilder@11.0.1: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} @@ -4569,10 +4653,6 @@ packages: resolution: {integrity: sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==} engines: {node: '>=12'} - ylru@1.4.0: - resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} - engines: {node: '>= 4.0.0'} - yoctocolors-cjs@2.1.3: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} @@ -4607,7 +4687,7 @@ snapshots: '@push.rocks/webrequest': 3.0.37 '@push.rocks/webstream': 1.0.10 - '@api.global/typedserver@3.0.79': + '@api.global/typedserver@3.0.80': dependencies: '@api.global/typedrequest': 3.1.10 '@api.global/typedrequest-interfaces': 3.0.19 @@ -4633,7 +4713,7 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrequest': 4.3.4 '@push.rocks/smartrx': 3.0.10 - '@push.rocks/smartsitemap': 2.0.3 + '@push.rocks/smartsitemap': 2.0.4 '@push.rocks/smartstream': 3.2.5 '@push.rocks/smarttime': 4.1.1 '@push.rocks/taskbuffer': 3.4.0 @@ -4782,6 +4862,66 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-s3@3.937.0': + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.936.0 + '@aws-sdk/credential-provider-node': 3.936.0 + '@aws-sdk/middleware-bucket-endpoint': 3.936.0 + '@aws-sdk/middleware-expect-continue': 3.936.0 + '@aws-sdk/middleware-flexible-checksums': 3.936.0 + '@aws-sdk/middleware-host-header': 3.936.0 + '@aws-sdk/middleware-location-constraint': 3.936.0 + '@aws-sdk/middleware-logger': 3.936.0 + '@aws-sdk/middleware-recursion-detection': 3.936.0 + '@aws-sdk/middleware-sdk-s3': 3.936.0 + '@aws-sdk/middleware-ssec': 3.936.0 + '@aws-sdk/middleware-user-agent': 3.936.0 + '@aws-sdk/region-config-resolver': 3.936.0 + '@aws-sdk/signature-v4-multi-region': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-endpoints': 3.936.0 + '@aws-sdk/util-user-agent-browser': 3.936.0 + '@aws-sdk/util-user-agent-node': 3.936.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.5 + '@smithy/eventstream-serde-browser': 4.2.5 + '@smithy/eventstream-serde-config-resolver': 4.3.5 + '@smithy/eventstream-serde-node': 4.2.5 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-blob-browser': 4.2.6 + '@smithy/hash-node': 4.2.5 + '@smithy/hash-stream-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/md5-js': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.12 + '@smithy/middleware-retry': 4.4.12 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.11 + '@smithy/util-defaults-mode-node': 4.2.14 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 + '@smithy/util-waiter': 4.2.5 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-sso@3.883.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -4825,6 +4965,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sso@3.936.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.936.0 + '@aws-sdk/middleware-host-header': 3.936.0 + '@aws-sdk/middleware-logger': 3.936.0 + '@aws-sdk/middleware-recursion-detection': 3.936.0 + '@aws-sdk/middleware-user-agent': 3.936.0 + '@aws-sdk/region-config-resolver': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-endpoints': 3.936.0 + '@aws-sdk/util-user-agent-browser': 3.936.0 + '@aws-sdk/util-user-agent-node': 3.936.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.5 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.12 + '@smithy/middleware-retry': 4.4.12 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.11 + '@smithy/util-defaults-mode-node': 4.2.14 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/core@3.883.0': dependencies: '@aws-sdk/types': 3.862.0 @@ -4843,6 +5026,22 @@ snapshots: fast-xml-parser: 5.2.5 tslib: 2.8.1 + '@aws-sdk/core@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@aws-sdk/xml-builder': 3.930.0 + '@smithy/core': 3.18.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@aws-sdk/credential-provider-env@3.883.0': dependencies: '@aws-sdk/core': 3.883.0 @@ -4851,6 +5050,14 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-env@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/credential-provider-http@3.883.0': dependencies: '@aws-sdk/core': 3.883.0 @@ -4864,6 +5071,19 @@ snapshots: '@smithy/util-stream': 4.3.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-http@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/node-http-handler': 4.4.5 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + '@smithy/util-stream': 4.5.6 + tslib: 2.8.1 + '@aws-sdk/credential-provider-ini@3.883.0': dependencies: '@aws-sdk/core': 3.883.0 @@ -4882,6 +5102,38 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-ini@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/credential-provider-env': 3.936.0 + '@aws-sdk/credential-provider-http': 3.936.0 + '@aws-sdk/credential-provider-login': 3.936.0 + '@aws-sdk/credential-provider-process': 3.936.0 + '@aws-sdk/credential-provider-sso': 3.936.0 + '@aws-sdk/credential-provider-web-identity': 3.936.0 + '@aws-sdk/nested-clients': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-login@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/nested-clients': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-node@3.883.0': dependencies: '@aws-sdk/credential-provider-env': 3.883.0 @@ -4899,6 +5151,23 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-node@3.936.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.936.0 + '@aws-sdk/credential-provider-http': 3.936.0 + '@aws-sdk/credential-provider-ini': 3.936.0 + '@aws-sdk/credential-provider-process': 3.936.0 + '@aws-sdk/credential-provider-sso': 3.936.0 + '@aws-sdk/credential-provider-web-identity': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-process@3.883.0': dependencies: '@aws-sdk/core': 3.883.0 @@ -4908,6 +5177,15 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-process@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/credential-provider-sso@3.883.0': dependencies: '@aws-sdk/client-sso': 3.883.0 @@ -4921,6 +5199,19 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-sso@3.936.0': + dependencies: + '@aws-sdk/client-sso': 3.936.0 + '@aws-sdk/core': 3.936.0 + '@aws-sdk/token-providers': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-web-identity@3.883.0': dependencies: '@aws-sdk/core': 3.883.0 @@ -4932,6 +5223,18 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-web-identity@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/nested-clients': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/middleware-bucket-endpoint@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 @@ -4942,6 +5245,16 @@ snapshots: '@smithy/util-config-provider': 4.1.0 tslib: 2.8.1 + '@aws-sdk/middleware-bucket-endpoint@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-arn-parser': 3.893.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-config-provider': 4.2.0 + tslib: 2.8.1 + '@aws-sdk/middleware-expect-continue@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 @@ -4949,6 +5262,13 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/middleware-expect-continue@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/middleware-flexible-checksums@3.883.0': dependencies: '@aws-crypto/crc32': 5.2.0 @@ -4965,6 +5285,22 @@ snapshots: '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 + '@aws-sdk/middleware-flexible-checksums@3.936.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/core': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/is-array-buffer': 4.2.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@aws-sdk/middleware-host-header@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 @@ -4972,18 +5308,37 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/middleware-host-header@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/middleware-location-constraint@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/middleware-location-constraint@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.876.0': dependencies: '@aws-sdk/types': 3.862.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 @@ -4991,6 +5346,14 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@aws/lambda-invoke-store': 0.2.1 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/middleware-sdk-s3@3.883.0': dependencies: '@aws-sdk/core': 3.883.0 @@ -5008,12 +5371,35 @@ snapshots: '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 + '@aws-sdk/middleware-sdk-s3@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-arn-parser': 3.893.0 + '@smithy/core': 3.18.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@aws-sdk/middleware-ssec@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/middleware-ssec@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.883.0': dependencies: '@aws-sdk/core': 3.883.0 @@ -5024,6 +5410,16 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-endpoints': 3.936.0 + '@smithy/core': 3.18.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/nested-clients@3.883.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -5067,6 +5463,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/nested-clients@3.936.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.936.0 + '@aws-sdk/middleware-host-header': 3.936.0 + '@aws-sdk/middleware-logger': 3.936.0 + '@aws-sdk/middleware-recursion-detection': 3.936.0 + '@aws-sdk/middleware-user-agent': 3.936.0 + '@aws-sdk/region-config-resolver': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-endpoints': 3.936.0 + '@aws-sdk/util-user-agent-browser': 3.936.0 + '@aws-sdk/util-user-agent-node': 3.936.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.5 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.12 + '@smithy/middleware-retry': 4.4.12 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.11 + '@smithy/util-defaults-mode-node': 4.2.14 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/region-config-resolver@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 @@ -5076,6 +5515,14 @@ snapshots: '@smithy/util-middleware': 4.1.0 tslib: 2.8.1 + '@aws-sdk/region-config-resolver@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/signature-v4-multi-region@3.883.0': dependencies: '@aws-sdk/middleware-sdk-s3': 3.883.0 @@ -5085,6 +5532,15 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/signature-v4-multi-region@3.936.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/token-providers@3.883.0': dependencies: '@aws-sdk/core': 3.883.0 @@ -5097,15 +5553,36 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/token-providers@3.936.0': + dependencies: + '@aws-sdk/core': 3.936.0 + '@aws-sdk/nested-clients': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/types@3.862.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/types@3.936.0': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/util-arn-parser@3.873.0': dependencies: tslib: 2.8.1 + '@aws-sdk/util-arn-parser@3.893.0': + dependencies: + tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.879.0': dependencies: '@aws-sdk/types': 3.862.0 @@ -5114,6 +5591,14 @@ snapshots: '@smithy/util-endpoints': 3.1.0 tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-endpoints': 3.2.5 + tslib: 2.8.1 + '@aws-sdk/util-locate-window@3.873.0': dependencies: tslib: 2.8.1 @@ -5125,6 +5610,13 @@ snapshots: bowser: 2.12.1 tslib: 2.8.1 + '@aws-sdk/util-user-agent-browser@3.936.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 + bowser: 2.12.1 + tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.883.0': dependencies: '@aws-sdk/middleware-user-agent': 3.883.0 @@ -5133,11 +5625,27 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.936.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@aws-sdk/xml-builder@3.873.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@aws-sdk/xml-builder@3.930.0': + dependencies: + '@smithy/types': 4.9.0 + fast-xml-parser: 5.2.5 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.2.1': {} + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -5152,18 +5660,10 @@ snapshots: '@cloudflare/workers-types@4.20251014.0': {} - '@colors/colors@1.6.0': {} - '@configvault.io/interfaces@1.0.17': dependencies: '@api.global/typedrequest-interfaces': 3.0.19 - '@dabh/diagnostics@2.0.8': - dependencies: - '@so-ric/colorspace': 1.1.6 - enabled: 2.0.0 - kuler: 2.0.0 - '@design.estate/dees-comms@1.0.27': dependencies: '@api.global/typedrequest': 3.1.10 @@ -5215,11 +5715,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.6.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.7.0': dependencies: tslib: 2.8.1 @@ -5316,7 +5811,7 @@ snapshots: '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 - '@git.zone/tsbuild@2.7.1': + '@git.zone/tsbuild@3.1.0': dependencies: '@git.zone/tspublish': 1.10.3 '@push.rocks/early': 4.0.4 @@ -5331,7 +5826,7 @@ snapshots: - aws-crt - supports-color - '@git.zone/tsbundle@2.5.1': + '@git.zone/tsbundle@2.5.2': dependencies: '@push.rocks/early': 4.0.4 '@push.rocks/smartcli': 4.0.19 @@ -5397,34 +5892,34 @@ snapshots: - aws-crt - supports-color - '@git.zone/tsrun@1.6.2': + '@git.zone/tsrun@2.0.0': dependencies: '@push.rocks/smartfile': 11.2.7 '@push.rocks/smartshell': 3.3.0 tsx: 4.20.6 - '@git.zone/tstest@2.7.0(socks@2.8.7)(typescript@5.9.3)': + '@git.zone/tstest@3.1.3(socks@2.8.7)(typescript@5.9.3)': dependencies: - '@api.global/typedserver': 3.0.79 - '@git.zone/tsbundle': 2.5.1 - '@git.zone/tsrun': 1.6.2 + '@api.global/typedserver': 3.0.80 + '@git.zone/tsbundle': 2.5.2 + '@git.zone/tsrun': 2.0.0 '@push.rocks/consolecolor': 2.0.3 '@push.rocks/qenv': 6.1.3 '@push.rocks/smartbrowser': 2.0.8(typescript@5.9.3) '@push.rocks/smartchok': 1.1.1 '@push.rocks/smartcrypto': 2.0.4 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartenv': 5.0.13 + '@push.rocks/smartenv': 6.0.0 '@push.rocks/smartexpect': 2.5.0 '@push.rocks/smartfile': 11.2.7 '@push.rocks/smartjson': 5.2.0 '@push.rocks/smartlog': 3.1.10 - '@push.rocks/smartmongo': 2.0.12(socks@2.8.7) + '@push.rocks/smartmongo': 2.0.14(socks@2.8.7) '@push.rocks/smartnetwork': 4.4.0 '@push.rocks/smartpath': 6.0.0 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrequest': 4.3.4 - '@push.rocks/smarts3': 2.2.6 + '@push.rocks/smartrequest': 5.0.1 + '@push.rocks/smarts3': 3.0.2 '@push.rocks/smartshell': 3.3.0 '@push.rocks/smarttime': 4.1.1 '@types/ws': 8.18.1 @@ -5842,16 +6337,6 @@ snapshots: '@jimp/types': 1.6.0 tinycolor2: 1.6.0 - '@koa/router@9.4.0': - dependencies: - debug: 4.4.3 - http-errors: 1.8.1 - koa-compose: 4.1.0 - methods: 1.1.2 - path-to-regexp: 6.3.0 - transitivePeerDependencies: - - supports-color - '@leichtgewicht/ip-codec@2.0.5': {} '@lit-labs/ssr-dom-shim@1.4.0': {} @@ -5894,27 +6379,10 @@ snapshots: '@napi-rs/wasm-runtime@1.0.7': dependencies: '@emnapi/core': 1.6.0 - '@emnapi/runtime': 1.6.0 + '@emnapi/runtime': 1.7.0 '@tybys/wasm-util': 0.10.1 optional: true - '@oozcitak/dom@1.15.10': - dependencies: - '@oozcitak/infra': 1.0.8 - '@oozcitak/url': 1.0.4 - '@oozcitak/util': 8.3.8 - - '@oozcitak/infra@1.0.8': - dependencies: - '@oozcitak/util': 8.3.8 - - '@oozcitak/url@1.0.4': - dependencies: - '@oozcitak/infra': 1.0.8 - '@oozcitak/util': 8.3.8 - - '@oozcitak/util@8.3.8': {} - '@oxc-project/types@0.95.0': {} '@pdf-lib/standard-fonts@1.0.0': @@ -6225,6 +6693,21 @@ snapshots: transitivePeerDependencies: - aws-crt + '@push.rocks/smartbucket@4.3.0': + dependencies: + '@aws-sdk/client-s3': 3.937.0 + '@push.rocks/smartmime': 2.0.4 + '@push.rocks/smartpath': 6.0.0 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartrx': 3.0.10 + '@push.rocks/smartstream': 3.2.5 + '@push.rocks/smartstring': 4.1.0 + '@push.rocks/smartunique': 3.0.9 + '@tsclass/tsclass': 9.3.0 + minimatch: 10.1.1 + transitivePeerDependencies: + - aws-crt + '@push.rocks/smartbuffer@3.0.5': dependencies: uint8array-extras: 1.5.0 @@ -6274,7 +6757,7 @@ snapshots: '@push.rocks/lik': 6.2.2 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartlog': 3.1.10 - '@push.rocks/smartmongo': 2.0.12(socks@2.8.7) + '@push.rocks/smartmongo': 2.0.14(socks@2.8.7) '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartstring': 4.1.0 @@ -6382,12 +6865,12 @@ snapshots: '@push.rocks/lik': 6.2.2 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartfile-interfaces': 1.0.7 - '@push.rocks/smarthash': 3.2.3 + '@push.rocks/smarthash': 3.2.6 '@push.rocks/smartjson': 5.2.0 '@push.rocks/smartmime': 2.0.4 '@push.rocks/smartpath': 6.0.0 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrequest': 4.3.1 + '@push.rocks/smartrequest': 4.3.4 '@push.rocks/smartstream': 3.2.5 '@types/fs-extra': 11.0.4 '@types/js-yaml': 4.0.9 @@ -6395,10 +6878,32 @@ snapshots: glob: 11.0.3 js-yaml: 4.1.0 + '@push.rocks/smartfile@13.0.1(@push.rocks/smartfs@1.1.0)': + dependencies: + '@push.rocks/lik': 6.2.2 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile-interfaces': 1.0.7 + '@push.rocks/smarthash': 3.2.6 + '@push.rocks/smartjson': 5.2.0 + '@push.rocks/smartmime': 2.0.4 + '@push.rocks/smartpath': 6.0.0 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartrequest': 4.3.4 + '@push.rocks/smartstream': 3.2.5 + '@types/js-yaml': 4.0.9 + glob: 11.0.3 + js-yaml: 4.1.0 + optionalDependencies: + '@push.rocks/smartfs': 1.1.0 + '@push.rocks/smartfm@2.2.2': dependencies: gray-matter: 4.0.3 + '@push.rocks/smartfs@1.1.0': + dependencies: + '@push.rocks/smartpath': 6.0.0 + '@push.rocks/smartgit@3.3.1': dependencies: '@push.rocks/smartenv': 6.0.0 @@ -6547,7 +7052,7 @@ snapshots: file-type: 19.6.0 mime: 4.0.7 - '@push.rocks/smartmongo@2.0.12(socks@2.8.7)': + '@push.rocks/smartmongo@2.0.14(socks@2.8.7)': dependencies: '@push.rocks/mongodump': 1.1.0(socks@2.8.7) '@push.rocks/smartdata': 5.16.4(socks@2.8.7) @@ -6721,6 +7226,15 @@ snapshots: agentkeepalive: 4.6.0 form-data: 4.0.4 + '@push.rocks/smartrequest@5.0.1': + dependencies: + '@push.rocks/smartenv': 6.0.0 + '@push.rocks/smartpath': 6.0.0 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smarturl': 3.1.0 + agentkeepalive: 4.6.0 + form-data: 4.0.5 + '@push.rocks/smartrouter@1.3.3': dependencies: '@push.rocks/lik': 6.2.2 @@ -6732,17 +7246,15 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 rxjs: 7.8.2 - '@push.rocks/smarts3@2.2.6': + '@push.rocks/smarts3@3.0.2': dependencies: - '@push.rocks/smartbucket': 3.3.10 + '@push.rocks/smartbucket': 4.3.0 '@push.rocks/smartfile': 11.2.7 '@push.rocks/smartpath': 6.0.0 + '@push.rocks/smartxml': 2.0.0 '@tsclass/tsclass': 9.3.0 - '@types/s3rver': 3.7.4 - s3rver: 3.7.1 transitivePeerDependencies: - aws-crt - - supports-color '@push.rocks/smartscaf@4.0.19': dependencies: @@ -6765,19 +7277,19 @@ snapshots: tree-kill: 1.2.2 which: 5.0.0 - '@push.rocks/smartsitemap@2.0.3': + '@push.rocks/smartsitemap@2.0.4': dependencies: '@push.rocks/smartcache': 1.0.18 '@push.rocks/smartfeed': 1.4.0 - '@push.rocks/smartxml': 1.1.1 - '@push.rocks/smartyaml': 2.0.5 - '@push.rocks/webrequest': 3.0.37 - '@tsclass/tsclass': 4.4.4 + '@push.rocks/smartxml': 2.0.0 + '@push.rocks/smartyaml': 3.0.4 + '@push.rocks/webrequest': 4.0.1 + '@tsclass/tsclass': 9.3.0 '@push.rocks/smartsocket@2.1.0': dependencies: '@api.global/typedrequest-interfaces': 3.0.19 - '@api.global/typedserver': 3.0.79 + '@api.global/typedserver': 3.0.80 '@push.rocks/isohash': 2.0.1 '@push.rocks/isounique': 1.0.5 '@push.rocks/lik': 6.2.2 @@ -6884,10 +7396,9 @@ snapshots: '@types/semver': 7.7.1 semver: 7.7.2 - '@push.rocks/smartxml@1.1.1': + '@push.rocks/smartxml@2.0.0': dependencies: - fast-xml-parser: 4.5.3 - xmlbuilder2: 3.1.1 + fast-xml-parser: 5.3.2 '@push.rocks/smartyaml@2.0.5': dependencies: @@ -6932,6 +7443,14 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 '@push.rocks/webstore': 2.0.20 + '@push.rocks/webrequest@4.0.1': + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartenv': 5.0.13 + '@push.rocks/smartjson': 5.2.0 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/webstore': 2.0.20 + '@push.rocks/websetup@3.0.19': dependencies: '@pushrocks/smartdelay': 3.0.1 @@ -7218,15 +7737,29 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/abort-controller@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/chunked-blob-reader-native@4.1.0': dependencies: '@smithy/util-base64': 4.1.0 tslib: 2.8.1 + '@smithy/chunked-blob-reader-native@4.2.1': + dependencies: + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + '@smithy/chunked-blob-reader@5.1.0': dependencies: tslib: 2.8.1 + '@smithy/chunked-blob-reader@5.2.0': + dependencies: + tslib: 2.8.1 + '@smithy/config-resolver@4.2.0': dependencies: '@smithy/node-config-provider': 4.2.0 @@ -7235,6 +7768,15 @@ snapshots: '@smithy/util-middleware': 4.1.0 tslib: 2.8.1 + '@smithy/config-resolver@4.4.3': + dependencies: + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + tslib: 2.8.1 + '@smithy/core@3.10.0': dependencies: '@smithy/middleware-serde': 4.1.0 @@ -7249,6 +7791,19 @@ snapshots: tslib: 2.8.1 uuid: 9.0.1 + '@smithy/core@3.18.5': + dependencies: + '@smithy/middleware-serde': 4.2.6 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.1.0': dependencies: '@smithy/node-config-provider': 4.2.0 @@ -7257,6 +7812,14 @@ snapshots: '@smithy/url-parser': 4.1.0 tslib: 2.8.1 + '@smithy/credential-provider-imds@4.2.5': + dependencies: + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + tslib: 2.8.1 + '@smithy/eventstream-codec@4.1.0': dependencies: '@aws-crypto/crc32': 5.2.0 @@ -7264,29 +7827,59 @@ snapshots: '@smithy/util-hex-encoding': 4.1.0 tslib: 2.8.1 + '@smithy/eventstream-codec@4.2.5': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.9.0 + '@smithy/util-hex-encoding': 4.2.0 + tslib: 2.8.1 + '@smithy/eventstream-serde-browser@4.1.0': dependencies: '@smithy/eventstream-serde-universal': 4.1.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/eventstream-serde-browser@4.2.5': + dependencies: + '@smithy/eventstream-serde-universal': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/eventstream-serde-config-resolver@4.2.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/eventstream-serde-config-resolver@4.3.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/eventstream-serde-node@4.1.0': dependencies: '@smithy/eventstream-serde-universal': 4.1.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/eventstream-serde-node@4.2.5': + dependencies: + '@smithy/eventstream-serde-universal': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/eventstream-serde-universal@4.1.0': dependencies: '@smithy/eventstream-codec': 4.1.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/eventstream-serde-universal@4.2.5': + dependencies: + '@smithy/eventstream-codec': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/fetch-http-handler@5.2.0': dependencies: '@smithy/protocol-http': 5.2.0 @@ -7295,6 +7888,14 @@ snapshots: '@smithy/util-base64': 4.1.0 tslib: 2.8.1 + '@smithy/fetch-http-handler@5.3.6': + dependencies: + '@smithy/protocol-http': 5.3.5 + '@smithy/querystring-builder': 4.2.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + '@smithy/hash-blob-browser@4.1.0': dependencies: '@smithy/chunked-blob-reader': 5.1.0 @@ -7302,6 +7903,13 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/hash-blob-browser@4.2.6': + dependencies: + '@smithy/chunked-blob-reader': 5.2.0 + '@smithy/chunked-blob-reader-native': 4.2.1 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/hash-node@4.1.0': dependencies: '@smithy/types': 4.4.0 @@ -7309,17 +7917,35 @@ snapshots: '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 + '@smithy/hash-node@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/hash-stream-node@4.1.0': dependencies: '@smithy/types': 4.4.0 '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 + '@smithy/hash-stream-node@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/invalid-dependency@4.1.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/invalid-dependency@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 @@ -7328,18 +7954,34 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/is-array-buffer@4.2.0': + dependencies: + tslib: 2.8.1 + '@smithy/md5-js@4.1.0': dependencies: '@smithy/types': 4.4.0 '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 + '@smithy/md5-js@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/middleware-content-length@4.1.0': dependencies: '@smithy/protocol-http': 5.2.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/middleware-content-length@4.2.5': + dependencies: + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/middleware-endpoint@4.2.0': dependencies: '@smithy/core': 3.10.0 @@ -7351,6 +7993,17 @@ snapshots: '@smithy/util-middleware': 4.1.0 tslib: 2.8.1 + '@smithy/middleware-endpoint@4.3.12': + dependencies: + '@smithy/core': 3.18.5 + '@smithy/middleware-serde': 4.2.6 + '@smithy/node-config-provider': 4.3.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-middleware': 4.2.5 + tslib: 2.8.1 + '@smithy/middleware-retry@4.2.0': dependencies: '@smithy/node-config-provider': 4.2.0 @@ -7364,17 +8017,40 @@ snapshots: tslib: 2.8.1 uuid: 9.0.1 + '@smithy/middleware-retry@4.4.12': + dependencies: + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/service-error-classification': 4.2.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + '@smithy/middleware-serde@4.1.0': dependencies: '@smithy/protocol-http': 5.2.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/middleware-serde@4.2.6': + dependencies: + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/middleware-stack@4.1.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/middleware-stack@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/node-config-provider@4.2.0': dependencies: '@smithy/property-provider': 4.1.0 @@ -7382,6 +8058,13 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/node-config-provider@4.3.5': + dependencies: + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/node-http-handler@4.2.0': dependencies: '@smithy/abort-controller': 4.1.0 @@ -7390,36 +8073,74 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/node-http-handler@4.4.5': + dependencies: + '@smithy/abort-controller': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/querystring-builder': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/property-provider@4.1.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/property-provider@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/protocol-http@5.2.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/protocol-http@5.3.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/querystring-builder@4.1.0': dependencies: '@smithy/types': 4.4.0 '@smithy/util-uri-escape': 4.1.0 tslib: 2.8.1 + '@smithy/querystring-builder@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + '@smithy/util-uri-escape': 4.2.0 + tslib: 2.8.1 + '@smithy/querystring-parser@4.1.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/querystring-parser@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/service-error-classification@4.1.0': dependencies: '@smithy/types': 4.4.0 + '@smithy/service-error-classification@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + '@smithy/shared-ini-file-loader@4.1.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/shared-ini-file-loader@4.4.0': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/signature-v4@5.2.0': dependencies: '@smithy/is-array-buffer': 4.1.0 @@ -7431,6 +8152,17 @@ snapshots: '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 + '@smithy/signature-v4@5.3.5': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-uri-escape': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/smithy-client@4.6.0': dependencies: '@smithy/core': 3.10.0 @@ -7441,30 +8173,64 @@ snapshots: '@smithy/util-stream': 4.3.0 tslib: 2.8.1 + '@smithy/smithy-client@4.9.8': + dependencies: + '@smithy/core': 3.18.5 + '@smithy/middleware-endpoint': 4.3.12 + '@smithy/middleware-stack': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-stream': 4.5.6 + tslib: 2.8.1 + '@smithy/types@4.4.0': dependencies: tslib: 2.8.1 + '@smithy/types@4.9.0': + dependencies: + tslib: 2.8.1 + '@smithy/url-parser@4.1.0': dependencies: '@smithy/querystring-parser': 4.1.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/url-parser@4.2.5': + dependencies: + '@smithy/querystring-parser': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/util-base64@4.1.0': dependencies: '@smithy/util-buffer-from': 4.1.0 '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 + '@smithy/util-base64@4.3.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/util-body-length-browser@4.1.0': dependencies: tslib: 2.8.1 + '@smithy/util-body-length-browser@4.2.0': + dependencies: + tslib: 2.8.1 + '@smithy/util-body-length-node@4.1.0': dependencies: tslib: 2.8.1 + '@smithy/util-body-length-node@4.2.1': + dependencies: + tslib: 2.8.1 + '@smithy/util-buffer-from@2.2.0': dependencies: '@smithy/is-array-buffer': 2.2.0 @@ -7475,10 +8241,19 @@ snapshots: '@smithy/is-array-buffer': 4.1.0 tslib: 2.8.1 + '@smithy/util-buffer-from@4.2.0': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + tslib: 2.8.1 + '@smithy/util-config-provider@4.1.0': dependencies: tslib: 2.8.1 + '@smithy/util-config-provider@4.2.0': + dependencies: + tslib: 2.8.1 + '@smithy/util-defaults-mode-browser@4.1.0': dependencies: '@smithy/property-provider': 4.1.0 @@ -7487,6 +8262,13 @@ snapshots: bowser: 2.12.1 tslib: 2.8.1 + '@smithy/util-defaults-mode-browser@4.3.11': + dependencies: + '@smithy/property-provider': 4.2.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.1.0': dependencies: '@smithy/config-resolver': 4.2.0 @@ -7497,27 +8279,58 @@ snapshots: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.2.14': + dependencies: + '@smithy/config-resolver': 4.4.3 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/smithy-client': 4.9.8 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/util-endpoints@3.1.0': dependencies: '@smithy/node-config-provider': 4.2.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/util-endpoints@3.2.5': + dependencies: + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/util-hex-encoding@4.1.0': dependencies: tslib: 2.8.1 + '@smithy/util-hex-encoding@4.2.0': + dependencies: + tslib: 2.8.1 + '@smithy/util-middleware@4.1.0': dependencies: '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/util-middleware@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/util-retry@4.1.0': dependencies: '@smithy/service-error-classification': 4.1.0 '@smithy/types': 4.4.0 tslib: 2.8.1 + '@smithy/util-retry@4.2.5': + dependencies: + '@smithy/service-error-classification': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + '@smithy/util-stream@4.3.0': dependencies: '@smithy/fetch-http-handler': 5.2.0 @@ -7529,10 +8342,25 @@ snapshots: '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 + '@smithy/util-stream@4.5.6': + dependencies: + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/node-http-handler': 4.4.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/util-uri-escape@4.1.0': dependencies: tslib: 2.8.1 + '@smithy/util-uri-escape@4.2.0': + dependencies: + tslib: 2.8.1 + '@smithy/util-utf8@2.3.0': dependencies: '@smithy/util-buffer-from': 2.2.0 @@ -7543,16 +8371,26 @@ snapshots: '@smithy/util-buffer-from': 4.1.0 tslib: 2.8.1 + '@smithy/util-utf8@4.2.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + tslib: 2.8.1 + '@smithy/util-waiter@4.1.0': dependencies: '@smithy/abort-controller': 4.1.0 '@smithy/types': 4.4.0 tslib: 2.8.1 - '@so-ric/colorspace@1.1.6': + '@smithy/util-waiter@4.2.5': dependencies: - color: 5.0.2 - text-hex: 1.0.0 + '@smithy/abort-controller': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/uuid@1.1.0': + dependencies: + tslib: 2.8.1 '@socket.io/component-emitter@3.1.2': {} @@ -7593,27 +8431,27 @@ snapshots: '@types/bn.js@5.2.0': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/buffer-json@2.0.3': {} '@types/clean-css@4.2.11': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 source-map: 0.6.1 '@types/connect@3.4.38': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/cors@2.8.19': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/debug@4.1.12': dependencies: @@ -7625,7 +8463,7 @@ snapshots: '@types/dns-packet@5.6.5': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/elliptic@6.4.18': dependencies: @@ -7633,7 +8471,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -7646,17 +8484,17 @@ snapshots: '@types/from2@2.3.5': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/hast@3.0.4': dependencies: @@ -7678,7 +8516,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/mdast@4.0.4': dependencies: @@ -7694,11 +8532,11 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/node-forge@1.3.14': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/node@16.9.1': {} @@ -7706,6 +8544,10 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + '@types/ping@0.4.4': {} '@types/qs@6.14.0': {} @@ -7716,38 +8558,32 @@ snapshots: '@types/relateurl@0.2.33': {} - '@types/s3rver@3.7.4': - dependencies: - '@types/node': 22.18.1 - '@types/semver@7.7.1': {} '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/send@1.2.1': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/send': 0.17.6 '@types/symbol-tree@3.2.5': {} '@types/tar-stream@3.1.4': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/through2@2.0.41': dependencies: - '@types/node': 22.18.1 - - '@types/triple-beam@1.3.5': {} + '@types/node': 24.10.1 '@types/trusted-types@2.0.7': {} @@ -7773,11 +8609,11 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.18.1 + '@types/node': 24.10.1 optional: true '@ungap/structured-clone@1.3.0': {} @@ -7822,10 +8658,6 @@ snapshots: ansi-regex@6.2.0: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -7856,8 +8688,6 @@ snapshots: dependencies: tslib: 2.8.1 - async@3.2.6: {} - asynckit@0.4.0: {} available-typed-arrays@1.0.7: @@ -7974,17 +8804,8 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - busboy@0.3.1: - dependencies: - dicer: 0.3.0 - bytes@3.1.2: {} - cache-content-type@1.0.1: - dependencies: - mime-types: 2.1.35 - ylru: 1.4.0 - cacheable-lookup@7.0.0: {} cacheable-request@10.2.14: @@ -8025,12 +8846,6 @@ snapshots: ccount@2.0.1: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -8065,35 +8880,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - co@4.6.0: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-convert@3.1.2: - dependencies: - color-name: 2.0.2 - - color-name@1.1.3: {} - color-name@1.1.4: {} - color-name@2.0.2: {} - - color-string@2.1.2: - dependencies: - color-name: 2.0.2 - - color@5.0.2: - dependencies: - color-convert: 3.1.2 - color-string: 2.1.2 - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -8102,8 +8894,6 @@ snapshots: commander@2.20.3: {} - commander@5.1.0: {} - commondir@1.0.1: {} concat-map@0.0.1: {} @@ -8113,10 +8903,6 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - content-disposition@1.0.0: dependencies: safe-buffer: 5.2.1 @@ -8127,11 +8913,6 @@ snapshots: cookie@0.7.2: {} - cookies@0.9.1: - dependencies: - depd: 2.0.0 - keygrip: 1.1.0 - core-util-is@1.0.3: {} cors@2.8.5: @@ -8190,8 +8971,6 @@ snapshots: dependencies: mimic-response: 3.1.0 - deep-equal@1.0.1: {} - deep-extend@0.6.0: {} defer-to-connect@2.0.1: {} @@ -8218,16 +8997,10 @@ snapshots: delayed-stream@1.0.0: {} - delegates@1.0.0: {} - - depd@1.1.2: {} - depd@2.0.0: {} dequal@2.0.3: {} - destroy@1.2.0: {} - detect-libc@2.1.2: {} devlop@1.1.0: @@ -8236,10 +9009,6 @@ snapshots: devtools-protocol@0.0.1521046: {} - dicer@0.3.0: - dependencies: - streamsearch: 0.1.2 - diff3@0.0.3: {} diff@8.0.2: {} @@ -8272,10 +9041,6 @@ snapshots: emoji-regex@9.2.2: {} - enabled@2.0.0: {} - - encodeurl@1.0.2: {} - encodeurl@2.0.0: {} end-of-stream@1.4.5: @@ -8299,7 +9064,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.19 - '@types/node': 22.18.1 + '@types/node': 24.10.1 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -8368,8 +9133,6 @@ snapshots: escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -8475,10 +9238,6 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-xml-parser@3.21.1: - dependencies: - strnum: 1.1.2 - fast-xml-parser@4.5.3: dependencies: strnum: 1.1.2 @@ -8487,6 +9246,10 @@ snapshots: dependencies: strnum: 2.1.1 + fast-xml-parser@5.3.2: + dependencies: + strnum: 2.1.1 + fault@2.0.1: dependencies: format: 0.2.2 @@ -8495,8 +9258,6 @@ snapshots: dependencies: pend: 1.2.0 - fecha@4.2.3: {} - fflate@0.8.2: {} figures@6.1.0: @@ -8547,8 +9308,6 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 - fn.name@1.1.0: {} - follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: debug: 4.4.3 @@ -8577,12 +9336,18 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + format@0.2.2: {} forwarded@0.2.0: {} - fresh@0.5.2: {} - fresh@2.0.0: {} from2@2.3.0: @@ -8596,12 +9361,6 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -8609,8 +9368,6 @@ snapshots: function-bind@1.1.2: {} - generator-function@2.0.1: {} - get-caller-file@2.0.5: {} get-intrinsic@1.3.0: @@ -8672,7 +9429,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.3 + minimatch: 10.1.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.0 @@ -8730,8 +9487,6 @@ snapshots: webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 - has-flag@3.0.0: {} - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -8795,21 +9550,8 @@ snapshots: html-void-elements@3.0.0: {} - http-assert@1.5.0: - dependencies: - deep-equal: 1.0.1 - http-errors: 1.8.1 - http-cache-semantics@4.2.0: {} - http-errors@1.8.1: - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 1.5.0 - toidentifier: 1.0.1 - http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -8841,8 +9583,6 @@ snapshots: dependencies: ms: 2.1.3 - humanize-number@0.0.2: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -8902,14 +9642,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-git-ref-name-valid@1.0.0: {} is-nan@1.3.2: @@ -8925,15 +9657,6 @@ snapshots: is-promise@4.0.0: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-stream@2.0.1: {} - is-stream@4.0.1: {} is-typed-array@1.1.15: @@ -9038,70 +9761,18 @@ snapshots: '@babel/runtime': 7.28.4 ts-algebra: 2.0.0 - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - keygrip@1.1.0: - dependencies: - tsscmp: 1.0.6 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 kind-of@6.0.3: {} - koa-compose@4.1.0: {} - - koa-convert@2.0.0: - dependencies: - co: 4.6.0 - koa-compose: 4.1.0 - - koa-logger@3.2.1: - dependencies: - bytes: 3.1.2 - chalk: 2.4.2 - humanize-number: 0.0.2 - passthrough-counter: 1.0.0 - - koa@2.16.3: - dependencies: - accepts: 1.3.8 - cache-content-type: 1.0.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookies: 0.9.1 - debug: 4.4.3 - delegates: 1.0.0 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - fresh: 0.5.2 - http-assert: 1.5.0 - http-errors: 1.8.1 - is-generator-function: 1.1.2 - koa-compose: 4.1.0 - koa-convert: 2.0.0 - on-finished: 2.4.1 - only: 0.0.2 - parseurl: 1.3.3 - statuses: 1.5.0 - type-is: 1.6.18 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - kuler@2.0.0: {} - lenis@1.3.13: {} lines-and-columns@1.2.4: {} @@ -9169,17 +9840,6 @@ snapshots: lodash.restparam@3.6.1: {} - lodash@4.17.21: {} - - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - longest-streak@3.1.0: {} lower-case@1.1.4: {} @@ -9350,16 +10010,12 @@ snapshots: mdurl@2.0.0: {} - media-typer@0.3.0: {} - media-typer@1.1.0: {} memory-pager@1.5.0: {} merge-descriptors@2.0.0: {} - methods@1.1.2: {} - micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.2.0 @@ -9584,10 +10240,6 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.0.3: - dependencies: - '@isaacs/brace-expansion': 5.0.0 - minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 @@ -9713,12 +10365,6 @@ snapshots: dependencies: wrappy: 1.0.2 - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - - only@0.0.2: {} - open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -9814,8 +10460,6 @@ snapshots: parseurl@1.3.3: {} - passthrough-counter@1.0.0: {} - path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -9834,8 +10478,6 @@ snapshots: lru-cache: 11.2.1 minipass: 7.1.2 - path-to-regexp@6.3.0: {} - path-to-regexp@8.3.0: {} pdf-lib@1.17.1: @@ -10131,34 +10773,10 @@ snapshots: dependencies: tslib: 2.8.1 - s3rver@3.7.1: - dependencies: - '@koa/router': 9.4.0 - busboy: 0.3.1 - commander: 5.1.0 - fast-xml-parser: 3.21.1 - fs-extra: 8.1.0 - he: 1.2.0 - koa: 2.16.3 - koa-logger: 3.2.1 - lodash: 4.17.21 - statuses: 2.0.2 - winston: 3.18.3 - transitivePeerDependencies: - - supports-color - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-stable-stringify@2.5.0: {} - safer-buffer@2.1.2: {} sax@1.4.2: {} @@ -10368,16 +10986,10 @@ snapshots: sprintf-js@1.0.3: {} - stack-trace@0.0.10: {} - - statuses@1.5.0: {} - statuses@2.0.1: {} statuses@2.0.2: {} - streamsearch@0.1.2: {} - streamx@2.22.1: dependencies: fast-fifo: 1.3.2 @@ -10453,10 +11065,6 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 5.4.2 - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - sweet-scroll@4.0.0: {} symbol-tree@3.2.4: {} @@ -10484,8 +11092,6 @@ snapshots: dependencies: b4a: 1.6.7 - text-hex@1.0.0: {} - threads@1.7.0: dependencies: callsites: 3.1.0 @@ -10545,8 +11151,6 @@ snapshots: trim-lines@3.0.1: {} - triple-beam@1.4.1: {} - trough@2.2.0: {} ts-algebra@2.0.0: {} @@ -10555,8 +11159,6 @@ snapshots: tslib@2.8.1: {} - tsscmp@1.0.6: {} - tsx@4.20.6: dependencies: esbuild: 0.25.12 @@ -10580,11 +11182,6 @@ snapshots: type-fest@4.41.0: {} - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -10620,6 +11217,8 @@ snapshots: undici-types@6.21.0: {} + undici-types@7.16.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -10653,8 +11252,6 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - universalify@0.1.2: {} - universalify@2.0.1: {} unload@2.4.1: {} @@ -10717,26 +11314,6 @@ snapshots: dependencies: isexe: 3.1.1 - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.18.3: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.8 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - wordwrap@1.0.0: {} wrap-ansi@6.2.0: @@ -10770,13 +11347,6 @@ snapshots: sax: 1.4.2 xmlbuilder: 11.0.1 - xmlbuilder2@3.1.1: - dependencies: - '@oozcitak/dom': 1.15.10 - '@oozcitak/infra': 1.0.8 - '@oozcitak/util': 8.3.8 - js-yaml: 3.14.1 - xmlbuilder@11.0.1: {} xmlhttprequest-ssl@2.1.2: {} @@ -10809,8 +11379,6 @@ snapshots: buffer-crc32: 0.2.13 pend: 1.2.0 - ylru@1.4.0: {} - yoctocolors-cjs@2.1.3: {} zod@3.25.76: {} diff --git a/readme.hints.md b/readme.hints.md index c93bee4..495c566 100644 --- a/readme.hints.md +++ b/readme.hints.md @@ -243,7 +243,60 @@ gitzone format --clean-backups ## API Changes -- smartfile API updated to use fs._ and memory._ namespaces +### Smartfile v13 Migration (Latest - Completed) + +The project has been fully migrated from @push.rocks/smartfile v11 to v13, which introduced a major breaking change where filesystem operations were split into two separate packages: + +**Packages:** +- `@push.rocks/smartfile` v13.0.1 - File representation classes (SmartFile, StreamFile, VirtualDirectory) +- `@push.rocks/smartfs` v1.1.0 - Filesystem operations (read, write, exists, stat, etc.) + +**Key API Changes:** +1. **File Reading**: + - Old: `plugins.smartfile.fs.toStringSync(path)` or `plugins.smartfile.fs.toObjectSync(path)` + - New: `await plugins.smartfs.file(path).encoding('utf8').read()` + JSON.parse if needed + - Important: `read()` returns `string | Buffer` - use `as string` type assertion when encoding is set + +2. **File Writing**: + - Old: `plugins.smartfile.memory.toFs(content, path)` or `plugins.smartfile.memory.toFsSync(content, path)` + - New: `await plugins.smartfs.file(path).encoding('utf8').write(content)` + +3. **File Existence**: + - Old: `plugins.smartfile.fs.fileExists(path)` or `plugins.smartfile.fs.fileExistsSync(path)` + - New: `await plugins.smartfs.file(path).exists()` + +4. **Directory Operations**: + - Old: `plugins.smartfile.fs.ensureDir(path)` + - New: `await plugins.smartfs.directory(path).recursive().create()` + - Old: `plugins.smartfile.fs.remove(path)` + - New: `await plugins.smartfs.directory(path).recursive().delete()` or `await plugins.smartfs.file(path).delete()` + +5. **Directory Listing**: + - Old: `plugins.smartfile.fs.listFolders(path)` or `plugins.smartfile.fs.listFoldersSync(path)` + - New: `await plugins.smartfs.directory(path).list()` then filter by `stats.isDirectory` + - Note: `list()` returns `IDirectoryEntry[]` with `path` and `name` properties - use `stat()` to check if directory + +6. **File Stats**: + - Old: `stats.isDirectory()` (method) + - New: `stats.isDirectory` (boolean property) + - Old: `stats.mtimeMs` + - New: `stats.mtime.getTime()` + +7. **SmartFile Factory**: + - Old: Direct SmartFile instantiation + - New: `plugins.smartfile.SmartFileFactory.nodeFs()` then factory methods + +**Migration Pattern:** +All sync methods must become async. Functions that were previously synchronous (like `getProjectName()`) now return `Promise` and must be awaited. + +**Affected Modules:** +- ts/mod_format/* (largest area - 15+ files) +- ts/mod_commit/* (version bumping) +- ts/mod_services/* (configuration management) +- ts/mod_meta/* (meta repository management) +- ts/mod_standard/* (template listing) +- ts/mod_template/* (template operations) + +**Previous API Changes:** - smartnpm requires instance creation: `new NpmRegistry()` -- All file operations now use updated APIs - Type imports use `import type` for proper verbatim module syntax diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 5776c41..526db48 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@git.zone/cli', - version: '1.21.5', + version: '2.0.0', description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.' } diff --git a/ts/mod_commit/index.ts b/ts/mod_commit/index.ts index 44cb06d..c1b68a9 100644 --- a/ts/mod_commit/index.ts +++ b/ts/mod_commit/index.ts @@ -142,10 +142,10 @@ export const run = async (argvArg: any) => { changelog = changelog.replaceAll('\n{{nextVersionDetails}}', ''); } - await plugins.smartfile.memory.toFs( - changelog, - plugins.path.join(paths.cwd, `changelog.md`), - ); + await plugins.smartfs + .file(plugins.path.join(paths.cwd, `changelog.md`)) + .encoding('utf8') + .write(changelog); ui.printStep(currentStep, totalSteps, '📄 Generating changelog.md', 'done'); // Step 3: Staging files diff --git a/ts/mod_commit/mod.helpers.ts b/ts/mod_commit/mod.helpers.ts index fb40f4a..eb5944f 100644 --- a/ts/mod_commit/mod.helpers.ts +++ b/ts/mod_commit/mod.helpers.ts @@ -40,8 +40,8 @@ export async function detectProjectType(): Promise { const packageJsonPath = plugins.path.join(paths.cwd, 'package.json'); const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json'); - const hasPackageJson = await plugins.smartfile.fs.fileExists(packageJsonPath); - const hasDenoJson = await plugins.smartfile.fs.fileExists(denoJsonPath); + const hasPackageJson = await plugins.smartfs.file(packageJsonPath).exists(); + const hasDenoJson = await plugins.smartfs.file(denoJsonPath).exists(); if (hasPackageJson && hasDenoJson) { logger.log('info', 'Detected dual project (npm + deno)'); @@ -95,10 +95,14 @@ function calculateNewVersion(currentVersion: string, versionType: VersionType): * @param projectType The project type to determine which file to read * @returns The current version string */ -function readCurrentVersion(projectType: ProjectType): string { +async function readCurrentVersion(projectType: ProjectType): Promise { if (projectType === 'npm' || projectType === 'both') { const packageJsonPath = plugins.path.join(paths.cwd, 'package.json'); - const packageJson = plugins.smartfile.fs.toObjectSync(packageJsonPath) as { version?: string }; + const content = (await plugins.smartfs + .file(packageJsonPath) + .encoding('utf8') + .read()) as string; + const packageJson = JSON.parse(content) as { version?: string }; if (!packageJson.version) { throw new Error('package.json does not contain a version field'); @@ -106,7 +110,11 @@ function readCurrentVersion(projectType: ProjectType): string { return packageJson.version; } else { const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json'); - const denoConfig = plugins.smartfile.fs.toObjectSync(denoJsonPath) as { version?: string }; + const content = (await plugins.smartfs + .file(denoJsonPath) + .encoding('utf8') + .read()) as string; + const denoConfig = JSON.parse(content) as { version?: string }; if (!denoConfig.version) { throw new Error('deno.json does not contain a version field'); @@ -121,12 +129,16 @@ function readCurrentVersion(projectType: ProjectType): string { * @param newVersion The new version to write */ async function updateVersionFile(filePath: string, newVersion: string): Promise { - const config = plugins.smartfile.fs.toObjectSync(filePath) as { version?: string }; + const content = (await plugins.smartfs + .file(filePath) + .encoding('utf8') + .read()) as string; + const config = JSON.parse(content) as { version?: string }; config.version = newVersion; - await plugins.smartfile.memory.toFs( - JSON.stringify(config, null, 2) + '\n', - filePath - ); + await plugins.smartfs + .file(filePath) + .encoding('utf8') + .write(JSON.stringify(config, null, 2) + '\n'); } /** @@ -162,7 +174,7 @@ export async function bumpProjectVersion( try { // 1. Read current version - const currentVersion = readCurrentVersion(projectType); + const currentVersion = await readCurrentVersion(projectType); // 2. Calculate new version (reuse existing function!) const newVersion = calculateNewVersion(currentVersion, versionType); diff --git a/ts/mod_format/classes.baseformatter.ts b/ts/mod_format/classes.baseformatter.ts index 30a01f9..3cd43b3 100644 --- a/ts/mod_format/classes.baseformatter.ts +++ b/ts/mod_format/classes.baseformatter.ts @@ -65,15 +65,15 @@ export abstract class BaseFormatter { normalizedPath = './' + filepath; } - await plugins.smartfile.memory.toFs(content, normalizedPath); + await plugins.smartfs.file(normalizedPath).encoding('utf8').write(content); } protected async createFile(filepath: string, content: string): Promise { - await plugins.smartfile.memory.toFs(content, filepath); + await plugins.smartfs.file(filepath).encoding('utf8').write(content); } protected async deleteFile(filepath: string): Promise { - await plugins.smartfile.fs.remove(filepath); + await plugins.smartfs.file(filepath).delete(); } protected async shouldProcessFile(filepath: string): Promise { diff --git a/ts/mod_format/classes.changecache.ts b/ts/mod_format/classes.changecache.ts index d10d96b..4bc34f6 100644 --- a/ts/mod_format/classes.changecache.ts +++ b/ts/mod_format/classes.changecache.ts @@ -25,7 +25,7 @@ export class ChangeCache { } async initialize(): Promise { - await plugins.smartfile.fs.ensureDir(this.cacheDir); + await plugins.smartfs.directory(this.cacheDir).recursive().create(); } async getManifest(): Promise { @@ -35,13 +35,16 @@ export class ChangeCache { files: [], }; - const exists = await plugins.smartfile.fs.fileExists(this.manifestPath); + const exists = await plugins.smartfs.file(this.manifestPath).exists(); if (!exists) { return defaultManifest; } try { - const content = plugins.smartfile.fs.toStringSync(this.manifestPath); + const content = (await plugins.smartfs + .file(this.manifestPath) + .encoding('utf8') + .read()) as string; const manifest = JSON.parse(content); // Validate the manifest structure @@ -57,7 +60,7 @@ export class ChangeCache { ); // Try to delete the corrupted file try { - await plugins.smartfile.fs.remove(this.manifestPath); + await plugins.smartfs.file(this.manifestPath).delete(); } catch (removeError) { // Ignore removal errors } @@ -72,11 +75,14 @@ export class ChangeCache { } // Ensure directory exists - await plugins.smartfile.fs.ensureDir(this.cacheDir); + await plugins.smartfs.directory(this.cacheDir).recursive().create(); // Write directly with proper JSON stringification const jsonContent = JSON.stringify(manifest, null, 2); - await plugins.smartfile.memory.toFs(jsonContent, this.manifestPath); + await plugins.smartfs + .file(this.manifestPath) + .encoding('utf8') + .write(jsonContent); } async hasFileChanged(filePath: string): Promise { @@ -85,20 +91,23 @@ export class ChangeCache { : plugins.path.join(paths.cwd, filePath); // Check if file exists - const exists = await plugins.smartfile.fs.fileExists(absolutePath); + const exists = await plugins.smartfs.file(absolutePath).exists(); if (!exists) { return true; // File doesn't exist, so it's "changed" (will be created) } // Get current file stats - const stats = await plugins.smartfile.fs.stat(absolutePath); + const stats = await plugins.smartfs.file(absolutePath).stat(); // Skip directories - if (stats.isDirectory()) { + if (stats.isDirectory) { return false; // Directories are not processed } - const content = plugins.smartfile.fs.toStringSync(absolutePath); + const content = (await plugins.smartfs + .file(absolutePath) + .encoding('utf8') + .read()) as string; const currentChecksum = this.calculateChecksum(content); // Get cached info @@ -113,7 +122,7 @@ export class ChangeCache { return ( cachedFile.checksum !== currentChecksum || cachedFile.size !== stats.size || - cachedFile.modified !== stats.mtimeMs + cachedFile.modified !== stats.mtime.getTime() ); } @@ -123,14 +132,17 @@ export class ChangeCache { : plugins.path.join(paths.cwd, filePath); // Get current file stats - const stats = await plugins.smartfile.fs.stat(absolutePath); + const stats = await plugins.smartfs.file(absolutePath).stat(); // Skip directories - if (stats.isDirectory()) { + if (stats.isDirectory) { return; // Don't cache directories } - const content = plugins.smartfile.fs.toStringSync(absolutePath); + const content = (await plugins.smartfs + .file(absolutePath) + .encoding('utf8') + .read()) as string; const checksum = this.calculateChecksum(content); // Update manifest @@ -140,7 +152,7 @@ export class ChangeCache { const cacheEntry: IFileCache = { path: filePath, checksum, - modified: stats.mtimeMs, + modified: stats.mtime.getTime(), size: stats.size, }; @@ -176,7 +188,7 @@ export class ChangeCache { ? file.path : plugins.path.join(paths.cwd, file.path); - if (await plugins.smartfile.fs.fileExists(absolutePath)) { + if (await plugins.smartfs.file(absolutePath).exists()) { validFiles.push(file); } } diff --git a/ts/mod_format/classes.diffreporter.ts b/ts/mod_format/classes.diffreporter.ts index cf6aa91..39d5c96 100644 --- a/ts/mod_format/classes.diffreporter.ts +++ b/ts/mod_format/classes.diffreporter.ts @@ -21,14 +21,15 @@ export class DiffReporter { } try { - const exists = await plugins.smartfile.fs.fileExists(change.path); + const exists = await plugins.smartfs.file(change.path).exists(); if (!exists) { return null; } - const currentContent = await plugins.smartfile.fs.toStringSync( - change.path, - ); + const currentContent = (await plugins.smartfs + .file(change.path) + .encoding('utf8') + .read()) as string; // For planned changes, we need the new content if (!change.content) { @@ -107,10 +108,10 @@ export class DiffReporter { })), }; - await plugins.smartfile.memory.toFs( - JSON.stringify(report, null, 2), - outputPath, - ); + await plugins.smartfs + .file(outputPath) + .encoding('utf8') + .write(JSON.stringify(report, null, 2)); logger.log('info', `Diff report saved to ${outputPath}`); } diff --git a/ts/mod_format/classes.formatstats.ts b/ts/mod_format/classes.formatstats.ts index eb49a97..7361494 100644 --- a/ts/mod_format/classes.formatstats.ts +++ b/ts/mod_format/classes.formatstats.ts @@ -192,10 +192,10 @@ export class FormatStats { moduleStats: Array.from(this.stats.moduleStats.values()), }; - await plugins.smartfile.memory.toFs( - JSON.stringify(report, null, 2), - outputPath, - ); + await plugins.smartfs + .file(outputPath) + .encoding('utf8') + .write(JSON.stringify(report, null, 2)); logger.log('info', `Statistics report saved to ${outputPath}`); } diff --git a/ts/mod_format/classes.rollbackmanager.ts b/ts/mod_format/classes.rollbackmanager.ts index 9421573..d18d90c 100644 --- a/ts/mod_format/classes.rollbackmanager.ts +++ b/ts/mod_format/classes.rollbackmanager.ts @@ -36,21 +36,27 @@ export class RollbackManager { : plugins.path.join(paths.cwd, filepath); // Check if file exists - const exists = await plugins.smartfile.fs.fileExists(absolutePath); + const exists = await plugins.smartfs.file(absolutePath).exists(); if (!exists) { // File doesn't exist yet (will be created), so we skip backup return; } // Read file content and metadata - const content = plugins.smartfile.fs.toStringSync(absolutePath); - const stats = await plugins.smartfile.fs.stat(absolutePath); + const content = (await plugins.smartfs + .file(absolutePath) + .encoding('utf8') + .read()) as string; + const stats = await plugins.smartfs.file(absolutePath).stat(); const checksum = this.calculateChecksum(content); // Create backup const backupPath = this.getBackupPath(operationId, filepath); - await plugins.smartfile.fs.ensureDir(plugins.path.dirname(backupPath)); - await plugins.smartfile.memory.toFs(content, backupPath); + await plugins.smartfs + .directory(plugins.path.dirname(backupPath)) + .recursive() + .create(); + await plugins.smartfs.file(backupPath).encoding('utf8').write(content); // Update operation operation.files.push({ @@ -84,7 +90,10 @@ export class RollbackManager { // Verify backup integrity const backupPath = this.getBackupPath(operationId, file.path); - const backupContent = plugins.smartfile.fs.toStringSync(backupPath); + const backupContent = await plugins.smartfs + .file(backupPath) + .encoding('utf8') + .read(); const backupChecksum = this.calculateChecksum(backupContent); if (backupChecksum !== file.checksum) { @@ -92,7 +101,10 @@ export class RollbackManager { } // Restore file - await plugins.smartfile.memory.toFs(file.originalContent, absolutePath); + await plugins.smartfs + .file(absolutePath) + .encoding('utf8') + .write(file.originalContent); // Restore permissions const mode = parseInt(file.permissions, 8); @@ -129,7 +141,7 @@ export class RollbackManager { 'operations', operation.id, ); - await plugins.smartfile.fs.remove(operationDir); + await plugins.smartfs.directory(operationDir).recursive().delete(); // Remove from manifest manifest.operations = manifest.operations.filter( @@ -148,13 +160,16 @@ export class RollbackManager { for (const file of operation.files) { const backupPath = this.getBackupPath(operationId, file.path); - const exists = await plugins.smartfile.fs.fileExists(backupPath); + const exists = await plugins.smartfs.file(backupPath).exists(); if (!exists) { return false; } - const content = plugins.smartfile.fs.toStringSync(backupPath); + const content = await plugins.smartfs + .file(backupPath) + .encoding('utf8') + .read(); const checksum = this.calculateChecksum(content); if (checksum !== file.checksum) { @@ -171,10 +186,11 @@ export class RollbackManager { } private async ensureBackupDir(): Promise { - await plugins.smartfile.fs.ensureDir(this.backupDir); - await plugins.smartfile.fs.ensureDir( - plugins.path.join(this.backupDir, 'operations'), - ); + await plugins.smartfs.directory(this.backupDir).recursive().create(); + await plugins.smartfs + .directory(plugins.path.join(this.backupDir, 'operations')) + .recursive() + .create(); } private generateOperationId(): string { @@ -204,13 +220,16 @@ export class RollbackManager { private async getManifest(): Promise<{ operations: IFormatOperation[] }> { const defaultManifest = { operations: [] }; - const exists = await plugins.smartfile.fs.fileExists(this.manifestPath); + const exists = await plugins.smartfs.file(this.manifestPath).exists(); if (!exists) { return defaultManifest; } try { - const content = plugins.smartfile.fs.toStringSync(this.manifestPath); + const content = (await plugins.smartfs + .file(this.manifestPath) + .encoding('utf8') + .read()) as string; const manifest = JSON.parse(content); // Validate the manifest structure @@ -228,7 +247,7 @@ export class RollbackManager { ); // Try to delete the corrupted file try { - await plugins.smartfile.fs.remove(this.manifestPath); + await plugins.smartfs.file(this.manifestPath).delete(); } catch (removeError) { // Ignore removal errors } @@ -249,7 +268,10 @@ export class RollbackManager { // Write directly with proper JSON stringification const jsonContent = JSON.stringify(manifest, null, 2); - await plugins.smartfile.memory.toFs(jsonContent, this.manifestPath); + await plugins.smartfs + .file(this.manifestPath) + .encoding('utf8') + .write(jsonContent); } private async getOperation( diff --git a/ts/mod_format/format.cleanup.ts b/ts/mod_format/format.cleanup.ts index 0a5d69f..fa0b198 100644 --- a/ts/mod_format/format.cleanup.ts +++ b/ts/mod_format/format.cleanup.ts @@ -13,12 +13,12 @@ const filesToDelete = [ export const run = async (projectArg: Project) => { for (const relativeFilePath of filesToDelete) { - const fileExists = plugins.smartfile.fs.fileExistsSync(relativeFilePath); + const fileExists = await plugins.smartfs.file(relativeFilePath).exists(); if (fileExists) { logger.log('info', `Found ${relativeFilePath}! Removing it!`); - plugins.smartfile.fs.removeSync( - plugins.path.join(paths.cwd, relativeFilePath), - ); + await plugins.smartfs + .file(plugins.path.join(paths.cwd, relativeFilePath)) + .delete(); } else { logger.log('info', `Project is free of ${relativeFilePath}`); } diff --git a/ts/mod_format/format.copy.ts b/ts/mod_format/format.copy.ts index 76c902e..b3b1fcc 100644 --- a/ts/mod_format/format.copy.ts +++ b/ts/mod_format/format.copy.ts @@ -24,7 +24,12 @@ export const run = async (projectArg: Project) => { try { // Handle glob patterns - const files = await plugins.smartfile.fs.listFileTree('.', pattern.from); + const entries = await plugins.smartfs + .directory('.') + .recursive() + .filter(pattern.from) + .list(); + const files = entries.map((entry) => entry.path); for (const file of files) { const sourcePath = file; @@ -46,10 +51,13 @@ export const run = async (projectArg: Project) => { } // Ensure destination directory exists - await plugins.smartfile.fs.ensureDir(plugins.path.dirname(destPath)); + await plugins.smartfs + .directory(plugins.path.dirname(destPath)) + .recursive() + .create(); // Copy file - await plugins.smartfile.fs.copy(sourcePath, destPath); + await plugins.smartfs.file(sourcePath).copy(destPath); logger.log('info', `Copied ${sourcePath} to ${destPath}`); } } catch (error) { diff --git a/ts/mod_format/format.gitignore.ts b/ts/mod_format/format.gitignore.ts index 6e5b757..187d45b 100644 --- a/ts/mod_format/format.gitignore.ts +++ b/ts/mod_format/format.gitignore.ts @@ -7,13 +7,15 @@ import { logger } from '../gitzone.logging.js'; const gitignorePath = plugins.path.join(paths.cwd, './.gitignore'); export const run = async (projectArg: Project) => { - const gitignoreExists = await plugins.smartfile.fs.fileExists(gitignorePath); + const gitignoreExists = await plugins.smartfs.file(gitignorePath).exists(); let customContent = ''; if (gitignoreExists) { // lets get the existing gitignore file - const existingGitIgnoreString = - plugins.smartfile.fs.toStringSync(gitignorePath); + const existingGitIgnoreString = (await plugins.smartfs + .file(gitignorePath) + .encoding('utf8') + .read()) as string; // Check for different custom section markers const customMarkers = ['#------# custom', '# custom']; @@ -34,12 +36,17 @@ export const run = async (projectArg: Project) => { // Append the custom content if it exists if (customContent) { - const newGitignoreContent = - plugins.smartfile.fs.toStringSync(gitignorePath); + const newGitignoreContent = (await plugins.smartfs + .file(gitignorePath) + .encoding('utf8') + .read()) as string; // The template already ends with "#------# custom", so just append the content const finalContent = newGitignoreContent.trimEnd() + '\n' + customContent + '\n'; - await plugins.smartfile.fs.toFs(finalContent, gitignorePath); + await plugins.smartfs + .file(gitignorePath) + .encoding('utf8') + .write(finalContent); logger.log('info', 'Updated .gitignore while preserving custom section!'); } else { logger.log('info', 'Added a .gitignore!'); diff --git a/ts/mod_format/format.license.ts b/ts/mod_format/format.license.ts index 9ce92e4..fe9608b 100644 --- a/ts/mod_format/format.license.ts +++ b/ts/mod_format/format.license.ts @@ -7,9 +7,9 @@ import { logger } from '../gitzone.logging.js'; const incompatibleLicenses: string[] = ['AGPL', 'GPL', 'SSPL']; export const run = async (projectArg: Project) => { - const nodeModulesInstalled = await plugins.smartfile.fs.isDirectory( - plugins.path.join(paths.cwd, 'node_modules'), - ); + const nodeModulesInstalled = await plugins.smartfs + .directory(plugins.path.join(paths.cwd, 'node_modules')) + .exists(); if (!nodeModulesInstalled) { logger.log('warn', 'No node_modules found. Skipping license check'); return; diff --git a/ts/mod_format/format.packagejson.ts b/ts/mod_format/format.packagejson.ts index 06e3fa1..4eebc64 100644 --- a/ts/mod_format/format.packagejson.ts +++ b/ts/mod_format/format.packagejson.ts @@ -174,9 +174,11 @@ export const run = async (projectArg: Project) => { ); // set overrides - const overrides = plugins.smartfile.fs.toObjectSync( - plugins.path.join(paths.assetsDir, 'overrides.json'), - ); + const overridesContent = (await plugins.smartfs + .file(plugins.path.join(paths.assetsDir, 'overrides.json')) + .encoding('utf8') + .read()) as string; + const overrides = JSON.parse(overridesContent); packageJson.pnpm = packageJson.pnpm || {}; packageJson.pnpm.overrides = overrides; diff --git a/ts/mod_format/format.readme.ts b/ts/mod_format/format.readme.ts index 4ed5a00..3d5a126 100644 --- a/ts/mod_format/format.readme.ts +++ b/ts/mod_format/format.readme.ts @@ -6,25 +6,22 @@ export const run = async () => { const readmeHintsPath = plugins.path.join(paths.cwd, 'readme.hints.md'); // Check and initialize readme.md if it doesn't exist - const readmeExists = await plugins.smartfile.fs.fileExists(readmePath); + const readmeExists = await plugins.smartfs.file(readmePath).exists(); if (!readmeExists) { - await plugins.smartfile.fs.toFs( - '# Project Readme\n\nThis is the initial readme file.', - readmePath, - ); + await plugins.smartfs.file(readmePath) + .encoding('utf8') + .write('# Project Readme\n\nThis is the initial readme file.'); console.log('Initialized readme.md'); } else { console.log('readme.md already exists'); } // Check and initialize readme.hints.md if it doesn't exist - const readmeHintsExists = - await plugins.smartfile.fs.fileExists(readmeHintsPath); + const readmeHintsExists = await plugins.smartfs.file(readmeHintsPath).exists(); if (!readmeHintsExists) { - await plugins.smartfile.fs.toFs( - '# Project Readme Hints\n\nThis is the initial readme hints file.', - readmeHintsPath, - ); + await plugins.smartfs.file(readmeHintsPath) + .encoding('utf8') + .write('# Project Readme Hints\n\nThis is the initial readme hints file.'); console.log('Initialized readme.hints.md'); } else { console.log('readme.hints.md already exists'); diff --git a/ts/mod_format/format.tsconfig.ts b/ts/mod_format/format.tsconfig.ts index e834da9..a956285 100644 --- a/ts/mod_format/format.tsconfig.ts +++ b/ts/mod_format/format.tsconfig.ts @@ -7,10 +7,11 @@ import { Project } from '../classes.project.js'; export const run = async (projectArg: Project) => { // lets care about tsconfig.json logger.log('info', 'Formatting tsconfig.json...'); - const tsconfigSmartfile = await plugins.smartfile.SmartFile.fromFilePath( + const factory = plugins.smartfile.SmartFileFactory.nodeFs(); + const tsconfigSmartfile = await factory.fromFilePath( plugins.path.join(paths.cwd, 'tsconfig.json'), ); - const tsconfigObject = JSON.parse(tsconfigSmartfile.contentBuffer.toString()); + const tsconfigObject = JSON.parse(tsconfigSmartfile.parseContentAsString()); tsconfigObject.compilerOptions = tsconfigObject.compilerOptions || {}; tsconfigObject.compilerOptions.baseUrl = '.'; tsconfigObject.compilerOptions.paths = {}; @@ -23,8 +24,8 @@ export const run = async (projectArg: Project) => { `./${publishModule}/index.js`, ]; } - tsconfigSmartfile.setContentsFromString( - JSON.stringify(tsconfigObject, null, 2), - ); + await tsconfigSmartfile.editContentAsString(async () => { + return JSON.stringify(tsconfigObject, null, 2); + }); await tsconfigSmartfile.write(); }; diff --git a/ts/mod_format/formatters/cleanup.formatter.ts b/ts/mod_format/formatters/cleanup.formatter.ts index 0ac0a7d..8f00b14 100644 --- a/ts/mod_format/formatters/cleanup.formatter.ts +++ b/ts/mod_format/formatters/cleanup.formatter.ts @@ -20,7 +20,7 @@ export class CleanupFormatter extends BaseFormatter { ]; for (const file of filesToRemove) { - const exists = await plugins.smartfile.fs.fileExists(file); + const exists = await plugins.smartfs.file(file).exists(); if (exists) { changes.push({ type: 'delete', diff --git a/ts/mod_format/formatters/prettier.formatter.ts b/ts/mod_format/formatters/prettier.formatter.ts index 1aebacd..9b2ac42 100644 --- a/ts/mod_format/formatters/prettier.formatter.ts +++ b/ts/mod_format/formatters/prettier.formatter.ts @@ -41,16 +41,23 @@ export class PrettierFormatter extends BaseFormatter { // Add files from TypeScript directories for (const dir of includeDirs) { const globPattern = `${dir}/**/*.${extensions}`; - const dirFiles = await plugins.smartfile.fs.listFileTree( - '.', - globPattern, - ); + const dirEntries = await plugins.smartfs + .directory('.') + .recursive() + .filter(globPattern) + .list(); + const dirFiles = dirEntries.map((entry) => entry.path); allFiles.push(...dirFiles); } // Add root config files for (const pattern of rootConfigFiles) { - const rootFiles = await plugins.smartfile.fs.listFileTree('.', pattern); + const rootEntries = await plugins.smartfs + .directory('.') + .recursive() + .filter(pattern) + .list(); + const rootFiles = rootEntries.map((entry) => entry.path); // Only include files at root level (no slashes in path) const rootLevelFiles = rootFiles.filter((f) => !f.includes('/')); allFiles.push(...rootLevelFiles); @@ -66,8 +73,8 @@ export class PrettierFormatter extends BaseFormatter { const validFiles: string[] = []; for (const file of files) { try { - const stats = await plugins.smartfile.fs.stat(file); - if (!stats.isDirectory()) { + const stats = await plugins.smartfs.file(file).stat(); + if (!stats.isDirectory) { validFiles.push(file); } } catch (error) { @@ -148,7 +155,10 @@ export class PrettierFormatter extends BaseFormatter { } // Read current content - const content = plugins.smartfile.fs.toStringSync(change.path); + const content = (await plugins.smartfs + .file(change.path) + .encoding('utf8') + .read()) as string; // Format with prettier const prettier = await import('prettier'); diff --git a/ts/mod_format/index.ts b/ts/mod_format/index.ts index 2bf2cec..5d41230 100644 --- a/ts/mod_format/index.ts +++ b/ts/mod_format/index.ts @@ -101,7 +101,12 @@ export let run = async ( // Plan phase logger.log('info', 'Analyzing project for format operations...'); let plan = options.fromPlan - ? JSON.parse(await plugins.smartfile.fs.toStringSync(options.fromPlan)) + ? JSON.parse( + (await plugins.smartfs + .file(options.fromPlan) + .encoding('utf8') + .read()) as string, + ) : await planner.planFormat(activeFormatters); // Display plan @@ -109,10 +114,10 @@ export let run = async ( // Save plan if requested if (options.savePlan) { - await plugins.smartfile.memory.toFs( - JSON.stringify(plan, null, 2), - options.savePlan, - ); + await plugins.smartfs + .file(options.savePlan) + .encoding('utf8') + .write(JSON.stringify(plan, null, 2)); logger.log('info', `Plan saved to ${options.savePlan}`); } diff --git a/ts/mod_meta/meta.classes.meta.ts b/ts/mod_meta/meta.classes.meta.ts index f5e70c8..2519eab 100644 --- a/ts/mod_meta/meta.classes.meta.ts +++ b/ts/mod_meta/meta.classes.meta.ts @@ -48,15 +48,17 @@ export class Meta { public async readDirectory() { await this.syncToRemote(true); logger.log('info', `reading directory`); - const metaFileExists = plugins.smartfile.fs.fileExistsSync( - this.filePaths.metaJson, - ); + const metaFileExists = await plugins.smartfs + .file(this.filePaths.metaJson) + .exists(); if (!metaFileExists) { throw new Error(`meta file does not exist at ${this.filePaths.metaJson}`); } - this.metaRepoData = plugins.smartfile.fs.toObjectSync( - this.filePaths.metaJson, - ); + const content = (await plugins.smartfs + .file(this.filePaths.metaJson) + .encoding('utf8') + .read()) as string; + this.metaRepoData = JSON.parse(content); } /** @@ -78,15 +80,15 @@ export class Meta { */ public async writeToDisk() { // write .meta.json to disk - plugins.smartfile.memory.toFsSync( - JSON.stringify(this.metaRepoData, null, 2), - this.filePaths.metaJson, - ); + await plugins.smartfs + .file(this.filePaths.metaJson) + .encoding('utf8') + .write(JSON.stringify(this.metaRepoData, null, 2)); // write .gitignore to disk - plugins.smartfile.memory.toFsSync( - await this.generateGitignore(), - this.filePaths.gitIgnore, - ); + await plugins.smartfs + .file(this.filePaths.gitIgnore) + .encoding('utf8') + .write(await this.generateGitignore()); } /** @@ -112,10 +114,25 @@ export class Meta { */ public async updateLocalRepos() { await this.syncToRemote(); - const projects = plugins.smartfile.fs.toObjectSync( - this.filePaths.metaJson, - ).projects; - const preExistingFolders = plugins.smartfile.fs.listFoldersSync(this.cwd); + const metaContent = (await plugins.smartfs + .file(this.filePaths.metaJson) + .encoding('utf8') + .read()) as string; + const projects = JSON.parse(metaContent).projects; + const entries = await plugins.smartfs.directory(this.cwd).list(); + const preExistingFolders: string[] = []; + for (const entry of entries) { + try { + const stats = await plugins.smartfs + .file(plugins.path.join(this.cwd, entry.path)) + .stat(); + if (stats.isDirectory) { + preExistingFolders.push(entry.name); + } + } catch { + // Skip entries that can't be accessed + } + } for (const preExistingFolderArg of preExistingFolders) { if ( preExistingFolderArg !== '.git' && @@ -143,9 +160,17 @@ export class Meta { await this.sortMetaRepoData(); const missingRepos: string[] = []; for (const key of Object.keys(this.metaRepoData.projects)) { - plugins.smartfile.fs.isDirectory(key) - ? logger.log('ok', `${key} -> is already cloned`) - : missingRepos.push(key); + const fullPath = plugins.path.join(this.cwd, key); + try { + const stats = await plugins.smartfs.file(fullPath).stat(); + if (stats.isDirectory) { + logger.log('ok', `${key} -> is already cloned`); + } else { + missingRepos.push(key); + } + } catch { + missingRepos.push(key); + } } logger.log('info', `found ${missingRepos.length} missing repos`); @@ -165,7 +190,20 @@ export class Meta { await this.syncToRemote(); // go recursive - const folders = await plugins.smartfile.fs.listFolders(this.cwd); + const listEntries = await plugins.smartfs.directory(this.cwd).list(); + const folders: string[] = []; + for (const entry of listEntries) { + try { + const stats = await plugins.smartfs + .file(plugins.path.join(this.cwd, entry.path)) + .stat(); + if (stats.isDirectory) { + folders.push(entry.name); + } + } catch { + // Skip entries that can't be accessed + } + } const childMetaRepositories: string[] = []; for (const folder of folders) { logger.log('info', folder); @@ -180,27 +218,31 @@ export class Meta { */ public async initProject() { await this.syncToRemote(true); - const fileExists = await plugins.smartfile.fs.fileExists( - this.filePaths.metaJson, - ); + const fileExists = await plugins.smartfs + .file(this.filePaths.metaJson) + .exists(); if (!fileExists) { - await plugins.smartfile.memory.toFs( - JSON.stringify({ - projects: {}, - }), - this.filePaths.metaJson, - ); + await plugins.smartfs + .file(this.filePaths.metaJson) + .encoding('utf8') + .write( + JSON.stringify({ + projects: {}, + }), + ); logger.log( `success`, `created a new .meta.json in directory ${this.cwd}`, ); - await plugins.smartfile.memory.toFs( - JSON.stringify({ - name: this.dirName, - version: '1.0.0', - }), - this.filePaths.packageJson, - ); + await plugins.smartfs + .file(this.filePaths.packageJson) + .encoding('utf8') + .write( + JSON.stringify({ + name: this.dirName, + version: '1.0.0', + }), + ); logger.log( `success`, `created a new package.json in directory ${this.cwd}`, @@ -264,9 +306,10 @@ export class Meta { await this.writeToDisk(); logger.log('info', 'removing directory from cwd'); - await plugins.smartfile.fs.remove( - plugins.path.join(paths.cwd, projectNameArg), - ); + await plugins.smartfs + .directory(plugins.path.join(paths.cwd, projectNameArg)) + .recursive() + .delete(); await this.updateLocalRepos(); } } diff --git a/ts/mod_services/classes.serviceconfiguration.ts b/ts/mod_services/classes.serviceconfiguration.ts index 2c18e5c..bd8dd02 100644 --- a/ts/mod_services/classes.serviceconfiguration.ts +++ b/ts/mod_services/classes.serviceconfiguration.ts @@ -19,6 +19,11 @@ export interface IServiceConfig { S3_BUCKET: string; S3_ENDPOINT: string; S3_USESSL: boolean; + ELASTICSEARCH_HOST: string; + ELASTICSEARCH_PORT: string; + ELASTICSEARCH_USER: string; + ELASTICSEARCH_PASS: string; + ELASTICSEARCH_URL: string; } export class ServiceConfiguration { @@ -61,10 +66,10 @@ export class ServiceConfiguration { * Save the configuration to file */ public async saveConfig(): Promise { - await plugins.smartfile.memory.toFs( - JSON.stringify(this.config, null, 2), - this.configPath - ); + await plugins.smartfs + .file(this.configPath) + .encoding('utf8') + .write(JSON.stringify(this.config, null, 2)); } /** @@ -72,21 +77,24 @@ export class ServiceConfiguration { */ private async ensureNogitDirectory(): Promise { const nogitPath = plugins.path.join(process.cwd(), '.nogit'); - await plugins.smartfile.fs.ensureDir(nogitPath); + await plugins.smartfs.directory(nogitPath).recursive().create(); } /** * Check if configuration file exists */ private async configExists(): Promise { - return plugins.smartfile.fs.fileExists(this.configPath); + return plugins.smartfs.file(this.configPath).exists(); } /** * Load configuration from file */ private async loadConfig(): Promise { - const configContent = plugins.smartfile.fs.toStringSync(this.configPath); + const configContent = (await plugins.smartfs + .file(this.configPath) + .encoding('utf8') + .read()) as string; this.config = JSON.parse(configContent); } @@ -94,16 +102,16 @@ export class ServiceConfiguration { * Create default configuration */ private async createDefaultConfig(): Promise { - const projectName = helpers.getProjectName(); + const projectName = await helpers.getProjectName(); const mongoPort = await helpers.getRandomAvailablePort(); const s3Port = await helpers.getRandomAvailablePort(); let s3ConsolePort = s3Port + 1; - + // Ensure console port is also available while (!(await helpers.isPortAvailable(s3ConsolePort))) { s3ConsolePort++; } - + const mongoUser = 'defaultadmin'; const mongoPass = 'defaultpass'; const mongoHost = 'localhost'; @@ -111,7 +119,11 @@ export class ServiceConfiguration { const mongoPortStr = mongoPort.toString(); const s3Host = 'localhost'; const s3PortStr = s3Port.toString(); - + const esHost = 'localhost'; + const esPort = '9200'; + const esUser = 'elastic'; + const esPass = 'elastic'; + this.config = { PROJECT_NAME: projectName, MONGODB_HOST: mongoHost, @@ -127,22 +139,28 @@ export class ServiceConfiguration { S3_SECRETKEY: 'defaultpass', S3_BUCKET: `${projectName}-documents`, S3_ENDPOINT: s3Host, - S3_USESSL: false + S3_USESSL: false, + ELASTICSEARCH_HOST: esHost, + ELASTICSEARCH_PORT: esPort, + ELASTICSEARCH_USER: esUser, + ELASTICSEARCH_PASS: esPass, + ELASTICSEARCH_URL: `http://${esUser}:${esPass}@${esHost}:${esPort}` }; - + await this.saveConfig(); - + logger.log('ok', '✅ Created .nogit/env.json with project defaults'); logger.log('info', `📍 MongoDB port: ${mongoPort}`); logger.log('info', `📍 S3 API port: ${s3Port}`); logger.log('info', `📍 S3 Console port: ${s3ConsolePort}`); + logger.log('info', `📍 Elasticsearch port: ${esPort}`); } /** * Update missing fields in existing configuration */ private async updateMissingFields(): Promise { - const projectName = helpers.getProjectName(); + const projectName = await helpers.getProjectName(); let updated = false; const fieldsAdded: string[] = []; @@ -249,7 +267,39 @@ export class ServiceConfiguration { fieldsAdded.push('S3_ENDPOINT'); updated = true; } - + + if (!this.config.ELASTICSEARCH_HOST) { + this.config.ELASTICSEARCH_HOST = 'localhost'; + fieldsAdded.push('ELASTICSEARCH_HOST'); + updated = true; + } + + if (!this.config.ELASTICSEARCH_PORT) { + this.config.ELASTICSEARCH_PORT = '9200'; + fieldsAdded.push('ELASTICSEARCH_PORT'); + updated = true; + } + + if (!this.config.ELASTICSEARCH_USER) { + this.config.ELASTICSEARCH_USER = 'elastic'; + fieldsAdded.push('ELASTICSEARCH_USER'); + updated = true; + } + + if (!this.config.ELASTICSEARCH_PASS) { + this.config.ELASTICSEARCH_PASS = 'elastic'; + fieldsAdded.push('ELASTICSEARCH_PASS'); + updated = true; + } + + // Always update ELASTICSEARCH_URL based on current settings + const oldEsUrl = this.config.ELASTICSEARCH_URL; + this.config.ELASTICSEARCH_URL = `http://${this.config.ELASTICSEARCH_USER}:${this.config.ELASTICSEARCH_PASS}@${this.config.ELASTICSEARCH_HOST}:${this.config.ELASTICSEARCH_PORT}`; + if (oldEsUrl !== this.config.ELASTICSEARCH_URL) { + fieldsAdded.push('ELASTICSEARCH_URL'); + updated = true; + } + if (updated) { await this.saveConfig(); logger.log('ok', `✅ Added missing fields: ${fieldsAdded.join(', ')}`); @@ -272,17 +322,19 @@ export class ServiceConfiguration { public getContainerNames() { return { mongo: `${this.config.PROJECT_NAME}-mongodb`, - minio: `${this.config.PROJECT_NAME}-minio` + minio: `${this.config.PROJECT_NAME}-minio`, + elasticsearch: `${this.config.PROJECT_NAME}-elasticsearch` }; } - + /** * Get data directories */ public getDataDirectories() { return { mongo: plugins.path.join(process.cwd(), '.nogit', 'mongodata'), - minio: plugins.path.join(process.cwd(), '.nogit', 'miniodata') + minio: plugins.path.join(process.cwd(), '.nogit', 'miniodata'), + elasticsearch: plugins.path.join(process.cwd(), '.nogit', 'esdata') }; } @@ -330,12 +382,27 @@ export class ServiceConfiguration { } } } - + + // Check Elasticsearch container + const esStatus = await this.docker.getStatus(containers.elasticsearch); + if (esStatus !== 'not_exists') { + const portMappings = await this.docker.getPortMappings(containers.elasticsearch); + if (portMappings && portMappings['9200']) { + const dockerPort = portMappings['9200']; + if (this.config.ELASTICSEARCH_PORT !== dockerPort) { + logger.log('note', `📍 Syncing Elasticsearch port from Docker: ${dockerPort}`); + this.config.ELASTICSEARCH_PORT = dockerPort; + updated = true; + } + } + } + if (updated) { // Update derived fields this.config.MONGODB_URL = `mongodb://${this.config.MONGODB_USER}:${this.config.MONGODB_PASS}@${this.config.MONGODB_HOST}:${this.config.MONGODB_PORT}/${this.config.MONGODB_NAME}?authSource=admin`; this.config.S3_ENDPOINT = this.config.S3_HOST; - + this.config.ELASTICSEARCH_URL = `http://${this.config.ELASTICSEARCH_USER}:${this.config.ELASTICSEARCH_PASS}@${this.config.ELASTICSEARCH_HOST}:${this.config.ELASTICSEARCH_PORT}`; + await this.saveConfig(); logger.log('ok', '✅ Configuration synced with Docker containers'); } @@ -347,11 +414,12 @@ export class ServiceConfiguration { public async validateAndUpdatePorts(): Promise { let updated = false; const containers = this.getContainerNames(); - + // Check if containers exist - if they do, ports are fine const mongoExists = await this.docker.exists(containers.mongo); const minioExists = await this.docker.exists(containers.minio); - + const esExists = await this.docker.exists(containers.elasticsearch); + // Only check port availability if containers don't exist if (!mongoExists) { const mongoPort = parseInt(this.config.MONGODB_PORT); @@ -363,11 +431,11 @@ export class ServiceConfiguration { updated = true; } } - + if (!minioExists) { const s3Port = parseInt(this.config.S3_PORT); const s3ConsolePort = parseInt(this.config.S3_CONSOLE_PORT); - + if (!(await helpers.isPortAvailable(s3Port))) { logger.log('note', `⚠️ S3 API port ${s3Port} is in use, finding new port...`); const newPort = await helpers.getRandomAvailablePort(); @@ -375,7 +443,7 @@ export class ServiceConfiguration { logger.log('ok', `✅ New S3 API port: ${newPort}`); updated = true; } - + if (!(await helpers.isPortAvailable(s3ConsolePort))) { logger.log('note', `⚠️ S3 Console port ${s3ConsolePort} is in use, finding new port...`); let newPort = parseInt(this.config.S3_PORT) + 1; @@ -387,15 +455,27 @@ export class ServiceConfiguration { updated = true; } } - + + if (!esExists) { + const esPort = parseInt(this.config.ELASTICSEARCH_PORT); + if (!(await helpers.isPortAvailable(esPort))) { + logger.log('note', `⚠️ Elasticsearch port ${esPort} is in use, finding new port...`); + const newPort = await helpers.getRandomAvailablePort(); + this.config.ELASTICSEARCH_PORT = newPort.toString(); + logger.log('ok', `✅ New Elasticsearch port: ${newPort}`); + updated = true; + } + } + if (updated) { // Update derived fields this.config.MONGODB_URL = `mongodb://${this.config.MONGODB_USER}:${this.config.MONGODB_PASS}@${this.config.MONGODB_HOST}:${this.config.MONGODB_PORT}/${this.config.MONGODB_NAME}?authSource=admin`; this.config.S3_ENDPOINT = this.config.S3_HOST; - + this.config.ELASTICSEARCH_URL = `http://${this.config.ELASTICSEARCH_USER}:${this.config.ELASTICSEARCH_PASS}@${this.config.ELASTICSEARCH_HOST}:${this.config.ELASTICSEARCH_PORT}`; + await this.saveConfig(); } - + return updated; } @@ -404,29 +484,35 @@ export class ServiceConfiguration { */ public async reconfigurePorts(): Promise { logger.log('note', '🔄 Finding new available ports...'); - + const mongoPort = await helpers.getRandomAvailablePort(); const s3Port = await helpers.getRandomAvailablePort(); let s3ConsolePort = s3Port + 1; - + // Ensure console port is also available while (!(await helpers.isPortAvailable(s3ConsolePort))) { s3ConsolePort++; } - + + // Elasticsearch uses standard port 9200 + const esPort = '9200'; + this.config.MONGODB_PORT = mongoPort.toString(); this.config.S3_PORT = s3Port.toString(); this.config.S3_CONSOLE_PORT = s3ConsolePort.toString(); - + this.config.ELASTICSEARCH_PORT = esPort; + // Update derived fields this.config.MONGODB_URL = `mongodb://${this.config.MONGODB_USER}:${this.config.MONGODB_PASS}@${this.config.MONGODB_HOST}:${this.config.MONGODB_PORT}/${this.config.MONGODB_NAME}?authSource=admin`; this.config.S3_ENDPOINT = this.config.S3_HOST; - + this.config.ELASTICSEARCH_URL = `http://${this.config.ELASTICSEARCH_USER}:${this.config.ELASTICSEARCH_PASS}@${this.config.ELASTICSEARCH_HOST}:${this.config.ELASTICSEARCH_PORT}`; + await this.saveConfig(); - + logger.log('ok', '✅ New port configuration:'); logger.log('info', ` 📍 MongoDB: ${mongoPort}`); logger.log('info', ` 📍 S3 API: ${s3Port}`); logger.log('info', ` 📍 S3 Console: ${s3ConsolePort}`); + logger.log('info', ` 📍 Elasticsearch: ${esPort}`); } } \ No newline at end of file diff --git a/ts/mod_services/classes.servicemanager.ts b/ts/mod_services/classes.servicemanager.ts index 2f22afa..a4b889a 100644 --- a/ts/mod_services/classes.servicemanager.ts +++ b/ts/mod_services/classes.servicemanager.ts @@ -7,12 +7,13 @@ import { logger } from '../gitzone.logging.js'; export class ServiceManager { private config: ServiceConfiguration; private docker: DockerContainer; - + private enabledServices: string[] | null = null; + constructor() { this.config = new ServiceConfiguration(); this.docker = new DockerContainer(); } - + /** * Initialize the service manager */ @@ -22,15 +23,134 @@ export class ServiceManager { logger.log('error', 'Error: Docker is not installed. Please install Docker first.'); process.exit(1); } - + // Load or create configuration await this.config.loadOrCreate(); logger.log('info', `📋 Project: ${this.config.getConfig().PROJECT_NAME}`); - + + // Load service selection from npmextra.json + await this.loadServiceConfiguration(); + // Validate and update ports if needed await this.config.validateAndUpdatePorts(); } - + + /** + * Load service configuration from npmextra.json + */ + private async loadServiceConfiguration(): Promise { + const npmextraConfig = new plugins.npmextra.Npmextra(process.cwd()); + const gitzoneConfig = npmextraConfig.dataFor('gitzone', {}); + + // Check if services array exists + if (!gitzoneConfig.services || !Array.isArray(gitzoneConfig.services) || gitzoneConfig.services.length === 0) { + // Prompt user to select services + const smartinteract = new plugins.smartinteract.SmartInteract(); + const response = await smartinteract.askQuestion({ + name: 'services', + type: 'checkbox', + message: 'Which services do you want to enable for this project?', + choices: [ + { name: 'MongoDB', value: 'mongodb' }, + { name: 'MinIO (S3)', value: 'minio' }, + { name: 'Elasticsearch', value: 'elasticsearch' } + ], + default: ['mongodb', 'minio', 'elasticsearch'] + }); + + this.enabledServices = response.value || ['mongodb', 'minio', 'elasticsearch']; + + // Save to npmextra.json + await this.saveServiceConfiguration(this.enabledServices); + } else { + this.enabledServices = gitzoneConfig.services; + logger.log('info', `🔧 Enabled services: ${this.enabledServices.join(', ')}`); + } + } + + /** + * Save service configuration to npmextra.json + */ + private async saveServiceConfiguration(services: string[]): Promise { + const npmextraPath = plugins.path.join(process.cwd(), 'npmextra.json'); + let npmextraData: any = {}; + + // Read existing npmextra.json if it exists + if (await plugins.smartfs.file(npmextraPath).exists()) { + const content = await plugins.smartfs.file(npmextraPath).encoding('utf8').read(); + npmextraData = JSON.parse(content as string); + } + + // Update gitzone.services + if (!npmextraData.gitzone) { + npmextraData.gitzone = {}; + } + npmextraData.gitzone.services = services; + + // Write back to npmextra.json + await plugins.smartfs + .file(npmextraPath) + .encoding('utf8') + .write(JSON.stringify(npmextraData, null, 2)); + + logger.log('ok', `✅ Saved service configuration to npmextra.json`); + logger.log('info', `🔧 Enabled services: ${services.join(', ')}`); + } + + /** + * Check if a service is enabled + */ + private isServiceEnabled(service: string): boolean { + if (!this.enabledServices) { + return true; // If no configuration, enable all + } + return this.enabledServices.includes(service); + } + + /** + * Start all enabled services + */ + public async startAll(): Promise { + let first = true; + if (this.isServiceEnabled('mongodb')) { + if (!first) console.log(); + await this.startMongoDB(); + first = false; + } + if (this.isServiceEnabled('minio')) { + if (!first) console.log(); + await this.startMinIO(); + first = false; + } + if (this.isServiceEnabled('elasticsearch')) { + if (!first) console.log(); + await this.startElasticsearch(); + first = false; + } + } + + /** + * Stop all enabled services + */ + public async stopAll(): Promise { + let first = true; + if (this.isServiceEnabled('mongodb')) { + if (!first) console.log(); + await this.stopMongoDB(); + first = false; + } + if (this.isServiceEnabled('minio')) { + if (!first) console.log(); + await this.stopMinIO(); + first = false; + } + if (this.isServiceEnabled('elasticsearch')) { + if (!first) console.log(); + await this.stopElasticsearch(); + first = false; + } + } + /** * Start MongoDB service */ @@ -42,7 +162,7 @@ export class ServiceManager { const directories = this.config.getDataDirectories(); // Ensure data directory exists - await plugins.smartfile.fs.ensureDir(directories.mongo); + await plugins.smartfs.directory(directories.mongo).recursive().create(); const status = await this.docker.getStatus(containers.mongo); @@ -141,7 +261,7 @@ export class ServiceManager { const directories = this.config.getDataDirectories(); // Ensure data directory exists - await plugins.smartfile.fs.ensureDir(directories.minio); + await plugins.smartfs.directory(directories.minio).recursive().create(); const status = await this.docker.getStatus(containers.minio); @@ -259,7 +379,103 @@ export class ServiceManager { logger.log('info', ` API: http://${config.S3_HOST}:${config.S3_PORT}`); logger.log('info', ` Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT} (login: ${config.S3_ACCESSKEY}/***)`); } - + + /** + * Start Elasticsearch service + */ + public async startElasticsearch(): Promise { + logger.log('note', '📦 Elasticsearch:'); + + const config = this.config.getConfig(); + const containers = this.config.getContainerNames(); + const directories = this.config.getDataDirectories(); + + // Ensure data directory exists + await plugins.smartfs.directory(directories.elasticsearch).recursive().create(); + + const status = await this.docker.getStatus(containers.elasticsearch); + + switch (status) { + case 'running': + logger.log('ok', ' Already running ✓'); + break; + + case 'stopped': + // Check if port mapping matches config + const esPortMappings = await this.docker.getPortMappings(containers.elasticsearch); + if (esPortMappings && esPortMappings['9200'] !== config.ELASTICSEARCH_PORT) { + logger.log('note', ' Port configuration changed, recreating container...'); + await this.docker.remove(containers.elasticsearch, true); + // Fall through to create new container + const success = await this.docker.run({ + name: containers.elasticsearch, + image: 'elasticsearch:8.11.0', + ports: { + [`0.0.0.0:${config.ELASTICSEARCH_PORT}`]: '9200' + }, + volumes: { + [directories.elasticsearch]: '/usr/share/elasticsearch/data' + }, + environment: { + 'discovery.type': 'single-node', + 'xpack.security.enabled': 'true', + 'ELASTIC_PASSWORD': config.ELASTICSEARCH_PASS, + 'ES_JAVA_OPTS': '-Xms512m -Xmx512m' + }, + restart: 'unless-stopped' + }); + + if (success) { + logger.log('ok', ' Recreated with new port ✓'); + } else { + logger.log('error', ' Failed to recreate container'); + } + } else { + // Ports match, just start the container + if (await this.docker.start(containers.elasticsearch)) { + logger.log('ok', ' Started ✓'); + } else { + logger.log('error', ' Failed to start'); + } + } + break; + + case 'not_exists': + logger.log('note', ' Creating container...'); + + const success = await this.docker.run({ + name: containers.elasticsearch, + image: 'elasticsearch:8.11.0', + ports: { + [`0.0.0.0:${config.ELASTICSEARCH_PORT}`]: '9200' + }, + volumes: { + [directories.elasticsearch]: '/usr/share/elasticsearch/data' + }, + environment: { + 'discovery.type': 'single-node', + 'xpack.security.enabled': 'true', + 'ELASTIC_PASSWORD': config.ELASTICSEARCH_PASS, + 'ES_JAVA_OPTS': '-Xms512m -Xmx512m' + }, + restart: 'unless-stopped' + }); + + if (success) { + logger.log('ok', ' Created and started ✓'); + } else { + logger.log('error', ' Failed to create container'); + } + break; + } + + logger.log('info', ` Container: ${containers.elasticsearch}`); + logger.log('info', ` Port: ${config.ELASTICSEARCH_PORT}`); + logger.log('info', ` Connection: ${config.ELASTICSEARCH_URL}`); + logger.log('info', ` Username: ${config.ELASTICSEARCH_USER}`); + logger.log('info', ` Password: ${config.ELASTICSEARCH_PASS}`); + } + /** * Stop MongoDB service */ @@ -285,10 +501,10 @@ export class ServiceManager { */ public async stopMinIO(): Promise { logger.log('note', '📦 S3/MinIO:'); - + const containers = this.config.getContainerNames(); const status = await this.docker.getStatus(containers.minio); - + if (status === 'running') { if (await this.docker.stop(containers.minio)) { logger.log('ok', ' Stopped ✓'); @@ -299,7 +515,27 @@ export class ServiceManager { logger.log('note', ' Not running'); } } - + + /** + * Stop Elasticsearch service + */ + public async stopElasticsearch(): Promise { + logger.log('note', '📦 Elasticsearch:'); + + const containers = this.config.getContainerNames(); + const status = await this.docker.getStatus(containers.elasticsearch); + + if (status === 'running') { + if (await this.docker.stop(containers.elasticsearch)) { + logger.log('ok', ' Stopped ✓'); + } else { + logger.log('error', ' Failed to stop'); + } + } else { + logger.log('note', ' Not running'); + } + } + /** * Show service status */ @@ -385,8 +621,36 @@ export class ServiceManager { } break; } + + // Elasticsearch status + const esStatus = await this.docker.getStatus(containers.elasticsearch); + switch (esStatus) { + case 'running': + logger.log('ok', '📦 Elasticsearch: 🟢 Running'); + logger.log('info', ` ├─ Container: ${containers.elasticsearch}`); + logger.log('info', ` ├─ Port: ${config.ELASTICSEARCH_PORT}`); + logger.log('info', ` ├─ Connection: ${config.ELASTICSEARCH_URL}`); + logger.log('info', ` └─ Credentials: ${config.ELASTICSEARCH_USER}/${config.ELASTICSEARCH_PASS}`); + break; + case 'stopped': + logger.log('note', '📦 Elasticsearch: 🟡 Stopped'); + logger.log('info', ` ├─ Container: ${containers.elasticsearch}`); + logger.log('info', ` └─ Port: ${config.ELASTICSEARCH_PORT}`); + break; + case 'not_exists': + logger.log('info', '📦 Elasticsearch: ⚪ Not installed'); + // Check port availability + const esPort = parseInt(config.ELASTICSEARCH_PORT); + const esAvailable = await helpers.isPortAvailable(esPort); + if (!esAvailable) { + logger.log('error', ` └─ ⚠️ Port ${esPort} is in use by another process`); + } else { + logger.log('info', ` └─ Port ${esPort} is available`); + } + break; + } } - + /** * Show configuration */ @@ -420,6 +684,15 @@ export class ServiceManager { logger.log('info', ` Data: ${this.config.getDataDirectories().minio}`); logger.log('info', ` Endpoint: ${config.S3_ENDPOINT}`); logger.log('info', ` Console URL: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`); + + console.log(); + logger.log('note', 'Elasticsearch:'); + logger.log('info', ` Host: ${config.ELASTICSEARCH_HOST}:${config.ELASTICSEARCH_PORT}`); + logger.log('info', ` User: ${config.ELASTICSEARCH_USER}`); + logger.log('info', ' Password: ***'); + logger.log('info', ` Container: ${this.config.getContainerNames().elasticsearch}`); + logger.log('info', ` Data: ${this.config.getDataDirectories().elasticsearch}`); + logger.log('info', ` Connection: ${config.ELASTICSEARCH_URL}`); } /** @@ -477,16 +750,29 @@ export class ServiceManager { logger.log('note', 'S3/MinIO container is not running'); } break; - + + case 'elasticsearch': + case 'es': + if (await this.docker.isRunning(containers.elasticsearch)) { + helpers.printHeader(`Elasticsearch Logs (last ${lines} lines)`); + const logs = await this.docker.logs(containers.elasticsearch, lines); + console.log(logs); + } else { + logger.log('note', 'Elasticsearch container is not running'); + } + break; + case 'all': case '': await this.showLogs('mongo', lines); console.log(); await this.showLogs('minio', lines); + console.log(); + await this.showLogs('elasticsearch', lines); break; - + default: - logger.log('note', 'Usage: gitzone services logs [mongo|s3|all] [lines]'); + logger.log('note', 'Usage: gitzone services logs [mongo|s3|elasticsearch|all] [lines]'); break; } } @@ -497,21 +783,28 @@ export class ServiceManager { public async removeContainers(): Promise { const containers = this.config.getContainerNames(); let removed = false; - + if (await this.docker.exists(containers.mongo)) { if (await this.docker.remove(containers.mongo, true)) { logger.log('ok', ' MongoDB container removed ✓'); removed = true; } } - + if (await this.docker.exists(containers.minio)) { if (await this.docker.remove(containers.minio, true)) { logger.log('ok', ' S3/MinIO container removed ✓'); removed = true; } } - + + if (await this.docker.exists(containers.elasticsearch)) { + if (await this.docker.remove(containers.elasticsearch, true)) { + logger.log('ok', ' Elasticsearch container removed ✓'); + removed = true; + } + } + if (!removed) { logger.log('note', ' No containers to remove'); } @@ -523,24 +816,60 @@ export class ServiceManager { public async cleanData(): Promise { const directories = this.config.getDataDirectories(); let cleaned = false; - - if (await plugins.smartfile.fs.fileExists(directories.mongo)) { - await plugins.smartfile.fs.remove(directories.mongo); + + if (await plugins.smartfs.directory(directories.mongo).exists()) { + await plugins.smartfs.directory(directories.mongo).recursive().delete(); logger.log('ok', ' MongoDB data removed ✓'); cleaned = true; } - - if (await plugins.smartfile.fs.fileExists(directories.minio)) { - await plugins.smartfile.fs.remove(directories.minio); + + if (await plugins.smartfs.directory(directories.minio).exists()) { + await plugins.smartfs.directory(directories.minio).recursive().delete(); logger.log('ok', ' S3/MinIO data removed ✓'); cleaned = true; } - + + if (await plugins.smartfs.directory(directories.elasticsearch).exists()) { + await plugins.smartfs.directory(directories.elasticsearch).recursive().delete(); + logger.log('ok', ' Elasticsearch data removed ✓'); + cleaned = true; + } + if (!cleaned) { logger.log('note', ' No data to clean'); } } + /** + * Configure which services are enabled + */ + public async configureServices(): Promise { + logger.log('note', 'Select which services to enable for this project:'); + console.log(); + + const currentServices = this.enabledServices || ['mongodb', 'minio', 'elasticsearch']; + + const smartinteract = new plugins.smartinteract.SmartInteract(); + const response = await smartinteract.askQuestion({ + name: 'services', + type: 'checkbox', + message: 'Which services do you want to enable?', + choices: [ + { name: 'MongoDB', value: 'mongodb' }, + { name: 'MinIO (S3)', value: 'minio' }, + { name: 'Elasticsearch', value: 'elasticsearch' } + ], + default: currentServices + }); + + this.enabledServices = response.value || ['mongodb', 'minio', 'elasticsearch']; + + // Save to npmextra.json + await this.saveServiceConfiguration(this.enabledServices); + + logger.log('ok', '✅ Service configuration updated'); + } + /** * Reconfigure services with new ports */ @@ -551,20 +880,25 @@ export class ServiceManager { // Stop existing containers logger.log('note', '🛑 Stopping existing containers...'); - + if (await this.docker.exists(containers.mongo)) { await this.docker.stop(containers.mongo); logger.log('ok', ' MongoDB stopped ✓'); } - + if (await this.docker.exists(containers.minio)) { await this.docker.stop(containers.minio); logger.log('ok', ' S3/MinIO stopped ✓'); } - + + if (await this.docker.exists(containers.elasticsearch)) { + await this.docker.stop(containers.elasticsearch); + logger.log('ok', ' Elasticsearch stopped ✓'); + } + // Reconfigure ports await this.config.reconfigurePorts(); - + // Ask if user wants to restart services const smartinteract = new plugins.smartinteract.SmartInteract(); const response = await smartinteract.askQuestion({ @@ -573,11 +907,10 @@ export class ServiceManager { message: 'Do you want to start services with new ports?', default: true }); - + if (response.value) { console.log(); - await this.startMongoDB(); - await this.startMinIO(); + await this.startAll(); } } } diff --git a/ts/mod_services/helpers.ts b/ts/mod_services/helpers.ts index 73efed5..d4d340a 100644 --- a/ts/mod_services/helpers.ts +++ b/ts/mod_services/helpers.ts @@ -42,11 +42,15 @@ export const getRandomAvailablePort = async (): Promise => { /** * Get the project name from package.json or directory */ -export const getProjectName = (): string => { +export const getProjectName = async (): Promise => { try { const packageJsonPath = plugins.path.join(process.cwd(), 'package.json'); - if (plugins.smartfile.fs.fileExistsSync(packageJsonPath)) { - const packageJson = plugins.smartfile.fs.toObjectSync(packageJsonPath); + if (await plugins.smartfs.file(packageJsonPath).exists()) { + const content = (await plugins.smartfs + .file(packageJsonPath) + .encoding('utf8') + .read()) as string; + const packageJson = JSON.parse(content); if (packageJson.name) { // Sanitize: @fin.cx/skr → fin-cx-skr return packageJson.name.replace(/@/g, '').replace(/[\/\.]/g, '-'); @@ -55,7 +59,7 @@ export const getProjectName = (): string => { } catch (error) { // Ignore errors and fall back to directory name } - + return plugins.path.basename(process.cwd()); }; diff --git a/ts/mod_services/index.ts b/ts/mod_services/index.ts index dd438d3..3b81b02 100644 --- a/ts/mod_services/index.ts +++ b/ts/mod_services/index.ts @@ -28,9 +28,13 @@ export const run = async (argvArg: any) => { break; case 'config': - await serviceManager.showConfig(); + if (service === 'services' || argvArg._[2] === 'services') { + await handleConfigureServices(serviceManager); + } else { + await serviceManager.showConfig(); + } break; - + case 'compass': await serviceManager.showCompassConnection(); break; @@ -61,63 +65,69 @@ export const run = async (argvArg: any) => { async function handleStart(serviceManager: ServiceManager, service: string) { helpers.printHeader('Starting Services'); - + switch (service) { case 'mongo': case 'mongodb': await serviceManager.startMongoDB(); break; - + case 'minio': case 's3': await serviceManager.startMinIO(); break; - + + case 'elasticsearch': + case 'es': + await serviceManager.startElasticsearch(); + break; + case 'all': case '': - await serviceManager.startMongoDB(); - console.log(); - await serviceManager.startMinIO(); + await serviceManager.startAll(); break; - + default: logger.log('error', `Unknown service: ${service}`); - logger.log('note', 'Use: mongo, s3, or all'); + logger.log('note', 'Use: mongo, s3, elasticsearch, or all'); break; } } async function handleStop(serviceManager: ServiceManager, service: string) { helpers.printHeader('Stopping Services'); - + switch (service) { case 'mongo': case 'mongodb': await serviceManager.stopMongoDB(); break; - + case 'minio': case 's3': await serviceManager.stopMinIO(); break; - + + case 'elasticsearch': + case 'es': + await serviceManager.stopElasticsearch(); + break; + case 'all': case '': - await serviceManager.stopMongoDB(); - console.log(); - await serviceManager.stopMinIO(); + await serviceManager.stopAll(); break; - + default: logger.log('error', `Unknown service: ${service}`); - logger.log('note', 'Use: mongo, s3, or all'); + logger.log('note', 'Use: mongo, s3, elasticsearch, or all'); break; } } async function handleRestart(serviceManager: ServiceManager, service: string) { helpers.printHeader('Restarting Services'); - + switch (service) { case 'mongo': case 'mongodb': @@ -125,24 +135,28 @@ async function handleRestart(serviceManager: ServiceManager, service: string) { await plugins.smartdelay.delayFor(2000); await serviceManager.startMongoDB(); break; - + case 'minio': case 's3': await serviceManager.stopMinIO(); await plugins.smartdelay.delayFor(2000); await serviceManager.startMinIO(); break; - + + case 'elasticsearch': + case 'es': + await serviceManager.stopElasticsearch(); + await plugins.smartdelay.delayFor(2000); + await serviceManager.startElasticsearch(); + break; + case 'all': case '': - await serviceManager.stopMongoDB(); - await serviceManager.stopMinIO(); + await serviceManager.stopAll(); await plugins.smartdelay.delayFor(2000); - await serviceManager.startMongoDB(); - console.log(); - await serviceManager.startMinIO(); + await serviceManager.startAll(); break; - + default: logger.log('error', `Unknown service: ${service}`); break; @@ -166,7 +180,7 @@ async function handleClean(serviceManager: ServiceManager) { helpers.printHeader('Clean All'); logger.log('error', '⚠️ WARNING: This will remove all containers and data!'); logger.log('error', 'This action cannot be undone!'); - + const smartinteraction = new plugins.smartinteract.SmartInteract(); const confirmAnswer = await smartinteraction.askQuestion({ name: 'confirm', @@ -174,7 +188,7 @@ async function handleClean(serviceManager: ServiceManager) { message: 'Type "yes" to confirm:', default: 'no' }); - + if (confirmAnswer.value === 'yes') { await serviceManager.removeContainers(); console.log(); @@ -185,40 +199,54 @@ async function handleClean(serviceManager: ServiceManager) { } } +async function handleConfigureServices(serviceManager: ServiceManager) { + helpers.printHeader('Configure Services'); + await serviceManager.configureServices(); +} + function showHelp() { helpers.printHeader('GitZone Services Manager'); - + logger.log('ok', 'Usage: gitzone services [command] [options]'); console.log(); - + logger.log('note', 'Commands:'); - logger.log('info', ' start [service] Start services (mongo|s3|all)'); - logger.log('info', ' stop [service] Stop services (mongo|s3|all)'); - logger.log('info', ' restart [service] Restart services (mongo|s3|all)'); + logger.log('info', ' start [service] Start services (mongo|s3|elasticsearch|all)'); + logger.log('info', ' stop [service] Stop services (mongo|s3|elasticsearch|all)'); + logger.log('info', ' restart [service] Restart services (mongo|s3|elasticsearch|all)'); logger.log('info', ' status Show service status'); logger.log('info', ' config Show current configuration'); + logger.log('info', ' config services Configure which services are enabled'); logger.log('info', ' compass Show MongoDB Compass connection string'); - logger.log('info', ' logs [service] Show logs (mongo|s3|all) [lines]'); + logger.log('info', ' logs [service] Show logs (mongo|s3|elasticsearch|all) [lines]'); logger.log('info', ' reconfigure Reassign ports and restart services'); logger.log('info', ' remove Remove all containers'); logger.log('info', ' clean Remove all containers and data ⚠️'); logger.log('info', ' help Show this help message'); console.log(); - + + logger.log('note', 'Available Services:'); + logger.log('info', ' • MongoDB (mongo) - Document database'); + logger.log('info', ' • MinIO (s3) - S3-compatible object storage'); + logger.log('info', ' • Elasticsearch (elasticsearch) - Search and analytics engine'); + console.log(); + logger.log('note', 'Features:'); logger.log('info', ' • Auto-creates .nogit/env.json with smart defaults'); - logger.log('info', ' • Random ports (20000-30000) to avoid conflicts'); + logger.log('info', ' • Random ports (20000-30000) for MongoDB/MinIO to avoid conflicts'); + logger.log('info', ' • Elasticsearch uses standard port 9200'); logger.log('info', ' • Project-specific containers for multi-project support'); logger.log('info', ' • Preserves custom configuration values'); logger.log('info', ' • MongoDB Compass connection support'); console.log(); - + logger.log('note', 'Examples:'); - logger.log('info', ' gitzone services start # Start all services'); - logger.log('info', ' gitzone services start mongo # Start only MongoDB'); - logger.log('info', ' gitzone services stop # Stop all services'); - logger.log('info', ' gitzone services status # Check service status'); - logger.log('info', ' gitzone services config # Show configuration'); - logger.log('info', ' gitzone services compass # Get MongoDB Compass connection'); - logger.log('info', ' gitzone services logs mongo 50 # Show last 50 lines of MongoDB logs'); + logger.log('info', ' gitzone services start # Start all services'); + logger.log('info', ' gitzone services start mongo # Start only MongoDB'); + logger.log('info', ' gitzone services start elasticsearch # Start only Elasticsearch'); + logger.log('info', ' gitzone services stop # Stop all services'); + logger.log('info', ' gitzone services status # Check service status'); + logger.log('info', ' gitzone services config # Show configuration'); + logger.log('info', ' gitzone services compass # Get MongoDB Compass connection'); + logger.log('info', ' gitzone services logs elasticsearch # Show Elasticsearch logs'); } \ No newline at end of file diff --git a/ts/mod_standard/index.ts b/ts/mod_standard/index.ts index 07a9826..4ecd7e3 100644 --- a/ts/mod_standard/index.ts +++ b/ts/mod_standard/index.ts @@ -6,23 +6,36 @@ import * as paths from '../paths.js'; import { logger } from '../gitzone.logging.js'; -export let run = () => { +export let run = async () => { const done = plugins.smartpromise.defer(); logger.log('warn', 'no action specified'); + + const dirEntries = await plugins.smartfs.directory(paths.templatesDir).list(); + const templates: string[] = []; + for (const entry of dirEntries) { + try { + const stats = await plugins.smartfs + .file(plugins.path.join(paths.templatesDir, entry.path)) + .stat(); + if (stats.isDirectory) { + templates.push(entry.name); + } + } catch { + // Skip entries that can't be accessed + } + } + + let projects = `\n`; + for (const template of templates) { + projects += ` - ${template}\n`; + } + logger.log( 'info', ` You can do one of the following things: * create a new project with 'gitzone template [template]' - the following templates exist: ${(() => { - let projects = `\n`; - for (const template of plugins.smartfile.fs.listFoldersSync( - paths.templatesDir, - )) { - projects += ` - ${template}\n`; - } - return projects; - })()} + the following templates exist: ${projects} * format a project with 'gitzone format' `, ); diff --git a/ts/mod_template/index.ts b/ts/mod_template/index.ts index cec811f..0b25254 100644 --- a/ts/mod_template/index.ts +++ b/ts/mod_template/index.ts @@ -11,7 +11,7 @@ export const getTemplatePath = (templateNameArg: string) => { * receives a template name and returns wether there is a corresponding template */ export const isTemplate = async (templateNameArg: string) => { - return plugins.smartfile.fs.isDirectory(getTemplatePath(templateNameArg)); + return plugins.smartfs.directory(getTemplatePath(templateNameArg)).exists(); }; export const getTemplate = async (templateNameArg: string) => { diff --git a/ts/plugins.ts b/ts/plugins.ts index 10b36d4..276aac3 100644 --- a/ts/plugins.ts +++ b/ts/plugins.ts @@ -10,9 +10,13 @@ import * as smartupdate from '@push.rocks/smartupdate'; import * as smartshell from '@push.rocks/smartshell'; import * as smartnetwork from '@push.rocks/smartnetwork'; import * as smartfile from '@push.rocks/smartfile'; +import { SmartFs, SmartFsProviderNode } from '@push.rocks/smartfs'; import * as smartinteract from '@push.rocks/smartinteract'; import * as smartdelay from '@push.rocks/smartdelay'; +// Create smartfs instance for filesystem operations +export const smartfs = new SmartFs(new SmartFsProviderNode()); + export { smartlog, smartlogDestinationLocal,