From c0eaae35a9d708757334804306adb0c313683643 Mon Sep 17 00:00:00 2001 From: Per Bergland Date: Sun, 25 Feb 2024 19:26:54 +0100 Subject: [PATCH 01/30] Add method that checks for valid data before pushing --- packages/mongo/oplog_observe_driver.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/mongo/oplog_observe_driver.js b/packages/mongo/oplog_observe_driver.js index 8a9cf111e9..3a47b965d7 100644 --- a/packages/mongo/oplog_observe_driver.js +++ b/packages/mongo/oplog_observe_driver.js @@ -79,6 +79,10 @@ OplogObserveDriver = function (options) { self._stopped = false; self._stopHandles = []; + self._addStopHandles = function (newStopHandles) { + check(newStopHandles, [{ stop: Function }]) + self._stopHandles.push(newStopHandles); + } Package['facts-base'] && Package['facts-base'].Facts.incrementServerFact( "mongo-livedata", "observe-drivers-oplog", 1); @@ -107,14 +111,14 @@ OplogObserveDriver = function (options) { // If the oplog handle tells us that it skipped some entries (because it got // behind, say), re-poll. - self._stopHandles.push(self._mongoHandle._oplogHandle.onSkippedEntries( + self._addStopHandles(self._mongoHandle._oplogHandle.onSkippedEntries( finishIfNeedToPollQuery(function () { return self._needToPollQuery(); }) )); forEachTrigger(self._cursorDescription, function (trigger) { - self._stopHandles.push(self._mongoHandle._oplogHandle.onOplogEntry( + self._addStopHandles(self._mongoHandle._oplogHandle.onOplogEntry( trigger, function (notification) { finishIfNeedToPollQuery(function () { var op = notification.op; @@ -137,7 +141,7 @@ OplogObserveDriver = function (options) { }); // XXX ordering w.r.t. everything else? - self._stopHandles.push(listenAll( + self._addStopHandles(listenAll( self._cursorDescription, function () { // If we're not in a pre-fire write fence, we don't have to do anything. var fence = DDPServer._getCurrentFence(); @@ -180,7 +184,7 @@ OplogObserveDriver = function (options) { // When Mongo fails over, we need to repoll the query, in case we processed an // oplog entry that got rolled back. - self._stopHandles.push(self._mongoHandle._onFailover(finishIfNeedToPollQuery( + self._addStopHandles(self._mongoHandle._onFailover(finishIfNeedToPollQuery( function () { return self._needToPollQuery(); }))); From 37cafd7421de868bef2020d8e18960e8b3988d30 Mon Sep 17 00:00:00 2001 From: Per Bergland Date: Mon, 26 Feb 2024 20:45:04 +0100 Subject: [PATCH 02/30] move constructor code to _init and add loads of missing awaits --- .../.npm/package/npm-shrinkwrap.json | 18 +- packages/mongo/mongo_driver.js | 24 +- packages/mongo/oplog_observe_driver.js | 177 ++++----- packages/mongo/oplog_tailing.js | 2 +- packages/mongo/polling_observe_driver.js | 76 ++-- .../.npm/package/npm-shrinkwrap.json | 342 +++++++++--------- .../webapp/.npm/package/npm-shrinkwrap.json | 6 +- 7 files changed, 327 insertions(+), 318 deletions(-) diff --git a/packages/minifier-js/.npm/package/npm-shrinkwrap.json b/packages/minifier-js/.npm/package/npm-shrinkwrap.json index e8cf86025b..32ea70e660 100644 --- a/packages/minifier-js/.npm/package/npm-shrinkwrap.json +++ b/packages/minifier-js/.npm/package/npm-shrinkwrap.json @@ -2,14 +2,14 @@ "lockfileVersion": 4, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==" }, "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" }, "@jridgewell/set-array": { "version": "1.1.2", @@ -27,9 +27,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==" + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", + "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==" }, "acorn": { "version": "8.11.3", diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 0ac003a35b..81c5ec28db 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -1553,9 +1553,9 @@ Object.assign(MongoConnection.prototype, { // listenCallback is the same kind of (notification, complete) callback passed // to InvalidationCrossbar.listen. -listenAll = function (cursorDescription, listenCallback) { - var listeners = []; - forEachTrigger(cursorDescription, function (trigger) { +listenAll = async function (cursorDescription, listenCallback) { + const listeners = []; + await forEachTrigger(cursorDescription, function (trigger) { listeners.push(DDPServer._InvalidationCrossbar.listen( trigger, listenCallback)); }); @@ -1569,20 +1569,20 @@ listenAll = function (cursorDescription, listenCallback) { }; }; -forEachTrigger = function (cursorDescription, triggerCallback) { - var key = {collection: cursorDescription.collectionName}; - var specificIds = LocalCollection._idsMatchedBySelector( +forEachTrigger = async function (cursorDescription, triggerCallback) { + const key = {collection: cursorDescription.collectionName}; + const specificIds = LocalCollection._idsMatchedBySelector( cursorDescription.selector); if (specificIds) { - _.each(specificIds, function (id) { - triggerCallback(_.extend({id: id}, key)); - }); - triggerCallback(_.extend({dropCollection: true, id: null}, key)); + for (const id of specificIds) { + await triggerCallback(_.extend({id: id}, key)); + } + await triggerCallback(_.extend({dropCollection: true, id: null}, key)); } else { - triggerCallback(key); + await triggerCallback(key); } // Everyone cares about the database being dropped. - triggerCallback({ dropDatabase: true }); + await triggerCallback({ dropDatabase: true }); }; // observeChanges for tailable cursors on capped collections. diff --git a/packages/mongo/oplog_observe_driver.js b/packages/mongo/oplog_observe_driver.js index 3a47b965d7..77160e40e2 100644 --- a/packages/mongo/oplog_observe_driver.js +++ b/packages/mongo/oplog_observe_driver.js @@ -1,4 +1,5 @@ import { oplogV2V1Converter } from "./oplog_v2_converter"; +import { check, Match } from 'meteor/check'; var PHASE = { QUERYING: "QUERYING", @@ -28,7 +29,7 @@ var currentId = 0; // callbacks (and a ready() invocation) to the ObserveMultiplexer, and you stop // it by calling the stop() method. OplogObserveDriver = function (options) { - var self = this; + const self = this; self._usesOplog = true; // tests look at this self._id = currentId; @@ -42,10 +43,10 @@ OplogObserveDriver = function (options) { throw Error("OplogObserveDriver only supports unordered observeChanges"); } - var sorter = options.sorter; + const sorter = options.sorter; // We don't support $near and other geo-queries so it's OK to initialize the // comparator only once in the constructor. - var comparator = sorter && sorter.getComparator(); + const comparator = sorter && sorter.getComparator(); if (options.cursorDescription.options.limit) { // There are several properties ordered driver implements: @@ -57,7 +58,7 @@ OplogObserveDriver = function (options) { // into published set. // - _published - Max Heap (also implements IdMap methods) - var heapOptions = { IdMap: LocalCollection._IdMap }; + const heapOptions = { IdMap: LocalCollection._IdMap }; self._limit = self._cursorDescription.options.limit; self._comparator = comparator; self._sorter = sorter; @@ -80,7 +81,9 @@ OplogObserveDriver = function (options) { self._stopped = false; self._stopHandles = []; self._addStopHandles = function (newStopHandles) { - check(newStopHandles, [{ stop: Function }]) + const expectedPattern = Match.ObjectIncluding({ stop: Function }); + // Single item or array + check(newStopHandles, Match.OneOf([expectedPattern], expectedPattern)); self._stopHandles.push(newStopHandles); } @@ -92,7 +95,7 @@ OplogObserveDriver = function (options) { self._matcher = options.matcher; // we are now using projection, not fields in the cursor description even if you pass {fields} // in the cursor construction - var projection = self._cursorDescription.options.fields || self._cursorDescription.options.projection || {}; + const projection = self._cursorDescription.options.fields || self._cursorDescription.options.projection || {}; self._projectionFn = LocalCollection._compileProjection(projection); // Projection function, result of combining important fields for selector and // existing fields projection @@ -109,90 +112,94 @@ OplogObserveDriver = function (options) { self._requeryWhenDoneThisQuery = false; self._writesToCommitWhenWeReachSteady = []; - // If the oplog handle tells us that it skipped some entries (because it got - // behind, say), re-poll. - self._addStopHandles(self._mongoHandle._oplogHandle.onSkippedEntries( - finishIfNeedToPollQuery(function () { - return self._needToPollQuery(); - }) - )); - forEachTrigger(self._cursorDescription, function (trigger) { - self._addStopHandles(self._mongoHandle._oplogHandle.onOplogEntry( - trigger, function (notification) { - finishIfNeedToPollQuery(function () { - var op = notification.op; - if (notification.dropCollection || notification.dropDatabase) { - // Note: this call is not allowed to block on anything (especially - // on waiting for oplog entries to catch up) because that will block - // onOplogEntry! - return self._needToPollQuery(); - } else { - // All other operators should be handled depending on phase - if (self._phase === PHASE.QUERYING) { - return self._handleOplogEntryQuerying(op); - } else { - return self._handleOplogEntrySteadyOrFetching(op); - } - } - })(); - } - )); - }); - // XXX ordering w.r.t. everything else? - self._addStopHandles(listenAll( - self._cursorDescription, function () { - // If we're not in a pre-fire write fence, we don't have to do anything. - var fence = DDPServer._getCurrentFence(); - if (!fence || fence.fired) - return; - - if (fence._oplogObserveDrivers) { - fence._oplogObserveDrivers[self._id] = self; - return; - } - - fence._oplogObserveDrivers = {}; - fence._oplogObserveDrivers[self._id] = self; - - fence.onBeforeFire(async function () { - var drivers = fence._oplogObserveDrivers; - delete fence._oplogObserveDrivers; - - // This fence cannot fire until we've caught up to "this point" in the - // oplog, and all observers made it back to the steady state. - await self._mongoHandle._oplogHandle.waitUntilCaughtUp(); - - for (const driver of Object.values(drivers)) { - if (driver._stopped) - continue; - - var write = await fence.beginWrite(); - if (driver._phase === PHASE.STEADY) { - // Make sure that all of the callbacks have made it through the - // multiplexer and been delivered to ObserveHandles before committing - // writes. - await driver._multiplexer.onFlush(write.committed); - } else { - driver._writesToCommitWhenWeReachSteady.push(write); - } - } - }); - } - )); - - // When Mongo fails over, we need to repoll the query, in case we processed an - // oplog entry that got rolled back. - self._addStopHandles(self._mongoHandle._onFailover(finishIfNeedToPollQuery( - function () { - return self._needToPollQuery(); - }))); -}; + }; _.extend(OplogObserveDriver.prototype, { - _init: function() { + _init: async function() { const self = this; + + // If the oplog handle tells us that it skipped some entries (because it got + // behind, say), re-poll. + self._addStopHandles(self._mongoHandle._oplogHandle.onSkippedEntries( + finishIfNeedToPollQuery(function () { + return self._needToPollQuery(); + }) + )); + + await forEachTrigger(self._cursorDescription, async function (trigger) { + self._addStopHandles(await self._mongoHandle._oplogHandle.onOplogEntry( + trigger, function (notification) { + finishIfNeedToPollQuery(function () { + const op = notification.op; + if (notification.dropCollection || notification.dropDatabase) { + // Note: this call is not allowed to block on anything (especially + // on waiting for oplog entries to catch up) because that will block + // onOplogEntry! + return self._needToPollQuery(); + } else { + // All other operators should be handled depending on phase + if (self._phase === PHASE.QUERYING) { + return self._handleOplogEntryQuerying(op); + } else { + return self._handleOplogEntrySteadyOrFetching(op); + } + } + })(); + } + )); + }); + + // XXX ordering w.r.t. everything else? + self._addStopHandles(await listenAll( + self._cursorDescription, function () { + // If we're not in a pre-fire write fence, we don't have to do anything. + const fence = DDPServer._getCurrentFence(); + if (!fence || fence.fired) + return; + + if (fence._oplogObserveDrivers) { + fence._oplogObserveDrivers[self._id] = self; + return; + } + + fence._oplogObserveDrivers = {}; + fence._oplogObserveDrivers[self._id] = self; + + fence.onBeforeFire(async function () { + const drivers = fence._oplogObserveDrivers; + delete fence._oplogObserveDrivers; + + // This fence cannot fire until we've caught up to "this point" in the + // oplog, and all observers made it back to the steady state. + await self._mongoHandle._oplogHandle.waitUntilCaughtUp(); + + for (const driver of Object.values(drivers)) { + if (driver._stopped) + continue; + + const write = await fence.beginWrite(); + if (driver._phase === PHASE.STEADY) { + // Make sure that all of the callbacks have made it through the + // multiplexer and been delivered to ObserveHandles before committing + // writes. + await driver._multiplexer.onFlush(write.committed); + } else { + driver._writesToCommitWhenWeReachSteady.push(write); + } + } + }); + } + )); + + // When Mongo fails over, we need to repoll the query, in case we processed an + // oplog entry that got rolled back. + self._addStopHandles(self._mongoHandle._onFailover(finishIfNeedToPollQuery( + function () { + return self._needToPollQuery(); + }))); + // Give _observeChanges a chance to add the new ObserveHandle to our // multiplexer, so that the added calls get streamed. return self._runInitialQuery(); diff --git a/packages/mongo/oplog_tailing.js b/packages/mongo/oplog_tailing.js index 5f61d06681..631991fe74 100644 --- a/packages/mongo/oplog_tailing.js +++ b/packages/mongo/oplog_tailing.js @@ -189,7 +189,7 @@ Object.assign(OplogHandle.prototype, { // currently visible. // XXX become convinced that this is actually safe even if oplogConnection // is some kind of pool - waitUntilCaughtUp: function () { + waitUntilCaughtUp: async function () { return this._waitUntilCaughtUp(); }, diff --git a/packages/mongo/polling_observe_driver.js b/packages/mongo/polling_observe_driver.js index 3948a345fa..c65c96e589 100644 --- a/packages/mongo/polling_observe_driver.js +++ b/packages/mongo/polling_observe_driver.js @@ -37,47 +37,49 @@ PollingObserveDriver = function (options) { // XXX figure out if we still need a queue self._taskQueue = new Meteor._AsynchronousQueue(); - var listenersHandle = listenAll( - self._cursorDescription, function (notification) { - // When someone does a transaction that might affect us, schedule a poll - // of the database. If that transaction happens inside of a write fence, - // block the fence until we've polled and notified observers. - var fence = DDPServer._getCurrentFence(); - if (fence) - self._pendingWrites.push(fence.beginWrite()); - // Ensure a poll is scheduled... but if we already know that one is, - // don't hit the throttled _ensurePollIsScheduled function (which might - // lead to us calling it unnecessarily in ms). - if (self._pollsScheduledButNotStarted === 0) - self._ensurePollIsScheduled(); - } - ); - self._stopCallbacks.push(async function () { await listenersHandle.stop(); }); - - // every once and a while, poll even if we don't think we're dirty, for - // eventual consistency with database writes from outside the Meteor - // universe. - // - // For testing, there's an undocumented callback argument to observeChanges - // which disables time-based polling and gets called at the beginning of each - // poll. - if (options._testOnlyPollCallback) { - self._testOnlyPollCallback = options._testOnlyPollCallback; - } else { - var pollingInterval = - self._cursorDescription.options.pollingIntervalMs || - self._cursorDescription.options._pollingInterval || // COMPAT with 1.2 - POLLING_INTERVAL_MS; - var intervalHandle = Meteor.setInterval( - _.bind(self._ensurePollIsScheduled, self), pollingInterval); - self._stopCallbacks.push(function () { - Meteor.clearInterval(intervalHandle); - }); - } + }; _.extend(PollingObserveDriver.prototype, { _init: async function () { + const listenersHandle = await listenAll( + self._cursorDescription, function (notification) { + // When someone does a transaction that might affect us, schedule a poll + // of the database. If that transaction happens inside of a write fence, + // block the fence until we've polled and notified observers. + var fence = DDPServer._getCurrentFence(); + if (fence) + self._pendingWrites.push(fence.beginWrite()); + // Ensure a poll is scheduled... but if we already know that one is, + // don't hit the throttled _ensurePollIsScheduled function (which might + // lead to us calling it unnecessarily in ms). + if (self._pollsScheduledButNotStarted === 0) + self._ensurePollIsScheduled(); + } + ); + self._stopCallbacks.push(async function () { await listenersHandle.stop(); }); + + // every once and a while, poll even if we don't think we're dirty, for + // eventual consistency with database writes from outside the Meteor + // universe. + // + // For testing, there's an undocumented callback argument to observeChanges + // which disables time-based polling and gets called at the beginning of each + // poll. + if (options._testOnlyPollCallback) { + self._testOnlyPollCallback = options._testOnlyPollCallback; + } else { + var pollingInterval = + self._cursorDescription.options.pollingIntervalMs || + self._cursorDescription.options._pollingInterval || // COMPAT with 1.2 + POLLING_INTERVAL_MS; + var intervalHandle = Meteor.setInterval( + _.bind(self._ensurePollIsScheduled, self), pollingInterval); + self._stopCallbacks.push(function () { + Meteor.clearInterval(intervalHandle); + }); + } + // Make sure we actually poll soon! await this._unthrottledEnsurePollIsScheduled(); diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index 7b84d3ddb8..6dff75d65b 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -74,114 +74,114 @@ } }, "@aws-sdk/client-cognito-identity": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.515.0.tgz", - "integrity": "sha512-e51ImjjRLzXkPEYguvGCbhWPNhoV2OGS6mKHCR940XEeImt04yE1tytYP1vXYpPICmuYgz79BV0FOC9J5N9bvg==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.521.0.tgz", + "integrity": "sha512-UomYWcCpM7OZUt1BDlY3guO6mnA4VXzMkNjFbVtWibKQkk4LhcIUXb6SxWSw/gujIrlOZywldjyj8bL6V374IQ==" }, "@aws-sdk/client-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.515.0.tgz", - "integrity": "sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.521.0.tgz", + "integrity": "sha512-aEx8kEvWmTwCja6hvIZd5PvxHsI1HQZkckXhw1UrkDPnfcAwQoQAgselI7D+PVT5qQDIjXRm0NpsvBLaLj6jZw==" }, "@aws-sdk/client-sso-oidc": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.515.0.tgz", - "integrity": "sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.521.0.tgz", + "integrity": "sha512-MhX0CjV/543MR7DRPr3lA4ZDpGGKopp8cyV4EkSGXB7LMN//eFKKDhuZDlpgWU+aFe2A3DIqlNJjqgs08W0cSA==" }, "@aws-sdk/client-sts": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.515.0.tgz", - "integrity": "sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.521.0.tgz", + "integrity": "sha512-f1J5NDbntcwIHJqhks89sQvk7UXPmN0X0BZ2mgpj6pWP+NlPqy+1t1bia8qRhEuNITaEigoq6rqe9xaf4FdY9A==" }, "@aws-sdk/core": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.513.0.tgz", - "integrity": "sha512-L+9DL4apWuqNKVOMJ8siAuWoRM9rZf9w1iPv8S2o83WO2jVK7E/m+rNW1dFo9HsA5V1ccDl2H2qLXx24HiHmOw==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.521.0.tgz", + "integrity": "sha512-KovKmW7yg/P2HVG2dhV2DAJLyoeGelgsnSGHaktXo/josJ3vDGRNqqRSgVaqKFxnD98dPEMLrjkzZumNUNGvLw==" }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.515.0.tgz", - "integrity": "sha512-pWMJFhNc6bLbCpKhYXWWa23wMyhpFFyw3kF/6ea+95JQHF0FY2l4wDQa7ynE4hW4Wf5oA3Sf7Wf87pp9iAHubQ==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.521.0.tgz", + "integrity": "sha512-HsLKT0MOQ1/3qM2smxgafuf7B9sbie/gsKEgQi9De7UhA8N9yGaXdo3HQFbyRbv4eZ0fj9Ja++UgFypUk4c3Kw==" }, "@aws-sdk/credential-provider-env": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.515.0.tgz", - "integrity": "sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.521.0.tgz", + "integrity": "sha512-OwblTJNdDAoqYVwcNfhlKDp5z+DINrjBfC6ZjNdlJpTXgxT3IqzuilTJTlydQ+2eG7aXfV9OwTVRQWdCmzFuKA==" }, "@aws-sdk/credential-provider-http": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.515.0.tgz", - "integrity": "sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.521.0.tgz", + "integrity": "sha512-yJM1yNGj2XFH8v6/ffWrFY5nC3/2+8qZ8c4mMMwZru8bYXeuSV4+NNfE59HUWvkAF7xP76u4gr4I8kNrMPTlfg==" }, "@aws-sdk/credential-provider-ini": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.515.0.tgz", - "integrity": "sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.521.0.tgz", + "integrity": "sha512-HuhP1AlKgvBBxUIwxL/2DsDemiuwgbz1APUNSeJhDBF6JyZuxR0NU8zEZkvH9b4ukTcmcKGABpY0Wex4rAh3xw==" }, "@aws-sdk/credential-provider-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.515.0.tgz", - "integrity": "sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.521.0.tgz", + "integrity": "sha512-N9SR4gWI10qh4V2myBcTw8IlX3QpsMMxa4Q8d/FHiAX6eNV7e6irXkXX8o7+J1gtCRy1AtBMqAdGsve4GVqYMQ==" }, "@aws-sdk/credential-provider-process": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.515.0.tgz", - "integrity": "sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.521.0.tgz", + "integrity": "sha512-EcJjcrpdklxbRAFFgSLk6QGVtvnfZ80ItfZ47VL9LkhWcDAkQ1Oi0esHq+zOgvjb7VkCyD3Q9CyEwT6MlJsriA==" }, "@aws-sdk/credential-provider-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.515.0.tgz", - "integrity": "sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.521.0.tgz", + "integrity": "sha512-GAfc0ji+fC2k9VngYM3zsS1J5ojfWg0WUOBzavvHzkhx/O3CqOt82Vfikg3PvemAp9yOgKPMaasTHVeipNLBBQ==" }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.515.0.tgz", - "integrity": "sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.521.0.tgz", + "integrity": "sha512-ZPPJqdbPOE4BkdrPrYBtsWg0Zy5b+GY1sbMWLQt0tcISgN5EIoePCS2pGNWnBUmBT+mibMQCVv9fOQpqzRkvAw==" }, "@aws-sdk/credential-providers": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.515.0.tgz", - "integrity": "sha512-XQ9maVLTtv6iJbOYiRS+IvaPlFkJDuxfpfxuky3aPzQpxDilU4cf1CfIDua8qivZKQ4QQOd1EaBMXPIpLI1ZTQ==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.521.0.tgz", + "integrity": "sha512-PYd93rIF99TtRYwFCKr/3G/eEMjQzEVFuX3lUoKWrNgDCd+Jeor/ol4HlDoeiSX/Y37HcFnvAFCKJwDGHOPsLw==" }, "@aws-sdk/middleware-host-header": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.515.0.tgz", - "integrity": "sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.521.0.tgz", + "integrity": "sha512-Bc4stnMtVAdqosYI1wedFK9tffclCuwpOK/JA4bxbnvSyP1kz4s1HBVT9OOMzdLRLWLwVj/RslXKfSbzOUP7ug==" }, "@aws-sdk/middleware-logger": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.515.0.tgz", - "integrity": "sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.521.0.tgz", + "integrity": "sha512-JJ4nyYvLu3RyyNHo74Rlx6WKxJsAixWCEnnFb6IGRUHvsG+xBGU7HF5koY2log8BqlDLrt4ZUaV/CGy5Dp8Mfg==" }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.515.0.tgz", - "integrity": "sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.521.0.tgz", + "integrity": "sha512-1m5AsC55liTlaYMjc4pIQfjfBHG9LpWgubSl4uUxJSdI++zdA/SRBwXl40p7Ac/y5esweluhWabyiv1g/W4+Xg==" }, "@aws-sdk/middleware-user-agent": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.515.0.tgz", - "integrity": "sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.521.0.tgz", + "integrity": "sha512-+hmQjWDG93wCcJn5QY2MkzAL1aG5wl3FJ/ud2nQOu/Gx7d4QVT/B6VJwoG6GSPVuVPZwzne5n9zPVst6RmWJGA==" }, "@aws-sdk/region-config-resolver": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.515.0.tgz", - "integrity": "sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.521.0.tgz", + "integrity": "sha512-eC2T62nFgQva9Q0Sqoc9xsYyyH9EN2rJtmUKkWsBMf77atpmajAYRl5B/DzLwGHlXGsgVK2tJdU5wnmpQCEwEQ==" }, "@aws-sdk/token-providers": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.515.0.tgz", - "integrity": "sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.521.0.tgz", + "integrity": "sha512-63XxPOn13j87yPWKm6UXOPdMZIMyEyCDJzmlxnIACP8m20S/c6b8xLJ4fE/PUlD0MTKxpFeQbandq5OhnLsWSQ==" }, "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.521.0.tgz", + "integrity": "sha512-H9I3Lut0F9d+kTibrhnTRqDRzhxf/vrDu12FUdTXVZEvVAQ7w9yrVHAZx8j2e8GWegetsQsNitO3KMrj4dA4pw==" }, "@aws-sdk/util-endpoints": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.515.0.tgz", - "integrity": "sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.521.0.tgz", + "integrity": "sha512-lO5+1LeAZycDqgNjQyZdPSdXFQKXaW5bRuQ3UIT3bOCcUAbDI0BYXlPm1huPNTCEkI9ItnDCbISbV0uF901VXw==" }, "@aws-sdk/util-locate-window": { "version": "3.495.0", @@ -189,14 +189,14 @@ "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==" }, "@aws-sdk/util-user-agent-browser": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.515.0.tgz", - "integrity": "sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.521.0.tgz", + "integrity": "sha512-2t3uW6AXOvJ5iiI1JG9zPqKQDc/TRFa+v13aqT5KKw9h3WHFyRUpd4sFQL6Ul0urrq2Zg9cG4NHBkei3k9lsHA==" }, "@aws-sdk/util-user-agent-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.515.0.tgz", - "integrity": "sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==" + "version": "3.521.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.521.0.tgz", + "integrity": "sha512-g4KMEiyLc8DG21eMrp6fJUdfQ9F0fxfCNMDRgf0SE/pWI/u4vuWR2n8obLwq1pMVx7Ksva1NO3dc+a3Rgr0hag==" }, "@aws-sdk/util-utf8-browser": { "version": "3.259.0", @@ -209,44 +209,44 @@ "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==" }, "@smithy/abort-controller": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-iwUxrFm/ZFCXhzhtZ6JnoJzAsqUrVfBAZUTQj8ypXGtIjwXZpKqmgYiuqrDERiydDI5gesqvsC4Rqe57GGhbVg==" }, "@smithy/config-resolver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz", - "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.2.tgz", + "integrity": "sha512-ZDMY63xJVsJl7ei/yIMv9nx8OiEOulwNnQOUDGpIvzoBrcbvYwiMjIMe5mP5J4fUmttKkpiTKwta/7IUriAn9w==" }, "@smithy/core": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.2.tgz", - "integrity": "sha512-tYDmTp0f2TZVE18jAOH1PnmkngLQ+dOGUlMd1u67s87ieueNeyqhja6z/Z4MxhybEiXKOWFOmGjfTZWFxljwJw==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.3.tgz", + "integrity": "sha512-8cT/swERvU1EUMuJF914+psSeVy4+NcNhbRe1WEKN1yIMPE5+Tq5EaPq1HWjKCodcdBIyU9ViTjd62XnebXMHA==" }, "@smithy/credential-provider-imds": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz", - "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.2.tgz", + "integrity": "sha512-a2xpqWzhzcYwImGbFox5qJLf6i5HKdVeOVj7d6kVFElmbS2QW2T4HmefRc5z1huVArk9bh5Rk1NiFp9YBCXU3g==" }, "@smithy/eventstream-codec": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz", - "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.2.tgz", + "integrity": "sha512-2PHrVRixITHSOj3bxfZmY93apGf8/DFiyhRh9W0ukfi07cvlhlRonZ0fjgcqryJjUZ5vYHqqmfIE/Qe1HM9mlw==" }, "@smithy/fetch-http-handler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz", - "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.2.tgz", + "integrity": "sha512-sIGMVwa/8h6eqNjarI3F07gvML3mMXcqBe+BINNLuKsVKXMNBN6wRzeZbbx7lfiJDEHAP28qRns8flHEoBB7zw==" }, "@smithy/hash-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz", - "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.2.tgz", + "integrity": "sha512-3Sgn4s0g4xud1M/j6hQwYCkz04lVJ24wvCAx4xI26frr3Ao6v0o2VZkBpUySTeQbMUBp2DhuzJ0fV1zybzkckw==" }, "@smithy/invalid-dependency": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz", - "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.2.tgz", + "integrity": "sha512-qdgKhkFYxDJnKecx2ANwz3JRkXjm0qDgEnAs5BIfb2z/XqA2l7s9BTH7GTC/RR4E8h6EDCeb5rM2rnARxviqIg==" }, "@smithy/is-array-buffer": { "version": "2.1.1", @@ -254,89 +254,89 @@ "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==" }, "@smithy/middleware-content-length": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz", - "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.2.tgz", + "integrity": "sha512-XEWtul1tHP31EtUIobEyN499paUIbnCTRtjY+ciDCEXW81lZmpjrDG3aL0FxJDPnvatVQuMV1V5eg6MCqTFaLQ==" }, "@smithy/middleware-endpoint": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz", - "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.2.tgz", + "integrity": "sha512-72qbmVwaWcLOd/OT52fszrrlXywPwciwpsRiIk/dIvpcwkpGE9qrYZ2bt/SYcA/ma8Rz9Ni2AbBuSXLDYISS+A==" }, "@smithy/middleware-retry": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz", - "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.2.tgz", + "integrity": "sha512-tlvSK+v9bPHHb0dLWvEaFW2Iz0IeA57ISvSaso36I33u8F8wYqo5FCvenH7TgMVBx57jyJBXOmYCZa9n5gdJIg==" }, "@smithy/middleware-serde": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", - "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.2.tgz", + "integrity": "sha512-XNU6aVIhlSbjuo2XsfZ7rd4HhjTXDlNWxAmhlBfViTW1TNK02CeWdeEntp5XtQKYD//pyTIbYi35EQvIidAkOw==" }, "@smithy/middleware-stack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz", - "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.2.tgz", + "integrity": "sha512-EPGaHGd4XmZcaRYjbhyqiqN/Q/ESxXu5e5TK24CTZUe99y8/XCxmiX8VLMM4H0DI7K3yfElR0wPAAvceoSkTgw==" }, "@smithy/node-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz", - "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.2.tgz", + "integrity": "sha512-QXvpqHSijAm13ZsVkUo92b085UzDvYP1LblWTb3uWi9WilhDvYnVyPLXaryLhOWZ2YvdhK2170T3ZBqtg+quIQ==" }, "@smithy/node-http-handler": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz", - "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.4.0.tgz", + "integrity": "sha512-Mf2f7MMy31W8LisJ9O+7J5cKiNwBwBBLU6biQ7/sFSFdhuOxPN7hOPoZ8vlaFjvrpfOUJw9YOpjGyNTKuvomOQ==" }, "@smithy/property-provider": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz", - "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.2.tgz", + "integrity": "sha512-yaXCVFKzxbSXqOoyA7AdAgXhwdjiLeui7n2P6XLjBCz/GZFdLUJgSY6KL1PevaxT4REMwUSs/bSHAe/0jdzEHw==" }, "@smithy/protocol-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz", - "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.2.0.tgz", + "integrity": "sha512-VRp0YITYIQum+rX4zeZ3cW1wl9r90IQzQN+VLS1NxdSMt6NLsJiJqR9czTxlaeWNrLHsFAETmjmdrS48Ug1liA==" }, "@smithy/querystring-builder": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz", - "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.2.tgz", + "integrity": "sha512-wk6QpuvBBLJF5w8aADsZOtxaHY9cF5MZe1Ry3hSqqBxARdUrMoXi/jukUz5W0ftXGlbA398IN8dIIUj3WXqJXg==" }, "@smithy/querystring-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz", - "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.2.tgz", + "integrity": "sha512-z1yL5Iiagm/UxVy1tcuTFZdfOBK/QtYeK6wfClAJ7cOY7kIaYR6jn1cVXXJmhAQSh1b2ljP4xiZN4Ybj7Tbs5w==" }, "@smithy/service-error-classification": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz", - "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.2.tgz", + "integrity": "sha512-R+gL1pAPuWkH6unFridk57wDH5PFY2IlVg2NUjSAjoaIaU+sxqKf/7AOWIcx9Bdn+xY0/4IRQ69urlC+F3I9gg==" }, "@smithy/shared-ini-file-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz", - "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.2.tgz", + "integrity": "sha512-idHGDJB+gBh+aaIjmWj6agmtNWftoyAenErky74hAtKyUaCvfocSBgEJ2pQ6o68svBluvGIj4NGFgJu0198mow==" }, "@smithy/signature-v4": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz", - "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.2.tgz", + "integrity": "sha512-DdPWaNGIbxzyocR3ncH8xlxQgsqteRADEdCPoivgBzwv17UzKy2obtdi2vwNc5lAJ955bGEkkWef9O7kc1Eocg==" }, "@smithy/smithy-client": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz", - "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.4.0.tgz", + "integrity": "sha512-6/jxk0om9l2s9BcgHtrBn+Hd3xcFGDzxfEJ2FvGpZxIz0S7bgvZg1gyR66O1xf1w9WZBH+W7JClhfSn2gETINw==" }, "@smithy/types": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz", - "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.10.0.tgz", + "integrity": "sha512-QYXQmpIebS8/jYXgyJjCanKZbI4Rr8tBVGBAIdDhA35f025TVjJNW69FJ0TGiDqt+lIGo037YIswq2t2Y1AYZQ==" }, "@smithy/url-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz", - "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.2.tgz", + "integrity": "sha512-KBPi740ciTujUaY+RfQuPABD0QFmgSBN5qNVDCGTryfsbG4jkwC0YnElSzi72m24HegMyxzZDLG4Oh4/97mw2g==" }, "@smithy/util-base64": { "version": "2.1.1", @@ -364,19 +364,19 @@ "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==" }, "@smithy/util-defaults-mode-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz", - "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.2.tgz", + "integrity": "sha512-YmojdmsE7VbvFGJ/8btn/5etLm1HOQkgVX6nMWlB0yBL/Vb//s3aTebUJ66zj2+LNrBS3B9S+18+LQU72Yj0AQ==" }, "@smithy/util-defaults-mode-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.0.tgz", - "integrity": "sha512-iFJp/N4EtkanFpBUtSrrIbtOIBf69KNuve03ic1afhJ9/korDxdM0c6cCH4Ehj/smI9pDCfVv+bqT3xZjF2WaA==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.1.tgz", + "integrity": "sha512-kof7M9Q2qP5yaQn8hHJL3KwozyvIfLe+ys7feifSul6gBAAeoraibo/MWqotb/I0fVLMlCMDwn7WXFsGUwnsew==" }, "@smithy/util-endpoints": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz", - "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.2.tgz", + "integrity": "sha512-2/REfdcJ20y9iF+9kSBRBsaoGzjT5dZ3E6/TA45GHJuJAb/vZTj76VLTcrl2iN3fWXiDK1B8RxchaLGbr7RxxA==" }, "@smithy/util-hex-encoding": { "version": "2.1.1", @@ -384,19 +384,19 @@ "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==" }, "@smithy/util-middleware": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz", - "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.2.tgz", + "integrity": "sha512-lvSOnwQ7iAajtWb1nAyy0CkOIn8d+jGykQOtt2NXDsPzOTfejZM/Uph+O/TmVgWoXdcGuw5peUMG2f5xEIl6UQ==" }, "@smithy/util-retry": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz", - "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.2.tgz", + "integrity": "sha512-pqifOgRqwLfRu+ks3awEKKqPeYxrHLwo4Yu2EarGzeoarTd1LVEyyf5qLE6M7IiCsxnXRhn9FoWIdZOC+oC/VQ==" }, "@smithy/util-stream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz", - "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.2.tgz", + "integrity": "sha512-AbGjvoSok7YeUKv9WRVRSChQfsufLR54YCAabTbaABRdIucywRQs29em0uAP6r4RLj+4aFZStWGYpFgT0P8UlQ==" }, "@smithy/util-uri-escape": { "version": "2.1.1", @@ -409,9 +409,9 @@ "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==" }, "@types/node": { - "version": "20.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", - "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==" + "version": "20.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", + "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==" }, "@types/webidl-conversions": { "version": "7.0.3", @@ -489,9 +489,9 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socks": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz", - "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", + "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==" }, "sparse-bitfield": { "version": "3.0.3", diff --git a/packages/webapp/.npm/package/npm-shrinkwrap.json b/packages/webapp/.npm/package/npm-shrinkwrap.json index 40f236b713..4d2c53763a 100644 --- a/packages/webapp/.npm/package/npm-shrinkwrap.json +++ b/packages/webapp/.npm/package/npm-shrinkwrap.json @@ -32,9 +32,9 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "@types/node": { - "version": "20.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", - "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==" + "version": "20.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", + "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==" }, "@types/qs": { "version": "6.9.11", From 47ed012b0fdf5fedb198ff345e4768bda574d6cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 5 Mar 2024 11:51:33 +0100 Subject: [PATCH 03/30] ensure the operation method msg is run after the client result to match 2.x behavior --- packages/ddp-client/common/livedata_connection.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/ddp-client/common/livedata_connection.js b/packages/ddp-client/common/livedata_connection.js index 395da44ac9..3a36227272 100644 --- a/packages/ddp-client/common/livedata_connection.js +++ b/packages/ddp-client/common/livedata_connection.js @@ -850,7 +850,17 @@ export class Connection { } // If we added it to the first block, send it out now. - if (self._outstandingMethodBlocks.length === 1) methodInvoker.sendMessage(); + if (self._outstandingMethodBlocks.length === 1) { + if (callback && future) { + // Ensure the method message after the result of the method ran in the client. + future = new Promise((resolve) => { + methodInvoker.sendMessage(); + resolve(); + }); + } else { + methodInvoker.sendMessage(); + } + } // If we're using the default callback on the server, // block waiting for the result. From b915012d9d96156044419fafbbfc8d367ec90528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 5 Mar 2024 12:18:56 +0100 Subject: [PATCH 04/30] adapt test previously created for resolveType --- packages/mongo/mongo_livedata_tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mongo/mongo_livedata_tests.js b/packages/mongo/mongo_livedata_tests.js index 4e50d5d507..c566a7b6e8 100644 --- a/packages/mongo/mongo_livedata_tests.js +++ b/packages/mongo/mongo_livedata_tests.js @@ -4276,8 +4276,8 @@ if (Meteor.isServer) { }); } -Tinytest.addAsync('mongo-livedata - maintained isomorphism using resolverType config for both client and server', async function(test, expect) { - const Collection = new Mongo.Collection(`resolver_type${test.runId()}`, { resolverType: 'stub' }); +Tinytest.addAsync('mongo-livedata - maintained isomorphism on collection operations for both client and server', async function(test, expect) { + const Collection = new Mongo.Collection(`maintained_col_op_iso${test.runId()}`); await Collection.insertAsync({ _id: 'a' }); await Collection.insertAsync({ _id: 'b' }); From f67d5045135c71c8246994fb7b0fa456dd032ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 5 Mar 2024 12:59:17 +0100 Subject: [PATCH 05/30] add tests of behaviors to perserve from 2.x about collection operations and persistence --- packages/mongo/mongo_livedata_tests.js | 89 ++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/packages/mongo/mongo_livedata_tests.js b/packages/mongo/mongo_livedata_tests.js index c566a7b6e8..1aa31832ee 100644 --- a/packages/mongo/mongo_livedata_tests.js +++ b/packages/mongo/mongo_livedata_tests.js @@ -4302,3 +4302,92 @@ Tinytest.addAsync('mongo-livedata - maintained isomorphism on collection operati test.equal(items, []); }); + +testAsyncMulti('mongo-livedata - collection operations data persistence', [ + async function (test) { + const Collection = new Mongo.Collection( + `remoteop_persistence${test.runId()}`, + ); + + // Using remote collection + await Collection.insertAsync({ _id: 'a' }); + await Collection.insertAsync({ _id: 'b' }); + + let items = await Collection.find().fetchAsync(); + let itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a', 'b']); + + if (Meteor.isClient) { + return new Promise(resolve => { + setTimeout(async () => { + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + test.equal(itemIds, []); // data IS NOT persisted + resolve(); + }, 100); + }); + } + + return Promise.resolve(); + }, + async function (test) { + const Collection = new Mongo.Collection( + `methodop_persistence${test.runId()}`, + ); + // Using methods + Meteor.methods({ + [`insertMethodPersistence${test.runId()}`]: async () => { + await Collection.insertAsync({ _id: 'a' }); + await Collection.insertAsync({ _id: 'b' }); + }, + }); + + await Meteor.callAsync(`insertMethodPersistence${test.runId()}`); + + let items = await Collection.find().fetchAsync(); + let itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a', 'b']); + + if (Meteor.isClient) { + return new Promise(resolve => { + setTimeout(async () => { + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + test.equal(itemIds, []); // data IS NOT persisted + resolve(); + }, 100); + }); + } + + return Promise.resolve(); + }, + async function (test) { + const Collection = new Mongo.Collection( + `localop_persistence${test.runId()}`, + ); + + // Using local collection + await Collection._collection.insertAsync({ _id: 'a' }); + await Collection._collection.insertAsync({ _id: 'b' }); + + let items = await Collection.find().fetchAsync(); + let itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a', 'b']); + + if (Meteor.isClient) { + return new Promise(resolve => { + setTimeout(async () => { + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + test.equal(itemIds, ['a', 'b']); // data is persisted + resolve(); + }, 100); + }); + } + + return Promise.resolve(); + }, +]); From a0a05b44c2af0b3c37a362aa93d5021b419eb17c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 5 Mar 2024 15:03:52 +0100 Subject: [PATCH 06/30] add tests to enforce the same behaviors like 2.x --- packages/mongo/mongo_livedata_tests.js | 109 +++++++++++++++---------- 1 file changed, 65 insertions(+), 44 deletions(-) diff --git a/packages/mongo/mongo_livedata_tests.js b/packages/mongo/mongo_livedata_tests.js index 1aa31832ee..045454dfec 100644 --- a/packages/mongo/mongo_livedata_tests.js +++ b/packages/mongo/mongo_livedata_tests.js @@ -4303,24 +4303,35 @@ Tinytest.addAsync('mongo-livedata - maintained isomorphism on collection operati test.equal(items, []); }); -testAsyncMulti('mongo-livedata - collection operations data persistence', [ - async function (test) { +testAsyncMulti('mongo-livedata - collection async operations data persistence', [ + async function (test) { // Using remote collection const Collection = new Mongo.Collection( `remoteop_persistence${test.runId()}`, ); - // Using remote collection await Collection.insertAsync({ _id: 'a' }); - await Collection.insertAsync({ _id: 'b' }); + await Collection.updateAsync({ _id: 'a' }, { $set: { num: 1 } }); + const insertedId = await Collection.insertAsync({ num: 2 }); let items = await Collection.find().fetchAsync(); let itemIds = items.map(_item => _item._id); + test.equal(itemIds, ['a', insertedId]); // temporary data accessible - test.equal(itemIds, ['a', 'b']); + const aItem = items[0]; + const insertedItem = items[1]; + test.equal(aItem?.num, 1); + test.equal(insertedItem?.num, 2); + + await Collection.removeAsync({ _id: insertedId }); + + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a']); // temporary data accessible if (Meteor.isClient) { return new Promise(resolve => { - setTimeout(async () => { + Meteor.setTimeout(async () => { items = await Collection.find().fetchAsync(); itemIds = items.map(_item => _item._id); test.equal(itemIds, []); // data IS NOT persisted @@ -4331,58 +4342,68 @@ testAsyncMulti('mongo-livedata - collection operations data persistence', [ return Promise.resolve(); }, - async function (test) { - const Collection = new Mongo.Collection( - `methodop_persistence${test.runId()}`, - ); - // Using methods - Meteor.methods({ - [`insertMethodPersistence${test.runId()}`]: async () => { - await Collection.insertAsync({ _id: 'a' }); - await Collection.insertAsync({ _id: 'b' }); - }, - }); - - await Meteor.callAsync(`insertMethodPersistence${test.runId()}`); - - let items = await Collection.find().fetchAsync(); - let itemIds = items.map(_item => _item._id); - - test.equal(itemIds, ['a', 'b']); - - if (Meteor.isClient) { - return new Promise(resolve => { - setTimeout(async () => { - items = await Collection.find().fetchAsync(); - itemIds = items.map(_item => _item._id); - test.equal(itemIds, []); // data IS NOT persisted - resolve(); - }, 100); - }); - } - - return Promise.resolve(); - }, - async function (test) { + async function (test) { // Using local collection const Collection = new Mongo.Collection( `localop_persistence${test.runId()}`, ); - // Using local collection await Collection._collection.insertAsync({ _id: 'a' }); - await Collection._collection.insertAsync({ _id: 'b' }); + await Collection._collection.updateAsync({ _id: 'a' }, { $set: { num: 1 } }); + const insertedId = await Collection._collection.insertAsync({ num: 2 }); + + let items = await Collection.find().fetchAsync(); + let itemIds = items.map(_item => _item._id); + test.equal(itemIds, ['a', insertedId]); // temporary data accessible + + const aItem = items[0]; + const insertedItem = items[1]; + test.equal(aItem?.num, 1); + test.equal(insertedItem?.num, 2); + + await Collection._collection.removeAsync({ _id: insertedId }); + + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a']); // temporary data accessible + + if (Meteor.isClient) { + return new Promise(resolve => { + Meteor.setTimeout(async () => { + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + test.equal(itemIds, ['a']); // data is persisted + resolve(); + }, 100); + }); + } + + return Promise.resolve(); + }, + async function (test) { // Using methods + const Collection = new Mongo.Collection( + `methodop_persistence${test.runId()}`, + ); + + Meteor.methods({ + [`insertMethodPersistence${test.runId()}`]: async () => { + await Collection.insertAsync({ _id: 'a' }); + }, + }); + + Meteor.callAsync(`insertMethodPersistence${test.runId()}`); let items = await Collection.find().fetchAsync(); let itemIds = items.map(_item => _item._id); - test.equal(itemIds, ['a', 'b']); + test.equal(itemIds, ['a']); // temporary data accessible if (Meteor.isClient) { return new Promise(resolve => { - setTimeout(async () => { + Meteor.setTimeout(async () => { items = await Collection.find().fetchAsync(); itemIds = items.map(_item => _item._id); - test.equal(itemIds, ['a', 'b']); // data is persisted + test.equal(itemIds, []); // data IS NOT persisted resolve(); }, 100); }); From ed1c5105eaf3a653813139d7762d7aa20ea8a01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 5 Mar 2024 15:08:28 +0100 Subject: [PATCH 07/30] ensure the operation method msg is run after the client result to match 2.x behavior --- packages/mongo/mongo_livedata_tests.js | 246 +++++++++++++------------ 1 file changed, 130 insertions(+), 116 deletions(-) diff --git a/packages/mongo/mongo_livedata_tests.js b/packages/mongo/mongo_livedata_tests.js index 045454dfec..86c13fa0ec 100644 --- a/packages/mongo/mongo_livedata_tests.js +++ b/packages/mongo/mongo_livedata_tests.js @@ -4276,139 +4276,153 @@ if (Meteor.isServer) { }); } -Tinytest.addAsync('mongo-livedata - maintained isomorphism on collection operations for both client and server', async function(test, expect) { - const Collection = new Mongo.Collection(`maintained_col_op_iso${test.runId()}`); - - await Collection.insertAsync({ _id: 'a' }); - await Collection.insertAsync({ _id: 'b' }); - - let items = await Collection.find().fetchAsync(); - let itemIds = items.map(_item => _item._id); - - test.equal(itemIds, ['a', 'b']); - - await Collection.updateAsync({ _id: 'a' }, { $set: { num: 1 } }); - await Collection.updateAsync({ _id: 'b' }, { $set: { num: 2 } }); - - items = await Collection.find().fetchAsync(); - itemIds = items.map(_item => _item.num); - - test.equal(itemIds, [1, 2]); - - await Collection.removeAsync({ _id: 'a' }); - await Collection.removeAsync({ _id: 'b' }); - - items = await Collection.find().fetchAsync(); - - test.equal(items, []); -}); - -testAsyncMulti('mongo-livedata - collection async operations data persistence', [ - async function (test) { // Using remote collection +Tinytest.addAsync( + 'mongo-livedata - maintained isomorphism on collection operations for both client and server', + async function(test, expect) { const Collection = new Mongo.Collection( - `remoteop_persistence${test.runId()}`, + `maintained_col_op_iso${test.runId()}`, ); await Collection.insertAsync({ _id: 'a' }); + await Collection.insertAsync({ _id: 'b' }); + + let items = await Collection.find().fetchAsync(); + let itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a', 'b']); + await Collection.updateAsync({ _id: 'a' }, { $set: { num: 1 } }); - const insertedId = await Collection.insertAsync({ num: 2 }); - - let items = await Collection.find().fetchAsync(); - let itemIds = items.map(_item => _item._id); - test.equal(itemIds, ['a', insertedId]); // temporary data accessible - - const aItem = items[0]; - const insertedItem = items[1]; - test.equal(aItem?.num, 1); - test.equal(insertedItem?.num, 2); - - await Collection.removeAsync({ _id: insertedId }); + await Collection.updateAsync({ _id: 'b' }, { $set: { num: 2 } }); items = await Collection.find().fetchAsync(); - itemIds = items.map(_item => _item._id); + itemIds = items.map(_item => _item.num); - test.equal(itemIds, ['a']); // temporary data accessible + test.equal(itemIds, [1, 2]); - if (Meteor.isClient) { - return new Promise(resolve => { - Meteor.setTimeout(async () => { - items = await Collection.find().fetchAsync(); - itemIds = items.map(_item => _item._id); - test.equal(itemIds, []); // data IS NOT persisted - resolve(); - }, 100); - }); - } - - return Promise.resolve(); - }, - async function (test) { // Using local collection - const Collection = new Mongo.Collection( - `localop_persistence${test.runId()}`, - ); - - await Collection._collection.insertAsync({ _id: 'a' }); - await Collection._collection.updateAsync({ _id: 'a' }, { $set: { num: 1 } }); - const insertedId = await Collection._collection.insertAsync({ num: 2 }); - - let items = await Collection.find().fetchAsync(); - let itemIds = items.map(_item => _item._id); - test.equal(itemIds, ['a', insertedId]); // temporary data accessible - - const aItem = items[0]; - const insertedItem = items[1]; - test.equal(aItem?.num, 1); - test.equal(insertedItem?.num, 2); - - await Collection._collection.removeAsync({ _id: insertedId }); + await Collection.removeAsync({ _id: 'a' }); + await Collection.removeAsync({ _id: 'b' }); items = await Collection.find().fetchAsync(); - itemIds = items.map(_item => _item._id); - test.equal(itemIds, ['a']); // temporary data accessible - - if (Meteor.isClient) { - return new Promise(resolve => { - Meteor.setTimeout(async () => { - items = await Collection.find().fetchAsync(); - itemIds = items.map(_item => _item._id); - test.equal(itemIds, ['a']); // data is persisted - resolve(); - }, 100); - }); - } - - return Promise.resolve(); + test.equal(items, []); }, - async function (test) { // Using methods - const Collection = new Mongo.Collection( - `methodop_persistence${test.runId()}`, - ); +); - Meteor.methods({ - [`insertMethodPersistence${test.runId()}`]: async () => { - await Collection.insertAsync({ _id: 'a' }); - }, - }); +testAsyncMulti( + 'mongo-livedata - collection async operations data persistence', + [ + async function(test) { + // Using remote collection + const Collection = new Mongo.Collection( + `remoteop_persistence${test.runId()}`, + ); - Meteor.callAsync(`insertMethodPersistence${test.runId()}`); + await Collection.insertAsync({ _id: 'a' }); + await Collection.updateAsync({ _id: 'a' }, { $set: { num: 1 } }); + const insertedId = await Collection.insertAsync({ num: 2 }); - let items = await Collection.find().fetchAsync(); - let itemIds = items.map(_item => _item._id); + let items = await Collection.find().fetchAsync(); + let itemIds = items.map(_item => _item._id); + test.equal(itemIds, ['a', insertedId]); // temporary data accessible - test.equal(itemIds, ['a']); // temporary data accessible + const aItem = items[0]; + const insertedItem = items[1]; + test.equal(aItem?.num, 1); + test.equal(insertedItem?.num, 2); - if (Meteor.isClient) { - return new Promise(resolve => { - Meteor.setTimeout(async () => { - items = await Collection.find().fetchAsync(); - itemIds = items.map(_item => _item._id); - test.equal(itemIds, []); // data IS NOT persisted - resolve(); - }, 100); + await Collection.removeAsync({ _id: insertedId }); + + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a']); // temporary data accessible + + if (Meteor.isClient) { + return new Promise(resolve => { + Meteor.setTimeout(async () => { + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + test.equal(itemIds, []); // data IS NOT persisted + resolve(); + }, 100); + }); + } + + return Promise.resolve(); + }, + async function(test) { + // Using local collection + const Collection = new Mongo.Collection( + `localop_persistence${test.runId()}`, + ); + + await Collection._collection.insertAsync({ _id: 'a' }); + await Collection._collection.updateAsync( + { _id: 'a' }, + { $set: { num: 1 } }, + ); + const insertedId = await Collection._collection.insertAsync({ num: 2 }); + + let items = await Collection.find().fetchAsync(); + let itemIds = items.map(_item => _item._id); + test.equal(itemIds, ['a', insertedId]); // temporary data accessible + + const aItem = items[0]; + const insertedItem = items[1]; + test.equal(aItem?.num, 1); + test.equal(insertedItem?.num, 2); + + await Collection._collection.removeAsync({ _id: insertedId }); + + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a']); // temporary data accessible + + if (Meteor.isClient) { + return new Promise(resolve => { + Meteor.setTimeout(async () => { + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + test.equal(itemIds, ['a']); // data is persisted + resolve(); + }, 100); + }); + } + + return Promise.resolve(); + }, + async function(test) { + // Using methods + const Collection = new Mongo.Collection( + `methodop_persistence${test.runId()}`, + ); + + Meteor.methods({ + [`insertMethodPersistence${test.runId()}`]: async () => { + await Collection.insertAsync({ _id: 'a' }); + }, }); - } - return Promise.resolve(); - }, -]); + Meteor.callAsync(`insertMethodPersistence${test.runId()}`); + + let items = await Collection.find().fetchAsync(); + let itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a']); // temporary data accessible + + if (Meteor.isClient) { + return new Promise(resolve => { + Meteor.setTimeout(async () => { + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + test.equal(itemIds, []); // data IS NOT persisted + resolve(); + }, 100); + }); + } + + return Promise.resolve(); + }, + ], +); From fab11594a0c72411f496c479b07066c631c27272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 5 Mar 2024 18:00:30 +0100 Subject: [PATCH 08/30] Revert "ensure the operation method msg is run after the client result to match 2.x behavior" This reverts commit 47ed012b0fdf5fedb198ff345e4768bda574d6cb. --- packages/ddp-client/common/livedata_connection.js | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/packages/ddp-client/common/livedata_connection.js b/packages/ddp-client/common/livedata_connection.js index 3a36227272..395da44ac9 100644 --- a/packages/ddp-client/common/livedata_connection.js +++ b/packages/ddp-client/common/livedata_connection.js @@ -850,17 +850,7 @@ export class Connection { } // If we added it to the first block, send it out now. - if (self._outstandingMethodBlocks.length === 1) { - if (callback && future) { - // Ensure the method message after the result of the method ran in the client. - future = new Promise((resolve) => { - methodInvoker.sendMessage(); - resolve(); - }); - } else { - methodInvoker.sendMessage(); - } - } + if (self._outstandingMethodBlocks.length === 1) methodInvoker.sendMessage(); // If we're using the default callback on the server, // block waiting for the result. From f7a48a485fac2ce51542c8d03a7486b473a52ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Wed, 6 Mar 2024 06:49:48 +0100 Subject: [PATCH 09/30] spread debug mode to the client --- packages/meteor/debug.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/meteor/debug.js b/packages/meteor/debug.js index 8bb4fdb0a5..707bd26915 100644 --- a/packages/meteor/debug.js +++ b/packages/meteor/debug.js @@ -1,3 +1,19 @@ +if (Meteor.isServer) { + if (typeof __meteor_runtime_config__ === 'object') { + __meteor_runtime_config__.debug = + !!process.env.NODE_INSPECTOR_IPC || + !!process.env.VSCODE_INSPECTOR_OPTIONS || + process.execArgv.some(_arg => + /^--(inspect|debug)(-brk)?(=\d+)?$/i.test(_arg), + ); + } +} + +Meteor.isDebug = Meteor.isClient + ? typeof window === 'object' && !!window.__meteor_runtime_config__.debug + : typeof __meteor_runtime_config__ === 'object' && + !!__meteor_runtime_config__.debug; + var suppress = 0; // replacement for console.log. This is a temporary API. We should @@ -61,4 +77,3 @@ Meteor._suppress_log = function (count) { Meteor._suppressed_log_expected = function () { return suppress !== 0; }; - From f4a8596816e1c71f535ea22e953049beb56e1872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Wed, 6 Mar 2024 06:50:07 +0100 Subject: [PATCH 10/30] show the warning on method stub only in debug mode --- packages/ddp-client/client/queueStubsHelpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ddp-client/client/queueStubsHelpers.js b/packages/ddp-client/client/queueStubsHelpers.js index 275756047a..002171dd18 100644 --- a/packages/ddp-client/client/queueStubsHelpers.js +++ b/packages/ddp-client/client/queueStubsHelpers.js @@ -107,7 +107,7 @@ export const loadAsyncStubHelpers = () => { }); Meteor._setImmediate(() => { - if (!finished) { + if (!finished && Meteor.isDebug) { console.warn( `Method stub (${name}) took too long and could cause unexpected problems. Learn more at https://github.com/zodern/fix-async-stubs/#limitations` ); From 45ed85d8424c6f86849f2a94ab724bfb311829b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Wed, 6 Mar 2024 06:59:19 +0100 Subject: [PATCH 11/30] dont use arrow function --- packages/meteor/debug.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/meteor/debug.js b/packages/meteor/debug.js index 707bd26915..bf8837a4e8 100644 --- a/packages/meteor/debug.js +++ b/packages/meteor/debug.js @@ -3,9 +3,9 @@ if (Meteor.isServer) { __meteor_runtime_config__.debug = !!process.env.NODE_INSPECTOR_IPC || !!process.env.VSCODE_INSPECTOR_OPTIONS || - process.execArgv.some(_arg => - /^--(inspect|debug)(-brk)?(=\d+)?$/i.test(_arg), - ); + process.execArgv.some(function(_arg) { + return /^--(inspect|debug)(-brk)?(=\d+)?$/i.test(_arg); + }); } } From f2976aabcb6e26c78bdb03b538c0b3b9d906bdf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Wed, 6 Mar 2024 07:04:43 +0100 Subject: [PATCH 12/30] re-run checks From 7c494c94c5f3de42c3ef4cbefcd1e781dc67ad69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Wed, 6 Mar 2024 17:08:53 +0100 Subject: [PATCH 13/30] dont skip important warning for showing on normal execution mode --- packages/ddp-client/client/queueStubsHelpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ddp-client/client/queueStubsHelpers.js b/packages/ddp-client/client/queueStubsHelpers.js index 002171dd18..275756047a 100644 --- a/packages/ddp-client/client/queueStubsHelpers.js +++ b/packages/ddp-client/client/queueStubsHelpers.js @@ -107,7 +107,7 @@ export const loadAsyncStubHelpers = () => { }); Meteor._setImmediate(() => { - if (!finished && Meteor.isDebug) { + if (!finished) { console.warn( `Method stub (${name}) took too long and could cause unexpected problems. Learn more at https://github.com/zodern/fix-async-stubs/#limitations` ); From 61f255795cb2495f281d1c21e9be4cbcffbb7338 Mon Sep 17 00:00:00 2001 From: Per Bergland Date: Wed, 6 Mar 2024 18:15:23 +0100 Subject: [PATCH 14/30] self/this/options fixes --- packages/mongo/polling_observe_driver.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/mongo/polling_observe_driver.js b/packages/mongo/polling_observe_driver.js index c65c96e589..13da97b3c0 100644 --- a/packages/mongo/polling_observe_driver.js +++ b/packages/mongo/polling_observe_driver.js @@ -2,7 +2,8 @@ var POLLING_THROTTLE_MS = +process.env.METEOR_POLLING_THROTTLE_MS || 50; var POLLING_INTERVAL_MS = +process.env.METEOR_POLLING_INTERVAL_MS || 10 * 1000; PollingObserveDriver = function (options) { - var self = this; + const self = this; + self._options = options; self._cursorDescription = options.cursorDescription; self._mongoHandle = options.mongoHandle; @@ -42,12 +43,14 @@ PollingObserveDriver = function (options) { _.extend(PollingObserveDriver.prototype, { _init: async function () { + const self = this; + const options = self._options; const listenersHandle = await listenAll( self._cursorDescription, function (notification) { // When someone does a transaction that might affect us, schedule a poll // of the database. If that transaction happens inside of a write fence, // block the fence until we've polled and notified observers. - var fence = DDPServer._getCurrentFence(); + const fence = DDPServer._getCurrentFence(); if (fence) self._pendingWrites.push(fence.beginWrite()); // Ensure a poll is scheduled... but if we already know that one is, @@ -69,11 +72,11 @@ _.extend(PollingObserveDriver.prototype, { if (options._testOnlyPollCallback) { self._testOnlyPollCallback = options._testOnlyPollCallback; } else { - var pollingInterval = + const pollingInterval = self._cursorDescription.options.pollingIntervalMs || self._cursorDescription.options._pollingInterval || // COMPAT with 1.2 POLLING_INTERVAL_MS; - var intervalHandle = Meteor.setInterval( + const intervalHandle = Meteor.setInterval( _.bind(self._ensurePollIsScheduled, self), pollingInterval); self._stopCallbacks.push(function () { Meteor.clearInterval(intervalHandle); From 53d3b8ea2d5565b1bd78c900468dbde35cc7d632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 12 Mar 2024 15:15:01 +0100 Subject: [PATCH 15/30] add debug mode change to the changelog --- docs/generators/changelog/versions/3.0.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/generators/changelog/versions/3.0.md b/docs/generators/changelog/versions/3.0.md index bf6e90d74a..5eb9af3514 100644 --- a/docs/generators/changelog/versions/3.0.md +++ b/docs/generators/changelog/versions/3.0.md @@ -667,6 +667,9 @@ - `Meteor.callAsync()` +- `meteor`: + - Added `Meteor.isDebug` to execute code in debug builds, activated with the --inspect mode. + - `minifier-css`: (2.9+) - `CssTools.minifyCssAsync()` From a67b039092a71938d432837bcf0b9793d45caaa9 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 15 Jan 2024 12:36:38 -0300 Subject: [PATCH 16/30] fix: minimongo sync upsert not adding new document --- packages/minimongo/local_collection.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index 4366d65645..ac14703cc8 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -660,6 +660,22 @@ export default class LocalCollection { this._observeQueue.drain(); + + // If we are doing an upsert, and we didn't modify any documents yet, then + // it's time to do an insert. Figure out what document we are inserting, and + // generate an id for it. + let insertedId; + if (updateCount === 0 && options.upsert) { + const doc = LocalCollection._createUpsertDocument(selector, mod); + if (!doc._id && options.insertedId) { + doc._id = options.insertedId; + } + + insertedId = this.insert(doc); + updateCount = 1; + } + + return this.finishUpdate({ options, updateCount, From f34a96fe18e2ab31e5fcb582ab4353f86bd014fe Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 15 Jan 2024 13:12:46 -0300 Subject: [PATCH 17/30] added tests --- packages/minimongo/minimongo_tests_client.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/minimongo/minimongo_tests_client.js b/packages/minimongo/minimongo_tests_client.js index fd14e99fa4..2546316119 100644 --- a/packages/minimongo/minimongo_tests_client.js +++ b/packages/minimongo/minimongo_tests_client.js @@ -212,6 +212,21 @@ Tinytest.addAsync('minimongo - basics', async test => { test.equal(after.d, undefined); }); + +Tinytest.addAsync('minimongo - upsert', async test => { + const c = new LocalCollection(); + + await c.upsertAsync({ name: 'doc' }, { name: 'doc' }); + + test.equal(c.find({}).count(), 1); + + await c.removeAsync({}); + + c.upsert({ name: 'doc' }, { name: 'doc' }); + test.equal(c.find({}).count(), 1); +}); + + Tinytest.add('minimongo - error - no options', test => { try { throw MinimongoError('Not fun to have errors'); From 335863345c5f37934b78d8d47565d1b4cd11a75e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Thu, 14 Mar 2024 15:50:28 +0100 Subject: [PATCH 18/30] upgrade node-downloader-helper to latest version as fix issue on being in last node version --- npm-packages/meteor-installer/package-lock.json | 17 +++++++++-------- npm-packages/meteor-installer/package.json | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/npm-packages/meteor-installer/package-lock.json b/npm-packages/meteor-installer/package-lock.json index e147e8d40a..4be543068e 100644 --- a/npm-packages/meteor-installer/package-lock.json +++ b/npm-packages/meteor-installer/package-lock.json @@ -1,12 +1,12 @@ { "name": "meteor", - "version": "2.14.0", + "version": "3.0.0-beta.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "meteor", - "version": "2.14.0", + "version": "3.0.0-beta.6", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -14,7 +14,7 @@ "cli-progress": "^3.11.1", "https-proxy-agent": "^5.0.1", "node-7z": "^2.1.2", - "node-downloader-helper": "^1.0.19", + "node-downloader-helper": "^2.1.9", "rimraf": "^3.0.2", "semver": "^7.3.7", "tar": "^6.1.11", @@ -24,8 +24,8 @@ "meteor-installer": "cli.js" }, "engines": { - "node": "<=14.x", - "npm": "<=6.x" + "node": "<=20.x", + "npm": "<=10.x" } }, "node_modules/7zip-bin": { @@ -289,13 +289,14 @@ } }, "node_modules/node-downloader-helper": { - "version": "1.0.19", - "license": "MIT", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz", + "integrity": "sha512-FSvAol2Z8UP191sZtsUZwHIN0eGoGue3uEXGdWIH5228e9KH1YHXT7fN8Oa33UGf+FbqGTQg3sJfrRGzmVCaJA==", "bin": { "ndh": "bin/ndh" }, "engines": { - "node": ">=6.9" + "node": ">=14.18" } }, "node_modules/normalize-path": { diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 0ef0921642..0582374cf8 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -14,7 +14,7 @@ "cli-progress": "^3.11.1", "https-proxy-agent": "^5.0.1", "node-7z": "^2.1.2", - "node-downloader-helper": "^1.0.19", + "node-downloader-helper": "^2.1.9", "rimraf": "^3.0.2", "semver": "^7.3.7", "tar": "^6.1.11", From 113781dc6ca4ea3caf0014e983a82d61ba24d47a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Thu, 14 Mar 2024 17:45:49 +0100 Subject: [PATCH 19/30] add missing command on a log in Windows --- npm-packages/meteor-installer/install.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-installer/install.js b/npm-packages/meteor-installer/install.js index 841a4615c3..5de0b3dae5 100644 --- a/npm-packages/meteor-installer/install.js +++ b/npm-packages/meteor-installer/install.js @@ -316,7 +316,7 @@ function showGettingStarted() { const exportCommand = `export PATH=${meteorPath}:$PATH`; const runCommand = isWindows() - ? `set path "${meteorPath}/;%path%` + ? `set path "${meteorPath}/;%path%"` : exportCommand; const message = ` *************************************** From 1135bedf73320735ee4d4a2974b07a9a6321308d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Thu, 14 Mar 2024 15:13:08 -0300 Subject: [PATCH 20/30] update fetch example --- v3-docs/docs/packages/fetch.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/v3-docs/docs/packages/fetch.md b/v3-docs/docs/packages/fetch.md index e7385334cd..7eaf90bfa5 100644 --- a/v3-docs/docs/packages/fetch.md +++ b/v3-docs/docs/packages/fetch.md @@ -38,7 +38,6 @@ import { fetch, Headers, Request, Response } from "meteor/fetch"; For the most part though, you will only need to import `fetch` and `Headers`. ```js -import { Meteor } from 'meteor/meteor'; import { fetch, Headers } from 'meteor/fetch'; async function postData (url, data) { @@ -63,7 +62,6 @@ async function postData (url, data) { } } -const postDataCall = Meteor.wrapAsync(postData); -const results = postDataCall('https://www.example.org/statsSubmission', { totalUsers: 55 })); +const result = await postData('https://www.example.org/statsSubmission', { totalUsers: 55 }); ``` From 547e38881a567f63284e159ac36dd5eabe87b245 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 18 Mar 2024 10:27:42 -0300 Subject: [PATCH 21/30] Docs: remove meteor.wrapAsync and add meteor.promisify --- packages/meteor/helpers.js | 10 ++++++---- v3-docs/docs/api/meteor.md | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/meteor/helpers.js b/packages/meteor/helpers.js index e85bbecfca..ac6b801d83 100644 --- a/packages/meteor/helpers.js +++ b/packages/meteor/helpers.js @@ -70,11 +70,13 @@ Meteor._delete = function (obj /*, arguments */) { /** - * Takes a function that has a callback argument as the last one and promissify it. + * @memberOf Meteor + * @locus Anywhere + * @summary Takes a function that has a callback argument as the last one and promissify it. * One option would be to use node utils.promisify, but it won't work on the browser. - * @param fn - * @param context - * @param errorFirst - If the callback follows the errorFirst style + * @param {Function} fn + * @param {Object} [context] + * @param {Boolean} [errorFirst] - If the callback follows the errorFirst style, default to true * @returns {function(...[*]): Promise} */ Meteor.promisify = function (fn, context, errorFirst) { diff --git a/v3-docs/docs/api/meteor.md b/v3-docs/docs/api/meteor.md index 4afc4ce547..1040e2e25b 100644 --- a/v3-docs/docs/api/meteor.md +++ b/v3-docs/docs/api/meteor.md @@ -52,7 +52,7 @@ Meteor.startup(() => { ::: - + From b9ea24dff3694960b3c6487c5e6001d75d4295bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Mon, 18 Mar 2024 14:37:55 +0100 Subject: [PATCH 22/30] ensure global check is not required when using npx --- npm-packages/meteor-installer/install.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/npm-packages/meteor-installer/install.js b/npm-packages/meteor-installer/install.js index 5de0b3dae5..e96ae8d528 100644 --- a/npm-packages/meteor-installer/install.js +++ b/npm-packages/meteor-installer/install.js @@ -45,7 +45,9 @@ if (!semver.satisfies(process.version, nodeVersion)) { ); } -const isInstalledGlobally = process.env.npm_config_global === 'true'; +const isInstalledGlobally = + process.env.npm_config_global === 'true' || + process.env.npm_lifecycle_event === 'npx'; if (!isInstalledGlobally) { console.error('******************************************'); From 86080a11cd82dcaa7ecf4d2df584393f08b50b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Mon, 18 Mar 2024 18:11:31 +0100 Subject: [PATCH 23/30] dont exist with an error since it errored npx usage as well, which is the mode that ensure proper logging on latest npm version --- npm-packages/meteor-installer/install.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-installer/install.js b/npm-packages/meteor-installer/install.js index e96ae8d528..edec50689a 100644 --- a/npm-packages/meteor-installer/install.js +++ b/npm-packages/meteor-installer/install.js @@ -57,7 +57,7 @@ if (!isInstalledGlobally) { console.error('Make sure you pass -g to npm install.'); console.error('Aborting...'); console.error('******************************************'); - process.exit(1); + process.exit(0); } process.on('unhandledRejection', err => { throw err; From 07b6997e5255b99de5e36db177d42fc14a3139e4 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 18 Mar 2024 15:33:52 -0400 Subject: [PATCH 24/30] - fix upper context in the server - add the ability to get other contexts in the client - add test for dynamics --- packages/meteor/dynamics_browser.js | 10 +++++++++- packages/meteor/dynamics_nodejs.js | 22 ++++++++++++---------- packages/meteor/dynamics_test.js | 21 +++++++++++++++++++++ 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/packages/meteor/dynamics_browser.js b/packages/meteor/dynamics_browser.js index 13133c2776..4b67b80880 100644 --- a/packages/meteor/dynamics_browser.js +++ b/packages/meteor/dynamics_browser.js @@ -40,8 +40,16 @@ EVp.withValue = function (value, func) { currentValues[this.slot] = value; var ret = func(); } finally { - currentValues[this.slot] = saved; + // Don't use catch here, we want to propagate the error if there is one } + + if (Meteor._isPromise(ret)) { + ret.finally(() => { + currentValues[this.slot] = saved; + }); + return ret; + } + currentValues[this.slot] = saved; return ret; }; diff --git a/packages/meteor/dynamics_nodejs.js b/packages/meteor/dynamics_nodejs.js index bdb147ca83..4a81bf7ba8 100644 --- a/packages/meteor/dynamics_nodejs.js +++ b/packages/meteor/dynamics_nodejs.js @@ -49,20 +49,22 @@ class EnvironmentVariableAsync { */ withValue(value, func, options = {}) { const self = this; - const slotCall = Meteor._getValueFromAslStore(SLOT_CALL_KEY); - const dynamics = - Meteor._getValueFromAslStore(UPPER_CALL_DYNAMICS_KEY_NAME) || {}; - dynamics[slotCall] = Meteor._getValueFromAslStore(CURRENT_VALUE_KEY_NAME); - self.upperCallDynamics = dynamics; + const slotCall = self.slot; + const dynamics = Object.assign( + {}, + Meteor._getValueFromAslStore(UPPER_CALL_DYNAMICS_KEY_NAME) || {} + ); + + if (slotCall) { + dynamics[slotCall] = value; + } + return Meteor._runAsync( async function () { let ret; try { - Meteor._updateAslStore( - UPPER_CALL_DYNAMICS_KEY_NAME, - this.upperCallDynamics, - ); Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, value); + Meteor._updateAslStore(UPPER_CALL_DYNAMICS_KEY_NAME, dynamics); ret = await func(); } finally { Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, undefined); @@ -80,7 +82,7 @@ class EnvironmentVariableAsync { [SLOT_CALL_KEY]: this.slot, }, options, - ) + ), ); } diff --git a/packages/meteor/dynamics_test.js b/packages/meteor/dynamics_test.js index dacbb04294..c7fe023c85 100644 --- a/packages/meteor/dynamics_test.js +++ b/packages/meteor/dynamics_test.js @@ -16,6 +16,27 @@ Tinytest.add("environment - dynamic variables", function (test) { test.equal(CurrentFoo.get(), undefined); }); +Tinytest.addAsync( + "environment - dynamic variables with two context", + async function (test) { + const context1 = new Meteor.EnvironmentVariable(); + const context2 = new Meteor.EnvironmentVariable(); + + await context1.withValue(42, async () => { + test.equal(context2.get(), undefined); + await context2.withValue(1, async () => { + await context2.withValue(2, async () => { + test.equal(context2.get(), 2); + }); + test.equal(context1.get(), 42); + test.equal(context2.get(), 1); + }); + test.equal(context1.get(), 42); + test.equal(context2.get(), undefined); + }); + } +); + Tinytest.addAsync("environment - bindEnvironment", async function (test) { var raised_f; From 2d05cb1008395c453b5bd640d0d4336666f55cfe Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 18 Mar 2024 16:06:12 -0400 Subject: [PATCH 25/30] - revert client to not handle promises, as this newer syntax can't be compiled in older browsers --- .../.npm/package/npm-shrinkwrap.json | 6 +- .../email/.npm/package/npm-shrinkwrap.json | 6 +- .../.npm/package/npm-shrinkwrap.json | 18 +- packages/meteor/dynamics_browser.js | 9 +- packages/meteor/dynamics_test.js | 57 ++- .../.npm/package/npm-shrinkwrap.json | 6 +- .../.npm/package/npm-shrinkwrap.json | 402 +++++++++--------- .../webapp/.npm/package/npm-shrinkwrap.json | 24 +- 8 files changed, 273 insertions(+), 255 deletions(-) diff --git a/packages/accounts-2fa/.npm/package/npm-shrinkwrap.json b/packages/accounts-2fa/.npm/package/npm-shrinkwrap.json index 18041fc859..d19b2cae57 100644 --- a/packages/accounts-2fa/.npm/package/npm-shrinkwrap.json +++ b/packages/accounts-2fa/.npm/package/npm-shrinkwrap.json @@ -2,9 +2,9 @@ "lockfileVersion": 4, "dependencies": { "@types/node": { - "version": "20.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", - "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==" + "version": "20.11.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", + "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==" }, "@types/notp": { "version": "2.0.5", diff --git a/packages/email/.npm/package/npm-shrinkwrap.json b/packages/email/.npm/package/npm-shrinkwrap.json index f8801b10e9..efb1f79615 100644 --- a/packages/email/.npm/package/npm-shrinkwrap.json +++ b/packages/email/.npm/package/npm-shrinkwrap.json @@ -2,9 +2,9 @@ "lockfileVersion": 4, "dependencies": { "@types/node": { - "version": "20.11.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", - "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==" + "version": "20.11.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", + "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==" }, "@types/nodemailer": { "version": "6.4.7", diff --git a/packages/force-ssl-common/.npm/package/npm-shrinkwrap.json b/packages/force-ssl-common/.npm/package/npm-shrinkwrap.json index e18f06b28d..cc006ffa58 100644 --- a/packages/force-ssl-common/.npm/package/npm-shrinkwrap.json +++ b/packages/force-ssl-common/.npm/package/npm-shrinkwrap.json @@ -157,9 +157,9 @@ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==" }, "hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==" }, "ip": { "version": "0.3.3", @@ -299,9 +299,9 @@ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==" }, "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==" }, "object-keys": { "version": "1.1.1", @@ -366,9 +366,9 @@ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" }, "set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==" }, "set-function-name": { "version": "2.0.2", diff --git a/packages/meteor/dynamics_browser.js b/packages/meteor/dynamics_browser.js index 4b67b80880..438857314b 100644 --- a/packages/meteor/dynamics_browser.js +++ b/packages/meteor/dynamics_browser.js @@ -40,16 +40,9 @@ EVp.withValue = function (value, func) { currentValues[this.slot] = value; var ret = func(); } finally { - // Don't use catch here, we want to propagate the error if there is one + currentValues[this.slot] = saved; } - if (Meteor._isPromise(ret)) { - ret.finally(() => { - currentValues[this.slot] = saved; - }); - return ret; - } - currentValues[this.slot] = saved; return ret; }; diff --git a/packages/meteor/dynamics_test.js b/packages/meteor/dynamics_test.js index c7fe023c85..3d5763e7d1 100644 --- a/packages/meteor/dynamics_test.js +++ b/packages/meteor/dynamics_test.js @@ -16,27 +16,52 @@ Tinytest.add("environment - dynamic variables", function (test) { test.equal(CurrentFoo.get(), undefined); }); -Tinytest.addAsync( - "environment - dynamic variables with two context", - async function (test) { - const context1 = new Meteor.EnvironmentVariable(); - const context2 = new Meteor.EnvironmentVariable(); +if (Meteor.isServer) { + Tinytest.addAsync( + "environment - dynamic variables with two context (server)", + async function (test) { + const context1 = new Meteor.EnvironmentVariable(); + const context2 = new Meteor.EnvironmentVariable(); - await context1.withValue(42, async () => { - test.equal(context2.get(), undefined); - await context2.withValue(1, async () => { - await context2.withValue(2, async () => { - test.equal(context2.get(), 2); + return context1.withValue(42, async () => { + test.equal(context2.get(), undefined); + await context2.withValue(1, async () => { + await context2.withValue(2, async () => { + test.equal(context2.get(), 2); + }); + test.equal(context1.get(), 42); + test.equal(context2.get(), 1); }); test.equal(context1.get(), 42); - test.equal(context2.get(), 1); + test.equal(context2.get(), undefined); }); - test.equal(context1.get(), 42); - test.equal(context2.get(), undefined); - }); - } -); + } + ); +} else { + // Basically the same test as the server one, but without async/await + // as we don't handle async on the client in this case + // due to the idea that we need to keep new EcmaScript features doesn't compile in older browsers + Tinytest.add( + "environment - dynamic variables with two context (client)", + function (test) { + const context1 = new Meteor.EnvironmentVariable(); + const context2 = new Meteor.EnvironmentVariable(); + context1.withValue(42, () => { + test.equal(context2.get(), undefined); + context2.withValue(1, () => { + context2.withValue(2, () => { + test.equal(context2.get(), 2); + }); + test.equal(context1.get(), 42); + test.equal(context2.get(), 1); + }); + test.equal(context1.get(), 42); + test.equal(context2.get(), undefined); + }); + } + ); +} Tinytest.addAsync("environment - bindEnvironment", async function (test) { var raised_f; diff --git a/packages/minifier-js/.npm/package/npm-shrinkwrap.json b/packages/minifier-js/.npm/package/npm-shrinkwrap.json index c707cf0e5d..827d7a35ec 100644 --- a/packages/minifier-js/.npm/package/npm-shrinkwrap.json +++ b/packages/minifier-js/.npm/package/npm-shrinkwrap.json @@ -17,9 +17,9 @@ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==" + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==" }, "@jridgewell/sourcemap-codec": { "version": "1.4.15", diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index c224b5dbda..20c19af8aa 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -74,129 +74,129 @@ } }, "@aws-sdk/client-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.525.0.tgz", - "integrity": "sha512-LxI9rfn6Vy/EX6I7as14PAKqAhUwVQviaMV/xCLQIubgdVj1xfexVURdiSk7GQshpcwtrs+GQWV21yP+3AX/7A==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.535.0.tgz", + "integrity": "sha512-7n9WAXAQzDgdaNkZlgdX+dmCW30tCrq3NpPs/f1WFWcF6g+s06ULkuWywTU+usG6ZTuRtajFKy2oMkMv9Wor0g==" }, "@aws-sdk/client-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz", - "integrity": "sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.535.0.tgz", + "integrity": "sha512-h9eQRdFnjDRVBnPJIKXuX7D+isSAioIfZPC4PQwsL5BscTRlk4c90DX0R0uk64YUtp7LZu8TNtrosFZ/1HtTrQ==" }, "@aws-sdk/client-sso-oidc": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz", - "integrity": "sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.535.0.tgz", + "integrity": "sha512-M2cG4EQXDpAJQyq33ORIr6abmdX9p9zX0ssVy8XwFNB7lrgoIKxuVoGL+fX+XMgecl24x7ELz6b4QlILOevbCw==" }, "@aws-sdk/client-sts": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz", - "integrity": "sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.535.0.tgz", + "integrity": "sha512-ii9OOm3TJwP3JmO1IVJXKWIShVKPl0VtdlgROc/SkDglO/kuAw9eDdlROgc+qbFl+gm6bBTguOVTUXt3tS3flw==" }, "@aws-sdk/core": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.525.0.tgz", - "integrity": "sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.535.0.tgz", + "integrity": "sha512-+Yusa9HziuaEDta1UaLEtMAtmgvxdxhPn7jgfRY6PplqAqgsfa5FR83sxy5qr2q7xjQTwHtV4MjQVuOjG9JsLw==" }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.525.0.tgz", - "integrity": "sha512-0djjCN/zN6QFQt1xU64VBOSRP4wJckU6U7FjLPrGpL6w03hF0dUmVUXjhQZe5WKNPCicVc2S3BYPohl/PzCx1w==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.535.0.tgz", + "integrity": "sha512-Lc+RJTNzp22H31W/O7iSmCZUP+KYZMuzK8hKU4/RXo7D8t/cFLb4VpvvcCCa4UOZqdmxVqEhwc1oXyMkoszITQ==" }, "@aws-sdk/credential-provider-env": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz", - "integrity": "sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz", + "integrity": "sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==" }, "@aws-sdk/credential-provider-http": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz", - "integrity": "sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.535.0.tgz", + "integrity": "sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw==" }, "@aws-sdk/credential-provider-ini": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz", - "integrity": "sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.535.0.tgz", + "integrity": "sha512-bm3XOYlyCjtAb8eeHXLrxqRxYVRw2Iqv9IufdJb4gM13TbNSYniUT1WKaHxGIZ5p+FuNlXVhvk1OpHFM13+gXA==" }, "@aws-sdk/credential-provider-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz", - "integrity": "sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.535.0.tgz", + "integrity": "sha512-6JXp/EuL6euUkH5k4d+lQFF6gBwukrcCOWfNHCmq14mNJf/cqT3HAX1VMtWFRSK20am0IxfYQGccb0/nZykdKg==" }, "@aws-sdk/credential-provider-process": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz", - "integrity": "sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz", + "integrity": "sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==" }, "@aws-sdk/credential-provider-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz", - "integrity": "sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.535.0.tgz", + "integrity": "sha512-2Dw0YIr8ETdFpq65CC4zK8ZIEbX78rXoNRZXUGNQW3oSKfL0tj8O8ErY6kg1IdEnYbGnEQ35q6luZ5GGNKLgDg==" }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz", - "integrity": "sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.535.0.tgz", + "integrity": "sha512-t2/JWrKY0H66A7JW7CqX06/DG2YkJddikt5ymdQvx/Q7dRMJ3d+o/vgjoKr7RvEx/pNruCeyM1599HCvwrVMrg==" }, "@aws-sdk/credential-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.525.0.tgz", - "integrity": "sha512-zj439Ok1s44nahIJKpBM4jhAxnSw20flXQpMD2aeGdvUuKm2xmzZP0lX5z9a+XQWFtNh251ZcSt2p+RwtLKtiw==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.535.0.tgz", + "integrity": "sha512-rC3TguTFbeua3EyTwGm84xeARKE1RO0oIWdtuTmSS5ZCPwllcePGkOVg7gQiPRc01Ebj816S/6P2QbvAfSUxqA==" }, "@aws-sdk/middleware-host-header": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz", - "integrity": "sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz", + "integrity": "sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew==" }, "@aws-sdk/middleware-logger": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz", - "integrity": "sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz", + "integrity": "sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A==" }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz", - "integrity": "sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz", + "integrity": "sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw==" }, "@aws-sdk/middleware-user-agent": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz", - "integrity": "sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.535.0.tgz", + "integrity": "sha512-Uvb2WJ+zdHdCOtsWVPI/M0BcfNrjOYsicDZWtaljucRJKLclY5gNWwD+RwIC+8b5TvfnVOlH+N5jhvpi5Impog==" }, "@aws-sdk/region-config-resolver": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz", - "integrity": "sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz", + "integrity": "sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg==" }, "@aws-sdk/token-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz", - "integrity": "sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.535.0.tgz", + "integrity": "sha512-4g+l/B9h1H/SiDtFRosW3pMwc+3PTXljZit+5NUBcET2XqcdUyHmgj3lBdu+CJ9CHdIMggRalYMAFXnRFe3Psg==" }, "@aws-sdk/types": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.523.0.tgz", - "integrity": "sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.535.0.tgz", + "integrity": "sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==" }, "@aws-sdk/util-endpoints": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz", - "integrity": "sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.535.0.tgz", + "integrity": "sha512-c8TlaQsiPchOOmTTR6qvHCO2O7L7NJwlKWAoQJ2GqWDZuC5es/fyuF2rp1h+ZRrUVraUomS0YdGkAmaDC7hJQg==" }, "@aws-sdk/util-locate-window": { - "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", - "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz", + "integrity": "sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==" }, "@aws-sdk/util-user-agent-browser": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz", - "integrity": "sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz", + "integrity": "sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig==" }, "@aws-sdk/util-user-agent-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz", - "integrity": "sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==" + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz", + "integrity": "sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ==" }, "@aws-sdk/util-utf8-browser": { "version": "3.259.0", @@ -204,214 +204,214 @@ "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==" }, "@mongodb-js/saslprep": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz", - "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==" }, "@smithy/abort-controller": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.3.tgz", - "integrity": "sha512-c2aYH2Wu1RVE3rLlVgg2kQOBJGM0WbjReQi5DnPTm2Zb7F0gk7J2aeQeaX2u/lQZoHl6gv8Oac7mt9alU3+f4A==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==" }, "@smithy/config-resolver": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.4.tgz", - "integrity": "sha512-AW2WUZmBAzgO3V3ovKtsUbI3aBNMeQKFDumoqkNxaVDWF/xfnxAWqBKDr/NuG7c06N2Rm4xeZLPiJH/d+na0HA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==" }, "@smithy/core": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.5.tgz", - "integrity": "sha512-Rrc+e2Jj6Gu7Xbn0jvrzZlSiP2CZocIOfZ9aNUA82+1sa6GBnxqL9+iZ9EKHeD9aqD1nU8EK4+oN2EiFpSv7Yw==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.0.tgz", + "integrity": "sha512-uu9ZDI95Uij4qk+L6kyFjdk11zqBkcJ3Lv0sc6jZrqHvLyr0+oeekD3CnqMafBn/5PRI6uv6ulW3kNLRBUHeVw==" }, "@smithy/credential-provider-imds": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.4.tgz", - "integrity": "sha512-DdatjmBZQnhGe1FhI8gO98f7NmvQFSDiZTwC3WMvLTCKQUY+Y1SVkhJqIuLu50Eb7pTheoXQmK+hKYUgpUWsNA==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==" }, "@smithy/eventstream-codec": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.3.tgz", - "integrity": "sha512-rGlCVuwSDv6qfKH4/lRxFjcZQnIE0LZ3D4lkMHg7ZSltK9rA74r0VuGSvWVQ4N/d70VZPaniFhp4Z14QYZsa+A==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz", + "integrity": "sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==" }, "@smithy/fetch-http-handler": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.3.tgz", - "integrity": "sha512-Fn/KYJFo6L5I4YPG8WQb2hOmExgRmNpVH5IK2zU3JKrY5FKW7y9ar5e0BexiIC9DhSKqKX+HeWq/Y18fq7Dkpw==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==" }, "@smithy/hash-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.3.tgz", - "integrity": "sha512-FsAPCUj7VNJIdHbSxMd5uiZiF20G2zdSDgrgrDrHqIs/VMxK85Vqk5kMVNNDMCZmMezp6UKnac0B4nAyx7HJ9g==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==" }, "@smithy/invalid-dependency": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.3.tgz", - "integrity": "sha512-wkra7d/G4CbngV4xsjYyAYOvdAhahQje/WymuQdVEnXFExJopEu7fbL5AEAlBPgWHXwu94VnCSG00gVzRfExyg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==" }, "@smithy/is-array-buffer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", - "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==" }, "@smithy/middleware-content-length": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.3.tgz", - "integrity": "sha512-aJduhkC+dcXxdnv5ZpM3uMmtGmVFKx412R1gbeykS5HXDmRU6oSsyy2SoHENCkfOGKAQOjVE2WVqDJibC0d21g==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==" }, "@smithy/middleware-endpoint": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.4.tgz", - "integrity": "sha512-4yjHyHK2Jul4JUDBo2sTsWY9UshYUnXeb/TAK/MTaPEb8XQvDmpwSFnfIRDU45RY1a6iC9LCnmJNg/yHyfxqkw==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.0.tgz", + "integrity": "sha512-OBhI9ZEAG8Xen0xsFJwwNOt44WE2CWkfYIxTognC8x42Lfsdf0VN/wCMqpdkySMDio/vts10BiovAxQp0T0faA==" }, "@smithy/middleware-retry": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.4.tgz", - "integrity": "sha512-Cyolv9YckZTPli1EkkaS39UklonxMd08VskiuMhURDjC0HHa/AD6aK/YoD21CHv9s0QLg0WMLvk9YeLTKkXaFQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.2.0.tgz", + "integrity": "sha512-PsjDOLpbevgn37yJbawmfVoanru40qVA8UEf2+YA1lvOefmhuhL6ZbKtGsLAWDRnE1OlAmedsbA/htH6iSZjNA==" }, "@smithy/middleware-serde": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.3.tgz", - "integrity": "sha512-s76LId+TwASrHhUa9QS4k/zeXDUAuNuddKklQzRgumbzge5BftVXHXIqL4wQxKGLocPwfgAOXWx+HdWhQk9hTg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==" }, "@smithy/middleware-stack": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.3.tgz", - "integrity": "sha512-opMFufVQgvBSld/b7mD7OOEBxF6STyraVr1xel1j0abVILM8ALJvRoFbqSWHGmaDlRGIiV9Q5cGbWi0sdiEaLQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==" }, "@smithy/node-config-provider": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.4.tgz", - "integrity": "sha512-nqazHCp8r4KHSFhRQ+T0VEkeqvA0U+RhehBSr1gunUuNW3X7j0uDrWBxB2gE9eutzy6kE3Y7L+Dov/UXT871vg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==" }, "@smithy/node-http-handler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.4.1.tgz", - "integrity": "sha512-HCkb94soYhJMxPCa61wGKgmeKpJ3Gftx1XD6bcWEB2wMV1L9/SkQu/6/ysKBnbOzWRE01FGzwrTxucHypZ8rdg==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==" }, "@smithy/property-provider": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.3.tgz", - "integrity": "sha512-bMz3se+ySKWNrgm7eIiQMa2HO/0fl2D0HvLAdg9pTMcpgp4SqOAh6bz7Ik6y7uQqSrk4rLjIKgbQ6yzYgGehCQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==" }, "@smithy/protocol-http": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.2.1.tgz", - "integrity": "sha512-KLrQkEw4yJCeAmAH7hctE8g9KwA7+H2nSJwxgwIxchbp/L0B5exTdOQi9D5HinPLlothoervGmhpYKelZ6AxIA==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==" }, "@smithy/querystring-builder": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.3.tgz", - "integrity": "sha512-kFD3PnNqKELe6m9GRHQw/ftFFSZpnSeQD4qvgDB6BQN6hREHELSosVFUMPN4M3MDKN2jAwk35vXHLoDrNfKu0A==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==" }, "@smithy/querystring-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.3.tgz", - "integrity": "sha512-3+CWJoAqcBMR+yvz6D+Fc5VdoGFtfenW6wqSWATWajrRMGVwJGPT3Vy2eb2bnMktJc4HU4bpjeovFa566P3knQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==" }, "@smithy/service-error-classification": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.3.tgz", - "integrity": "sha512-iUrpSsem97bbXHHT/v3s7vaq8IIeMo6P6cXdeYHrx0wOJpMeBGQF7CB0mbJSiTm3//iq3L55JiEm8rA7CTVI8A==" + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==" }, "@smithy/shared-ini-file-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.4.tgz", - "integrity": "sha512-CiZmPg9GeDKbKmJGEFvJBsJcFnh0AQRzOtQAzj1XEa8N/0/uSN/v1LYzgO7ry8hhO8+9KB7+DhSW0weqBra4Aw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==" }, "@smithy/signature-v4": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.3.tgz", - "integrity": "sha512-Jq4iPPdCmJojZTsPePn4r1ULShh6ONkokLuxp1Lnk4Sq7r7rJp4HlA1LbPBq4bD64TIzQezIpr1X+eh5NYkNxw==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.2.0.tgz", + "integrity": "sha512-+B5TNzj/fRZzVW3z8UUJOkNx15+4E0CLuvJmJUA1JUIZFp3rdJ/M2H5r2SqltaVPXL0oIxv/6YK92T9TsFGbFg==" }, "@smithy/smithy-client": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.4.2.tgz", - "integrity": "sha512-ntAFYN51zu3N3mCd95YFcFi/8rmvm//uX+HnK24CRbI6k5Rjackn0JhgKz5zOx/tbNvOpgQIwhSX+1EvEsBLbA==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.0.tgz", + "integrity": "sha512-DDXWHWdimtS3y/Kw1Jo46KQ0ZYsDKcldFynQERUGBPDpkW1lXOTHy491ALHjwfiBQvzsVKVxl5+ocXNIgJuX4g==" }, "@smithy/types": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.10.1.tgz", - "integrity": "sha512-hjQO+4ru4cQ58FluQvKKiyMsFg0A6iRpGm2kqdH8fniyNd2WyanoOsYJfMX/IFLuLxEoW6gnRkNZy1y6fUUhtA==" + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==" }, "@smithy/url-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.3.tgz", - "integrity": "sha512-X1NRA4WzK/ihgyzTpeGvI9Wn45y8HmqF4AZ/FazwAv8V203Ex+4lXqcYI70naX9ETqbqKVzFk88W6WJJzCggTQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==" }, "@smithy/util-base64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz", - "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==" }, "@smithy/util-body-length-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", - "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==" }, "@smithy/util-body-length-node": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", - "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==" }, "@smithy/util-buffer-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", - "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==" }, "@smithy/util-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", - "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==" }, "@smithy/util-defaults-mode-browser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.4.tgz", - "integrity": "sha512-J6XAVY+/g7jf03QMnvqPyU+8jqGrrtXoKWFVOS+n1sz0Lg8HjHJ1ANqaDN+KTTKZRZlvG8nU5ZrJOUL6VdwgcQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.0.tgz", + "integrity": "sha512-2okTdZaCBvOJszAPU/KSvlimMe35zLOKbQpHhamFJmR7t95HSe0K3C92jQPjKY3PmDBD+7iMkOnuW05F5OlF4g==" }, "@smithy/util-defaults-mode-node": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.3.tgz", - "integrity": "sha512-ttUISrv1uVOjTlDa3nznX33f0pthoUlP+4grhTvOzcLhzArx8qHB94/untGACOG3nlf8vU20nI2iWImfzoLkYA==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.0.tgz", + "integrity": "sha512-hfKXnNLmsW9cmLb/JXKIvtuO6Cf4SuqN5PN1C2Ru/TBIws+m1wSgb+A53vo0r66xzB6E82inKG2J7qtwdi+Kkw==" }, "@smithy/util-endpoints": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.4.tgz", - "integrity": "sha512-/qAeHmK5l4yQ4/bCIJ9p49wDe9rwWtOzhPHblu386fwPNT3pxmodgcs9jDCV52yK9b4rB8o9Sj31P/7Vzka1cg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==" }, "@smithy/util-hex-encoding": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", - "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==" }, "@smithy/util-middleware": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.3.tgz", - "integrity": "sha512-/+2fm7AZ2ozl5h8wM++ZP0ovE9/tiUUAHIbCfGfb3Zd3+Dyk17WODPKXBeJ/TnK5U+x743QmA0xHzlSm8I/qhw==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==" }, "@smithy/util-retry": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.3.tgz", - "integrity": "sha512-Kbvd+GEMuozbNUU3B89mb99tbufwREcyx2BOX0X2+qHjq6Gvsah8xSDDgxISDwcOHoDqUWO425F0Uc/QIRhYkg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==" }, "@smithy/util-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.3.tgz", - "integrity": "sha512-HvpEQbP8raTy9n86ZfXiAkf3ezp1c3qeeO//zGqwZdrfaoOpGKQgF2Sv1IqZp7wjhna7pvczWaGUHjcOPuQwKw==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==" }, "@smithy/util-uri-escape": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", - "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==" }, "@smithy/util-utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz", - "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==" }, "@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==" + "version": "20.11.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", + "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==" }, "@types/webidl-conversions": { "version": "7.0.3", diff --git a/packages/webapp/.npm/package/npm-shrinkwrap.json b/packages/webapp/.npm/package/npm-shrinkwrap.json index 1a4c7bcf15..71f05c1202 100644 --- a/packages/webapp/.npm/package/npm-shrinkwrap.json +++ b/packages/webapp/.npm/package/npm-shrinkwrap.json @@ -32,9 +32,9 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==" + "version": "20.11.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", + "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==" }, "@types/qs": { "version": "6.9.12", @@ -278,9 +278,9 @@ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==" }, "http-errors": { "version": "2.0.0", @@ -368,9 +368,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==" }, "negotiator": { "version": "0.6.3", @@ -492,9 +492,9 @@ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" }, "set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==" }, "setprototypeof": { "version": "1.2.0", From 8b496da7c7938b713a3ead4c81b47a3ed97eb18c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 19 Mar 2024 13:42:54 +0100 Subject: [PATCH 26/30] update logs on the cmds to promote new installer --- npm-packages/meteor-installer/cli.js | 2 +- npm-packages/meteor-installer/install.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-packages/meteor-installer/cli.js b/npm-packages/meteor-installer/cli.js index ea3c2034cc..8518f87727 100755 --- a/npm-packages/meteor-installer/cli.js +++ b/npm-packages/meteor-installer/cli.js @@ -4,7 +4,7 @@ const command = process.argv[2]; if (!command) { console.log(` - Usage: meteor-installer + Usage: npx meteor@ Commands: install diff --git a/npm-packages/meteor-installer/install.js b/npm-packages/meteor-installer/install.js index edec50689a..2c0b8aca7f 100644 --- a/npm-packages/meteor-installer/install.js +++ b/npm-packages/meteor-installer/install.js @@ -123,8 +123,8 @@ if (fs.existsSync(startedPath)) { console.log( `If you want to reinstall it, run: - $ meteor-installer uninstall - $ meteor-installer install + $ npx meteor uninstall + $ npx meteor@ install `, ); process.exit(); From 22b2e4ce36ca22c649310e768250ba845b62c018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 19 Mar 2024 13:50:42 +0100 Subject: [PATCH 27/30] default install as the behavior to simplify installation with `npx meteor` --- npm-packages/meteor-installer/cli.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-installer/cli.js b/npm-packages/meteor-installer/cli.js index 8518f87727..7bcc2f9eeb 100755 --- a/npm-packages/meteor-installer/cli.js +++ b/npm-packages/meteor-installer/cli.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -const command = process.argv[2]; +const command = process.argv[2] || 'install'; if (!command) { console.log(` From df77a0251c53cfb88b9c30378b7df70185232044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 19 Mar 2024 14:09:14 +0100 Subject: [PATCH 28/30] bump beta version to publish --- npm-packages/meteor-installer/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 0582374cf8..c533e9675b 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "3.0.0-beta.6", + "version": "3.0.0-beta.7", "description": "Install Meteor", "main": "install.js", "scripts": { From 7f8fa4ec805224119dd51237d6644a004840b7c5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:15:42 -0300 Subject: [PATCH 29/30] add section on how to test meteor 3 using npx --- guide/source/3.0-migration.md | 8 ++++++++ v3-docs/docs/about/install.md | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/guide/source/3.0-migration.md b/guide/source/3.0-migration.md index 946dfcec26..2d62c62561 100644 --- a/guide/source/3.0-migration.md +++ b/guide/source/3.0-migration.md @@ -123,6 +123,14 @@ You can create a new Meteor 3.0 project by running the command below: meteor create my-new-project --release 3.0-beta.6 ``` +or alternatively, you can use `npx` + +If you want to test Meteor v3, you can use the following command to install it: + +```bash +npx meteor@beta +``` + ### How to update from version 2? You can update your Meteor 2.x project by running the command below inside your project folder: diff --git a/v3-docs/docs/about/install.md b/v3-docs/docs/about/install.md index e503b6402f..144d2a2e06 100644 --- a/v3-docs/docs/about/install.md +++ b/v3-docs/docs/about/install.md @@ -13,6 +13,11 @@ You need to install the Meteor command line tool to create, run, and manage your - Node.js version >= 10 and <= 14 is required. - We recommend you using [nvm](https://github.com/nvm-sh/nvm) or [Volta](https://volta.sh/) for managing Node.js versions. +If you want to test Meteor v3 that runs on the latest Node.js version, you can use the following command to install it: + +```bash +npx meteor@beta +``` ### Operating System (OS) {#prereqs-os} From 84ab049ccf298eee60701c8c702a362d931720f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Wed, 20 Mar 2024 14:58:30 +0100 Subject: [PATCH 30/30] fix and provide proper tests of data persistence on async behaviors --- packages/mongo/mongo_livedata_tests.js | 68 +++++++++++++++++++------- 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/packages/mongo/mongo_livedata_tests.js b/packages/mongo/mongo_livedata_tests.js index 86c13fa0ec..121262f559 100644 --- a/packages/mongo/mongo_livedata_tests.js +++ b/packages/mongo/mongo_livedata_tests.js @@ -4278,9 +4278,10 @@ if (Meteor.isServer) { Tinytest.addAsync( 'mongo-livedata - maintained isomorphism on collection operations for both client and server', - async function(test, expect) { + async function (test) { const Collection = new Mongo.Collection( `maintained_col_op_iso${test.runId()}`, + { resolverType: 'stub' } ); await Collection.insertAsync({ _id: 'a' }); @@ -4311,10 +4312,13 @@ Tinytest.addAsync( testAsyncMulti( 'mongo-livedata - collection async operations data persistence', [ - async function(test) { + async function (test) { // Using remote collection const Collection = new Mongo.Collection( `remoteop_persistence${test.runId()}`, + { + resolverType: Meteor.isClient ? 'stub' : 'server', + }, ); await Collection.insertAsync({ _id: 'a' }); @@ -4350,7 +4354,7 @@ testAsyncMulti( return Promise.resolve(); }, - async function(test) { + async function (test) { // Using local collection const Collection = new Mongo.Collection( `localop_persistence${test.runId()}`, @@ -4392,11 +4396,19 @@ testAsyncMulti( return Promise.resolve(); }, - async function(test) { + async function (test) { // Using methods const Collection = new Mongo.Collection( `methodop_persistence${test.runId()}`, ); + Collection.allow({ + insertAsync() { + return true; + }, + insert() { + return true; + }, + }); Meteor.methods({ [`insertMethodPersistence${test.runId()}`]: async () => { @@ -4404,25 +4416,45 @@ testAsyncMulti( }, }); - Meteor.callAsync(`insertMethodPersistence${test.runId()}`); + const promise = Meteor.callAsync( + `insertMethodPersistence${test.runId()}`, + ); - let items = await Collection.find().fetchAsync(); - let itemIds = items.map(_item => _item._id); + let items; + let itemIds; + if (Meteor.isServer) { + await promise; - test.equal(itemIds, ['a']); // temporary data accessible + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); - if (Meteor.isClient) { - return new Promise(resolve => { - Meteor.setTimeout(async () => { - items = await Collection.find().fetchAsync(); - itemIds = items.map(_item => _item._id); - test.equal(itemIds, []); // data IS NOT persisted - resolve(); - }, 100); - }); + test.equal(itemIds, ['a']); // temporary data accessible } - return Promise.resolve(); + if (Meteor.isClient) { + await promise.stubPromise; + + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + + test.equal(itemIds, ['a']); // temporary data accessible + + try { + await promise.serverPromise; + } catch (e) { + // error as no insert method enabled on server + return new Promise(resolve => { + Meteor.setTimeout(async () => { + items = await Collection.find().fetchAsync(); + itemIds = items.map(_item => _item._id); + test.equal(itemIds, []); // data IS NOT persisted + resolve(); + }, 100); + }); + } + } else { + return Promise.resolve(); + } }, ], );