Merge branch 'release-3.0' into update-meteor-vite

This commit is contained in:
Denilson
2024-07-05 10:52:41 -04:00
committed by GitHub
30 changed files with 3287 additions and 1861 deletions

View File

@@ -53,7 +53,7 @@ insensitive duplicates before updates.
{% apibox "Accounts.setUsername" %}
{% apibox "Accounts.addEmail" %}
{% apibox "Accounts.addEmailAsync" %}
By default, an email address is added with `{ verified: false }`. Use
[`Accounts.sendVerificationEmail`](#Accounts-sendVerificationEmail) to send an

4189
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,9 +2,9 @@
"lockfileVersion": 4,
"dependencies": {
"@types/node": {
"version": "20.14.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz",
"integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q=="
"version": "20.14.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
"integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg=="
},
"@types/notp": {
"version": "2.0.5",

View File

@@ -34,9 +34,17 @@ const VALID_CONFIG_KEYS = [
*/
export class AccountsCommon {
constructor(options) {
// Validate config options keys
for (const key of Object.keys(options)) {
if (!VALID_CONFIG_KEYS.includes(key)) {
// TODO Consider just logging a debug message instead to allow for additional keys in the settings here?
throw new Meteor.Error(`Accounts.config: Invalid key: ${key}`);
}
}
// Currently this is read directly by packages like accounts-password
// and accounts-ui-unstyled.
this._options = {};
this._options = options || {};
// Note that setting this.connection = null causes this.users to be a
// LocalCollection, which is not what we want.
@@ -274,15 +282,15 @@ export class AccountsCommon {
}
// Validate config options keys
Object.keys(options).forEach(key => {
for (const key of Object.keys(options)) {
if (!VALID_CONFIG_KEYS.includes(key)) {
// TODO Consider just logging a debug message instead to allow for additional keys in the settings here?
throw new Meteor.Error(`Accounts.config: Invalid key: ${key}`);
}
});
}
// set values in Accounts._options
VALID_CONFIG_KEYS.forEach(key => {
for (const key of VALID_CONFIG_KEYS) {
if (key in options) {
if (key in this._options) {
if (key !== 'collection' && (Meteor.isTest && key !== 'clientStorage')) {
@@ -291,7 +299,7 @@ export class AccountsCommon {
}
this._options[key] = options[key];
}
});
}
if (options.collection && options.collection !== this.users._name && options.collection !== this.users) {
this.users = this._initializeCollection(options);

View File

@@ -1,5 +1,5 @@
import crypto from 'crypto';
import { Meteor } from 'meteor/meteor'
import { Meteor } from 'meteor/meteor';
import {
AccountsCommon,
EXPIRE_TOKENS_INTERVAL_MS,

View File

@@ -4,9 +4,9 @@ import { AccountsServer } from "./accounts_server.js";
* @namespace Accounts
* @summary The namespace for all server-side accounts-related methods.
*/
Accounts = new AccountsServer(Meteor.server, Meteor.settings.packages?.accounts || {});
Accounts = new AccountsServer(Meteor.server, { ...Meteor.settings.packages?.accounts, ...Meteor.settings.packages?.['accounts-base'] });
// TODO[FIBERS]: I need TLA
Accounts.init().then()
Accounts.init().then();
// Users table. Don't use the normal autopublish, since we want to hide
// some fields. Code to autopublish this is in accounts_server.js.
// XXX Allow users to configure this collection name.

View File

@@ -830,7 +830,7 @@ Meteor.methods(
});
/**
* @summary Add an email asynchronously address for a user. Use this instead of directly
* @summary Asynchronously add an email address for a user. Use this instead of directly
* updating the database. The operation will fail if there is a different user
* with an email only differing in case. If the specified user has an existing
* email only differing in case however, we replace it.
@@ -841,8 +841,7 @@ Meteor.methods(
* be marked as verified. Defaults to false.
* @importFromPackage accounts-base
*/
Accounts.addEmail =
async (userId, newEmail, verified) => {
Accounts.addEmailAsync = async (userId, newEmail, verified) => {
check(userId, NonEmptyString);
check(newEmail, NonEmptyString);
check(verified, Match.Optional(Boolean));
@@ -851,9 +850,8 @@ Accounts.addEmail =
verified = false;
}
const user = await getUserById(userId, {fields: {emails: 1}});
if (!user)
throw new Meteor.Error(403, "User not found");
const user = await getUserById(userId, { fields: { emails: 1 } });
if (!user) throw new Meteor.Error(403, "User not found");
// Allow users to change their own email to a version with a different case
@@ -863,32 +861,35 @@ Accounts.addEmail =
// then we are OK and (2) if this would create a conflict with other users
// then there would already be a case-insensitive duplicate and we can't fix
// that in this code anyway.
const caseInsensitiveRegExp =
new RegExp(`^${Meteor._escapeRegExp(newEmail)}$`, 'i');
const caseInsensitiveRegExp = new RegExp(
`^${Meteor._escapeRegExp(newEmail)}$`,
"i"
);
// TODO: This is a linear search. If we have a lot of emails.
// we should consider using a different data structure.
const updatedEmail =
async (emails = [], _id) => {
let updated = false;
for (const email of emails) {
if (caseInsensitiveRegExp.test(email.address)) {
await Meteor.users.updateAsync({
_id: _id,
'emails.address': email.address
}, {
$set: {
'emails.$.address': newEmail,
'emails.$.verified': verified
}
});
updated = true;
const updatedEmail = async (emails = [], _id) => {
let updated = false;
for (const email of emails) {
if (caseInsensitiveRegExp.test(email.address)) {
await Meteor.users.updateAsync(
{
_id: _id,
"emails.address": email.address,
},
{
$set: {
"emails.$.address": newEmail,
"emails.$.verified": verified,
},
}
}
return updated;
);
updated = true;
}
const didUpdateOwnEmail =
await updatedEmail(user.emails, user._id);
}
return updated;
};
const didUpdateOwnEmail = await updatedEmail(user.emails, user._id);
// In the other updates below, we have to do another call to
// checkForCaseInsensitiveDuplicates to make sure that no conflicting values
@@ -902,32 +903,45 @@ Accounts.addEmail =
}
// Perform a case insensitive check for duplicates before update
await Accounts._checkForCaseInsensitiveDuplicates('emails.address',
'Email', newEmail, user._id);
await Accounts._checkForCaseInsensitiveDuplicates(
"emails.address",
"Email",
newEmail,
user._id
);
await Meteor.users.updateAsync({
_id: user._id
}, {
$addToSet: {
emails: {
address: newEmail,
verified: verified
}
await Meteor.users.updateAsync(
{
_id: user._id,
},
{
$addToSet: {
emails: {
address: newEmail,
verified: verified,
},
},
}
});
);
// Perform another check after update, in case a matching user has been
// inserted in the meantime
try {
await Accounts._checkForCaseInsensitiveDuplicates('emails.address',
'Email', newEmail, user._id);
await Accounts._checkForCaseInsensitiveDuplicates(
"emails.address",
"Email",
newEmail,
user._id
);
} catch (ex) {
// Undo update if the check fails
await Meteor.users.updateAsync({_id: user._id},
{$pull: {emails: {address: newEmail}}});
await Meteor.users.updateAsync(
{ _id: user._id },
{ $pull: { emails: { address: newEmail } } }
);
throw ex;
}
}
};
/**
* @summary Remove an email address asynchronously for a user. Use this instead of updating

View File

@@ -1690,10 +1690,10 @@ if (Meteor.isServer) (() => {
});
const newEmail = `${ Random.id() }@turing.com`;
await Accounts.addEmail(userId, newEmail);
await Accounts.addEmailAsync(userId, newEmail);
const thirdEmail = `${ Random.id() }@turing.com`;
await Accounts.addEmail(userId, thirdEmail, true);
await Accounts.addEmailAsync(userId, thirdEmail, true);
const u1 = await Accounts._findUserByQuery({ id: userId })
test.equal(u1.emails, [
{ address: origEmail, verified: false },
@@ -1733,7 +1733,7 @@ if (Meteor.isServer) (() => {
});
const newEmail = `${ Random.id() }@turing.com`;
await Accounts.addEmail(userId, newEmail);
await Accounts.addEmailAsync(userId, newEmail);
const u1 = await Accounts._findUserByQuery({ id: userId })
test.equal(u1.emails, [
{ address: newEmail, verified: false },
@@ -1749,10 +1749,10 @@ if (Meteor.isServer) (() => {
});
const newEmail = `${ Random.id() }@turing.com`;
await Accounts.addEmail(userId, newEmail);
await Accounts.addEmailAsync(userId, newEmail);
const thirdEmail = origEmail.toUpperCase();
await Accounts.addEmail(userId, thirdEmail, true);
await Accounts.addEmailAsync(userId, thirdEmail, true);
const u1 = await Accounts._findUserByQuery({ id: userId })
test.equal(u1.emails, [
{ address: thirdEmail, verified: true },
@@ -1775,7 +1775,7 @@ if (Meteor.isServer) (() => {
const dupEmail = user1Email.toUpperCase();
await test.throwsAsync(
async () => await Accounts.addEmail(userId2, dupEmail),
async () => await Accounts.addEmailAsync(userId2, dupEmail),
/Email already exists/
);
@@ -1797,10 +1797,10 @@ if (Meteor.isServer) (() => {
});
const newEmail = `${ Random.id() }@turing.com`;
await Accounts.addEmail(userId, newEmail);
await Accounts.addEmailAsync(userId, newEmail);
const thirdEmail = `${ Random.id() }@turing.com`;
await Accounts.addEmail(userId, thirdEmail, true);
await Accounts.addEmailAsync(userId, thirdEmail, true);
const u1 = await Accounts._findUserByQuery({ id: userId })
test.equal(u1.emails, [
{ address: origEmail, verified: false },

View File

@@ -121,7 +121,7 @@ export const loadAsyncStubHelpers = () => {
Meteor._setImmediate(() => {
if (hasStub && !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`
`Method stub (${name}) took too long and could cause unexpected problems. Learn more at https://v3-migration-docs.meteor.com/breaking-changes/call-x-callAsync.html#considerations-for-effective-use-of-meteor-callasync`
);
}
});

View File

@@ -613,6 +613,11 @@ export class Connection {
try {
stubOptions.stubReturnValue = DDP._CurrentMethodInvocation
.withValue(invocation, stubInvocation);
if (Meteor._isPromise(stubOptions.stubReturnValue)) {
Meteor._debug(
`Method ${name}: Calling a method that has an async method stub with call/apply can lead to unexpected behaviors. Use callAsync/applyAsync instead.`
);
}
} catch (e) {
stubOptions.exception = e;
}

View File

@@ -1203,7 +1203,7 @@ Object.assign(Subscription.prototype, {
// Both conventional and async publish handler functions are supported.
// If an object is returned with a then() function, it is either a promise
// or thenable and will be resolved asynchronously.
const isThenable =
const isThenable =
resultOrThenable && typeof resultOrThenable.then === 'function';
if (isThenable) {
try {

View File

@@ -2,9 +2,9 @@
"lockfileVersion": 4,
"dependencies": {
"@types/node": {
"version": "20.14.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz",
"integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q=="
"version": "20.14.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
"integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg=="
},
"@types/nodemailer": {
"version": "6.4.14",

View File

@@ -35,30 +35,19 @@ EVp.getOrNullIfOutsideFiber = function () {
* @returns {any} The return value of the function
*/
EVp.withValue = function (value, func) {
// WARNING: Do not change the behavior of this function.
// If you compare this function to it's version in the server-side, you'll see that there we handle async results.
// In the client we don't need to do this. If we try to, it can lead to problems like this:
// https://github.com/meteor/meteor/pull/13198#issuecomment-2181254734/.
var saved = currentValues[this.slot];
try {
currentValues[this.slot] = value;
var ret = func();
var isPromise = Meteor._isPromise(ret);
if (isPromise) {
var self = this;
return ret.then(function (res) {
currentValues[self.slot] = saved;
return res
});
}
} catch (e) {
throw e;
return func();
} finally {
if (!isPromise) {
currentValues[this.slot] = saved;
}
currentValues[this.slot] = saved;
}
return ret;
};
EVp._set = function (context) {

View File

@@ -164,13 +164,18 @@ Meteor.bindEnvironment = (func, onException, _this) => {
var runWithEnvironment = function () {
return Meteor._runAsync(
async () => {
() => {
let ret;
try {
if (currentSlot) {
Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, dynamics);
}
ret = await func.apply(_this, args);
ret = func.apply(_this, args);
// Using this strategy to be consistent between client and server and stop always returning a promise from the server
if (Meteor._isPromise(ret)) {
ret = ret.catch(onException);
}
} catch (e) {
onException(e);
}

View File

@@ -88,7 +88,7 @@ if (Meteor.isServer) {
Tinytest.addAsync("environment - bindEnvironment", async function (test) {
var raised_f;
var f = await CurrentFoo.withValue(17, function () {
var f = CurrentFoo.withValue(17, function () {
return Meteor.bindEnvironment(function (flag) {
test.equal(CurrentFoo.get(), 17);
if (flag)
@@ -100,13 +100,13 @@ Tinytest.addAsync("environment - bindEnvironment", async function (test) {
});
});
var test_f = async function () {
var test_f = function () {
raised_f = null;
test.equal(await f(false), 12);
test.equal(f(false), 12);
test.equal(raised_f, null);
test.equal(await f(true), undefined);
test.equal(f(true), undefined);
test.equal(raised_f, "test", 'raised_f should be "test"');
};
@@ -117,9 +117,9 @@ Tinytest.addAsync("environment - bindEnvironment", async function (test) {
// Inside a withValue
await CurrentFoo.withValue(22, async function () {
CurrentFoo.withValue(22, function () {
test.equal(CurrentFoo.get(), 22);
await test_f();
test_f();
test.equal(CurrentFoo.get(), 22);
});
@@ -228,4 +228,4 @@ Tinytest.add('environment - consistent ev value', function (test) {
let ev1 = new Meteor.EnvironmentVariable();
const ret = ev1.withValue(10, () => 5);
test.equal(ret, 5);
})
})

View File

@@ -32,9 +32,9 @@
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="
},
"acorn": {
"version": "8.11.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
"integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw=="
},
"buffer-from": {
"version": "1.1.2",

View File

@@ -12,9 +12,9 @@
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
},
"acorn": {
"version": "8.11.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="
"version": "8.12.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg=="
},
"estree-walker": {
"version": "2.0.2",

View File

@@ -4321,25 +4321,14 @@ testAsyncMulti(
},
);
// Using remote collection
await Collection.insertAsync({ _id: 'a' });
await Collection.updateAsync({ _id: 'a' }, { $set: { num: 1 } });
const insertedId = await Collection.insertAsync({ num: 2 });
await Collection.insertAsync({ _id: 'b' });
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 });
items = await Collection.find().fetchAsync();
itemIds = items.map(_item => _item._id);
test.equal(itemIds, ['a']); // temporary data accessible
test.equal(itemIds, ['a', 'b']);
if (Meteor.isClient) {
return waitUntil(async () => {

View File

@@ -1,175 +1,169 @@
{
"lockfileVersion": 4,
"dependencies": {
"@aws-crypto/ie11-detection": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
"integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}
}
},
"@aws-crypto/sha256-browser": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
"integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
"integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
"@smithy/is-array-buffer": {
"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/util-buffer-from": {
"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-utf8": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
"integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="
}
}
},
"@aws-crypto/sha256-js": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
"integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}
}
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
"integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA=="
},
"@aws-crypto/supports-web-crypto": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
"integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}
}
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
"integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg=="
},
"@aws-crypto/util": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
"integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
"integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
"@smithy/is-array-buffer": {
"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/util-buffer-from": {
"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-utf8": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
"integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="
}
}
},
"@aws-sdk/client-cognito-identity": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.592.0.tgz",
"integrity": "sha512-mk3JOBsk5hlrLTZFuoGIhFKFflOdxqMKmOgyUFs5+gBLuH0/lN3wNWJxk+BiY1nHzkxhBND1hDHc5dvZRugBJA=="
"version": "3.606.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.606.0.tgz",
"integrity": "sha512-CJ3kovUg7HAn3trqo0WxVw3PJoaHxiGU1U+Ok8Vx/sL81+auyyiasT09M/NcchRqwAooKvUi44sVD0ih7Zi9Nw=="
},
"@aws-sdk/client-sso": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz",
"integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz",
"integrity": "sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw=="
},
"@aws-sdk/client-sso-oidc": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.592.0.tgz",
"integrity": "sha512-11Zvm8nm0s/UF3XCjzFRpQU+8FFVW5rcr3BHfnH6xAe5JEoN6bJN/n+wOfnElnjek+90hh+Qc7s141AMrCjiiw=="
"version": "3.606.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.606.0.tgz",
"integrity": "sha512-gL1FHPS6hwgMNS/A+Qh5bUyHOeRVOqdb7c6+i+9gR3wtGvt2lvoSm8w5DhS08Xiiacz2AqYRDEapp0xuyCrbBQ=="
},
"@aws-sdk/client-sts": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.592.0.tgz",
"integrity": "sha512-KUrOdszZfcrlpKr4dpdkGibZ/qq3Lnfu1rjv1U+V1QJQ9OuMo9J3sDWpWV9tigNqY0aGllarWH5cJbz9868W/w=="
"version": "3.606.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.606.0.tgz",
"integrity": "sha512-b11mAhjrkm3MMiAPoMGcmd6vsaz2120lg8rHG/NZCo9vB1K6Kc7WP+a1Q05TRMseer2egTtpWJfn44aVO97VqA=="
},
"@aws-sdk/core": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz",
"integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.598.0.tgz",
"integrity": "sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g=="
},
"@aws-sdk/credential-provider-cognito-identity": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.592.0.tgz",
"integrity": "sha512-uHiMPCkFhZOhlSfKgVqPhMdruiOuVkLUn07gQqvxHYhFKkEOPV+6BZbPKBwBTXr8TIREztQzCMPswa5pGk2zbQ=="
"version": "3.606.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.606.0.tgz",
"integrity": "sha512-4wGvXilFLkozs4/dMnn9NvxZbL9oyyReoF9aR3kGUZ0QVO8cCBp/Zkr8IXZifhVBo9/esJdMFnR9lEXR7Yuleg=="
},
"@aws-sdk/credential-provider-env": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.587.0.tgz",
"integrity": "sha512-Hyg/5KFECIk2k5o8wnVEiniV86yVkhn5kzITUydmNGCkXdBFHMHRx6hleQ1bqwJHbBskyu8nbYamzcwymmGwmw=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz",
"integrity": "sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w=="
},
"@aws-sdk/credential-provider-http": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.587.0.tgz",
"integrity": "sha512-Su1SRWVRCuR1e32oxX3C1V4c5hpPN20WYcRfdcr2wXwHqSvys5DrnmuCC+JoEnS/zt3adUJhPliTqpfKgSdMrA=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz",
"integrity": "sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g=="
},
"@aws-sdk/credential-provider-ini": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.592.0.tgz",
"integrity": "sha512-3kG6ngCIOPbLJZZ3RV+NsU7HVK6vX1+1DrPJKj9fVlPYn7IXsk8NAaUT5885yC7+jKizjv0cWLrLKvAJV5gfUA=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz",
"integrity": "sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA=="
},
"@aws-sdk/credential-provider-node": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.592.0.tgz",
"integrity": "sha512-BguihBGTrEjVBQ07hm+ZsO29eNJaxwBwUZMftgGAm2XcMIEClNPfm5hydxu2BmA4ouIJQJ6nG8pNYghEumM+Aw=="
"version": "3.600.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz",
"integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw=="
},
"@aws-sdk/credential-provider-process": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.587.0.tgz",
"integrity": "sha512-V4xT3iCqkF8uL6QC4gqBJg/2asd/damswP1h9HCfqTllmPWzImS+8WD3VjgTLw5b0KbTy+ZdUhKc0wDnyzkzxg=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz",
"integrity": "sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA=="
},
"@aws-sdk/credential-provider-sso": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz",
"integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz",
"integrity": "sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA=="
},
"@aws-sdk/credential-provider-web-identity": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.587.0.tgz",
"integrity": "sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz",
"integrity": "sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w=="
},
"@aws-sdk/credential-providers": {
"version": "3.592.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.592.0.tgz",
"integrity": "sha512-fHAt001Aemiy9p8VtLKWiPQ36g1YgiLC1pm31W+WmKxU663dbt2yYTIAyVOB1nQC7HrVCOZEg2FU0TtuZt/wXQ=="
"version": "3.606.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.606.0.tgz",
"integrity": "sha512-34hswGNDWBFvp4Hi4Gv9DIJ4Ks0Nbg8w3emFsPVHLqqI6X2Wd0hJTf+mi1kMhy/AQXt5LisKLw6wjNIKD2+KGg=="
},
"@aws-sdk/middleware-host-header": {
"version": "3.577.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.577.0.tgz",
"integrity": "sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz",
"integrity": "sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA=="
},
"@aws-sdk/middleware-logger": {
"version": "3.577.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.577.0.tgz",
"integrity": "sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz",
"integrity": "sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q=="
},
"@aws-sdk/middleware-recursion-detection": {
"version": "3.577.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.577.0.tgz",
"integrity": "sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz",
"integrity": "sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ=="
},
"@aws-sdk/middleware-user-agent": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.587.0.tgz",
"integrity": "sha512-SyDomN+IOrygLucziG7/nOHkjUXES5oH5T7p8AboO8oakMQJdnudNXiYWTicQWO52R51U6CR27rcMPTGeMedYA=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz",
"integrity": "sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg=="
},
"@aws-sdk/region-config-resolver": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.587.0.tgz",
"integrity": "sha512-93I7IPZtulZQoRK+O20IJ4a1syWwYPzoO2gc3v+/GNZflZPV3QJXuVbIm0pxBsu0n/mzKGUKqSOLPIaN098HcQ=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz",
"integrity": "sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw=="
},
"@aws-sdk/token-providers": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.587.0.tgz",
"integrity": "sha512-ULqhbnLy1hmJNRcukANBWJmum3BbjXnurLPSFXoGdV0llXYlG55SzIla2VYqdveQEEjmsBuTZdFvXAtNpmS5Zg=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz",
"integrity": "sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA=="
},
"@aws-sdk/types": {
"version": "3.577.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz",
"integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.598.0.tgz",
"integrity": "sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ=="
},
"@aws-sdk/util-endpoints": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.587.0.tgz",
"integrity": "sha512-8I1HG6Em8wQWqKcRW6m358mqebRVNpL8XrrEoT4In7xqkKkmYtHRNVYP6lcmiQh5pZ/c/FXu8dSchuFIWyEtqQ=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz",
"integrity": "sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ=="
},
"@aws-sdk/util-locate-window": {
"version": "3.568.0",
@@ -177,19 +171,14 @@
"integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig=="
},
"@aws-sdk/util-user-agent-browser": {
"version": "3.577.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.577.0.tgz",
"integrity": "sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz",
"integrity": "sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw=="
},
"@aws-sdk/util-user-agent-node": {
"version": "3.587.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.587.0.tgz",
"integrity": "sha512-Pnl+DUe/bvnbEEDHP3iVJrOtE3HbFJBPgsD6vJ+ml/+IYk1Eq49jEG+EHZdNTPz3SDG0kbp2+7u41MKYJHR/iQ=="
},
"@aws-sdk/util-utf8-browser": {
"version": "3.259.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
"integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw=="
"version": "3.598.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz",
"integrity": "sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A=="
},
"@mongodb-js/saslprep": {
"version": "1.1.7",
@@ -197,39 +186,39 @@
"integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q=="
},
"@smithy/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA=="
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz",
"integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ=="
},
"@smithy/config-resolver": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.1.tgz",
"integrity": "sha512-hbkYJc20SBDz2qqLzttjI/EqXemtmWk0ooRznLsiXp3066KQRTvuKHa7U4jCZCJq6Dozqvy0R1/vNESC9inPJg=="
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.4.tgz",
"integrity": "sha512-VwiOk7TwXoE7NlNguV/aPq1hFH72tqkHCw8eWXbr2xHspRyyv9DLpLXhq+Ieje+NwoqXrY0xyQjPXdOE6cGcHA=="
},
"@smithy/core": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.0.tgz",
"integrity": "sha512-ygLZSSKgt9bR8HAxR9mK+U5obvAJBr6zlQuhN5soYWx/amjDoQN4dTkydTypgKe6rIbUjTILyLU+W5XFwXr4kg=="
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.4.tgz",
"integrity": "sha512-qdY3LpMOUyLM/gfjjMQZui+UTNS7kBRDWlvyIhVOql5dn2J3isk9qUTBtQ1CbDH8MTugHis1zu3h4rH+Qmmh4g=="
},
"@smithy/credential-provider-imds": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.0.tgz",
"integrity": "sha512-q4A4d38v8pYYmseu/jTS3Z5I3zXlEOe5Obi+EJreVKgSVyWUHOd7/yaVCinC60QG4MRyCs98tcxBH1IMC0bu7Q=="
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.3.tgz",
"integrity": "sha512-U1Yrv6hx/mRK6k8AncuI6jLUx9rn0VVSd9NPEX6pyYFBfkSkChOc/n4zUb8alHUVg83TbI4OdZVo1X0Zfj3ijA=="
},
"@smithy/fetch-http-handler": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.1.tgz",
"integrity": "sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg=="
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.0.tgz",
"integrity": "sha512-vFvDxMrc6sO5Atec8PaISckMcAwsCrRhYxwUylg97bRT2KZoumOF7qk5+6EVUtuM1IG9AJV5aqXnHln9ZdXHpg=="
},
"@smithy/hash-node": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.0.tgz",
"integrity": "sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz",
"integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw=="
},
"@smithy/invalid-dependency": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz",
"integrity": "sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz",
"integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw=="
},
"@smithy/is-array-buffer": {
"version": "3.0.0",
@@ -237,89 +226,89 @@
"integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ=="
},
"@smithy/middleware-content-length": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz",
"integrity": "sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz",
"integrity": "sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ=="
},
"@smithy/middleware-endpoint": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.1.tgz",
"integrity": "sha512-lQ/UOdGD4KM5kLZiAl0q8Qy3dPbynvAXKAdXnYlrA1OpaUwr+neSsVokDZpY6ZVb5Yx8jnus29uv6XWpM9P4SQ=="
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.4.tgz",
"integrity": "sha512-whUJMEPwl3ANIbXjBXZVdJNgfV2ZU8ayln7xUM47rXL2txuenI7jQ/VFFwCzy5lCmXScjp6zYtptW5Evud8e9g=="
},
"@smithy/middleware-retry": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.3.tgz",
"integrity": "sha512-Wve1qzJb83VEU/6q+/I0cQdAkDnuzELC6IvIBwDzUEiGpKqXgX1v10FUuZGbRS6Ov/P+HHthcAoHOJZQvZNAkA=="
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.7.tgz",
"integrity": "sha512-f5q7Y09G+2h5ivkSx5CHvlAT4qRR3jBFEsfXyQ9nFNiWQlr8c48blnu5cmbTQ+p1xmIO14UXzKoF8d7Tm0Gsjw=="
},
"@smithy/middleware-serde": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz",
"integrity": "sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz",
"integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA=="
},
"@smithy/middleware-stack": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz",
"integrity": "sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz",
"integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA=="
},
"@smithy/node-config-provider": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.0.tgz",
"integrity": "sha512-ngfB8QItUfTFTfHMvKuc2g1W60V1urIgZHqD1JNFZC2tTWXahqf2XvKXqcBS7yZqR7GqkQQZy11y/lNOUWzq7Q=="
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.3.tgz",
"integrity": "sha512-rxdpAZczzholz6CYZxtqDu/aKTxATD5DAUDVj7HoEulq+pDSQVWzbg0btZDlxeFfa6bb2b5tUvgdX5+k8jUqcg=="
},
"@smithy/node-http-handler": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz",
"integrity": "sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ=="
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.1.tgz",
"integrity": "sha512-L71NLyPeP450r2J/mfu1jMc//Z1YnqJt2eSNw7uhiItaONnBLDA68J5jgxq8+MBDsYnFwNAIc7dBG1ImiWBiwg=="
},
"@smithy/property-provider": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.0.tgz",
"integrity": "sha512-Tj3+oVhqdZgemjCiWjFlADfhvLF4C/uKDuKo7/tlEsRQ9+3emCreR2xndj970QSRSsiCEU8hZW3/8JQu+n5w4Q=="
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
"integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g=="
},
"@smithy/protocol-http": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.0.tgz",
"integrity": "sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ=="
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.3.tgz",
"integrity": "sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw=="
},
"@smithy/querystring-builder": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz",
"integrity": "sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz",
"integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw=="
},
"@smithy/querystring-parser": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz",
"integrity": "sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz",
"integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ=="
},
"@smithy/service-error-classification": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz",
"integrity": "sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz",
"integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ=="
},
"@smithy/shared-ini-file-loader": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.0.tgz",
"integrity": "sha512-dAM7wSX0NR3qTNyGVN/nwwpEDzfV9T/3AN2eABExWmda5VqZKSsjlINqomO5hjQWGv+IIkoXfs3u2vGSNz8+Rg=="
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.3.tgz",
"integrity": "sha512-Z8Y3+08vgoDgl4HENqNnnzSISAaGrF2RoKupoC47u2wiMp+Z8P/8mDh1CL8+8ujfi2U5naNvopSBmP/BUj8b5w=="
},
"@smithy/signature-v4": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.0.0.tgz",
"integrity": "sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA=="
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.2.tgz",
"integrity": "sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA=="
},
"@smithy/smithy-client": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.1.tgz",
"integrity": "sha512-tj4Ku7MpzZR8cmVuPcSbrLFVxmptWktmJMwST/uIEq4sarabEdF8CbmQdYB7uJ/X51Qq2EYwnRsoS7hdR4B7rA=="
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.5.tgz",
"integrity": "sha512-x9bL9Mx2CT2P1OiUlHM+ZNpbVU6TgT32f9CmTRzqIHA7M4vYrROCWEoC3o4xHNJASoGd4Opos3cXYPgh+/m4Ww=="
},
"@smithy/types": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz",
"integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw=="
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
"integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA=="
},
"@smithy/url-parser": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.0.tgz",
"integrity": "sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz",
"integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A=="
},
"@smithy/util-base64": {
"version": "3.0.0",
@@ -347,19 +336,19 @@
"integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ=="
},
"@smithy/util-defaults-mode-browser": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.3.tgz",
"integrity": "sha512-3DFON2bvXJAukJe+qFgPV/rorG7ZD3m4gjCXHD1V5z/tgKQp5MCTCLntrd686tX6tj8Uli3lefWXJudNg5WmCA=="
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.7.tgz",
"integrity": "sha512-Q2txLyvQyGfmjsaDbVV7Sg8psefpFcrnlGapDzXGFRPFKRBeEg6OvFK8FljqjeHSaCZ6/UuzQExUPqBR/2qlDA=="
},
"@smithy/util-defaults-mode-node": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.3.tgz",
"integrity": "sha512-D0b8GJXecT00baoSQ3Iieu3k3mZ7GY8w1zmg8pdogYrGvWJeLcIclqk2gbkG4K0DaBGWrO6v6r20iwIFfDYrmA=="
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.7.tgz",
"integrity": "sha512-F4Qcj1fG6MGi2BSWCslfsMSwllws/WzYONBGtLybyY+halAcXdWhcew+mej8M5SKd5hqPYp4f7b+ABQEaeytgg=="
},
"@smithy/util-endpoints": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.1.tgz",
"integrity": "sha512-ZRT0VCOnKlVohfoABMc8lWeQo/JEFuPWctfNRXgTHbyOVssMOLYFUNWukxxiHRGVAhV+n3c0kPW+zUqckjVPEA=="
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.4.tgz",
"integrity": "sha512-ZAtNf+vXAsgzgRutDDiklU09ZzZiiV/nATyqde4Um4priTmasDH+eLpp3tspL0hS2dEootyFMhu1Y6Y+tzpWBQ=="
},
"@smithy/util-hex-encoding": {
"version": "3.0.0",
@@ -367,19 +356,19 @@
"integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ=="
},
"@smithy/util-middleware": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.0.tgz",
"integrity": "sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz",
"integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw=="
},
"@smithy/util-retry": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.0.tgz",
"integrity": "sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g=="
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz",
"integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w=="
},
"@smithy/util-stream": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.1.tgz",
"integrity": "sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA=="
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.5.tgz",
"integrity": "sha512-xC3L5PKMAT/Bh8fmHNXP9sdQ4+4aKVUU3EEJ2CF/lLk7R+wtMJM+v/1B4en7jO++Wa5spGzFDBCl0QxgbUc5Ug=="
},
"@smithy/util-uri-escape": {
"version": "3.0.0",
@@ -392,9 +381,9 @@
"integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA=="
},
"@types/node": {
"version": "20.14.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz",
"integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q=="
"version": "20.14.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
"integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg=="
},
"@types/webidl-conversions": {
"version": "7.0.3",

View File

@@ -17,9 +17,9 @@
"integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ=="
},
"@types/express-serve-static-core": {
"version": "4.19.3",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz",
"integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg=="
"version": "4.19.5",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
"integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg=="
},
"@types/http-errors": {
"version": "2.0.4",
@@ -32,9 +32,9 @@
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
},
"@types/node": {
"version": "20.14.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz",
"integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q=="
"version": "20.14.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
"integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg=="
},
"@types/qs": {
"version": "6.9.15",
@@ -367,11 +367,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"nan": {
"version": "2.20.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
"integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw=="
},
"negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -383,9 +378,9 @@
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="
},
"object-inspect": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
"integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g=="
},
"on-finished": {
"version": "2.4.1",
@@ -422,11 +417,6 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
"posix": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/posix/-/posix-4.2.0.tgz",
"integrity": "sha512-JbxfT0Fxy/SG10LSkKX1C75iULYfAJqYCwwmM6J0+zh2vl/bE51CqaqvSpdZWg7YAwiuDIoBI6j7in+n3GgXSw=="
},
"promise-polyfill": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz",

View File

@@ -1274,6 +1274,11 @@ class Target {
continue;
}
if (await resource.hasPendingErrors?.()) {
await resource.reportPendingErrors();
break;
}
if (['js', 'css'].includes(resource.type)) {
if (resource.type === 'css' && ! isWeb) {
// XXX might be nice to throw an error here, but then we'd
@@ -3285,17 +3290,13 @@ async function bundle({
buildMode: buildOptions.buildMode
});
try {
await client.make({
packages: [app],
minifyMode: minifyMode,
minifiers: options.minifiers || [],
addCacheBusters: true,
onJsOutputFiles,
});
} catch (e) {
// it's fine to fail here, but we don't want to propagate the error
}
await client.make({
packages: [app],
minifyMode: minifyMode,
minifiers: options.minifiers || [],
addCacheBusters: true,
onJsOutputFiles,
});
return client;
});

View File

@@ -13,7 +13,7 @@ import { pluginVersionsFromStarManifest } from '../cordova/index.js';
import { closeAllWatchers } from "../fs/safe-watcher";
import { eachline } from "../utils/eachline";
import { loadIsopackage } from '../tool-env/isopackets.js';
import { once , EventEmitter, on } from "events"
// Parse out s as if it were a bash command line.
var bashParse = function (s) {
if (s.search("\"") !== -1 || s.search("'") !== -1) {
@@ -405,47 +405,40 @@ Object.assign(AppRunner.prototype, {
self.isRunning = true;
global.asyncLocalStorage.run({}, () =>
self._runApp().catch((e) => self._resolvePromise("start", e))
self._runApp()
.catch((e) => {
// There was an unexpected error when building the app
// This is not recoverable, so we turn it into an unhandled exception
// and crash.
setTimeout(() => {
throw e;
});
})
);
await self.startPromise;
self.startPromise = null;
},
_findCachedEE: function (name) {
if (!this._promiseResolvers[name]) {
this._promiseResolvers[name] = new EventEmitter();
}
return this._promiseResolvers[name];
// Creates a promise that can be resolved later by calling _resolvePromise
_makePromise (name) {
return new Promise((resolve) => {
this._promiseResolvers[name] = resolve;
});
},
/**
* @param name
* @return {Promise<[any]>}
* @private
*/
_makePromise: function (name) {
var self = this;
const ee = self._findCachedEE(name);
return once(ee, name);
},
_resolvePromise: function (name, value) {
const ee = this._promiseResolvers[name];
if (ee) {
ee.emit(name, value);
// Resolves a promise already created by _makePromise
_resolvePromise (name, value) {
const resolve = this._promiseResolvers[name];
if (resolve) {
this._promiseResolvers[name] = null;
}
if (value instanceof Error) {
throw value;
resolve(value);
}
},
_cleanUpPromises: function () {
if (this._promiseResolvers) {
_.each(this._promiseResolvers, (ee,name) => {
if (ee) {
ee.emit(name, null);
}
Object.values(this._promiseResolvers).forEach(resolve => {
resolve && resolve();
});
this._promiseResolvers = null;
}
@@ -469,8 +462,10 @@ Object.assign(AppRunner.prototype, {
// The existence of this promise makes the fiber break out of its loop.
self.exitPromise = self._makePromise("exit");
self._resolvePromise("run", { outcome: 'stopped' });
self._resolvePromise("watch");
if (self._beforeStartPromise) {
// If we stopped before mongod started (eg, due to mongod startup
// failure), unblock the runner fiber from waiting for mongod to start.
@@ -515,6 +510,7 @@ Object.assign(AppRunner.prototype, {
// it even if we refreshed previously, since that might have been a
// little while ago.
catalog.triedToRefreshRecently = false;
// If this isn't the first time we've run, we need to reset the project
// context since everything we have cached may have changed.
// XXX We can try to be a little less conservative here:
@@ -535,7 +531,9 @@ Object.assign(AppRunner.prototype, {
// shown from the previous solution.
preservePackageMap: true
});
var messages = await buildmessage.capture(() => self.projectContext.readProjectMetadata());
var messages = await buildmessage.capture(() => {
return self.projectContext.readProjectMetadata()
});
if (messages.hasMessages()) {
return {
runResult: {
@@ -754,11 +752,12 @@ Object.assign(AppRunner.prototype, {
});
if (options.firstRun && self._beforeStartPromise) {
var [stopped] = await self._beforeStartPromise;
if (stopped) {
return true;
}
var stopped = await self._beforeStartPromise;
if (stopped) {
return true;
}
}
await appProcess.start();
function maybePrintLintWarnings(bundleResult) {
@@ -811,7 +810,7 @@ Object.assign(AppRunner.prototype, {
}
var setupClientWatcher = function () {
clientWatcher && clientWatcher.stop();
clientWatcher && clientWatcher.stop();
clientWatcher = new watch.Watcher({
watchSet: bundleResult.clientWatchSet,
onChange: function () {
@@ -891,7 +890,7 @@ Object.assign(AppRunner.prototype, {
// Wait for either the process to exit, or (if watchForChanges) a
// source file to change. Or, for stop() to be called.
var [ret] = await runPromise;
var ret = await runPromise;
try {
while (ret.outcome === 'changed-refreshable') {
if (! canRefreshClient) {
@@ -922,7 +921,7 @@ Object.assign(AppRunner.prototype, {
if (postStartupResult) return postStartupResult;
// Wait until another file changes.
[ret] = await oldPromise;
ret = await oldPromise;
}
} finally {
self.runPromise = null;
@@ -937,8 +936,8 @@ Object.assign(AppRunner.prototype, {
}
await appProcess.stop();
serverWatcher && serverWatcher.stop();
clientWatcher && clientWatcher.stop();
serverWatcher && serverWatcher.stop();
clientWatcher && clientWatcher.stop();
}
return ret;
@@ -1009,7 +1008,7 @@ Object.assign(AppRunner.prototype, {
}
if (self.watchForChanges) {
self.watchPromise = self._makePromise("watch");
self.watchPromise = self._makePromise("watch");
if (!runResult.watchSet) {
throw Error("watching for changes with no watchSet?");

View File

@@ -40,7 +40,9 @@ export default class PuppeteerClient extends Client {
// Note for Travis and CircleCI to run sandbox must be turned off.
// From a security perspective this is not ideal, in the future would be worthwhile
// to configure to include only for CI based setups
this.browser = await this.npmPackageExports.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
this.browser = await this.npmPackageExports.launch({
args: ["--no-sandbox", "--disable-setuid-sandbox"],
});
this.page = await this.browser.newPage();
this.page.goto(`http://${this.host}:${this.port}`);
}

View File

@@ -136,6 +136,14 @@ export default class Matcher {
}
}
async awaitMatchPromise() {
if (!this.matchPromise) {
return;
}
await this.matchPromise;
this.matchPattern = null;
}
async _tryMatch() {
const mp = this.matchPromise;
if (! mp) {

View File

@@ -123,11 +123,14 @@ export default class Run {
}
_endMatchers() {
this.matcherEndPromise =
this.matcherEndPromise || Promise.all([
this.stdoutMatcher.endAsync(),
this.stderrMatcher.endAsync()
]);
const self = this;
async function endFunctions() {
await self.stdoutMatcher.awaitMatchPromise();
await self.stdoutMatcher.endAsync();
await self.stderrMatcher.awaitMatchPromise();
await self.stderrMatcher.endAsync();
}
this.matcherEndPromise = this.matcherEndPromise || endFunctions();
return this.matcherEndPromise;
}

View File

@@ -815,7 +815,7 @@ insensitive duplicates before updates.
<ApiBox name="Accounts.setUsername" />
<ApiBox name="Accounts.addEmail" />
<ApiBox name="Accounts.addEmailAsync" />
By default, an email address is added with `{ verified: false }`. Use
[`Accounts.sendVerificationEmail`](#Accounts-sendVerificationEmail) to send an

View File

@@ -394,6 +394,11 @@ you want to process the method's result as soon as it arrives from the server,
even if the method's writes are not available yet, you can specify an
`onResultReceived` callback to [`Meteor.apply`](#Meteor-apply).
::: warning
Use `Meteor.call` only to call methods that do not have a stub, or have a sync stub. If you want to call methods with an async stub, `Meteor.callAsync` can be used with any method.
:::
<ApiBox name="Meteor.callAsync" />
`Meteor.callAsync` is just like `Meteor.call`, except that it'll return a promise that you need to solve to get the result.
@@ -404,6 +409,10 @@ even if the method's writes are not available yet, you can specify an
passed as an array rather than directly as arguments, and you can specify
options about how the client executes the method.
::: warning
Use `Meteor.apply` only to call methods that do not have a stub, or have a sync stub. If you want to call methods with an async stub, `Meteor.applyAsync` can be used with any method.
:::
<ApiBox name="Meteor.applyAsync" />
`Meteor.applyAsync` is just like `Meteor.apply`, except it is an async function, and it will consider that the stub is async.

View File

@@ -71,5 +71,29 @@ async function someFunction() {
```
## Accounts.addEmail
It is no longer available, you should use `Accounts.addEmailAsync`.
```javascript
import { Accounts } from "meteor/accounts-base";
// Before
Accounts.addEmail(
"userId",
"newEmail",
false, // this param is optional
);
// After
await Accounts.addEmailAsync(
"userId",
"newEmail",
false, // this param is optional
);
```
For a full list of changes check the [changelog](https://v3-docs.meteor.com/history.html#changelog) for Meteor v3

View File

@@ -1,29 +1,26 @@
# Meteor.call x Meteor.callAsync
# Can I still use Meteor.call?
You can, but we recommend you use it only to call methods that do not have a method stub, or when the method stub is synchronous.
In fact, we log a warning message if you use `Meteor.call` to call a method with an async method stub since it can lead to unexpected behavior.
::: tip
`Meteor.callAsync` is the standard for calling methods and supports any method, including those that have an async method stub.
It is recommened to use `Meteor.callAsync` instead of `Meteor.call` because of how our
async API works. `Meteor.call` is still available but it is not recommended to use it, it
can lead to unexpected behavior.
Here is also important to remember what a stub is. A stub is a client-side simulation of the server-side method that runs immediately when the method is invoked, allowing the client to update its state optimistically before receiving the server's response. So, basically any Meteor method that is defined on the client is considered a stub.
Using `Meteor.callAsync` will make your code more predictable and easier to maintain.
:::
# How to migrate from Meteor.call to Meteor.callAsync
Example of how to migrate from `Meteor.call` to `Meteor.callAsync`:
::: code-group
```js [v2-client.jsx]
import { Meteor } from 'meteor/meteor'
import { Meteor } from "meteor/meteor";
let data, error;
Meteor.call('getAllData', (err, res) => { // [!code highlight]
Meteor.call("getAllData", (err, res) => {
// [!code highlight]
if (err) {
error = err;
} else {
@@ -32,105 +29,67 @@ Meteor.call('getAllData', (err, res) => { // [!code highlight]
});
// render data or error
```
```js [v2-server.js]
import { Meteor } from 'meteor/meteor'
import { Mongo } from 'meteor/mongo'
import { Meteor } from "meteor/meteor";
import { Mongo } from "meteor/mongo";
const MyCollection = new Mongo.Collection('myCollection');
const MyCollection = new Mongo.Collection("myCollection");
Meteor.methods({
getAllData() {
return MyCollection.find().fetch(); // [!code highlight]
}
},
});
```
```js [v3-client.jsx]
import { Meteor } from 'meteor/meteor'
import { Meteor } from "meteor/meteor";
try {
const data = await Meteor.callAsync('getAllData'); // [!code highlight]
const data = await Meteor.callAsync("getAllData"); // [!code highlight]
// render data
} catch (error) {
// render error
}
```
```js [v3-server.js]
import { Meteor } from 'meteor/meteor'
import { Mongo } from 'meteor/mongo'
import { Meteor } from "meteor/meteor";
import { Mongo } from "meteor/mongo";
const MyCollection = new Mongo.Collection('myCollection');
const MyCollection = new Mongo.Collection("myCollection");
Meteor.methods({
async getAllData() {
return await MyCollection.find().fetchAsync(); // [!code highlight]
}
},
});
```
:::
## Rules of using `Meteor.callAsync` & `Meteor.call`
# Considerations for Effective Use of Meteor.callAsync
::: tip
It is not recommended to use concurrent calls.
Use `await` for your `Meteor.callAsync`.
:::
When we introduced [async Method stubs](https://guide.meteor.com/2.8-migration.html#callasync) the implementation brought some [limitations](https://github.com/zodern/fix-async-stubs#:~:text=Specifically%2C%20while%20an,used%20in%20stubs).
here are a few examples of cases where you should use `Meteor.callAsync` instead of `Meteor.call`:
Those limitations were addressed in this [package](https://github.com/zodern/fix-async-stubs/) created by [Zodern](https://github.com/zodern), and later, we moved the solution to the [core](https://github.com/meteor/meteor/blob/ecdfd3c610fbe5334eee024702fe0c354944f58b/packages/ddp-client/client/queueStubsHelpers.js).
```js
import { Meteor } from 'meteor/meteor'
But there is no perfect solution to the problems with async stubs.
Meteor.call("someMethod", (err, res) => { // [!code error] This is not ok
if (err) {
console.log(err);
} else {
console.log(res);
}
});
To ensure other code will not run while an async stub is running, async stubs can not use these API's:
- fetch/XMLHttpRequest
- setTimeout or setImmediate
- indexedDB
- web workers
- any other async web api's that wait on macrotasks
Meteor.callAsync('someMethod') // [!code error] This is not ok
.then(data => console.log(data))
.catch(err => console.log(err));
// it is not recommended to use concurrent calls
Promise.all([ // [!code error] This is not ok
Meteor.callAsync('someMethod'),
Meteor.callAsync('someMethod')
]).then(([data1, data2]) => {
console.log(data1, data2);
});
// Ok section
Meteor.call("someMethod", (err, res) => { // [!code ++]
if (err) {
console.log(err);
} else {
console.log(res);
}
});
await Meteor.callAsync('someMethod') // this is ok // [!code ++]
// this is also ok
Meteor.callAsync('someMethod').then(data => { // [!code ++]
console.log(data);
Meteor.callAsync('someMethod').then(data2 => {
console.log(data2);
});
});
Using these API's could allow other code to run before the async stub finishes.
If one of these API's are used, a warning will be shown in the console:
```
Method stub (<method name>) took too long and could cause unexpected problems. Learn more at https://v3-migration-docs.meteor.com/breaking-changes/call-x-callAsync.html#what-are-the-limitations-of-call-meteor-callasync
```

View File

@@ -7,7 +7,8 @@
"test": "echo \"Error: no test specified\" && exit 1",
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",
"docs:preview": "vitepress preview"
"docs:preview": "vitepress preview",
"deploy:preview": "npm run docs:build && npm run docs:preview"
},
"repository": {
"type": "git",