diff --git a/changelog.md b/changelog.md index 3948acd..1babfcb 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,13 @@ # Changelog +## 2025-04-25 - 5.16.0 - feat(watcher) +Enhance change stream watchers with buffering and EventEmitter support; update dependency versions + +- Bumped smartmongo from ^2.0.11 to ^2.0.12 and smartrx from ^3.0.7 to ^3.0.10 +- Upgraded @tsclass/tsclass to ^9.0.0 and mongodb to ^6.16.0 +- Refactored the watch API to accept additional options (bufferTimeMs, fullDocument) for improved change stream handling +- Modified SmartdataDbWatcher to extend EventEmitter and support event notifications + ## 2025-04-24 - 5.15.1 - fix(cursor) Improve cursor usage documentation and refactor getCursor API to support native cursor modifiers diff --git a/package.json b/package.json index dcd359e..c98ead4 100644 --- a/package.json +++ b/package.json @@ -26,23 +26,23 @@ "@push.rocks/lik": "^6.0.14", "@push.rocks/smartdelay": "^3.0.1", "@push.rocks/smartlog": "^3.0.2", - "@push.rocks/smartmongo": "^2.0.11", + "@push.rocks/smartmongo": "^2.0.12", "@push.rocks/smartpromise": "^4.0.2", - "@push.rocks/smartrx": "^3.0.7", + "@push.rocks/smartrx": "^3.0.10", "@push.rocks/smartstring": "^4.0.15", "@push.rocks/smarttime": "^4.0.6", "@push.rocks/smartunique": "^3.0.8", "@push.rocks/taskbuffer": "^3.1.7", - "@tsclass/tsclass": "^8.2.0", - "mongodb": "^6.15.0" + "@tsclass/tsclass": "^9.0.0", + "mongodb": "^6.16.0" }, "devDependencies": { "@git.zone/tsbuild": "^2.3.2", "@git.zone/tsrun": "^1.2.44", "@git.zone/tstest": "^1.0.77", "@push.rocks/qenv": "^6.0.5", - "@push.rocks/tapbundle": "^5.6.2", - "@types/node": "^22.14.0" + "@push.rocks/tapbundle": "^5.6.3", + "@types/node": "^22.15.2" }, "files": [ "ts/**/*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b93409..103084b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,14 +18,14 @@ importers: specifier: ^3.0.2 version: 3.0.7 '@push.rocks/smartmongo': - specifier: ^2.0.11 - version: 2.0.11(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + specifier: ^2.0.12 + version: 2.0.12(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) '@push.rocks/smartpromise': specifier: ^4.0.2 version: 4.2.3 '@push.rocks/smartrx': - specifier: ^3.0.7 - version: 3.0.7 + specifier: ^3.0.10 + version: 3.0.10 '@push.rocks/smartstring': specifier: ^4.0.15 version: 4.0.15 @@ -39,11 +39,11 @@ importers: specifier: ^3.1.7 version: 3.1.7 '@tsclass/tsclass': - specifier: ^8.2.0 - version: 8.2.0 + specifier: ^9.0.0 + version: 9.0.0 mongodb: - specifier: ^6.15.0 - version: 6.15.0(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + specifier: ^6.16.0 + version: 6.16.0(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) devDependencies: '@git.zone/tsbuild': specifier: ^2.3.2 @@ -53,16 +53,16 @@ importers: version: 1.3.3 '@git.zone/tstest': specifier: ^1.0.77 - version: 1.0.96(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4)(typescript@5.8.2) + version: 1.0.96(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4)(typescript@5.8.2) '@push.rocks/qenv': specifier: ^6.0.5 version: 6.1.0 '@push.rocks/tapbundle': - specifier: ^5.6.2 - version: 5.6.2(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + specifier: ^5.6.3 + version: 5.6.3(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) '@types/node': - specifier: ^22.14.0 - version: 22.14.0 + specifier: ^22.15.2 + version: 22.15.2 packages: @@ -104,8 +104,8 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-cognito-identity@3.782.0': - resolution: {integrity: sha512-Zad5x3L5K+PuhdY2v8Q0tsafmVBa2SJJxNukPzXM1APxW7FpDVMxcdSzjfCfX7CvSpohR8zDIEROqMfoUisaTw==} + '@aws-sdk/client-cognito-identity@3.796.0': + resolution: {integrity: sha512-p8ZzHICnQaCL4oS16yHUCLH6/VkbmWP8p2P7vALncUYguHDE/oNcWNAARo56x3Qx0TbRCi0OD4KAwD6AhddMdg==} engines: {node: '>=18.0.0'} '@aws-sdk/client-s3@3.782.0': @@ -116,44 +116,80 @@ packages: resolution: {integrity: sha512-5GlJBejo8wqMpSSEKb45WE82YxI2k73YuebjLH/eWDNQeE6VI5Bh9lA1YQ7xNkLLH8hIsb0pSfKVuwh0VEzVrg==} engines: {node: '>=18.0.0'} + '@aws-sdk/client-sso@3.796.0': + resolution: {integrity: sha512-EJExg8mbwqP0VG+RNFV4ZPuUo7QsDsUfTnuFQY51V8iXrbOdV+PDLRr4psXj2fxvrLxc9AlGUMNqd/j4VZtQzA==} + engines: {node: '>=18.0.0'} + '@aws-sdk/core@3.775.0': resolution: {integrity: sha512-8vpW4WihVfz0DX+7WnnLGm3GuQER++b0IwQG35JlQMlgqnc44M//KbJPsIHA0aJUJVwJAEShgfr5dUbY8WUzaA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-cognito-identity@3.782.0': - resolution: {integrity: sha512-rWUmO9yZUBkM2CrTN9lm5X7Ubl7bRPBKyq5hvWpVNSa6BpUcmAQ6CUwEACOc+9cXmUqmKFhP6MGT2GpVlRrzDQ==} + '@aws-sdk/core@3.796.0': + resolution: {integrity: sha512-tH8Sp7lCxISVoLnkyv4AouuXs2CDlMhTuesWa0lq2NX1f+DXsMwSBtN37ttZdpFMw3F8mWdsJt27X9h2Oq868A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-cognito-identity@3.796.0': + resolution: {integrity: sha512-plvMsQNWW1Jq7YRs8S6xHEbdn+kO/F+vDjCBrPaT4LhcDMsXqO/jcDNRuYOnPRBQsqjp7n7MM3oMhyY4fupa6g==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-env@3.775.0': resolution: {integrity: sha512-6ESVxwCbGm7WZ17kY1fjmxQud43vzJFoLd4bmlR+idQSWdqlzGDYdcfzpjDKTcivdtNrVYmFvcH1JBUwCRAZhw==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-env@3.796.0': + resolution: {integrity: sha512-kQzGKm4IOYYO6vUrai2JocNwhJm4Aml2BsAV+tBhFhhkutE7khf9PUucoVjB78b0J48nF+kdSacqzY+gB81/Uw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-http@3.775.0': resolution: {integrity: sha512-PjDQeDH/J1S0yWV32wCj2k5liRo0ssXMseCBEkCsD3SqsU8o5cU82b0hMX4sAib/RkglCSZqGO0xMiN0/7ndww==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-http@3.796.0': + resolution: {integrity: sha512-wWOT6VAHIKOuHdKFGm1iyKvx7f6+Kc/YTzFWJPuT+l+CPlXR6ylP1UMIDsHHLKpMzsrh3CH77QDsjkhQrnKkfg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-ini@3.782.0': resolution: {integrity: sha512-wd4KdRy2YjLsE4Y7pz00470Iip06GlRHkG4dyLW7/hFMzEO2o7ixswCWp6J2VGZVAX64acknlv2Q0z02ebjmhw==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-ini@3.796.0': + resolution: {integrity: sha512-qGWBDn9aO8avFfYU7daps7Sy6OglF1x0q0w48slt0KMXbHd2/LvKVIiYwyofYCXed0yzcEOF2IYm9FjXdcn+ug==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-node@3.782.0': resolution: {integrity: sha512-HZiAF+TCEyKjju9dgysjiPIWgt/+VerGaeEp18mvKLNfgKz1d+/82A2USEpNKTze7v3cMFASx3CvL8yYyF7mJw==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-node@3.796.0': + resolution: {integrity: sha512-WeNK7OWPrsOvhO3DAgpUO0FtmVghMaZ/IpPJHJ4Y0nBIsWOBXLrbZ2Y1mdT8N2bGGUaM91tJaV8Yf8COc3gvmA==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-process@3.775.0': resolution: {integrity: sha512-A6k68H9rQp+2+7P7SGO90Csw6nrUEm0Qfjpn9Etc4EboZhhCLs9b66umUsTsSBHus4FDIe5JQxfCUyt1wgNogg==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-process@3.796.0': + resolution: {integrity: sha512-r4e8/4AdKn/qQbRVocW7oXkpoiuXdTv0qty8AASNLnbQnT1vjD1bvmP6kp4fbHPWgwY8I9h0Dqjp49uy9Bqyuw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-sso@3.782.0': resolution: {integrity: sha512-1y1ucxTtTIGDSNSNxriQY8msinilhe9gGvQpUDYW9gboyC7WQJPDw66imy258V6osdtdi+xoHzVCbCz3WhosMQ==} engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-sso@3.796.0': + resolution: {integrity: sha512-RUYsQ1t6UdzkpZ7pocUt1l/9l9GCYCaopIhv0DU6CipA8rkWtoweKsLHKdv+8wE4p6gqDfDIHGam1ivswiCIzg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-web-identity@3.782.0': resolution: {integrity: sha512-xCna0opVPaueEbJoclj5C6OpDNi0Gynj+4d7tnuXGgQhTHPyAz8ZyClkVqpi5qvHTgxROdUEDxWqEO5jqRHZHQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-providers@3.782.0': - resolution: {integrity: sha512-EP0viOqgw9hU8Lt25Rc7nPlPKMCsO7ntVGSA5TDdjaOHU9wN1LdKwRmFWYE+ii0FIPmagJmgJJoHdpq85oqsUw==} + '@aws-sdk/credential-provider-web-identity@3.796.0': + resolution: {integrity: sha512-dpmFJT4IyjT09vruvMu/rWQQjVreqdxAe8pLPpGhoeKyA1O6+PS73b+VNXKvD31rQT8e4g6dVpA6KMxNW63aag==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-providers@3.796.0': + resolution: {integrity: sha512-thZw44Bk3pS0PW81QmPfNSliX5XfXHDlWRjPYHBx+eTlPtidyD5klJkkfF5fkQlpHPeP2KNLuRnr6bRu+uMirg==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-bucket-endpoint@3.775.0': @@ -196,10 +232,18 @@ packages: resolution: {integrity: sha512-i32H2R6IItX+bQ2p4+v2gGO2jA80jQoJO2m1xjU9rYWQW3+ErWy4I5YIuQHTBfb6hSdAHbaRfqPDgbv9J2rjEg==} engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-user-agent@3.796.0': + resolution: {integrity: sha512-IeNg+3jNWT37J45opi5Jx89hGF0lOnZjiNwlMp3rKq7PlOqy8kWq5J1Gxk0W3tIkPpuf68CtBs/QFrRXWOjsZw==} + engines: {node: '>=18.0.0'} + '@aws-sdk/nested-clients@3.782.0': resolution: {integrity: sha512-QOYC8q7luzHFXrP0xYAqBctoPkynjfV0r9dqntFu4/IWMTyC1vlo1UTxFAjIPyclYw92XJyEkVCVg9v/nQnsUA==} engines: {node: '>=18.0.0'} + '@aws-sdk/nested-clients@3.796.0': + resolution: {integrity: sha512-jJ8a0ldWtXh/ice7nldUjTqja7KYlSYk1pwfIIvJLIqEn2SvQHK/pyCINTmmOmFAWXMKBQBeWUMxo1pPYNytzQ==} + engines: {node: '>=18.0.0'} + '@aws-sdk/region-config-resolver@3.775.0': resolution: {integrity: sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==} engines: {node: '>=18.0.0'} @@ -212,6 +256,10 @@ packages: resolution: {integrity: sha512-4tPuk/3+THPrzKaXW4jE2R67UyGwHLFizZ47pcjJWbhb78IIJAy94vbeqEQ+veS84KF5TXcU7g5jGTXC0D70Wg==} engines: {node: '>=18.0.0'} + '@aws-sdk/token-providers@3.796.0': + resolution: {integrity: sha512-Sxr/EqJBxOwLsXHv8C91N/Aao8Rgjn5bcpzplrTZ7wrfDrzqQfSCvjh7apCxdLYMKPBV+an75blCAd7JD4/bAg==} + engines: {node: '>=18.0.0'} + '@aws-sdk/types@3.775.0': resolution: {integrity: sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==} engines: {node: '>=18.0.0'} @@ -224,6 +272,10 @@ packages: resolution: {integrity: sha512-/RJOAO7o7HI6lEa4ASbFFLHGU9iPK876BhsVfnl54MvApPVYWQ9sHO0anOUim2S5lQTwd/6ghuH3rFYSq/+rdw==} engines: {node: '>=18.0.0'} + '@aws-sdk/util-endpoints@3.787.0': + resolution: {integrity: sha512-fd3zkiOkwnbdbN0Xp9TsP5SWrmv0SpT70YEdbb8wAj2DWQwiCmFszaSs+YCvhoCdmlR3Wl9Spu0pGpSAGKeYvQ==} + engines: {node: '>=18.0.0'} + '@aws-sdk/util-locate-window@3.723.0': resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} engines: {node: '>=18.0.0'} @@ -240,6 +292,15 @@ packages: aws-crt: optional: true + '@aws-sdk/util-user-agent-node@3.796.0': + resolution: {integrity: sha512-9fQpNcHgVFitf1tbTT8V1xGRoRHSmOAWjrhevo6Tc0WoINMAKz+4JNqfVGWRE5Tmtpq0oHKo1RmvxXQQtJYciA==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/xml-builder@3.775.0': resolution: {integrity: sha512-b9NGO6FKJeLGYnV7Z1yvcP1TNU4dkD5jNsLWOF1/sygZoASaQhNOlaiJ/1OH331YQ1R1oWk38nBb0frsYkDsOQ==} engines: {node: '>=18.0.0'} @@ -637,11 +698,14 @@ packages: '@lit/reactive-element@2.0.4': resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} + '@lit/reactive-element@2.1.0': + resolution: {integrity: sha512-L2qyoZSQClcBmq0qajBVbhYEcG6iK0XfLn66ifLe/RfC0/ihpc+pl0Wdn8bJ8o+hj38cG0fGXRgSS20MuXn7qA==} + '@mixmark-io/domino@2.2.0': resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} - '@mongodb-js/saslprep@1.2.1': - resolution: {integrity: sha512-1NCa8GsZ+OFLTw5KkKQS22wLS+Rs+y02sgkhr99Pm4OSXtSDHCJyq0uscPF0qA86ipGYH4PwtC2+a8Y4RKkCcg==} + '@mongodb-js/saslprep@1.2.2': + resolution: {integrity: sha512-EB0O3SCSNRUFk66iRCpI+cXzIjdswfCs7F6nOC3RAGJ7xr5YhaicvsRwJ9eyzYvYRlCSDUO/c7g4yNulxKC1WA==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -761,8 +825,8 @@ packages: '@push.rocks/smartcrypto@2.0.4': resolution: {integrity: sha512-1+/5bsjyataf5uUkUNnnVXGRAt+gHVk1KDzozjTqgqJxHvQk1d9fVDohL6CxUhUucTPtu5VR5xNBiV8YCDuGyw==} - '@push.rocks/smartdata@5.2.12': - resolution: {integrity: sha512-vp0nz1P/SJcoFhyfZoewPbFSameWnuMuCkySvnb41TcCi1PFHA//KOYImdti/qURSOYwVoTKboDrnx1/ffHp7g==} + '@push.rocks/smartdata@5.15.1': + resolution: {integrity: sha512-sxMLRQpQDnF4fkAYLcnLNxF3zlRuiwb9I1P8QqBqyNsTQzvVxCuZoI3AYjg6O+j7ZgkNyrmQXHrN/7EJJx/bPg==} '@push.rocks/smartdelay@3.0.5': resolution: {integrity: sha512-mUuI7kj2f7ztjpic96FvRIlf2RsKBa5arw81AHNsndbxO6asRcxuWL8dTVxouEIK8YsBUlj0AsrCkHhMbLQdHw==} @@ -824,8 +888,8 @@ packages: '@push.rocks/smartmime@2.0.4': resolution: {integrity: sha512-mG6lRBLr5nF+GLZmgCcdjhdDsmTtJWBFZDCa1eJ8Au9TvUzbPW0fY5aqJBb3UwfyZzH6St8Th9cJSXjagOQkYA==} - '@push.rocks/smartmongo@2.0.11': - resolution: {integrity: sha512-jvSFV8T4V75DzT2JUM42mZSZfAGG81qNPb1QG6NvuUUlLyEhZ+4Glcnfoh7Vp93VBxHK0Na7Y4B5f8R160lW5g==} + '@push.rocks/smartmongo@2.0.12': + resolution: {integrity: sha512-NglYiO14BikxnlvW6JF18FtopBtaWQEGAtPxHmmSCbyhU8Mi0aEFO7VgCasE9Kguba/wcR597qhcDEdcpBg1eQ==} '@push.rocks/smartnetwork@3.0.2': resolution: {integrity: sha512-s6CNGzQ1n/d/6cOKXbxeW6/tO//dr1woLqI01g7XhqTriw0nsm2G2kWaZh2J0VOguGNWBgQVCIpR0LjdRNWb3g==} @@ -863,8 +927,8 @@ packages: '@push.rocks/smartrouter@1.3.2': resolution: {integrity: sha512-JtkxClN4CaHXMSeLDNvfWPwiVEPdEoQVSX2ee3gLgbXNO9dt9hvXdIhFrnFeLwyeA6M8nJdb9SqjrjZroYJsxw==} - '@push.rocks/smartrx@3.0.7': - resolution: {integrity: sha512-qCWy0s3RLAgGSnaw/Gu0BNaJ59CsI6RK5OJDCCqxc7P2X/S755vuLtnAR5/0dEjdhCHXHX9ytPZx+o9g/CNiyA==} + '@push.rocks/smartrx@3.0.10': + resolution: {integrity: sha512-USjIYcsSfzn14cwOsxgq/bBmWDTTzy3ouWAnW5NdMyRRzEbmeNrvmy6TRqNeDlJ2PsYNTt1rr/zGUqvIy72ITg==} '@push.rocks/smarts3@2.2.5': resolution: {integrity: sha512-OZjD0jBCUTJCLnwraxBcyZ3he5buXf2OEM1zipiTBChA2EcKUZWKk/a6KR5WT+NlFCIIuB23UG+U+cxsIWM91Q==} @@ -911,8 +975,8 @@ packages: '@push.rocks/smartyaml@2.0.5': resolution: {integrity: sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==} - '@push.rocks/tapbundle@5.6.2': - resolution: {integrity: sha512-5I4hE+cNZEHV5badU2xFRY9sm+ZQS4Ilp55754uoBkiVPqoh0UnWLmEbLUCu8T/y87lGtwd1Pe0JtEGFyn8KPg==} + '@push.rocks/tapbundle@5.6.3': + resolution: {integrity: sha512-hFzsf59rg1K70i45llj7PCyyCZp7JW19XRR+Q1gge1T0pBN8Wi53aYqP/2qtxdMiNVe2s3ESp6VJZv3sLOMYPQ==} '@push.rocks/taskbuffer@3.1.7': resolution: {integrity: sha512-QktGVJPucqQmW/QNGnscf4FAigT1H7JWKFGFdRuDEaOHKFh9qN+PXG3QY7DtZ4jfXdGLxPN4yAufDuPSAJYFnw==} @@ -1183,6 +1247,10 @@ packages: resolution: {integrity: sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==} engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.1.0': + resolution: {integrity: sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w==} + engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.2.0': resolution: {integrity: sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==} engines: {node: '>=18.0.0'} @@ -1288,8 +1356,11 @@ packages: '@tsclass/tsclass@4.4.4': resolution: {integrity: sha512-YZOAF+u+r4u5rCev2uUd1KBTBdfyFdtDmcv4wuN+864lMccbdfRICR3SlJwCfYS1lbeV3QNLYGD30wjRXgvCJA==} - '@tsclass/tsclass@8.2.0': - resolution: {integrity: sha512-qh3hhW5k030n3XVz6hDNrRPYZTTAvy7FZSnKYZXCRYV/JpNZw84daI4G4CgECOX/LAWAiW57MRwsFbShTddYBA==} + '@tsclass/tsclass@8.2.1': + resolution: {integrity: sha512-bRDCfJTipsTcK6eEokWdsOR1mGCQFeM7zTg6PRHzbxTWQcWQD9AhEr2q3CrPcmAbvIS7fvkO6/pU/mPm1MZxhQ==} + + '@tsclass/tsclass@9.0.0': + resolution: {integrity: sha512-QuV2WKzi3p1ONq0UR+hNulG62D6vRPJxOXunWvN9zpWx6Uj70DKntMu8nqEIWUPgL3UKIPe7GN8l6mPCdxdcEg==} '@types/accepts@1.3.7': resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} @@ -1445,8 +1516,8 @@ packages: '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@22.14.0': - resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} + '@types/node@22.15.2': + resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==} '@types/parse5@6.0.3': resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} @@ -2168,8 +2239,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -2828,8 +2899,8 @@ packages: resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} - koa@2.16.0: - resolution: {integrity: sha512-Afhqq0Vq3W7C+/rW6IqHVBDLzqObwZ07JaUNUEF8yCQ6afiyFE3RAy+i7V0E46XOWlH7vPWn/x0vsZwNy6PWxw==} + koa@2.16.1: + resolution: {integrity: sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} kuler@2.0.0: @@ -2855,12 +2926,21 @@ packages: lit-element@4.1.1: resolution: {integrity: sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==} + lit-element@4.2.0: + resolution: {integrity: sha512-MGrXJVAI5x+Bfth/pU9Kst1iWID6GHDLEzFEnyULB/sFiRLgkd8NPK/PeeXxktA3T6EIIaq8U3KcbTU5XFcP2Q==} + lit-html@3.2.1: resolution: {integrity: sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==} + lit-html@3.3.0: + resolution: {integrity: sha512-RHoswrFAxY2d8Cf2mm4OZ1DgzCoBKUKSPvA1fhtSELxUERq2aQQ2h05pO9j81gS1o7RIRJ+CePLogfyahwmynw==} + lit@3.2.1: resolution: {integrity: sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==} + lit@3.3.0: + resolution: {integrity: sha512-DGVsqsOIHBww2DqnuZzW7QsuCdahp50ojuDaBPC7jUDRpYoH0z7kHBBYZewRzer75FwtrkmkKk7iOAwSaWdBmw==} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3210,8 +3290,8 @@ packages: resolution: {integrity: sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==} engines: {node: '>=12.9.0'} - mongodb@6.15.0: - resolution: {integrity: sha512-ifBhQ0rRzHDzqp9jAQP6OwHSH7dbYIQjD3SbJs9YYk9AikKEettW/9s/tbSFDTpXcRbF+u1aLrhHxDFaYtZpFQ==} + mongodb@6.16.0: + resolution: {integrity: sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw==} engines: {node: '>=16.20.1'} peerDependencies: '@aws-sdk/credential-providers': ^3.188.0 @@ -3954,8 +4034,8 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} - tr46@5.1.0: - resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} tree-kill@1.2.2: @@ -4005,8 +4085,8 @@ packages: resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} engines: {node: '>=16'} - type-fest@4.39.1: - resolution: {integrity: sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==} + type-fest@4.40.0: + resolution: {integrity: sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==} engines: {node: '>=16'} type-is@1.6.18: @@ -4283,7 +4363,7 @@ snapshots: '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrequest': 2.0.23 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartsitemap': 2.0.3 '@push.rocks/smartstream': 3.2.5 '@push.rocks/smarttime': 4.1.1 @@ -4311,7 +4391,7 @@ snapshots: '@api.global/typedrequest-interfaces': 3.0.19 '@push.rocks/isohash': 2.0.1 '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartsocket': 2.1.0 '@push.rocks/smartstring': 4.0.15 '@push.rocks/smarturl': 3.1.0 @@ -4370,21 +4450,21 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-cognito-identity@3.782.0': + '@aws-sdk/client-cognito-identity@3.796.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.775.0 - '@aws-sdk/credential-provider-node': 3.782.0 + '@aws-sdk/core': 3.796.0 + '@aws-sdk/credential-provider-node': 3.796.0 '@aws-sdk/middleware-host-header': 3.775.0 '@aws-sdk/middleware-logger': 3.775.0 '@aws-sdk/middleware-recursion-detection': 3.775.0 - '@aws-sdk/middleware-user-agent': 3.782.0 + '@aws-sdk/middleware-user-agent': 3.796.0 '@aws-sdk/region-config-resolver': 3.775.0 '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.782.0 + '@aws-sdk/util-endpoints': 3.787.0 '@aws-sdk/util-user-agent-browser': 3.775.0 - '@aws-sdk/util-user-agent-node': 3.782.0 + '@aws-sdk/util-user-agent-node': 3.796.0 '@smithy/config-resolver': 4.1.0 '@smithy/core': 3.2.0 '@smithy/fetch-http-handler': 5.0.2 @@ -4519,6 +4599,50 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sso@3.796.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.796.0 + '@aws-sdk/middleware-host-header': 3.775.0 + '@aws-sdk/middleware-logger': 3.775.0 + '@aws-sdk/middleware-recursion-detection': 3.775.0 + '@aws-sdk/middleware-user-agent': 3.796.0 + '@aws-sdk/region-config-resolver': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@aws-sdk/util-endpoints': 3.787.0 + '@aws-sdk/util-user-agent-browser': 3.775.0 + '@aws-sdk/util-user-agent-node': 3.796.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + '@aws-sdk/core@3.775.0': dependencies: '@aws-sdk/types': 3.775.0 @@ -4533,9 +4657,24 @@ snapshots: fast-xml-parser: 4.4.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-cognito-identity@3.782.0': + '@aws-sdk/core@3.796.0': dependencies: - '@aws-sdk/client-cognito-identity': 3.782.0 + '@aws-sdk/types': 3.775.0 + '@smithy/core': 3.2.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + optional: true + + '@aws-sdk/credential-provider-cognito-identity@3.796.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.796.0 '@aws-sdk/types': 3.775.0 '@smithy/property-provider': 4.0.2 '@smithy/types': 4.2.0 @@ -4552,6 +4691,15 @@ snapshots: '@smithy/types': 4.2.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-env@3.796.0': + dependencies: + '@aws-sdk/core': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + '@aws-sdk/credential-provider-http@3.775.0': dependencies: '@aws-sdk/core': 3.775.0 @@ -4565,6 +4713,20 @@ snapshots: '@smithy/util-stream': 4.2.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-http@3.796.0': + dependencies: + '@aws-sdk/core': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 + tslib: 2.8.1 + optional: true + '@aws-sdk/credential-provider-ini@3.782.0': dependencies: '@aws-sdk/core': 3.775.0 @@ -4583,6 +4745,25 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-ini@3.796.0': + dependencies: + '@aws-sdk/core': 3.796.0 + '@aws-sdk/credential-provider-env': 3.796.0 + '@aws-sdk/credential-provider-http': 3.796.0 + '@aws-sdk/credential-provider-process': 3.796.0 + '@aws-sdk/credential-provider-sso': 3.796.0 + '@aws-sdk/credential-provider-web-identity': 3.796.0 + '@aws-sdk/nested-clients': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + '@aws-sdk/credential-provider-node@3.782.0': dependencies: '@aws-sdk/credential-provider-env': 3.775.0 @@ -4600,6 +4781,24 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-node@3.796.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.796.0 + '@aws-sdk/credential-provider-http': 3.796.0 + '@aws-sdk/credential-provider-ini': 3.796.0 + '@aws-sdk/credential-provider-process': 3.796.0 + '@aws-sdk/credential-provider-sso': 3.796.0 + '@aws-sdk/credential-provider-web-identity': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + '@aws-sdk/credential-provider-process@3.775.0': dependencies: '@aws-sdk/core': 3.775.0 @@ -4609,6 +4808,16 @@ snapshots: '@smithy/types': 4.2.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-process@3.796.0': + dependencies: + '@aws-sdk/core': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + '@aws-sdk/credential-provider-sso@3.782.0': dependencies: '@aws-sdk/client-sso': 3.782.0 @@ -4622,6 +4831,20 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-sso@3.796.0': + dependencies: + '@aws-sdk/client-sso': 3.796.0 + '@aws-sdk/core': 3.796.0 + '@aws-sdk/token-providers': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + '@aws-sdk/credential-provider-web-identity@3.782.0': dependencies: '@aws-sdk/core': 3.775.0 @@ -4633,19 +4856,31 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-providers@3.782.0': + '@aws-sdk/credential-provider-web-identity@3.796.0': dependencies: - '@aws-sdk/client-cognito-identity': 3.782.0 - '@aws-sdk/core': 3.775.0 - '@aws-sdk/credential-provider-cognito-identity': 3.782.0 - '@aws-sdk/credential-provider-env': 3.775.0 - '@aws-sdk/credential-provider-http': 3.775.0 - '@aws-sdk/credential-provider-ini': 3.782.0 - '@aws-sdk/credential-provider-node': 3.782.0 - '@aws-sdk/credential-provider-process': 3.775.0 - '@aws-sdk/credential-provider-sso': 3.782.0 - '@aws-sdk/credential-provider-web-identity': 3.782.0 - '@aws-sdk/nested-clients': 3.782.0 + '@aws-sdk/core': 3.796.0 + '@aws-sdk/nested-clients': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/credential-providers@3.796.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.796.0 + '@aws-sdk/core': 3.796.0 + '@aws-sdk/credential-provider-cognito-identity': 3.796.0 + '@aws-sdk/credential-provider-env': 3.796.0 + '@aws-sdk/credential-provider-http': 3.796.0 + '@aws-sdk/credential-provider-ini': 3.796.0 + '@aws-sdk/credential-provider-node': 3.796.0 + '@aws-sdk/credential-provider-process': 3.796.0 + '@aws-sdk/credential-provider-sso': 3.796.0 + '@aws-sdk/credential-provider-web-identity': 3.796.0 + '@aws-sdk/nested-clients': 3.796.0 '@aws-sdk/types': 3.775.0 '@smithy/config-resolver': 4.1.0 '@smithy/core': 3.2.0 @@ -4750,6 +4985,17 @@ snapshots: '@smithy/types': 4.2.0 tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.796.0': + dependencies: + '@aws-sdk/core': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@aws-sdk/util-endpoints': 3.787.0 + '@smithy/core': 3.2.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + '@aws-sdk/nested-clients@3.782.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -4793,6 +5039,50 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/nested-clients@3.796.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.796.0 + '@aws-sdk/middleware-host-header': 3.775.0 + '@aws-sdk/middleware-logger': 3.775.0 + '@aws-sdk/middleware-recursion-detection': 3.775.0 + '@aws-sdk/middleware-user-agent': 3.796.0 + '@aws-sdk/region-config-resolver': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@aws-sdk/util-endpoints': 3.787.0 + '@aws-sdk/util-user-agent-browser': 3.775.0 + '@aws-sdk/util-user-agent-node': 3.796.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + '@aws-sdk/region-config-resolver@3.775.0': dependencies: '@aws-sdk/types': 3.775.0 @@ -4822,6 +5112,18 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/token-providers@3.796.0': + dependencies: + '@aws-sdk/nested-clients': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + optional: true + '@aws-sdk/types@3.775.0': dependencies: '@smithy/types': 4.2.0 @@ -4838,6 +5140,14 @@ snapshots: '@smithy/util-endpoints': 3.0.2 tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.787.0': + dependencies: + '@aws-sdk/types': 3.775.0 + '@smithy/types': 4.2.0 + '@smithy/util-endpoints': 3.0.2 + tslib: 2.8.1 + optional: true + '@aws-sdk/util-locate-window@3.723.0': dependencies: tslib: 2.8.1 @@ -4857,6 +5167,15 @@ snapshots: '@smithy/types': 4.2.0 tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.796.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + optional: true + '@aws-sdk/xml-builder@3.775.0': dependencies: '@smithy/types': 4.2.0 @@ -4905,7 +5224,7 @@ snapshots: '@push.rocks/smartmarkdown': 3.0.3 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrouter': 1.3.2 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartstate': 2.0.19 '@push.rocks/smartstring': 4.0.15 '@push.rocks/smarturl': 3.1.0 @@ -4925,7 +5244,7 @@ snapshots: dependencies: '@design.estate/dees-domtools': 2.3.2 '@push.rocks/isounique': 1.0.5 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 lit: 3.2.1 transitivePeerDependencies: - '@nuxt/kit' @@ -5138,7 +5457,7 @@ snapshots: '@push.rocks/smartshell': 3.2.3 tsx: 4.19.3 - '@git.zone/tstest@1.0.96(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4)(typescript@5.8.2)': + '@git.zone/tstest@1.0.96(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4)(typescript@5.8.2)': dependencies: '@api.global/typedserver': 3.0.68 '@git.zone/tsbundle': 2.2.5 @@ -5150,7 +5469,7 @@ snapshots: '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartshell': 3.2.3 - '@push.rocks/tapbundle': 5.6.2(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + '@push.rocks/tapbundle': 5.6.3(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) '@types/ws': 8.18.0 figures: 6.1.0 ws: 8.18.1 @@ -5200,7 +5519,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -5222,9 +5541,13 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 + '@lit/reactive-element@2.1.0': + dependencies: + '@lit-labs/ssr-dom-shim': 1.3.0 + '@mixmark-io/domino@2.2.0': {} - '@mongodb-js/saslprep@1.2.1': + '@mongodb-js/saslprep@1.2.2': dependencies: sparse-bitfield: 3.0.3 @@ -5262,7 +5585,7 @@ snapshots: '@open-wc/scoped-elements@3.0.5': dependencies: '@open-wc/dedupe-mixin': 1.4.0 - lit: 3.2.1 + lit: 3.3.0 '@open-wc/semantic-dom-diff@0.20.1': dependencies: @@ -5276,8 +5599,8 @@ snapshots: '@open-wc/testing-helpers@3.0.1': dependencies: '@open-wc/scoped-elements': 3.0.5 - lit: 3.2.1 - lit-html: 3.2.1 + lit: 3.3.0 + lit-html: 3.3.0 '@open-wc/testing@4.0.0': dependencies: @@ -5367,7 +5690,7 @@ snapshots: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartmatch': 2.0.0 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smarttime': 4.1.1 '@types/minimatch': 5.1.2 '@types/symbol-tree': 3.2.5 @@ -5399,7 +5722,7 @@ snapshots: '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrequest': 2.1.0 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartstream': 2.0.8 '@push.rocks/smartunique': 3.0.9 '@types/gunzip-maybe': 1.4.2 @@ -5427,7 +5750,7 @@ snapshots: '@push.rocks/smartmime': 2.0.4 '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartstream': 3.2.5 '@push.rocks/smartstring': 4.0.15 '@push.rocks/smartunique': 3.0.9 @@ -5451,7 +5774,7 @@ snapshots: dependencies: '@push.rocks/lik': 6.1.0 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@tempfix/watcher': 2.3.0 '@push.rocks/smartcli@4.0.11': @@ -5460,7 +5783,7 @@ snapshots: '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartobject': 1.0.12 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 yargs-parser: 21.1.1 '@push.rocks/smartcrypto@2.0.4': @@ -5469,20 +5792,20 @@ snapshots: '@types/node-forge': 1.3.11 node-forge: 1.3.1 - '@push.rocks/smartdata@5.2.12(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4)': + '@push.rocks/smartdata@5.15.1(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4)': dependencies: '@push.rocks/lik': 6.1.0 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartlog': 3.0.7 - '@push.rocks/smartmongo': 2.0.11(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartstring': 4.0.15 '@push.rocks/smarttime': 4.1.1 '@push.rocks/smartunique': 3.0.9 '@push.rocks/taskbuffer': 3.1.7 - '@tsclass/tsclass': 4.4.4 - mongodb: 6.15.0(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + '@tsclass/tsclass': 8.2.1 + mongodb: 6.16.0(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@mongodb-js/zstd' @@ -5632,13 +5955,13 @@ snapshots: file-type: 19.6.0 mime: 4.0.6 - '@push.rocks/smartmongo@2.0.11(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4)': + '@push.rocks/smartmongo@2.0.12(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4)': dependencies: '@push.rocks/mongodump': 1.0.8 - '@push.rocks/smartdata': 5.2.12(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + '@push.rocks/smartdata': 5.15.1(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 - mongodb-memory-server: 10.1.4(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + mongodb-memory-server: 10.1.4(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@mongodb-js/zstd' @@ -5752,10 +6075,10 @@ snapshots: '@push.rocks/smartrouter@1.3.2': dependencies: '@push.rocks/lik': 6.1.0 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 path-to-regexp: 8.2.0 - '@push.rocks/smartrx@3.0.7': + '@push.rocks/smartrx@3.0.10': dependencies: '@push.rocks/smartpromise': 4.2.3 rxjs: 7.8.2 @@ -5802,7 +6125,7 @@ snapshots: '@push.rocks/smartjson': 5.0.20 '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smarttime': 4.1.1 engine.io: 6.6.4 socket.io: 4.8.1 @@ -5830,13 +6153,13 @@ snapshots: '@push.rocks/lik': 6.1.0 '@push.rocks/smartjson': 5.0.20 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/webstore': 2.0.20 '@push.rocks/smartstream@2.0.8': dependencies: '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@types/from2': 2.3.5 '@types/through2': 2.0.41 from2: 2.3.0 @@ -5847,7 +6170,7 @@ snapshots: '@push.rocks/lik': 6.1.0 '@push.rocks/smartenv': 5.0.12 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartstring@4.0.15': dependencies: @@ -5894,7 +6217,7 @@ snapshots: '@types/js-yaml': 3.12.10 js-yaml: 3.14.1 - '@push.rocks/tapbundle@5.6.2(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4)': + '@push.rocks/tapbundle@5.6.3(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4)': dependencies: '@open-wc/testing': 4.0.0 '@push.rocks/consolecolor': 2.0.2 @@ -5905,7 +6228,7 @@ snapshots: '@push.rocks/smartexpect': 1.6.1 '@push.rocks/smartfile': 11.2.0 '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartmongo': 2.0.11(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrequest': 2.1.0 @@ -5932,7 +6255,7 @@ snapshots: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@push.rocks/smarttime': 4.1.1 '@push.rocks/smartunique': 3.0.9 @@ -5957,7 +6280,7 @@ snapshots: '@push.rocks/smartenv': 5.0.12 '@push.rocks/smartjson': 5.0.20 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartrx': 3.0.10 '@tempfix/idb': 8.0.3 fake-indexeddb: 5.0.2 @@ -6352,6 +6675,18 @@ snapshots: '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 + '@smithy/signature-v4@5.1.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + optional: true + '@smithy/smithy-client@4.2.0': dependencies: '@smithy/core': 3.2.0 @@ -6494,20 +6829,24 @@ snapshots: dependencies: type-fest: 4.37.0 - '@tsclass/tsclass@8.2.0': + '@tsclass/tsclass@8.2.1': dependencies: - type-fest: 4.39.1 + type-fest: 4.40.0 + + '@tsclass/tsclass@9.0.0': + dependencies: + type-fest: 4.40.0 '@types/accepts@1.3.7': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/babel__code-frame@7.0.6': {} '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/buffer-json@2.0.3': {} @@ -6523,17 +6862,17 @@ snapshots: '@types/clean-css@4.2.11': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 source-map: 0.6.1 '@types/co-body@6.1.3': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/qs': 6.9.18 '@types/connect@3.4.38': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/content-disposition@0.5.8': {} @@ -6544,11 +6883,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.1 '@types/keygrip': 1.0.6 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/cors@2.8.17': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/debounce@1.2.4': {} @@ -6562,14 +6901,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -6600,30 +6939,30 @@ snapshots: '@types/from2@2.3.5': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/gunzip-maybe@1.4.2': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/hast@3.0.4': dependencies: @@ -6657,7 +6996,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/keygrip@1.0.6': {} @@ -6674,7 +7013,7 @@ snapshots: '@types/http-errors': 2.0.4 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/mdast@4.0.4': dependencies: @@ -6692,9 +7031,9 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 - '@types/node@22.14.0': + '@types/node@22.15.2': dependencies: undici-types: 6.21.0 @@ -6712,19 +7051,19 @@ snapshots: '@types/s3rver@3.7.4': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/semver@7.7.0': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/send': 0.17.4 '@types/sinon-chai@3.2.12': @@ -6744,11 +7083,11 @@ snapshots: '@types/tar-stream@2.2.3': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/through2@2.0.41': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/triple-beam@1.3.5': {} @@ -6772,18 +7111,18 @@ snapshots: '@types/whatwg-url@8.2.2': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/webidl-conversions': 7.0.3 '@types/which@3.0.4': {} '@types/ws@7.4.7': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/ws@8.18.0': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 '@types/yargs-parser@21.0.3': {} @@ -6793,7 +7132,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.2 optional: true '@ungap/structured-clone@1.3.0': {} @@ -6809,11 +7148,11 @@ snapshots: '@web/parse5-utils': 2.1.0 chokidar: 4.0.3 clone: 2.1.2 - es-module-lexer: 1.6.0 + es-module-lexer: 1.7.0 get-stream: 6.0.1 is-stream: 2.0.1 isbinaryfile: 5.0.4 - koa: 2.16.0 + koa: 2.16.1 koa-etag: 4.0.0 koa-send: 5.0.1 koa-static: 5.0.0 @@ -7405,7 +7744,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.17 - '@types/node': 22.14.0 + '@types/node': 22.15.2 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -7434,7 +7773,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.6.0: {} + es-module-lexer@1.7.0: {} es-object-atoms@1.1.1: dependencies: @@ -8166,7 +8505,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.14.0 + '@types/node': 22.15.2 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -8244,7 +8583,7 @@ snapshots: transitivePeerDependencies: - supports-color - koa@2.16.0: + koa@2.16.1: dependencies: accepts: 1.3.8 cache-content-type: 1.0.1 @@ -8284,16 +8623,32 @@ snapshots: '@lit/reactive-element': 2.0.4 lit-html: 3.2.1 + lit-element@4.2.0: + dependencies: + '@lit-labs/ssr-dom-shim': 1.3.0 + '@lit/reactive-element': 2.1.0 + lit-html: 3.3.0 + lit-html@3.2.1: dependencies: '@types/trusted-types': 2.0.7 + lit-html@3.3.0: + dependencies: + '@types/trusted-types': 2.0.7 + lit@3.2.1: dependencies: '@lit/reactive-element': 2.0.4 lit-element: 4.1.1 lit-html: 3.2.1 + lit@3.3.0: + dependencies: + '@lit/reactive-element': 2.1.0 + lit-element: 4.2.0 + lit-html: 3.3.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -8796,7 +9151,7 @@ snapshots: '@types/whatwg-url': 11.0.5 whatwg-url: 14.2.0 - mongodb-memory-server-core@10.1.4(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4): + mongodb-memory-server-core@10.1.4(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4): dependencies: async-mutex: 0.5.0 camelcase: 6.3.0 @@ -8804,7 +9159,7 @@ snapshots: find-cache-dir: 3.3.2 follow-redirects: 1.15.9(debug@4.4.0) https-proxy-agent: 7.0.6 - mongodb: 6.15.0(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + mongodb: 6.16.0(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) new-find-package-json: 2.0.0 semver: 7.7.1 tar-stream: 3.1.7 @@ -8820,9 +9175,9 @@ snapshots: - socks - supports-color - mongodb-memory-server@10.1.4(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4): + mongodb-memory-server@10.1.4(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4): dependencies: - mongodb-memory-server-core: 10.1.4(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4) + mongodb-memory-server-core: 10.1.4(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4) tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/credential-providers' @@ -8840,18 +9195,18 @@ snapshots: mongodb-connection-string-url: 2.6.0 socks: 2.8.4 optionalDependencies: - '@aws-sdk/credential-providers': 3.782.0 - '@mongodb-js/saslprep': 1.2.1 + '@aws-sdk/credential-providers': 3.796.0 + '@mongodb-js/saslprep': 1.2.2 transitivePeerDependencies: - aws-crt - mongodb@6.15.0(@aws-sdk/credential-providers@3.782.0)(socks@2.8.4): + mongodb@6.16.0(@aws-sdk/credential-providers@3.796.0)(socks@2.8.4): dependencies: - '@mongodb-js/saslprep': 1.2.1 + '@mongodb-js/saslprep': 1.2.2 bson: 6.10.3 mongodb-connection-string-url: 3.0.2 optionalDependencies: - '@aws-sdk/credential-providers': 3.782.0 + '@aws-sdk/credential-providers': 3.796.0 socks: 2.8.4 ms@2.0.0: {} @@ -9324,7 +9679,7 @@ snapshots: fast-xml-parser: 3.21.1 fs-extra: 8.1.0 he: 1.2.0 - koa: 2.16.0 + koa: 2.16.1 koa-logger: 3.2.1 lodash: 4.17.21 statuses: 2.0.1 @@ -9676,7 +10031,7 @@ snapshots: dependencies: punycode: 2.3.1 - tr46@5.1.0: + tr46@5.1.1: dependencies: punycode: 2.3.1 @@ -9713,7 +10068,7 @@ snapshots: type-fest@4.37.0: {} - type-fest@4.39.1: {} + type-fest@4.40.0: {} type-is@1.6.18: dependencies: @@ -9810,7 +10165,7 @@ snapshots: whatwg-url@14.2.0: dependencies: - tr46: 5.1.0 + tr46: 5.1.1 webidl-conversions: 7.0.0 which@2.0.2: diff --git a/test/test.watch.ts b/test/test.watch.ts index 9d1c112..9deabea 100644 --- a/test/test.watch.ts +++ b/test/test.watch.ts @@ -60,6 +60,43 @@ tap.test('should watch a collection', async (toolsArg) => { await done.promise; }); +// ======= New tests for EventEmitter and buffering support ======= +tap.test('should emit change via EventEmitter', async (tools) => { + const done = tools.defer(); + const watcher = await House.watch({}); + watcher.on('change', async (houseArg) => { + // Expect a House instance + expect(houseArg).toBeDefined(); + // Clean up + await watcher.stop(); + done.resolve(); + }); + // Trigger an insert to generate a change event + const h = new House(); + await h.save(); + await done.promise; +}); + +tap.test('should buffer change events when bufferTimeMs is set', async (tools) => { + const done = tools.defer(); + // bufferTimeMs collects events into arrays every 50ms + const watcher = await House.watch({}, { bufferTimeMs: 50 }); + let received: House[]; + watcher.changeSubject.subscribe(async (batch: House[]) => { + if (batch && batch.length > 0) { + received = batch; + await watcher.stop(); + done.resolve(); + } + }); + // Rapidly insert multiple docs + const docs = [new House(), new House(), new House()]; + for (const doc of docs) await doc.save(); + await done.promise; + // All inserts should be in one buffered batch + expect(received.length).toEqual(docs.length); +}); + // ======================================= // close the database connection // ======================================= diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 641b448..13efcdd 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/smartdata', - version: '5.15.1', + version: '5.16.0', description: 'An advanced library for NoSQL data organization and manipulation using TypeScript with support for MongoDB, data validation, collections, and custom data types.' } diff --git a/ts/classes.collection.ts b/ts/classes.collection.ts index a3b2c76..27e9b59 100644 --- a/ts/classes.collection.ts +++ b/ts/classes.collection.ts @@ -256,24 +256,40 @@ export class SmartdataCollection { } /** - * watches the collection while applying a filter + * Watches the collection, returning a SmartdataDbWatcher with RxJS and EventEmitter support. + * @param filterObject match filter for change stream + * @param opts optional MongoDB ChangeStreamOptions & { bufferTimeMs } to buffer events + * @param smartdataDbDocArg document class for instance creation */ public async watch( filterObject: any, - smartdataDbDocArg: typeof SmartDataDbDoc, + opts: (plugins.mongodb.ChangeStreamOptions & { bufferTimeMs?: number }) = {}, + smartdataDbDocArg?: typeof SmartDataDbDoc, ): Promise { await this.init(); + // Extract bufferTimeMs from options + const { bufferTimeMs, fullDocument, ...otherOptions } = opts || {}; + // Determine fullDocument behavior: default to 'updateLookup' + const changeStreamOptions: plugins.mongodb.ChangeStreamOptions = { + ...otherOptions, + fullDocument: + fullDocument === undefined + ? 'updateLookup' + : fullDocument === true + ? 'updateLookup' + : fullDocument, + } as any; + // Build pipeline with match if provided + const pipeline = filterObject ? [{ $match: filterObject }] : []; const changeStream = this.mongoDbCollection.watch( - [ - { - $match: filterObject, - }, - ], - { - fullDocument: 'updateLookup', - }, + pipeline, + changeStreamOptions, + ); + const smartdataWatcher = new SmartdataDbWatcher( + changeStream, + smartdataDbDocArg, + { bufferTimeMs }, ); - const smartdataWatcher = new SmartdataDbWatcher(changeStream, smartdataDbDocArg); await smartdataWatcher.readyDeferred.promise; return smartdataWatcher; } diff --git a/ts/classes.doc.ts b/ts/classes.doc.ts index 620fc77..ba11633 100644 --- a/ts/classes.doc.ts +++ b/ts/classes.doc.ts @@ -305,13 +305,20 @@ export class SmartDataDbDoc( this: plugins.tsclass.typeFest.Class, filterArg: plugins.tsclass.typeFest.PartialDeep, - ) { + opts?: plugins.mongodb.ChangeStreamOptions & { bufferTimeMs?: number }, + ): Promise> { const collection: SmartdataCollection = (this as any).collection; const watcher: SmartdataDbWatcher = await collection.watch( convertFilterForMongoDb(filterArg), + opts || {}, this as any, ); return watcher; diff --git a/ts/classes.watcher.ts b/ts/classes.watcher.ts index 1d15009..2dcc4c8 100644 --- a/ts/classes.watcher.ts +++ b/ts/classes.watcher.ts @@ -1,37 +1,73 @@ import { SmartDataDbDoc } from './classes.doc.js'; import * as plugins from './plugins.js'; +import { EventEmitter } from 'events'; /** * a wrapper for the native mongodb cursor. Exposes better */ -export class SmartdataDbWatcher { +/** + * Wraps a MongoDB ChangeStream with RxJS and EventEmitter support. + */ +export class SmartdataDbWatcher extends EventEmitter { // STATIC public readyDeferred = plugins.smartpromise.defer(); // INSTANCE private changeStream: plugins.mongodb.ChangeStream; - - public changeSubject = new plugins.smartrx.rxjs.Subject(); + private rawSubject: plugins.smartrx.rxjs.Subject; + /** Emits change documents (or arrays of documents if buffered) */ + public changeSubject: any; + /** + * @param changeStreamArg native MongoDB ChangeStream + * @param smartdataDbDocArg document class for instance creation + * @param opts.bufferTimeMs optional milliseconds to buffer events via RxJS + */ constructor( changeStreamArg: plugins.mongodb.ChangeStream, smartdataDbDocArg: typeof SmartDataDbDoc, + opts?: { bufferTimeMs?: number }, ) { + super(); + this.rawSubject = new plugins.smartrx.rxjs.Subject(); + // Apply buffering if requested + if (opts && opts.bufferTimeMs) { + this.changeSubject = this.rawSubject.pipe(plugins.smartrx.rxjs.ops.bufferTime(opts.bufferTimeMs)); + } else { + this.changeSubject = this.rawSubject; + } this.changeStream = changeStreamArg; this.changeStream.on('change', async (item: any) => { - if (!item.fullDocument) { - this.changeSubject.next(null); - return; + let docInstance: T = null; + if (item.fullDocument) { + docInstance = smartdataDbDocArg.createInstanceFromMongoDbNativeDoc( + item.fullDocument + ) as any as T; } - this.changeSubject.next( - smartdataDbDocArg.createInstanceFromMongoDbNativeDoc(item.fullDocument) as any as T, - ); + // Notify subscribers + this.rawSubject.next(docInstance); + this.emit('change', docInstance); }); + // Signal readiness after one tick plugins.smartdelay.delayFor(0).then(() => { this.readyDeferred.resolve(); }); } - public async close() { + /** + * Close the change stream, complete the RxJS subject, and remove listeners. + */ + public async close(): Promise { + // Close MongoDB ChangeStream await this.changeStream.close(); + // Complete the subject to teardown any buffering operators + this.rawSubject.complete(); + // Remove all EventEmitter listeners + this.removeAllListeners(); + } + /** + * Alias for close(), matching README usage + */ + public async stop(): Promise { + return this.close(); } }